Example #1
0
 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);
 }
Example #2
0
 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");
 }
Example #3
0
 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;
 }