function Trig_spell_jass_Conditions takes nothing returns boolean if ( not ( GetSpellAbilityId() == 'AHds' ) ) then return false endif return true endfunction
function Trig_spell_jass_Actions takes nothing returns nothing local location p1 local location p local integer i local timer t set p1 = GetUnitLoc(GetSpellAbilityUnit()) set i = 1 loop exitwhen i > 10 set p = PolarProjectionBJ( p1, 200.00, ( 18.00 * I2R(i) )) call AddSpecialEffectLocBJ( p, "Abilities\\Spells\\Undead\\FrostNova\\FrostNovaTarget.mdl" ) call StartTimerBJ( t, false, 2.00 ) call DestroyEffectBJ( GetLastCreatedEffectBJ() ) set i = i + 1 endloop call RemoveLocation(p1) call RemoveLocation(p) set i = 0 set t = null endfunction
//=========================================================================== function InitTrig_spell_jass takes nothing returns nothing set gg_trg_spell_jass = CreateTrigger( ) call TriggerRegisterAnyUnitEventBJ( gg_trg_spell_jass, EVENT_PLAYER_UNIT_SPELL_EFFECT ) call TriggerAddCondition( gg_trg_spell_jass, Condition( function Trig_spell_jass_Conditions ) ) call TriggerAddAction( gg_trg_spell_jass, function Trig_spell_jass_Actions ) endfunction
Работать, конечно, он работает, но цикл, походу, срабатывает один раз или градусы вообще учитываться не хотят. Ошибка явно во 2 функции, но я что-то не пойму какая. Помогите плиз понять
Сообщение отредактировал Fox3 - Четверг, 24 Февраля 2011, 04:01:50
function Trig_spell_jass_Conditions takes nothing returns boolean if ( not ( GetSpellAbilityId() == 'AHds' ) ) then return false endif return true endfunction
function Trig_spell_jass_Actions takes nothing returns nothing local location p1 = GetUnitLoc(GetSpellAbilityUnit()) local location p local integer i = 1 local timer t = CreateTimer() loop exitwhen i > 10 set p = PolarProjectionBJ( p1, 200.00, ( 18.00 * I2R(i) )) call TimerStart(t,2.00,false,null) call DestroyEffect(AddSpecialEffect("Abilities\\Spells\\Undead\\FrostNova\\FrostNovaTarget.mdl",GetLocationX(p),GetLocationY(p))) call RemoveLocation(p) set i = i + 1 endloop call RemoveLocation(p1) set t = null endfunction
//=========================================================================== function InitTrig_spell_jass takes nothing returns nothing set gg_trg_spell_jass = CreateTrigger( ) call TriggerRegisterAnyUnitEventBJ( gg_trg_spell_jass, EVENT_PLAYER_UNIT_SPELL_EFFECT ) call TriggerAddCondition( gg_trg_spell_jass, Condition( function Trig_spell_jass_Conditions ) ) call TriggerAddAction( gg_trg_spell_jass, function Trig_spell_jass_Actions ) endfunction
function Trig_spell_jass_Actions takes nothing returns nothing local real x = GetWidgetX(GetSpellAbilityUnit()) local real y = GetWidgetY(GetSpellAbilityUnit()) local integer i = 1 local timer t = CreateTimer() loop exitwhen i > 10 call TimerStart(t,2.00,false,null) call DestroyEffect(AddSpecialEffect("Abilities\\Spells\\Undead\\FrostNova\\FrostNovaTarget.mdl",x + 200 * Cos((18.00 * I2R(i)) * .0174532),y + 200 * Sin((18.00 * I2R(i)) * .0174532))) set i = i + 1 endloop set t = null endfunction
//=========================================================================== function InitTrig_spell_jass takes nothing returns nothing local trigger trig = CreateTrigger( ) local integer index set index = 0 loop call TriggerRegisterPlayerUnitEvent(trig, Player(index), EVENT_PLAYER_UNIT_SPELL_EFFECT, function jass_filter) set index = index + 1 exitwhen index == 11 endloop trig = null endfunction
По быстрому тут набросал оптимиз. Где то раз в 10 быстрее должно работать=)
О нас думают плохо лишь те, кто хуже нас, а те кто лучше нас... Им просто не до нас. My Project: Nindogatari MAL
Сообщение отредактировал Faion - Четверг, 24 Февраля 2011, 15:16:52
call TriggerRegisterPlayerUnitEvent(trig, Player(index), EVENT_PLAYER_UNIT_SPELL_EFFECT, function jass_filter)
Condition(function jass_filter). Но это будет вызываться 12 раз, так что, по-моему, лучше сделать TriggerAddCondition. А еще ты забыл добавить в триггер действия. =)