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/
Norman Eisenherz 355 Опубликовано 31 Мая 2024 Поделиться Опубликовано 31 Мая 2024 [ЧН 1.5.10] При захвате смарта выдается два типовых сообщения "Спасибо за помощь, приходи за наградой". Тест показывает, что сообщения выдаются из [task_objects.script]: Spoiler --' Контратаку запустиь не получилось, выполняем квест. if self.actor_helped then self.last_check_task = "complete" --' Кидаем озвучку. for kk,vv in pairs(self.board.smarts[target_obj.id].squads) do if(self.play_regard=="") then xr_sound.set_sound_play(vv.commander_id, "alife_defence_actor_help", self.community, self.target) -- здесь elseif(self.play_regard~="nil") then xr_sound.set_sound_play(vv.commander_id, self.play_regard, self.community, self.target) end break end target_obj.combat_manager.combat_quest = "nil" else self.last_check_task = "reversed" target_obj.combat_manager.combat_quest = "nil" end Дальше странное: • в переборе отрядов есть break, который почему-то не действует • если добавить отсечку через логический флаг при запуске одного сообщения, второе сообщение все равно будет выдано • если добавить счетчик, он покажет 1 для обоих сообщений Почему выдается два сообщения? 1 Мини-моды: ТЧ ЧН ЗП Шпаргалка Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/618/#findComment-1484648
Kirgudu 1 372 Опубликовано 31 Мая 2024 Поделиться Опубликовано 31 Мая 2024 @Norman Eisenherz могу предположить только одно. В той же функции check_task немного выше есть условие if self.state == "counter_attack", в котором выдаётся ровно то же самое сообщение. Раз break и отсечка по флагу не срабатывает, единственное, что приходит в голову - это что последовательно срабатывает выдача сообщений из разных частей условия, с действующей контратакой и без оной. Рекомендую расставить флаги и логирование в обеих частях и проверить. Если я прав, дальше надо будет подумать, почему сначала запускается контратака, потом (видимо) практически сразу отменяется. Могу ошибиться, но на ранних этапах работы над OGSM CS 1.8 (народный патч) что-то такое мы встречали... но в последнее время это уже не проявлялось. Точно уже не помню, давно это было. 1 1 Свои работы и совместные проекты: Инструмент, OGSM CS, Final Stroke, HARDWARMOD Полезное: модули Артоса, XML парсер Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/618/#findComment-1484650
Norman Eisenherz 355 Опубликовано 31 Мая 2024 Поделиться Опубликовано 31 Мая 2024 Дублировал запуск звука тестовыми сообщениями – обе реплики выдаются из указанного места почти одновременно. Может xr_sound не успевает зарегистрировать звук до запуска следующего… Мини-моды: ТЧ ЧН ЗП Шпаргалка Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/618/#findComment-1484651
Norman Eisenherz 355 Опубликовано 1 Июня 2024 Поделиться Опубликовано 1 Июня 2024 [ЧН 1.5.10] Задача: исправить заголовок сообщения, которое выдается вместе с приветствием sound_start через одноименный звуку текст. Условия: приветствие Левши перед входом на завод выдается через конфиг логики [configs\scripts\yantar\yan_scene_6_stalker_5.ltx], при этом в заголовке сообщения не указывается имя NPC, хотя сообщение выдается от определенного объекта NPC с привязкой id. (Кроме Левши, такой подход применяется для торговцев – без дублирования субтитрами.) Решение через скрипты: переименовать текст для вывода отдельно от звука, отследить запуск реплики yan_levsha_hello_actor в [xr_meet.script] и добавить свое сообщение с заголовком и оформлением. Проблемы: приходится проверять все приветствия, и после перезагрузки текст выводится повторно – видимо, нужна еще привязка где-то в [xr_sound.script]. Возможно ли сделать вывод текста непосредственно через логику NPC, причем так, чтобы оно отобразилось только один раз при запуске звука приветствия? Добавление действия в строку victim вызывает ожидаемый спам сообщения на каждом апдейте, который можно порезать через логический флаг и инфо-поршни задания, но это уже костыли. Spoiler [meet@1] meet_state = 30 | hello_wpn@yan_levsha_hello_actor | 10 | guard@yan_levsha_hello_actor meet_state_wpn = 15 | backoff@meet_weapon_wait use_wpn = false sound_start = yan_levsha_hello_actor sound_start_wpn = meet_weapon_wait victim = 30 | actor victim_wpn = 30 | actor use = true use_wpn = true meet_dialog = yan_levsha_hello_dialog Мини-моды: ТЧ ЧН ЗП Шпаргалка Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/618/#findComment-1484681
Kirgudu 1 372 Опубликовано 2 Июня 2024 Поделиться Опубликовано 2 Июня 2024 5 часов назад, Norman Eisenherz сказал: Возможно ли сделать вывод текста непосредственно через логику NPC Возможно. В xr_meet.init_meet(npc, ini, section, st, scheme) добавить новый параметр для идентификатора кастомного сообщения, указав в соотв. блоках как дефолтное значение "nil", так и парсинг строки из конфига. В xr_meet.action_meet_wait:execute() при ненулевом значении прочитанного выше параметра добавить вывод сообщения параллельно со звуком и с учётом его условий. Оригинальное сообщение при этом отвязать от звука, а в секцию логики [meet@1] добавить строку с новым параметром. Это, конечно, не действия только с логикой, как, вероятно, хотелось, зато универсальное решение, которым можно будет воспользоваться и в других случаях. 1 Свои работы и совместные проекты: Инструмент, OGSM CS, Final Stroke, HARDWARMOD Полезное: модули Артоса, XML парсер Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/618/#findComment-1484683
Norman Eisenherz 355 Опубликовано 2 Июня 2024 Поделиться Опубликовано 2 Июня 2024 1. Это примерно то же решение через скрипты с отсеиванием всех других приветствий. Хочется сделать правку именно в логике Левши. 2. Убрал звук start_sound – все равно выдается старое сообщение. Подозреваю, что отсюда: meet_state = 30 | hello_wpn@yan_levsha_hello_actor … Добавил в секцию [camper@wait_cut5] (ждать диалога после убийства шального снорка) строку on_timer = 3000 | %=play_sound(…)% – выдается только новое сообщение, повтора после перезагрузки нет. Вроде получилось… Мини-моды: ТЧ ЧН ЗП Шпаргалка Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/618/#findComment-1484693
Kirgudu 1 372 Опубликовано 2 Июня 2024 Поделиться Опубликовано 2 Июня 2024 1 час назад, Norman Eisenherz сказал: Это примерно то же решение через скрипты с отсеиванием всех других приветствий. Хочется сделать правку именно в логике Левши. Скорее решение наоборот. Не отсеивание ненужного с избыточными проверками "а то ли это", а адресная обработка нового параметра, который, разумеется, будет добавлен только там, где нужно. Впрочем, условия для этой "нужности" достаточно специфические, почти разовые, так что решил сделать по-другому - и ладно. @monk в Final Stroke вообще пошёл третьим путём: сократил расстояние (чтоб Левша не орал издалека) и убрал субтитры (за ненужностью, ибо лицом к лицу). Подходов может быть много, главное чтобы выбранный способ удовлетворял автора. 1 Свои работы и совместные проекты: Инструмент, OGSM CS, Final Stroke, HARDWARMOD Полезное: модули Артоса, XML парсер Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/618/#findComment-1484696
Black_Raven_03 43 Опубликовано 6 Июня 2024 Поделиться Опубликовано 6 Июня 2024 (изменено) Доброго времени суток, прошу помощи! Делаю правку к Новому Арсеналу 7 (движок ОГСР от сен 2020, без возможности смены версии) с таким кодом: local sect = wpn:section() local sil_sect = get_string( sect, "silencer_name" ) if not sil_sect then return end local sil_obj = level.object_by_id(0) db.actor:inventory_for_each( function( temp_sil, db.actor) if temp_sil and db.actor:is_in_ruck(temp_sil) and temp_sil:is_silencer() and temp_sil:section() == sil_sect then sil_obj = temp_sil end end ) , на что получаю ошибку "invalid key to next" Вопрос: а куда копать-то? Правка: сделал через iterate_inventory - больше не вылетает... Изменено 6 Июня 2024 пользователем Black_Raven_03 Дополнение Скрытый текст AMD Ryzen 5 3600, 32GB DDR4-3200, AFOX GeForce GTX1050Ti и нормально сталкерим в НА5.1, НА7, OGSE-0693, OGSR, НС2016, OLR, OFFLIFE, CoC, LADC, CoP Gunslinger, CoP SGM Gunslinger, ShoC GA, Legend Return, Anomaly, CS OGSM, ОП-2.2 ZC! Мозг состоит на 80 процентов из жидкости, и мало того, что она тормозная, так многим еще конкретно не долили...@Denikius136 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/618/#findComment-1484874
Zander_driver 10 358 Опубликовано 7 Июня 2024 Поделиться Опубликовано 7 Июня 2024 4 часа назад, Black_Raven_03 сказал: local sil_obj = level.object_by_id(0) Полагаю, вот это лишнее. Достаточно объявления local sil_obj 1 Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine / Мимокрокодил. Я понял что моя старая подпись что-то нарушает. Удалил все ссылки. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/618/#findComment-1484887
Black_Raven_03 43 Опубликовано 7 Июня 2024 Поделиться Опубликовано 7 Июня 2024 (изменено) 6 часов назад, Zander_driver сказал: Достаточно объявления local sil_obj Привычка: приучил себя по совету небезизвестного Kamikazze всегда инициализировать переменные в ЛуаДжите Как позже выяснилось, проблема была в inventory_for_each - метод (почему-то) не мог перейти на след. предмет! Изменено 7 Июня 2024 пользователем Black_Raven_03 Скрытый текст AMD Ryzen 5 3600, 32GB DDR4-3200, AFOX GeForce GTX1050Ti и нормально сталкерим в НА5.1, НА7, OGSE-0693, OGSR, НС2016, OLR, OFFLIFE, CoC, LADC, CoP Gunslinger, CoP SGM Gunslinger, ShoC GA, Legend Return, Anomaly, CS OGSM, ОП-2.2 ZC! Мозг состоит на 80 процентов из жидкости, и мало того, что она тормозная, так многим еще конкретно не долили...@Denikius136 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/618/#findComment-1484897
Kirgudu 1 372 Опубликовано 7 Июня 2024 Поделиться Опубликовано 7 Июня 2024 (изменено) 13 часов назад, Black_Raven_03 сказал: db.actor:inventory_for_each( function( temp_sil, db.actor) А мне вот эта строчка очень любопытна. Можно сказать, что второй параметр в функции-коллбэке не нужен, но не это главное. Что-то я даже затрудняюсь сказать, что будет с глобальной кеширующей актора переменной db.actor, если её использовать в качестве выходного параметра. Обнулится со всеми вытекающими? Или будет создана локальная одноимённая переменная, не влияющая на глобальную, поскольку существует только внутри этой функции? В любом случае делать так не стоит. Изменено 7 Июня 2024 пользователем Kirgudu 1 1 Свои работы и совместные проекты: Инструмент, OGSM CS, Final Stroke, HARDWARMOD Полезное: модули Артоса, XML парсер Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/618/#findComment-1484905
abramcumner 1 234 Опубликовано 7 Июня 2024 Поделиться Опубликовано 7 Июня 2024 43 минуты назад, Kirgudu сказал: Что-то я даже затрудняюсь сказать, что будет с глобальной кеширующей актора переменной db.actor, если её использовать в качестве выходного параметра. Обнулится со всеми вытекающими? Или будет создана локальная одноимённая переменная, не влияющая на глобальную, поскольку существует только внутри этой функции? У меня скрипт с таким объявление функции вообще не распарсился lua в ЗП. 2 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/618/#findComment-1484906
Black_Raven_03 43 Опубликовано 7 Июня 2024 Поделиться Опубликовано 7 Июня 2024 (изменено) @Zander_driver @Kirgudu , огромное спасибо за предупреждение - учту и сделаю выводы 7 часов назад, abramcumner сказал: вообще не распарсился lua в ЗП. а какая связь между ЗП и ТЧ-ориентированным ОГСР-движком?! я же специально указал год сборки движка - 2020! ЛуаДжиты же разные! Изменено 7 Июня 2024 пользователем Black_Raven_03 Скрытый текст AMD Ryzen 5 3600, 32GB DDR4-3200, AFOX GeForce GTX1050Ti и нормально сталкерим в НА5.1, НА7, OGSE-0693, OGSR, НС2016, OLR, OFFLIFE, CoC, LADC, CoP Gunslinger, CoP SGM Gunslinger, ShoC GA, Legend Return, Anomaly, CS OGSM, ОП-2.2 ZC! Мозг состоит на 80 процентов из жидкости, и мало того, что она тормозная, так многим еще конкретно не долили...@Denikius136 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/618/#findComment-1484945
Капрал Хикс 567 Опубликовано 7 Июня 2024 Поделиться Опубликовано 7 Июня 2024 В Зове Припяти при покупке патронов учитывается кол-во патронов в пачке, оно влияет на цену. Хочу в ТЧ это дело поправить. Где в trade_manager.script смотреть это? 1 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/618/#findComment-1484947
abramcumner 1 234 Опубликовано 7 Июня 2024 Поделиться Опубликовано 7 Июня 2024 1 час назад, Black_Raven_03 сказал: а какая связь между ЗП и ТЧ-ориентированным ОГСР-движком?! я же специально указал год сборки движка - 2020! ЛуаДжиты же разные! Такое не должно и на ТЧ/ОГСР парситься. Что было под рукой, на том и проверил. 1 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/618/#findComment-1484948
Balavnik 178 Опубликовано 17 Июня 2024 Поделиться Опубликовано 17 Июня 2024 Можно ли отключить add_call скриптом? Жить стало лучше, жить стало веселей. А когда веселей живётся, то работа скорится. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/618/#findComment-1485523
Kirgudu 1 372 Опубликовано 17 Июня 2024 Поделиться Опубликовано 17 Июня 2024 (изменено) "Справочник", функция level.remove_call. Изменено 17 Июня 2024 пользователем Kirgudu 1 3 Свои работы и совместные проекты: Инструмент, OGSM CS, Final Stroke, HARDWARMOD Полезное: модули Артоса, XML парсер Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/618/#findComment-1485529
phalcor 60 Опубликовано 23 Июня 2024 Поделиться Опубликовано 23 Июня 2024 Привет! Как можно определить, что это была первая загрузка (load) с момента старта exe? Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/618/#findComment-1485780
Norman Eisenherz 355 Опубликовано 24 Июня 2024 Поделиться Опубликовано 24 Июня 2024 Например, сделать запись лога через flush и поискать в нем часть фразы "* Game … is successfully loaded from file '…sav' …" – если встречается только один раз, значит первая загрузка. В ТЧ можно добраться до файла через класс fs(), в ЧН/ЗП через библиотеку io. 1 1 Мини-моды: ТЧ ЧН ЗП Шпаргалка Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/618/#findComment-1485830
Balavnik 178 Опубликовано 26 Июня 2024 Поделиться Опубликовано 26 Июня 2024 Если колбек объекта не перевести в nil в net_destroy, то при удалении объекта колбек так и будет болтаться всю игру? Жить стало лучше, жить стало веселей. А когда веселей живётся, то работа скорится. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/618/#findComment-1485893
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти