function Trig_Opening_Streams_unit_Actions takes nothing returns nothing
local timer tu = GetExpiredTimer()
local integer ht = GetHandleId(tu)
local unit pilot = LoadUnitHandle(udg_hash,ht,1)
local real dist = LoadReal(udg_hash,ht,2)
local real speed = LoadReal(udg_hash,ht,3)
local real angleu = LoadReal(udg_hash,ht,4)
local real waitu = LoadReal(udg_hash,ht,5)
local real waitucheck = LoadReal(udg_hash,ht,6)
local unit caster = LoadUnitHandle(udg_hash,ht,7)
local real x = GetUnitX(pilot) + speed * Cos(angleu * bj_DEGTORAD)
local real y = GetUnitY(pilot) + speed * Sin(angleu * bj_DEGTORAD)
if waitu>0 then
set waitu = waitu-1
call SaveReal(udg_hash,ht,5,waitu)
if IsTerrainPathable(x,y,PATHING_TYPE_FLYABILITY)==false then
//call SetUnitPosition(pilot,x,y)
call SetUnitX(pilot,x)
call SetUnitY(pilot,y)
endif
call UnitDamageTarget(caster,pilot,(1.2 * GetUnitAbilityLevel(caster,'A006')),false,false,ATTACK_TYPE_NORMAL, DAMAGE_TYPE_NORMAL,WEAPON_TYPE_WHOKNOWS)
if waitu<= waitucheck then
call AddSpecialEffectTarget("Abilities\\Spells\\Other\\CrushingWave\\CrushingWaveDamage.mdl",pilot,"chest")
call SetUnitFlyHeight(pilot,0,2*(dist+50))
endif
else
call UnitDamageTarget(caster,pilot,(15.00 * GetUnitAbilityLevel(caster,'A006')),false,false,ATTACK_TYPE_NORMAL, DAMAGE_TYPE_NORMAL,WEAPON_TYPE_WHOKNOWS)
call AddSpecialEffectTarget("Objects\\Spawnmodels\\Human\\HumanBlood\\HumanBloodFootman.mdl",pilot,"origin")
call SetUnitPathing(pilot,true)
call FlushChildHashtable(udg_hash,ht)
call DestroyTimer(tu)
endif
set tu = null
set pilot = null
set caster = null
endfunction
function Trig_Opening_Streams_periodic_Actions takes nothing returns nothing
local timer tper = GetExpiredTimer()
local integer hper = GetHandleId(tper)
local unit caster = LoadUnitHandle(udg_hash,hper,1)
local real xloc = LoadReal(udg_hash,hper,2)
local real yloc = LoadReal(udg_hash,hper,3)
local integer wait = LoadInteger(udg_hash,hper,4)
local real angle = 10.00*wait//10.00*25=250
local unit array water
local integer lop = 1
local real x
local real y
local timer tu
local integer ht
local group g
local unit Picked
local real dist
local real angleu
local real speed
local real waitu
if wait < 50 then
loop
exitwhen lop > 36
set x = xloc + (350.00-(wait*5.00)) * Cos(angle * bj_DEGTORAD)
set y = yloc + (350.00-(wait*5.00)) * Sin(angle * bj_DEGTORAD)
if IsTerrainPathable(x,y,PATHING_TYPE_FLYABILITY)==false then
set water[lop] = LoadUnitHandle(udg_hash,hper,5+lop)
call SetUnitPosition(water[lop],x,y)
endif
set angle = angle + 10.00
set lop = lop + 1
set water[lop] = null
endloop
set wait = wait+1
call SaveInteger(udg_hash,hper,4,wait)
else
set angle = 72.00
loop
set lop = lop + 1
exitwhen lop>6
set x = xloc + 125.00 * Cos(angle * bj_DEGTORAD)
set y = yloc + 125.00 * Sin(angle * bj_DEGTORAD)
call AddSpecialEffect("Objects\\Spawnmodels\\Naga\\NagaDeath\\NagaDeath.mdl",x,y)
call AddSpecialEffect("war3mapImported\\AquaSpike.mdx",x,y)
set angle = angle + 72.00
endloop
set lop = 1
loop
exitwhen lop > 36
set water[lop] = LoadUnitHandle(udg_hash,hper,5+lop)
call DestroyEffect(LoadEffectHandle(udg_hash,GetHandleId(water[lop]),1))
call FlushChildHashtable(udg_hash,GetHandleId(water[lop]))
call KillUnit(water[lop])
set water[lop] = null
set lop = lop + 1
endloop
set g = CreateGroup()
call GroupEnumUnitsInRange(g,xloc,yloc,350.00,null)
loop
set Picked = FirstOfGroup(g)
exitwhen Picked == null
if IsUnitEnemy(Picked,GetOwningPlayer(caster)) and GetUnitState(Picked, UNIT_STATE_LIFE) > 0.00 and IsUnitType(Picked, UNIT_TYPE_STRUCTURE) == false and IsUnitType(Picked, UNIT_TYPE_GROUND) == true then
set tu = CreateTimer()
set ht = GetHandleId(tu)
call UnitAddAbility(Picked, 'Amrf')
call UnitRemoveAbility(Picked, 'Amrf')
call SetUnitPathing(Picked,false)
set dist = 300.00-(SquareRoot((GetUnitX(Picked) - xloc) * (GetUnitX(Picked) - xloc) + (GetUnitY(Picked) - yloc) * (GetUnitY(Picked) - yloc)))//300-distance between unit and loc
set speed = (2*dist)/40.0 + 3.125
set angleu = bj_RADTODEG * Atan2(GetUnitY(Picked) - yloc, GetUnitX(Picked) - xloc)
set waitu = ((2*dist)+50.00)/speed
call SetUnitFlyHeight(Picked,dist+50,2*(dist+50))
call SaveUnitHandle(udg_hash,ht,1,Picked)
call SaveReal(udg_hash,ht,2,dist)
call SaveReal(udg_hash,ht,3,speed)
call SaveReal(udg_hash,ht,4,angleu)
call SaveReal(udg_hash,ht,5,waitu)
call SaveReal(udg_hash,ht,6,(waitu/2))
call DisplayTextToForce(GetPlayersAll(),I2S(StringHash("Picked")))
call DisplayTextToForce(GetPlayersAll(),I2S(GetHandleId(Picked)))
// call SaveUnitHandle(udg_hash,h,StringHash("caster"),caster)
call SaveUnitHandle(udg_hash,ht,7,caster)
call UnitDamageTarget(caster,Picked,(15.00 * GetUnitAbilityLevel(caster,'A006')),false,false,ATTACK_TYPE_NORMAL, DAMAGE_TYPE_NORMAL,WEAPON_TYPE_WHOKNOWS)
call AddSpecialEffectTarget("Abilities\\Spells\\Other\\CrushingWave\\CrushingWaveDamage.mdl",Picked,"chest")
call TimerStart(tu,0.025,true,function Trig_Opening_Streams_unit_Actions)
set tu = null
endif
call GroupRemoveUnit(g,Picked)
endloop
call FlushChildHashtable(udg_hash,hper)
call DestroyTimer(tper)
endif
set wait = wait+1
call SaveInteger(udg_hash,hper,4,wait)
call DestroyGroup(g)
set g = null
set Picked = null
set tper = null
set caster = null
endfunction
function Trig_Opening_Streams_Actions takes nothing returns nothing
local unit caster = GetSpellAbilityUnit()
local player p = GetOwningPlayer(caster)
local location loc = GetSpellTargetLoc()
local real xloc = GetLocationX(loc)
local real yloc = GetLocationY(loc)
local real angle = 0.00
local integer wait = 0//to 25
local unit array water
local integer lop = 1
local real x
local real y
local timer tper = CreateTimer()
local integer hper = GetHandleId(tper)
loop
exitwhen lop > 36
set x = xloc + 350.00 * Cos(angle * bj_DEGTORAD)
set y = yloc + 350.00 * Sin(angle * bj_DEGTORAD)
if IsTerrainPathable(x,y,PATHING_TYPE_FLYABILITY)==false then
set water[lop] = CreateUnit(p,'h00C',x,y,0.00)
call SaveUnitHandle(udg_hash,hper,5+lop,water[lop])
call AddSpecialEffectTarget("war3mapImported\\s_WateryAura.mdx",water[lop],"chest")
call SaveEffectHandle(udg_hash,GetHandleId(water[lop]),1,bj_lastCreatedEffect)
endif
set angle = angle + 10.00
set lop = lop + 1
set water[lop] = null
endloop
call SaveUnitHandle(udg_hash,hper,1,caster)
call SaveReal(udg_hash,hper,2,xloc)
call SaveReal(udg_hash,hper,3,yloc)
call SaveInteger(udg_hash,hper,4,wait)
call TimerStart(tper,0.04,true,function Trig_Opening_Streams_periodic_Actions)
set caster = null
set p = null
call RemoveLocation(loc)
set loc = null
set tper = null
endfunction
function Trig_Opening_Streams_Conditions takes nothing returns boolean
return GetSpellAbilityId() == 'A006'//rawcode
endfunction
//===========================================================================
function InitTrig_Opening_Streams takes nothing returns nothing
local integer index = 0
set gg_trg_Opening_Streams = CreateTrigger( )
loop
call TriggerRegisterPlayerUnitEvent(gg_trg_Opening_Streams, Player(index), EVENT_PLAYER_UNIT_SPELL_EFFECT, null)
set index = index + 1
exitwhen index == bj_MAX_PLAYER_SLOTS
endloop
call TriggerAddCondition( gg_trg_Opening_Streams, Condition( function Trig_Opening_Streams_Conditions ) )
call TriggerAddAction( gg_trg_Opening_Streams, function Trig_Opening_Streams_Actions )
endfunction