Maksud 34 Опубликовано 18 Февраля 2017 Доброго времени суток! Ковыряю Лост Альфу, и тут с толкнулся с проблемой в виде непонимания работы скриптов. Короче суть в том, что хочу приколхозить скрипт оповещающий о гибели сталкеров. За основу взял наработку из этой темы, за авторством Сталкер Лом + ряд своих изменений под реалии Лост Альфы. Если кто сможет помочь заставить работать сие творение буду очень благодарен. Я в скриптах можно сказать 0. Буду рад любой помощи. --Сообщение о гибели сталкеров function necrolog(oVictim)local level_name = {["la01_escape"] = "Кордон",["la02_garbage"] = "Свалка",["la03_agroprom"] = "НИИ Агропром",["la04_darkdolina"] = "Тёмная долина",["la17u_labx7"] = "Лаборатория X-7",["la05_bar_rostok"] = "Бар",["la14_rostok_factory"] = "Завод Росток",["la07_military"] = "Арм.склады",["la06_yantar"] = "Янтарь",["la16u_labx16"] = "Лаборатория X-16",["la19_country"] = "Деревня",["la10_radar"] = "Радар",["la11_pripyat"] = "Припять",["la12_stancia"] = "ЧАЭС",["la10u_bunker"] = "Бункер Х-10",["la12u_sarcofag"] = "Саркофаг",["la13u_warlab"] = "Варлаб",["la22_forest"] = "Лес",["la08_deadcity"] = "Мертвый город",["la09_swamp"] = "Большие болота",["la13_generators"] = "Генераторы",["la04u_darklab"] = "Лаборатория Х-18",["la13u_oso"] = "Осознание",["la14u_secret_lab"] = "Секретная лаборатория ЧАЭС",["la15_darkscape"] = "Темная Лощина",["la15u_mines"] = "Неизвестная територия",["la16_lost_factory"] = "Цементный Завод",["la18_damned"] = "Подземелье припяти",["la20_forgotten"] = "Стройплощадка",["la21_generators_2"] = "Генераторы 2"["la17_outskirts"] = "Чернобыль"["la20_test"] = "Тест",["la20_final_test"] = "Тест финальный"}local death_komment = {"Я знал, что он допрыгается...","[Вырезано цензурой]","Ещё один...","Таак...","Мдя, ни дня без этого.","Одним больше, одним меньше...","Все там будем","Помянуть надо бы...","Зона тебе пухом.","Как в воду глядел - скопытился!"}local community = {["actor"] = "Сталкер",["stalker"] = "Сталкер",["monolith"] = "Монолит",["army"] = "Военные",["bandit"] = "Бандит",["killer"] = "Наемник",["ecolog"] = "Эколог",["dolg"] = "Долг",["freedom"] = "Свобода",["dark_stalker"] = "Грех",["arena_enemy"] = "Опонент",["zombied"] = "Зомбированный"}--Сообщение о гибели сталкеровlocal necrolog_text = "\\n%c[255,160,160,160]Погиб сталкер: %c[default]"..oVictim:character_name().."\\n%c[255,160,160,160]Группировка: %c[default]"..community[oVictim:character_community()].."\\n%c[255,160,160,160]Локация: %c[default]"..level_name[level.name()]..""local shans = math.random(1,100)local comment_text = death_komment[math.random(table.getn(death_komment))]if oVictim and IsStalker(oVictim) and shans>27 thendb.actor:give_game_news(necrolog_text, "ui\\ui_iconstotal",Frect():set(83,470,83,47),3000,3000)xr_sound.set_sound_play(db.actor:id(), "pda_tips")if shans>70 thendb.actor:give_game_news(comment_text, "ui\\ui_iconstotal",Frect():set(83,470,83,47),3000,3000)endendend--Сообщение о гибели сталкеров --[[-----------------------------------------------------------------------------------------------File : xr_death.scriptDescription: Scheme shows, what's happen when NPC diesCopyright : 2004 © GSC Game WorldAuthor : GSC Game WorldLast edit : 21.07.2013 [...]--]]-------------------------------------------------------------------------------------------------/ -------------------------------------------------------------------/ VARIABLEs--/ -----------------------------------------------------------------local sModule = script_name()--/ -----------------------------------------------------------------local log = function(fmt,...) _G.log(sModule..":"..tostring(fmt),...) end--/ -------------------------------------------------------------------/ CONSTRUCTION SCHEME--/ -------------------------------------------------------------------------------------------------/ Action--/ -----------------------------------------------------------------------------------------------class "action_process_death"--/ ---------------------------------------------function action_process_death:__init(obj, st)self.object = objself.st = stself.log = st.logend--/--------------------------------------------------------------------/ CALLBACK--/------------------------------------------------------------------function action_process_death:death_callback(oVictim, oWho)news_death_stalker.necrolog(oVictim) -- Некролог в общий каналif self.log then log("death_callback:NPC=[%s],Killer=[%s]%s)", oVictim and oVictim:name(), oWho and oWho:name(), ">") end --/#~#if oWho then-- log("death_callback:Victim=[%s],Id=[%s]<~killed_by=[%s]", oVictim:name(), oVictim:id(), oWho:name(), "") --/#~#self.st.killer = oWho:id()self.st.killer_name = oWho:name()if self.st.killer == idActor thenxr_statistic.addKillCount(self.object)end--/ giving a small impulse forward.local h = hit()h.draftsman = self.objecth.type = hit.fire_woundh.direction = oWho:position():sub(self.object:position())h:bone("bip01_spine")h.power = 1h.impulse = 10self.object:hit(h)elselog("death_callback:Victim=[%s]<~killed_by=[unknown]:<%s>", oVictim and oVictim:name(), "Info!")self.st.killer = -1endif self.st.info thenif self.log then log("death_callback:NPC=[%s],info=[%s]", self.object:name(), self.st.info, "") end --/#~#xr_logic.pick_section_from_condlist(db.actor, self.object, self.st.info)endif self.st.info2 thenif self.log then log("death_callback:NPC=[%s],info2=[%s]", self.object:name(), self.st.info2, "") end --/#~#xr_logic.pick_section_from_condlist(db.actor, self.object, self.st.info2)end--xr_logic.try_switch_to_another_section(self.object, self.st, db.actor) --/#x#smart_terrain.on_death( self.object:id() )end--/ -------------------------------------------------------------------------------------------------/ BINDER--/ -----------------------------------------------------------------------------------------------function add_to_binder(npc, ini, scheme, section, st)--log("add_to_binder:NPC=[%s],scheme=[%s],section=[%s]%s)", npc:name(), scheme, section, ">") --/#~#st.action = this.action_process_death(npc, st)end--/--------------------------------------------------------------------/ SET SCHEME--/------------------------------------------------------------------function set_scheme(npc, ini, scheme, section, gulag_name)local st = xr_logic.assign_storage_and_bind(npc, ini, scheme, section)st.logic = xr_logic.cfg_get_switch_conditions(ini, section, npc)--/ registration of action, for call of 'callback' and method 'reset_scheme' when changing scheme settings:xr_logic.subscribe_action_for_events(npc, st, st.action)--/ fot debug:if st.log then log("set_scheme:NPC=[%s],scheme=[%s],section=[%s],gulag=[%s]", npc:name(), scheme, section, gulag_name, "") end --/#~#end--/--------------------------------------------------------------------/ RESET SCHEME--/------------------------------------------------------------------function reset_scheme(npc, scheme, stor, section)if stor.log then log("reset_death:NPC=[%s],scheme=[%s],section=[%s]%s)", npc and npc:name(), scheme, section, ">") end --/#~#local scheme_section = Get_Cfg_String(stor.ini, stor.section_logic, "on_death")if scheme_section and npc thenlocal info_section = Get_Cfg_String(stor.ini, scheme_section, "on_info")if info_section thenstor.death.info = xr_logic.parse_condlist(npc, scheme_section, "death", info_section)endlocal info_section2 = Get_Cfg_String(stor.ini, scheme_section, "on_info2")if info_section2 thenstor.death.info2 = xr_logic.parse_condlist(npc, scheme_section, "death", info_section2)endif stor.log then log("reset_death:NPC=[%s],on_death=[%s],on_info=[%s/%s]", npc and npc:name(), scheme_section, info_section, info_section2, "") end --/#~#endend--/--------------------------------------------------------------------/ REDIRECTs (for compatibility, later delete)--/------------------------------------------------------------------function set_death(...)set_scheme(...)endfunction reset_death(...)reset_scheme(...)end--/ ----------------------------------------------------------------------------------------------- Expression : fatal errorFunction : CScriptEngine::lua_errorFile : script_engine.cppLine : 75Description : Arguments : LUA error: ...\stalker lost alpha\gamedata\scripts\xr_death.script:31: attempt to index global 'news_death_stalker' (a nil value) Поделиться этим сообщением Ссылка на сообщение
Maksud 34 Опубликовано 19 Февраля 2017 С прошлым вылетом разобрался. Заставил работать скрипт...Но...Столкнулся с другой проблемой. При смерти мутантов, а именно плоти в начале игры, происходит новый вылет. Природа мне его не ясна. В скрипте прописаны исключительно группировки, но никак не мутанты. Облазил все файлы отвечающие за отображение новостей, файл где прописаны отношения к группировкам и репутации. Так и не понял в чем соль... --Сообщение о гибели сталкеров -- Некролог (На основе работы тов. Weanchester), Сталкер Лом. Правки Maksud, помощь Капрал Хиксfunction necrolog(oVictim)local level_name = {["la01_escape"] = "Кордон",["la02_garbage"] = "Свалка",["la03_agroprom"] = "НИИ Агропром",["la04_darkdolina"] = "Тёмная долина",["la17u_labx7"] = "Лаборатория X-7",["la05_bar_rostok"] = "Бар",["la14_rostok_factory"] = "Завод Росток",["la07_military"] = "Арм.склады",["la06_yantar"] = "Янтарь",["la16u_labx16"] = "Лаборатория X-16",["la19_country"] = "Деревня",["la10_radar"] = "Радар",["la11_pripyat"] = "Припять",["la12_stancia"] = "ЧАЭС",["la10u_bunker"] = "Бункер Х-10",["la12u_sarcofag"] = "Саркофаг",["la13u_warlab"] = "Варлаб",["la22_forest"] = "Лес",["la08_deadcity"] = "Мертвый город",["la09_swamp"] = "Большие болота",["la13_generators"] = "Генераторы",["la04u_darklab"] = "Лаборатория Х-18",["la13u_oso"] = "Осознание",["la14u_secret_lab"] = "Секретная лаборатория ЧАЭС",["la15_darkscape"] = "Темная Лощина",["la15u_mines"] = "Неизвестная територия",["la16_lost_factory"] = "Цементный Завод",["la18_damned"] = "Подземелье припяти",["la20_forgotten"] = "Стройплощадка",["la21_generators_2"] = "Генераторы 2",["la17_outskirts"] = "Чернобыль",["la20_test"] = "Тест",["la20_final_test"] = "Тест финальный"}local death_komment = {"Я знал, что он допрыгается...","[Вырезано цензурой]","Ещё один...","Таак...","Мдя, ни дня без этого.","Одним больше, одним меньше...","Все там будем","Помянуть надо бы...","Зона тебе пухом.","Как в воду глядел - скопытился!"}local community = {["actor"] = "Сталкер",["stalker"] = "Сталкер",["monolith"] = "Монолит",["army"] = "Военные",["bandit"] = "Бандит",["killer"] = "Наемник",["ecolog"] = "Эколог",["dolg"] = "Долг",["freedom"] = "Свобода",["dark_stalker"] = "Грех",["arena_enemy"] = "Опонент",["zombied"] = "Зомбированный"}-- Сообщение о гибели сталкеровlocal necrolog_text = "\\n%c[255,160,160,160]Погиб сталкер: %c[default]"..oVictim:character_name().."\\n%c[255,160,160,160]Группировка: %c[default]"..community[oVictim:character_community()].."\\n%c[255,160,160,160]Локация: %c[default]"..level_name[level.name()]..""local shans = math.random(1,100)local comment_text = death_komment[math.random(table.getn(death_komment))]if oVictim and IsStalker(oVictim) and shans>27 thennews_manager.send_tip(db.actor, necrolog_text , math.random(1,4), "necrolog", nil, nil)-- xr_sound.set_sound_play(db.actor:id(), "Info")if shans>70 thennews_manager.send_tip(db.actor, death_komment , math.random(1,4), "necrolog", nil, nil)endendend-- Сообщение о гибели сталкеров --[[-----------------------------------------------------------------------------------------------File : xr_death.scriptDescription: Scheme shows, what's happen when NPC diesCopyright : 2004 © GSC Game WorldAuthor : GSC Game WorldLast edit : 21.07.2013 [...]--]]-------------------------------------------------------------------------------------------------/ -------------------------------------------------------------------/ VARIABLEs--/ -----------------------------------------------------------------local sModule = script_name()--/ -----------------------------------------------------------------local log = function(fmt,...) _G.log(sModule..":"..tostring(fmt),...) end--/ -------------------------------------------------------------------/ CONSTRUCTION SCHEME--/ -------------------------------------------------------------------------------------------------/ Action--/ -----------------------------------------------------------------------------------------------class "action_process_death"--/ ---------------------------------------------function action_process_death:__init(obj, st)self.object = objself.st = stself.log = st.logend--/--------------------------------------------------------------------/ CALLBACK--/------------------------------------------------------------------function action_process_death:death_callback(oVictim, oWho)news_death_stalker.necrolog(oVictim, oWho) -- Некролог в общий каналif self.log then log("death_callback:NPC=[%s],Killer=[%s]%s)", oVictim and oVictim:name(), oWho and oWho:name(), ">") end --/#~#if oWho then-- log("death_callback:Victim=[%s],Id=[%s]<~killed_by=[%s]", oVictim:name(), oVictim:id(), oWho:name(), "") --/#~#self.st.killer = oWho:id()self.st.killer_name = oWho:name()if self.st.killer == idActor thenxr_statistic.addKillCount(self.object)end--/ giving a small impulse forward.local h = hit()h.draftsman = self.objecth.type = hit.fire_woundh.direction = oWho:position():sub(self.object:position())h:bone("bip01_spine")h.power = 1h.impulse = 10self.object:hit(h)elselog("death_callback:Victim=[%s]<~killed_by=[unknown]:<%s>", oVictim and oVictim:name(), "Info!")self.st.killer = -1endif self.st.info thenif self.log then log("death_callback:NPC=[%s],info=[%s]", self.object:name(), self.st.info, "") end --/#~#xr_logic.pick_section_from_condlist(db.actor, self.object, self.st.info)endif self.st.info2 thenif self.log then log("death_callback:NPC=[%s],info2=[%s]", self.object:name(), self.st.info2, "") end --/#~#xr_logic.pick_section_from_condlist(db.actor, self.object, self.st.info2)end--xr_logic.try_switch_to_another_section(self.object, self.st, db.actor) --/#x#smart_terrain.on_death( self.object:id() )end--/ -------------------------------------------------------------------------------------------------/ BINDER--/ -----------------------------------------------------------------------------------------------function add_to_binder(npc, ini, scheme, section, st)--log("add_to_binder:NPC=[%s],scheme=[%s],section=[%s]%s)", npc:name(), scheme, section, ">") --/#~#st.action = this.action_process_death(npc, st)end--/--------------------------------------------------------------------/ SET SCHEME--/------------------------------------------------------------------function set_scheme(npc, ini, scheme, section, gulag_name)local st = xr_logic.assign_storage_and_bind(npc, ini, scheme, section)st.logic = xr_logic.cfg_get_switch_conditions(ini, section, npc)--/ registration of action, for call of 'callback' and method 'reset_scheme' when changing scheme settings:xr_logic.subscribe_action_for_events(npc, st, st.action)--/ fot debug:if st.log then log("set_scheme:NPC=[%s],scheme=[%s],section=[%s],gulag=[%s]", npc:name(), scheme, section, gulag_name, "") end --/#~#end--/--------------------------------------------------------------------/ RESET SCHEME--/------------------------------------------------------------------function reset_scheme(npc, scheme, stor, section)if stor.log then log("reset_death:NPC=[%s],scheme=[%s],section=[%s]%s)", npc and npc:name(), scheme, section, ">") end --/#~#local scheme_section = Get_Cfg_String(stor.ini, stor.section_logic, "on_death")if scheme_section and npc thenlocal info_section = Get_Cfg_String(stor.ini, scheme_section, "on_info")if info_section thenstor.death.info = xr_logic.parse_condlist(npc, scheme_section, "death", info_section)endlocal info_section2 = Get_Cfg_String(stor.ini, scheme_section, "on_info2")if info_section2 thenstor.death.info2 = xr_logic.parse_condlist(npc, scheme_section, "death", info_section2)endif stor.log then log("reset_death:NPC=[%s],on_death=[%s],on_info=[%s/%s]", npc and npc:name(), scheme_section, info_section, info_section2, "") end --/#~#endend--/--------------------------------------------------------------------/ REDIRECTs (for compatibility, later delete)--/------------------------------------------------------------------function set_death(...)set_scheme(...)endfunction reset_death(...)reset_scheme(...)end--/ -------------------------------------------------------------------------------- Expression : fatal errorFunction : CIni_IdToIndex<1,struct COMMUNITY_DATA,class shared_str,int,class CHARACTER_COMMUNITY>::GetByIndexFile : x:\stalker\xray-svn-trunk\xr_3da\xrgame\ini_id_loader.hLine : 147Description : Arguments : item by index not found in section game_relations, line communities Поделиться этим сообщением Ссылка на сообщение
Maksud 34 Опубликовано 20 Февраля 2017 naxac в xr_motivator нет совсем никаких callback. Скрипты ЛА очень сильно отличаются --[[ ---------------------------------------------------------------------------------------------- File : xr_motivator.scriptDescription: Motivator bindingCopyright : 2004 © GSC Game WorldAuthor : Didenko Ruslan (Stohe)Editors : ...Last edit : 15.06.2013 [...]--]] ------------------------------------------------------------------------------------------------/ -------------------------------------------------------------------/ VARIABLEs--/ -----------------------------------------------------------------local sModule = script_name()--/ -----------------------------------------------------------------local log = function(fmt,...) _G.log(sModule..":"..tostring(fmt),...) end--/ -------------------------------------------------------------------/ Conditions array (evaluators), which have highest priority, and, accordinly, interrupt other scripts/schemes.--/ -------------------------tMainProperties = {[1] = { stalker_ids.property_alive, true }, --/ NPC alive[2] = { stalker_ids.property_enemy, false}, --/ no enemies[3] = { stalker_ids.property_danger, false}, --/ no danger[4] = { stalker_ids.property_anomaly, false} --/ no anomalies}tCommonProperties = {[1] = { xr_evaluators_id.sidor_wounded_base, false }, --/ not wounded[2] = { xr_evaluators_id.chugai_heli_hunter_base, false }, --/ don't see helicopters[3] = { xr_evaluators_id.abuse_base, false }, --/ not offended[4] = { xr_evaluators_id.stohe_meet_base +1, false } --/ no talk}tDynamicProperties = {} --/#+#--/--------------------------------------------------------------------------------------------------/ Process--/------------------------------------------------------------------------------------------------function addCommonProperty( tProperty )if type(tProperty) == 'table' thentable.insert( tCommonProperties, tProperty )endendfunction addDynamicProperty( tProperty )if type(tProperty) == 'table' thentable.insert( tDynamicProperties, tProperty )endend--/ -----------------------------------function addMainPrecondition( oAction )for _,v in ipairs (tMainProperties) dooAction:add_precondition( world_property(v[1],v[2]) )endendfunction addCommonPrecondition( oAction )for _,v in ipairs (tCommonProperties) dooAction:add_precondition( world_property(v[1],v[2]) )endendfunction addGeneralPrecondition( oAction )addMainPrecondition( oAction )addCommonPrecondition( oAction )end--/#+#function addDynamicPrecondition( oAction )for _,v in ipairs (tDynamicProperties) do-- log("addDynamicPrecondition: %s idEv=[%s], flg=[%s]", oAction.object and oAction.object:name(), v[1], v[2], "") --/#~#oAction:add_precondition( world_property(v[1],v[2]) )endendfunction addAllPrecondition( oAction )addMainPrecondition( oAction )addCommonPrecondition( oAction )addDynamicPrecondition( oAction )end--/ ----------------------------------------------------------------------------------------------- Мысль твоя мне понятна попробую отследить где еще можно сделать вызов функции Поделиться этим сообщением Ссылка на сообщение