Наверное самая быстрая функция по касту "тригерных" магий

Добавлен , опубликован
Алгоритмы, Наработки и Способности
Способ реализации:
Jass
Тип:
Алгоритм
Ловите, наверное самая быстрая функция по касту "тригерных" магий =)
(По скорости быстрее чем 20 обычных проверок GetSpellAbilityId()=='SPELL ID')
СабСтринг для того чтобы не "тригерные" магии не отлавливал (для нешаряших или недопонявщих.)

function SpellCast takes nothing returns boolean
local string s=GetObjectName(GetSpellAbilityId())
if SubString(s,StringLength(s)-4,StringLength(s))=="Exec" then
 call ExecuteFunc(s)
endif
return false
endfunction

function InitTrig_Spell_Cast takes nothing returns nothing
local trigger t=CreateTrigger()
call TriggerAddCondition(t,Condition(function SpellCast))
call TriggerRegisterPlayerUnitEvent(t,Player(0x00),EVENT_PLAYER_UNIT_SPELL_CAST,null)
call TriggerRegisterPlayerUnitEvent(t,Player(0x01),EVENT_PLAYER_UNIT_SPELL_CAST,null)
call TriggerRegisterPlayerUnitEvent(t,Player(0x02),EVENT_PLAYER_UNIT_SPELL_CAST,null)
call TriggerRegisterPlayerUnitEvent(t,Player(0x03),EVENT_PLAYER_UNIT_SPELL_CAST,null)
call TriggerRegisterPlayerUnitEvent(t,Player(0x04),EVENT_PLAYER_UNIT_SPELL_CAST,null)
call TriggerRegisterPlayerUnitEvent(t,Player(0x05),EVENT_PLAYER_UNIT_SPELL_CAST,null)
call TriggerRegisterPlayerUnitEvent(t,Player(0x06),EVENT_PLAYER_UNIT_SPELL_CAST,null)
call TriggerRegisterPlayerUnitEvent(t,Player(0x07),EVENT_PLAYER_UNIT_SPELL_CAST,null)
call TriggerRegisterPlayerUnitEvent(t,Player(0x08),EVENT_PLAYER_UNIT_SPELL_CAST,null)
call TriggerRegisterPlayerUnitEvent(t,Player(0x09),EVENT_PLAYER_UNIT_SPELL_CAST,null)
call TriggerRegisterPlayerUnitEvent(t,Player(0x0A),EVENT_PLAYER_UNIT_SPELL_CAST,null)
call TriggerRegisterPlayerUnitEvent(t,Player(0x0B),EVENT_PLAYER_UNIT_SPELL_CAST,null)
call TriggerRegisterPlayerUnitEvent(t,Player(0x0C),EVENT_PLAYER_UNIT_SPELL_CAST,null)
call TriggerRegisterPlayerUnitEvent(t,Player(0x0D),EVENT_PLAYER_UNIT_SPELL_CAST,null)
call TriggerRegisterPlayerUnitEvent(t,Player(0x0E),EVENT_PLAYER_UNIT_SPELL_CAST,null)
call TriggerRegisterPlayerUnitEvent(t,Player(0x0F),EVENT_PLAYER_UNIT_SPELL_CAST,null)
set t=null
endfunction
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
5
24
12 лет назад
Отредактирован Faion
5
Единственное что-бы добавил.
globals
trigger tgm=null
string sgm=""
endglobals
И заменил бы локальные вот этими переменными.
Нафига? Ты собрался ингейм отключать этот триггер? Или может обращаться? К эвент строке? Если нет, то правильнее юзать локалки в обоих случаях, т.к. строка в вц3 != объект, по этому темповую глобалку можно не создавать.
0
14
12 лет назад
0
что вы понимаете под не "триггерные"?
нестандартные чтоле?
0
15
12 лет назад
0
что вы понимаете под не "триггерные"?
Те заклинания, для которых не созданы функции/триггеры.
0
14
12 лет назад
0
зачем отсеивать эти заклинания, если эта функция предполагает создание общей библиотеки для них всех?
0
15
12 лет назад
0
Temak1, Мда.
Допустим, у тебя есть 10 спеллов. 7 из них сделаны через триггеры, а 3 полностью стандартные. Чтобы не вызывались те спеллы которых нет и нужен фильтр.
9
27
11 лет назад
9
операции со строками нифига не быстрые, ложь и провокация, самый быстрый метод работает на кондишинах и хеш таблице.
0
24
11 лет назад
0
DioD, прав.
0
5
8 лет назад
0
DioD, Т.е. вместо строк использовать хеш таблицу в кондишине?
0
22
4 года назад
0
Эмм, всё что написано в этом топике, я так понимаю, чушь собачья? =\
Во-первых, если мы делаем способность "триггерной", то мы уже в любом случае создаём отдельную способность с новым ID пусть там будет хоть 'A000' хоть 'A0V4' и т.д., так нахрена нам в названии дописывать ещё какой-то EXEC чтобы потом типа понять что способность для триггера? )
А во вторых, неужели, сравнить два integer медленнее, чем высчитывать через substring чё-то там в названии способности
По скорости быстрее чем 20 обычных проверок GetSpellAbilityId()=='SPELL ID'
а ну да, получается, за то время как успеет сделаться эта проверка на EXEC, уже успеют сделаться 20 проверок по Spell ID
Тогда вопрос, на кой вообще надо всё то, что тут описано? ) угар
Увидев данную тему очень стало интересно, шо ж там такое, а когда увидел, мне это показалось диким бредом. Мб я в чём-то не прав?
0
32
4 года назад
0
Proshel_Doty, кэп курит в сторонке.
Если интересно как в 1 триггере сделать все спеллы - могу показать как.
0
32
4 года назад
0
Всякий раз когда говорят слово быстрее, я хочу знать на сколько, если на такая функция быстрее даже на 0.1 на 10 тысячах вызовов это не быстрее, и грош ему цена, можно просто назвать другой способ, и все претензий нет, тогда все классно

После этого топика была попытка показать какая функция быстрее, но разницы были просто смешными

Что это вообще значит "быстрее", карта с 1000 отдельных триггеров на каст, будет мгновенно кастовать способности, точно так же мгновенно 1000 ифов в одном триггере, мгновенно бд и мгновенно этот способ. И карт свыше этого значения по пальцам пересчитать
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.