diff options
Diffstat (limited to 'npc/functions/RNGesus.txt')
-rw-r--r-- | npc/functions/RNGesus.txt | 87 |
1 files changed, 0 insertions, 87 deletions
diff --git a/npc/functions/RNGesus.txt b/npc/functions/RNGesus.txt deleted file mode 100644 index 7224977c..00000000 --- a/npc/functions/RNGesus.txt +++ /dev/null @@ -1,87 +0,0 @@ -// Evol functions. -// Authors: -// gumi -// jesusalva -// Description: -// Randomization helper functions. - -// pseudo-fix randomness -// rand2( min, max ) -function script rand2 { - if (getargcount() == 2) { - .@min=getarg(0)*100; - .@max=getarg(1)*100+99; - } else { - .@min=0; - .@max=getarg(0)*100-1; - } - return rand(.@min, .@max)/100; -} - - - -// any(<arg>{, ...<arg>}) -// returns one argument randomly - -function script any { - return getarg(rand2(getargcount())); -} - - - -// any_of(<array>) -// returns any member of the array - -function script any_of { - return getelementofarray(getarg(0), getarrayindex(getarg(0)) + rand2(getarraysize(getarg(0)) - getarrayindex(getarg(0)))); -} - - - -// relative_array_random(<array: 0, {[value, probability]..}>) -// returns a random entry from the array, by relative probability -// the first key of the array should be 0 and every entries are a tuple -// of [value, probability] - -function script relative_array_random { - .@is_str = getdatatype(getarg(0)) & DATATYPE_STR; - .@total_prob = getelementofarray(getarg(0), 0); - .@initial_index = getarrayindex(getarg(0)); - .@initial_index = .@initial_index ? .@initial_index : 1; - freeloop(true); - - if (.@total_prob < 1 || getarg(1, false)) - { - // first calculation, or forced re-calculation - .@total_prob = 0; - .@size = getarraysize(getarg(0)); - - for (.@i = .@initial_index + 1; .@i < .@size; .@i += 2) { - if (.@is_str) { - .@total_prob += max(1, atoi(getelementofarray(getarg(0), .@i))); - } else { - .@total_prob += max(1, getelementofarray(getarg(0), .@i)); - } - } - - // we cache on the first key - set(getelementofarray(getarg(0), 0), .@total_prob); - } - - .@target_sum = rand2(0, .@total_prob); - - for (.@i = .@initial_index; .@sum < .@target_sum; .@i += 2) { - if (.@is_str) { - .@sum += atoi(getelementofarray(getarg(0), .@i + 1)); - } else { - .@sum += getelementofarray(getarg(0), .@i + 1); - } - - if (.@sum >= .@target_sum) { - break; - } - } - - freeloop(false); - return getelementofarray(getarg(0), .@i); -} |