IPB

Помощь по разделу

Сайт S.T.A.L.K.E.R. Inside / [ЗП] Параметры командной строки / Распаковщик ресурсов

>

Скрипты

 
 Орион
сообщение 13.07.2009, 11:30
Сообщение #241


Навий черны у ношьти
***************

Группа: Забанен
Сообщений: 2210
Регистрация: 11.03.2009
Из: Лиманск
Пользователь №: 10251




FAQ

Lua в X-Ray

Список всех функций, переменных, классов и т.п. что используются в Сталкере находится по адресу:
Код
gamedata/scripts/lua_help.script

Для получения файла надо распаковать игру. Можно скачать, в принципе (IMG:style_emoticons/default/smile.gif) Тут =>>Ссылко<<=
Уроки

Пример создания непися скриптами ЛУА. Автор: меченый(стрелок)
Скриптинг на инсайде



Сообщение отредактировал RayTwitty - 09.06.2018, 20:19
Перейти в начало страницы
 
 
 
Ответов
 NanoBot-AMK
сообщение 21.11.2019, 19:30
Сообщение #242


Почти Игроман
*********

Группа: Участник
Сообщений: 629
Регистрация: 10.11.2015
Пользователь №: 22739



Кстати, функции типа object_binder.update(self, delta) можно спокойно исключить, это просто пустышки, которые ничего не делают, кроме времени(2-3 мксек). Исключения только для метода net_spawn, там это нужно.
Перейти в начало страницы
 
 
 Gaz24
сообщение 23.11.2019, 07:39
Сообщение #243


Почти Игрок
**

Группа: Участник
Сообщений: 16
Регистрация: 14.01.2013
Пользователь №: 15612



Хотел добавить свою аи-схему, которая запускается во время боя. Все подключил, добавил эвалуатор, работает. А вот экшен не работает от слова совсем. В чем могла быть ошибка?

Код
Код
local base = xr_evaluators_id.combat_new_base
local eval_on_combat = base + 0

base = xr_actions_id.combat_new_base
local act_on_combat = base + 0
----------------------------------------------------------------------------------------------------------------------
-- модификация xr_combat
----------------------------------------------------------------------------------------------------------------------
class "evaluator_mod_combat" (property_evaluator)

function evaluator_mod_combat:__init(name,storage) super (nil, name)
    self.st = storage
end

function evaluator_mod_combat:evaluate()
    local cond = self.object:motivation_action_manager():current_action_id() == stalker_ids.action_combat_planner
    --news_manager.send_tip(db.actor, self.object:character_name())
    return cond
end

----------------------------------------------------------------------------------------------------------------------
class "action_mod_combat" (action_base)

function action_mod_combat:__init(name,storage) super (nil, name)
    self.st = storage
end

function action_mod_combat:initialize()
    action_base.initialize(self)
    news_manager.send_tip(db.actor, 1)
end

function action_mod_combat:execute()
    action_base.execute(self)
end

function action_mod_combat:finalize()
    action_base.finalize(self)
end

----------------------------------------------------------------------------------------------------------------------
-- binder
----------------------------------------------------------------------------------------------------------------------
function add_to_binder(npc, ini, scheme, section, storage)
    local manager = npc:motivation_action_manager()

    manager:add_evaluator( eval_on_combat, this.evaluator_mod_combat("eval_mod_combat",storage) )

    local action = this.action_mod_combat("act_mod_combat",storage)
    --action:add_precondition(world_property(stalker_ids.property_alive, true))
    manager:add_action(act_on_combat, action)
end


Сообщение отредактировал Gaz24 - 23.11.2019, 08:14
Перейти в начало страницы
 
 
 abramcumner
сообщение 23.11.2019, 10:51
Сообщение #244


Босс
********************

Группа: Участник
Сообщений: 4054
Регистрация: 27.04.2011
Из: Россия
Пользователь №: 14366



Цитата(Gaz24 @ 23.11.2019, 07:39) *
Хотел добавить свою аи-схему, которая запускается во время боя. Все подключил, добавил эвалуатор, работает. А вот экшен не работает от слова совсем. В чем могла быть ошибка?

Он и не должен работать, ты же экшен никак в GOAP не встроил:
1. твоему экшену надо добавить прекондишен и эффект. Например, что он вызывается, когда world_property(eval_on_combat) = true и обещает перевести world_property(eval_on_combat) в false.
2. добавить существующему экшену прекондишен world_property(eval_on_combat) = false, например к stalker_ids.action_combat_planner

Тогда НПЦ попытается в очередной раз попытается решить загадку зоны; увидит, что ему мешает world_property(eval_on_combat) = true(пункт 2); для устранения такой неприятности у него есть твой экшен(пункт 1) и НПЦ запустит твой экшен.

Посмотри на аи-схемы из оригинала или из модов. Там есть оба пункта.
Перейти в начало страницы
 
 
 Gaz24
сообщение 23.11.2019, 11:50
Сообщение #245


Почти Игрок
**

Группа: Участник
Сообщений: 16
Регистрация: 14.01.2013
Пользователь №: 15612



abramcumner, я со своим эвалуатором использовал изначально, поэтому другой запустил. Сделал так, как ты посоветовал. Все равно экшен не срабатывает. Я может плохо написал из-за своего непонимания.

Код
Код
local action = manager:action(stalker_ids.action_combat_planner)
action:add_precondition(world_property(world_property(eval_on_combat), true))
local action = this.action_mod_combat("act_mod_combat",storage)
action:add_effect(world_property(world_property(eval_on_combat), false))
manager:add_action(act_on_combat, action)
Перейти в начало страницы
 
 
 abramcumner
сообщение 23.11.2019, 13:12
Сообщение #246


Босс
********************

Группа: Участник
Сообщений: 4054
Регистрация: 27.04.2011
Из: Россия
Пользователь №: 14366



Gaz24, не так. К сожалению не могу найти статью по аи-схемам в сталкере.

Смотри цель любого сталкера - решить загадку зоны, это world_property(puzzleSolved)=true, такой эффект есть у экшена xr_actions_id.alife. Но у него есть прекондишены: жив, нет врагов и тд. Планировщик НПЦ смотрит, как решить загадку зоны, она решается экшеном stalker_ids.action_alife. У него есть прекондишены, планировщик их проверяет. Если все выполнены, то нпц решает загадку зоны, игра заканчивается(в том самом билде). Если не выполнены, то планировщик ищет экшен, который выполнит прекондишен. У него опять проверяет прекондишены, ищет новый экшен,... В итоге доходит до экшена, который может сейчас выполнить и который ведет к решению загадки зоны.

Например логика и гулаги подрубаются так: к экшену xr_actions_id.alife добавляется прекондишен типа "need_remark"=false, а action_remark умеет переводить need_remark в false. Сначала отыграй анимку, а потом можешь решать загадку зоны.

Теперь по-твоему коду. Ты combat_planner`у добавил прекондишен eval_on_combat=true. Планировщик будет искать экшен, который переводит eval_on_combat в true. Но такого нет - act_mod_combat переводит eval_on_combat в false. Надо в эффекте поменять false на true. После этого твой экшен должен начать бесконечно вызываться. Ну и для срабатывания твоего экшена нужен враг, без него боевка и не будет запускаться.

И так не надо писать "world_property(world_property(eval_on_combat), true)", просто "world_property(eval_on_combat, true)".

Сейчас по идее аи-схема должна зависать. Если запустить такой скрипт на отладочном движке, то в лог будет выведен дамп с указанием, что пошло не так.

Сообщение отредактировал abramcumner - 23.11.2019, 13:12
Перейти в начало страницы
 
 
 Gaz24
сообщение 23.11.2019, 14:00
Сообщение #247


Почти Игрок
**

Группа: Участник
Сообщений: 16
Регистрация: 14.01.2013
Пользователь №: 15612



abramcumner, заработало, спасибо. Правда с прекондишенами надо поиграться. А так, осознал.

Если ты говорил про эту статью, то я на нее очень сильно опирался, но из-за своего косяка вообще не понимал.

Сообщение отредактировал Gaz24 - 23.11.2019, 14:10
Перейти в начало страницы
 
 
 
 

 
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 

Текстовая версия Сейчас: 06.12.2019, 21:06