waaaks!
Zinctified
- Reaction score
- 256
Hi I made this trigger to replicate DotA's creep agro system (or they didn't triggered it), here's what the system does, if a unit attacks a hero (or even just issued an order to attack a hero) allied units within 500 range of the attacked hero will be ordered to attack the attacking unit, then a 2 second non periodic timer starts, that when expired, it orders back the picked unit to its last order (I used last order system) so that it will go back to its lane.
I'm not sure if DotA triggered it or not. I already tried changing the value of Stats - Priorities on heroes, and still didn't have the same effect.
My trigger has no compile error, but it does crash warcraft after some hero attacks.
really need the trigger in my map, thanks
I'm not sure if DotA triggered it or not. I already tried changing the value of Stats - Priorities on heroes, and still didn't have the same effect.
My trigger has no compile error, but it does crash warcraft after some hero attacks.
JASS:
scope CreepAgro initializer init
private struct data
group e
endstruct
private function tick takes nothing returns nothing
local timer t = GetExpiredTimer()
local data d = GetTimerData(t)
local unit u
loop
set u = FirstOfGroup(d.e)
exitwhen u == null
call IssueSecondLastOrder(u)
call GroupRemoveUnit(d.e,u)
endloop
call ReleaseGroup(d.e)
call ReleaseTimer(t)
call d.destroy()
set t = null
set u = null
endfunction
private function con takes nothing returns boolean
return IsUnitType(GetOrderTargetUnit(),UNIT_TYPE_HERO) and not IsUnitIllusion(GetOrderTargetUnit()) and GetIssuedOrderId() == 851983
endfunction
private function filter takes nothing returns boolean
return IsUnitAlly(GetFilterUnit(),GetOwningPlayer(GetOrderTargetUnit())) and not IsUnitType(GetFilterUnit(),UNIT_TYPE_HERO)
endfunction
private function act takes nothing returns nothing
local timer t = NewTimer()
local data d = data.create()
local unit trg = GetTriggerUnit()
local group g = NewGroup()
local unit u
set d.e = NewGroup()
call GroupEnumUnitsInRange(g,GetUnitX(trg),GetUnitY(trg),500.0,null)
loop
set u = FirstOfGroup(g)
exitwhen u == null
call IssueTargetOrder(u,"attack",trg)
call GroupAddUnit(d.e,u)
call GroupRemoveUnit(g,u)
endloop
call ReleaseGroup(g)
call TimerStart(t,2.0,false,function tick)
call SetTimerData(t,d)
set g = null
set trg = null
set t = null
set u = null
endfunction
//===========================================================================
private function init takes nothing returns nothing
local trigger t = CreateTrigger( )
call TriggerRegisterAnyUnitEventBJ( t, EVENT_PLAYER_UNIT_ISSUED_TARGET_ORDER )
call TriggerAddCondition(t,Condition(function con))
call TriggerAddAction( t, function act )
endfunction
endscope
really need the trigger in my map, thanks