Перейти к контенту

Рекомендуемые сообщения

Galil,если я прав,то нельзя сделать изменение параметров ГГ. Сам пробовал,и на форуме ПЫС спрашивал,на что получил ответ,что невозможно. Так что увы...

Labus, можно.

function test()
if db.actor:has_info ("ИМЯ_ПОРШНЯ") then 
start()
end
end

А по поводу концепции-не согласен. От того,что человек в руки возьмёт документ,мышцы не увеличатся,а вот от тренировок-да.

Изменено пользователем Guzerus
Мой ник читается гузерус.
Ссылка на комментарий
Labus, а откуда ты взял этот inv_weight? Такой функции не существует в природе, есть хороший файлик который называется lua_help.script поищи в классе game_object, авось найдешь что подходящее. А вот max_weight вообще нужно из конфига брать.
Возможно всё, ну или почти всё.
Ссылка на комментарий

Товарищи Сталкеры!

Нужна помощь по такому поводу:

Необходимо сделать проверку на предмет в определённом радиусе(по x,y,z,gvid,lvid) в онлайне(не инвентаре).

И необходимо, что бы предмет был всегда в онли, даже если ты перешёл на другую локацию(такое возможно?).

Может сделать что то вроде этого:

function check()
if прдмет в онли? then
if item(предмет в зоне сферы?) then
звук воспроизводится(s_play)
else 
....

 

И ещё, код: this читает функцию из из самого файла, в котором она запускается?

Ссылка на комментарий

как в ЗП вывести на экран секцию ствола,что у ГГ в руках?

local actor = db.actor
                local active_slot = actor:active_slot()
                local wpn
                local text = ""
                if active_slot then
                          wpn = actor:item_in_slot(active_slot)
                if wpn then
                    text = "Ствол - "..wpn:section()
                end
            end

постоянно выдаёт,что это граната,даже,если ёё нет! :huh:

 

TREWKO

this читает функцию из из самого файла, в котором она запускается

да.остальное не знаю :mellow:

Изменено пользователем Влад
Не бойтесь совершенства. Вам его не достичь.
C. Дали
Ссылка на комментарий

Влад,

 

если math.ceil(db.actor:accuracy()*1000) = 1 - то игрок целится (для определения использования оптики юзай проверку device().fov)

 

если больше, то уже не целится

i-igroman.ru - Мой, принципиально новый сайт о компьютерных играх

Ссылка на комментарий

Labus, если что то не работает, значит ты не правильно используешь функции этого класса, функции из этого класса можно вызывать не для всех game_object, для начала смотри как используется интересующая тебя функция в оригинальных скриптах, если ее там нет, значит пробуем метод научного тыка. В этом классе почти все, а скорее всего все функции используются в игре, в скриптах или в движке, так что не надо говорить, что они не работают.

По теме: логически помысли. Задача: узнать вес всех предметов в инвентаре, решение: перебрать все предметы инвентаря и сложить их вес. Как узнать максимальный вес я уже говорил.

Изменено пользователем 8push5
Возможно всё, ну или почти всё.
Ссылка на комментарий

не просто перебрать все предметы, а учесть неполные пачки патронов и навешанные на оружие глушители, прицелы и прочее

Все реально, но кода получается много :ny_rolleyes:

Ссылка на комментарий

Товарищи!

Возможно ли с помощью скрипта заменять текстуру?

Например:

Диалог--->xrTexture.smena()

Сам скрипт:

function smena();

wpn\wpn_gauss1--->wpn\wpn_gauss2(Старая текстура--->Новая текстура)

Нужно сделать скрипт.

 

Сообщение от модератора n6260
Можно скриптом подменить на модель с нужной текстурой (или конфигом), как у Кирага в "ночных прицелах".
Изменено пользователем n6260
Ссылка на комментарий

Понятно, просто хочу сделать смену времён года. Придётся через протоптанный путь. А вот ещё:

Играл в сборку: AMK+NLC+HC3.

И там было задание:

По моему:

Доставить на армейские склады рессивер от экологов на водонапорную башню в деревеньке.

Насколько я понял, там есть скрипт на проверку установлен ли предмет?

Только вот найти его не могу.

Хочу сделать что то вроде этого:

Отнёс предмет на нужное место, скрипт заработал, иначе не будет работать.

Сообщение от модератора n6260
Это Сяковский квест. Спроси у него.
Изменено пользователем n6260
Ссылка на комментарий

вывод на экран можно сделать через

get_hud():GetCustomStatic

get_hud():AddCustomStatic

посмотри как эти функции используются в оригинальных скриптах и в АМК

 

ну а подсчет веса вести для начала так же, как в АМК считают объем:

ставить коллбеки на поднятие/выбрасывание предмета

Изменено пользователем Kolmogor
Ссылка на комментарий

lekzd

ок,спасибо.

а что насчёт второго вопроса?

как в ЗП вывести на экран секцию ствола,что у ГГ в руках?

local actor = db.actor
                local active_slot = actor:active_slot()
                local wpn
                local text = ""
                if active_slot then
                          wpn = actor:item_in_slot(active_slot)
                if wpn then
                    text = "Ствол - "..wpn:section()
                end
            end

 

постоянно выдаёт,что это граната,даже,если ёё нет!

 

в ТЧ таже фигня получается..

Не бойтесь совершенства. Вам его не достичь.
C. Дали
Ссылка на комментарий

Влад, во первых эту функцию надо сунуть в апдейт

 

во вторых код может быть по-короче

local actor = db.actor
local active_item = actor:active_item()
local text = ""
if active_item then text = "Ствол - "..active_item:section() end

 

i-igroman.ru - Мой, принципиально новый сайт о компьютерных играх

Ссылка на комментарий

lekzd

надо сунуть в апдейт

а я что сделал? это ведь итак ясно,не стал писать об этом..

может быть по-короче

знаю,но работать он от этого не начинает..

 

может быть проблема в самом выводе инфы?

function active_weapon()
        local hud = get_hud()
        local custom_static = hud:GetCustomStatic("ait")
    if custom_static == nil then
local actor = db.actor
local active_item = actor:active_item()
local text = ""
if active_item then text = "Ствол - "..active_item:section() end
            hud:AddCustomStatic("ait", true)
            hud:GetCustomStatic("ait"):wnd():TextControl():SetTextST(text)
    end
end
end

Изменено пользователем Влад
Не бойтесь совершенства. Вам его не достичь.
C. Дали
Ссылка на комментарий

Влад, А! ну так конечно!

никогда не инициализируй переменные в блоке с условиями - будут вылеты

никогда не пытайся задать статику текст, в условии, что статика нет

 

function active_weapon()
  local hud = get_hud()
  local custom_static = hud:GetCustomStatic("ait")
  local actor = db.actor
  local active_item = actor:active_item()
  local text = ""
    if custom_static == nil then
      hud:AddCustomStatic("ait", true)
    else
      if active_item then text = "Ствол - "..active_item:section() end
          hud:GetCustomStatic("ait"):wnd():TextControl():SetTextST(text)
    end
end

 

Ну вот, я не успел - вот тебе работающий пример:

http://rghost.ru/916513

Изменено пользователем lekzd

i-igroman.ru - Мой, принципиально новый сайт о компьютерных играх

Ссылка на комментарий

lekzd

никогда не инициализируй переменные в блоке с условиями - будут вылеты

никогда не пытайся задать статику текст, в условии, что статика нет

ок,спасибо.буду знать.

один end левый.

 

 

:mellow: всё равно гранату выводит..

 

апдейт ведь в function actor_binder:update(delta) делать?

 

ура,всё заработало!

lekzd,огромное спасибо.когда мне вручат плюсо-мёт,обязательно поставлю.

Изменено пользователем Влад
Не бойтесь совершенства. Вам его не достичь.
C. Дали
Ссылка на комментарий

Товарищи Сталкеры!

У меня проблема.

Нужно совместить два скриптовых файла state_mgr.script

----------------------------------------------------------------------------------------------------------------------

-- Менеджер изменения состояния тела

-- автор: Диденко Руслан (Stohe)

-- TODO:

----------------------------------------------------------------------------------------------------------------------

function printf()

end

 

aim_ratio = 1000/50

min_ratio = 1500

 

--' Эвалуатор, который синхронизирует менеджер.

--' Мы уже в безраличном состоянии idle или нет

class "evaluator_state_mgr_idle" (property_evaluator)

function evaluator_state_mgr_idle:__init(name, state_manager) super (nil, name)

self.st = state_manager

self.mgr = nil

end

function evaluator_state_mgr_idle:evaluate()

if db.Dead2 == 0 then

local t = self.st.target_state == "idle" and

--not self.st.planner:evaluator(self.st.properties["locked"]):evaluate() and

self.st.planner:evaluator(self.st.properties["movement"]):evaluate() and

self.st.planner:evaluator(self.st.properties["animstate"]):evaluate() and

self.st.planner:evaluator(self.st.properties["animation"]):evaluate()

 

if t == true then

 

if self.mgr == nil then

self.mgr = self.object:motivation_action_manager()

end

if self.mgr:initialized() and self.mgr:current_action_id() == xr_actions_id.state_mgr + 1 then

self.st.combat = true

end

end

 

if self.st.combat == true then return true end

 

return false

end

 

class "evaluator_state_mgr_idle_off" (property_evaluator)

function evaluator_state_mgr_idle_off:__init(name, state_manager) super (nil, name)

self.st = state_manager

self.mgr = nil

end

function evaluator_state_mgr_idle_off:evaluate()

local t = self.st.target_state == "idle" and

self.st.planner:evaluator(self.st.properties["movement"]):evaluate() and

self.st.planner:evaluator(self.st.properties["animstate"]):evaluate() and

self.st.planner:evaluator(self.st.properties["animation"]):evaluate() and

self.st.planner:evaluator(self.st.properties["bodystate"]):evaluate() and

self.st.planner:evaluator(self.st.properties["weapon"]):evaluate() and

self.st.planner:evaluator(self.st.properties["mental"]):evaluate() -- and

-- self.st.planner:evaluator(self.st.properties["direction"]):evaluate()

-- amk.mylog("Checking idleoff for "..self.object:name().." = "..tostring(t))

return t

end

 

--' Мы уже в безраличном состоянии idle или нет ()учет с проверкой alife

class "evaluator_state_mgr_idle_alife" (property_evaluator)

function evaluator_state_mgr_idle_alife:__init(name, state_manager) super (nil, name)

self.st = state_manager

self.t = nil

end

function evaluator_state_mgr_idle_alife:evaluate()

if not self.object:alive() then

return true

end

-- апдейт менеджера анимаций

-- раньше он был тут, сейчас он вынесен из эвалуатора

 

-- printf("SECTION %s", utils.to_str(db.storage[self.st.npc:id()].active_section))

mgr = self.object:motivation_action_manager()

self.t = nil

if mgr:initialized() then

self.t = mgr:current_action_id()

--printf("ACTION %s", utils.to_str(self.t))

if self.t ~= xr_actions_id.alife then

self.st.alife = false

end

end

 

if db.storage[self.st.npc:id()].active_section == nil then

if xr_meet.is_meet(self.object) == false then

local t = self.st.target_state == "idle" and

not self.st.planner:evaluator(self.st.properties["locked"]):evaluate() and

self.st.planner:evaluator(self.st.properties["movement"]):evaluate() and

self.st.planner:evaluator(self.st.properties["animstate"]):evaluate() and

self.st.planner:evaluator(self.st.properties["animation"]):evaluate()

 

-- printf("%s", utils.to_str(self.st.target_state))

-- printf("%s", utils.to_str(self.st.planner:evaluator(self.st.properties["locked"]):evaluate()))

-- printf("%s", utils.to_str(self.st.planner:evaluator(self.st.properties["movement"]):evaluate()))

-- printf("%s", utils.to_str(self.st.planner:evaluator(self.st.properties["animstate"]):evaluate()))

-- printf("%s", utils.to_str(self.st.planner:evaluator(self.st.properties["animation"]):evaluate()))

 

if t == true then self.st.alife = true end

if self.st.alife == true then

return true

end

return t

else

return false

end

end

return true

end

 

 

--' Переход в idle

class "act_state_mgr_to_idle" (action_base)

function act_state_mgr_to_idle:__init(name,state_manager) super (nil, name)

self.st = state_manager

end

function act_state_mgr_to_idle:initialize()

action_base.initialize(self)

self.object:movement_enabled(true)

if self.object:best_enemy() then

self.st:set_state("idle", nil, nil, nil, {animation = true})

xr_sound.set_sound(self.object, nil)

stop_play_sound(self.object)

return

end

if self.object:best_danger() then

self.st:set_state("idle", nil, nil, nil, {animation = true})

xr_sound.set_sound(self.object, nil)

stop_play_sound(self.object)

return

end

self.st:set_state("idle")

end

function act_state_mgr_to_idle:execute()

action_base.execute(self)

if self.object:best_enemy() then

self.st:set_state("idle", nil, nil, nil, {animation = true})

return

end

if self.object:best_danger() then

self.st:set_state("idle", nil, nil, nil, {animation = true})

return

end

self.st:set_state("idle")

end

function act_state_mgr_to_idle:finalize()

-- По завершению перехода нужно записать -1 в указатель "на кого смотреть",

-- чтобы при возврате было понятно что его нужно переинициализировать.

 

self.st.current_object = -1

 

action_base.finalize(self)

end

 

--' Переход в idle

class "act_state_mgr_to_off" (action_base)

function act_state_mgr_to_off:__init(name,state_manager) super (nil, name)

self.st = state_manager

end

 

function act_state_mgr_to_off:initialize()

action_base.initialize(self)

self.st:set_state("idle", nil, nil, nil, {animation = true})

xr_sound.set_sound(self.object, nil)

stop_play_sound(self.object)

-- amk.mylog("stmt for "..self.object:name().." is going off","stmt")

end

 

function act_state_mgr_to_off:execute()

action_base.execute(self)

-- self.st:set_state("idle", nil, nil, nil, {animation = true})

end

 

function act_state_mgr_to_off:finalize()

-- По завершению перехода нужно записать -1 в указатель "на кого смотреть",

-- чтобы при возврате было понятно что его нужно переинициализировать.

 

self.st.current_object = -1

self.object:movement_enabled(true)

-- ui_rad.mylog("stmt for "..self.object:name().." has gone off","stmt")

action_base.finalize(self)

end

 

 

--'-------------------------------------------------------------------------------------

--' Эвалуаторы и экшены менеджера

--'-------------------------------------------------------------------------------------

--' Закончил ли менеджер свою работу

class "eva_state_mgr_end" (property_evaluator)

function eva_state_mgr_end:__init(name, st) super (nil, name)

self.st = st

self.mgr = nil

end

function eva_state_mgr_end:evaluate()

if self.mgr == nil then

self.mgr = self.object:motivation_action_manager()

end

 

if not self.mgr:initialized() then

return false

end

 

local current_action_id = self.mgr:current_action_id()

if current_action_id ~= stalker_ids.action_combat_planner and

current_action_id ~= stalker_ids.action_danger_planner and

current_action_id ~= stalker_ids.action_anomaly_planner

then

self.st.combat = false

end

 

return false

end

 

--' Залочен ли менеджер

class "eva_state_mgr_locked" (property_evaluator)

function eva_state_mgr_locked:__init(name, st) super (nil, name)

self.st = st

end

function eva_state_mgr_locked:evaluate()

--printf("npc %s", self.object:name())

--printf("weapon locked: %s", utils.to_str(self.st.planner:evaluator(self.st.properties["weapon_locked"]):evaluate()))

--printf("direction locked: %s", utils.to_str(self.st.planner:evaluator(self.st.properties["direction_turning"]):evaluate()))

--printf("animstate locked: %s", utils.to_str(self.st.planner:evaluator(self.st.properties["animstate_locked"]):evaluate()))

--printf("animation locked: %s", utils.to_str(self.st.planner:evaluator(self.st.properties["animation_locked"]):evaluate()))

 

--printf("combat[%s] alife[%s]", tostring(self.st.combat), tostring(self.st.alife))

if self.st.combat or self.st.alife then

return true

end

 

return self.st.planner:initialized() and (

self.st.planner:evaluator(self.st.properties["weapon_locked"]):evaluate() or

self.st.planner:evaluator(self.st.properties["animstate_locked"]):evaluate() or

self.st.planner:evaluator(self.st.properties["animation_locked"]):evaluate() or

self.st.planner:evaluator(self.st.properties["direction_turning"]):evaluate())

end

 

--' Идловый экшн менеджера

class "act_state_mgr_end" (action_base)

function act_state_mgr_end:__init(name, st) super (nil, name)

self.st = st

end

function act_state_mgr_end:initialize()

action_base.initialize(self)

end

function act_state_mgr_end:execute()

action_base.execute(self)

 

-- if not self.st.planner:evaluator(self.st.properties["movement_stand_now"]):evaluate() then

-- state_mgr_direction.update_movement_direction(self.object, self.st)

-- end

local wm = rx_wmgr and rx_wmgr.get_wm(self.object)

local wpn = (wm and wm:get_weapon()) or self.object:best_weapon()

if not wpn then

return

end

local t = state_lib.states[self.st.target_state].weapon

if t == "fire" or t == "sniper_fire" then

--printf("[%s] shooting", self.object:name())

local sniper_aim = 3000

if self.st.look_object ~= nil then

local look_object = level.object_by_id(self.st.look_object)

if look_object == nil then

self.st.look_object = nil

return

end

if self.object:see(look_object) and

(not IsStalker(look_object) or

self.object:relation(look_object) == game_object.enemy) and

look_object:alive() == true

then

if t == "sniper_fire" then

sniper_aim = self.object:position():distance_to(look_object:position())*aim_ratio

if sniper_aim <= min_ratio then

self.object:set_item(object.fire1, wpn, 1, min_ratio)

return

end

self.object:set_item(object.fire1, wpn, 1, sniper_aim)

else

self.object:set_item(object.fire1, wpn, state_mgr_weapon.get_queue_params(self.object, look_object))

end

return

else

self.object:set_item(object.idle, wpn)

return

end

end

 

if self.st.look_position ~= nil and

self.st.look_object == nil

then

if t == "sniper_fire" then

self.object:set_item(object.fire1, wpn, 1, sniper_aim)

else

self.object:set_item(object.fire1, wpn, state_mgr_weapon.get_queue_params(self.object, nil))

end

return

else

if self.st.target_state == "psy_shoot" then

self.object:set_item(object.fire1, wpn)

return

end

self.object:set_item(object.idle, wpn)

return

end

return

elseif t == "unstrapped" then

--printf("[%s] not shooting", self.object:name())

self.object:set_item(state_mgr_weapon.get_idle_state(self.st.target_state), wpn)

end

end

function act_state_mgr_end:finalize()

action_base.finalize(self)

end

 

--' Лок менеджера

class "act_state_mgr_locked" (action_base)

function act_state_mgr_locked:__init(name, st) super (nil, name)

self.st = st

end

function act_state_mgr_locked:initialize()

action_base.initialize(self)

end

function act_state_mgr_locked:execute()

action_base.execute(self)

end

function act_state_mgr_locked:finalize()

action_base.finalize(self)

end

 

 

animation_reset_denied = {

wounded = true,

wounded_heavy = true,

wounded_heavy_2 = true,

wounded_heavy_3 = true,

wounded_zombie = true

}

 

--' Сам менеджер

class "state_manager"

function state_manager:__init(npc)

state_mgr_goap.goap_graph(self, npc)

 

self.target_state = "idle"

self.current_direction = nil

self.target_position = nil

self.current_object = nil

self.combat = false

self.alife = true

self.emerg = {}

self.synsound = nil

self.yaw_delta = nil

self.subanim = 0

self.need_reweapon = false

end

function state_manager:set_state(state_name, callback, timeout, target, emerg, synsound, extrakeys)

printf("Set State called: for %s State: %s", self.npc:name(), state_name)

 

if state_lib.states[state_name] == nil then

abort("ERROR: ILLEGAL SET STATE CALLED!!! %s fo %s", tostring(state_name), self.npc:name())

end

if target then

if target.look_position then

printf("look position: %s %s %s", target.look_position.x,

target.look_position.y,

target.look_position.z)

else

printf("look position: NIL")

end

if target.look_object then

printf("look object: %s", target.look_object:name())

else

printf("look object: NIL")

end

else

printf("look target NIL")

end

 

--сперва устанавливаем цели

if target ~= nil then

self.look_position = target.look_position

if target.look_object ~= nil then

self.look_object = target.look_object:id()

else

self.look_object = nil

end

else

self.look_position = nil

self.look_object = nil

end

-- меняем угол точности.

if extrakeys and extrakeys.yaw_delta ~= nil then

self.yaw_delta = extrakeys.yaw_delta

else

self.yaw_delta = 5

end

-- меняем глубину рекурсивности анимации.

if extrakeys and extrakeys.subanim ~= nil then

self.subanim = extrakeys.subanim

else

self.subanim = 0

end

 

local switched = false

local last_state = self.target_state

if self.target_state ~= state_name then

 

--' Если мы переключаемся из стреляющего состояния в нестреляющее - необходимо сразу же прекратить стрельбу

if (state_lib.states[self.target_state].weapon == "fire" or

state_lib.states[self.target_state].weapon == "sniper_fire") and

(state_lib.states[state_name].weapon ~= "fire" and

state_lib.states[state_name].weapon ~= "sniper_fire")

then

self.npc:set_item(state_mgr_weapon.get_idle_state(state_name), state_mgr_weapon.get_weapon(self.npc, state_name))

--printf("[%s] stop shooting", self.npc:name())

end

 

 

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

if state_lib.states[self.target_state].movement ~= move.stand and

state_lib.states[state_name].movement == move.stand

then

self.npc:movement_enabled(false)

end

 

 

self.target_state = state_name

self.current_object = nil

switched = true

end

 

if state_lib.states[state_name].reset == true then

self.reset_state = true

else

self.reset_state = false

end

 

 

if switched and emerg ~= nil then

if animation_reset_denied[last_state] ~= true then

self.emerg.animation = emerg.animation

self.emerg.animation_nout = emerg.animation_nout

end

end

 

self.synsound = synsound

 

 

self.callback = callback

if timeout ~= nil and

timeout >= 0

then

self.callback.timeout = timeout

self.callback.begin = nil

else

if self.callback then

self.callback.func = nil

self.callback.timeout = nil

end

end

 

-- if switched == true then

-- self:update()

-- end

end

else

 

printf("Set State called: for %s State: %s", self.npc:name(), state_name)

 

if state_lib.states[state_name] == nil then

abort("ERROR: ILLEGAL SET STATE CALLED!!! %s fo %s", tostring(state_name), self.npc:name())

end

if target then

if target.look_position then

printf("look position: %s %s %s", target.look_position.x,

target.look_position.y,

target.look_position.z)

else

printf("look position: NIL")

end

if target.look_object then

printf("look object: %s", target.look_object:name())

else

printf("look object: NIL")

end

else

printf("look target NIL")

end

 

--сперва устанавливаем цели

if target ~= nil then

self.look_position = target.look_position

if target.look_object ~= nil then

self.look_object = target.look_object:id()

else

self.look_object = nil

end

else

self.look_position = nil

self.look_object = nil

end

-- меняем угол точности.

if extrakeys and extrakeys.yaw_delta ~= nil then

self.yaw_delta = extrakeys.yaw_delta

else

self.yaw_delta = 5

end

-- меняем глубину рекурсивности анимации.

if extrakeys and extrakeys.subanim ~= nil then

self.subanim = extrakeys.subanim

else

self.subanim = 0

end

 

local switched = false

local last_state = self.target_state

if self.target_state ~= state_name then

 

--' Если мы переключаемся из стреляющего состояния в нестреляющее - необходимо сразу же прекратить стрельбу

if (state_lib.states[self.target_state].weapon == "fire" or

state_lib.states[self.target_state].weapon == "sniper_fire") and

(state_lib.states[state_name].weapon ~= "fire" and

state_lib.states[state_name].weapon ~= "sniper_fire")

then

self.npc:set_item(state_mgr_weapon.get_idle_state(state_name), state_mgr_weapon.get_weapon(self.npc, state_name))

--printf("[%s] stop shooting", self.npc:name())

end

 

 

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

if state_lib.states[self.target_state].movement ~= move.stand and

state_lib.states[state_name].movement == move.stand

then

self.npc:movement_enabled(false)

end

 

 

self.target_state = state_name

self.current_object = nil

switched = true

end

 

if state_lib.states[state_name].reset == true then

self.reset_state = true

else

self.reset_state = false

end

 

 

if switched and emerg ~= nil then

if animation_reset_denied[last_state] ~= true then

self.emerg.animation = emerg.animation

self.emerg.animation_nout = emerg.animation_nout

end

end

 

self.synsound = synsound

 

 

self.callback = callback

if timeout ~= nil and

timeout >= 0

then

self.callback.timeout = timeout

self.callback.begin = nil

else

if self.callback then

self.callback.func = nil

self.callback.timeout = nil

end

end

 

-- if switched == true then

-- self:update()

-- end

end

end

function state_manager:get_state()

return self.target_state

end

function state_manager:update()

--printf("Update called")

self.animstate:update()

self.animation:update()

self.planner:update()

--self.planner:show("")

end

 

 

 

 

 

function set_state(npc, state_name, callback, timeout, target, emerg, synsound, extrakeys)

if db.storage[npc:id()].state_mgr then

db.storage[npc:id()].state_mgr:set_state(state_name, callback, timeout, target, emerg, synsound, extrakeys)

end

end

function get_state(npc)

if db.storage[npc:id()].state_mgr then

return db.storage[npc:id()].state_mgr:get_state()

end

return nil

end

 

 

 

 

 

 

 

 

 

function bind_manager(object)

local manager = object:motivation_action_manager()

 

 

local properties = {}

properties["state_mgr_idle_combat"] = xr_evaluators_id.state_mgr + 1

properties["state_mgr_idle_alife"] = xr_evaluators_id.state_mgr + 2

properties["state_mgr_idle_off"] = xr_evaluators_id.state_mgr + 3

 

local operators = {}

operators["state_mgr_to_idle_combat"] = xr_actions_id.state_mgr + 1

operators["state_mgr_to_idle_alife"] = xr_actions_id.state_mgr + 2

operators["state_mgr_to_idle_off"] = xr_actions_id.state_mgr + 3

 

local state_manager = state_mgr.state_manager(object)

 

manager:add_evaluator(properties["state_mgr_idle_combat"], evaluator_state_mgr_idle("state_mgr_idle_combat", state_manager))

manager:add_evaluator(properties["state_mgr_idle_alife"], evaluator_state_mgr_idle_alife("state_mgr_idle_alife", state_manager))

manager:add_evaluator(properties["state_mgr_idle_off"], evaluator_state_mgr_idle_off("state_mgr_idle_off", state_manager))

 

local action = this.act_state_mgr_to_idle("state_mgr_to_idle_combat", state_manager)

action:add_precondition (world_property(properties["state_mgr_idle_combat"], false))

action:add_effect (world_property(properties["state_mgr_idle_combat"], true))

manager:add_action(operators["state_mgr_to_idle_combat"], action)

 

-- Добавим ещё один тип отключения этого безобразия

action = this.act_state_mgr_to_off("state_mgr_to_off", state_manager)

action:add_precondition (world_property(properties["state_mgr_idle_off"], false))

action:add_effect (world_property(properties["state_mgr_idle_off"], true))

manager:add_action(operators["state_mgr_to_idle_off"], action)

 

action = this.act_state_mgr_to_idle("state_mgr_to_idle_alife", state_manager)

action:add_precondition (world_property(stalker_ids.property_enemy, false))

action:add_precondition (world_property(stalker_ids.property_danger,false))

action:add_precondition (world_property(properties["state_mgr_idle_alife"], false))

action:add_effect (world_property(properties["state_mgr_idle_alife"], true))

manager:add_action(operators["state_mgr_to_idle_alife"], action)

 

action = manager:action(xr_actions_id.alife)

action:add_precondition(world_property(properties["state_mgr_idle_alife"],true))

 

action = manager:action(stalker_ids.action_combat_planner)

action:add_precondition(world_property(properties["state_mgr_idle_combat"],true))

 

action = manager:action(stalker_ids.action_anomaly_planner)

action:add_precondition(world_property(properties["state_mgr_idle_combat"],true))

 

action = manager:action(stalker_ids.action_danger_planner)

action:add_precondition(world_property(properties["state_mgr_idle_combat"],true))

 

action = manager:action(stalker_ids.action_gather_items)

action:add_precondition(world_property(properties["state_mgr_idle_alife"],true))

 

return state_manager

end

 

 

----------------------------------------------------------------------------------------------------------------------

-- Менеджер изменения состояния тела

-- автор: Диденко Руслан (Stohe)

-- TODO:

----------------------------------------------------------------------------------------------------------------------

function printf()

end

 

aim_ratio = 1000/50

min_ratio = 1500

 

--' Эвалуатор, который синхронизирует менеджер.

--' Мы уже в безраличном состоянии idle или нет

class "evaluator_state_mgr_idle" (property_evaluator)

function evaluator_state_mgr_idle:__init(name, state_manager) super (nil, name)

self.st = state_manager

self.mgr = nil

end

function evaluator_state_mgr_idle:evaluate()

if db.Dead2 == 0 then

 

local t = self.st.target_state == "idle" and

--not self.st.planner:evaluator(self.st.properties["locked"]):evaluate() and

self.st.planner:evaluator(self.st.properties["movement"]):evaluate() and

self.st.planner:evaluator(self.st.properties["animstate"]):evaluate() and

self.st.planner:evaluator(self.st.properties["animation"]):evaluate()

 

if t == true then

 

if self.mgr == nil then

self.mgr = self.object:motivation_action_manager()

end

if self.mgr:initialized() and self.mgr:current_action_id() == xr_actions_id.state_mgr + 1 then

self.st.combat = true

end

end

 

if self.st.combat == true then return true end

return false

end

end

--' Мы уже в безраличном состоянии idle или нет ()учет с проверкой alife

class "evaluator_state_mgr_idle_alife" (property_evaluator)

function evaluator_state_mgr_idle_alife:__init(name, state_manager) super (nil, name)

self.st = state_manager

self.t = nil

end

function evaluator_state_mgr_idle_alife:evaluate()

 

 

if not self.object:alive() then

return true

end

-- апдейт менеджера анимаций

-- раньше он был тут, сейчас он вынесен из эвалуатора

 

-- printf("SECTION %s", utils.to_str(db.storage[self.st.npc:id()].active_section))

mgr = self.object:motivation_action_manager()

self.t = nil

if mgr:initialized() then

self.t = mgr:current_action_id()

--printf("ACTION %s", utils.to_str(self.t))

if self.t ~= xr_actions_id.alife then

self.st.alife = false

end

end

 

if db.storage[self.st.npc:id()].active_section == nil then

if xr_meet.is_meet(self.object) == false then

local t = self.st.target_state == "idle" and

not self.st.planner:evaluator(self.st.properties["locked"]):evaluate() and

self.st.planner:evaluator(self.st.properties["movement"]):evaluate() and

self.st.planner:evaluator(self.st.properties["animstate"]):evaluate() and

self.st.planner:evaluator(self.st.properties["animation"]):evaluate()

 

-- printf("%s", utils.to_str(self.st.target_state))

-- printf("%s", utils.to_str(self.st.planner:evaluator(self.st.properties["locked"]):evaluate()))

-- printf("%s", utils.to_str(self.st.planner:evaluator(self.st.properties["movement"]):evaluate()))

-- printf("%s", utils.to_str(self.st.planner:evaluator(self.st.properties["animstate"]):evaluate()))

-- printf("%s", utils.to_str(self.st.planner:evaluator(self.st.properties["animation"]):evaluate()))

 

if t == true then self.st.alife = true end

if self.st.alife == true then

return true

end

return t

else

return false

end

end

return true

end

 

 

--' Переход в idle

class "act_state_mgr_to_idle" (action_base)

function act_state_mgr_to_idle:__init(name,state_manager) super (nil, name)

self.st = state_manager

end

function act_state_mgr_to_idle:initialize()

 

action_base.initialize(self)

self.object:movement_enabled(true)

if self.object:best_enemy() then

self.st:set_state("idle", nil, nil, nil, {animation = true})

xr_sound.set_sound(self.object, nil)

stop_play_sound(self.object)

return

end

if self.object:best_danger() then

self.st:set_state("idle", nil, nil, nil, {animation = true})

xr_sound.set_sound(self.object, nil)

stop_play_sound(self.object)

return

end

self.st:set_state("idle")

end

function act_state_mgr_to_idle:execute()

 

action_base.execute(self)

if self.object:best_enemy() then

self.st:set_state("idle", nil, nil, nil, {animation = true})

return

end

if self.object:best_danger() then

self.st:set_state("idle", nil, nil, nil, {animation = true})

return

end

self.st:set_state("idle")

end

function act_state_mgr_to_idle:finalize()

-- По завершению перехода нужно записать -1 в указатель "на кого смотреть",

-- чтобы при возврате было понятно что его нужно переинициализировать.

 

self.st.current_object = -1

 

action_base.finalize(self)

end

 

 

--'-------------------------------------------------------------------------------------

--' Эвалуаторы и экшены менеджера

--'-------------------------------------------------------------------------------------

--' Закончил ли менеджер свою работу

class "eva_state_mgr_end" (property_evaluator)

function eva_state_mgr_end:__init(name, st) super (nil, name)

self.st = st

self.mgr = nil

end

function eva_state_mgr_end:evaluate()

if self.mgr == nil then

self.mgr = self.object:motivation_action_manager()

end

 

if not self.mgr:initialized() then

return false

end

 

local current_action_id = self.mgr:current_action_id()

if current_action_id ~= stalker_ids.action_combat_planner and

current_action_id ~= stalker_ids.action_danger_planner and

current_action_id ~= stalker_ids.action_anomaly_planner

then

self.st.combat = false

end

 

return false

end

 

--' Залочен ли менеджер

class "eva_state_mgr_locked" (property_evaluator)

function eva_state_mgr_locked:__init(name, st) super (nil, name)

self.st = st

end

function eva_state_mgr_locked:evaluate()

--printf("npc %s", self.object:name())

--printf("weapon locked: %s", utils.to_str(self.st.planner:evaluator(self.st.properties["weapon_locked"]):evaluate()))

--printf("direction locked: %s", utils.to_str(self.st.planner:evaluator(self.st.properties["direction_turning"]):evaluate()))

--printf("animstate locked: %s", utils.to_str(self.st.planner:evaluator(self.st.properties["animstate_locked"]):evaluate()))

--printf("animation locked: %s", utils.to_str(self.st.planner:evaluator(self.st.properties["animation_locked"]):evaluate()))

 

--printf("combat[%s] alife[%s]", tostring(self.st.combat), tostring(self.st.alife))

if self.st.combat or self.st.alife then

return true

end

 

return self.st.planner:initialized() and (

self.st.planner:evaluator(self.st.properties["weapon_locked"]):evaluate() or

self.st.planner:evaluator(self.st.properties["animstate_locked"]):evaluate() or

self.st.planner:evaluator(self.st.properties["animation_locked"]):evaluate() or

self.st.planner:evaluator(self.st.properties["direction_turning"]):evaluate())

end

 

--' Идловый экшн менеджера

class "act_state_mgr_end" (action_base)

function act_state_mgr_end:__init(name, st) super (nil, name)

self.st = st

end

function act_state_mgr_end:initialize()

action_base.initialize(self)

end

function act_state_mgr_end:execute()

action_base.execute(self)

 

-- if not self.st.planner:evaluator(self.st.properties["movement_stand_now"]):evaluate() then

-- state_mgr_direction.update_movement_direction(self.object, self.st)

-- end

local t = state_lib.states[self.st.target_state].weapon

local w = isWeapon(self.object:best_weapon())

 

if not w then

return

end

if t == "fire" or t == "sniper_fire" then

--printf("[%s] shooting", self.object:name())

local sniper_aim = 3000

if self.st.look_object ~= nil then

local look_object = level.object_by_id(self.st.look_object)

if look_object == nil then

self.st.look_object = nil

return

end

if self.object:see(look_object) ~= nil and

(not IsStalker(look_object) or

self.object:relation(look_object) == game_object.enemy) and

look_object:alive() == true

then

if t == "sniper_fire" then

sniper_aim = self.object:position():distance_to(look_object:position())*aim_ratio

if sniper_aim <= min_ratio then

self.object:set_item(object.fire1, self.object:best_weapon(), 1, min_ratio)

return

end

self.object:set_item(object.fire1, self.object:best_weapon(), 1, sniper_aim)

else

self.object:set_item(object.fire1, self.object:best_weapon(), state_mgr_weapon.get_queue_params(self.object, look_object))

end

return

else

self.object:set_item(object.idle, self.object:best_weapon())

return

end

end

 

if self.st.look_position ~= nil and

self.st.look_object == nil

then

if t == "sniper_fire" then

self.object:set_item(object.fire1, self.object:best_weapon(), 1, sniper_aim)

else

self.object:set_item(object.fire1, self.object:best_weapon(), state_mgr_weapon.get_queue_params(self.object, nil))

end

return

else

if self.st.target_state == "psy_shoot" then

self.object:set_item(object.fire1, self.object:best_weapon())

return

end

self.object:set_item(object.idle, self.object:best_weapon())

return

end

return

elseif t == "unstrapped" then

--printf("[%s] not shooting", self.object:name())

self.object:set_item(state_mgr_weapon.get_idle_state(self.st.target_state), self.object:best_weapon())

end

end

function act_state_mgr_end:finalize()

action_base.finalize(self)

end

 

--' Лок менеджера

class "act_state_mgr_locked" (action_base)

function act_state_mgr_locked:__init(name, st) super (nil, name)

self.st = st

end

function act_state_mgr_locked:initialize()

action_base.initialize(self)

end

function act_state_mgr_locked:execute()

action_base.execute(self)

end

function act_state_mgr_locked:finalize()

action_base.finalize(self)

end

 

 

animation_reset_denied = {

wounded = true,

wounded_heavy = true,

wounded_heavy_2 = true,

wounded_heavy_3 = true,

wounded_zombie = true

}

 

--' Сам менеджер

class "state_manager"

function state_manager:__init(npc)

state_mgr_goap.goap_graph(self, npc)

 

self.target_state = "idle"

self.current_direction = nil

self.target_position = nil

self.current_object = nil

self.combat = false

self.alife = true

self.emerg = {}

self.synsound = nil

self.yaw_delta = nil

self.subanim = 0

self.need_reweapon = false

end

function state_manager:set_state(state_name, callback, timeout, target, emerg, synsound, extrakeys)

local is_zombied = self.npc:section()

 

if is_zombied ~= "stalker_zombied" and db.Dead2 == 1 and Psy.Return_Q2NPC(self.npc,"l05_bar",123,140,18,30,-6,0) == 0 and Psy.Return_Q2NPC(self.npc,"l08_yantar",26,40,-279,-269,-16,0) == 0 then

 

if state_name == state_name then

if state_name ~= db.DState and state_name ~= "wounded_heavy_2" then

state_name = db.DState

end

printf("Set State called: for %s State: %s", self.npc:name(), state_name)

 

if state_lib.states[state_name] == nil then

abort("ERROR: ILLEGAL SET STATE CALLED!!! %s fo %s", tostring(state_name), self.npc:name())

end

if target then

if target.look_position then

printf("look position: %s %s %s", target.look_position.x,

target.look_position.y,

target.look_position.z)

else

printf("look position: NIL")

end

if target.look_object then

printf("look object: %s", target.look_object:name())

else

printf("look object: NIL")

end

else

printf("look target NIL")

end

 

--сперва устанавливаем цели

if target ~= nil then

self.look_position = target.look_position

if target.look_object ~= nil then

self.look_object = target.look_object:id()

else

self.look_object = nil

end

else

self.look_position = nil

self.look_object = nil

end

-- меняем угол точности.

if extrakeys and extrakeys.yaw_delta ~= nil then

self.yaw_delta = extrakeys.yaw_delta

else

self.yaw_delta = 5

end

-- меняем глубину рекурсивности анимации.

if extrakeys and extrakeys.subanim ~= nil then

self.subanim = extrakeys.subanim

else

self.subanim = 0

end

 

local switched = false

local last_state = self.target_state

if self.target_state ~= state_name then

 

--' Если мы переключаемся из стреляющего состояния в нестреляющее - необходимо сразу же прекратить стрельбу

if (state_lib.states[self.target_state].weapon == "fire" or

state_lib.states[self.target_state].weapon == "sniper_fire") and

(state_lib.states[state_name].weapon ~= "fire" and

state_lib.states[state_name].weapon ~= "sniper_fire")

then

self.npc:set_item(state_mgr_weapon.get_idle_state(state_name), state_mgr_weapon.get_weapon(self.npc, state_name))

--printf("[%s] stop shooting", self.npc:name())

end

 

 

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

if state_lib.states[self.target_state].movement ~= move.stand and

state_lib.states[state_name].movement == move.stand

then

self.npc:movement_enabled(false)

end

 

 

self.target_state = state_name

self.current_object = nil

switched = true

end

 

if state_lib.states[state_name].reset == true then

self.reset_state = true

else

self.reset_state = false

end

 

 

if switched and emerg ~= nil then

if animation_reset_denied[last_state] ~= true then

self.emerg.animation = emerg.animation

self.emerg.animation_nout = emerg.animation_nout

end

end

 

self.synsound = synsound

 

 

self.callback = callback

if timeout ~= nil and

timeout >= 0

then

self.callback.timeout = timeout

self.callback.begin = nil

else

if self.callback then

self.callback.func = nil

self.callback.timeout = nil

end

end

 

-- if switched == true then

-- self:update()

-- end

end

 

else

 

printf("Set State called: for %s State: %s", self.npc:name(), state_name)

 

if state_lib.states[state_name] == nil then

abort("ERROR: ILLEGAL SET STATE CALLED!!! %s fo %s", tostring(state_name), self.npc:name())

end

if target then

if target.look_position then

printf("look position: %s %s %s", target.look_position.x,

target.look_position.y,

target.look_position.z)

else

printf("look position: NIL")

end

if target.look_object then

printf("look object: %s", target.look_object:name())

else

printf("look object: NIL")

end

else

printf("look target NIL")

end

 

--сперва устанавливаем цели

if target ~= nil then

self.look_position = target.look_position

if target.look_object ~= nil then

self.look_object = target.look_object:id()

else

self.look_object = nil

end

else

self.look_position = nil

self.look_object = nil

end

-- меняем угол точности.

if extrakeys and extrakeys.yaw_delta ~= nil then

self.yaw_delta = extrakeys.yaw_delta

else

self.yaw_delta = 5

end

-- меняем глубину рекурсивности анимации.

if extrakeys and extrakeys.subanim ~= nil then

self.subanim = extrakeys.subanim

else

self.subanim = 0

end

 

local switched = false

local last_state = self.target_state

if self.target_state ~= state_name then

 

--' Если мы переключаемся из стреляющего состояния в нестреляющее - необходимо сразу же прекратить стрельбу

if (state_lib.states[self.target_state].weapon == "fire" or

state_lib.states[self.target_state].weapon == "sniper_fire") and

(state_lib.states[state_name].weapon ~= "fire" and

state_lib.states[state_name].weapon ~= "sniper_fire")

then

self.npc:set_item(state_mgr_weapon.get_idle_state(state_name), state_mgr_weapon.get_weapon(self.npc, state_name))

--printf("[%s] stop shooting", self.npc:name())

end

 

 

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

if state_lib.states[self.target_state].movement ~= move.stand and

state_lib.states[state_name].movement == move.stand

then

self.npc:movement_enabled(false)

end

 

 

self.target_state = state_name

self.current_object = nil

switched = true

end

 

if state_lib.states[state_name].reset == true then

self.reset_state = true

else

self.reset_state = false

end

 

 

if switched and emerg ~= nil then

if animation_reset_denied[last_state] ~= true then

self.emerg.animation = emerg.animation

self.emerg.animation_nout = emerg.animation_nout

end

end

 

self.synsound = synsound

 

 

self.callback = callback

if timeout ~= nil and

timeout >= 0

then

self.callback.timeout = timeout

self.callback.begin = nil

else

if self.callback then

self.callback.func = nil

self.callback.timeout = nil

end

end

 

-- if switched == true then

-- self:update()

-- end

end

end

function state_manager:get_state()

return self.target_state

end

function state_manager:update()

--printf("Update called")

self.animstate:update()

self.animation:update()

self.planner:update()

--self.planner:show("")

end

 

 

 

 

 

function set_state(npc, state_name, callback, timeout, target, emerg, synsound, extrakeys)

if db.storage[npc:id()].state_mgr then

db.storage[npc:id()].state_mgr:set_state(state_name, callback, timeout, target, emerg, synsound, extrakeys)

end

end

function get_state(npc)

if db.storage[npc:id()].state_mgr then

return db.storage[npc:id()].state_mgr:get_state()

end

return nil

end

 

 

 

 

 

 

 

 

 

function bind_manager(object)

local manager = object:motivation_action_manager()

 

 

local properties = {}

properties["state_mgr_idle_combat"] = xr_evaluators_id.state_mgr + 1

properties["state_mgr_idle_alife"] = xr_evaluators_id.state_mgr + 2

 

local operators = {}

operators["state_mgr_to_idle_combat"] = xr_actions_id.state_mgr + 1

operators["state_mgr_to_idle_alife"] = xr_actions_id.state_mgr + 2

 

local state_manager = state_mgr.state_manager(object)

 

manager:add_evaluator(properties["state_mgr_idle_combat"], evaluator_state_mgr_idle("state_mgr_idle_combat", state_manager))

manager:add_evaluator(properties["state_mgr_idle_alife"], evaluator_state_mgr_idle_alife("state_mgr_idle_alife", state_manager))

 

local action = this.act_state_mgr_to_idle("state_mgr_to_idle_combat", state_manager)

action:add_precondition (world_property(properties["state_mgr_idle_combat"], false))

action:add_effect (world_property(properties["state_mgr_idle_combat"], true))

manager:add_action(operators["state_mgr_to_idle_combat"], action)

 

action = this.act_state_mgr_to_idle("state_mgr_to_idle_alife", state_manager)

action:add_precondition (world_property(stalker_ids.property_enemy, false))

action:add_precondition (world_property(stalker_ids.property_danger,false))

action:add_precondition (world_property(properties["state_mgr_idle_alife"], false))

action:add_effect (world_property(properties["state_mgr_idle_alife"], true))

manager:add_action(operators["state_mgr_to_idle_alife"], action)

 

action = manager:action(xr_actions_id.alife)

action:add_precondition(world_property(properties["state_mgr_idle_alife"],true))

 

action = manager:action(stalker_ids.action_combat_planner)

action:add_precondition(world_property(properties["state_mgr_idle_combat"],true))

 

action = manager:action(stalker_ids.action_anomaly_planner)

action:add_precondition(world_property(properties["state_mgr_idle_combat"],true))

 

action = manager:action(stalker_ids.action_danger_planner)

action:add_precondition(world_property(properties["state_mgr_idle_combat"],true))

 

action = manager:action(stalker_ids.action_gather_items)

action:add_precondition(world_property(properties["state_mgr_idle_alife"],true))

 

return state_manager

end

 

 

Изменено пользователем TREWKO
Ссылка на комментарий

TREWKO, Неясна конкретная задача - хочешь, можно от балды сравнить два файла и добавить недостающие строки - работать будет навряд ли

 

i-igroman.ru - Мой, принципиально новый сайт о компьютерных играх

Ссылка на комментарий

lekzd, это надо адаптировать PsyZones and Emission к AI паку.

 

Вот ещё:

Делаю проверку на броню:

function check_armor()
local wpn,arm
local armor = db.actor:item_in_slot(6)
local weapon = db.actor:item_in_slot(2)

if weapon then
wpn = weapon:section()
else
wpn = "no_weapon"
end

if armor then
arm = armor:section()
else
arm = "no_armor"
end

if string:find(wpn,"wpn_pm") or string:find(wpn,"wpn_bm16") or string:find(wpn,"wpn_ak74") then -- через 'or' пиши сколько нужно стволов
if (not string.find(arm, "exo" )) then
db.actor:drop_item(weapon)
local temp = alife():create("wpn_ak74",db.actor:position(),db.actor:level_vertex_id(),db.actor:game_vertex_id(),d
b.actor:id())
db.actor:transfer_item(weapon,db.actor)
alife():release(temp)
news_manager.send_tip(db.actor,"Невозможно взять пулемёт в руки без экзы",nil,nil,10000)
end
end
end
end

 

 

Скрипт из темы рядом.

Всё это в скрипте DiVaresCheckArmor.script

Апдейт в bind_stalker.script

 

Но возникает ошибка:

FATAL ERROR

 

[error]Expression : fatal error

[error]Function : CScriptEngine::lua_error

[error]File : E:\stalker\patch_1_0004\xr_3da\xrGame\script_engine.cpp

[error]Line : 73

[error]Description : <no expression>

[error]Arguments : LUA error: ...k.e.r.chernobyl\gamedata\scripts\bind_stalker.script:250: attempt to index global 'DiVaresCheckArmor' (a nil value)

 

 

stack trace:

 

 

Изменено пользователем TREWKO
Ссылка на комментарий

Вроде здесь еще отвечают на вопросы, да и контекст моего вопроса подходит вроде.. ;)

Короче не могу заспавнить в ЗП НПС через поршень как например было в ТЧ, например если даю так

<action>spawn_test.spawn_muzhik1</action> а в spawn_test:

function spawn_muzhik1()

alife():create("muzhik1",vector():set(31.494121551514,3.8283228874207,373.46026611328),1008321,59)

то ничего не происходит, а если через биндер при старте игры то все работает, помогите разобраться!

Не соответствует. N6260

Ссылка на комментарий

Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий

Комментарии могут оставлять только зарегистрированные пользователи

Создать аккаунт

Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!

Зарегистрировать новый аккаунт

Войти

Есть аккаунт? Войти.

Войти
  • Недавно просматривали   1 пользователь

AMK-Team.ru

×
×
  • Создать...