Svoboда 3 Опубликовано 23 Апреля 2009 Поделиться Опубликовано 23 Апреля 2009 Тема для обсуждения скриптов всего и всех в серии игр STALKER. Задавая вопрос (!): 1. Внимательно изучите суть вопроса. Вопрос должен соответствовать выбранной Вами темы. Это поможет сохранить порядок и читабельность темы, а также облегчит поиск и понимание сего; 2. Изучите то, что уже есть в теме (пролистайте "руками", воспользуйтесь поиском на форуме); 3. Изучите информацию которая может вам помочь: Stalkerin. Там есть много хороших статей касательно данной темы.Уроки по модостроению. Есть рабочие примеры готовых скриптов различного назначения. Справочное руководство по языку Lua 5.1https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/ruСправочник по функциям и классам. Собрано много информации по функциям и классам, не всем, но по основные сведения предоставлены. Логика со вступлением и четырьмя частями: ВступлениеЧасть перваяЧасть втораяЧасть третьяЧасть четвертая. Smart_terrain (в простонароде - гулаг)Интересный способ настроики логики для гулаговСкриптовая часть игровой логики 4. Дабы не превращать обсуждение в "кашу" разной информативной направленности, задавайте несколько вопросов по порядку (в разных постах) после того, как получите ответ на предыдущий вопрос; 5. "Спасибо" и тому подобное - будьте так любезны в ПМ. Если не любите писать в ПМ, в конце вопроса напишите фразу: "Заранее спасибо!" - или что-то в этом духе; 6. ПОЖАЛУЙСТА! Указывайте, для какой игры Вам необходима информация (ТЧ, ЧН, ЗП), если стоит мод - укажите название мода; 7. Если Вы что-то сделали и результат не такой, какой Вами задумывался, то, пожалуйста, приводите коды которые Вы изменяли/писали целиком! Это поможет другим правильно ответить на Ваш вопрос, а также оградит Вас от лишней писанины. 8. Оформляйте сообщение. Пользуйтесь тегами для того, чтобы отделить код от текста. Пишите грамотно - ПОЛЬЗУЙТЕСЬ ЗНАКАМИ ПРЕПИНАНИЯ. 9. И помните: «Правильно заданный вопрос – половина ответа». Какие вопросы следует задавать, а какие нет... Задавайте вопросы, которые касаются непосредственно скриптов и их работы, т.е. Вы что-то делаете, а у Вас что-то не получается, при этом у Вас на руках должен быть хотя бы какой-то код, свидетельствующий о Вашей причастности к вопросу. Вопросы которые будут удалятся, следовательно их задавать не нужно:-- Где находится та или иная функция? Для ответа используем поиск по словам среди файлов оригинальной игры или мода, если объект поиска относится к нему, при помощью программы, которая Вам наиболее симпатизирует;-- Как сделать что-то/то-то? С подобными вопросами, либо в "ковырялки", где Вам вероятнее всего так же не ответят, либо выдвигаем мысли, подкреплённые теорией, практикой (идеальный вариант) и здравым рассудком;-- Вопросы со смыслом: "сделайте", "совместите" и подобными глаголами повелительного наклонения.-- К тому же удалению будут подвергаться вопросы, в которых масштабно не используются теги, для отделения кода и цитат от основного текста, а также не вписан в спойлер код размером превышающие семь строк.Ответ на возможно возникший вопрос: В какую тему можно обратиться по поводу логики и спавна объектов? В тему "ковырялок" соответствующей версии игры, для которой Вы задаёте вопрос. И последнее: очень рекомендовано к прочтению Правила форума 1 2 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/
Kondr48 314 Опубликовано 15 Февраля 2017 Поделиться Опубликовано 15 Февраля 2017 (изменено) сигарета валяется на полу Что логично: db.actor:drop_item(oitem) --- А вообще, скорее всего, происходит так: у модели сигареты анимация только курения, при подборе слот активируется, вот анимация курева и проигрывается. Следовательно этот худовый предмет надо удалять. Изменено 15 Февраля 2017 пользователем Kondr48 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/416/#findComment-1066671
pc-2 139 Опубликовано 15 Февраля 2017 Поделиться Опубликовано 15 Февраля 2017 (изменено) @Kondr48, Ну да логично, если это убрать, то объект kurevo появляется в рюкзаке, а ГГ продолжает курить до конца анимации, потом Expression : assertion failed Function : xrServer::Process_event_rejectFile : E:\stalker\sources\trunk\xr_3da\xrGame\xrServer_process_event_reject.cppLine : 12Description : e_parent && e_entity Дааа, Бином Ньютона!!!! Изменено 15 Февраля 2017 пользователем pc-2 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/416/#findComment-1066674
Kondr48 314 Опубликовано 15 Февраля 2017 Поделиться Опубликовано 15 Февраля 2017 pc-2, я не знаю что у Вас там работает не так. Честно). Лично я бы сделал иначе. В колбеке на использование сигареты (на классе антирада) вызывал бы спавн худового объекта сигареты, затем в колбеке на взятие предмета уже ловил получение худ предмета, активировал его слот, запускал таймер равный длительности анимации, а по окончании очищал бы слот и выводил нужное сообщение. (Ну и заспавнить фейк-предмет который там даёт нужные бафы можно где-нибудь заранее, например вместе со спавном худ-сигареты, и съесть по окончании таймера) Конечно костыльно-заморочено, но без правок движка, в принципе, так оно и делается. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/416/#findComment-1066677
pc-2 139 Опубликовано 15 Февраля 2017 Поделиться Опубликовано 15 Февраля 2017 @Kondr48, Кое, что поменял, ну всё равно результат тод же. Эта функция db.actor:eat(db.actor:object("kurevo")) не работает. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/416/#findComment-1066681
Kober(BRUC) 99 Опубликовано 16 Февраля 2017 Поделиться Опубликовано 16 Февраля 2017 (изменено) @Kirgudu, так даже лучше! 4.5e-009 - Эквивалентно 4.5 * 10^-9 => что 10 знаков после запятой. Десять, потому что перед 'e', в дробной части, есть цифра. Если в дробной части нет цифр, то есть число целое, то количество цифр после запятой = степени 'e'. Например: 4e-010(0.0000000004) - 10 чисел после запятой. Изменено 16 Февраля 2017 пользователем Kober(BRUC) Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/416/#findComment-1066754
pc-2 139 Опубликовано 16 Февраля 2017 Поделиться Опубликовано 16 Февраля 2017 @Kondr48, Спасибо большое за совет, вот эту функцию function item_update() local item = db.actor:active_item()if not (item and item:section() == "sigaret") thenif snd_obj and snd_obj:playing() thensnd_obj:stop()endreturnend я привел к такому виду function item_update()']function item_update() local item = db.actor:active_item()if not (item and item:section() == "sigaret") thenif snd_obj and snd_obj:playing() thensnd_obj:stop()alife():create("kurevo", db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id())db.actor:eat(db.actor:object("kurevo"))endreturnend и всё заработало!!! 1 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/416/#findComment-1066864
aka_sektor 1 502 Опубликовано 18 Февраля 2017 Поделиться Опубликовано 18 Февраля 2017 (изменено) Пытаюсь заставить работать схему ph_target без мини-игры в Зове Припяти.1. На тестовом уровне, поставил мишень (spawn element -> dynamic_objects\armory_room\shooting_target_1)2. Прописал ей Custom Data: [logic] active=ph_target [ph_target] 3. Закинул в скрипты ph_target.script (из ЧН) и modules.script (в нём раскомментил схему).4. Изменил ph_target.script:- закомментил 2 строки начинающиеся на minigames_managerТаким образом на уровне мишень стоит, при попадании проигрывается соответствующий звук, но мишень не опускается.По подсказке @Charsi, в ph_target.script после: self.hit_update_time = time Написал: self:anim_down() А после: -- if animation ended then callback Написал: self:anim_up() Таким образом, на уровне мишень теперь лежит, и зациклен звук того, как она ложиться.При попадании она поднимается, и немного погодя снова ложиться. Но ведь, она должна стоять "молча", и только при попадании ложиться, и немного погодя вставать. В общем, непонятно куда дальше копать. Изменено 18 Февраля 2017 пользователем aka_sektor Моддинг трилогии S.T.A.L.K.E.R. - MODFAQ.RU | +TES/Fallout Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/416/#findComment-1067099
hi_flyer 75 Опубликовано 18 Февраля 2017 Поделиться Опубликовано 18 Февраля 2017 Такой вопрос. Можно ли добавлять мапспот без привязки его к какому либо объекту? Например к id вертекса? Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/416/#findComment-1067134
Карлан 1 050 Опубликовано 18 Февраля 2017 Поделиться Опубликовано 18 Февраля 2017 http://www.amk-team.ru/forum/topic/5525-soc-kovyriaemsia-v-fajlakh/?p=1032267 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/416/#findComment-1067136
dsh 3 824 Опубликовано 18 Февраля 2017 Поделиться Опубликовано 18 Февраля 2017 @Карлан, ну так приоткрой тайну, как основываясь на информации в том посте, поставить метку на произвольную позицию? Что из тебя вытягивать нужно. Хотел помочь, пиши полезную информацию. Или тебе покрасоваться в очередной раз? 1 dsh mod: https://github.com/dsh2dsh/op2ogse Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/416/#findComment-1067150
Карлан 1 050 Опубликовано 18 Февраля 2017 Поделиться Опубликовано 18 Февраля 2017 (изменено) @dsh, подобную информацию нужно воспринимать критически, а ты в очередной раз не на то обращаешь внимание. Основываясь на информации в посте, смотри, нужно вызвать функцию и передать туда требуемые параметры, это тип метки, описание, если его нет, то устанавливается "no_hint", далее, собственно сам вектор позиции и имя уровня на котором мы планируем поставить метку. Метка установлена Изменено 18 Февраля 2017 пользователем Карлан Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/416/#findComment-1067170
Kondr48 314 Опубликовано 18 Февраля 2017 Поделиться Опубликовано 18 Февраля 2017 (изменено) Карлан, в посте написано о движковых правках для этого, следовательно на чистой игре (на любой доступной всем версии движка) не сработает, следовательно, без приложения нужной правки это практически бесполезная, все же, информация, как о мне Если у вас есть какие-то аргументы в противовес моему коду - приводите выложенному коду? а как я могу приводить что то, если у меня не получится заценить его работоспособность? Как и у всех, кроме 26 человек я полагаю. Я делаю вывод, что моих текстовых наводок предельно достаточно Смотря для чего, для того чтобы посмотреть и заценить как работает - явно не достаточно. Вот сколько все лежит, а скачали только 26 человек. Где-то код лежит? Исходники движка? Так кроме 26 человек никто не знает где это лежит, мб потому и не качают? Или речь снова о текстах на пастбине?) Изменено 18 Февраля 2017 пользователем Kondr48 1 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/416/#findComment-1067171
naxac 2 605 Опубликовано 18 Февраля 2017 Поделиться Опубликовано 18 Февраля 2017 Можно ли добавлять мапспот без привязки его к какому либо объекту? В чистой игре - нет. Я делал так: спавнил там, где надо поставить метку, рестриктор (без логики и шейпа, просто как объект) и уже на него ставил метку. И id рестриктора сохранял в пстор актёру, чтобы потом можно было удалить. 1 Аддон для ОП-2.09.2: Яндекс/Google/GitHub/Тема на AP-PRO Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/416/#findComment-1067208
Карлан 1 050 Опубликовано 18 Февраля 2017 Поделиться Опубликовано 18 Февраля 2017 (изменено) Закрыть давно пора. Изменено 18 Февраля 2017 пользователем Карлан Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/416/#findComment-1067215
Maksud 34 Опубликовано 18 Февраля 2017 Поделиться Опубликовано 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 © разработчик серии игрAuthor : разработчик серии игрLast 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) Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/416/#findComment-1067306
Капрал Хикс 567 Опубликовано 19 Февраля 2017 Поделиться Опубликовано 19 Февраля 2017 @Maksud, пользуйся script Syntax Checker для Lua... --Сообщение о гибели сталкеров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--Сообщение о гибели сталкеров 1 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/416/#findComment-1067317
Maksud 34 Опубликовано 19 Февраля 2017 Поделиться Опубликовано 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 © разработчик серии игрAuthor : разработчик серии игрLast 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 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/416/#findComment-1067578
naxac 2 605 Опубликовано 20 Февраля 2017 Поделиться Опубликовано 20 Февраля 2017 (изменено) @Maksud, xr_death срабатывает и на смерть монстров, перенеси вызов в xr_motivator, в death_callback. Изменено 20 Февраля 2017 пользователем naxac Аддон для ОП-2.09.2: Яндекс/Google/GitHub/Тема на AP-PRO Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/416/#findComment-1067581
Maksud 34 Опубликовано 20 Февраля 2017 Поделиться Опубликовано 20 Февраля 2017 naxac в xr_motivator нет совсем никаких callback. Скрипты ЛА очень сильно отличаются --[[ ---------------------------------------------------------------------------------------------- File : xr_motivator.scriptDescription: Motivator bindingCopyright : 2004 © разработчик серии игрAuthor : 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--/ ----------------------------------------------------------------------------------------------- Мысль твоя мне понятна попробую отследить где еще можно сделать вызов функции Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/416/#findComment-1067591
naxac 2 605 Опубликовано 20 Февраля 2017 Поделиться Опубликовано 20 Февраля 2017 @Maksud, точно лост альфа же. В bind_stalker ищи. 1 Аддон для ОП-2.09.2: Яндекс/Google/GitHub/Тема на AP-PRO Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/416/#findComment-1067594
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти