Returns Index of a pre-assigned Probability-Option

BlitzPlus Forums/BlitzPlus Tutorials/Returns Index of a pre-assigned Probability-Option

This is kinda hard to explain for a non-native speaker, but I'll try anyway; maybe someone can use this Function, too.

Say, you're programming an RPG-Game and you repeatedly want to check, whether certain events with different probabilites are about to happen. For example, you'll want to create a couple of Unique, Rare and Common Items, and that certain Unique Sword of Fate should occur much more scarcely then a common Famer's Shovel. Of course.

Now this neat little Function can be assigned certain fields of probabilites (a maximum of 10), then it rolls a dice within the range of 1 and all added fields, and finally returns the index, in which field the number occured. The Function can return a maximum of 10 Index-Numbers.

```Dim z_chance(10) ;Maximum of Probabilty-Fields
Dim iReturn(10) ; Maximum of returned Numbers

; Initialize a 33% Chance, returns one Number:
Perchance(20,20,20,0,0,0,0,0,0,0,1)

; Initialize a 10 / 20 / 30 / 40% Chance, returns one Number:
Perchance(1,2,3,4,0,0,0,0,0,0,1)

; Initialize a 0.1 / 5 / 10% Chance (Remainder 84.9%), returns 4 Numbers:
Perchance(1,50,100,849,0,0,0,0,0,0,4)

Function Perchance(z_chance1,z_chance2,z_chance3,z_chance4,z_chance5,z_chance6,z_chance7,z_chance8,z_chance9,z_chance10,z_nr)
Local zMax = 0
Local z0
Local zDice

z_chance(1) = z_chance1
z_chance(2) = z_chance2
z_chance(3) = z_chance3
z_chance(4) = z_chance4
z_chance(5) = z_chance5
z_chance(6) = z_chance6
z_chance(7) = z_chance7
z_chance(8) = z_chance8
z_chance(9) = z_chance9
z_chance(10) = z_chance10

For a = 1 to z_nr
iReturn(a) = 0
Next

z0 = 11
For a = 1 To 10
If z_chance(a) > 0
zMax = zMax + z_chance(a)
Else
z0 = a
EndIf
Next

For nr = 1 To z_nr
zDice = Rand(1,zMax)