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/
Kirgudu 1 370 Опубликовано 13 Ноября 2024 Поделиться Опубликовано 13 Ноября 2024 10 часов назад, rost2000 сказал: obj = sim:object(id) if zone and zone:inside(obj:position()) then У серверного объекта position является свойством, а не методом (функцией). Выполнение будет приводить к ошибке, как у тебя, тогда как правильное написание будет таким: if zone and zone:inside(obj.position) then 1 1 Свои работы и совместные проекты: Инструмент, OGSM CS, Final Stroke, HARDWARMOD Полезное: модули Артоса, XML парсер Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/628/#findComment-1492402
WinCap 324 Опубликовано 13 Ноября 2024 Поделиться Опубликовано 13 Ноября 2024 @rost2000, а ещё, в добавлении к предыдущему посту: Наличие "зоны" лучше проверить перед циклом, один раз. А внутри цикла нужно убедиться в наличии объекта: if obj and zone:inside(obj.position) then 2 S.T.A.L.K.E.R. CoP Objects >200 шт (upd 21.05.26) - Скачать (Яндекс-диск) Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/628/#findComment-1492407
Капрал Хикс 567 Опубликовано 14 Ноября 2024 Поделиться Опубликовано 14 Ноября 2024 21 час назад, Купер сказал: страшно, конечно. Там, по идее, по дельте времени ~ 1раза в секунду более, чем достаточно. В x-ray extensions вроде есть коллбэк на перемещение в слот. Хм, как бы его правильно использовать, пример нужен. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/628/#findComment-1492438
Screamand 3 Опубликовано 15 Ноября 2024 Поделиться Опубликовано 15 Ноября 2024 Приветствую, подскажите ковыряю напарников, имеет ли смысл вообще данные строки: Скрытый текст ... local real_enemy = db.storage[npc:id()].enemy ... if not real_enemy or (real_enemy and not real_enemy:alive()) then db.storage[npc:id()].enemy = who end Потому что иногда ловлю вылет по методу alive, я так понимаю у переменной real_enemy вообще нельзя проверить жив он или нет? 1 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/628/#findComment-1492487
Norman Eisenherz 355 Опубликовано 15 Ноября 2024 Поделиться Опубликовано 15 Ноября 2024 Не вижу такого метода в оригинале… Может быть, он возвращает серверный объект вместо клиентского, из-за чего и вылетает проверка alive? Мини-моды: ТЧ ЧН ЗП Шпаргалка Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/628/#findComment-1492489
Screamand 3 Опубликовано 15 Ноября 2024 Поделиться Опубликовано 15 Ноября 2024 Тоже думал насчет серверного объекта, я просто не особо понимаю для чего вообще нужна эта проверка, типа если врага нет или враг не живой то db.storage[npc:id()].enemy = who, но вот для чего это нужно? (все это в функции we_are_hit в xr_companion) 1 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/628/#findComment-1492490
Капрал Хикс 567 Опубликовано 15 Ноября 2024 Поделиться Опубликовано 15 Ноября 2024 @Купер , короче проще сразу переехать на OGSR... 1 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/628/#findComment-1492495
Norman Eisenherz 355 Опубликовано 16 Ноября 2024 Поделиться Опубликовано 16 Ноября 2024 [ТЧ 1.0006] В обработчике логики [xr_remark.script] для выдачи сообщений сделано что-то странное: - после проверки "в конфиге логики есть параметр tips" запускается проверка наличия звука, сопоставленного с таким текстом в [news_manager.script]; - если получена ссылка на сопоставленный звук, этот звук проигрывается в дополнение к звуку, указанному в логике через параметр "snd" (при разнице в задержке вывода или ссылках будет каша); - "настоящий" звук запускается отдельным обработчиком xr_sound.set_sound_play вне проверки tips; - в проверку наличия звука передаются аргументы "объект ГГ, tips_id, tips_sender", хотя принимаются аргументы "объект ГГ, tips_id, задержка вывода, tips_sender", из которых проверяется только tips_id; - задержка вывода при обработке указана заново, причем глобальной переменной и применяется только для вывода обычного звука КПК; - отправка сообщения не выполняется ни в каком виде. Я упускаю какой-то хитрый замысел, или этот огород не делает ничего полезного? Мини-моды: ТЧ ЧН ЗП Шпаргалка Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/628/#findComment-1492542
Balavnik 178 Опубликовано 22 Ноября 2024 Поделиться Опубликовано 22 Ноября 2024 (изменено) Можно ли отключить голод у актора скриптом? Изменено 22 Ноября 2024 пользователем Balavnik Жить стало лучше, жить стало веселей. А когда веселей живётся, то работа скорится. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/628/#findComment-1493126
Balavnik 178 Опубликовано 27 Ноября 2024 Поделиться Опубликовано 27 Ноября 2024 (изменено) Почему у некоторых объектов вызов метода :id() вызывает ошибку: attempt to call method 'id' (a number value)? При этом метод :name() работает, и выводит всё как надо. Изменено 27 Ноября 2024 пользователем Balavnik Жить стало лучше, жить стало веселей. А когда веселей живётся, то работа скорится. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/628/#findComment-1493900
Balavnik 178 Опубликовано 28 Ноября 2024 Поделиться Опубликовано 28 Ноября 2024 (изменено) @Купер Но почему для этого же объекта метод :name() корректно возвращает имя, а для него же при вызове метода :id() вылетает ошибка? P.s. Приложу код и лог. OGSR, если что. Скрытый текст log1(wpn:name()) log1(""..wpn:id()) Скрытый текст [28.11.24 10:40:07.103] [16192] wpn_pm0420 [28.11.24 10:40:07.103] [16192] 420 wpn_pm0341 [28.11.24 10:40:16.126] [16192] ********************************************************************************* [28.11.24 10:40:16.126] [16192] [print_output([CScriptEngine::lua_pcall_failed])] SCRIPT RUNTIME ERROR: d:\games\s.t.a.l.k.e.r\gamedata\scripts\rx\rx_utils.script:457: attempt to call method 'id' (a number value) Изменено 28 Ноября 2024 пользователем Balavnik 1 Жить стало лучше, жить стало веселей. А когда веселей живётся, то работа скорится. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/628/#findComment-1493923
khyor 26 Опубликовано 28 Ноября 2024 Поделиться Опубликовано 28 Ноября 2024 @Balavnik в скриптах есть lua_help.script, сверяйся с ним, практически всё там есть Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/628/#findComment-1493964
Norman Eisenherz 355 Опубликовано 28 Ноября 2024 Поделиться Опубликовано 28 Ноября 2024 Есть еще один специфический вариант: при разбивании ящика объект-убийца передается в обработчик callback.death как движковый (C++), а не как игровой (Lua), из-за чего случается вылет при проверке who:id(). 2 Мини-моды: ТЧ ЧН ЗП Шпаргалка Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/628/#findComment-1493968
Kirgudu 1 370 Опубликовано 28 Ноября 2024 Поделиться Опубликовано 28 Ноября 2024 (изменено) 10 часов назад, Balavnik сказал: Но почему для этого же объекта метод :name() корректно возвращает имя, а для него же при вызове метода :id() вылетает ошибка? Потому что так написан движок. Метод серверного объекта :name() существует, а метод того же объекта :id() - нет, вместо него числовое свойство .id. На это тебе даже лог намекает: 10 часов назад, Balavnik сказал: (a number value) И если в данном случае ты напишешь log1(""..wpn.id), то будет тебе счастье. Изменено 28 Ноября 2024 пользователем Kirgudu 2 2 Свои работы и совместные проекты: Инструмент, OGSM CS, Final Stroke, HARDWARMOD Полезное: модули Артоса, XML парсер Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/628/#findComment-1493975
Pavel_2000 6 Опубликовано 30 Ноября 2024 Поделиться Опубликовано 30 Ноября 2024 (изменено) Здравствуйте, есть вот такой скрипт(зп) Скрытый текст function delete_af_mahovik_1() local lc = alife():story_object(story_ids.af_mahovik_1) alife():release(lc, true) end находится он у меня в xr_effects, использую в логике рестриктора %=delete_af_mahovik_1%. Сильно за скрипты не шарю. Поэтому и такой вопрос: Как переделать этот скрипт что бы в логике писать нужный мне id по типу %=delete_af(af_mahovik_1)%. Заранее спасибо. Изменено 30 Ноября 2024 пользователем Pavel_2000 «Если долго мучиться, что-нибудь получится» Охотник за артефактами|Crow Game Killer Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/628/#findComment-1494326
Norman Eisenherz 355 Опубликовано 30 Ноября 2024 Поделиться Опубликовано 30 Ноября 2024 По образу и подобию других функций в том же скрипте: сделать обработку стандартных для логики аргументов actor, npc, p (названия любые, типы "объект, объект, список") и читать свои значения, переданные из логики, по ссылкам p[1], p[2], … Мини-моды: ТЧ ЧН ЗП Шпаргалка Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/628/#findComment-1494346
Pavel_2000 6 Опубликовано 1 Декабря 2024 Поделиться Опубликовано 1 Декабря 2024 @Norman Eisenherz так я и делал только у меня ничего не получается, то вылетает то вообще не работает Я перепробовал разные варианты, но так так синтаксис луан мне не знаком, у меня ничего не выходит function delete_af_mahovik_1(actor, object, p) local lc = alife():story_object(story_ids.p[1]) alife():release(lc, true) end Вот так вот пробовал не работает Я пробовал переделать функции remove_npc и destroy_object под свои задачи не получилось. Пытался с умным лицом читать статьи про Lua, но из этого ничего не вышло. Помогите написать этот скрипт пожалуйста «Если долго мучиться, что-нибудь получится» Охотник за артефактами|Crow Game Killer Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/628/#findComment-1494357
Kirgudu 1 370 Опубликовано 1 Декабря 2024 Поделиться Опубликовано 1 Декабря 2024 (изменено) @Pavel_2000 если со всеми проверками "на дурака", то примерно так: function delete_af(actor, npc, p) if type(p) == "table" then -- проверяем, что параметр передан и имеет табличный тип local story_id = p[1] -- присваиваем story_id из параметра if type(story_id) == "string" then -- но если передана строка, то story_id = tonumber(story_id) or story_ids[story_id] -- пробуем превратить строку в число или получить числовой story_id из штатного перечисления по его наименованию end if type(story_id) == "number" and story_id > 0 then -- проверяем, что story_id найден, имеет числовой тип и больше нуля local lc = alife():story_object(story_id) -- ищем объект по story_id if lc ~= nil then -- проверяем, что объект найден alife():release(lc, true) -- производим удаление объекта end end end end Использовать так: %=delete_af(af_mahovik_1)% или так: %=delete_af(111)% Это, разумеется, сильно избыточный вариант, который полностью исключает вылет, если передано что-то не то. Но если уверен в том, что пишешь в логике, скрипт можно и сократить. Изменено 1 Декабря 2024 пользователем Kirgudu 1 2 1 Свои работы и совместные проекты: Инструмент, OGSM CS, Final Stroke, HARDWARMOD Полезное: модули Артоса, XML парсер Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/628/#findComment-1494401
Stalkersof 232 Опубликовано 2 Декабря 2024 Поделиться Опубликовано 2 Декабря 2024 Можно как то скриптом сделать одного монстра из группировки нейтралом по отношению к актору. Freeplay Graphic Mod(FGM) Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/628/#findComment-1494554
Norman Eisenherz 355 Опубликовано 9 Декабря 2024 Поделиться Опубликовано 9 Декабря 2024 Как на оригинальном движке создать циклическую проверку time_global вне загруженной игры, то есть без апдейта ГГ или другого объекта? Хочу сделать перемотку списка сейвов удерживанием клавиш. Мини-моды: ТЧ ЧН ЗП Шпаргалка Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/628/#findComment-1495309
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти