Когда триггер устанавливается для какого объекта, то указыватеся идентификатор протатипа этого объекта (предмета, комнаты, моба), события, на которые реагирует триггер и процедура обработки.
Код:
g_trgMng.LoadMobTrigger(STORE_MAN_MOB_ID, MTRG_INCOMING_LEADER | MTRG_SPEAK | MTRG_GIVE_OBJ, MobTrigger_StoreMan);
Здесь:
STORE_MAN_MOB_ID - идентификатор протатипа моба (определяется в разделе с константами).
MTRG_INCOMING_LEADER | MTRG_SPEAK | MTRG_GIVE_OBJ - события, на которые происходит реакция
- MTRG_INCOMING_LEADER - в комнату вошел чар (один или за ним кто-то следует)
- MTRG_SPEAK - персонаж в комнате говорит
- MTRG_GIVE_OBJ - мобу дали предмет
MobTrigger_StoreMan - процедура обработки триггера.
Процедура обработки строиться по следующей схеме:
Код:
int MobTrigger_StoreMan(CMobTriggerData* data) {
if (data->m_type == MTRG_INCOMING_LEADER) {
CIncomingLeaderMobTriggerData* _data = (CIncomingLeaderMobTriggerData*) data;
// Обработка события
}
if (data->m_type == MTRG_SPEAK) {
CSpeakMobTriggerData* _data = (CSpeakMobTriggerData*) data;
// Обработка события
}
if (data->m_type == MTRG_GIVE_OBJ) {
CGiveObjMobTriggerData* _data = (CGiveObjMobTriggerData*) data;
// Обработка события
}
delete data;
return 0;
}
Как видно в примере данные приводятся к типу дынных конкретного события. Корректность передаваемых данных гарантируется кодом, передающим эти данные. Здесь можно использовать и более современные средства языка для приведения типов, опытные люди меня поймут, а новичкам хватит и такого "школьного" подхода.
Триггер должен удалять структуру данных события по окончании работы с ней. Исключение составляют некоторые события (например, вход в портал), они описаны в файле kernel/system/TriggerMng.h
Советую внимательно просмотреть этот файл, что бы узнать весь доступный арсенал событий для обработки.