public function random_task($random_val, $all_random_task = null, $order) { if (is_null($all_random_task)) { $all_random_task = Cache_TaskRandom::getInstance()->get_task_random_info(); } if ($random_val) { $has_keys = array_keys($random_val); } else { $has_keys = array(); } $now_time = time(); $rand_keys = array(); foreach ($all_random_task as $key => $val) { if (!in_array($val['sid'], $has_keys)) { $rand_keys[$key] = $val['respawn_weight']; } } if ($rand_keys) { $key = Com_Random::get_probability_key($rand_keys); $quality_weight = array(); for ($i = 1; $i <= 5; $i++) { $q_key = 'quality_weight' . $i; $quality_weight[$i] = $all_random_task[$key][$q_key]; } $quality = Com_Random::get_probability_key($quality_weight); $due_time = $all_random_task[$key]['duration'] + $now_time; return $this->get_data('PlayerTask')->format_random_task_val($all_random_task[$key]['sid'], 1, $quality, $due_time, $order); } return array(); }
public function trigger_random_task($player_id, $target_type, $target_id, $add_num, $arr_player_task = null) { // Com_Log::write("trigger_random_task.".$player_id,"target_type:{$target_type} target_id:{$target_id} add_num:{$add_num}"); if (is_null($arr_player_task) || !isset($arr_player_task['random_val'])) { $arr_player_task = $this->get_data('PlayerTask')->get_task_info($player_id, array('random_val', 'random_refresh_time')); } $up = false; if (!empty($arr_player_task['random_val'])) { #加了个判断 foreach ($arr_player_task['random_val'] as $val) { $random_task_config = Cache_TaskRandom::getInstance()->get_task_random_info($val['task_id']); if ($random_task_config['type'] == $target_type && $target_id == $random_task_config['condition']) { $arr_player_task['random_val'][$val['task_id']]['cur_num'] += $add_num; if ($arr_player_task['random_val'][$val['task_id']]['cur_num'] >= $random_task_config['comp_times']) { $arr_player_task['random_val'][$val['task_id']]['task_status'] = 2; $arr_player_task['random_val'][$val['task_id']]['cur_num'] = $random_task_config['comp_times']; } $up = true; } } if ($up) { $result = $this->get_data('PlayerTask')->set_task_info($player_id, array('random_val' => $arr_player_task['random_val'])); if ($result) { $data = $this->get_game('TaskRandom')->get_task_random_list($player_id, $arr_player_task); if (!IS_FRONT || defined('FROM_GATEWAY')) { $cmd0 = 8; } else { $cmd0 = 3; } // Com_Log::write("trigger_random_task.".$player_id,var_export($data,true)); Protocol::input($player_id, $cmd0, 10, 1022, $data); Protocol::out(); } } } }