Перейти к содержимому

IXR Framework (LUA Фреймворк)

IMPORTANT

Статус: Поддерживается
Минимальная версия: 1.4.0

Модуль триггеров IXR TRIGGERS

Модуль позволяющий установить на локации сферическую скриптовую зону триггера которая будет реагировать установленным в неё скриптовым методом на вхождение НПЦ Монстров или ГГ в область действия зоны (может быть использовано для сюжетных ветвлений где требуется отследить попадание алайф обьектов в какую то область на локации) служит облегченной версией спейс рестрикторов.

Работает только на обьектах находящихся в онлайне.

Зона триггера записывается в сохранении игры.

lua
--// Создать триггер (скорость опроса тригера 100мс реагирует на вхождение в область НПЦ или ГГ или Монстров)
TriggerCreate(trigger_name, trigger_level_name, trigger_center_position, trigger_radius, callable_fn)
args: 
  trigger_name (string)(required) - уникальное имя триггера.
  trigger_level_name (string)(required) - имя уровня (карты).
  trigger_center_position (vector)(required) - центральная позиция триггера.
  trigger_radius (int)(required) - радиус триггерной зоны.
  callable_fn (function)(required) - функция обратного вызова (ожидается возвращаемое boolean значение в случае true тригер будет остановлен и удален, в случае false регистрация событий будет продолжаться).
  
closure(callable_fn): - аргументы функция обратного вызова.
  Функция `callable_fn` вызывается при событиях в триггерной зоне с аргументами:
  - level_name (string): имя уровня
  - trigger_name (string): имя триггера
  - trigger_center (vector): центр триггера
  - trigger_radius (int): радиус триггера
  - game_object_entity (entity): объект, вызвавший событие
  - contact_position (vector): позиция контакта
  - is_inside (bool): объект вошел в зону
  - in_zone (bool): объект находится в зоне
  - is_outside (bool): объект вышел из зоны
  - source (string): тип объекта (monster|npc|actor)

retval: (bool) - успешность создания триггера.

--// Проверить существование триггера
TriggerExists(trigger_name)
args:
  trigger_name (string)(required) - имя триггера.
retval: (bool) - существует ли триггер.

--// Удалить триггер
TriggerRemove(trigger_name)
args:
  trigger_name (string)(required) - имя триггера.
retval: (bool) - успешность удаления.

Примеры:

lua

--// выставляем ожидание события новой игры
function on_game_start(callbackRegistrator)
	RegisterScriptCallback("new_game_created", this.on_new_game_started)
end

function on_new_game_started()
  --// Создаем триггер радиусом 5 метров для локации кордон (делать это достаточно 1 раз например в момент начала новой игры т.к триггеры сохраняются в сейв игры и не требуют постоянного повторого обьявления)
  TriggerCreate(
    "test-trg", 
    "l01_escape", 
    vector():set(-92, 0.67176, 677), 
    5.0, 
    function (level_name, trigger_name, trigger_center, trigger_radius, game_object_entity, contact_position, is_inside, in_zone, is_outside, source)
      ...
    end
  )

--// прочие триггеры далее
end

--// Проверить существование триггера
if TriggerExists("test-trg") then
  ...
end

--// Удалить триггер
if TriggerRemove("test-trg") then
  ...
end

Опубликовано под лицензией MIT.