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

Полтергейст

Опытные
  • Число публикаций

    318
  • Регистрация

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

  • AMKoin

    30 [Подарить AMKoin]

Весь контент пользователя Полтергейст

  1. Вылет без лога произойдёт, если попытаться использовать функцию wounded(...) для изменения состояния раненности NPC. Даже перенос её вызова в update(...) может не помочь - у меня вылетает и в первом update, и в net_spawn. Такие же проблемы могут быть при использовании некоторых других функций, но пока что с ними не сталкивался.
  2. У меня пара вопросов по использованию скрипта state_mgr: 1. Как вручную сбрасывать состояние? Например, если я установлю состояние "wounded_heavy", а поcле определённого события нужно сбросить состояние. 2. В файле state_mgr_goap есть вот такая строка: st.planner = state_mgr.action_planner() кто-нибудь может объяснить, почему не происходит вылета? В скрипте state_mgr нет такой функции. Если это вызов конструктора класса, то чем это отличается от такого варианта? st.planner = action_planner()
  3. Artos Такой способ не позволяет сделать фильтрацию NPC по рангам и другим параметрам, которую планировалось (в случае успешного тестирования) добавить в тот код, который я выкладывал (то был "черновой" вариант). Я уже понял. Просто при существующих ограничениях не вижу дугого способа, т.к.: 1. Коллбеки для отлова слышимых NPC'ом звуков для этого не годятся 2. best_danger():object() никогда не возвращает аномалии. 3. Даже если бы не было первых двух пунктов, то добавить аномалию в рестрикторы я всё равно бы не смог - функция add_restrictions не работает по непонятным причинам. И работать, судя по всему, не собирается. 4. Даже если добавить рестрикторы через alife():add_in_restrictions(...), то изменения всё равно не вступят в силу в онлайне. 5. Если добавлять в список не все аномалии, а только те, которые в онлайне, то этот список нужно как-то обновлять. В связи с предыдущим пунктом это очень проблематично.
  4. Обычно функции, которые выведены в скрипты, перечисляются в dll-ке открытым текстом примерно через одинаковое расстояние (по символам). Примерно так эта функция и была обнаружена - в dll её имя прописано рядом с именами других функций этого класса. Также имена некоторых функций и классов (в т.ч. и неэкспортированных) можно найти в сообщениях, предназначенных для вывода в лог при ошибке.
  5. Artos Идея простая - добавлять все аномалии, находящиеся на уровне, всем NPC при переходе в онлайн. С фильтрацией уже добавленных разобрался, но тут появилась ещё одна проблема. Похоже, все эти операции с добавлениями/удалениями что-то перегружают и в итоге у меня стала появляться ошибка "С stack overflow". Есть ещё другая проблема - рестрикторы, которые добавляются таким способом (через alife_simulator) не отображаются в списке рестрикторов (был вылет "any vertex... inaccessible") онлайн-объектов. Либо они хранятся в какой-то отдельной таблице, либо просто не успевают добавиться, т.к. NPC уже перешёл в онлайн.
  6. Есть одна очень хорошая новость. Судя по тому, что я накопал, в lua_help добавлены не все экспортируемые функции и классы. Например, функция CALifeMonsterBrain.can_choose_alife_tasks(bool) экспортирована в скрипты не только в ЧН и ЗП, но и в ТЧ. Только что проверил - никаких вылетов при вызове этой функции нет. Вполне возможно, что есть и другие функции, которые можно использовать, но они не описаны в lua_help.
  7. Выкладываю свой код по частям. 1) Фрагмент из биндера NPC (xr_motivator) (в функции net_spawn сразу осле установки коллбеков)
  8. Artos В том и странность: функция remove_all_restrictions виснет, но если удалять отдельно каждый рестриктор через alife():remove_in_restriction(...), то всё нормально. Для клиентского объекта функция add_restrictions тоже виснет, в то время, как alife():add_in_restriction(...) работает как надо. KD87 Дело в том, что удаление рестрикторов я делаю в функции net_destroy. Если я вызову remove_all_restrictions(), то ничего не произойдёт - игра просто напишет, что объект, для которого эта функция вызвана, не найден.
  9. Ранг добавляется за хождение по smart_terrain'ам. В AMK помимо этого в оффлайн боях добавляется за победу.
  10. KD87 У меня чистая игра 1.0006, могу ли я использовать parse_stalker_packet из amk.script для разбора пакетов? В AMK в se_stalker после чтения/записи онлайн работ идёт чтение/запись числа, а в чистой 1.0006 вместо них идёт 2 bool значения. Вот сама функция:
  11. Вопрос по net-пакетам. По какому смещению находится таблица in-рестрикторов для класса cse_alife_human_stalker?
  12. Флуд почищен, список причин вылетов обновлён. Вчера столкнулся с непонятным вылетом без лога, причина скорее всего в рестрикторах. Дело в том, что я пытался прописать всем NPC (людям) в рестрикторы все аномалии, находящиеся на этом уровне, с помощью функции alife():add_in_restriction(npc, restrictor_id). При net_destroy, соответственно, удалял их с помощью alife():remove_in_restriction(npc, restrictor_id). Также был учтён баг с удалением рестриктора, прописанного кому-то. При самой игре вылета нет, но если сохраниться возле какого-нибудь NPC и потом загрузиться, то вылет был. Возможно, из-за того, что была попытка прописать всё это в рестрикторы дважды, либо весь этот список как-то неправильно сохраняется.
  13. Это только начальное направление взгляда при спавне. Как-то можно это сделать через net_packet'ы, но проще воспользоваться функцией set_desited_direction(вектор_направления_взгляда). Вот только не знаю, относительно чего этот вектор задаётся - посмотри в логических схемах (скриптах) или в том же state_mgr примеры использования.
  14. По поводу коллбеков: 1. Коллбеки типа callback.sound перехватывают звуки только от сталкеров, монстров, игрока и детекторов. 2. Есть кое-какие предположения насчет коллбеков action_animation, action_movement, action_object, action_particle, action_sound и action_watch. Если посмотреть в lua_help на описание функций set_action() из класса entity_action, то становится понятно, что они нужны для отслеживания действий монстров. Для остальных объектов они, скорее всего, работать не будут. Вот только нет примеров использования.
  15. Исправил - всё равно не работает. Судя по тому, что выводилось в лог, коллбек "воспринимает" только сталкеров, монстров и (почему-то) детектор игрока. Поэтому такой способ определения аномалий, к сожалению, не годится.
  16. Сегодня пытался сделать обход аномалий с помощью отслеживания звуков, но по какой-то причине аномалии не добавляются в рестрикторы... Почти весь код реализован в одной функции. Формат таблицы self.anomaly: self.anomaly[anom_id] = name anom_id - id аномалии, name - её имя.
  17. Вылет без лога может случаиться, если вызвать метод update() из серверного объекта мёртвого NPC. Скорее всего для brain():update() будет то же самое, но надо будет ещё потестировать для более точных данных. Ещё один источник проблем - функции cse_alife_smart_zone.register_npc() и cse_alife_smart_zone.unregister_npc(). Причём вылеты от них бывают не при каждом вызове, а "плавающие" (через раз). В смартах они не используются (видимо, именно поэтому разрабы их убрали), но на всякий случай оставлю это тут.
  18. Тем лучше, тем зрелищнее будет выглядеть "восстание из мёртвых", если моё предположение подтвердится. Некоторых сотрудников могли специально не оповещать, чтобы они сами же распустили слухи о закрытии. По-видимому, пиар удался - что-то не припомню больше случаев, чтобы где-то выходили на митинг в поддержку не чего-нибудь, а ИГРЫ.
  19. На оф. сайте новостей всё ещё нет. Предполагаю, что это "тонкий" пиар - сначала сделали вид, что на грани закрытия, потом сделают вид, что выкрутились. И никто не догадается, что на самом деле ничего не было - опишут всё очень красиво.
  20. В дополнение к таблице соответствия серверных и клиентских классов (пост №29): в файле xr_game.dll ближе к концу есть упоминания соответствий серверных и клиентских классов (причём внутри движка имена этих классов могут отличаться от тех, что экспортированы в LUA). Кроме этого, классы делятся на парные и непарные. Непарные остаются без соответстия, т.е. они "чисто серверные" или "чисто клиентские". Если я правильно понял, непарные классы наследованы от неэкспортируемого класса CObjectItemSingle, парные - от CObjectItemClientServer. Вырезка из файла xr_game.dll (убраны нечитаемые символы) под спойлером.
  21. Да, небольшое дополнение: после установки коллбеков (которые в update) надо присвоить self.callbackset = true.
  22. Недавно в "ковырялке" кто-то писал про срабатывание коллбеков на выкладывание/взятие предмета при переходах между локациями. Нашёл решение (теоретически, на практике пока не проверялось) этой проблемы. В некоторых местах разрабы ставили проверку на "чёрный экран", т.е. видит ли игрок что-нибудь, или же ещё идёт загрузка. Чтобы коллбеки вызывались только ПОСЛЕ появления первого кадра игры, надо сделать в bind_stalker.script такие изменения: 1. Добавляем переменную, которая показывает, установлены ли коллбеки function actor_binder:__init (obj) super(obj) ... self.callbackset = false ... end 2. Переносим в функцию update() все коллбеки, которые не должны вызываться до окончания загрузки. function actor_binder:update(delta) object_binder.update(self, delta) ... if device().precache_frame >1 then return end if self.callbackset == false then self.object:set_callback(callback.on_item_take, self.on_item_take, self) self.object:set_callback(callback.on_item_drop, self.on_item_drop, self) self.object:set_callback(callback.trade_sell_buy_item, self.on_trade, self) self.object:set_callback(callback.take_item_from_box, self.take_item_from_box, self) self.object:set_callback(callback.article_info, self.article_callback, self) end ... 3. В функции reinit должны остаться все остальные коллбеки: self.object:set_callback(callback.inventory_info, self.info_callback, self) self.object:set_callback(callback.task_state, self.task_callback, self) self.object:set_callback(callback.level_border_enter, self.level_border_enter, self) self.object:set_callback(callback.level_border_exit, self.level_border_exit, self)
  23. Что под этим понимается? Если имеется в виду определение освещённости предмета или NPC - нет. Иначе разрабы не стали бы заморачиваться с sr_light-рестрикторами. Есть только параметры, регулирующие "зрение" NPC, но выполняется это всё внутри движка и в LUA не экспортировано.
  24. Какого бинокля? Есть wpn_binoc, ему эти строки вроде бы без разницы (можешь закомментировать и проверить). Если binocular_a, то эти строки необходимы для отыгрыша анимации (например, в самом начале когда Петруха смотрит в бинокль на бандитов).
×
×
  • Создать...