Перейти к контенту

Рекомендуемые сообщения

Всем доброго. Вопрос по мародёрству. Есть ли какой скриптовый способ запретить НПСам НЕ брать конкретный предмет с земли и/или трупа/ящика? Или на крайний случай с ящика, не вписывая ID того ящика в исключения amk_offline_alife.script.

Здесь могла быть ваша реклама.


Подарки

  • 4
  • 4
  • 5
  • 2
  • Ссылка на комментарий

    Вопрос по схемам поведения и симуляции. У меня есть своя схема поведения, в определённый момент я "отключаю" НПС от схемы поведения переведя НПС из скриптового экшена на движковый экшен алайф_планнер, после этого взять НПС под скриптовую схему поведения уже не получится. Мне нужно добиться того, что-бы НПС можно было "отключить" от скриптовй схемы поведения на алайф планировщик, а потом опять, если нужно, взять под скриптовую схему поведения.
    Код схемы поведения: https://pastebin.com/9tUCsxyf

    (см. функцию add_to_binder)

    Ссылка на комментарий
    15 часов назад, mole venomous сказал:

    Есть ли какой скриптовый способ запретить НПСам НЕ брать конкретный предмет с земли и/или трупа/ящика?

    Есть, примеры можно посмотреть в репозитории по dsh-mod на Githab.  Или в репозитории от Den1s'a там же ( вариант той же фишки для НЛС ).
    Суть в том, что объекту в конфиг прописывается новый ключ, который задает то самое "руки прочь".
    В ДШ-моде это 
    watcher_act.bad_item = true

    Ну и соответственно:
    1) в watcher_act (онлайновое воровство - трупы/земля) - добавить чтение и обработку этого ключа
    2) в amk_offline_alife - аналогично.

    Способ проверен, все  работает.

    Изменено пользователем Okichi

    След от кругов на воде - это тоже след (с)

    Ссылка на комментарий

    Подскажите решение проблемы с большим количеством второстепенных квестов, когда сначала путаются их описания, а потом происходит вылет вида +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)"

    Изменено пользователем Капрал Хикс

    Подарки

  • Ссылка на комментарий

    @Капрал Хикс, это,вернее всего, происходит из-за превышения размера пакета сохранения клиентских данных у актера: информация о заданиях там сохраняется: см. task_manager.script

    Решение: для сохранения этих данных подключить , допустим, хранилище от Artos'а.

    Либо оптимизировать сохранение: выкинуть лишнее, для строк использовать хэши, булевы значения побитово записывать в u8, и прочие изощрения... Но хранилище, по-моему, лучший вариант.

     

    Сейчас ещё глянул - там количество записей при сохранении ограничено u8 - т.е. 255, так что если заданий в конфиге больше - будут глюки. Решение: нужно заменить в сохранении/загрузке количества записей с r(w)_u8 на r(w)_u16 - тогда лимит будет 65535.

    Изменено пользователем naxac
    • Нравится 1
    • Полезно 1

    Аддон для ОП-2.09.2: Яндекс/Google/GitHub

    naxac.gif


    Подарки

    Ссылка на комментарий
    Цитата

    LUA error: ...ow of chernobyl\gamedata\scripts\ogse_signals.script:269: attempt to index local 'module' (a nil value)

    Почему происходит этот вылет ? Кто знает, кто подскажет ?

    Ссылка на комментарий

    @naxac, вах! По методу последнему и хранилище от Артоса не понадобится, верно?

    Изменено пользователем Капрал Хикс

    Подарки

  • Ссылка на комментарий
    Цитата

    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
    Ссылка на комментарий

    @Капрал Хикс, смотря сколько у тебя тасков. Я проверял на ОП-2, там 165 квестов, на сохранение по старой схеме (но там уже строки сохранялись хэшами) данные занимали около 2kb, активных заданий при этом было всего 2, Пакет актёра - максимум 8kb, так туда обычно ещё много чего сохраняют: таймеры там всякие, переменные разные и т.д. Вот тут я переделал немного сохранение: ссылка. Места стало занимать почти в два раза меньше. А по сравнению с чистым ТЧ - разница, наверное, раза в четыре, потому что там всё строками сохранялось.

     

    @DMT, у тебя функция ASSERT не рабочая. Если бы она работала - в логе было бы написано, что в папке scripts нет подключаемого модуля (файла), и было бы написано, какого именно.

    Изменено пользователем naxac
    • Полезно 4

    Аддон для ОП-2.09.2: Яндекс/Google/GitHub

    naxac.gif


    Подарки

    Ссылка на комментарий

    @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 выделена курсивом

    Ссылка на комментарий

    @DMT, я ж тебе объясняю: сделай рабочей функцию ASSERT, и станет понятно, какой модуль отсутствует в скриптах.

    Вот тут:

    local module = _G[ module_name ]

    Определяется переменная этого самого модуля. module_name - название скрипта. Выведи его в лог, и станет понятно, чего не хватает.

    Аддон для ОП-2.09.2: Яндекс/Google/GitHub

    naxac.gif


    Подарки

    Ссылка на комментарий

    @DMT, потому что эта функция в огсе предназначена для проверки: если первый аргумент - это false или nil, то выводится сообщение об ошибке, заданное остальными аргументами.

    Аддон для ОП-2.09.2: Яндекс/Google/GitHub

    naxac.gif


    Подарки

    Ссылка на комментарий
    только что, DMT сказал:

    Почему

    потому что пустая функция ничего не делает.

    • Согласен 1

    Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

    Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

    AMD Ryzen 9 7950X (16 ядер, 5.7ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

    Ссылка на комментарий

    Добрые люди, есть у кого какие соображения, отчего происходит вылет "...gamedata\scripts\amk.script:1403: attempt to perform arithmetic on local 'st' (a string value)". Я уже мозг сломал, не могу выявить причину. Недавно перешёл на таймеры из солянки (в смысле, заменил базовый АМКшный код), вылет происходит при загрузке любого сейва после сдачи вновь добавленного квеста у вновь добавленного СИДового НПС. Грешу на кривую адаптацию кода, ведь раньше вылета не было. Но не вижу взаимосвязи, потому и в тупике. При сдаче квеста ничего особенного - забираем вещь, даём ревард (в виде денег, хабара и тайника), ну и инфопорцию, конечно. Может кто сталкивался, уже не пойму, куда копать...

    Изменено пользователем mole venomous

    Здесь могла быть ваша реклама.


    Подарки

  • 2
  • 3
  • 5
  • 5
  • Ссылка на комментарий

    Господа, время доброго! Прошу подсказки

    Имеется момент, где мы проигрываем звук:

    Скрытый текст
    
    snd_obj:play_no_feedback( npc, sound_object.s3d, 0, npc:position(), 1.0 )

     

    Звук проигрывается, но строго в позиции НПС. Если НПС отойдет, то звук продолжается на том же месте, где непися уже нет. Вопрос: как скриптово заставить звук проиграться от лица НПС, будто обычная озвучка? 


    Подарки

  • Ссылка на комментарий

    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, которые уже использованы. Если это верное предположение, то возникает вопрос: как модифицировать скрипт Бардака, чтобы не было вылета? Самый простой способ?

    Несколько минут спустя: моё предположение оказалось неверным. Даже если удалить скрипт от Бардака, сейв всё равно не грузится, всё равно происходит этот вылет. Значит проблема в том, что заспавненные объекты неправильно сохраняются. Почему сейв получается битым ?

    Ссылка на комментарий
    29 минут назад, DMT сказал:

    Почему сейв получается битым ?

    Потому, что при установки story_id через нет-пакеты, движок не проверяет дубликаты и не регистрируeт story_id. Все это происходит при следующей загрузке сейва.

    Собственно ошибка была при самом первом спане. Модифицировать не надо, надо следить за стори_ид: то ли использовал существующие сиды, то ли электре и вертолету задал одинаковые.

     


    Подарки

  • Ссылка на комментарий

    Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий

    Комментарии могут оставлять только зарегистрированные пользователи

    Создать аккаунт

    Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!

    Зарегистрировать новый аккаунт

    Войти

    Есть аккаунт? Войти.

    Войти
    • Недавно просматривали   0 пользователей

      Ни один зарегистрированный пользователь не просматривает эту страницу.

    AMK-Team.ru

    ×
    ×
    • Создать...