Это популярное сообщение. Zander_driver 10 334 Опубликовано 3 Марта 2023 Это популярное сообщение. Поделиться Опубликовано 3 Марта 2023 32 минуты назад, Norman Eisenherz сказал: библиотека io. недоступна. Какое есть решение? Не мучиться для подобных задач костылями на базе оригинального игрового движка и/или работающих из-под него Луа-скриптов. Они НЕ подходят для подобных задач. Я для таких и сходных задач, использовал решение путем: 0) Берем все файлы конфигов, скриптов, (а в моем случае и код движка), и закидываем в базу данных. 1) Далее путем нехитрой оболочки API на языке php, 2) И столь же нехитрой обвязки скриптами javaScript 4) Получаем в web-интерфейсе на локалке или на своем хостинге, в пару кликов выше-упомянутую или любую другую подобную информацию, по конфигам, скриптам и движку своего мода. Плюсы - как уже говорилось куча всего в духе выше-упомянутого но не только, доступна в пару-тройку кликов. В принципе вам доступна любая мыслимая аналитика ваших скриптов и конфигов (и движка) по щелчку пальца. Кроме того, если использовать свой сервер, то доступна она не только с вашего модостроительного ПК, но и с планшета/смартфона. Минусы - Для редактирования под свои нужды, надо понимать SQL, php, javaScript. А вовсе никакой не Луа. И я так понимаю, что за такие минусы здесь меня сейчас тухлыми помидорами наверное закидают, да? Или нет? ЗЫ. Мораль сей басни - для некоторых вещей и некоторых задач, разумнее оторваться взглядом от сталкера и осмотреться по другим технологиям. Авось найдется что-то намного более подходящее для того что вы хотите. P.P.S. Если тут кто-нибудь проявит позитивный интерес к такому инструменту. Готов выложить все исходники... Если хоть кому-то оно надо. 3 3 Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на 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. Ссылка на комментарий
UriZzz 1 004 Опубликовано 4 Марта 2023 Поделиться Опубликовано 4 Марта 2023 (изменено) 4 часа назад, Zander_driver сказал: И я так понимаю, что за такие минусы здесь меня сейчас тухлыми помидорами наверное закидают, да? Или нет? За что тебя тухлыми яйцами закидывать? СУБД вообще норм штука, сам пользую postgres на дому. Правда без php морды. Изменено 4 Марта 2023 пользователем UriZzz Моя нычка, Нычка в арендованном у Опричника холодильнике Мы хорошие ребята, жаль патронов маловато:) Ссылка на комментарий
AndrewMor 527 Опубликовано 4 Марта 2023 Поделиться Опубликовано 4 Марта 2023 Полагаю, вообще и в частности, если исходный (ванильный) движок не позволяет сделать что-то конкретное (хотелку), самый правильный вариант - править движок под свои нужды. Ясен пень, изучать исходники, научиться все это дело собирать и все выйдет, как надо. Правда процесс сей муторный и длительный, но результат будет! Не всем сей совет подойдет. Мне вот не подошел 2 Сталкер - наше всё! Ссылка на комментарий
Kirgudu 1 218 Опубликовано 4 Марта 2023 Поделиться Опубликовано 4 Марта 2023 (изменено) 10 часов назад, AndrewMor сказал: Мне вот не подошел Аналогично, но с советом целиком и полностью согласен. Но я на работе настолько наедаюсь программированием (full stack от БД до фронта), что лезть и в движок Сталкера тупо не хотелось, хотя при нужде могу просто посмотреть, что там в нужном месте написано. Для меня чистые Lua скрипты на ванильном движке - это редкий отдых. @Zander_driver почему бы просто не выложить куда-нибудь в инструментарий мододела? Кому надо - найдёт и возьмёт не сейчас, так позже. Я вот тоже обязательно полюбопытствую, а может и воспользуюсь однажды. Изменено 4 Марта 2023 пользователем Kirgudu 1 1 Инструмент Ссылка на комментарий
naxac 2 447 Опубликовано 7 Марта 2023 Поделиться Опубликовано 7 Марта 2023 (изменено) 04.03.2023 в 06:10, Norman Eisenherz сказал: получить все входящие секции из конфига [weapons.ltx] Нужно что-то типа этого: сканирование конфигов с помощью FS. Только тут нужно, чтобы конфиги были не в архивах. Изменено 7 Марта 2023 пользователем naxac 1 3 Аддон для ОП-2.09.2: Яндекс/Google/GitHub Ссылка на комментарий
Zander_driver 10 334 Опубликовано 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. Ссылка на комментарий
imcrazyhoudini 209 Опубликовано 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. кто может помочь - пишите в ЛС. Ссылка на комментарий
ted.80 278 Опубликовано 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 Личный АРХИВ по S.T.A.L.K.E.R Ссылка на комментарий
imcrazyhoudini 209 Опубликовано 8 Марта 2023 Поделиться Опубликовано 8 Марта 2023 52 минуты назад, ted.80 сказал: Функцию целиком выложи, а то не очень понятно что к чему Это вся функция и есть, впихнул в on_use в биндер. Впрочем вот все скрипты касательно этого сна: тык То, что ты кинул не помогло. ищу человека, который смог бы заняться разработкой погоды на OGSR. кто может помочь - пишите в ЛС. Ссылка на комментарий
Norman Eisenherz 316 Опубликовано 9 Марта 2023 Поделиться Опубликовано 9 Марта 2023 Для перебора NPC в онлайне лучше использовать for id, v in pairs(db.storage) – так всего пара сотен объектов будет. 1 1 2 Мини-моды: ТЧ ЧН ЗП Шпаргалка Ссылка на комментарий
ted.80 278 Опубликовано 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 Личный АРХИВ по S.T.A.L.K.E.R Ссылка на комментарий
imcrazyhoudini 209 Опубликовано 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. кто может помочь - пишите в ЛС. Ссылка на комментарий
UriZzz 1 004 Опубликовано 10 Марта 2023 Поделиться Опубликовано 10 Марта 2023 (изменено) @imcrazyhoudinidell Изменено 10 Марта 2023 пользователем UriZzz Моя нычка, Нычка в арендованном у Опричника холодильнике Мы хорошие ребята, жаль патронов маловато:) Ссылка на комментарий
ted.80 278 Опубликовано 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 Личный АРХИВ по S.T.A.L.K.E.R Ссылка на комментарий
UriZzz 1 004 Опубликовано 10 Марта 2023 Поделиться Опубликовано 10 Марта 2023 @ted.80 false? Хм, а точно не nil сопровождаемый вылетом с ругонью на эту самую переменную? Моя нычка, Нычка в арендованном у Опричника холодильнике Мы хорошие ребята, жаль патронов маловато:) Ссылка на комментарий
ted.80 278 Опубликовано 10 Марта 2023 Поделиться Опубликовано 10 Марта 2023 20 минут назад, UriZzz сказал: Хм, а точно не nil if variable == nil or variable == "nil" or variable == false then variable ~= true end 1 Личный АРХИВ по S.T.A.L.K.E.R Ссылка на комментарий
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 Хочу сделать что бы при взятии задания на убиство нпс задание завершалось автоматически а не бежать обратно за наградой. Как завершить принудительно выполненый таск? Ссылка на комментарий
imcrazyhoudini 209 Опубликовано 12 Марта 2023 Поделиться Опубликовано 12 Марта 2023 Никто случайно не вникал (и соответственно) не правил работу стейт менеджера? Проблема в том, что НПС отыгрывает анимации лишь с into, a out и idle прекрасно игнорирует. Проблема касается ТЧ и ЧН, как обстоят дела в ЗП - не знаю (но судя по одному скриншоту где НПС "ищет" артефакты в аномалии, то могу предложить что там могли исправить). ищу человека, который смог бы заняться разработкой погоды на OGSR. кто может помочь - пишите в ЛС. Ссылка на комментарий
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) А как тоже самое сделать для клиентского объекта? Ссылка на комментарий
Kirgudu 1 218 Опубликовано 13 Марта 2023 Поделиться Опубликовано 13 Марта 2023 3 часа назад, phalcor сказал: Для серверного объекта способ нашёл Не очень понимаю, как такое может сработать, ведь свойства checked_characters нет в оригинальном модуле Артоса для работы с нет-пакетами (который тут, судя по всему, и используется). 3 часа назад, phalcor сказал: А как тоже самое сделать для клиентского объекта Воспользоваться аналогичным кодом, но поменять свойство character_name. Это, однако, не поможет, поскольку имя персонажа в журнале, диалогах и при наведении курсора берётся из профиля. Можно, конечно, и профиль на лету поменять - для этого в нетпакете есть свойства specific_character и character_profile, но и они не охватывают всё, к тому же сие чревато другими последствиями, такими как замена визуала и т. п. Имхо, без редактирования движка на все 100 задачу не выполнить. 1 1 Инструмент Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти