Ловите, наверное самая быстрая функция по касту "тригерных" магий =)
(По скорости быстрее чем 20 обычных проверок GetSpellAbilityId()=='SPELL ID')
СабСтринг для того чтобы не "тригерные" магии не отлавливал (для нешаряших или недопонявщих.)
(По скорости быстрее чем 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
trigger tgm=null
string sgm=""
endglobals
меня смутило что не триггерные, ведь по большому счету триггерные от стандартов ничем не отличаются. Просто он ловит каст.
call только если функция стоит перед.
Ред. DaeDR
Действительно, все гениальное - просто
Немного удивила вот эта строчка:
Если использовать второй вариант, то название спелла должно выглядеть так: ExecName, иначе NameExec
Ред. Faion
нестандартные чтоле?
Допустим, у тебя есть 10 спеллов. 7 из них сделаны через триггеры, а 3 полностью стандартные. Чтобы не вызывались те спеллы которых нет и нужен фильтр.
Во-первых, если мы делаем способность "триггерной", то мы уже в любом случае создаём отдельную способность с новым ID пусть там будет хоть 'A000' хоть 'A0V4' и т.д., так нахрена нам в названии дописывать ещё какой-то EXEC чтобы потом типа понять что способность для триггера? )
А во вторых, неужели, сравнить два integer медленнее, чем высчитывать через substring чё-то там в названии способности
Тогда вопрос, на кой вообще надо всё то, что тут описано? ) угар
Если интересно как в 1 триггере сделать все спеллы - могу показать как.
Ред. PROSHELDOTU
Bergi_Bear, та тут дело просто в бесполезности этого метода
Ну вернет по локализации да. Если нестандартный то надо добавлять строку для локализации
Ред. Берги