//TESH.scrollpos=95
//TESH.alwaysfold=0
//!==========================================================//
// Функция каст спелла
//!==========================================================//
define TRE (trig,whichEvent) = {
TriggerRegisterPlayerUnitEvent(trig, Player(0), whichEvent, null)
TriggerRegisterPlayerUnitEvent(trig, Player(1), whichEvent, null)
TriggerRegisterPlayerUnitEvent(trig, Player(2), whichEvent, null)
TriggerRegisterPlayerUnitEvent(trig, Player(3), whichEvent, null)
TriggerRegisterPlayerUnitEvent(trig, Player(4), whichEvent, null)
TriggerRegisterPlayerUnitEvent(trig, Player(5), whichEvent, null)
TriggerRegisterPlayerUnitEvent(trig, Player(6), whichEvent, null)
TriggerRegisterPlayerUnitEvent(trig, Player(7), whichEvent, null)
TriggerRegisterPlayerUnitEvent(trig, Player(8), whichEvent, null)
TriggerRegisterPlayerUnitEvent(trig, Player(9), whichEvent, null)
TriggerRegisterPlayerUnitEvent(trig, Player(10), whichEvent, null)
TriggerRegisterPlayerUnitEvent(trig, Player(11), whichEvent, null)
TriggerRegisterPlayerUnitEvent(trig, Player(12), whichEvent, null)
TriggerRegisterPlayerUnitEvent(trig, Player(15), whichEvent, null)
}
//!==========================================================//
// Фильтрация отряда
//!==========================================================//
function UnitCheck takes unit caster, unit u returns boolean
return IsUnitEnemy(u, GetOwningPlayer(caster)) and not (IsUnitType(u, UNIT_TYPE_DEAD) and GetUnitTypeId(u) != 0) and IsUnitType(u, UNIT_TYPE_GROUND) and not IsUnitType(u, UNIT_TYPE_STRUCTURE)
endfunction
//!==========================================================//
// Уничтожение деревьев
//!==========================================================//
function KillTrees takes nothing returns nothing
call KillDestructable(GetEnumDestructable())
endfunction
//!====================================================================================
// Rect
//!====================================================================================
function PS_KillTrees takes real x, real y, real radius returns nothing
local rect r=Rect(x-radius,y-radius,x+radius,y+radius)
call EnumDestructablesInRect(r,null,function KillTrees)
call RemoveRect(r)
set r=null
endfunction
//!====================================================================================
// Terrain
//!====================================================================================
function TerrainDeformationCrater takes real duration, boolean permanent, real x,real y, real radius, real depth returns terraindeformation
set bj_lastCreatedTerrainDeformation = TerrainDeformCrater(x, y, radius, depth, R2I(duration * 1000), permanent)
return bj_lastCreatedTerrainDeformation
endfunction
//!====================================================================================================================
// Звук
//!====================================================================================================================
function PlaySoundTheme takes sound soundHandle returns nothing
set bj_lastPlayedSound = soundHandle
if (soundHandle != null) then
call StartSound(soundHandle)
endif
set soundHandle=null
endfunction
//!====================================================================================
// Плавающий Текст (Общий)
//!====================================================================================
function TT_delete takes nothing returns boolean
local trigger FT = GetTriggeringTrigger()
local texttag tt = LoadTextTagHandle(HT,GetHandleId(FT),1)
call DestroyTextTag(tt)
set tt = null
call FlushChildHashtable(HT,GetHandleId(FT))
call DestroyTrigger(FT)
return false
endfunction
function FlyText takes string s,real t, real x, real y, integer R, integer G, integer B, integer C returns nothing
local texttag tt = CreateTextTag()
local trigger FadeTime
call SetTextTagText(tt,s, t)
call SetTextTagPos(tt, x, y ,9)
call SetTextTagColor(tt, R , G , B , C)
call SetTextTagVelocity(tt,0,0.0455)
call SetTextTagVisibility(tt, true)
call SetTextTagFadepoint(tt,0)
call SetTextTagLifespan(tt,2)
call SetTextTagPermanent(tt, false)
set FadeTime = CreateTrigger()
call TriggerRegisterTimerEvent(FadeTime,2., false)
call TriggerAddCondition(FadeTime, Condition(function TT_delete))
call SaveTextTagHandle(HT,GetHandleId(FadeTime),1,tt)
set FadeTime = null
set tt=null
set s = null
endfunction
//!====================================================================================================================
// Каст Спеллов На юнита.
//!====================================================================================================================
function Cast_on_unit_spell takes integer id, integer lvl, string order,unit caster, unit target returns nothing
local unit d
set d = CreateUnit(GetOwningPlayer(caster),'u000',GetUnitX(target),GetUnitY(target),GetUnitFacing(target) - 180.)
call UnitAddAbility(d,id)
call SetUnitAbilityLevel(d,id,GetUnitAbilityLevel(caster, lvl))
call IssueTargetOrder(d,order,target)
call UnitRemoveAbility(d,id)
call RemoveUnit(d)
set d = null
set caster = null
set target = null
endfunction
//!====================================================================================================================
// Target Knockback by Lobster_1234
//!====================================================================================================================
function TK_Loop takes nothing returns nothing
local timer t = GetExpiredTimer()
local integer id = GetHandleId(t)
local unit target = LoadUnitHandle(HT,id,103)
local real speed = LoadReal(HT,id,104) - ( 1.)
local real angle = LoadReal(HT,id,105)
local real x = GetUnitX(target)
local real y = GetUnitY(target)
local real x1 = x+speed*Cos(angle*0.0174)
local real y1 = y+speed*Sin(angle*0.0174)
call PS_KillTrees( x, y, 100. )
if speed <5 then
call PauseTimer(t)
call DestroyTimer(t)
call FlushChildHashtable(HT,id)
else
call SetUnitX(target,x1)
call SetUnitY(target,y1)
endif
if IsTerrainPathable(x1, y1, PATHING_TYPE_WALKABILITY) == true then
set speed = 5
endif
call SaveReal(HT,id,104,speed)
set t = null
set target = null
endfunction
function TK takes unit caster,unit target,real speed returns nothing
local timer t = CreateTimer()
local integer id = GetHandleId(t)
local real angle = bj_RADTODEG * Atan2(GetUnitY(target) - GetUnitY(caster), GetUnitX(target) - GetUnitX(caster))
call SaveUnitHandle(HT,id,103,target)
call SaveReal(HT,id,104,speed)
call SaveReal(HT,id,105,angle)
call TimerStart(t,0.02,true,function TK_Loop)
set caster = null
set target = null
endfunction
Name | Type | is_array | initial_value |
HandleBoard | leaderboard | No | |
Z | integer | No |
//TESH.scrollpos=0
//TESH.alwaysfold=0
//!====================================================================================================================
// Массивный Knockback By Lobster_1234
//!====================================================================================================================
function MassiveDamageLoop takes nothing returns nothing
local timer TMR = GetExpiredTimer()
local integer id = GetHandleId(TMR)
local unit i = LoadUnitHandle(HT,id,100)
local real speed = LoadReal(HT,id,101) - ( 0.80 )
local real angle = LoadReal(HT,id,102)
local real x = GetUnitX(i)
local real y = GetUnitY(i)
local real x1 = x+speed*Cos(angle*bj_DEGTORAD)
local real y1 = y+speed*Sin(angle*bj_DEGTORAD)
call PS_KillTrees( x, y, 125. )
if speed < 1 then
call PauseTimer(TMR)
call DestroyTimer(TMR)
call FlushChildHashtable(HT,id)
else
if IsTerrainPathable(x1, y1, PATHING_TYPE_WALKABILITY) == true then
set speed = 0
else
call SetUnitX(i,x1)
call SetUnitY(i,y1)
endif
endif
call SaveReal(HT,id,101,speed)
set TMR = null
set i = null
endfunction
function md takes unit a,real x,real y,real damage,real range,real speed returns nothing
local group gr
local unit i
local real angle
local timer TMR
local integer id
set gr = CreateGroup()
call GroupEnumUnitsInRange(gr, x, y, range, null)
set i = FirstOfGroup(gr);
loop
exitwhen(i == null)
if(IsUnitEnemy(i, GetOwningPlayer(a))) and UnitCheck(a, i) then
set TMR = CreateTimer();
set id = GetHandleId(TMR)
set angle = bj_RADTODEG * Atan2(GetUnitY(i) - y, GetUnitX(i) - x)
call UnitDamageTarget(a,i,damage,false,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_MAGIC,null)
call SaveUnitHandle(HT,id,100,i)
call SaveReal(HT,id,101,speed)
call SaveReal(HT,id,102,angle)
call TimerStart(TMR,0.02,true,function MassiveDamageLoop)
set TMR = null
endif
call GroupRemoveUnit(gr, i);
set i = FirstOfGroup(gr);
endloop
call DestroyGroup(gr);
set a = null
set i = null
set gr = null
endfunction
//TESH.scrollpos=0
//TESH.alwaysfold=0
function HandleCounter_Update takes nothing returns nothing
local integer i = 0
local integer id
local location array P
local real result=0
loop
exitwhen i >= 50
set i = i + 1
set P[i] = Location(0,0)
set id = GetHandleId(P[i])
set result = result + (id-0x100000)
endloop
set result = result/i-i/2
loop
call RemoveLocation(P[i])
set P[i] = null
exitwhen i <= 1
set i = i - 1
endloop
call LeaderboardSetItemValue(udg_HandleBoard,0,R2I(result))
endfunction
function HandleCounter_Actions takes nothing returns nothing
set udg_HandleBoard = CreateLeaderboard()
call LeaderboardSetLabel(udg_HandleBoard, "Handle Counter")
call PlayerSetLeaderboard(GetLocalPlayer(),udg_HandleBoard)
call LeaderboardDisplay(udg_HandleBoard,true)
call LeaderboardAddItem(udg_HandleBoard,"Handles",0,Player(0))
call LeaderboardSetSizeByItemCount(udg_HandleBoard,1)
call HandleCounter_Update()
call TimerStart(GetExpiredTimer(),0.01,true,function HandleCounter_Update)
endfunction
function InitTrig_HandleCounter takes nothing returns nothing
call TimerStart(CreateTimer(),0,false,function HandleCounter_Actions)
endfunction
//TESH.scrollpos=0
//TESH.alwaysfold=0
function Loop_3 takes nothing returns nothing
local unit b = GetEnumUnit()
call DestroyEffect(AddSpecialEffect("Abilities\\Spells\\Undead\\FrostNova\\FrostNovaTarget.mdl", GetUnitX(b), GetUnitY(b)))
call TerrainDeformationCrater(0.15,false,GetUnitX(b),GetUnitY(b),215,80)
call RemoveUnit(b)
set b = null
endfunction
function Led_Loop takes nothing returns nothing
local timer t = GetExpiredTimer()
local integer id = GetHandleId(t)
local unit b = GetEnumUnit()
local real x1 = GetUnitX(b)
local real y1 = GetUnitY(b)
call SetUnitX(b,x1-20*Cos(GetUnitFacing(b)*0.0174))
call SetUnitY(b,y1-20*Sin(GetUnitFacing(b)*0.0174))
set t = null
set b = null
endfunction
function Led_Start takes nothing returns nothing
local timer t = GetExpiredTimer()
call ForGroup(Group, function Led_Loop)
set t = null
endfunction
function Trig_Led_Actions takes nothing returns nothing
local unit a = GetTriggerUnit()
local real x = GetSpellTargetX()
local real y = GetSpellTargetY()
local unit k
local real damage = 100
local timer t = CreateTimer()
local integer id = GetHandleId(t)
local real d
local integer i
local unit b
set i = 1
loop
exitwhen i > 15
set b = CreateUnit(GetOwningPlayer(a),'h001',x+800*Cos((i*24)*bj_DEGTORAD),y+800*Sin((i*24)*bj_DEGTORAD),i*24)
call GroupAddUnit(Group, b)
set i = i + 1
endloop
call SaveReal(HT,id,1,x)
call SaveReal(HT,id,2,y)
call TimerStart(t,0.0215,true,function Led_Start)
call TriggerSleepAction(1.05)
call PauseTimer(t)
call DestroyTimer(t)
call ForGroup(Group, function Loop_3)
call FlushChildHashtable(HT,id)
call md(a,x,y,damage,450,30)
call PlaySoundTheme(gg_snd_fe_explode1)
call UnitApplyTimedLife(CreateUnit(GetOwningPlayer(a),'h000',x,y,0),'BTLF',1)
set k = CreateUnit(GetOwningPlayer(a),'u000',x,y,0)
call UnitAddAbility(k,'A000')
call IssueImmediateOrder( k, "stomp" )
call UnitApplyTimedLife(k,'BTLF',1)
set a = null
set t = null
set k = null
endfunction
function Trig_Led_Conditions takes nothing returns boolean
return GetSpellAbilityId() == 'A001'
endfunction
//===========================================================================
function InitTrig_Led takes nothing returns nothing
set gg_trg_Led = CreateTrigger( )
call TRE( gg_trg_Led, EVENT_PLAYER_UNIT_SPELL_EFFECT )
call TriggerAddCondition( gg_trg_Led, Condition( function Trig_Led_Conditions ) )
call TriggerAddAction( gg_trg_Led, function Trig_Led_Actions )
endfunction
globals
hashtable HT = InitHashtable()
group Group = CreateGroup()
endglobals
//TESH.scrollpos=15
//TESH.alwaysfold=0
function Arrow_Loop takes nothing returns nothing
local timer t = GetExpiredTimer()
local integer id = GetHandleId(t)
local unit a = LoadUnitHandle(HT,id,0)
local unit b = LoadUnitHandle(HT,id,1)
local real speed = LoadReal(HT,id,2) + ( 1.)
local integer damage = LoadInteger(HT,id,3) + ( 3 )
local real d = LoadReal(HT,id,4)
local group g = CreateGroup()
local unit n
local real x = GetUnitX(b)
local real y = GetUnitY(b)
local real x1 = x+speed*Cos(d*0.0174)
local real y1 = y+speed*Sin(d*0.0174)
call GroupEnumUnitsInRange(g,x,y,90,null)
loop
set n = FirstOfGroup(g)
exitwhen n == null
if IsUnitEnemy(n,GetOwningPlayer(a)) == true and UnitCheck(a, n) then
set speed = 100
call UnitDamageTarget(a,n,damage,false,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_MAGIC,null)
call TK(a,n,40)
call FlyText(I2S(damage)+" !",0.024,GetUnitX(n)+80*Cos(95*bj_DEGTORAD),GetUnitY(n)+80*Sin(80*bj_DEGTORAD),255,0,0,255)
call Cast_on_unit_spell('A003','A002',"slow",a,n)
endif
call GroupRemoveUnit(g,n)
endloop
call DestroyGroup(g)
if speed >75 then
call RemoveUnit(b)
call PauseTimer(t)
call DestroyTimer(t)
call FlushChildHashtable(HT,id)
else
call SetUnitX(b,x1)
call SetUnitY(b,y1)
endif
call SaveReal(HT,id,2,speed)
call SaveInteger(HT,id,3,damage)
set t = null
set a = null
set b = null
set g = null
set n = null
endfunction
function Trig_Arrow_Actions takes nothing returns nothing
local unit a = GetTriggerUnit()
local timer t = CreateTimer()
local integer id = GetHandleId(t)
local real d = bj_RADTODEG * Atan2(GetSpellTargetY() - GetUnitY(a), GetSpellTargetX() - GetUnitX(a))
local unit b = CreateUnit(GetOwningPlayer(a),'h002',GetUnitX(a),GetUnitY(a),d)
call SaveUnitHandle(HT,id,0,a)
call SaveUnitHandle(HT,id,1,b)
call SaveReal(HT,id,2,25)
call SaveInteger(HT,id,3,50)
call SaveReal(HT,id,4,d)
call TimerStart(t,0.02,true,function Arrow_Loop)
set a = null
set t = null
set b = null
endfunction
function Trig_Arrow_Conditions takes nothing returns boolean
return GetSpellAbilityId() == 'A002'
endfunction
//===========================================================================
function InitTrig_Arrow takes nothing returns nothing
set gg_trg_Arrow = CreateTrigger( )
call TRE( gg_trg_Arrow, EVENT_PLAYER_UNIT_SPELL_EFFECT )
call TriggerAddCondition( gg_trg_Arrow, Condition( function Trig_Arrow_Conditions ) )
call TriggerAddAction( gg_trg_Arrow, function Trig_Arrow_Actions )
endfunction