Syntax error, am I stupid?

Level 8
Joined
Apr 16, 2025
Messages
160
There are 2 errors in each of these two lines, and I can't understand why. It seems like there shouldn't be.

JASS:
if udg_int_array_s__OrbStacking__OrbUnit_missileMod[udg_int_array_s__OrbStacking__UnitOrb_orbunit[this]] == this then

JASS:
if udg_int_array_s__OrbStacking__OrbUnit_missileMod[udg_int_array_s__OrbStacking__UnitOrb_orbunit[this]] == this then

Just in case, I've uploaded the full function. Does anyone understand why it gives an error?

JASS:
function s__OrbStacking__UnitOrb_onDestroy takes integer this returns nothing
    local integer o
    if udg_int_array_s__OrbStacking__OrbUnit_missileMod[udg_int_array_s__OrbStacking__UnitOrb_orbunit[this]] == this then
        set o=( LoadInteger(udg_hashtable_s__OrbStacking__UnitOrb_AutoData___ht, udg_int_array_s__OrbStacking__UnitOrb_AutoData___id[( o )], ( udg_int_array_s__OrbStacking__UnitOrb_index[o] + 1 )) )
        loop
            exitwhen o == 0
            if udg_int_array_s__Orb_OrbStacking__MissileModAbil[udg_int_array_s__OrbStacking__UnitOrb_orb[o]] != udg_int_OrbStacking__AID then
                call s__OrbStacking__OrbUnit_newMissileMod(udg_int_array_s__OrbStacking__UnitOrb_orbunit[o] , o)
            endif
            set o=( LoadInteger(udg_hashtable_s__OrbStacking__UnitOrb_AutoData___ht, udg_int_array_s__OrbStacking__UnitOrb_AutoData___id[( o )], ( udg_int_array_s__OrbStacking__UnitOrb_index[o] + 1 )) )
        endloop
        if udg_int_array_s__OrbStacking__OrbUnit_missileMod[udg_int_array_s__OrbStacking__UnitOrb_orbunit[o]] == this then
            call s__OrbStacking__OrbUnit_resetMissileMod(udg_int_array_s__OrbStacking__UnitOrb_orbunit[o])
        endif
    endif
    call s__OrbStacking__OrbUnit_destroy(udg_int_array_s__OrbStacking__UnitOrb_orbunit[this])
endfunction

JASS:
function sa__OrbStacking__UnitOrb_onDestroy takes nothing returns boolean
    local integer this= udg_int_f__arg_this
    local integer o
    if udg_int_array_s__OrbStacking__OrbUnit_missileMod[udg_int_array_s__OrbStacking__UnitOrb_orbunit[this]] == this then
        set o=( LoadInteger(udg_hashtable_s__OrbStacking__UnitOrb_AutoData___ht, udg_int_array_s__OrbStacking__UnitOrb_AutoData___id[( o )], ( udg_int_array_s__OrbStacking__UnitOrb_index[o] + 1 )) )
        loop
            exitwhen o == 0
            if udg_int_array_s__Orb_OrbStacking__MissileModAbil[udg_int_array_s__OrbStacking__UnitOrb_orb[o]] != udg_int_OrbStacking__AID then
                call s__OrbStacking__OrbUnit_newMissileMod(udg_int_array_s__OrbStacking__UnitOrb_orbunit[o] , o)
            endif
            set o=( LoadInteger(udg_hashtable_s__OrbStacking__UnitOrb_AutoData___ht, udg_int_array_s__OrbStacking__UnitOrb_AutoData___id[( o )], ( udg_int_array_s__OrbStacking__UnitOrb_index[o] + 1 )) )
        endloop
        if udg_int_array_s__OrbStacking__OrbUnit_missileMod[udg_int_array_s__OrbStacking__UnitOrb_orbunit[o]] == this then
            call s__OrbStacking__OrbUnit_resetMissileMod(udg_int_array_s__OrbStacking__UnitOrb_orbunit[o])
        endif
    endif
    call s__OrbStacking__OrbUnit_destroy(udg_int_array_s__OrbStacking__UnitOrb_orbunit[this])
    return true
endfunction
 

Attachments

  • 123.png
    123.png
    15.7 KB · Views: 28
You are setting local variable 'o' to a hashtable integer lookup. However, you pass arrays that use 'o' as an index as the child and parent keys. 'o' was not set to any value prior to this statement.

JASS:
set o=( LoadInteger(udg_hashtable_s__OrbStacking__UnitOrb_AutoData___ht, udg_int_array_s__OrbStacking__UnitOrb_AutoData___id[( o )], ( udg_int_array_s__OrbStacking__UnitOrb_index[o] + 1 )) )
 
You are setting local variable 'o' to a hashtable integer lookup. However, you pass arrays that use 'o' as an index as the child and parent keys. 'o' was not set to any value prior to this statement.

JASS:
set o=( LoadInteger(udg_hashtable_s__OrbStacking__UnitOrb_AutoData___ht, udg_int_array_s__OrbStacking__UnitOrb_AutoData___id[( o )], ( udg_int_array_s__OrbStacking__UnitOrb_index[o] + 1 )) )
So basically, should I just set variable 'o' to 0 or 1? I just feel like that would give me incorrect data.
 
the error log points out to the issue: Variable o is uninitialized.
You do this:
JASS:
local integer o
set o=( LoadInteger(udg_hashtable_s__OrbStacking__UnitOrb_AutoData___ht, udg_int_array_s__OrbStacking__UnitOrb_AutoData___id[( o )], ( udg_int_array_s__OrbStacking__UnitOrb_index[o] + 1 )) )
You are using o as array index (i.e. "AutoData___id[( o )]") but at that time it has no value

Just do this?
Code:
local integer o = 0
 
the error log points out to the issue: Variable o is uninitialized.
You do this:
JASS:
local integer o
set o=( LoadInteger(udg_hashtable_s__OrbStacking__UnitOrb_AutoData___ht, udg_int_array_s__OrbStacking__UnitOrb_AutoData___id[( o )], ( udg_int_array_s__OrbStacking__UnitOrb_index[o] + 1 )) )
You are using o as array index (i.e. "AutoData___id[( o )]") but at that time it has no value

Just do this?
Code:
local integer o = 0
Thanks, it worked! I just found it weird that I didn't have to enter this before.
 
Back
Top