NetherHawk
New Member
- Reaction score
- 26
Ok, i tried writing the code for dota's Berserker Call which forces all enemy units in the vicinity to attack it. This aint working for me. Can you point me in the right direction?
JASS:
scope BerserkerCall initializer Init
// Objects used:
// 'A009' = Berserker Call (Axe : Mogul Kahn)
// 'B003' = Berserker Call Buff
// 'A008' = Berserker Call Effect (armour)
// 'h00A' = Spellcaster
globals
unit bcu
endglobals
private struct berserker
unit bsu
group bsg
trigger bst
method onDestroy takes nothing returns nothing
call ReleaseGroup(.bsg)
call DestroyTrigger(.bst)
set .bst = null
set .bsg = null
set .bsu = null
endmethod
endstruct
private function Berserker_Call_Conditions takes nothing returns boolean
return GetSpellAbilityId()==039;A009039;
endfunction
private function Berserker_Call_Check takes nothing returns boolean
local berserker d = GetTriggerStructA(GetTriggeringTrigger())
if GetUnitAbilityLevel(GetFilterUnit(),039;B003039;) > 0 and IsUnitInGroup(GetFilterUnit(),d.bsg) == true and GetUnitState(d.bsu,UNIT_STATE_LIFE) > 0 then
call DisableTrigger(d.bst)
call IssueTargetOrder(GetFilterUnit(),"attack",d.bsu)
call EnableTrigger(d.bst)
endif
return false
endfunction
private function Berserker_Call_Filter takes nothing returns boolean
return GetUnitAbilityLevel(GetFilterUnit(),039;B003039;) > 0 and IsUnitEnemy(GetFilterUnit(),GetOwningPlayer(bcu)) == true
endfunction
private function Berserker_Call_Attack takes nothing returns nothing
call IssueTargetOrder(GetEnumUnit(),"attack",bcu)
endfunction
private function Berserker_Call_CreepAttack takes nothing returns nothing
if GetOwningPlayer(GetEnumUnit())== Player(0) then
call IssuePointOrder(GetEnumUnit(),"attack",GetRectCenterX(gg_rct_Scourge_Spawn),GetRectCenterY(gg_rct_Scourge_Spawn))
elseif GetOwningPlayer(GetEnumUnit())== Player(6) then
call IssuePointOrder(GetEnumUnit(),"attack",GetRectCenterX(gg_rct_Sentinel_Spawn),GetRectCenterY(gg_rct_Sentinel_Spawn))
endif
endfunction
private function Berserker_Call_Actions takes nothing returns nothing
local berserker d = berserker.create()
local unit dx
set d.bsu = GetTriggerUnit()
set d.bsg = NewGroup()
set d.bst = CreateTrigger()
set bcu = d.bsu
set dx = CreateUnit(GetOwningPlayer(d.bsu),039;h00A039;,GetUnitX(d.bsu),GetUnitY(d.bsu),bj_UNIT_FACING)
call SetUnitInvulnerable(dx,true)
call UnitAddAbility(dx,039;A008039;)
call SetUnitAbilityLevel(dx,039;A008039;,GetUnitAbilityLevel(d.bsu,039;A009039;))
call IssueTargetOrder(dx,"innerfire",d.bsu)
call UnitAddAbility(dx,039;Aloc039;)
call UnitApplyTimedLife(dx,039;BTLF039;,.8)
call PolledWait(.2)
call GroupEnumUnitsInRange(d.bsg,GetUnitX(d.bsu),GetUnitY(d.bsu),300.,Condition(function Berserker_Call_Filter))
call ForGroup(d.bsg,function Berserker_Call_Attack)
call TriggerRegisterAnyUnitEventBJ(d.bst,EVENT_PLAYER_UNIT_ISSUED_TARGET_ORDER)
call TriggerRegisterAnyUnitEventBJ(d.bst,EVENT_PLAYER_UNIT_ISSUED_POINT_ORDER)
call TriggerRegisterAnyUnitEventBJ(d.bst,EVENT_PLAYER_UNIT_ISSUED_ORDER)
call TriggerAddCondition(d.bst,Condition(function Berserker_Call_Check))
call SetTriggerStructA(d.bst,d)
call PolledWait(1+(.5*I2R(GetUnitAbilityLevel(d.bsu,039;A009039;))))
call ForGroup(d.bsg,function Berserker_Call_CreepAttack)
call ClearTriggerStructA(d.bst)
call d.destroy()
set dx = null
endfunction
private function Init takes nothing returns nothing
local trigger tr = CreateTrigger()
call TriggerRegisterAnyUnitEventBJ(tr,EVENT_PLAYER_UNIT_SPELL_EFFECT)
call TriggerAddCondition(tr,Condition(function Berserker_Call_Conditions))
call TriggerAddAction(tr,function Berserker_Call_Actions)
endfunction
endscope