я тут в свободное время сообразил две абилки. Первую я назвал "Прыжок тигра". Смысл такой - герой (в моем случае мастер клинка) прыгает в указанную точку и наносит всем врагам в этой области урон. Сделать я ее сделал, но работает она коряво - герой двигается не В точку, куда направлен спелл, а В НАПРАВЛЕНИИ этой точки, да вдобавок еще и дергается, когда летит. Может, вы поможете мне довести ее до ума, чтобы герой двигался более плавно и приземлялся там, где надо.
Карта прилагается.
Вторая абилка - "Удар в спину" - герой кидает во врага копье, когда копье долетает, идет проверка, стоит ли враг к герою спиной, если да, то наносит доп. урон. Но мне кажется, что сам код абилки несовершенен - возможен абуз типа - покупаем даггер, пока копье летит, делаем блинк врагу за спину.
Вот сам код
function Trig_Backstab_Conditions takes nothing returns boolean
if ( not ( GetSpellAbilityId() == 'A045' ) ) then
return false
endif
return true
endfunction
function Trig_Backstab_Func001C takes nothing returns boolean
if ( not ( RAbsBJ(( GetUnitFacing(GetSpellTargetUnit()) - GetUnitFacing(GetSpellAbilityUnit()) )) <= 105.00 ) ) then
return false
endif
return true
endfunction
function Trig_Backstab_Actions takes nothing returns nothing
local unit u1=GetSpellTargetUnit()
local unit u2=GetSpellAbilityUnit()
local location x=GetUnitLoc(GetSpellTargetUnit())
local location y=GetUnitLoc(GetSpellAbilityUnit())
local effect e
if ( Trig_Backstab_Func001C() ) then
call PolledWait( ( DistanceBetweenPoints( y , x )) / 950.00 )
call UnitDamageTargetBJ( u2 , u1 , ( 100.00 + ( 75.00 * I2R(GetUnitAbilityLevelSwapped('A045', u2 )) ) ), ATTACK_TYPE_NORMAL, DAMAGE_TYPE_NORMAL )
call AddSpecialEffectTargetUnitBJ( "chest", u1 , "Abilities\\Spells\\Other\\Stampede\\StampedeMissileDeath.mdl" )
set e = GetLastCreatedEffectBJ()
call DestroyEffectBJ( e )
call RemoveLocation ( x )
call RemoveLocation ( y )
set e = null
set x = null
set y = null
set u1 = null
set u2 = null
else
endif
endfunction
//===========================================================================
function InitTrig_Backstab takes nothing returns nothing
set gg_trg_Backstab = CreateTrigger( )
call TriggerRegisterAnyUnitEventBJ( gg_trg_Backstab, EVENT_PLAYER_UNIT_SPELL_EFFECT )
call TriggerAddCondition( gg_trg_Backstab, Condition( function Trig_Backstab_Conditions ) )
call TriggerAddAction( gg_trg_Backstab, function Trig_Backstab_Actions )
endfunction