Welcome to the Second Life Forums Archive

These forums are CLOSED. Please visit the new forums HERE

L$1000 to the first who whites this script for me

Kain Cleaver
Registered User
Join date: 24 Jan 2006
Posts: 178
06-21-2007 12:18
I need a Random Number Generator.

I need it to pick 20 numbers. 1 - 20. and every number must be different

so in otherwords i need it to scramble the numbers 1 - 20 in a different order

and then when its all over i need it to say each number in the order it was selected

so make it be like

a = 5
b = 19
c = 12
ect

and then llSay(0, a);
llSay (0,b);

you get the idea...

but the numbers must be scrambled first and placed in a - t integers


please someone?
Milambus Oh
Registered User
Join date: 6 Apr 2007
Posts: 224
06-21-2007 12:49
Can't get in world to test it but this should work:

CODE

list numbers = [];

randomizeList() {
list newNumbers = [];
integer newIndex = 0;

integer count = llGetListLength(numbers);

while (count > 0) {
integer count = llGetListLength(numbers);
integer pos = llFloor(llRound(count - 1));

integer theNum = llList2Integer(numbers, pos);

newNumbers = (newNumbers=[]) + newNumbers + [theNum];
numbers = llDeleteSubList(numbers, pos, pos);

count = llGetListLength(numbers);
}

numbers = newNumbers;
}

sayList() {
int i = 0;
integer count = llGetListLength(numbers);
for (i = 0; i < count; i++) {
llOwnerSay("The number in position " + i " + " is " + llList2Integer(numbers, i));
}
}

default {
state_entry() {
numbers = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20];
}

touch_start(integer num_detected) {
randomizeList();
sayList();

}
}
Buffy Wilder
Registered User
Join date: 12 Jan 2007
Posts: 16
06-21-2007 13:01
The list of numbers doesn't have to be in any order to start with (nor do they have to be 1 to 20 (any order and any number of numbers is catered for)

Buffy

list theList = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20];

integer randInt(integer n,list notAllowed)
{
integer rand;

do
{
rand = (integer)llFrand(n + 1);
}
while(llListFindList(notAllowed,[rand]) != -1);

return rand;
}

list shuffle(list list2Shuffle)
{
list shuffledList = [];
list shuffleOrder = [];
integer i = 0;

for (i = 0; i < llGetListLength(list2Shuffle);i++)
{
integer shuffle = randInt(llGetListLength(list2Shuffle) - 1,shuffleOrder);
shuffleOrder += shuffle;
}

for (i = 0; i < llGetListLength(list2Shuffle);i++)
{
integer nextIndex = llList2Integer(shuffleOrder,i);
integer nextValue = llList2Integer(list2Shuffle,nextIndex);
shuffledList += nextValue;
}

return shuffledList;
}

default
{
state_entry()
{}

touch_start(integer total_number)
{
list shuffledList = shuffle(theList);
integer i = 0;

for (i = 0;i < llGetListLength(shuffledList);i++)
{
integer next = llList2Integer(shuffledList,i);
llSay(0,(string)next);
}
}
}
Kain Cleaver
Registered User
Join date: 24 Jan 2006
Posts: 178
06-21-2007 13:02
I need the numbers to be seperated via integer. that part is important :(
Kain Cleaver
Registered User
Join date: 24 Jan 2006
Posts: 178
06-21-2007 13:04
im gonna be sending the interger number via linkmessage to other parts of the item. thats why they need to be listed as seperate integers
Buffy Wilder
Registered User
Join date: 12 Jan 2007
Posts: 16
06-21-2007 13:24
From: Kain Cleaver
im gonna be sending the interger number via linkmessage to other parts of the item. thats why they need to be listed as seperate integers


do you want to have the results of the list placed into integers named "a" "b" "c" etc ?

if so then use this code


list theList = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20 ];

integer randInt(integer n,list notAllowed)
{
integer rand;

do
{
rand = (integer)llFrand(n + 1);
}
while(llListFindList(notAllowed,[rand]) != -1);

return rand;
}

list shuffle(list list2Shuffle)
{
list shuffledList = [];
list shuffleOrder = [];
integer i = 0;

for (i = 0; i < llGetListLength(list2Shuffle);i++)
{
integer shuffle = randInt(llGetListLength(list2Shuffle) - 1,shuffleOrder);
shuffleOrder += shuffle;
}

for (i = 0; i < llGetListLength(list2Shuffle);i++)
{
integer nextIndex = llList2Integer(shuffleOrder,i);
integer nextValue = llList2Integer(list2Shuffle,nextIndex);
shuffledList += nextValue;
}

return shuffledList;
}

default
{
state_entry()
{}

touch_start(integer total_number)
{
list shuffledList = shuffle(theList);

integer a = llList2Integer(shuffledList,0);
integer b = llList2Integer(shuffledList,1);
integer c = llList2Integer(shuffledList,2);
integer d = llList2Integer(shuffledList,3);
integer e = llList2Integer(shuffledList,4);
integer f = llList2Integer(shuffledList,5);
integer g = llList2Integer(shuffledList,6);
integer h = llList2Integer(shuffledList,7);
integer i = llList2Integer(shuffledList,8);
integer j = llList2Integer(shuffledList,9);
integer k = llList2Integer(shuffledList,10);
integer l = llList2Integer(shuffledList,11);
integer m = llList2Integer(shuffledList,12);
integer n = llList2Integer(shuffledList,13);
integer o = llList2Integer(shuffledList,14);
integer p = llList2Integer(shuffledList,15);
integer q = llList2Integer(shuffledList,16);
integer r = llList2Integer(shuffledList,17);
integer s = llList2Integer(shuffledList,18);
integer t = llList2Integer(shuffledList,19);


}
}
Qie Niangao
Coin-operated
Join date: 24 May 2006
Posts: 7,138
06-21-2007 15:29
Hint: llListRandomize();
Elsewhere Essex
Registered User
Join date: 8 Sep 2006
Posts: 50
06-21-2007 16:46
From: Qie Niangao
Hint: llListRandomize();

lol, i was waiting for that.

basicly, the most important part for this script and the object as a whole to work is the link order for the prims using these numbers.

the prims using these numbers should be linked sequentially in reverse order so that as the script iterates through each list value, it can easily send the value to the prim that needs it.

list numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20];
integer first_link = 2; //set this to the link number of the first prim in the set to use the results
random_send() {
numbers = llListRandomize(numbers,1);
integer i = 0;
for (i = 0; i <= 19; i++) {
llMessageLinked((i + first_link), llList2Integer(i), "", NULL_KEY);
}
}


then just call that function how ever you want to activate it

sure there are other ways to identify the links that need the result other than thier link order, but this is most efficient with the least overhead
Buffy Wilder
Registered User
Join date: 12 Jan 2007
Posts: 16
06-21-2007 17:08
Well you learn something new everyday :-)

heres the low fat version of the random script (as Kain wanted it)

list theList = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20];

default
{
state_entry()
{}

touch_start(integer total_number)
{
theList = llListRandomize(theList,1);

integer a = llList2Integer(theList ,0);
integer b = llList2Integer(theList ,1);
integer c = llList2Integer(theList ,2);
integer d = llList2Integer(theList ,3);
integer e = llList2Integer(theList ,4);
integer f = llList2Integer(theList ,5);
integer g = llList2Integer(theList ,6);
integer h = llList2Integer(theList ,7);
integer i = llList2Integer(theList ,8);
integer j = llList2Integer(theList ,9);
integer k = llList2Integer(theList ,10);
integer l = llList2Integer(theList ,11);
integer m = llList2Integer(theList ,12);
integer n = llList2Integer(theList ,13);
integer o = llList2Integer(theList ,14);
integer p = llList2Integer(theList ,15);
integer q = llList2Integer(theList ,16);
integer r = llList2Integer(theList ,17);
integer s = llList2Integer(theList ,18);
integer t = llList2Integer(theList ,19);
}
}