Graff46 598 Опубликовано 26 Мая 2020 (изменено) Данная система предназначена для управления перемещениями НПС в оффлайне. Данная схема работает по аналогии с обычными схемами поведения - на системе ini файлов custom_data НПС. Создание этой системы поспособствовал этот пост Использование функционала метода task перегруженного в скриптах класса cse_alife_smart_zone для навигации НПС применялось ранее Red75 Эта система будет использована тут как модуль Скрытый текст Примечания НПС который берётся под оффлайн логику не должен быть ни в каком смарттеррейне НПС который уже находится под управлением оффлайн логики не может быть взят под смарттеррейн Для того чтобы НПС не попадал под смарттеррейны нужно серверному объекту НПС задать поле no_smart и задать полю значение true, в этом случае НПС не будет забираться в смарттеррейн ни при каких иных условиях. Пример: local sobj = alife():create("stalker", vector():set(1,2,3), 1,2) sobj.no_smart = true Использование данной схемы аналогично использованию других схем поведения (на системе ini файлов) в custom_data НПС. Поэтому ниже будут описаны основы составления схемы, учитывая, что Вы знакомы с правилами составления логики для НПС. * (кондлист) - строка с поддержкой кондлистов {+-=!} scheme %-+=%. Про систему кондлистов смотрите уроки создания логики для НПС. Для задания схемы поведения в custom_data нужно задать секцию offline, а в ней ключ aсtive аналогично aсtive в logic Также в секции offline можно указать ключ cfg где его значение это путь до файла с логикой относительно папки config Подобный функционал имеется и при настройке обычной логики Ключом к aсtive должна быть строка (кондлист) с именем секции, (имя секции может быть любым) эта секция будет содержать параметры для поведения НПС (аналогично секциям remark, wolker и тд. в описании обычной логики НПС). Секция с параметрами поведения должна обязательно иметь 2 ключа: lv, gv - целевой левел вертекс, гейм вертекс соответственно. Не обязательные параметры: Переключатели обычные - переключают сразу как только возможно. Переключатели по событиям - срабатывают во время событий; *Эти переключатели подобны on_info в описании обычной логики НПС Переключатели обычные: Представляют собой ключ on_over, где его значение строка (кондлист) c указанием перехода на другую секцию или без. Переключатели по событиям: Пока событие в системе одно - это достижение НПС целевых вертексов, имя этого события - end. Переключатель по событию это ключ (on_ имя события) (для события end - on_end). Значение к ключу такое-же как у on_over. Пример настройки логики ;;;;;; Ниже настрока обычной (онлайн) логики НПС ;;;;; [logic] active = remark [remark] anim = hello ;;;;;; Ниже настрока оффлайн логики НПС ;;;;; [offline] ; Аналогично logic active = {-infoporsh !func} scheme1 %+infoporsh2%; Устанавливаем активную секцию (любое имя) [scheme1] ; Секция с параметрами lv = 998261 ; целевой левел-вертекс gv = 210 ; целевой гейм-вертекс on_end = scheme2 %=mytest% ; по событию end переход на секцию scheme2 [scheme2] lv = 1164741 gv = 184 on_over = {=offline_pos} scheme1 ; переход на сеекцию scheme1 (сдерживается кондлистом) Замечания про кондлисты и эффекторы Как Вы должно быть знаете - функции используемые в кондлистах в качестве прекондишинов (заключаются в {}) и в качестве эффекторов (заключаются в %%) имеют 2 обязательных аргумента: Клиентский объект актора Клиентский объект НПС Если если вы используете функции в кондлистах оффлайн логики, то вторым аргументом у функций будет: Серверный объект НПС! Из этого следует, что использование готовых функций из xr_effects.script и xr_conditions.script не возможно! Функции надо писать новые свои с учетов вышеуказанных особенностей! Скрытый текст Описанные ниже действия подразумевают понимание Вами скриптовой системы игры, программирования на ЯП Lua, системы классов luaBind. Для адаптации на другие платформы: Класс CALifeSmartTerrainTask должен иметь возможность быть вызванным с параметрами представленными гейм и левел ветртексами. Если CALifeSmartTerrainTask вызывается только с patrol, то ничего не получится. Для подключения данной системы к моду на Зов Припяти понадобятся дописать/изменить файлы: se_stalker.script smart_terrain.script se_stalker.script В конец тела функции se_stalker:switch_online добавить: if self.offline_behavior then -- offline behavior self.offline_behavior:onOnline() end В конец тела функции se_stalker:switch_offline добавить: xr_offliner.onOffline(self) -- offline behavior В конец тела функции se_stalker:update добавить: if self.offline_behavior then -- update offline behavior self.offline_behavior:update(self) end smart_terrain.script В начало тела функции se_smart_terrain:register_npc добавить: if obj.no_smart or obj.offline_behavior then return end В начало тела функции se_smart_terrain:task добавить: if obj.offline_targets then return CALifeSmartTerrainTask(obj.offline_targets[2], obj.offline_targets[1]) end Скрытый текст Для использование демонстрационной версии добавте(с переименованием в gamedata)/адаптируйте папку gamedata_for_test из данного репозитория с папкой gamedata вашей игры Зов Припяти. Зайдите в игру, выйдите в меню и нажмите u, вернитесь в игру - в игре заспавнится НПС имеющий зеленую метку. Нажимая в меню кнопку u данный НПС будет перемещаться в оффлайн/онлайн по порядку. Переведя НПС в оффлайн можно наблюдать за меткой НПС как он перемещается в оффлайне. Конфигурационный файл с логикой НПС находится в gamedata/configs/scripts/mytest.ltx Примечание: Схема активируется и парсится при каждом переходе НПС в оффлайн. При переходе НПС в онлайн схема отключается. Ссылки: GitHub Изменено 26 Мая 2020 пользователем Graff46 2 Поделиться этим сообщением Ссылка на сообщение