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

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

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

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

Присоединиться к обсуждению

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

Гость
К сожалению, ваш пост содержит слова, запрещенные в нашем сообществе. Пожалуйста, измените ваш текст так, чтобы в нем не оставалось слов, указанных ниже. Помните, что публикация вами даже видоизмененного запрещенного слова может нарушать законодательство РФ и Правила форума.
Ответить в этой теме...

×   Вы вставили отформатированный текст.   Удалить форматирование

  Допустимо не более 75 смайлов.

×   Ваша ссылка была автоматически заменена на медиа-контент.   Отображать как ссылку

×   Ваши публикации восстановлены.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

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

    Ни один зарегистрированный пользователь не просматривает эту страницу.

AMK-Team.ru

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