[vJass] Variable incorrectly read or initialized?

Frozenhelfir

set Gwypaas = Guhveepaws
Reaction score
56
The variable in question is PROSP_MULT[5][12] initialized in the library. The value I've been testing is PROSP_MULT[0], where i is an index for each player in a loop. Clearly initialized in the library to be 1/8 (.125), the debug message begs to differ, reading out 0.000 The part of the scope with this variable is the very last part with all those comments around it :banghead:

I made a library to setup the globals for my trigger because for some reason doing it within the scope derailed all of my other initialization functions. This is the library:

JASS:
//DISTRIBUTES GOLD FOR GOLD MINES, WELLS, FOUNTAINS
library GoldMWF initializer init uses GameModes
globals
    constant integer MINE_ID = 'hgtw'
    constant integer WELL_ID = 'h00P'
    constant integer SLAYER_ID = 'Hblm'
    constant integer PROSPER_CVAL = 103
    constant integer PROSPER_HAMMER_ID = 'I027'
    integer TIME = 0
    integer array PROSPER_TECH
    integer array PROSPER_MULT[5][12]
    integer array PROSP_LEVEL[12]
    real array PROSP_MULT[5][12]
    unit array PROSPER_SLAYER
    playerstate gold = PLAYER_STATE_RESOURCE_GOLD
    playerstate lumber = PLAYER_STATE_RESOURCE_LUMBER
    integer array MINE_COUNT[12]
    integer array WELL_COUNT[12]
endglobals

private function init takes nothing returns nothing
local integer i
    
    set PROSPER_TECH[0] = 0
    set PROSPER_TECH[1] = 'R00G'
    set PROSPER_TECH[2] = 'R00I'
    set PROSPER_TECH[3] = 'R00J'
    set PROSPER_TECH[4] = 'R00K'
    
    loop
        set PROSP_MULT[0]<i> = .125
        set PROSP_MULT[1]<i> = .167
        set PROSP_MULT[2]<i> = .25
        set PROSP_MULT[3]<i> = .34
        set PROSP_MULT[4]<i> = .67
        set PROSP_LEVEL<i> = 0
        set MINE_COUNT<i> = 0
        set WELL_COUNT<i> = 0
        exitwhen i &gt;= 11
        set i = i+1
    endloop
    call BJDebugMsg(&quot;ArrayInit end!&quot;) //this never pops up in game, but should it?
endfunction
endlibrary</i></i></i></i></i></i></i></i>


This is the part of the scope that matters:
JASS:
scope GoldMineWell initializer InitTrig
private function PERIODIC takes nothing returns nothing
local integer i = 0
local integer j = 0
local integer k = 0
local real DEBUG1 = 0
local real DEBUG2 = 0
local integer PROSP_TOTAL

    set TIME = TIME + 5
    if TIME == 60 then
        set TIME = 0
        loop
            if udg_CCYES<i> == 1 then
                call SetPlayerState(Player(i), PLAYER_STATE_RESOURCE_GOLD, GetPlayerState(Player(i), PLAYER_STATE_RESOURCE_GOLD) + 30)
            endif
            if PROSPER_SLAYER<i> != null then
                set PROSP_TOTAL = (MINE_COUNT<i> + 2 * WELL_COUNT<i>) * GOLD_MULT
                call BJDebugMsg(I2S(PROSP_TOTAL) + &quot; = PROSP TOTAL&quot;)
               
               
               //real array PROSP_MULT[5][12]
               //PROSP_LEVEL = 0 at this point, which should return 1/8 for PROSP_MULT for all Player(i)
               //However the BJDebugMsg shows 0.000
               //wtf??? it is clearly initialized in my library -_-
               
                set DEBUG1 = PROSP_MULT[PROSP_LEVEL<i>]<i> //&lt;=====THIS ONE WONT F*ING WORK
                call BJDebugMsg(R2S(DEBUG1) + &quot; = DEBUG1&quot;) //&lt;=== IT READS ZERO BUT IT SHOULD BE 1/8 or .125 ARRRG</i></i></i></i></i></i>
 

Frozenhelfir

set Gwypaas = Guhveepaws
Reaction score
56
I did initialize it. right after the private function init takes nothing returns nothing. I think I'm the only one that does this, but I prefer not to indent anything that deals with the declaration or leak-proofing of local variables. It just helps me organize.
JASS:
private function init takes nothing returns nothing
local integer i
    
    set PROSPER_TECH[0] = 0
 

SFilip

Gone but not forgotten
Reaction score
633
> I did initialize it.
No, you just declared it. It needs a value: local integer i = 0
If you use an undeclared variable, thread crashes and the function stops executing. Therefore, your Init stops as soon as it reaches set PROSP_MULT[0][i] = .125.
 

Frozenhelfir

set Gwypaas = Guhveepaws
Reaction score
56
Oh, my bad. Thanks for pointing that out. Stupid me, now I probably don't even need to have it separated in a library...
 
General chit-chat
Help Users

      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