Question about array size of an Integer variable

MP®

Member
Reaction score
11
Hey I just discovered that when you have an integer variable with array size 1, you can still use for example "IntegerVar[2]" or [3] etc etc.. I always thought that when you want more layers, you need a bigger array size? How can this be possible? Can someone explain this to me? :)
 

jnZ

I
Reaction score
64
it doesnt matter at all which size you select for an array.

that only affects the variable initialization in the map script.
 

MP®

Member
Reaction score
11
What do you mean with the variable initialization in the map script?
 

Accname

2D-Graphics enthusiast
Reaction score
1,462
The array size doesnt matter for any "simple" variable kinds like integer, strings, units, etc.

The only instances in which it does matter are variables which need to be initialized before you can properly use them.
For example, unit groups.

If you have a unit group array variable, lets call it Temp_Group[] and you set its array size to 1, then you can still do:
Code:
set Temp_Group[5] = All units of Type SOME_UNIT_TYPE
However, you can NOT do:
Code:
Unit Group - Add SOME_UNIT to Temp_Group[5]
Because there is no unit group at position 5. It wasnt initialized.

But you can do:
Code:
set Temp_Group[5] = All units of Type (unit type of No Unit)
Code:
Unit Group - Add SOME_UNIT to Temp_Group[5]
Because in the first line you create an empty group with no units inside, and set it to be the Temp_Group[5] and in the second line you can then add units to this group as if it was initialized.

But if you set the array size to be at least 6 right from the beginning you could just add units to the group regardless. (unless you have destroyed it at some other point in time.)
 

jnZ

I
Reaction score
64
you know the default value you can select when creating variables right? basically when you create a regular integer variable called TESTINT with the default value (0), a line in the mapscript is "set udg_TESTINT = 0" obviously if you change the default value to 1 it would say "set udg_TESTINT = 1".

So when you create an integer array with the size of 6 and default value 1 the following lines appear in the mapscript

set i = 0
loop
exitwhen i > 5
set udg_TESTINT = 1
set i = i + 1
endloop

as you can see, by setting the array size TESTINT [0] to TESTINT[5] will be set to 1
 

Happy

Well-Known Member
Reaction score
71
It's like Accname said...but beside from that it not good to set all array variables to the highest amount possible because 1. the loading time gets longer and 2. if your size of all arrays exceed a certain limit all your triggers dont work anymore.
 

MP®

Member
Reaction score
11
Ok thank you very much all, that is pretty clear!

So just to be sure: I can just set all array sizes of Integer Variables (which I use A LOT) to 1? And it will automatically create more layers when needed?

And if I have like 12 players and I use array size 1, It will eventually create a size of 12 when I use Array = Number of Player? So It eventually becomes the same as when I at initialization already have 12 by setting the array size?
 

vypur85

Hibernate
Reaction score
803
In short, Integer is fine if you don't set anything.

Unit group, Player group, and Timer are few examples that require specific array value upon initialisation.
 
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