Здравствуйте! Пытаюсь создать наработку для лёгкого вызова нужных мне триггеров по следующей схеме:
call TriggerExecute(udg_Spell_name)
Конвертации строки (или чего бы то ни был ещё) в триггер я не нашёл.
Есть ли способ осуществить задуманное? А то согласитесь, не очень-то удобно вставлять миллион проверок используемых способностей (ещё и в каждую из них!) для того, чтобы запустить соответствующий каждой из них триггер.
- Юнит применяет способность;
- Имя способности заносится в переменную udg_Spell_name;
- Имени способности соответствует один триггер с аналогичным названием;
- Производится вызов триггера через переменную, хранящую в себе имя триггера (так как оно аналогично имени способности).
call TriggerExecute(udg_Spell_name)
Конвертации строки (или чего бы то ни был ещё) в триггер я не нашёл.
Есть ли способ осуществить задуманное? А то согласитесь, не очень-то удобно вставлять миллион проверок используемых способностей (ещё и в каждую из них!) для того, чтобы запустить соответствующий каждой из них триггер.
Принятый ответ
Потому что у триггеров нет имен.
Создаем массив строк name_array;
Создаем массив триггеров trigger_array;
Создаем инт name_array_index;
Создаем функцию
Создаем массив триггеров trigger_array;
Создаем инт name_array_index;
Создаем функцию
register_trigger(Trigger trigger, string name) {
name_array[name_array_index] = name;
trigger_array[name_array_index] = trigger;
name_array_index = name_array_index + 1;
}
Создаем функцию
name_to_trigger(string name) {
for (integer index = 0; index < name_array_index; index++) {
if name_array[index] == name {
return trigger_array[index];
}
}
}
Затем регистрируем все триггеры через register_trigger.
А после этого думаем, реально ли у нас столько абилок, что простая последовательность if name == "my_ability" then RunTrigger(my_ability) хуже этого решения
А после этого думаем, реально ли у нас столько абилок, что простая последовательность if name == "my_ability" then RunTrigger(my_ability) хуже этого решения
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
Ред. avuremybe
Триггер только через переменную.
Ред. Doc
Создаем массив триггеров trigger_array;
Создаем инт name_array_index;
Создаем функцию
А после этого думаем, реально ли у нас столько абилок, что простая последовательность if name == "my_ability" then RunTrigger(my_ability) хуже этого решения
Потом - есть такая прекрасная штука как ExecuteFunc("Имя функции"), т.к все параметры потока из которой был сделан экзекут наследуются, т.е в вызванной функции будут исправно работать GetTriggerUnit(), GetExpiredTimer() - разумеется если поток запустили соотвествующие события, для юнита какое то событие связанное с юнитом, например применил способность ну с таймером таймер истек, ну и так далее.
Ред. Doc