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

Kirgudu

Жители
  • Число публикаций

    1 631
  • Регистрация

  • Последнее посещение

  • Дней в топе

    27
  • AMKoin

    15,250 [Подарить AMKoin]

Kirgudu последний раз побеждал 11 Ноября

Kirgudu - автор самых популярных публикаций!

Баланс оценок

1 207

9 подписчиков

О Kirgudu

  • День рождения 12.03.1974

Недавние посетители профиля

9 422 просмотра профиля
  1. И если с момента появления предоплаченной игры в доступе прошло не более 14 дней.
  2. В ЧН и ЗП, а также в модифицированных движках или расширителях. В оригинальном ТЧ нет поддержки методов IO.
  3. @monk я в скриптах подсказал и сделал что мог, проверил: story_id назначается как надо, ошибок нет. Однако после присвоения story_id там действительно идёт сбой логики. Вот я и подумал: может, Васяну ты в процессе своих экспериментов что-то в профиле нахимичил, спец. логику, флаги или ещё что-либо, что позволяет ему такое улучшение игнорировать (в хорошем смысле). Я такого не помню, но я-то как раз только в скрипты и лез, оставляя остальное на тебя.
  4. Kirgudu

    Скриптование

    У серверного объекта position является свойством, а не методом (функцией). Выполнение будет приводить к ошибке, как у тебя, тогда как правильное написание будет таким: if zone and zone:inside(obj.position) then
  5. Kirgudu

    Скриптование

    Если только m_timers от того же Артоса на OGSR переделать... Вот только зачем? 5 лет назад уже был предложен простой и действенный способ подменить хранилище se_stor Артоса на вариант из OGSR, при этом не меняя ни строчки кода в использующих хранилище скриптах. Внутри модуля таймеров вызываются глобальные GetVar и SetVar, которые можно подменить ровно таким же способом. @Stalkersof ничего сложного в работе с таблицами в OGSR нет, информации достаточно даже той, что представлена в официальном Wiki. Вот такой код выполнится без ошибок (проверил только что за 5 минут): local xvars = get_stored_vars() xvars.items_podobral = {} xvars.items_podobral[1] = { section = "111", rang = 1 } xvars.items_podobral[2] = { section = "222", rang = 2 } xvars.items_podobral[3] = { section = "333", rang = 3 } Но далее надо помнить, что любые таблицы в хранилище размещаются не как таблицы, а как значения с типом "userdata", даже сразу после первичного присвоения. То есть по сформированной выше таблице, например, не получится итерироваться: for k,v in pairs(xvars.items_podobral) do -- do something end такой код вызовет ошибку вида «"userdata" не является таблицей». Не получится использовать table.insert и table.remove, не выйдет посчитать кол-во элементов #xvars.items_podobral и так далее, то есть совершить любое действие, которое доступно для стандартных таблиц. Чтобы работать с таблицей, записанной в хранилище, необходимо её сначала конвертировать в понятный для lua вид: local t = xvars.items_podobral() -- выполнить одноименный метод -- после выполнения переменная t содержит в себе стандартную таблицу Но вот если требуется переприсвоить какой-то элемент таблицы, это можно сделать посредством прямого доступа, без конвертирования: xvars.items_podobral[2] = "новое строковое значение" В общем, всё необходимое описано на оф. ресурсе. Сверх этого рассказать что-то сложно. Пробуй, экспериментируй.
  6. Kirgudu

    Скриптование

    Поделиться текстом ошибки в голову, видимо, не приходит? Какая ещё, в таком случае, требуется подсказка, если она уже дана?
  7. Kirgudu

    Скриптование

    @Stalkersof вылет может быть и не связан с приведённым кодом, по крайней мере я в нём ошибки не вижу. А пример уже давали ранее, целый набор функций для работы с этим хранилищем:
  8. Kirgudu

    Скриптование

    @Stalkersof можно использовать SCRIPT_VARS_STORAGE
  9. Kirgudu

    Скриптование

    Скорее всего в использованном модуле m_netpk. Предположу, что взята версия от 2017 года, что выкладывалась тут неоднократно, в том числе мной, а эксперименты проводятся на платформе ЧН или ЗП (но не ТЧ). Есть в ней один авторский недосмотр: для класса net_se_actor использован конструктор function net_cse_alife_creature_actor:__init(obj,mode), вероятно взятый копипастом из предыдущего одноимённого класса. Попытка создать экземпляр класса net_se_actor (при чтении нет-пакета актора) очевидным образом должна завершиться ошибкой. Решение простое: классу net_se_actor должен соответствовать конструктор funstion net_se_actor:__init(obj,mode). Нужный код уже давно можно найти в разных модах (не помню, у кого первого заметил соотв. правку), а вот сделать аналогичную замену в теме "Сборочный цех" я почему-то забыл. Исправляюсь. Свежую версию m_netpk можно скачать здесь:
  10. Kirgudu

    Форум: вопросы и предложения

    У меня работает: Chrome v130.0.6723.117 64bit.
  11. @imcrazyhoudini скинь, конечно, но я доберусь до проверки не ранее, чем в воскресенье, и не гарантирую, что смогу помочь. Нет, чисто со скриптовой точки зрения я проверю, что, например, story_id присваивается правильно и существует далее. А вот с логикой не особо в ладах, вряд ли получится понять, что там может ломаться. С этим к другим специалистам.
  12. Kirgudu

    Скриптование

    Это же просто строки, если правильно помню. Как они могут давать вылет при определении типа? Но вообще интересный вопрос, надо будет поэкспериментировать как-нибудь.
  13. @imcrazyhoudini всё, я понял, что у тебя за последовательность событий, раньше как-то туманно было. Ты спавнишь отряд, и из этой же логики в следующей секции запускаешь квест, целью которого является искомый story_id. Честно говоря, я не уверен, что между двумя частями логики проходит достаточное для получения сервером информации о story_id количество апдейтов. Если это так, рекомендую попробовать сделать запуск квеста во второй секции логики не на on_info, а, например, на on_timer с таймаутом в пару секунд. Однако если с промежутком между секциями логики всё в порядке, предлагаю посмотреть на содержимое функции task_objects.get_inited_task, где обрабатывается параметр квеста target_story_ids. Первые несколько строчек выглядят так (остальные нам не интересны): local sid = tonumber(self.target_story_ids) -- считываем из параметра квеста story_id if(sid) then self.target = id_by_sid(sid) -- находим серверный объект по story_id и берём у него id (функция в _g.script) if not(self.target) then -- проверяем, что полученный id не пустой abort("Target for storyline task doesnt exist. Story id [%s]", tostring(self.target_story_ids)) end ... Получается, что если бы story_id не был присвоен нашему объекту, мы неминуемо дошли бы до вызова функции abort. Вот и думай. Может стоит обложиться выводом в лог во всех ключевых точках и попытаться понять, что конкретно происходит.
  14. @imcrazyhoudini как связана инициализация квеста с использованием только что присвоенного story_id, непонятно: опять сделано что-то, что осталось за кулисами. Когда будет время (скорее всего, в предстоящие выходные), постараюсь сам воспроизвести ситуацию на файлах чистой игры и предоставлю результат для изучения. А пока дальше сам, мои советы на какое-то время иссякли. Не исключено, что успеешь сам найти решение проблемы раньше, метод-то вполне рабочий - подтверждается реальными опытами в существующем моде.
  15. Kirgudu

    Скриптование

    Можно воспользоваться функциями из _g.script return sobj and zone and (IsStalker(sobj) or IsMonster(sobj)) and zone:inside(sobj:position()) and not sobj:community() == "stalker" а можно пойти с другой стороны и перебрать только те объекты, в свойствах которых есть функция community(): return sobj and zone and sobj.community and sobj:community() ~= "stalker" and zone:inside(sobj:position())
×
×
  • Создать...