public function get_daily_task_reward($player_id, $player_info = null, $task_star_acc = 9, $is_throw_error = 0) { if (empty($player_info)) { $player_info = $this->get_data('Player')->get_player_info($player_id, array('level', 'vip', 'privilege_level')); } # 获取奖励信息 $reward = array(); $award_info = Cache_TaskDaily::getInstance()->get_task_daily_award($player_info['level']); $award_add_info = Cache_TaskDaily::getInstance()->get_task_daily_award_add($task_star_acc); if (empty($award_info) || empty($award_info['reward_base']) || empty($award_add_info)) { if ($is_throw_error) { $this->throw_error('10014'); } else { return array(); } } # 获取vip对奖励的加成信息,只加成非道具奖励 $vip_add_coeff = Com_Util::get_vip_special_reward_add_coeff(10062, $player_info['vip'], $player_info['privilege_level'], $player_id); # 基础奖励,正常情况下$award_info['reward_base']不包含道具奖励 #$coeff = (1 + $award_add_info['add_ratio'] / 10000) * (1 + $vip_add_coeff); $coeff = $award_add_info['add_ratio'] / 10000 * (1 + $vip_add_coeff); $reward_detail_base = $this->get_game('Reward')->get_reward_detail($award_info['reward_base'], $coeff); $this->get_game('Reward')->gen_reward_array($reward_detail_base, $reward); # 额外道具奖励,正常情况下$award_add_info['reward_item']不包含虚拟资源奖励 if (!empty($award_add_info['reward_item'])) { $reward_detail_add = $this->get_game('Reward')->get_reward_detail($award_add_info['reward_item'], 1); $this->get_game('Reward')->gen_reward_array($reward_detail_add, $reward); } # 记录行为 Com_Log::write('xgame.taskhandler', "{$player_id}\t" . "get_daily_task_reward\t" . "{$player_info['level']}\t" . "{$vip_add_coeff}\t" . "{$coeff}\t" . json_encode($award_info['reward_base']) . "\t" . json_encode($reward_detail_base) . "\t" . json_encode($reward_detail_add) . "\t" . json_encode($reward) . "\t"); return array($reward, $award_add_info); }
public function get_expired_challenge_rank_reward($player_id) { return; # # 获取玩家信息,排位信息 $player_info = $this->get_data('Player')->get_player_info($player_id); $player_rank_info = $this->get_data('Challenge')->get_player_challenge_rank_info($player_id); if (empty($player_rank_info) || empty($player_rank_info['mod_date']) || empty($player_rank_info['challenge_status'])) { return false; } $player_latest_reward_time = $player_rank_info['latest_reward_time']; $player_reg_date = $player_rank_info['reg_date']; # 入榜时间 $this->start_trans(); $fetch_flag = false; # 是否有补发排位奖的标识 $reward_log_array = array(); # 奖励领取日志 $mail_array = array(); # 邮件数组 for ($i = 1; $i <= $this->challenge_rank_reward_backtrace; $i++) { # 往前回溯不超过15天 $previous_day_reward_time = $this->challenge_reward_time - 86400 * $i; # 前一天天梯排位奖励结算时间点 if ($player_latest_reward_time < $previous_day_reward_time && $player_reg_date <= $previous_day_reward_time) { # 最后领奖时间小于前一天奖励结算时间点时,补发排位奖励 $base_rank = $this->get_player_real_base_rank($player_id, $player_info['reg_time'], $player_rank_info, $previous_day_reward_time); # 获取排位奖励基准排位 if (empty($base_rank)) { break; } # 没有挑战记录 # 获取vip对奖励的加成信息,只加成非道具奖励 $vip_add_coeff = Com_Util::get_vip_special_reward_add_coeff(10064, $player_info['vip'], $player_info['privilege_level'], $player_id); # 获取排位基础奖励与排位基础奖励加成 $award_rank = Cache_Ladder::getInstance()->get_ladder_award_rank_info($player_info['level']); $award_rank_add = Cache_Ladder::getInstance()->get_ladder_award_rank_add_info($base_rank); if (empty($award_rank) || empty($award_rank_add) || empty($award_rank['award_info'])) { continue; # 没有排位奖励配置信息 } # 生成奖励邮件附件信息 $attachment = array(); /** $coeff = (0 + $award_rank_add['rank_add'] / 10000) * (1 + $vip_add_coeff); $reward_detail = $this->get_game('Reward')->get_reward_detail($award_rank['award_info'], $coeff); **/ $reward_detail = $this->get_game('Reward')->get_reward_detail_other_way($award_rank['award_info'], $award_rank_add['rank_add'], 1); foreach ($reward_detail as $item_idx => $item_num) { $attachment[] = array("prop_id" => $item_idx, "prop_num" => $item_num); } # 邮件发送 $day = date("n.j", $previous_day_reward_time); $hour = date("G:i", $previous_day_reward_time); $phrase_config = Cache_FuncPhraseConfig::getInstance()->get_phrase_config_info(2); $content = sprintf($phrase_config['content'], $day, $hour, $base_rank); $mail_array[] = array('player_id' => $player_id, 'title' => $phrase_config['title'], 'content' => $content, 'attachment' => $attachment, 'sender' => $phrase_config['sender']); # 记录奖励发送日志 $reward_log_array[] = array('player_id' => $player_id, 'reward_time' => $previous_day_reward_time, 'reg_date' => $this->current_time, 'rank' => $base_rank, 'reward_info' => "'" . json_encode($reward_detail) . "'", 'status' => 0); $fetch_flag = true; } else { break; } } # 记录奖励发送日志 if (!empty($reward_log_array)) { $re = $this->get_data('Challenge')->multi_record_challenge_reward($reward_log_array); $this->write_check($re, 3011335); } # 更新玩家最后一次排位奖励领取时间为当前登录时间 if ($fetch_flag) { $player_rank_info['latest_reward_time'] = $this->current_time; $re = $this->get_data('Challenge')->update_challenge_rank_info($player_rank_info); $this->write_check($re, 3011343); } $this->commit(); # commit后处理异步,确保事务失败时不会已经发送邮件 if (!empty($mail_array)) { foreach ($mail_array as $mail) { $re = $this->get_game('Mail')->async_trigger_mail($mail['player_id'], $mail['title'], $mail['content'], $mail['attachment'], $mail['sender'], 1, 109); $this->write_check($re, 3011352); } } # 记录行为 Com_Log::write('xgame.challenge', "{$player_id}\t" . "get_expired_challenge_rank_reward\t" . json_encode($mail_array) . "\t"); }
public function get_grabmine_reward($player_id, $player_info = null, $map_id = 4041, $rank = 15, $is_throw_error = 0) { if (empty($player_info)) { $player_info = $this->get_data('Player')->get_player_info($player_id, array('level', 'vip', 'privilege_level')); } # 获取排名奖励列表,已按排名排好序 $rank_reward_list = Cache_GrabMine::getInstance()->get_rank_reward_list($map_id); if (empty($rank_reward_list)) { if ($is_throw_error) { $this->throw_error('180003'); # 抢矿副本排位奖励信息配置错误 } else { return array(); } } $rank_reward_omit = $rank_reward_list[count($rank_reward_list) - 1]; # 超过已配置最大排位的奖励,使用最大排位计算 $rank_reward_info = empty($rank_reward_list[$rank - 1]) ? $rank_reward_omit : $rank_reward_list[$rank - 1]; # 获取vip对奖励的加成信息,只加成非道具奖励 $vip_add_coeff = Com_Util::get_vip_special_reward_add_coeff(10036, $player_info['vip'], $player_info['privilege_level'], $player_id); # 获取基础奖励信息 $base_reward_info = Cache_GrabMine::getInstance()->get_base_reward_info($player_info['level']); if (empty($base_reward_info) || empty($base_reward_info['base_reward'])) { if ($is_throw_error) { $this->throw_error('180005'); # 抢矿副本基础奖励信息配置错误 } else { return array(); } } $reward = array(); $reward_detail_base = $this->get_game('Reward')->get_reward_detail_other_way($base_reward_info['base_reward'], $rank_reward_info['reward_add'], 1); $this->get_game('Reward')->gen_reward_array($reward_detail_base, $reward, 1 + $vip_add_coeff); $reward_detail_rank = $this->get_game('Reward')->get_reward_detail($rank_reward_info['reward_item'], 1); $this->get_game('Reward')->gen_reward_array($reward_detail_rank, $reward); return $reward; }