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

Добавлен , опубликован
Алгоритмы, Наработки и Способности
Способ реализации:
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
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
0
23
4 года назад
0
prog, Интересно, что вернет GetObjectName в рефорже в луа и на разных локалях...
Ну вернет по локализации да. Если нестандартный то надо добавлять строку для локализации

посколько у дефолотные все переведены локали а нестандартные нет
0
16
4 года назад
0
Bergi_Bear:
Всякий раз когда говорят слово быстрее, я хочу знать на сколько, если на такая функция быстрее даже на 0.1 на 10 тысячах вызовов это не быстрее, и грош ему цена, можно просто назвать другой способ, и все претензий нет, тогда все классно
так нужно сперва иметь что-то для подсчета времени, а этого у простых крестьян нет ни в каком виде)
0
32
4 года назад
0
DracoL1ch, недавно простенький вариант в мемхак завезли, позволяет померится попугаями, на тему какая функция выполняется дольше.
0
32
4 года назад
Отредактирован Берги
0
DracoL1ch, в качестве бенчмарка можно просто использовать игру в которой так сделано, и в которой ничего не тормозит, я думаю этого достаточно, у вас на мемхаке есть тесты у нас "были" на луа, доказано что отличия есть, но слишком мизерные
0
16
4 года назад
0
мизерное мизерному рознь. вот, например, добавил опцию для отключения обновления таблицы. игроку она не нужна, а у меня реплей на 50 минут мотается теперь 6 минут вместо семи. А в абсолютном значении всего 6% ускорения за счет лишнего if .
Оптимизация вредна лишь тогда, когда она преждевременна.
0
32
4 года назад
0
DracoL1ch, вот наконец-то слова похожие на правду и подкреплённые каким либо значением в 6% а не просто это метафорическое "быстрее"
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.