no repeat random

Post your scripting questions / solutions here

Moderator: Moderators

Post Reply
User avatar
ViPER
General
Posts: 1058
Joined: Fri Jan 14, 2005 5:48 pm
Location: California
Contact:

no repeat random

Post by ViPER »

i have an array of 10 items that i access randomly.

Code: Select all

level.mylist = makeArray
"one" "1"
"two" "2"
"three" "3"
"four" "4"
"five" "5"
"six" "6"
"seven" "7"
"eight" "8"
"nine" "9"
"ten" "10"
endArray
how can i make so they do not repeat untill all 10 have been accessed ? the second time around can be the same random order or a new random order it doesnt matter.
lizardkid
Windows Zealot
Posts: 3672
Joined: Fri Mar 19, 2004 7:16 pm
Location: Helena MT

Post by lizardkid »

make a new list every time you take a number; it's how other scramblers do it.

You have the array of numbers. let's say it has 10 of them. You make a loop to take a random number from it and do something with it. Then you make a new list that holds the 9 remaining numbers. Store this list under the name of the list that had the original 10 numbers, and continue. So sorta like this in psueducode.

Code: Select all

//level.mylist has the numbers already.

local.number = level.mylist[random(0 to mylist.length)]

//do stuff with local.number

for(local.i = 0, local.i < mylist.length, local.i++)
    if(local.i == local.number)
        continue
    else
        local.list2[i] = level.mylist[i]
Moderator

۞
Abyssus pro sapientia
Olympus pro Ignarus
۞

AND STUFF™ © 2006
User avatar
bdbodger
Moderator
Posts: 2596
Joined: Tue Feb 25, 2003 7:34 am
Location: canada
Contact:

Post by bdbodger »

To access your list you use level.mylist[1][1] for the first item "one" and level.mylist[1][2] for the "1" so add a third value level.mylist[1][3] and make a 0 when it is used make it a 1

Code: Select all

Random_test: 

level.mylist = makeArray 
"one" "1" 0
"two" "2" 0
"three" "3" 0
"four" "4" 0
"five" "5" 0
"six" "6" 0
"seven" "7" 0
"eight" "8" 0
"nine" "9" 0
"ten" "10" 0
endArray

level.numbers = 10 

for(local.i = 1;local.i<= 10;local.i++) 
{ 
      local.num = waitthread picknum 

      iprintln_noloc "The number is " local.num 

     waitframe 
} 

end 

picknum: 

local.check = 1 

while(local.check == 1) 
{ 

   local.random = randomint(level.mylist.size)+1 
   local.check = level.mylist[local.random][3] 

   if(local.check == 0) 
   { 
      level.mylist[local.random][3] = 1 

      level.numbers-- 

      if(level.numbers == 0) 
      { 
            for(local.i=1;local.i <= 10;local.i++) 
            { 
                 level.mylist[local.i][3] = 0 
             } 

             level.numbers = 10 
      } 
   } 

} 

end level.mylist[local.random][1] // or level.mylist[local.random][2]

The result
LOCALIZATION ERROR: 'Press Use(f) to follow a player.' does not have a localization entry
The number is ten
The number is five
The number is eight
The number is seven
The number is one
The number is nine
The number is six
The number is three
The number is two
The number is four
----- Server Shutdown -----
Resets it's self when all the numbers have been used
Image
User avatar
ViPER
General
Posts: 1058
Joined: Fri Jan 14, 2005 5:48 pm
Location: California
Contact:

Post by ViPER »

Thanks guys,

This is for the domination mod, I think im going with Bodger's method but unfortuneatley I dont have time to get it in the release with proper testing and everything, so i will work it in a later update script.
Post Reply