Problems with loop and unit group

Evoroth

New Member
Reaction score
11
Ok, I want every unit of a special type have an ID number and put it in its costum value when it is created. Player 1 has units with ID 1-5, player 2 with 6-10 and so on.
This trigger is supposed to find a ID number that's not taken by a living unit (I use the TankAlive boolean variable to track if it's free or not), give it to the created unit and then show a message to prove it.
But, it doesnt. The event is registered, and the actions before the loop happens, but not the ones inside it. No syntax check has shown any issues, however.


JASS:
function Trig_Tank_ID_Creation_Conditions takes nothing returns boolean
    return ( GetUnitTypeId(GetTrainedUnit()) == 'h000' )
endfunction

function Trig_Tank_ID_Creation_Actions takes nothing returns nothing
    local integer ID
    local integer index
    set ID = ID + (GetPlayerId(GetOwningPlayer(GetTrainedUnit()))*5)
    loop
    set ID = ID + 1
    if ( udg_TankAlive[ID] == false ) then
    call SetUnitUserData(GetTrainedUnit(), ID)
    set udg_TankAlive[ID] = true
    call DisplayTextToForce( GetPlayersAll(), "A new tank has been created with ID "+I2S(GetUnitUserData(GetTrainedUnit())))
    set ID = 100    
    else  
    endif
    exitwhen ID == 100
    endloop
endfunction

//===========================================================================
function InitTrig_Tank_ID_Creation takes nothing returns nothing
    set gg_trg_Tank_ID_Creation = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_Tank_ID_Creation, EVENT_PLAYER_UNIT_TRAIN_FINISH )
    call TriggerAddCondition( gg_trg_Tank_ID_Creation, Condition( function Trig_Tank_ID_Creation_Conditions ) )
    call TriggerAddAction( gg_trg_Tank_ID_Creation, function Trig_Tank_ID_Creation_Actions )
endfunction


And when the unit dies, its ID number will be made free to be taken again:

JASS:
function Trig_Tank_Death_Actions takes nothing returns nothing
    set udg_TankAlive[GetUnitUserData(GetDyingUnit())] = false
endfunction


And now I would like to whine about that I used GUI too long.

This is a "Pick All Units In Unit Group And Do Actions"-action converted to JASS. The problem is, I need to use a variable from function A in Function B and C.
So I need another way of unit group creation, if possible merge these functions into one, or export the variable to function B and C in another way.

JASS:
function Function_C takes nothing returns boolean
    return ( IsUnitInTransportBJ(GetFilterUnit(), variable) == true )
endfunction

function Function_B takes nothing returns nothing
    call RandomAction(variable)
endfunction

function Function_A takes unit variable returns nothing
    call ForGroupBJ( GetUnitsOfPlayerMatching(Player(0), Condition(function Trigger_C)), function Trigger_B)
endfunction


Thanks.
 
Reaction score
456
JASS:
function Trig_Tank_ID_Creation_Actions takes nothing returns nothing
    local integer ID = 0
    set ID = ID + (GetPlayerId(GetOwningPlayer(GetTrainedUnit()))*5)
    loop
        set ID = ID + 1
        if ( udg_TankAlive[ID] == false ) then
            call SetUnitUserData(GetTrainedUnit(), ID)
            set udg_TankAlive[ID] = true
            call DisplayTextToForce( GetPlayersAll(), "A new tank has been created with ID "+I2S(GetUnitUserData(GetTrainedUnit())))
            exitwhen (true)  
        endif
        exitwhen ID == 100
    endloop
endfunction

Test it like that. If you use NewGen, you have to set variables to something, before using them.. like I did for the integer ID.

Another way to do a group is this:
JASS:
function DifferentGroupCreation takes nothing returns nothing
    local group g = CreateGroup()
    local unit f
    call GroupEnumUnitsInRange(g, 0.00, 0.00, 0.00, null) //Some group picking function
    loop
        set f = FirstOfGroup(g)
        exitwhen (f == null)
        call GroupRemoveUnit(g, f)
        //Actions for the picked unit here
        set f = null
    endloop
    call DestroyGroup(g)
    set g = null
endfunction

Then we loop through the group until every unit is removed from it.
 
General chit-chat
Help Users
  • No one is chatting at the moment.

      The Helper Discord

      Staff online

      Members online

      Affiliates

      Hive Workshop NUON Dome World Editor Tutorials

      Network Sponsors

      Apex Steel Pipe - Buys and sells Steel Pipe.
      Top