Creep agro

waaaks!

Zinctified
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.
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
 
Infinite loop?

It runs off a issued target order and you give a unit another order, try disabling the trigger and then enabling it back again when it's done.
 

waaaks!

Zinctified
ok I changed some conditions to avoid infinite loops, but the main problem for now is, I cant reorder the creeps with its second last order, or their last order, they just sit there and stand by after the 2 second timer is out

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 IssueLastOrder(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 IsUnitType(GetTriggerUnit(),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,Condition(function filter))
    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
 
(I used last order system)

Kingking learn to read, he already said he uses it and from his function name it's pretty obvious.
JASS:
call TimerStart(t,2.0,false,function tick)
    call SetTimerData(t,d)

Shouldn't it be the other way round?
 
General chit-chat
Help Users
  • No one is chatting at the moment.
  • C Cherry.Grove:
    My boyfriend is super into Bethesda modding so I'm probably going to join him in that for a bit, then move on to making mobile/browser games.
  • C Cherry.Grove:
    I mostly just want to look at my old projects because I know I posted uploads on here somewhere.
  • C Cherry.Grove:
    My one game was basically Among Us but you sabotaged an entire medieval city simulated drastically inefficiently with dynamic NPCs :S
  • C Cherry.Grove:
    of course I never finished it x D
  • jonas jonas:
    xD
  • jonas jonas:
    I think you can still run the original game, just there's a chance your map won't work with the newer patches
  • jonas jonas:
    what development framework have you been looking at for mobile development?
  • jonas jonas:
    I'm currently creating (as a hobby) a space invaders like game for mobile using Xamarin, after starting a few larger projects that I also may not have finished :rolleyes::p
  • The Helper The Helper:
    Awesome! you should look at the Atari VCS platform it does not have a huge user base but the one it has is super active at around 11k and they have no games in there store
  • The Helper The Helper:
    basically it is linux
  • The Helper The Helper:
    OMG it is BanLord as Blackveiled on the forum
  • The Helper The Helper:
    what is up buddy
  • jonas jonas:
    thanks for the tip, that sounds cool. Never heard about the VCS before but seems like it should be a good match
  • tom_mai78101 tom_mai78101:
    The winter vacation left a toll on me. I missed staying up late and sleeping in late.
  • C Cherry.Grove:
    i haven't looked into it yet
  • C Cherry.Grove:
    If I could use something Python compatible it would save me some learning
  • C Cherry.Grove:
    But Unity might be easiest
  • C Cherry.Grove:
    looking at old posts here makes me happy. Makes me be all like "wow I was pretty smart in 2009"
  • C Cherry.Grove:
    mostly failing at life through adulthood really demotivated me for a while
  • C Cherry.Grove:
    ....what I don't get is why the fuck they would force us to permanently convert to a version of the game everyone fucking hated : \
  • C Cherry.Grove:
    Raid Shadow Legends texture pack smh
  • jonas jonas:
    Most people fail at life throughout their adulthood. Sometimes we get to learn from it. Usually it just feels like crap.
    +1
  • The Helper The Helper:
    What does not kill you makes you stronger is what they say
  • C Cherry.Grove:
    for real! :cool:

    Staff online

    Members online

    Affiliates

    Hive Workshop NUON Dome
    Top