1-но событие для функций или несколько событий для каж.функции?

Одно событие для нескольких вызовов функций или для каждой отдельной функции своё событие короче как в GUI.
Пример:
================================= 1) Метод
Условие "НЕСКОЛЬКО ФУНКЦИЙ"
If GetSpellAbilityId == A000 then
call первая функция
endif
if GetSpellAbilityUnitId == A001 then
call вторая функция
endif
if GetSpellAbilityUnitId == A002 then
call третья функция
endif
И так бесконечно вызвать.
return false
Событие
UNIT_CASTER_EVENT_SPELL_EFFECT
Вызывает условие "НЕСКОЛЬКО ФУНКЦИЙ"
===================================== 2) Метод
Условие "ОДНА ФУНКЦИЯ"
If GetSpellAbilityId == A000 then
call первая функция
endif
return false
Событие
UNIT_CASTER_EVENT_SPELL_EFFECT
Вызывает одно условие для одной функции "ОДНА ФУНКЦИЯ"
=======================================================
Из этих двоих методов какой подойдет для стабильной игры в сети друзьями не вызывая торможения

Ответ

quq_CCCP:
jass_dev, Делается не так, уже обсуждали - триггер со всеми возможными событиями и екзекутом функции из базы данных, функция находится по ID. не быстрее чем по 1 триггеру на кадую способность, но экономит оперативку и гораздо удобнее.
можно ссылку на обсуждение?


Views: 126

SomeFire #1 - 3 months ago -1
Голосов: +0 / -1
Посмотри, как сделано в дотке.
jass_dev #2 - 3 months ago 0
Голосов: +0 / -0
Торможения будут зависеть от количества таких скилов, если их мало, то особой разницы не будет. Первый способ более производительней чем второй. В первом у тебя вызывается одна функция (условие) для всех ифов, а во втором для каждого ифа вызывается функция (условие).
Но если тебе важна производительность, то тебе не стоит использовать столбы ифов вовсе. Я бы рекомендовал сделать хеш-таблицу, где в качестве основного ключа выступал бы ИД способности. Ты бы сохранял туда триггеры без событий, но с функциями которые нужно выполнить при использовании способности. А потом, в одном триггере с событием UNIT_CASTER_EVENT_SPELL_EFFECT ты доставал по ИД способности нужный триггер и выполнял его. Если у тебя нет стандартных способностей и все ИД ровные 'A000', 'A021'... Можно сделать еще производительней, сохраняя нужный триггер не в хеш-таблицу, а в массив.В таком случае, индекс в массиве для нужной способности будет равен ID - 'A000'.
Nikolay36 #3 - 3 months ago 0
Голосов: +0 / -0
jass_dev, да у меня нет стандартных способностей по ИД есть только 'A000; и дальше. Массив способностей как сделать.?
Borodach #4 - 3 months ago 0
Голосов: +0 / -0
Есть еще способ, функция call ExecuteFunc( конвертация имени способности в строку). А все способности назвать по вызываемой функции.
Плюс - удобно, просто
Минусы - вроде как, немного медленей. С другими минусами не знаком
jass_dev #5 - 3 months ago (изм. ) 0
Голосов: +0 / -0
Nikolay36:
jass_dev, да у меня нет стандартных способностей по ИД есть только 'A000; и дальше. Массив способностей как сделать.?
  1. Создайте масив триггеров
  2. Для каждой способности создайте триггер без событий, но с действием которое нужно выполнить во время каста способности.
  3. Во время инициализации карты, добавьте в массив все такие триггеры, вписав в индекс [Ид способности] - 'A000'.
  1. Создайте триггер с событием UNIT_CASTER_EVENT_SPELL_EFFECT. И в нём запускайте тот триггер, который лежит в массиве по индексу [Ид использованной способности] - 'A000'
quq_CCCP #6 - 3 months ago 0
Голосов: +0 / -0
jass_dev, Делается не так, уже обсуждали - триггер со всеми возможными событиями и екзекутом функции из базы данных, функция находится по ID. не быстрее чем по 1 триггеру на кадую способность, но экономит оперативку и гораздо удобнее.