# Functions and variables inside <<for>> loop

Hello.
I’m trying to randomly distribute stat points when on equipment roll.
I have 4 main parameters, and I want to randomly distribute 16 stat points between them. I also don’t want to repeat my code 16 times on my own. I think it’s possible to use `<<for>>` looping in this case, I just don’t know how to do it right.

I have that version, but It works wrong. “range is not a function”. So I need a function, or what?

``````<<set \$range(0,\$statpoints)>>

<<for _i to 0; _i lt \$range; _i++>>
<<set _dice to random(1,4)>>
<<if _dice eq 1>>
<<set \$clothingloot.sub++>>
<<elseif _dice eq 2>>
<<set \$clothingloot.int++>>
<<elseif _dice eq 3>>
<<set \$clothingloot.fit++>>
<<elseif _dice eq 4>>
<<set \$clothingloot.att++>>
<</if>>
<</for>>
``````

`<<set \$range(0,\$statpoints)>>`
SugarCube thinks this is a function. And since \$range is not a function, it’s giving you an error.`

What are you trying to do with this? get a random number between 0 and the \$statpoitns value?
If the latter:
`<<set \$range to random(0,\$statpoints)>>`

1 Like

0 is 0, `\$statpoints` is a variable with the number of stat points. My idea was to make an array from 0 to `\$statpoints`, which is eq to 16 in this case. Because I need all 16 steps, 16points=16 steps (0,1,2,3,4,5…15,16).

Maybe I just don’t know how to make an array from 0 to variable’s value…

An array is set with these brackets `[]` instead of parentheses.

But you could just do:
`<<for _i to 0; _i lt \$statpoints ; _i++>>`
There no real need for an array in this case. This will loop until _i reaches the value of \$statpoints.

1 Like

lol, it just works. I think I finally got how looping works Thanks 1 Like