Полтергейст
Опытные-
Число публикаций
318 -
Регистрация
-
Последнее посещение
-
AMKoin
30 [Подарить AMKoin]
Весь контент пользователя Полтергейст
-
Вылеты без логов - в чём причины и как с ними бороться
Полтергейст ответил на тему форума автора Полтергейст в Школа моддинга
Вылет без лога произойдёт, если попытаться использовать функцию wounded(...) для изменения состояния раненности NPC. Даже перенос её вызова в update(...) может не помочь - у меня вылетает и в первом update, и в net_spawn. Такие же проблемы могут быть при использовании некоторых других функций, но пока что с ними не сталкивался. -
У меня пара вопросов по использованию скрипта state_mgr: 1. Как вручную сбрасывать состояние? Например, если я установлю состояние "wounded_heavy", а поcле определённого события нужно сбросить состояние. 2. В файле state_mgr_goap есть вот такая строка: st.planner = state_mgr.action_planner() кто-нибудь может объяснить, почему не происходит вылета? В скрипте state_mgr нет такой функции. Если это вызов конструктора класса, то чем это отличается от такого варианта? st.planner = action_planner()
-
Artos Такой способ не позволяет сделать фильтрацию NPC по рангам и другим параметрам, которую планировалось (в случае успешного тестирования) добавить в тот код, который я выкладывал (то был "черновой" вариант). Я уже понял. Просто при существующих ограничениях не вижу дугого способа, т.к.: 1. Коллбеки для отлова слышимых NPC'ом звуков для этого не годятся 2. best_danger():object() никогда не возвращает аномалии. 3. Даже если бы не было первых двух пунктов, то добавить аномалию в рестрикторы я всё равно бы не смог - функция add_restrictions не работает по непонятным причинам. И работать, судя по всему, не собирается. 4. Даже если добавить рестрикторы через alife():add_in_restrictions(...), то изменения всё равно не вступят в силу в онлайне. 5. Если добавлять в список не все аномалии, а только те, которые в онлайне, то этот список нужно как-то обновлять. В связи с предыдущим пунктом это очень проблематично.
-
Справочник по функциям и классам
Полтергейст ответил на тему форума автора Malandrinus в Скрипты / конфиги / движок
Обычно функции, которые выведены в скрипты, перечисляются в dll-ке открытым текстом примерно через одинаковое расстояние (по символам). Примерно так эта функция и была обнаружена - в dll её имя прописано рядом с именами других функций этого класса. Также имена некоторых функций и классов (в т.ч. и неэкспортированных) можно найти в сообщениях, предназначенных для вывода в лог при ошибке. -
Artos Идея простая - добавлять все аномалии, находящиеся на уровне, всем NPC при переходе в онлайн. С фильтрацией уже добавленных разобрался, но тут появилась ещё одна проблема. Похоже, все эти операции с добавлениями/удалениями что-то перегружают и в итоге у меня стала появляться ошибка "С stack overflow". Есть ещё другая проблема - рестрикторы, которые добавляются таким способом (через alife_simulator) не отображаются в списке рестрикторов (был вылет "any vertex... inaccessible") онлайн-объектов. Либо они хранятся в какой-то отдельной таблице, либо просто не успевают добавиться, т.к. NPC уже перешёл в онлайн.
-
Справочник по функциям и классам
Полтергейст ответил на тему форума автора Malandrinus в Скрипты / конфиги / движок
Есть одна очень хорошая новость. Судя по тому, что я накопал, в lua_help добавлены не все экспортируемые функции и классы. Например, функция CALifeMonsterBrain.can_choose_alife_tasks(bool) экспортирована в скрипты не только в ЧН и ЗП, но и в ТЧ. Только что проверил - никаких вылетов при вызове этой функции нет. Вполне возможно, что есть и другие функции, которые можно использовать, но они не описаны в lua_help. -
Выкладываю свой код по частям. 1) Фрагмент из биндера NPC (xr_motivator) (в функции net_spawn сразу осле установки коллбеков)
-
Artos В том и странность: функция remove_all_restrictions виснет, но если удалять отдельно каждый рестриктор через alife():remove_in_restriction(...), то всё нормально. Для клиентского объекта функция add_restrictions тоже виснет, в то время, как alife():add_in_restriction(...) работает как надо. KD87 Дело в том, что удаление рестрикторов я делаю в функции net_destroy. Если я вызову remove_all_restrictions(), то ничего не произойдёт - игра просто напишет, что объект, для которого эта функция вызвана, не найден.
-
[SoC] Ковыряемся в файлах
Полтергейст ответил на тему форума автора Halford в Скрипты / конфиги / движок
Ранг добавляется за хождение по smart_terrain'ам. В AMK помимо этого в оффлайн боях добавляется за победу. -
KD87 У меня чистая игра 1.0006, могу ли я использовать parse_stalker_packet из amk.script для разбора пакетов? В AMK в se_stalker после чтения/записи онлайн работ идёт чтение/запись числа, а в чистой 1.0006 вместо них идёт 2 bool значения. Вот сама функция:
-
Вопрос по net-пакетам. По какому смещению находится таблица in-рестрикторов для класса cse_alife_human_stalker?
-
Вылеты без логов - в чём причины и как с ними бороться
Полтергейст ответил на тему форума автора Полтергейст в Школа моддинга
Флуд почищен, список причин вылетов обновлён. Вчера столкнулся с непонятным вылетом без лога, причина скорее всего в рестрикторах. Дело в том, что я пытался прописать всем NPC (людям) в рестрикторы все аномалии, находящиеся на этом уровне, с помощью функции alife():add_in_restriction(npc, restrictor_id). При net_destroy, соответственно, удалял их с помощью alife():remove_in_restriction(npc, restrictor_id). Также был учтён баг с удалением рестриктора, прописанного кому-то. При самой игре вылета нет, но если сохраниться возле какого-нибудь NPC и потом загрузиться, то вылет был. Возможно, из-за того, что была попытка прописать всё это в рестрикторы дважды, либо весь этот список как-то неправильно сохраняется. -
Это только начальное направление взгляда при спавне. Как-то можно это сделать через net_packet'ы, но проще воспользоваться функцией set_desited_direction(вектор_направления_взгляда). Вот только не знаю, относительно чего этот вектор задаётся - посмотри в логических схемах (скриптах) или в том же state_mgr примеры использования.
-
Справочник по функциям и классам
Полтергейст ответил на тему форума автора Malandrinus в Скрипты / конфиги / движок
По поводу коллбеков: 1. Коллбеки типа callback.sound перехватывают звуки только от сталкеров, монстров, игрока и детекторов. 2. Есть кое-какие предположения насчет коллбеков action_animation, action_movement, action_object, action_particle, action_sound и action_watch. Если посмотреть в lua_help на описание функций set_action() из класса entity_action, то становится понятно, что они нужны для отслеживания действий монстров. Для остальных объектов они, скорее всего, работать не будут. Вот только нет примеров использования. -
Исправил - всё равно не работает. Судя по тому, что выводилось в лог, коллбек "воспринимает" только сталкеров, монстров и (почему-то) детектор игрока. Поэтому такой способ определения аномалий, к сожалению, не годится.
-
Сегодня пытался сделать обход аномалий с помощью отслеживания звуков, но по какой-то причине аномалии не добавляются в рестрикторы... Почти весь код реализован в одной функции. Формат таблицы self.anomaly: self.anomaly[anom_id] = name anom_id - id аномалии, name - её имя.
-
Вылеты без логов - в чём причины и как с ними бороться
Полтергейст ответил на тему форума автора Полтергейст в Школа моддинга
Вылет без лога может случаиться, если вызвать метод update() из серверного объекта мёртвого NPC. Скорее всего для brain():update() будет то же самое, но надо будет ещё потестировать для более точных данных. Ещё один источник проблем - функции cse_alife_smart_zone.register_npc() и cse_alife_smart_zone.unregister_npc(). Причём вылеты от них бывают не при каждом вызове, а "плавающие" (через раз). В смартах они не используются (видимо, именно поэтому разрабы их убрали), но на всякий случай оставлю это тут. -
S.T.A.L.K.E.R. 2: Сердце Чернобыля - Предрелизная тема
Полтергейст ответил на тему форума автора LeonserGT в S.T.A.L.K.E.R. 2: Сердце Чернобыля
Тем лучше, тем зрелищнее будет выглядеть "восстание из мёртвых", если моё предположение подтвердится. Некоторых сотрудников могли специально не оповещать, чтобы они сами же распустили слухи о закрытии. По-видимому, пиар удался - что-то не припомню больше случаев, чтобы где-то выходили на митинг в поддержку не чего-нибудь, а ИГРЫ. -
S.T.A.L.K.E.R. 2: Сердце Чернобыля - Предрелизная тема
Полтергейст ответил на тему форума автора LeonserGT в S.T.A.L.K.E.R. 2: Сердце Чернобыля
На оф. сайте новостей всё ещё нет. Предполагаю, что это "тонкий" пиар - сначала сделали вид, что на грани закрытия, потом сделают вид, что выкрутились. И никто не догадается, что на самом деле ничего не было - опишут всё очень красиво. -
Справочник по функциям и классам
Полтергейст ответил на тему форума автора Malandrinus в Скрипты / конфиги / движок
В дополнение к таблице соответствия серверных и клиентских классов (пост №29): в файле xr_game.dll ближе к концу есть упоминания соответствий серверных и клиентских классов (причём внутри движка имена этих классов могут отличаться от тех, что экспортированы в LUA). Кроме этого, классы делятся на парные и непарные. Непарные остаются без соответстия, т.е. они "чисто серверные" или "чисто клиентские". Если я правильно понял, непарные классы наследованы от неэкспортируемого класса CObjectItemSingle, парные - от CObjectItemClientServer. Вырезка из файла xr_game.dll (убраны нечитаемые символы) под спойлером. -
Да, небольшое дополнение: после установки коллбеков (которые в update) надо присвоить self.callbackset = true.
-
Недавно в "ковырялке" кто-то писал про срабатывание коллбеков на выкладывание/взятие предмета при переходах между локациями. Нашёл решение (теоретически, на практике пока не проверялось) этой проблемы. В некоторых местах разрабы ставили проверку на "чёрный экран", т.е. видит ли игрок что-нибудь, или же ещё идёт загрузка. Чтобы коллбеки вызывались только ПОСЛЕ появления первого кадра игры, надо сделать в 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)
-
[SoC] Ковыряемся в файлах
Полтергейст ответил на тему форума автора Halford в Скрипты / конфиги / движок
Что под этим понимается? Если имеется в виду определение освещённости предмета или NPC - нет. Иначе разрабы не стали бы заморачиваться с sr_light-рестрикторами. Есть только параметры, регулирующие "зрение" NPC, но выполняется это всё внутри движка и в LUA не экспортировано. -
[SoC] Ковыряемся в файлах
Полтергейст ответил на тему форума автора Halford в Скрипты / конфиги / движок
Да. -
[SoC] Ковыряемся в файлах
Полтергейст ответил на тему форума автора Halford в Скрипты / конфиги / движок
Какого бинокля? Есть wpn_binoc, ему эти строки вроде бы без разницы (можешь закомментировать и проверить). Если binocular_a, то эти строки необходимы для отыгрыша анимации (например, в самом начале когда Петруха смотрит в бинокль на бандитов).
- [ЧН] OGSM CS 1.8 CE Fixes
- [ЧН] HARDWARMOD 3.2
- [ЗП] The Long Road
- [ЧН] New vision of War
- [ЧН] Old Good Stalker Mod - Clear Sky
- [ЗП] Unofficial Patch
- [ЗП] Смерти вопреки
- [ЗП] Контракт на хорошую жизнь
- [ЗП] Shoker Weapon Mod 2.1
- [ЗП] Hardcore pack for SGM 2.2
- [ЗП] Контракт Синдиката
- [ЗП] Клондайк 2.0
- ...и другие моды