Okichi 922 Опубликовано 9 Декабря 2019 Поделиться Опубликовано 9 Декабря 2019 (изменено) 15 часов назад, mole venomous сказал: Есть ли какой скриптовый способ запретить НПСам НЕ брать конкретный предмет с земли и/или трупа/ящика? Есть, примеры можно посмотреть в репозитории по dsh-mod на Githab. Или в репозитории от Den1s'a там же ( вариант той же фишки для НЛС ). Суть в том, что объекту в конфиг прописывается новый ключ, который задает то самое "руки прочь". В ДШ-моде это watcher_act.bad_item = true Ну и соответственно: 1) в watcher_act (онлайновое воровство - трупы/земля) - добавить чтение и обработку этого ключа 2) в amk_offline_alife - аналогично. Способ проверен, все работает. Изменено 9 Декабря 2019 пользователем Okichi След от кругов на воде - это тоже след (с) Ссылка на комментарий
Капрал Хикс 534 Опубликовано 11 Декабря 2019 Поделиться Опубликовано 11 Декабря 2019 (изменено) Подскажите решение проблемы с большим количеством второстепенных квестов, когда сначала путаются их описания, а потом происходит вылет вида +165 bytes в конце - "XR_3DA.exe caused BREAKPOINT in module ""E:\GAMES\S.T.A.L.K.E.R\bin\xrCore.dll"" at 001B:00597D15, xrDebug::backend()+165 byte(s)" Изменено 11 Декабря 2019 пользователем Капрал Хикс Ссылка на комментарий
naxac 2 447 Опубликовано 12 Декабря 2019 Поделиться Опубликовано 12 Декабря 2019 (изменено) @Капрал Хикс, это,вернее всего, происходит из-за превышения размера пакета сохранения клиентских данных у актера: информация о заданиях там сохраняется: см. task_manager.script Решение: для сохранения этих данных подключить , допустим, хранилище от Artos'а. Либо оптимизировать сохранение: выкинуть лишнее, для строк использовать хэши, булевы значения побитово записывать в u8, и прочие изощрения... Но хранилище, по-моему, лучший вариант. Сейчас ещё глянул - там количество записей при сохранении ограничено u8 - т.е. 255, так что если заданий в конфиге больше - будут глюки. Решение: нужно заменить в сохранении/загрузке количества записей с r(w)_u8 на r(w)_u16 - тогда лимит будет 65535. Изменено 12 Декабря 2019 пользователем naxac 1 1 Аддон для ОП-2.09.2: Яндекс/Google/GitHub Ссылка на комментарий
DMT 2 Опубликовано 12 Декабря 2019 Поделиться Опубликовано 12 Декабря 2019 Цитата LUA error: ...ow of chernobyl\gamedata\scripts\ogse_signals.script:269: attempt to index local 'module' (a nil value) Почему происходит этот вылет ? Кто знает, кто подскажет ? Ссылка на комментарий
Капрал Хикс 534 Опубликовано 12 Декабря 2019 Поделиться Опубликовано 12 Декабря 2019 (изменено) @naxac, вах! По методу последнему и хранилище от Артоса не понадобится, верно? Изменено 12 Декабря 2019 пользователем Капрал Хикс Ссылка на комментарий
DMT 2 Опубликовано 12 Декабря 2019 Поделиться Опубликовано 12 Декабря 2019 Цитата function signals_mgr:subscribe_module( module_name ) local module = _G[ module_name ] ASSERT( module, "signals_mgr:subscribe_module: Failed to subscribe module '%s'", module_name ) ASSERT( type( module ) == "table", "signals_mgr:subscribe_module: Failed to subscribe module '%s', must be a table", module_name ) ASSERT( type( module.attach ) == "function", "signals_mgr:subscribe_module: Failed to subscribe module '%s', has no 'attach' function", module_name ) module.attach( self ) end Строка 269 из скрипта выделена курсивом 1 Ссылка на комментарий
naxac 2 447 Опубликовано 12 Декабря 2019 Поделиться Опубликовано 12 Декабря 2019 (изменено) @Капрал Хикс, смотря сколько у тебя тасков. Я проверял на ОП-2, там 165 квестов, на сохранение по старой схеме (но там уже строки сохранялись хэшами) данные занимали около 2kb, активных заданий при этом было всего 2, Пакет актёра - максимум 8kb, так туда обычно ещё много чего сохраняют: таймеры там всякие, переменные разные и т.д. Вот тут я переделал немного сохранение: ссылка. Места стало занимать почти в два раза меньше. А по сравнению с чистым ТЧ - разница, наверное, раза в четыре, потому что там всё строками сохранялось. @DMT, у тебя функция ASSERT не рабочая. Если бы она работала - в логе было бы написано, что в папке scripts нет подключаемого модуля (файла), и было бы написано, какого именно. Изменено 12 Декабря 2019 пользователем naxac 4 Аддон для ОП-2.09.2: Яндекс/Google/GitHub Ссылка на комментарий
DMT 2 Опубликовано 12 Декабря 2019 Поделиться Опубликовано 12 Декабря 2019 @naxac, Я в _g.script прописал пустую функцию ASSERT Цитата function ASSERT( cond, ... ) end Вылет каким был — таким и остался. Я вырезал все вызовы ASSERT из ogse_signals.script, теперь вылет такой: Цитата LUA error: ...ow of chernobyl\gamedata\scripts\ogse_signals.script:243: attempt to index local 'module' (a nil value) Кусок кода: Цитата function signals_mgr:subscribe_module( module_name ) local module = _G[ module_name ] module.attach( self ) end Строчка 243 выделена курсивом Ссылка на комментарий
naxac 2 447 Опубликовано 12 Декабря 2019 Поделиться Опубликовано 12 Декабря 2019 @DMT, я ж тебе объясняю: сделай рабочей функцию ASSERT, и станет понятно, какой модуль отсутствует в скриптах. Вот тут: local module = _G[ module_name ] Определяется переменная этого самого модуля. module_name - название скрипта. Выведи его в лог, и станет понятно, чего не хватает. Аддон для ОП-2.09.2: Яндекс/Google/GitHub Ссылка на комментарий
DMT 2 Опубликовано 12 Декабря 2019 Поделиться Опубликовано 12 Декабря 2019 @naxac, А в каком смысле функция ASSERT не является рабочей? Почему вариант Цитата function ASSERT( cond, ... ) end не является рабочим ? Ссылка на комментарий
naxac 2 447 Опубликовано 12 Декабря 2019 Поделиться Опубликовано 12 Декабря 2019 @DMT, потому что эта функция в огсе предназначена для проверки: если первый аргумент - это false или nil, то выводится сообщение об ошибке, заданное остальными аргументами. Аддон для ОП-2.09.2: Яндекс/Google/GitHub Ссылка на комментарий
Zander_driver 10 334 Опубликовано 12 Декабря 2019 Поделиться Опубликовано 12 Декабря 2019 только что, DMT сказал: Почему потому что пустая функция ничего не делает. 1 Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на 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. Ссылка на комментарий
DMT 2 Опубликовано 12 Декабря 2019 Поделиться Опубликовано 12 Декабря 2019 @naxac, @Zander_driver, а существует какой-то справочник по скриптам огсе с описанием новых функций ? Ссылка на комментарий
naxac 2 447 Опубликовано 12 Декабря 2019 Поделиться Опубликовано 12 Декабря 2019 @DMT, https://xray-engine.org/index.php?title=X-Ray_extensions 1 Аддон для ОП-2.09.2: Яндекс/Google/GitHub Ссылка на комментарий
mole venomous 3 433 Опубликовано 12 Декабря 2019 Поделиться Опубликовано 12 Декабря 2019 (изменено) Добрые люди, есть у кого какие соображения, отчего происходит вылет "...gamedata\scripts\amk.script:1403: attempt to perform arithmetic on local 'st' (a string value)". Я уже мозг сломал, не могу выявить причину. Недавно перешёл на таймеры из солянки (в смысле, заменил базовый АМКшный код), вылет происходит при загрузке любого сейва после сдачи вновь добавленного квеста у вновь добавленного СИДового НПС. Грешу на кривую адаптацию кода, ведь раньше вылета не было. Но не вижу взаимосвязи, потому и в тупике. При сдаче квеста ничего особенного - забираем вещь, даём ревард (в виде денег, хабара и тайника), ну и инфопорцию, конечно. Может кто сталкивался, уже не пойму, куда копать... Изменено 12 Декабря 2019 пользователем mole venomous Здесь могла быть ваша реклама. Ссылка на комментарий
_Sk8_AsTeR_ 117 Опубликовано 12 Декабря 2019 Поделиться Опубликовано 12 Декабря 2019 Господа, время доброго! Прошу подсказки Имеется момент, где мы проигрываем звук: Скрытый текст snd_obj:play_no_feedback( npc, sound_object.s3d, 0, npc:position(), 1.0 ) Звук проигрывается, но строго в позиции НПС. Если НПС отойдет, то звук продолжается на том же месте, где непися уже нет. Вопрос: как скриптово заставить звук проиграться от лица НПС, будто обычная озвучка? Ссылка на комментарий
DMT 2 Опубликовано 13 Декабря 2019 Поделиться Опубликовано 13 Декабря 2019 http://stalkerin.gameru.net/wiki/index.php?title=SoC._Один_из_методов_спавна Я внедрил в геймдату готовый пример от Бардака. Суть примера: имеется файл db.script, в котором две функции: одна спавнит электру, другая — вертолёт. Начинать новую игру не обязательно, НО если после спавна сделать сохранение и загрузку то получаю вылет: Цитата Line : 30 Description : Specified story object is already in the Story registry! Мои собственные догадки о причинах вылета такие: после загрузки скрипт второй раз пытается заспавнить электру и вертолёт, которые уже заспавнены. То есть скрипт пытается использовать такие story_id, которые уже использованы. Если это верное предположение, то возникает вопрос: как модифицировать скрипт Бардака, чтобы не было вылета? Самый простой способ? Несколько минут спустя: моё предположение оказалось неверным. Даже если удалить скрипт от Бардака, сейв всё равно не грузится, всё равно происходит этот вылет. Значит проблема в том, что заспавненные объекты неправильно сохраняются. Почему сейв получается битым ? Ссылка на комментарий
abramcumner 1 159 Опубликовано 13 Декабря 2019 Поделиться Опубликовано 13 Декабря 2019 29 минут назад, DMT сказал: Почему сейв получается битым ? Потому, что при установки story_id через нет-пакеты, движок не проверяет дубликаты и не регистрируeт story_id. Все это происходит при следующей загрузке сейва. Собственно ошибка была при самом первом спане. Модифицировать не надо, надо следить за стори_ид: то ли использовал существующие сиды, то ли электре и вертолету задал одинаковые. Ссылка на комментарий
DMT 2 Опубликовано 13 Декабря 2019 Поделиться Опубликовано 13 Декабря 2019 4 минуты назад, abramcumner сказал: Модифицировать не надо, надо следить за стори_ид В смысле ? Если что, я не вносил никаких изменений в db.script от Бардака. Ссылка на комментарий
abramcumner 1 159 Опубликовано 13 Декабря 2019 Поделиться Опубликовано 13 Декабря 2019 (изменено) @DMT, добавь в db.script после строки "local story_id = packet:r_u32()" вывод story_id в лог, в функции create_anom и create_heli. Попробуй заменить "local story_id = packet:r_u32()" на "local story_id = packet:r_s32()" и "packet:w_u32(story_id)" на "packet:w_s32(story_id)", тоже в двух функциях. Меняется u32 на s32. Битый сейв удали. Изменено 13 Декабря 2019 пользователем abramcumner 1 Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти