Code:
scope KatonJutsu initialitzer KatonInit
/////////////////Setup///////////////////////////////////////////
globals
private contstant integer SPELL_ID = 'ANcl'
private function Katon_DMG takes integer Katonlevel returns real
return level *50
endfunction
private function Katon_Range takes integer Katonlevel returns real
return level *150
endfunction
private function unit KatonTargets takes nothing returns boolean
return (GetWidgetLife(KatonTargets) > 0.405) and (IsUnitType(KatonTargets, UNIT_TYPE_STRUCTURE) == false) and (IsUnitType(KatonTargets, UNIT_TYPE_MAGIC_IMMUNE) == false)
/////////////////Globals///////////////////////////////////////////
globals
private group Enemies // if the spell can be used by multiple ppl/characters then I should create a global group, because the spell wouldnt have to create a new group for every Caster then which could create lag)
private boolexpr K // "This offtipic is for group aswell" also, if CreateGroup is used in automatic functions like the inizializer, it can crash the Game sometimes unless u only set it in the initializer which only works if u created a group beforehand which we did now
/////////////////PickedUnitsInRange///////////////////////////////////////////
private function KatonPick takes nothing returns boolean
return KatonTargets(GetFilterUnit())
/////////////////Conditions///////////////////////////////////////////
private function Katon_Condition takes nothing returns nothing
return GetSpellAbilityId() == SPELL_ID // The Same as the GUI Condition : " abillity beeing cast equal to ..."
endfunction
/////////////////Actions///////////////////////////////////////////
private function Katon_Action takes nothing returns nothing
local location KatonLoc = GetSpellTargetLoc() // We need to get the Spell Target Location with these 3 Calls ( "","")
local real KatonX = GetLocationX(KatonLoc) // "
local real KatonY = GetLocationY(KatonLoc) // "
local unit KatonCaster = GetTriggerUnit() // sets the Caster of the Spell
local integer Katonlevel = GetUnitAbilityLevel(caster, SPELL_ID) //
local unit CurrentUnit
call GroupEnumUnitsInRange (Enemies, KatonX,KatonY,Katon_Range,K)
loop
set CurrentUnit = FirstOfGroup(Enemies)
exitwhen (CurrentUnit == null)
call GroupRemoveUnit (Enemies, CurrentUnit)
if IsUnitEnemy (CurrentUnit, GetOwningPlayer(KatonCaster) then
call UnitDamageTarget(KatonCaster, CurrentUnit, Katon_DMG(Katonlevel), true, false, ATTACK_TYPE_MAGIC, DAMAGE_TYPE_NORMAL, null
endloop
call RemoveLocation(spellLoc) // This removes the Location and the one below sets the Variable to null (which prevents leak aswell)
set KatonLoc = null // caster and Spell Location has to be set 0 to prevent leak
set KatonCaster = null // "
endfunction
/////////////////Initializer///////////////////////////////////////////
private function KatonInit takes nothing returns nothing
local trigger KatonTrigger = CreateTrigger( )
call TriggerRegisterAnyUnitEventBJ ( KatonTrigger, EVENT_PLAYER_UNIT_SPELL_EFFECT )
call TriggerAddCondition ( KatonTrigger, Condition( function Katon_Condition ))
call TriggerAddAction( KatonTrigger, function Katon_Action )
//setting globals
set Enemies = CreateGroup ()
set K = Condition(function KatonPick)
//preloading effects
endfunction
endscope
Attachments
-
56.5 KB Views: 362