Help with coding

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()=='A009'
endfunction

private function Berserker_Call_Check takes nothing returns boolean
    local berserker d = GetTriggerStructA(GetTriggeringTrigger())
	if GetUnitAbilityLevel(GetFilterUnit(),'B003') > 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(),'B003') > 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),'h00A',GetUnitX(d.bsu),GetUnitY(d.bsu),bj_UNIT_FACING)
    call SetUnitInvulnerable(dx,true)
	call UnitAddAbility(dx,'A008')
	call SetUnitAbilityLevel(dx,'A008',GetUnitAbilityLevel(d.bsu,'A009'))  	
	call IssueTargetOrder(dx,"innerfire",d.bsu)    
   	call UnitAddAbility(dx,'Aloc')
    call UnitApplyTimedLife(dx,'BTLF',.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,'A009'))))		
	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
 

Azlier

Old World Ghost
Reaction score
461
>use taunt or 10 rows GUI trigger

Taunt doesn't do that. And stop suggesting GUI for absolutely everything. If he's learned vJass, why downgrade to GUI?

Okay, I see lots of things wrong with that script. The dynamic triggers are totally unnecessary. Get rid of them. Your script probably needs a total rewrite because it's so messed up.
 

NetherHawk

New Member
Reaction score
26
sorry could you point out which part is messed up? im sure it can be fixed ^^


edit: sorry the code works fine. The trigger i used for testing was an old version. Anyway, can you still point out which parts are not properly codeD? what is the meaning of a dynamic triggeR?
 
General chit-chat
Help Users
  • No one is chatting at the moment.

      The Helper Discord

      Members online

      No members online now.

      Affiliates

      Hive Workshop NUON Dome World Editor Tutorials

      Network Sponsors

      Apex Steel Pipe - Buys and sells Steel Pipe.
      Top