Arhara 32 Опубликовано 27 Февраля 2011 Поделиться Опубликовано 27 Февраля 2011 Куфзук, Влияет на память. Если смотреть на предыдущий пост - речь о монстрах. В этом случае - зависимость прямая. Еще 10 лет таких цен, зарплат и пенсий, и вместо переписи населения будет перекличка Ссылка на комментарий
ZeeK 57 Опубликовано 1 Марта 2011 Поделиться Опубликовано 1 Марта 2011 (изменено) Сделал на новой локации смарт, камп_зону и смарт_каверы, но почему то НПС не реагируют на смарт_каверы, тупо рассаживаясь в лагере как попало... [6001] ; cse_abstract properties section_name = camp_zone name = mil_a1_camp_zone position = -236.838,-12.775,51.166 direction = 1,0,0.25 ; cse_alife_object properties game_vertex_id = 1072 distance = 0 level_vertex_id = 89304 object_flags = 0xffffff3e custom_data = <<END [camp] cfg = scripts\camp.ltx END ; cse_shape properties shapes = shape0 shape0:type = sphere shape0:offset = 0,0,0 shape0:radius = 7 ; cse_alife_space_restrictor properties restrictor_type = 3 [6002] ; cse_abstract properties section_name = smart_cover name = mil_a1_animpoint_1 position = -239.131,-12.305,51.889 direction = 1,0,0.25 ; cse_alife_object properties game_vertex_id = 1072 distance = 0 level_vertex_id = 88262 object_flags = 0xffffffbf ; cse_shape properties shapes = shape0 shape0:type = sphere shape0:offset = 0,0,0 shape0:radius = 2 ; cse_smart_cover properties cse_smart_cover__unk1_sz = animpoint_sit_low cse_smart_cover__unk2_f32 = 0 enter_min_enemy_distance = 15 exit_min_enemy_distance = 10 ; se_smart_cover properties last_description = animpoint_sit_low loopholes = animpoint_sit_low,1 [6003] ; cse_abstract properties section_name = smart_cover name = mil_a1_animpoint_2 position = -234.561,-12.655,53.732 direction = -0.889,0,-0.456 ; cse_alife_object properties game_vertex_id = 1072 distance = 0 level_vertex_id = 90351 object_flags = 0xffffffbf ; cse_shape properties shapes = shape0 shape0:type = sphere shape0:offset = 0,0,0 shape0:radius = 2 ; cse_smart_cover properties cse_smart_cover__unk1_sz = animpoint_sit_low cse_smart_cover__unk2_f32 = 0 enter_min_enemy_distance = 15 exit_min_enemy_distance = 10 ; se_smart_cover properties last_description = animpoint_sit_low loopholes = animpoint_sit_low [6004] ; cse_abstract properties section_name = smart_cover name = mil_a1_animpoint_3 position = -234.809,-12.653,50.682 direction = -0.491,0,0.87 ; cse_alife_object properties game_vertex_id = 1072 distance = 0 level_vertex_id = 90347 object_flags = 0xffffffbf ; cse_shape properties shapes = shape0 shape0:type = sphere shape0:offset = 0,0,0 shape0:radius = 2 ; cse_smart_cover properties cse_smart_cover__unk1_sz = animpoint_sit_low cse_smart_cover__unk2_f32 = 0 enter_min_enemy_distance = 15 exit_min_enemy_distance = 10 ; se_smart_cover properties last_description = animpoint_sit_low loopholes = animpoint_sit_low [6005] ; cse_abstract properties section_name = smart_terrain name = mil_a1 position = -237.397,-12.659,54.107 direction = 0,0,0 ; cse_alife_object properties game_vertex_id = 1072 distance = 0 level_vertex_id = 88775 object_flags = 0xffffff3e custom_data = <<END [smart_terrain] cfg = scripts\military\smart\mil_a1.ltx END ; cse_shape properties shapes = shape0 shape0:type = sphere shape0:offset = 0,0,0 shape0:radius = 5 ; cse_alife_space_restrictor properties restrictor_type = 3 ; se_smart_terrain properties На другой локе делал также и там работает..... Изменено 1 Марта 2011 пользователем ZeeK Не соответствует. N6260 Ссылка на комментарий
_Призрак_ 11 Опубликовано 1 Марта 2011 Поделиться Опубликовано 1 Марта 2011 На другой локе делал также и там работает..... Если ты уверен что на другой локе у тебя идентичный код, и они там работают, то вывод только один - ты локацию в скриптах регистрировал? Freedom Ссылка на комментарий
ZeeK 57 Опубликовано 1 Марта 2011 Поделиться Опубликовано 1 Марта 2011 (изменено) Вот пример с другой локи и там все работает, а разница только в координатах [7173] ; cse_abstract properties section_name = camp_zone name = marsh_a2_camp_zone position = 401.41619873047,4.1340670585632,265.68002319336 direction = -1,0,0 ; cse_alife_object properties game_vertex_id = 934 distance = 0 level_vertex_id = 403511 object_flags = 0xffffff3e custom_data = <<END [camp] cfg = scripts\camp.ltx END ; cse_shape properties shapes = shape0 shape0:type = sphere shape0:offset = 0,0,0 shape0:radius = 5.84479999542236 ; cse_alife_space_restrictor properties restrictor_type = 3 [7174] ; cse_abstract properties section_name = smart_cover name = marsh_a2_animpoint_1 position = 402.14743041992,3.83748960495,267.6418762207 direction = -1,0,0 ; cse_alife_object properties game_vertex_id = 934 distance = 0 level_vertex_id = 404429 object_flags = 0xffffffbf ; cse_shape properties shapes = shape0 shape0:type = sphere shape0:offset = 0,0,0 shape0:radius = 2 ; cse_smart_cover properties cse_smart_cover__unk1_sz = animpoint_sit_low cse_smart_cover__unk2_f32 = 0 enter_min_enemy_distance = 15 exit_min_enemy_distance = 10 ; se_smart_cover properties last_description = animpoint_sit_low loopholes = animpoint_sit_low,1 [7175] ; cse_abstract properties section_name = smart_cover name = marsh_a2_animpoint_2 position = 402.99615478516,3.8279237747192,265.46243286133 direction = 0,-1,0 ; cse_alife_object properties game_vertex_id = 934 distance = 0 level_vertex_id = 405424 object_flags = 0xffffffbf ; cse_shape properties shapes = shape0 shape0:type = sphere shape0:offset = 0,0,0 shape0:radius = 2 ; cse_smart_cover properties cse_smart_cover__unk1_sz = animpoint_sit_low cse_smart_cover__unk2_f32 = 0 enter_min_enemy_distance = 15 exit_min_enemy_distance = 10 ; se_smart_cover properties last_description = animpoint_sit_low loopholes = animpoint_sit_low [7176] ; cse_abstract properties section_name = smart_cover name = marsh_a2_animpoint_3 position = 401.12551879883,3.8237624168396,264.33709716797 direction = 2,0,0 ; cse_alife_object properties game_vertex_id = 934 distance = 0 level_vertex_id = 403957 object_flags = 0xffffffbf ; cse_shape properties shapes = shape0 shape0:type = sphere shape0:offset = 0,0,0 shape0:radius = 2 ; cse_smart_cover properties cse_smart_cover__unk1_sz = animpoint_sit_low cse_smart_cover__unk2_f32 = 0 enter_min_enemy_distance = 15 exit_min_enemy_distance = 10 ; se_smart_cover properties last_description = animpoint_sit_low loopholes = animpoint_sit_low Ниодну локу в скриптах не регистрировал... Изменено 1 Марта 2011 пользователем ZeeK Не соответствует. N6260 Ссылка на комментарий
Arhara 32 Опубликовано 2 Марта 2011 Поделиться Опубликовано 2 Марта 2011 ZeeK, Координаты в алл спавне принято указывать целиком - это не скрипты. Если желаете усадить людей - гораздо проще и лучше просто указать типа такого [kamp] center_point = amerika_camp_center path_walk = amerika_camp_center_task radius = 2.1 И всё - никаких камп_зон и смарт_каверов. К тому же, у ПЫС не было дин аномалий, а если вы их используете - наловите вылетов по вертексам - придётся ещё и каждую зону в исключения прописывать Еще 10 лет таких цен, зарплат и пенсий, и вместо переписи населения будет перекличка Ссылка на комментарий
_Призрак_ 11 Опубликовано 2 Марта 2011 Поделиться Опубликовано 2 Марта 2011 Arhara В ЗП не работает схема kamp Freedom Ссылка на комментарий
lambdist 16 Опубликовано 3 Марта 2011 Поделиться Опубликовано 3 Марта 2011 (изменено) Заметил такую фишку в ЗП, что когда отключен худ, то не слышно детекторов радиации и аномалий... Как сделать так, чтоб эти детекторы не пикали при выключенном худе, когда открыт инвентарь ГГ? Изменено 3 Марта 2011 пользователем lambdist A.A.A. Modpack:https://yadi.sk/d/UPMwEl7ecjN4i Ссылка на комментарий
Byurrer 0 Опубликовано 3 Марта 2011 Поделиться Опубликовано 3 Марта 2011 (изменено) Здравствуйте, возникла проблема, делаю схему поведения, суть в том что если возле НПС есть трупы то он их будет обыскивать, вроде бы логический все верно, но на самом деле нет, НПС тупо стоят не идут на места где трупы, а при стрельбе по ним или разговоре вылет: [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 То НПС опять начинают тупо стоять, и не идут к трупам ... Изменено 4 Марта 2011 пользователем Куфзук Ссылка на комментарий
midichs 1 Опубликовано 4 Марта 2011 Поделиться Опубликовано 4 Марта 2011 У меня возникла проблема с acdc 1.0003: отказывается собирать all.spawn с новыми артами. И еще добавил локацию, собрал и все работает, но назад разобрать- разбирает какую-то ерунду. Скажите, что я делаю не так? Добавлено через 163 мин.: еще подскажите такое: game.graph (я понял это Spawn doesn't correspond to the graph : REBUILD SPAWN! из-за него?) Ссылка на комментарий
Disord 1 Опубликовано 4 Марта 2011 Поделиться Опубликовано 4 Марта 2011 (изменено) midichs Если отказывается собирать all.spawn с новыми предметами (пусть то будут твои арты, или аномалии, например), нужно добавить их в acdc.pl. Ищешь такую строчку (у меня она 2095): af_cristall => 'cse_alife_item_artefact', И ниже добавляешь свой артефакт: название_арта => 'cse_alife_item_artefact', Если тебе нужно добавить свои патроны, то тоже куда-нибудь рядом добавляешь: название_патрона => 'cse_alife_item_ammo', Аномалии: название_аномалии => 'se_zone_anom', Предмет (типа еды и т.д.): название_предмета => 'cse_alife_item', И так далее и так далее. В общем, добавляешь что тебе нужно, ориентируясь на уже добавленные секции. ------- разбирает какую-то ерунду Ерунда - понятие растяжимое. ------- еще подскажите такое: game.graph (я понял это Spawn doesn't correspond to the graph : REBUILD SPAWN! из-за него?) Спавн не соответствует графу. Переделайте спавн! У тебя в game.graph добавлена новая локация? Но это уже не ко мне, я такие дела делать не пробовал. Просто читал, что такое нужно делать. Добавлено через 16 мин.: Взял скрипт из АМК - watcher_act. Нашёл вот это (всего лишь часть таблицы): local valuable_clsid={ [clsid.art_black_drops]=true, [clsid.art_dummy]=true, [clsid.device_pda]=true, [clsid.equ_stalker_s]=true, [clsid.obj_antirad]=true, [clsid.obj_food]=true, [clsid.wpn_ammo_vog25]=true, [clsid.wpn_knife_s]=true, [clsid.wpn_lr300_s]=true, [clsid.wpn_scope_s]=true, [clsid.wpn_silencer]=true, } За что она отвечает? Предметы, которые надо поднимать сталкерам? Каким образом тогда добавлять свои? Тут названия не такие, как в их секциях. Изменено 4 Марта 2011 пользователем Disord Ссылка на комментарий
Garry_Galler 7 Опубликовано 5 Марта 2011 Поделиться Опубликовано 5 Марта 2011 (изменено) Disord Смотри lua_help - C++ class clsid - там перечислены все clsid'ы объектов сталкеров. Список clsid - это перечисление (enum), делается в программировании для удобства использования, значение - определенное число, которое является идентификтором определенной группы объектов\ или одного объекта. Например clsid.obj_medkit это все виды аптечек, а clsid.obj_bolt - только болт. Проверяется так if obj:clsid()==clsid.obj_medkit then (где obj - это юзердата объекта). Изменено 5 Марта 2011 пользователем Garry_Galler 1 Ссылка на комментарий
eXiu 7 Опубликовано 6 Марта 2011 Поделиться Опубликовано 6 Марта 2011 А можно ли заспаунить какой-либо домик на ( к примеру) Кардон и как это сделать? Подскажите пожалуйста. Ссылка на комментарий
amik 253 Опубликовано 6 Марта 2011 Поделиться Опубликовано 6 Марта 2011 (изменено) eXiu А АИ сетка? Нпс твой домик не обойдут... Цитата из ст_вики: [vedro]:identity_immunities ;vedro — название спавн-секции предмета (Потом мы будем через него спавнить). Пишется латиницей. $spawn = "physics\object" ;путь спавн-секции в дереве спавн-объектов в СДК (если не пользуетесь СДК, то особой важности не имеет). visual = objects\dynamics\decor\vedro_01.ogf ;Путь до модели физического объекта из папки meshes. class = O_PHYS_S remove_time = 60000 ;Время через которое объект исчезнет. Число до от 0 до 9999, если поставить 9999 то он просуществует очень долго. Так можно любой предмет в игру засунуть через спавн. Изменено 6 Марта 2011 пользователем amik Мой архив Сталкером не занимаюсь. Ссылка на комментарий
eXiu 7 Опубликовано 6 Марта 2011 Поделиться Опубликовано 6 Марта 2011 iDreD, Попробую. Ах да, правдо не в тему. А где можно найти модели домов в Stalker? Всю папку meshes обыскал не нашел... Ссылка на комментарий
amik 253 Опубликовано 6 Марта 2011 Поделиться Опубликовано 6 Марта 2011 Уже не в тему ведем тему)). eXiu качай сталкер контент, там домиков много. Только в огм формат перегони через АЕ Мой архив Сталкером не занимаюсь. Ссылка на комментарий
Disord 1 Опубликовано 7 Марта 2011 Поделиться Опубликовано 7 Марта 2011 (изменено) Всем привет! Есть проблема и вопрос Вот у меня actor_binder:reinit() в bind_stalker есть 3 (как это называется? ): self.object:set_callback(callback.use_object, self.use_callback, self) self.object:set_callback(callback.use_object, self.use_inventory_item, self) self.object:set_callback(callback.use_object, self.use_object, self) Ниже 3 функции: function actor_binder:use_inventory_item(item) --// xr_companion xr_companion.use_inventory_item(item:section()) --// xr_companion end function actor_binder:use_callback(obj, who) ---------bolt mod------------------ bolt_mod.on_actor_use(obj) ----------------------------------- end function actor_binder:use_object(obj) dis_mod.use_snd(obj) end Первая - отвечает за вызов окошка с выбором действий при использовании коротковолновой рации, вторая - произведение различные операций с фейковым болтом, а третья - за воспроизведение звука при употреблении еды/воды. Проблема в том, что одна из этих функций не работает - с коротковолновой рацией. Если удалить третью, со звуком, то первая работает. Почему так? Пробовал вызов функции из третьей функции use_snd переместить во вторую - не работает воспроизведение звука. Что такое и почему не работает? Создал секцию респавна: [12790] ; cse_abstract properties section_name = respawn name = respawn_boars position = 147.049,5.436,273.007 direction = 0,0,0 ; cse_alife_object properties game_vertex_id = 4302 distance = 10 level_vertex_id = 989271 object_flags = 0xffffff3e custom_data = <<END [respawn] respawn_section = boar_weak,12, boar_normal,6, boar_strong,3 max_count = 4 min_count = 5 max_spawn = 10 idle_spawn = medium conditions = {=gulag_population_le(gar_old_boars:3)} 60,0 END ; cse_shape properties shapes = shape0 shape0:type = sphere shape0:offset = 0,0,0 shape0:radius = 1 ; cse_alife_space_restrictor properties restrictor_type = 0 ; se_respawn properties Выкосил весь гулаг gar_old_boars. Сколько примерно времени надо ждать респавна? Он в происходит в оффлайн? Изменено 7 Марта 2011 пользователем Disord Ссылка на комментарий
Bak 754 Опубликовано 7 Марта 2011 Поделиться Опубликовано 7 Марта 2011 Всем привет! Есть проблема и вопрос Вот у меня actor_binder:reinit() в bind_stalker есть 3 (как это называется? ): self.object:set_callback(callback.use_object, self.use_callback, self) self.object:set_callback(callback.use_object, self.use_inventory_item, self) self.object:set_callback(callback.use_object, self.use_object, self) Ниже 3 функции: function actor_binder:use_inventory_item(item) --// xr_companion xr_companion.use_inventory_item(item:section()) --// xr_companion end function actor_binder:use_callback(obj, who) ---------bolt mod------------------ bolt_mod.on_actor_use(obj) ----------------------------------- end function actor_binder:use_object(obj) dis_mod.use_snd(obj) end Первая - отвечает за вызов окошка с выбором действий при использовании коротковолновой рации, вторая - произведение различные операций с фейковым болтом, а третья - за воспроизведение звука при употреблении еды/воды. Проблема в том, что одна из этих функций не работает - с коротковолновой рацией. Если удалить третью, со звуком, то первая работает. Почему так? Пробовал вызов функции из третьей функции use_snd переместить во вторую - не работает воспроизведение звука. Что такое и почему не работает? Потому что не нужно вешать на один колбэк несколько функций, следует объединить их в одну. Ссылка на комментарий
Zander_driver 10 334 Опубликовано 8 Марта 2011 Поделиться Опубликовано 8 Марта 2011 Вобщем, напоролся на непонятку при решении одной, кхм, задачи. Задача была такая: Если гг передает определенный итем в инвентарь трупа или ящика, то - уже в инвентаре трупа\ящика удалить этот предмет и заспавнить другой. Как я себе представляю метод решения: в дроп-колбэке отслеживаем скидывание предмета (а он срабатывает и на собственно дроп, и на передачу трупу\ящику, и на передачу в диалоге), затем проверяем наличие системного инфопоршня ui_car_body, сохраняем объект в переменную, и из метода actor:update(delta) смотрим парент этого объекта, если получаем не 0 и не -1 - значит спавним в инвентарь (нпс? а у нас труп\ящик...) по полученному ид нового владельца, а старый объект удаляем по его опять же ид. Собственно как я это делал: В actor_binder:on_item_drop (obj) twoteam.drop_medics(obj) * * * function drop_medics(obj) --- запускает систему замены предмета, если произошла передача ящику или трупу if obj then local section = obj:section() if section == "medkit" then if db.actor:has_info("ui_car_body") then --- передача ящику/трупу twoteam.start_parent_respawn(obj, "wpn_pm") end end end end local respawn_parent_need = false --- ключ, надо или нет заменять предмет local respawn_parent_object --- переданный объект, который потом удаляем local respawn_parent_section = "" --- секция нового предмета --- эти объявлены просто в файле, вне всяких функций function get_parent() --- проверяет парент сохраненного объекта if respawn_parent_object then return respawn_parent_object:parent() end end function start_parent_respawn(item, section) --- сохраняет данные переданного объекта, и секцию того что нужно заспавнить вместо него if item and section then respawn_parent_need = true respawn_parent_object = item respawn_parent_section = section return true else return false end end function wait_respawn() --- update замены в чужих инвентарях --- вызывается из update актора, проверяет парент переданного объекта, если не 0 и не -1 запускает замену. --- после замены обнуляет сохраненные данные, предотвращая повторные срабатывания if respawn_parent_need and respawn_parent_object then local parent = twoteam.get_parent() if parent == 0 or parent == -1 then return nil else twoteam.reitem_parent(respawn_parent_object, respawn_parent_section, parent) respawn_parent_need = false respawn_parent_object = nil respawn_parent_section = "" end end end function reitem_parent(item, section, parentid) --- заменяет предмет item (game_object*) на section. (string). замена происходит в инвентаре нпс/трупа/ящика с id = parentid. точнее, замена должна быть поидее... local sim = alife() if not (sim and item and section and parentid) then return end --- need msg to log local seid = item:id() if seid then local seobj = sim:object(seid) if seobj then sim:release(seobj, true) --- удаляем старый объект spawn.inv(section, parentid) --- спавним новый end end end function inv(item,npc_id) --- spawn.inv if npc_id == nil then npc_id = db.actor:id() end local obj = alife():create(item,vector():set(0,0,0),1,1,npc_id) return obj end Ну вот, комментариями снабдил для упрощения разбирательств Что происходит в итоге: Когда передаю аптечку в инвентарь ящика, она оттуда просто исчезает, ПМ не спавнится. А когда передаю трупу, почему то виснет биндер актора. (определил по исчезновению матраса после даблклика). Что я делаю не так? и можно ли через спавн по нпс_ид спавнить в инвентарь трупа/ящика, или это только для живых? Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine. Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист. AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD. Ссылка на комментарий
eXiu 7 Опубликовано 8 Марта 2011 Поделиться Опубликовано 8 Марта 2011 (изменено) Привет всем. Начал учиться спауну. Для теста заспаунил модель вагончика. Но вот небольшая проблемка. Модель застряла в земле..... Как это исправить, подскажите пожалуйста... Зарание спасибо. Ах да, это выравнивается выстрелом в вагон. Он как бы выстреливается и встаёт на место ровно.... А какие значения строки direction, в all.spawn. Куфзук Добавлено через 56 мин.: Куфзук, [1089] ; cse_abstract properties section_name = physic_object name = trader_physic_object0013 position = -172.456924,-6.790123,-33.856129 direction = 0.958322,0.000000,0.285691 ; cse_alife_object properties game_vertex_id = 71 distance = 12.5999994277954 level_vertex_id = 78147 object_flags = 0xfffffffa ; cse_visual properties visual_name = prop\prop_workers ; cse_ph_skeleton properties skeleton_name = ; cse_alife_object_physic properties physic_type = 0x3 mass = 99999999999 Попробуй прописать в строке direction нули и вместо массы в много девяток, лучше пропиши вот такую кустом дату: custom_data = <<END [collide] ignore_static END Куфзук Изменено 8 Марта 2011 пользователем Куфзук Ссылка на комментарий
amik 253 Опубликовано 9 Марта 2011 Поделиться Опубликовано 9 Марта 2011 (изменено) Для общей информации. Товарищ erlik (Garry_Galler) сделал недавно АИ схему по этому поводу: AI схема - "Разборка в баре" Тестовый вариант (имеет некоторые ограничения, поэтому возможно будет дорабатываться). Для включения схемы просто зайдите в бар и возьмите чужое со стола. За все дальнейшее я не отвечаю. Есть возможность включить схему не только в баре - читайте комментарии к схеме в файле m_bar.script. Но по умолчанию она включена только для бара. Описание: При попытке взять предмет, находящийся неподалеку от NPC, он может обидеться на это и дать по фейсу. Если попытаетесь уйти - бросится догонять, если не догонит - запустит вам чем-нибудь вслед. Если попадете под удар - не ждите что NPC ограничится только одним ударом - их может быть гораздо больше, и каждый отнимает немного здоровья. Может и до полусмерти забить. PS: Недоработки схемы прежде всего в том, что под нее берется только один сталкер за раз, а хотелось бы сделать, чтобы одновременно могли подключиться к действию и другие, хотя бы в качестве активных наблюдателей. НО, так как это моя первая AI схема, то много еще неясно и есть куча нюансов, в которых мне пока не удалось разобраться. Например, не получилось сделать временное отключение привязки сталкеров к рестриктору, из которого им запрещено выходить.(Сами методы то мне известны, только работают они не так как хотелось бы). Управление движением NPC тоже непростая, как выяснилось, штука Поэтому некоторые сталкеры могут двигаться кривовато. Кстати, Информатор в баре с трудом берется по контроль схемы - в большинстве случаев он не двигается с места - у меня только пару раз срывался и бежал догонять ГГ. Бармен тоже не хочет подчиняться. В общем, есть еще куча "неясностей и непонятностей" (как сказала бы кэролловская Алиса), распутать которые мне еще предстоит. Изменено 9 Марта 2011 пользователем amik Мой архив Сталкером не занимаюсь. Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти