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/
AndrewMor 534 Опубликовано 4 Марта 2023 Поделиться Опубликовано 4 Марта 2023 Полагаю, вообще и в частности, если исходный (ванильный) движок не позволяет сделать что-то конкретное (хотелку), самый правильный вариант - править движок под свои нужды. Ясен пень, изучать исходники, научиться все это дело собирать и все выйдет, как надо. Правда процесс сей муторный и длительный, но результат будет! Не всем сей совет подойдет. Мне вот не подошел 2 Сталкер - наше всё! Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/598/#findComment-1452616
Kirgudu 1 343 Опубликовано 4 Марта 2023 Поделиться Опубликовано 4 Марта 2023 (изменено) 10 часов назад, AndrewMor сказал: Мне вот не подошел Аналогично, но с советом целиком и полностью согласен. Но я на работе настолько наедаюсь программированием (full stack от БД до фронта), что лезть и в движок Сталкера тупо не хотелось, хотя при нужде могу просто посмотреть, что там в нужном месте написано. Для меня чистые Lua скрипты на ванильном движке - это редкий отдых. @Zander_driver почему бы просто не выложить куда-нибудь в инструментарий мододела? Кому надо - найдёт и возьмёт не сейчас, так позже. Я вот тоже обязательно полюбопытствую, а может и воспользуюсь однажды. Изменено 4 Марта 2023 пользователем Kirgudu 1 1 Свои работы и совместные проекты: Инструмент, OGSM CS, Final Stroke, HARDWARMOD Полезное: модули Артоса, XML парсер Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/598/#findComment-1452679
naxac 2 595 Опубликовано 7 Марта 2023 Поделиться Опубликовано 7 Марта 2023 (изменено) 04.03.2023 в 06:10, Norman Eisenherz сказал: получить все входящие секции из конфига [weapons.ltx] Нужно что-то типа этого: сканирование конфигов с помощью FS. Только тут нужно, чтобы конфиги были не в архивах. Изменено 7 Марта 2023 пользователем naxac 1 3 Аддон для ОП-2.09.2: Яндекс/Google/GitHub/Тема на AP-PRO Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/598/#findComment-1452931
Zander_driver 10 348 Опубликовано 7 Марта 2023 Поделиться Опубликовано 7 Марта 2023 04.03.2023 в 17:21, Kirgudu сказал: почему бы просто не выложить куда-нибудь в инструментарий мододела? В ближайшие дни отмахаюсь с навалившейся работой, приведу свой инструмент в порядок в плане оснащения инструкцией и комментариями. И выложу в новой теме в инструментарии. 1 час назад, naxac сказал: что-то типа этого БД сканировать всяко удобнее 2 Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на 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. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/598/#findComment-1452932
imcrazyhoudini 218 Опубликовано 8 Марта 2023 Поделиться Опубликовано 8 Марта 2023 Есть такой код: Скрытый текст if obj:section() == "sleepingbag" then local can_sleep = true local actor = db.actor for id=1,65535 do local object = level.object_by_id(id) if object ~= nil then if (IsStalker(object) and object:relation(actor) == game_object.enemy) or IsMonster(object) then if object:position():distance_to(actor:position()) < ENEMY_RADIUS and object:see(actor) then news_manager.send_tip(actor, "sleep_warning_enemy", nil, "default", 5000) can_sleep = false break end end end end -- проверка на радиацию if actor.radiation > 0 and can_sleep then news_manager.send_tip(actor, "sleep_warning_radiation", nil, "default", 5000) can_sleep = false end if actor.satiety < 0.5 and can_sleep then news_manager.send_tip(actor, "satiety_warning_radiation", nil, "default", 5000) can_sleep = false end if can_sleep then end end -- ATM Sleeping Bag start if self.already_jumped==false and jump_level.need_jump==true and (device().frame > self.spawn_frame+2000) then jump_level.try_to_jump() self.already_jumped = true return end Что мне нужно: Если все проверки проходят, то запускаем окно сна, а если нет, то нет соответственно. Проблема в чём: если проверка не проходит то окно открывается. Что не так с кодом? ищу человека, который смог бы заняться разработкой погоды на OGSR. кто может помочь - пишите в ЛС. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/598/#findComment-1453121
Chypakabra 823 Опубликовано 8 Марта 2023 Поделиться Опубликовано 8 Марта 2023 (изменено) 2 часа назад, imcrazyhoudini сказал: Есть такой код: Функцию целиком выложи, а то не очень понятно что к чему ну или как-то так: Скрытый текст if obj:section() == "sleepingbag" then local can_sleep = true local actor = db.actor for id=1,65535 do local object = level.object_by_id(id) if object ~= nil then if (IsStalker(object) and object:relation(actor) == game_object.enemy) or IsMonster(object) then if object:position():distance_to(actor:position()) < ENEMY_RADIUS and object:see(actor) then news_manager.send_tip(actor, "sleep_warning_enemy", nil, "default", 5000) can_sleep = false break end end end end -- проверка на радиацию if actor.radiation > 0 and can_sleep then news_manager.send_tip(actor, "sleep_warning_radiation", nil, "default", 5000) can_sleep = false end if actor.satiety < 0.5 and can_sleep then news_manager.send_tip(actor, "satiety_warning_radiation", nil, "default", 5000) can_sleep = false end -- ATM Sleeping Bag start if can_sleep then if self.already_jumped==false and jump_level.need_jump==true and (device().frame > self.spawn_frame+2000) then jump_level.try_to_jump() self.already_jumped = true return end end end Изменено 8 Марта 2023 пользователем ted.80 Личный архив по играм Архив по Trilogy EE Скрипт гладкого интерфейса AMK-Team Файлы BFG Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/598/#findComment-1453133
imcrazyhoudini 218 Опубликовано 8 Марта 2023 Поделиться Опубликовано 8 Марта 2023 52 минуты назад, ted.80 сказал: Функцию целиком выложи, а то не очень понятно что к чему Это вся функция и есть, впихнул в on_use в биндер. Впрочем вот все скрипты касательно этого сна: тык То, что ты кинул не помогло. ищу человека, который смог бы заняться разработкой погоды на OGSR. кто может помочь - пишите в ЛС. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/598/#findComment-1453135
Norman Eisenherz 354 Опубликовано 9 Марта 2023 Поделиться Опубликовано 9 Марта 2023 Для перебора NPC в онлайне лучше использовать for id, v in pairs(db.storage) – так всего пара сотен объектов будет. 1 1 2 Мини-моды: ТЧ ЧН ЗП Шпаргалка Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/598/#findComment-1453138
Chypakabra 823 Опубликовано 9 Марта 2023 Поделиться Опубликовано 9 Марта 2023 15 часов назад, imcrazyhoudini сказал: Что не так с кодом? да там всё "нитак" - все проверки у тебя находятся в bind_stalker.script > actor_binder:use_object(obj) но и одна из них не запускает "окно сна", а конструкция: -- ATM Sleeping Bag start if self.already_jumped==false and jump_level.need_jump==true and (device().frame > self.spawn_frame+2000) then jump_level.try_to_jump() self.already_jumped = true return end ни какого отношения к сну вообще не имеет А нужное тебе окно запускается через - bind_stalker.script > actor_binder:on_item_drop (obj) > atmmain.on_item_drop(obj) function on_item_drop(obj) if obj:section() == "sleepingbag" then sleepingbag_id = obj:id(); ui_sleep_init = true; end -- atmdebug.abundance(obj); end тут проверяется секция и переменная ui_sleep_init становится "тру" потом эта переменная в функции atmmain.update() которая как нистрано висит апдейте актора в строке 59 запускает нужное или нет окно level.start_stop_menu(atmsleep.UISleep(), true); 1 1 1 Личный архив по играм Архив по Trilogy EE Скрипт гладкого интерфейса AMK-Team Файлы BFG Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/598/#findComment-1453150
imcrazyhoudini 218 Опубликовано 10 Марта 2023 Поделиться Опубликовано 10 Марта 2023 @ted.80 выбросил всё лишнее и оставил лишь в on_use такую рабочую конструкцию: Скрытый текст function update(obj) if obj:section() == "sleepingbag" then local ui_sleep_init = true local actor = db.actor for id, v in pairs(db.storage) do local object = level.object_by_id(id) if object ~= nil then if (IsStalker(object) and object:relation(actor) == game_object.enemy) or IsMonster(object) then if object:position():distance_to(actor:position()) < ENEMY_RADIUS and object:see(actor) then news_manager.send_tip(actor, "sleep_warning_enemy", nil, "default", 5000) ui_sleep_init = false break end end end end if actor.radiation > 0 and ui_sleep_init then news_manager.send_tip(actor, "sleep_warning_radiation", nil, "default", 5000) ui_sleep_init = false end if actor.satiety < 0.70 and ui_sleep_init then news_manager.send_tip(actor, "sleep_warning_satiety", nil, "default", 5000) ui_sleep_init = false end if ui_sleep_init == true then level.start_stop_menu(atmsleep.UISleep(), true) end end end Теперь остался такий вопрос: а как можно остановить сон если ГГ проголодается? Впихнул на апдейт такое: Скрытый текст if db.actor.satiety < 0.70 and ui_sleep_init == true then news_manager.send_tip(actor, "satiety_sleep", nil, "default", 5000) atmsleep.sleep_stop() end Но сон не останавливает. Что не так? ищу человека, который смог бы заняться разработкой погоды на OGSR. кто может помочь - пишите в ЛС. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/598/#findComment-1453199
UriZzz 1 004 Опубликовано 10 Марта 2023 Поделиться Опубликовано 10 Марта 2023 (изменено) @imcrazyhoudinidell Изменено 10 Марта 2023 пользователем UriZzz Моя нычка, Нычка в арендованном у Опричника холодильнике Мы хорошие ребята, жаль патронов маловато:) Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/598/#findComment-1453203
Chypakabra 823 Опубликовано 10 Марта 2023 Поделиться Опубликовано 10 Марта 2023 2 часа назад, imcrazyhoudini сказал: Что не так? 2 часа назад, imcrazyhoudini сказал: if db.actor.satiety < 0.70 and ui_sleep_init == true then Тут ui_sleep_init всегда будет "фолс" а не "тру" всегда!!! потому что в предыдущей функции она объявлена local и живёт она только внутри этой функции , и её значение в другую функцию а тем более в другой скрипт не передаётся 1 Личный архив по играм Архив по Trilogy EE Скрипт гладкого интерфейса AMK-Team Файлы BFG Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/598/#findComment-1453228
UriZzz 1 004 Опубликовано 10 Марта 2023 Поделиться Опубликовано 10 Марта 2023 @ted.80 false? Хм, а точно не nil сопровождаемый вылетом с ругонью на эту самую переменную? Моя нычка, Нычка в арендованном у Опричника холодильнике Мы хорошие ребята, жаль патронов маловато:) Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/598/#findComment-1453247
Chypakabra 823 Опубликовано 10 Марта 2023 Поделиться Опубликовано 10 Марта 2023 20 минут назад, UriZzz сказал: Хм, а точно не nil if variable == nil or variable == "nil" or variable == false then variable ~= true end 1 Личный архив по играм Архив по Trilogy EE Скрипт гладкого интерфейса AMK-Team Файлы BFG Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/598/#findComment-1453251
Colder 12 Опубликовано 12 Марта 2023 Поделиться Опубликовано 12 Марта 2023 Всем привет! Имею такой код: Скрытый текст function actor_on_update(status) local tm = task_manager.get_random_task() local active = tm.active_task_by_type for k, task_id in pairs(active) do local task_status = tm.task_info[task_id].status if task_status == "completed" then --// Если завершили таск ---- end end end Хочу сделать что бы при взятии задания на убиство нпс задание завершалось автоматически а не бежать обратно за наградой. Как завершить принудительно выполненый таск? Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/598/#findComment-1453513
imcrazyhoudini 218 Опубликовано 12 Марта 2023 Поделиться Опубликовано 12 Марта 2023 Никто случайно не вникал (и соответственно) не правил работу стейт менеджера? Проблема в том, что НПС отыгрывает анимации лишь с into, a out и idle прекрасно игнорирует. Проблема касается ТЧ и ЧН, как обстоят дела в ЗП - не знаю (но судя по одному скриншоту где НПС "ищет" артефакты в аномалии, то могу предложить что там могли исправить). ищу человека, который смог бы заняться разработкой погоды на OGSR. кто может помочь - пишите в ЛС. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/598/#findComment-1453589
phalcor 60 Опубликовано 13 Марта 2023 Поделиться Опубликовано 13 Марта 2023 Добрый день. Как у нпц поменять имя? Для серверного объекта способ нашёл: local sobj = alife():object( id ) local pk = m_netpk.get(sobj, 1) local data = pk:get() local name = data.checked_characters --ВОТ ТУТ МЕНЯЕМ data.checked_characters = "Джек Потрошитель" pk:set(data) А как тоже самое сделать для клиентского объекта? Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/598/#findComment-1453611
Kirgudu 1 343 Опубликовано 13 Марта 2023 Поделиться Опубликовано 13 Марта 2023 3 часа назад, phalcor сказал: Для серверного объекта способ нашёл Не очень понимаю, как такое может сработать, ведь свойства checked_characters нет в оригинальном модуле Артоса для работы с нет-пакетами (который тут, судя по всему, и используется). 3 часа назад, phalcor сказал: А как тоже самое сделать для клиентского объекта Воспользоваться аналогичным кодом, но поменять свойство character_name. Это, однако, не поможет, поскольку имя персонажа в журнале, диалогах и при наведении курсора берётся из профиля. Можно, конечно, и профиль на лету поменять - для этого в нетпакете есть свойства specific_character и character_profile, но и они не охватывают всё, к тому же сие чревато другими последствиями, такими как замена визуала и т. п. Имхо, без редактирования движка на все 100 задачу не выполнить. 1 1 Свои работы и совместные проекты: Инструмент, OGSM CS, Final Stroke, HARDWARMOD Полезное: модули Артоса, XML парсер Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/598/#findComment-1453637
phalcor 60 Опубликовано 13 Марта 2023 Поделиться Опубликовано 13 Марта 2023 19 минут назад, Kirgudu сказал: ведь свойства checked_characters нет в оригинальном модуле Артоса У меня от ОП 2.2, там есть, и работает. 20 минут назад, Kirgudu сказал: Воспользоваться аналогичным кодом, но поменять свойство character_name. Не соображу, как именно это провернуть с клиентским объектом? Если можно, поясни в двух словах. p.s. Я пока пытаюсь схитрить - увожу нпц в оффлайн, меняю имя и снова вывожу в онлайн, но что-то не все хотят уходить в оффлайн, при том, что sobj.can_switch_offline = true. Видимо, есть ещё какой-то ограничитель. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/598/#findComment-1453641
Kirgudu 1 343 Опубликовано 13 Марта 2023 Поделиться Опубликовано 13 Марта 2023 @phalcor можно попробовать воспользоваться встроенной в модуль функцией автоматического перевода объекта онлайн-оффлайн-онлайн: m_netpk.do_switchings(id) Она в публичный интерфейс автором не выведена, поскольку предназначена в первую очередь для изменения абстрактной части из коллбэка, но дёрнуть её напрямую ничто не мешает. 1 1 1 Свои работы и совместные проекты: Инструмент, OGSM CS, Final Stroke, HARDWARMOD Полезное: модули Артоса, XML парсер Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/598/#findComment-1453655
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти