Function wont set integer correctly.

AdamGriffith

You can change this now in User CP.
Reaction score
69
Hello again,

JASS:
scope Initialization initializer Init

private function TimerCallback takes nothing returns nothing
    local integer i = 0
    loop
        exitwhen i == 11
        call SetPlayerState(Player(i), PLAYER_STATE_GOLD_GATHERED, udg_Income<i>)
        call SetPlayerState(Player(i), PLAYER_STATE_RESOURCE_GOLD, udg_Income<i>)
        set i = i + 1
    endloop
endfunction

private function GroupCallback takes nothing returns nothing
    call RemoveUnit(GetEnumUnit())
endfunction

//===========================================================================
private function Init takes nothing returns nothing
    local group g = CreateGroup()
    local integer i = 0
    local timer t = CreateTimer()
    call FogEnable(false)
    call FogMaskEnable(false)
    call SetFloatGameState(GAME_STATE_TIME_OF_DAY, 12.0)
    loop
        exitwhen i == 11
        if GetPlayerSlotState(Player(i)) == PLAYER_SLOT_STATE_PLAYING then
            call CreateUnit(Player(i), &#039;h002&#039;, GetStartLocationX(i), GetStartLocationY(i), 0.0)
            set udg_Alive<i> = true
        else
            call GroupEnumUnitsOfPlayer(g, Player(i), null)
            call ForGroup(g, function GroupCallback)
            set udg_Alive<i> = false
        endif
        
        set udg_Income<i> = 25
        set udg_Lives<i> = 25
        call SetPlayerState(Player(i), PLAYER_STATE_GIVES_BOUNTY, IntegerTertiaryOp(true, 1, 0))
        call SetPlayerState(Player(i), PLAYER_STATE_GOLD_GATHERED, GetPlayerState(Player(i), PLAYER_STATE_GOLD_GATHERED) + 30)
        call SetPlayerState(Player(i), PLAYER_STATE_RESOURCE_GOLD, GetPlayerState(Player(i), PLAYER_STATE_RESOURCE_GOLD) + 30)
        set i = i + 1
    endloop
    call BJDebugMsg(&quot;Setting udg_Income[0] = 25&quot;)
    set udg_Income[0] = 25
    call TimerStart(t, 20.0, true, function TimerCallback)
    call DestroyGroup(g)
    set g = null
    set t = null
endfunction

endscope</i></i></i></i></i></i>


For some reason the BJDebugMsg is displayed but udg_Income[0] is not being set correctly. Any ideas?
 

Larcenist

REP: Respect, Envy, Prosperity?
Reaction score
211
1) Why use user-defined globals when you're coding in vJASS?

2) Now that you're using UDGs, why not initialize the amounts in the variable editor to 25 instead?
 

phyrex1an

Staff Member and irregular helper
Reaction score
447
The only reasonable explanation would be that you're hitting the op-limit right before that line (somewhere in the BJDebugMsg for example).

Though, it is also possible that the variable is being set and you're just testing it in the wrong way. For example, isn't the TimerCallback supposed to increase the gold instead of setting it?
 

AdamGriffith

You can change this now in User CP.
Reaction score
69
JASS:
scope Initialization initializer Init

private function TimerCallback takes nothing returns nothing
    local integer i = 0
    loop
        exitwhen i == 11
        call SetPlayerState(Player(i), PLAYER_STATE_GOLD_GATHERED, GetPlayerState(Player(i), PLAYER_STATE_GOLD_GATHERED) + udg_Income<i>)
        call SetPlayerState(Player(i), PLAYER_STATE_RESOURCE_GOLD, GetPlayerState(Player(i), PLAYER_STATE_RESOURCE_GOLD) + udg_Income<i>)
        set i = i + 1
    endloop
endfunction

private function GroupCallback takes nothing returns nothing
    call RemoveUnit(GetEnumUnit())
endfunction

//===========================================================================
private function Init takes nothing returns nothing
    local group g = CreateGroup()
    local integer i = 0
    local timer t = CreateTimer()
    call FogEnable(false)
    call FogMaskEnable(false)
    call SetFloatGameState(GAME_STATE_TIME_OF_DAY, 12.0)
    loop
        exitwhen i == 11
        if GetPlayerSlotState(Player(i)) == PLAYER_SLOT_STATE_PLAYING then
            call CreateUnit(Player(i), &#039;h002&#039;, GetStartLocationX(i), GetStartLocationY(i), 0.0)
            set udg_Alive<i> = true
        else
            call GroupEnumUnitsOfPlayer(g, Player(i), null)
            call ForGroup(g, function GroupCallback)
            set udg_Alive<i> = false
        endif
        
        set udg_Income<i> = 25
        set udg_Lives<i> = 25
        call SetPlayerState(Player(i), PLAYER_STATE_GIVES_BOUNTY, IntegerTertiaryOp(true, 1, 0))
        call SetPlayerState(Player(i), PLAYER_STATE_GOLD_GATHERED, GetPlayerState(Player(i), PLAYER_STATE_GOLD_GATHERED) + 30)
        call SetPlayerState(Player(i), PLAYER_STATE_RESOURCE_GOLD, GetPlayerState(Player(i), PLAYER_STATE_RESOURCE_GOLD) + 30)
        set i = i + 1
    endloop
    call TimerStart(t, 20.0, true, function TimerCallback)
    call DestroyGroup(g)
    set g = null
    set t = null
endfunction

endscope</i></i></i></i></i></i>


New code. ^^

It sets udg_Income[2] and [3] and so on but not [0] or [1] ?

This doesnt make any sense?
 

AdamGriffith

You can change this now in User CP.
Reaction score
69
What should I change the IntererTertiary thing to?

And this to check:

JASS:
function Trig_Income_Message_Actions takes nothing returns nothing
    local integer i = 0
    local player p = GetTriggerPlayer()
    loop
        exitwhen i == 11
        call DisplayTextToPlayer(p, 0.0, 0.0, GetPlayerName(Player(i)) + &quot;: &quot; + I2S(udg_Income<i>))
        set i = i + 1
    endloop
endfunction

//===========================================================================
function InitTrig_Income_Message takes nothing returns nothing
    local integer index = 0
    local trigger t = CreateTrigger()
    loop
        call TriggerRegisterPlayerChatEvent(t, Player(index), &quot;-income&quot;, true)
        set index = index + 1
        exitwhen index == bj_MAX_PLAYER_SLOTS
    endloop
    call TriggerAddAction(t, function Trig_Income_Message_Actions)
endfunction

</i>
 

Larcenist

REP: Respect, Envy, Prosperity?
Reaction score
211
Just change the TertiaryOp() to 1 since it returns the first value if true.

As for the checking, does it currently display every player's income or just the ones playing?
 

AdamGriffith

You can change this now in User CP.
Reaction score
69
Every players.

All players are set to 25 except for Player 1 and 2.

I think I found the reason:

The inittrig for udg_globals is overwriting it.
As in in the variable editor I have the size as 1 so in the init trig it is setting [0] and [1] which must be running after my trigger.
 

Terrabull

Veteran Member (Done that)
Reaction score
38
Librareis are placed before all normal code. Including stuff added by WorldEditor. That woudl be your problem.
 
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