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

Скриптование


Svoboда

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

gruber, спасибо конечно, но заспавнить это одно дело, но как заставить его работать? (т.е. воспроизводить звук). Возможно ли это осуществить без вмешательства в логику?

 

Попробовал настроить проигрывание звуков в логике, получилось, добавил новые темы в sound_theme.script но почему то они тихо воспроизводятся, хотя громкость самих треков такая же как и у остальных, как добавить громкость воспроизведения?

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

Поделиться этим сообщением


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

Поделиться этим сообщением


Ссылка на сообщение

Куфзук, не буду спорить, а начну делать, кому будет интересно потом отпишусь по поводу применика.

 

Вот по ходу дела возник вопрос: использую функцию воспроизведения такую:

snd:play_at_pos(db.actor, vector():set(0,0,0),0, sound_object.s2d)

snd - саунд, но этот звук воспроизводится всего несколько секунд, хотя на самом деле играет (в проигрывателе) более 1 минуты, и через метод: play_no_feedback воспроизводится нормально, то есть полностью ... подскажите пожалуйста как исправить это.

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

Поделиться этим сообщением


Ссылка на сообщение

gruber, нет я не пытаюсь его изобрести ... я пытаюсь разобраться в методах воспроизведения звуков ... разобрал ПЫСовские скрипты, более менее ясно ... кроме одного: что это за метод? Как его использовать?(play_sound) примерную схему я понял и суть немного, но не могу сообразить суть аргументов которые принимает данная функция ...

Мне это нужно не только для создания приемника ... с помощью этого можно сделать кучу чего нового ... разнообразного ... поэтому хочу разобраться!

Поделиться этим сообщением


Ссылка на сообщение

Куфзук, я хочу понять как использовать методы:play_sound, то есть как воспроизвести звук через этот метод, вот что конкретно я хочу узнать!

И еще косвенный вопрос, который я задавал ранее:

Вот по ходу дела возник вопрос: использую функцию воспроизведения такую:

snd:play_at_pos(db.actor, vector():set(0,0,0),0, sound_object.s2d)

snd - саунд, но этот звук воспроизводится всего несколько секунд, хотя на самом деле играет (в проигрывателе) более 1 минуты, и через метод: play_no_feedback воспроизводится нормально, то есть полностью ... подскажите пожалуйста как исправить это.

 

Поделиться этим сообщением


Ссылка на сообщение

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

[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: ...:\s.t.a.l.k.e.r\gamedata\scripts\xr_motivator.script:209: attempt to index field 'object' (a nil value)

 

Что значит эта ошибка знаю, но из-за чего возникла не могу сообразить.

 

Алгоритм построения схемы усвоил из урока на вики, изучением скриптов сталкера (схем поведения) более глубже изучил, но при создании своей схемы столкнулся с такой вот проблемой. Вот сам скрипт схемы:

 

priperty_base = 1777

property_object_for_shmon = priperty_base + 1

 

property_obj_base = 666

property_obj_item = property_obj_base + 1

 

time_run = 1000 * 5

dist = 30

tab_id_shmon = {}

bad_id = {}

 

local timer,last

 

class "evaluator_object_for_shmon" (property_evaluator)

 

function evaluator_object_for_shmon:__init(name, storage) super (nil, name)

self.st = storage

end

 

function evaluator_object_for_shmon:evaluate()

--fdb.how_table_in_table(tab_id_shmon)

self.position = self.object:position()

if timer == nil then

timer = time_global() + time_run

else last = timer - time_global()

end

if last == nil then

last = timer - time_global()

end

if last <= 0 then

timer = nil last = nil

local npc

for k=1, 65534 do

npc = level.object_by_id(k)

if npc and not npc:alive() and is_is_tab_id_shmon(k) and is_bad_id(k) and self.position:distance_to(npc:position()) < dist then

tab_id_shmon[self.object:name()] = {}

table.insert(tab_id_shmon[self.object:name()],k)

fdb.logS(">>npc:id() = "..k)

end

end

end

--fdb.logS("flush")

return is_chtonit(self.object)

end

 

 

class "action_go_to_shmon" (action_base)

 

function action_go_to_shmon:__init(obj, storage) super (nil, obj)

self.st = storage

end

 

function action_go_to_shmon:initialize()

action_base.initialize(self)

fdb.how_table_in_table(tab_id_shmon)

fdb.logS("flush")

self.obj.lv = self.object:level_vertex_id()

self.obj_item = level.object_by_id(tab_id_shmon[self.object:name()])

self.obj_item.lv = self.obj_item:level_vertex_id()

self.obj:set_dest_level_vertex_id(self.obj_item.lv)

end

 

function action_go_to_shmon:execute()

action_base.execute(self)

fdb.logS("function action_go_to_shmon:execute()")

if self.obj_item.lv ~= self.obj:level_vertex_id() then

self.obj_item.lv = self.obj_item:level_vertex_id()

self.obj:set_dest_level_vertex_id(self.obj_item.lv)

end

end

 

function action_go_to_shmon:finalize()

action_base.finalize (self)

end

 

 

function add_to_binder(npc,ini,scheme,section,st)

local manager = npc:motivation_action_manager()

manager:add_evaluator(property_object_for_shmon, evaluator_object_for_shmon("evaluator_object_for_shmon",st))

fdb.logS("flush")

local action = action_go_to_shmon(npc, st)

action:add_precondition (world_property(stalker_ids.property_alive, true))

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

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

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

action:add_precondition (world_property(property_object_for_shmon), true)

xr_motivator.addCommonPrecondition(action)

action:add_effect (property_object_for_shmon, false)

manager:add_action (property_obj_item, action)

end

 

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

function set_scheme(npc,ini,scheme,section)

local st = xr_logic.assign_storage_and_bind(npc, ini, scheme, section)

st.enabled=true

end

 

function disable_scheme(npc,scheme)

local st = db.storage[npc:id()][scheme]

if st then

st.enabled = false

end

end

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

 

function is_is_tab_id_shmon(id)

local count = 0

local bool = true

for k,v in pairs(tab_id_shmon) do

for q=1,#v do

if v[q] == id then

count = count + 1

end

end

end

if count == 0 then

bool = true

else bool = false

end

return bool

end

 

function is_bad_id(id)

local bool = true

for k=1, #bad_id do

if bad_id[k] == id then

bool = false

break

end

end

return bool

end

 

function is_chtonit(npc)

local name = npc:name()

local bool = false

if tab_id_shmon[name] and #tab_id_shmon[name] > 0 and tab_id_shmon[name][1] ~= nil then

bool = true

end

return bool

end

 

 

Вот как подключил:

 

...

-- Загрузка модулей сталкеров:

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

load_scheme("xr_danger", "danger", stype_stalker)

load_scheme("xr_abuse", "abuse", stype_stalker)

load_scheme("xr_walker", "walker", stype_stalker)

load_scheme("xr_remark", "remark", stype_stalker)

load_scheme("xr_sleeper", "sleeper", stype_stalker)

load_scheme("xr_kamp", "kamp", stype_stalker)

load_scheme("xr_camper", "camper", stype_stalker)

load_scheme("xr_meet", "meet", stype_stalker)

--load_scheme("xr_reactions", "reactions", stype_stalker)

load_scheme("xr_test", "test", stype_stalker)

load_scheme("xr_heli_hunter", "heli_hunter", stype_stalker)

load_scheme("xr_attendant", "follower", stype_stalker)

load_scheme("xr_combat", "combat", stype_stalker)

load_scheme("xr_death", "death", stype_stalker)

load_scheme("xr_use", "use", stype_stalker)

load_scheme("xr_hit", "hit", stype_stalker)

load_scheme("xr_wounded", "wounded", stype_stalker)

load_scheme("xr_rest", "rest", stype_stalker)

load_scheme("xr_meet", "actor_dialogs",stype_stalker)

load_scheme("xr_combat_ignore", "combat_ignore", stype_stalker)

load_scheme("xr_patrol", "patrol", stype_stalker)

load_scheme("xr_shmon", "shmon", stype_stalker)

...

 

 

function motivator_binder:net_spawn(sobject)

printf("motivator_binder:net_spawn(): self.object:name()='%s'", self.object:name())

--memusage.collect_info(self.object, "netspawn_start")

if not object_binder.net_spawn(self, sobject) then

return false

end

 

-- if self.object:spawn_ini():section_exist("dont_spawn_online") then

-- printf("!!!OFFLINE")

-- alife():object(self.object:id()).dont_spawn_online = true

-- end

 

db.add_obj(self.object)

 

-- Все CALLBACK-и ставить здесь:

local manager = self.object:motivation_action_manager()

manager:add_evaluator(xr_shmon.property_object_for_shmon, property_evaluator_const(false))

...

function addCommonPrecondition(action)

action:add_precondition (world_property(xr_shmon.property_object_for_shmon,false))

--action:add_precondition (world_property(xr_evaluators_id.reaction,false))

action:add_precondition (world_property(xr_evaluators_id.stohe_meet_base + 1,false))

action:add_precondition (world_property(xr_evaluators_id.sidor_wounded_base + 0, false))

action:add_precondition (world_property(xr_evaluators_id.chugai_heli_hunter_base, false))

action:add_precondition (world_property(xr_evaluators_id.abuse_base, false))

end

 

 

function disable_generic_schemes(npc, stype)

if stype == modules.stype_stalker then

xr_combat.disable_scheme(npc, "combat")

xr_use.disable_scheme(npc, "use")

xr_hit.disable_scheme(npc, "hit")

xr_meet.disable_scheme(npc, "actor_dialogs")

xr_heli_hunter.disable_scheme(npc, "heli_hunter")

xr_combat_ignore.disable_scheme(npc, "combat_ignore")

xr_shmon.disable_scheme(npc,"shmon")

elseif stype == modules.stype_mobile then

mob_combat.disable_scheme(npc, "mob_combat")

mob_trade.disable_scheme(npc, "mob_trade")

elseif stype == modules.stype_item then

ph_on_hit.disable_scheme(npc, "ph_on_hit")

elseif stype == modules.stype_heli then

xr_hit.disable_scheme(npc, "hit")

end

end

...

function enable_generic_schemes(ini, npc, stype, section)

if stype == modules.stype_stalker then

...

local heli_hunter_section = utils.cfg_get_string(ini, section, "heli_hunter", npc, false, "")

xr_heli_hunter.set_scheme(npc, ini, "heli_hunter", heli_hunter_section)

 

local shmoning = utils.cfg_get_string(ini, section, "shmon", npc, false, "")

xr_shmon.set_scheme(npc,ini,"shmon",shmoning)

...

 

 

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

Обычно при подобных ошибках сам разбираюсь, так как не люблю загружать своими проблемами других, но в данном случае чувствую что сам не смогу разобраться, опыта не хватит ...

 

 

 

Если же отключить экшен типа так:

function add_to_binder(npc,ini,scheme,section,st)

local manager = npc:motivation_action_manager()

manager:add_evaluator(property_object_for_shmon, evaluator_object_for_shmon("evaluator_object_for_shmon",st))

fdb.logS("flush")

--[[local action = action_go_to_shmon(npc, st)

action:add_precondition (world_property(stalker_ids.property_alive, true))

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

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

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

action:add_precondition (world_property(property_object_for_shmon), true)

xr_motivator.addCommonPrecondition(action)

action:add_effect (property_object_for_shmon, false)

manager:add_action (property_obj_item, action)]]

end

 

Тогда НПС продолжают выполнять свою прежнюю работу, и работают только эвалуаторы, если же просто оставить так:

function add_to_binder(npc,ini,scheme,section,st)

local manager = npc:motivation_action_manager()

manager:add_evaluator(property_object_for_shmon, evaluator_object_for_shmon("evaluator_object_for_shmon",st))

fdb.logS("flush")

local action = action_go_to_shmon(npc, st)

--[[action:add_precondition (world_property(stalker_ids.property_alive, true))

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

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

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

action:add_precondition (world_property(property_object_for_shmon), true)

xr_motivator.addCommonPrecondition(action)

action:add_effect (property_object_for_shmon, false)

manager:add_action (property_obj_item, action)]]

end

 

То НПС опять начинают тупо стоять, и не идут к трупам ...

Изменено пользователем Куфзук

Поделиться этим сообщением


Ссылка на сообщение
  • Недавно просматривали   0 пользователей

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