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

[ЗП]Схема поведения НПС в оффлайне


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

Данная система предназначена для управления перемещениями НПС в оффлайне.

Данная схема работает по аналогии с обычными схемами поведения - на системе 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 - целевой левел вертекс, гейм вертекс соответственно.

Не обязательные параметры:

  1. Переключатели обычные - переключают сразу как только возможно.
  2. Переключатели по событиям - срабатывают во время событий;

 

*Эти переключатели подобны 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 обязательных аргумента:

  1. Клиентский объект актора
  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

Изменено пользователем Graff46
Добавлено Graff46,

Возможно тему нужно переместить в мастерскую ЗП

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

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

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

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

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

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

Войти

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

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

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