Stupid Variables

T

Tooters

Guest
So I am trying to make a loop, but it won't let me minus from a variable. Here is my code:

Code:
function combineArea1 takes integer playerOwner, integer combinee, integer howMany, integer newUnit returns nothing
    local group J
    local integer counter
    call ForGroupBJ( GetUnitsInRectAll( gg_rct_Area_1_Combine ), function combineArea1 )
    if IsUnitIdType( combinee, ConvertUnitType( GetUnitTypeId( GetEnumUnit() ) ) ) then
        call GroupAddUnit( J, GetEnumUnit() )
        set counter = CountUnitsInGroup( J )
        if counter >= howMany then
            loop
            exitwhen ( howMany == 0 )              
                call GroupRemoveUnit( J, GroupPickRandomUnit( J ) )  
                call RemoveUnit( GetEnumUnit() )
                set howMany = howMany - 1
            endloop 
            call CreateUnitAtLoc( Player(playerOwner-1), newUnit, gg_rct_Area_1_Combine, 0.00 )
        endif   
    endif  
endfunction

When I do this in JassCraft, it works fine, but when i uploaded it to my map and tried to save it, it said this syntax error: Line 562: Invalid argument type(rect). Please help. Thx
 

AceHart

Your Friendly Neighborhood Admin
Reaction score
1,495
> it won't let me minus from a variable

:D
Oh, it is... maybe... weird code does weird things.


> CreateUnitAtLoc

This needs a point, not a region.


This trigger appears to be calling itself to handle all units in some region...
That's not going to work.


The prefered way to loop a unit-group:

Set g = <units...>
Loop
- Set u = FirstOfGroup(g)
- exitwhen u == null
- call GroupRemoveUnit(g,u)
- ... do something with u
endloop


And, we already had this thread...
 
T

Tooters

Guest
Oh shoot. I just realized that I need this to be able to handle more than one type of units coming in. So If I just change the trigger below to have more custom scripts like.. call combineArea1( 'hpea' 15 'hfoo' ) and do that for every type of things I want combined it wouldnt be able to work.. I have changed the code quite a bit too..


Unit - Unit enters Area 1 Combine
Custom Script: call combineArea1( 'hfoo', 15, 'hpea' )


Code:
function H2I takes handle h returns integer
    return h
    return 0
endfunction
 
// ===========================
function LocalVars takes nothing returns gamecache
    return udg_Handles
endfunction

function SetHandleInt takes handle subject, string name, integer value returns nothing
    if value==0 then
        call FlushStoredInteger(LocalVars(),I2S(H2I(subject)),name)
    else
        call StoreInteger(LocalVars(), I2S(H2I(subject)), name, value)
    endif
endfunction

function GetHandleInt takes handle subject, string name returns integer
    return GetStoredInteger(LocalVars(), I2S(H2I(subject)), name)
endfunction

//=============================================================================

function unitTest takes nothing returns boolean
    local timer t = GetExpiredTimer()
    local integer ID = GetHandleInt( t, "combinee" )
    return ( UnitId( GetUnitName( GetEnumUnit( ) ) ) ==  ID )
endfunction

function combineArea1 takes integer combinee, integer howMany, integer newUnit returns nothing
    local group J
    local timer t = CreateTimer()
    local unit U   
    local integer counter  
    local player owningPlayer
    call SetHandleInt( t, "combinee", combinee )
    set counter = CountUnitsInGroup( J ) 
    if counter >= howMany then 
        loop 
            call TimerStart( t, 0.20, false, function unitTest )
            set J = GetUnitsInRectMatching( gg_rct_Area_1_Combine, Condition( function unitTest ) )
            set U = GroupPickRandomUnit( J )
            exitwhen ( U == null )
            set owningPlayer = ( GetOwningPlayer( U ) )
            call RemoveUnit( U )
        endloop   
        call CreateUnitAtLoc( owningPlayer, newUnit, GetRandomLocInRect( gg_rct_Area_1_Combine ), 0.00 )
    endif  
endfunction

Thats the code, but It isn't Multi-activable. Please help me fix that, and It doesn't even combine the dudes.
 
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