コード例 #1
0
ファイル: BetaTestReward.php プロジェクト: bluefan/phpsource
 public function sync($data)
 {
     $arr_account = file_get_contents(CACHE_PATH . "/server3.txt");
     $arr_account = json_decode($arr_account, true);
     $player_id = $data['player_id'];
     $user_account = $data['user_account'];
     if (!$player_id || !$user_account) {
         return;
     }
     if (isset($arr_account[$user_account])) {
         if ($arr_account[$user_account]['level'] >= 55) {
             // 生成奖励邮件附件信息
             $attachment = array();
             $attachment[] = array("prop_id" => 95015, "prop_num" => 1);
             // 邮件发送
             $phrase_config = Cache_FuncPhraseConfig::getInstance()->get_phrase_config_info(8005);
             $re = $this->get_game('Mail')->async_trigger_mail($player_id, $phrase_config['title'], $phrase_config['content'], $attachment, $phrase_config['sender'], 1, 108);
             $this->write_check($re);
             Protocol::out();
         }
         if ($arr_account[$user_account]['sum_fpower'] >= 80000) {
             // 生成奖励邮件附件信息
             $attachment = array();
             $attachment[] = array("prop_id" => 95014, "prop_num" => 1);
             // 邮件发送
             $phrase_config = Cache_FuncPhraseConfig::getInstance()->get_phrase_config_info(8006);
             $re = $this->get_game('Mail')->async_trigger_mail($player_id, $phrase_config['title'], $phrase_config['content'], $attachment, $phrase_config['sender'], 1, 108);
             $this->write_check($re);
             Protocol::out();
         }
     }
 }
コード例 #2
0
ファイル: InterTestReward.php プロジェクト: bluefan/phpsource
 public function sync($data)
 {
     $arr_account = file_get_contents(CACHE_PATH . "/server1.txt");
     $arr_account = json_decode($arr_account, true);
     $player_id = $data['player_id'];
     $user_account = $data['user_account'];
     $career_type = $data['career_type'];
     if (!$player_id || !$user_account || !in_array($career_type, array(3, 4))) {
         return;
     }
     if (isset($arr_account[$user_account])) {
         //登录过1服的玩家
         # 生成奖励邮件附件信息
         $attachment = array();
         switch ($career_type) {
             case 3:
                 $fashion_id = 93001;
                 $weapon_id = 93002;
                 break;
             case 4:
                 $fashion_id = 94001;
                 $weapon_id = 94002;
                 break;
             default:
                 return;
                 break;
         }
         $attachment[] = array("prop_id" => 4, "prop_num" => 4000);
         $attachment[] = array("prop_id" => $weapon_id, "prop_num" => 100);
         $attachment[] = array("prop_id" => $fashion_id, "prop_num" => 100);
         $attachment[] = array("prop_id" => 54001, "prop_num" => 1);
         $attachment[] = array("prop_id" => 95014, "prop_num" => 1);
         # 邮件发送
         $phrase_config = Cache_FuncPhraseConfig::getInstance()->get_phrase_config_info(8001);
         $re = $this->get_game('Mail')->async_trigger_mail($player_id, $phrase_config['title'], $phrase_config['content'], $attachment, $phrase_config['sender'], 1, 108);
         $this->write_check($re);
         $level = $arr_account[$user_account];
         if ($level >= 45) {
             //1服45级以上的
             $attachment = array();
             if ($level >= 60) {
                 $attachment[] = array("prop_id" => 95015, "prop_num" => 1);
                 $attachment[] = array("prop_id" => 20, "prop_num" => 4000);
                 $pc_id = 8004;
             } elseif ($level >= 55) {
                 $attachment[] = array("prop_id" => 95015, "prop_num" => 1);
                 $attachment[] = array("prop_id" => 20, "prop_num" => 3000);
                 $pc_id = 8003;
             } else {
                 $attachment[] = array("prop_id" => 20, "prop_num" => 2000);
                 $pc_id = 8002;
             }
             # 邮件发送
             $phrase_config = Cache_FuncPhraseConfig::getInstance()->get_phrase_config_info($pc_id);
             $re = $this->get_game('Mail')->async_trigger_mail($player_id, $phrase_config['title'], $phrase_config['content'], $attachment, $phrase_config['sender'], 1, 108);
             $this->write_check($re);
         }
     }
 }
コード例 #3
0
ファイル: PackageCode.php プロジェクト: bluefan/phpsource
 /**
  * @Purpose:
  * 老用户指定道具奖励
  * @param $player_id 玩家ID
  */
 public function send_old_account_login_reward($player_id, $user_account, $session_id)
 {
     $player_id = intval($player_id);
     $time = mktime(23, 59, 59, 5, 19, 2015);
     #用户是否可以获取道具
     $is_send = $this->CheckAccount($player_id, $time, $user_account, $session_id);
     if ($is_send) {
         $phrase_config = Cache_FuncPhraseConfig::getInstance()->get_phrase_config_info(8000);
         if ($phrase_config && !empty($phrase_config['title']) && !empty($phrase_config['content']) && !empty($phrase_config['sender'])) {
             #发送邮件
             $attachment = array();
             $attachment[] = array('prop_id' => '53001', 'prop_num' => 1);
             $this->get_game('Mail')->async_trigger_mail($player_id, $phrase_config['title'], $phrase_config['content'], $attachment, $phrase_config['sender'], 1, 8000);
         }
     }
 }
コード例 #4
0
ファイル: KFDuel.php プロジェクト: bluefan/phpsource
 /**
  * 战斗结算
  * @param $group 地图id
  * @param $role_id 角色id
  * @param $is_win 是否胜利
  * @param $is_send_mail 是否发邮件
  * @param $opp_name 对手名字
  * @return null 
  */
 public function game_over($group, $role_id, $is_win, $is_send_mail, $opp_player_id, $opp_name, $opp_server_id, $rank_list = array(), $my_team_id, $friend)
 {
     //Com_Log::write('zzzwanghui',json_encode($rank_list));
     //Com_Log::write('zzzwanghui',$group.'-'.$role_id.'-'.$is_win.'-'.$is_send_mail.'-'.$opp_player_id.'-'.$opp_name.'-'.$opp_server_id);
     if (!in_array($group, array(1, 2, 3))) {
         return false;
     }
     $sid = $this->_map_ids[$group - 1];
     $player_info = $this->get_data('Player')->get_player_info($role_id, array('player_id', 'union_name', 'career_type', 'name', 'level', 'vip', 'privilege_level', 'sum_fpower', 'kf_score'));
     if (empty($player_info) || empty($player_info['player_id'])) {
         return false;
     }
     $player_id = $role_id;
     $settle_date = Cache_CrossDuel::getInstance()->get_settle_time();
     $my_duel_info = $this->get_data('KFDuel')->get_kf_duel_info($player_id, $settle_date);
     $old_rank = $this->get_cross('KFDuel')->get_my_rank($player_id, $settle_date);
     $front_score = $my_duel_info['score'];
     $front_rank = $old_rank;
     $my_update = array();
     $multi = 1;
     $battle_config = Cache_CrossDuel::getInstance()->get_battle_conf($sid);
     $time = time();
     if ($time <= strtotime($battle_config['double_end_time']) && $time >= strtotime($battle_config['double_open_time'])) {
         $multi = 2;
     }
     $reward_conf = Cache_CrossDuel::getInstance()->get_battle_reward_conf($sid, $player_info['level']);
     if (!$reward_conf) {
         $this->throw_error(10222, 6010101);
     }
     $point = $reward_conf['point'];
     $win_reward = '';
     $arr_reward = explode('|', $reward_conf['reward']);
     if ($is_win) {
         $my_update['win'] = $my_duel_info['win'] + 1;
         $point = $point * $multi;
         $rewards = array();
         foreach ($arr_reward as $value) {
             $ar_re = explode(':', $value);
             $rewards[] = $ar_re[0] . ':' . intval($ar_re[1] * $multi);
         }
         $win_reward = implode('|', $rewards);
     } else {
         $my_update['win'] = 0;
         $point = intval($point * $multi / 2);
         $rewards = array();
         foreach ($arr_reward as $value) {
             $ar_re = explode(':', $value);
             $rewards[] = $ar_re[0] . ':' . intval($ar_re[1] * $multi / 2);
         }
         $win_reward = implode('|', $rewards);
     }
     $my_update['score'] = $my_duel_info['score'] + $point;
     $total_score = $my_duel_info['total_score'] + $point;
     if ($total_score > 2147483000) {
         $total_score = 2147483000;
     }
     $my_update['total_score'] = $total_score;
     $base_reward = $this->_basic_reward_currency . ':' . $point;
     if ($win_reward) {
         $base_reward .= '|' . $win_reward;
     }
     $my_fight_log = array('player_id' => $player_id, 'opp_player_id' => $opp_player_id, 'opp_name' => $opp_name, 'opp_server_id' => $opp_server_id, 'result' => $is_win, 'score' => $point);
     $out_reward = array('result' => $is_win, 'base_reward' => $base_reward, 'other_reward' => '');
     $send_reward = array();
     $reward_detail = $this->get_game('Reward')->get_reward_detail($base_reward);
     $this->get_game('Reward')->gen_reward_array($reward_detail, $send_reward);
     $this->start_trans();
     $result = $this->get_data('KFDuel')->set_kf_duel_info($player_id, $my_update);
     if ($result) {
         $result = $this->get_data('KFDuel')->add_fight_log($my_fight_log);
     }
     if ($result) {
         if ($send_reward) {
             if ($is_send_mail) {
                 //发邮件
                 $attachment = array();
                 foreach ($send_reward as $val) {
                     $attachment[] = array('prop_id' => $val['item_id'], 'prop_num' => $val['item_num']);
                 }
                 $phrase_config = Cache_FuncPhraseConfig::getInstance()->get_phrase_config_info(13);
                 $result = $this->get_game('Mail')->async_trigger_mail($player_id, $phrase_config['title'], $phrase_config['content'], $attachment, $phrase_config['sender'], 1, 1236);
             } else {
                 //直接发奖励
                 $result = $this->get_game('Reward')->send_reward($player_id, $send_reward, array('cmd_id' => 1236));
                 if ($result !== true) {
                     $this->throw_error($result, 6010099);
                 }
             }
         }
     }
     if ($result) {
         $this->commit();
         if (!$is_send_mail) {
             $this->get_game('Reward')->add_reward_log();
         }
         //存入排行
         $rank_data = array();
         $rank_data['player_id'] = $player_id;
         $rank_data['player_name'] = $player_info['name'];
         $rank_data['career_type'] = $player_info['career_type'];
         $rank_data['player_level'] = $player_info['level'];
         $rank_data['union_name'] = $player_info['union_name'];
         $rank_data['sum_fpower'] = $player_info['sum_fpower'];
         $rank_data['sid'] = $sid;
         $rank_data['server_id'] = SERVER_ID;
         $rank_data['server_name'] = SHOW_TITLE;
         $rank_data['score'] = $my_update['score'];
         $rank_data['reward_status'] = 0;
         $rank_data['update_time'] = time();
         $this->get_cross('KFDuel')->set_kf_duel_rank($player_id, $settle_date, $rank_data);
         //存入排行
         $new_rank = $this->get_cross('KFDuel')->get_my_rank($player_id, $settle_date);
         //$this->get_data('KFDuel')->set_kf_duel_info($player_id,array('rank'=>$new_rank));
         $total_rank_data = $rank_data;
         $total_rank_data['score'] = $my_update['total_score'];
         $this->get_cross('KFDuel')->set_kf_duel_total_rank($player_id, $total_rank_data);
         //存入总积分排行
         $out_reward['rank'] = $new_rank;
         $out_reward['total_score'] = $player_info['kf_score'] + $point;
         $out_reward['score'] = $my_update['score'];
         if ($rank_list) {
             foreach ($rank_list as &$list) {
                 //真恶心,C++干的事情!!!!
                 if ($list[0] == $player_id) {
                     $list[13] = $point;
                     $list[14] = $win_reward;
                     $damage = $list[2] ? $list[2] : 0;
                     $multi_kill = $list[9] ? $list[9] : 0;
                     $this->get_cross('KFDuel')->update_day_info($player_id, $is_win, $damage, $multi_kill);
                 } else {
                     $reward_conf = Cache_CrossDuel::getInstance()->get_battle_reward_conf($sid, $list[12]);
                     $arr_reward = explode('|', $reward_conf['reward']);
                     if ($my_team_id == $list[6]) {
                         //队友
                         if ($is_win) {
                             $list[13] = $reward_conf['point'] * $multi;
                             $rewards = array();
                             foreach ($arr_reward as $value) {
                                 $ar_re = explode(':', $value);
                                 $rewards[] = $ar_re[0] . ':' . intval($ar_re[1] * $multi);
                             }
                             $list[14] = implode('|', $rewards);
                         } else {
                             $list[13] = intval($reward_conf['point'] * $multi / 2);
                             $rewards = array();
                             foreach ($arr_reward as $value) {
                                 $ar_re = explode(':', $value);
                                 $rewards[] = $ar_re[0] . ':' . intval($ar_re[1] * $multi / 2);
                             }
                             $list[14] = implode('|', $rewards);
                         }
                     } else {
                         if ($is_win) {
                             $list[13] = intval($reward_conf['point'] * $multi / 2);
                             $rewards = array();
                             foreach ($arr_reward as $value) {
                                 $ar_re = explode(':', $value);
                                 $rewards[] = $ar_re[0] . ':' . intval($ar_re[1] * $multi / 2);
                             }
                             $list[14] = implode('|', $rewards);
                         } else {
                             $list[13] = $reward_conf['point'] * $multi;
                             $rewards = array();
                             foreach ($arr_reward as $value) {
                                 $ar_re = explode(':', $value);
                                 $rewards[] = $ar_re[0] . ':' . intval($ar_re[1] * $multi);
                             }
                             $list[14] = implode('|', $rewards);
                         }
                     }
                 }
             }
         }
         $out_reward['rank_list'] = $rank_list;
         $out_reward['my_team_id'] = $my_team_id;
         #添加好友亲密度
         $this->get_game('Athena')->add_firend_point($player_id, $friend);
         $this->get_game('PlayerAchieve')->async_trigger_achieve_target($player_id, 42, $new_rank, 3);
         $this->get_game('DailyBoon')->async_trigger_daily_boon_task($player_id, 3009, 1);
         //日志
         Log_KfDuel::getInstance()->add_kf_duel_log($player_id, $player_info['level'], $player_info['vip'], $player_info['privilege_level'], $my_update['score'], $new_rank, $front_score, $front_rank);
         if (!$is_send_mail) {
             //推奖励面板
             //Com_Log::write('zzzwanghui',json_encode($out_reward));
             Protocol::input($player_id, 8, 12, 1236, $out_reward);
         }
     } else {
         $this->rollback();
         $this->throw_error('10104', 6010100);
     }
     return $result;
 }
コード例 #5
0
ファイル: Athena.php プロジェクト: bluefan/phpsource
 public function send_mail_for_reward($player_id)
 {
     $player_id = intval($player_id);
     $get_rewards = $this->get_data('Athena')->get_player_reward($player_id);
     $phrase_config = Cache_FuncPhraseConfig::getInstance()->get_phrase_config_info(3);
     if (empty($get_rewards)) {
         return 0;
     }
     $temp = json_decode($get_rewards['rewards'], true);
     $content = sprintf($phrase_config['content'], $temp['waves']);
     if ($get_rewards['static'] == 0) {
         $attachment = array();
         if (empty($temp)) {
             return 1;
         }
         foreach ($temp as $v) {
             $attachment[] = array("prop_id" => $v['item_id'], "prop_num" => $v['item_num']);
         }
         $re = $this->get_game('Mail')->async_trigger_mail($player_id, $phrase_config['title'], $content, $attachment, $phrase_config['sender'], 1, 1114, 0);
         $this->write_check($re);
         $this->get_data('Athena')->update_player_reward_log($player_id, 2);
     }
     return 1;
 }
コード例 #6
0
ファイル: Challenge.php プロジェクト: bluefan/phpsource
 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");
 }
コード例 #7
0
 public function delay_send_reward($alarm_timer_params)
 {
     if (empty($alarm_timer_params) || empty($alarm_timer_params['param1']) || empty($alarm_timer_params['param2'])) {
         Com_Log::write('xgame.questionnaire', json_encode($alarm_timer_params));
     }
     $player_id = $alarm_timer_params['param1'];
     $questionnaire_id = $alarm_timer_params['param2'];
     $questionnaire_info = $this->get_data('ActivityQuestions')->get_questionnaire_info($questionnaire_id);
     if (empty($questionnaire_info) || empty($questionnaire_info['reward'])) {
         $this->throw_error('71610');
         # 获取问卷信息异常
     }
     # 判断是否已经领取过
     $reward_log = $this->get_data('ActivityQuestions')->get_questionnaire_reward_log($player_id, $questionnaire_id, 2);
     if (!empty($reward_log)) {
         $this->throw_error('71611');
         # 已领取过该问卷奖励
     }
     $rewards = json_decode($questionnaire_info['reward'], true);
     if (!empty($rewards['extra_reward'])) {
         /**
                     $this->start_trans();
         
         			$reward = array();
         			$reward_detail = $this->get_game('Reward')->get_reward_detail($rewards['extra_reward']);
         			$this->get_game('Reward')->gen_reward_array($reward_detail, $reward);
         			if(!empty($reward)){
         				$re = $this->get_game('Reward')->send_reward($player_id, $reward, array('cmd_id' => 796, 'bind_flag' => 0)); 
         				$this->write_check_strict($re, 3010354);
         			}
         
         			# 记录领奖日志
         			$reward_log = array(
         				'player_id' 		=> $player_id,
         				'questionnaire_id' 	=> $questionnaire_id,
         				'reward_type'		=> 2,
         				'reg_time' 			=> $this->current_time,
         				'reward_info' 		=> "'".json_encode($reward_detail)."'",
         			);
         			$re = $this->get_data('ActivityQuestions')->record_questionnaire_reward_log($reward_log);
         			$this->write_check($re, 3010366);
         
                     $this->commit();
         
         			$this->get_game('Reward')->add_reward_log();
         			**/
         # 生成奖励邮件附件信息
         $attachment = array();
         $reward_detail = $this->get_game('Reward')->get_reward_detail($rewards['extra_reward']);
         foreach ($reward_detail as $item_idx => $item_num) {
             $attachment[] = array("prop_id" => $item_idx, "prop_num" => $item_num);
         }
         # 邮件发送
         $phrase_config = Cache_FuncPhraseConfig::getInstance()->get_phrase_config_info(121);
         $re = $this->get_game('Mail')->async_trigger_mail($player_id, $phrase_config['title'], $phrase_config['content'], $attachment, $phrase_config['sender'], 1, 796, 0);
         $this->write_check($re, 3010382);
     }
     # 记录行为
     $params_json = json_encode($alarm_timer_params);
     Com_Log::write('xgame.questionnaire', "{$player_id}\t" . "delay_send_reward\t" . "{$questionnaire_id}\t" . "{$params_json}\t");
     return array('result' => 1);
 }
コード例 #8
0
ファイル: UnionSwim.php プロジェクト: bluefan/phpsource
 public function send_reward($guild_id, $rewards)
 {
     #Com_Log::write('nut','swim_reward='.json_encode($rewards));
     if (!empty($rewards)) {
         foreach ($rewards as $v) {
             $res = array();
             $res['sum_reward'] = array();
             #array('type'=>'exp','item_id'=>1,'item_num'=>($v[1]+$v[2]+$v[3]));           #总经验
             $res['crystal'] = array('type' => 'crystal', 'item_id' => 13, 'item_num' => $v[5] + $v[6] + $v[7]);
             $reward_list = array();
             #$reward_list[] =    $res['sum_reward'];
             $reward_list[] = $res['crystal'];
             if ($v[4] == 1) {
                 $result = $this->get_game('Reward')->send_reward($v[0], $reward_list, array('cmd_id' => '493', 'bind_flag' => 0), 1);
                 if ($result === true) {
                     $this->get_game('Reward')->add_reward_log();
                     //记录日志
                     Protocol::input($v[0], 8, 17, 1729, $res);
                 }
             } else {
                 $player_id = intval($v[0]);
                 $rewards = array(array("prop_id" => 13, "prop_num" => $res['crystal']['item_num']));
                 $phrase_config = Cache_FuncPhraseConfig::getInstance()->get_phrase_config_info(6);
                 if (empty($rewards)) {
                     return 0;
                 }
                 $content = $phrase_config['content'];
                 $re = $this->get_game('Mail')->async_trigger_mail($player_id, $phrase_config['title'], $content, $rewards, $phrase_config['sender'], 2, 493, 0);
                 $this->write_check($re);
             }
         }
     }
     return array('guild_id' => $guild_id);
 }
コード例 #9
0
ファイル: PlayerAchieve.php プロジェクト: bluefan/phpsource
 /**
  * 触发成就任务
  * @param unknown $player_id
  */
 public function trigger_achieve_target($data)
 {
     if (empty($data)) {
         return;
     }
     $data = json_decode($data, true);
     $player_id = $data["player_id"];
     $achieve_type = $data["achieve_type"];
     $trigger_val = $data["val"];
     $update_type = $data["update_type"];
     Com_Log::write('xgame.trigger_achieve_target', "{$player_id}---{$achieve_type}" . json_encode($data));
     $achieve_configs = Cache_AchieveConfig::getInstance()->get_achieve_config_by_type($achieve_type);
     $obj_player_counter = $this->get_data('PlayerAchieveCounter');
     $achieve_counter_type_progress = $obj_player_counter->get_player_achieve_counter_info($player_id, array("finish_title_ids", "task_type_progress"));
     $obj_player_only = $this->get_data('PlayerAchieveOnly');
     $objPlayerAchieve = $this->get_data('PlayerAchieve');
     $push_achieve_prompt1 = array();
     $push_achieve_prompt2 = array();
     $push_achieve_prompt3 = array();
     //2014-4-16是否添加过下一个要完成的值
     $is_added_next_target_val = 0;
     $push_prompt_title_id = 0;
     $push_prompt_achieve_id = 0;
     $finish_num = 0;
     $loot_times = 0;
     $achieve_counter_data = $obj_player_counter->get_player_achieve_counter_info($player_id, array("task_type_progress"));
     $player_achieve_data = $objPlayerAchieve->get_player_achieve_info($player_id);
     foreach ($achieve_configs as $achieve_config) {
         $loot_times++;
         $title_id = $achieve_config['title_id'];
         $achieve_id = $achieve_config['achieve_id'];
         #当前勋章下所有成就
         $player_achieve_info = $player_achieve_data[$title_id];
         if (isset($achieve_counter_data["task_type_progress"][$achieve_type]['val']) && !in_array($achieve_type, array(6, 28, 29, 24, 35, 36, 40, 48))) {
             $player_achieve_info[$achieve_config['achieve_id']]['val'] = $achieve_counter_data["task_type_progress"][$achieve_type]['val'];
         }
         $oldval = $player_achieve_info[$achieve_config['achieve_id']]['val'];
         #2014-4-14修改把配置表类型移到代码中
         $achieve_config["target_type"] = $update_type;
         //检查是否满足条件
         $check_finish = $this->check_achieve_finish($player_id, $trigger_val, $achieve_config, $player_achieve_info);
         $newval = $player_achieve_info[$achieve_config['achieve_id']]['val'];
         $prop_id = intval($achieve_config['reward']);
         if ($player_achieve_info[$achieve_id]['state'] == 1) {
             $finish_num++;
         }
         if ($is_added_next_target_val == 0) {
             $add_trigger_type_info = array();
             $add_trigger_type_info['type'] = $achieve_type;
             $add_trigger_type_info['update_type'] = $update_type;
             $add_trigger_type_info['val'] = $newval;
             $add_trigger_type_info['is_sys'] = 1;
         }
         //完成=>所有此类型
         if ($finish_num == count($achieve_configs) && $is_added_next_target_val == 0) {
             $add_trigger_type_info['next_target_val'] = 999999999;
             $is_added_next_target_val = 1;
         }
         //全服唯一
         if ($achieve_config['other_type'] == 1) {
             $achieve_only_info = $obj_player_only->get_player_achieve_only_info($achieve_id);
             if ($achieve_only_info) {
                 continue;
             }
         }
         Com_Log::write('xgame.trigger_achieve_medal_test', "{$player_id}--{$achieve_type}--{$oldval}--{$newval}--{$check_finish}");
         //未完成
         if ($oldval == $newval && $check_finish != 1) {
             if ($check_finish !== 2 && $is_added_next_target_val == 0) {
                 $add_trigger_type_info['next_target_val'] = $achieve_config['target_val'];
                 $is_added_next_target_val = 1;
             }
             continue;
             //无变化不更新
         }
         //未完成-变化
         if ($check_finish == 0 && $is_added_next_target_val == 0) {
             $add_trigger_type_info['next_target_val'] = $achieve_config['target_val'];
             $is_added_next_target_val = 1;
         }
         $this->start_trans();
         $ret_task = $objPlayerAchieve->update_player_achieve($player_id, $title_id, $player_achieve_info, $achieve_id);
         if (!$ret_task) {
             return false;
         }
         if ($check_finish == 0) {
             $this->commit();
             continue;
         }
         $ret_only = true;
         //更新全服唯一成就完成信息
         if ($achieve_config['other_type'] == 1) {
             $achieve_only_info = array("achieve_id" => $achieve_id, "player_id" => $player_id, "add_time" => time());
             $ret_only = $obj_player_only->update_player_achieve_only($achieve_config['achieve_id'], $achieve_only_info);
             if (!$ret_only) {
                 return false;
             }
         }
         $target_finish_num = 0;
         #获取配置表下当前勋章所有成就任务
         $achieve_title_data = Cache_AchieveConfig::getInstance()->get_achieve_config_by_titleid2($title_id);
         $target_total_num = count($achieve_title_data);
         //玩家完成的成就任务
         if ($player_achieve_info) {
             foreach ($player_achieve_info as $achieve_id => $val) {
                 if (isset($achieve_title_data[$achieve_id])) {
                     if ($val['state'] == 1) {
                         $target_finish_num++;
                     }
                 }
             }
         }
         //当前成就列任务是否全部完成
         if ($target_finish_num >= $target_total_num && $target_total_num > 0) {
             $field = "finish_title_ids";
             $ret_counter = true;
             if ($title_id < 100 || $prop_id < 1) {
                 $achieve_counter_data = $obj_player_counter->get_player_achieve_counter_info($player_id, $field);
                 $achieve_counter_data[$title_id] = time();
                 //激活新的勋章/称号
                 $set_counter_data[$field] = $achieve_counter_data;
                 $ret_counter = $obj_player_counter->update_player_achieve_counter($player_id, $set_counter_data);
                 if (!$ret_counter) {
                     return false;
                 }
             }
             $reward = array();
             //如果为勋章添加提升属性
             if ($title_id < 100) {
                 $finish_medal_id = array();
                 $finish_max_medal_id = 0;
                 if (Com_Array::is_good_arr($achieve_counter_type_progress["finish_title_ids"])) {
                     foreach ($achieve_counter_type_progress["finish_title_ids"] as $finish_title_id => $up_ts) {
                         if ($finish_title_id < 100) {
                             $finish_medal_id[] = $finish_title_id;
                         }
                     }
                 }
                 #防止后面勋章先完成
                 if (!empty($finish_medal_id)) {
                     $finish_max_medal_id = max($finish_medal_id);
                 }
                 if ($title_id > $finish_max_medal_id) {
                     $title_config = Cache_TitleConfig::getInstance()->get_title_config_by_id($title_id);
                     $achieve_attr_1 = $this->get_format_achieve_attr($title_config['reward']);
                     $update_player_detail_data['achieve_attr_1'] = $achieve_attr_1;
                     $ret_attr_1 = $this->get_data('PlayerDetail')->update_player_detail($player_id, $update_player_detail_data);
                     if (!$ret_attr_1) {
                         return false;
                     }
                     $ret_player = $this->get_data('Player')->update_player_info($player_id, array("medal_id" => $title_id));
                     if (!$ret_player) {
                         return false;
                     }
                     Com_Log::write('xgame.trigger_achieve_medal', "{$player_id}---{$achieve_type}---trigger_medal_id={$title_id}");
                 }
                 $push_achieve_prompt2 = array(2, $title_config['icon'], $title_config['font_icon'], "", 0, $title_id, 0);
             } else {
                 $title_config = Cache_TitleConfig::getInstance()->get_title_config_by_id($title_id);
                 #if($title_config['operator_id'] !=0 && OPERATOR_ID!=$title_config['operator_id']) return false;
                 if ($prop_id > 0) {
                     $phrase_config = Cache_FuncPhraseConfig::getInstance()->get_phrase_config_info($achieve_config['title_id']);
                     $attachment = array();
                     $attachment[] = array("prop_id" => $prop_id, "prop_num" => 1);
                     $re = $this->get_game('Mail')->async_trigger_mail($player_id, $phrase_config['title'], $phrase_config['content'], $attachment, $phrase_config['sender'], 1, 766);
                 }
             }
             $this->commit();
             $push_prompt_achieve_id = $achieve_config['achieve_id'];
             $push_prompt_title_id = $title_id;
             Protocol_Player::p2c_part_update($player_id, array('attr' => array(), 'medal_id' => ''));
             if ($title_id < 100) {
                 #{玩家名}获得了{勋章名},功成名就,指日可待!
                 $replace_info = array();
                 $replace_info[] = array('rep_type' => 0, 'rep_val' => $player_id);
                 $replace_info[] = array('rep_type' => 7, 'txt' => $title_config['title_name']);
                 $this->get_game('SystemNotice')->push_sys_notice($player_id, 14, 0, $replace_info);
             }
         } else {
             if (!$ret_only) {
                 return false;
             }
             $this->commit();
             $push_prompt_achieve_id = $achieve_config['achieve_id'];
             $push_prompt_title_id = $title_id;
         }
         //任务完成添加成就点
         if ($achieve_config['achieve_point'] > 0) {
             $player_info = $this->get_data('Player')->get_player_info($player_id, array("achieve_point", "level", "vip"));
             $front_amount_achieve_point = intval($player_info["achieve_point"]);
             $player_info["achieve_point"] += $achieve_config['achieve_point'];
             $ret_player = $this->get_data('Player')->update_player_info($player_id, $player_info);
             if (!$ret_player) {
                 return false;
             }
             //主角成就日志
             $log_data = array('player_id' => $player_id, 'channel' => 29, 'type' => 1, 'item_id' => 12, 'item_num' => $achieve_config['achieve_point'], 'amount' => $front_amount_achieve_point, 'after_amount' => $player_info['achieve_point'], 'cmd_id' => 768, 'player_level' => $player_info['level'], 'vip_level' => $player_info['vip']);
             Log_Common::getInstance()->add_log($log_data, 'day');
         }
     }
     #特殊类型不保留下一步记录
     if (!in_array($achieve_type, $this->special_task_type)) {
         if ($is_added_next_target_val == 1) {
             $add_trigger_type_info['upts'] = time();
             $task_type_progress = $obj_player_counter->get_player_achieve_counter_info($player_id, array("task_type_progress"));
             $task_type_progress["task_type_progress"][$achieve_type] = $add_trigger_type_info;
             $ret = $obj_player_counter->update_player_achieve_counter($player_id, $task_type_progress);
             if (!$ret) {
                 return false;
             }
         }
     }
     $func_open = $this->get_data('PlayerDetail')->get_player_detail($player_id, 'func_open');
     if (isset($func_open[14])) {
         if ($push_prompt_title_id > 0) {
             if ($push_achieve_prompt2) {
                 Protocol::input($player_id, 8, 7, 768, array($push_achieve_prompt2));
                 Com_Log::debug_write('xgame.push_achieve_prompt', "{$player_id}---{$achieve_type}" . var_export($push_achieve_prompt2, true));
             } else {
                 if ($push_prompt_title_id < 100) {
                     $achieve_config = Cache_AchieveConfig::getInstance()->get_achieve_config($push_prompt_achieve_id);
                     $push_achieve_prompt = array(1, $achieve_config['icon'], $achieve_config['font_icon'], $achieve_config['target_info'], $achieve_config['achieve_point'], $push_prompt_title_id, $achieve_config['achieve_id']);
                 } else {
                     $title_config = Cache_TitleConfig::getInstance()->get_title_config_by_id($push_prompt_title_id);
                     $push_achieve_prompt = array(3, $title_config['icon'], $title_config['font_icon'], $achieve_config['target_info'], 0, $push_prompt_title_id, 0);
                 }
                 Com_Log::debug_write('xgame.push_achieve_prompt', "{$player_id}---{$achieve_type}" . var_export($push_achieve_prompt, true));
                 Protocol::input($player_id, 8, 7, 768, array($push_achieve_prompt));
             }
         }
     }
     if (!IS_FRONT) {
         Protocol::out();
     }
 }
コード例 #10
0
ファイル: Auction.php プロジェクト: bluefan/phpsource
 /**
  * 购买道具
  * @param $player_id
  * @param $auction_id
  * @return array
  */
 public function buy_item($player_id, $auction_id, $buy_num)
 {
     $auction_data = $this->get_data('Auction')->get_auction($auction_id);
     if (empty($auction_data)) {
         $this->throw_error('80920');
         //道具不存在
     }
     $prop = json_decode($auction_data['prop_info'], true);
     if ($buy_num > $prop['item_num'] || $buy_num <= 0) {
         $this->throw_error('80914');
         //购买数量不正确
     }
     if ($prop['player_id'] == $player_id) {
         $this->throw_error('80915');
         //购买数量不正确
     }
     $player_info = $this->get_data('Player')->get_player_info($player_id, array('level', 'vip', 'gold', 'name', 'player_id', 'privilege_level'));
     $has_gold = $player_info['gold'];
     $price = $auction_data['sell_price'] / $prop['item_num'];
     $need_gold = ceil($price * $buy_num);
     $this->get_data('Player')->check_player_resource($player_id, $player_info, "-", 'gold', $need_gold);
     $this->start_trans();
     $reward[] = array('type' => 'prop', 'item_id' => $prop['prop_id'], 'item_num' => $buy_num);
     $result = $this->get_game('Reward')->send_reward($player_id, $reward, array('cmd_id' => '774'));
     if ($result !== true) {
         $this->throw_error($result);
     }
     if ($result) {
         //            $result = $this->get_data('Player')->update_player_info($player_id,array('gold'=>"-".$need_gold));
         $arr_consume = array('price' => $price, 'gold' => $need_gold, 'ticket' => 0, 'count' => $buy_num);
         #数据中心推送
         $result = $this->get_data('Player')->update_player_resource($player_id, $player_info, 774, array(), $arr_consume);
     }
     if ($result) {
         if ($buy_num < $prop['item_num']) {
             $prop['item_num'] = $prop['item_num'] - $buy_num;
             $sell_price = $auction_data['sell_price'] - $need_gold;
             $this->get_data('Auction')->set_auction($auction_id, array('prop_info' => $prop, 'sell_price' => $sell_price));
         } else {
             $prop['item_num'] = 0;
             $this->get_data('Auction')->del_auction($auction_id);
         }
     }
     $prop_config = Cache_Prop::getInstance()->get_prop_info($prop['prop_id']);
     $attachment_gold = 0;
     $objApi = TenYear::getInstance('Com_Uzapi');
     $ip = $this->get_cross('Base')->get_server_ip($auction_data['server_id']);
     $objApi->setServerUrl($ip);
     if ($result) {
         $factorage = $need_gold * ($this->_factorage / 100);
         $factorage = ceil($factorage);
         $attachment_gold = $need_gold - $factorage;
         $attachment = array(array("prop_id" => Cache_Currency::getInstance()->get_index('ticket'), "prop_num" => $attachment_gold));
         $phrase_config = Cache_FuncPhraseConfig::getInstance()->get_phrase_config_info(7);
         $content = sprintf($phrase_config['content'], $player_info['name'], $prop_config['name'] . '*' . $buy_num, $factorage, $attachment_gold);
         //"{$player_info['name']} 购买了你出售的 {$prop_config['name']}*{$buy_num} ,扣除手续费{$factorage}钻,你获得了 {$need_gold}钻。";
         if ($auction_data['server_id'] == SERVER_ID) {
             $result = $this->get_game('Mail')->async_trigger_mail($auction_data['player_id'], $phrase_config['title'], $content, $attachment, $phrase_config['sender'], 1, 774);
         } else {
             $objApi->setReqData(array("action" => "PlayerInfo", "command" => "send_mail", "player_id" => $auction_data['player_id'], 'title' => $phrase_config['title'], 'content' => $content, 'attachment' => json_encode($attachment), 'sender' => $phrase_config['sender']));
             $response = $objApi->sendRequest();
             if (!empty($response['return']) && $response['return'] != 1) {
                 $result = false;
             }
         }
     }
     if ($result) {
         $this->commit();
         #数据中心推送
         //            if($need_gold > 0){
         //                $params['act'] = 774;
         //                $params['price'] = $price;
         //                $params['gold'] = $need_gold;
         //                $params['black_gold'] = 0;
         //                $params['count'] = $buy_num;
         //                $params['time'] = time();
         //                Com_DataCenter::getInstance()->publish_data($player_id,'prop',$params);
         //            }
         $this->get_game('Reward')->add_reward_log();
         //购买日志
         Log_Trade::getInstance()->add_trade_log($player_id, $player_info['level'], $player_info['vip'], $player_info['privilege_level'], 2, $prop['prop_id'], $prop_config['name'], $prop['quality'], $buy_num, $prop['item_num'], $prop['level'], $prop, 2, $need_gold);
         //被购买日志
         $prop['buyer_id'] = $player_id;
         $seller_info = array();
         if ($auction_data['server_id'] == SERVER_ID) {
             $seller_info = $this->get_data('Player')->get_player_info($auction_data['player_id'], array('level', 'vip', 'privilege_level'));
         } else {
             $objApi->setReqData(array("action" => "PlayerInfo", "command" => "get_player_info", "player_id" => $auction_data['player_id']));
             $response = $objApi->sendRequest();
             if (!empty($response['return'])) {
                 $seller_info = $response['return'];
             }
         }
         Log_Trade::getInstance()->add_trade_log($auction_data['player_id'], $seller_info['level'], $seller_info['vip'], $seller_info['privilege_level'], 3, $prop['prop_id'], $prop_config['name'], $prop['quality'], $buy_num, $prop['item_num'], $prop['level'], $prop, 4, $attachment_gold);
         return array('result' => 1, 'auction_id' => $auction_id);
     } else {
         $this->rollback();
     }
     return array('result' => 0, 'auction_id' => $auction_id);
 }
コード例 #11
0
ファイル: UnionPlayer.php プロジェクト: bluefan/phpsource
 /**
 * 每天晚上12点要给公会的会长和副会长发工资
 	会长:公会人数*1000(可配置)
 	副会长:公会人数*600(可配置)
 * @param unknown $union_id
 */
 public function union_manager_reward()
 {
     return false;
     $all_union_info = $this->get_data('UnionInfo')->get_all_union_info();
     if ($all_union_info) {
         foreach ($all_union_info as $key => $union_info) {
             $union_id = $union_info['union_id'];
             $player_num = $union_info['player_num'];
             $union_level = $union_info['union_level'];
             if ($union_level > 0) {
                 $objUnionPlayerData = $this->get_data('UnionPlayer');
                 $unionPlayerList = $objUnionPlayerData->get_union_player_info($union_id);
                 if (Com_Array::is_good_arr($unionPlayerList)) {
                     $unionBaseConfig = Cache_UnionBase::getInstance()->get_union_base_info($union_level);
                     $phrase_config = Cache_FuncPhraseConfig::getInstance()->get_phrase_config_info(9001);
                     foreach ($unionPlayerList as $union_player_id => $val) {
                         if ($val['job_id'] <= 2) {
                             $attachment = array();
                             $job_salary = explode("|", $unionBaseConfig["job{$val['job_id']}_salary"]);
                             if (Com_Array::is_good_arr($job_salary)) {
                                 foreach ($job_salary as $salary) {
                                     $prop = explode(":", $salary);
                                     $prop_num = intval($player_num * $prop[1]);
                                     $attachment[] = array('prop_id' => $prop[0], 'prop_num' => $prop_num);
                                 }
                             }
                             $this->get_game('Mail')->async_trigger_mail($val['player_id'], $phrase_config['title'], $phrase_config['content'], $attachment, $phrase_config['sender'], 1, 1700);
                         }
                     }
                 }
             }
         }
     }
 }
コード例 #12
0
ファイル: UnionReward.php プロジェクト: bluefan/phpsource
 /**
  * 同步公会加经验
  * @param unknown $union_id
  * @param number $cmd_id
  */
 public function add_union_reward_log()
 {
     if (!empty($this->arrPropLogs)) {
         foreach ($this->arrPropLogs as $item_id => $log) {
             if ($item_id == 9) {
                 $this->get_data('PlayerDailyTime')->add_used_time($this->union_id, 'daily_add_union_exp', $log['item_num']);
                 $this->get_data('UnionInfo')->set_union_weight($this->union_id, $this->arrUnion);
                 if ($this->arrUnion['union_level'] > $this->arrParams['old_union_level']) {
                     if ($this->arrUnion['union_level'] > 1) {
                         $phrase_id = 1000 + $this->arrUnion['union_level'];
                         $phrase_config = Cache_FuncPhraseConfig::getInstance()->get_phrase_config_info($phrase_id);
                         $this->get_game('UnionPlayer')->send_mail($this->arrUnion['create_player_id'], $this->union_id, $phrase_config['title'], $phrase_config['content'], false);
                         #祝贺{公会名}公会升级为{公会等级}级,成为服务器一大势力!
                         $replace_info = array();
                         $replace_info[] = array('rep_type' => 7, 'txt' => $this->arrUnion['union_name']);
                         $replace_info[] = array('rep_type' => 7, 'txt' => $this->arrUnion['create_player_name']);
                         $replace_info[] = array('rep_type' => 7, 'txt' => $this->arrUnion['union_level']);
                         $this->get_game('SystemNotice')->push_sys_notice($this->arrUnion['create_player_id'], 90, 0, $replace_info, $this->arrUnion['union_level']);
                         $this->get_game('UnionAchieve')->async_trigger_union_achieve($this->arrUnion['create_player_id'], 1, $this->arrUnion['union_level'], 2);
                     }
                     $this->get_game('Union')->Sync_Union_msg($this->union_id, 0, 0, $this->arrUnion['union_level']);
                 }
             }
             //公会经验-流水日志
             $log_data = array('player_id' => $this->player_id, 'channel' => 17, 'type' => 1, 'item_id' => $item_id, 'item_num' => $log['item_num'], 'amount' => $log['amount'], 'after_amount' => $log['item_num'] + $log['amount'], 'cmd_id' => $this->arrParams['cmd_id'], 'content' => $this->union_id);
             Log_Common::getInstance()->add_log($log_data);
         }
     }
 }
コード例 #13
0
ファイル: KFArena.php プロジェクト: bluefan/phpsource
 /**
  * 处理战斗结果
  * @param $player_id
  * @param $result
  */
 public function deal_result($player_id, $arena_id, $winner_role_id, $loser_role_id, $send_mail, $opp_name, $opp_dw)
 {
     //        Com_Log::write("deal_result.".$player_id,"{$winner_role_id} {$loser_role_id} send_mail:{$send_mail} {$opp_name} {$opp_dw}");
     $out = array();
     $out['arena_id'] = $arena_id;
     $my_update = array();
     $my_arena_info = $this->get_data('KFArena')->get_kf_arena_info($player_id);
     if (empty($my_arena_info)) {
         Com_Log::write("deal_result." . $player_id, var_export($this->redis(), true));
         return false;
     }
     //        Com_Log::write("deal_result.".$player_id,var_export($my_arena_info,true));
     $dw_configs = Cache_CrossArenaLevel::getInstance()->get_config_info();
     //        Com_Log::log($dw_configs,'deal_result',1);
     $my_fight_log = array();
     $win = 0;
     $arena_news = array();
     $old_levels = "{$my_arena_info['dw']}:{$my_arena_info['dw_lv']}:{$my_arena_info['dw_star']}";
     $old_rank = $this->get_cross('KFArena')->get_my_rank($player_id, $my_arena_info['dw']);
     $player_info = $this->get_data('Player')->get_player_info($player_id, array('sum_fpower', 'union_name', 'career_type', 'name', 'level', 'vip', 'privilege_level'));
     #日志需要的
     $front_dw = $my_arena_info['dw'];
     $front_dw_lv = $my_arena_info['dw_lv'];
     $front_dw_star = $my_arena_info['dw_star'];
     $front_score = $my_arena_info['score'];
     $front_score_tale = $my_arena_info['score_tale'];
     $front_rank = $old_rank;
     $my_update['dw'] = $my_arena_info['dw'];
     $my_update['dw_lv'] = $my_arena_info['dw_lv'];
     $my_update['dw_star'] = $my_arena_info['dw_star'];
     $my_update['score'] = $my_arena_info['score'];
     //        Com_Log::write("kfarena_out_reward.".$player_id,"score:".var_export($my_arena_info['score'],true));
     $my_update['score_tale'] = $my_arena_info['score_tale'];
     $del_tale = false;
     #是否冲传排行榜删除
     $del_normal = false;
     #是否冲普通榜删除
     $max_dw_log = false;
     if ($winner_role_id == $player_id) {
         //胜利
         $oopp_player_id = $loser_role_id;
         $win = 1;
         $my_update['win'] = $my_arena_info['win'] + 1;
         if ($my_arena_info['dw'] < $this->max_dw) {
             //传说的不做加分数操作
             $my_update['score'] = $my_arena_info['score'] + 1;
             $new_dw_info = $this->cal_dw($my_update['score'], $dw_configs);
             $my_update['dw'] = $new_dw_info['dw'];
             $my_update['dw_lv'] = $new_dw_info['dw_lv'];
             $my_update['dw_star'] = $new_dw_info['dw_star'];
             if ($new_dw_info['dw'] != $my_arena_info['dw']) {
                 $my_fight_log = array('player_id' => $player_id, 'opp_player_id' => $loser_role_id, 'opp_name' => $opp_name, 'result' => 1, 'star' => 0, 'dw' => $new_dw_info['dw'], 'rank' => 0);
             } else {
                 $my_fight_log = array('player_id' => $player_id, 'opp_player_id' => $loser_role_id, 'opp_name' => $opp_name, 'result' => 1, 'star' => 1, 'dw' => 0, 'rank' => 0);
             }
             if ($my_update['dw'] == $this->max_dw) {
                 #初次升级的的时候把胜利次数记录
                 $my_update['score_tale'] = $my_arena_info['score_tale'] + 1;
                 $del_normal = true;
                 $my_fight_log = array('player_id' => $player_id, 'opp_player_id' => $loser_role_id, 'opp_name' => $opp_name, 'result' => 1, 'star' => 0, 'dw' => $this->max_dw, 'rank' => 0);
             }
         } else {
             $my_update['score_tale'] = $my_arena_info['score_tale'] + 1;
             $max_dw_log = true;
             $my_fight_log = array('player_id' => $player_id, 'opp_player_id' => $loser_role_id, 'opp_name' => $opp_name, 'result' => 1, 'star' => 0, 'dw' => $this->max_dw, 'rank' => $my_update['score_tale']);
         }
     } elseif ($loser_role_id == $player_id) {
         //失败
         $oopp_player_id = $winner_role_id;
         $my_update['win'] = 0;
         if ($my_arena_info['dw'] < $this->max_dw) {
             //传说的不做加分数操作
             if ($my_arena_info['dw'] >= 3 && $my_arena_info['score'] > 0) {
                 $my_update['score'] = $my_arena_info['score'] - 1;
                 $new_dw_info = $this->cal_dw($my_update['score'], $dw_configs);
                 if ($my_arena_info['dw'] == 3 && $new_dw_info['dw'] < 3) {
                     #保底黄金段位
                     $my_update['dw'] = $my_arena_info['dw'];
                     $my_update['dw_lv'] = $my_arena_info['dw_lv'];
                     $my_update['dw_star'] = 1;
                     $my_update['score'] = $my_arena_info['score'] < 36 ? 36 : $my_arena_info['score'];
                     #分数恢复 否则 会出现在这个段位扣分的情况
                     $my_fight_log = array('player_id' => $player_id, 'opp_player_id' => $winner_role_id, 'opp_name' => $opp_name, 'result' => 0, 'star' => 0, 'dw' => $my_update['dw'], 'rank' => 0);
                 } else {
                     $my_update['dw'] = $new_dw_info['dw'];
                     $my_update['dw_lv'] = $new_dw_info['dw_lv'];
                     $my_update['dw_star'] = $new_dw_info['dw_star'];
                     if ($new_dw_info['dw'] != $my_arena_info['dw']) {
                         $my_fight_log = array('player_id' => $player_id, 'opp_player_id' => $winner_role_id, 'opp_name' => $opp_name, 'result' => 0, 'star' => 1, 'dw' => 0, 'rank' => 0);
                     } else {
                         $my_fight_log = array('player_id' => $player_id, 'opp_player_id' => $winner_role_id, 'opp_name' => $opp_name, 'result' => 0, 'star' => 0, 'dw' => $new_dw_info['dw'], 'rank' => 0);
                     }
                 }
             } else {
                 $my_update['score'] = $my_arena_info['score'];
                 $my_fight_log = array('player_id' => $player_id, 'opp_player_id' => $winner_role_id, 'opp_name' => $opp_name, 'result' => 0, 'star' => 0, 'dw' => 0, 'rank' => 0);
             }
         } else {
             #如果是传说是不要降级 对手不是传说 就要吧传说这个人替换掉
             if ($opp_dw < $this->max_dw) {
                 $my_update['dw'] = $this->max_dw - 1;
                 $dw_config = $dw_configs[$my_update['dw']];
                 $my_update['dw_lv'] = $dw_config['max_level'];
                 $my_update['dw_star'] = $dw_config['star_max_level'] - 1;
                 $my_update['score'] = $my_arena_info['score'] - 1;
                 $del_tale = true;
                 $my_fight_log = array('player_id' => $player_id, 'opp_player_id' => $winner_role_id, 'opp_name' => $opp_name, 'result' => 0, 'star' => 0, 'dw' => $my_update['dw'], 'rank' => 0);
             } else {
                 #
                 $my_update['score_tale'] = $my_arena_info['score_tale'] - 1;
                 if ($my_update['score_tale'] < 0) {
                     $my_update['score_tale'] = 0;
                 }
                 $my_fight_log = array('player_id' => $player_id, 'opp_player_id' => $winner_role_id, 'opp_name' => $opp_name, 'result' => 0, 'star' => 0, 'dw' => $this->max_dw, 'rank' => 0);
             }
         }
     }
     #胜利发奖
     if ($my_update['dw'] > $my_arena_info['dw'] && $my_arena_info['dw_reward_flag'][$my_update['dw']] == 0) {
         $dw_config = $dw_configs[$my_update['dw']];
         $my_arena_info['dw_reward_flag'][$my_update['dw']] = 1;
         //可领取
         $my_update['dw_reward_flag'] = $my_arena_info['dw_reward_flag'];
         $synData['dw'] = $my_update['dw'];
         $new_template = Cache_CrossArenaNewsTemplate::getInstance()->get_template(1, 1);
         if (!empty($new_template)) {
             $arena_news[] = str_replace(array('{$name}', '{$dw}', '{$dw_name}'), array($my_arena_info['name'], $my_update['dw'], $dw_config['name']), $new_template['template']);
         }
     }
     $synData = array();
     if ($my_update['dw'] != $my_arena_info['dw']) {
         $synData['dw'] = $my_update['dw'];
     }
     if ($my_update['dw_lv'] != $my_arena_info['dw_lv']) {
         $synData['dw_lv'] = $my_update['dw_lv'];
     }
     if ($my_update['dw_star'] != $my_arena_info['dw_star']) {
         $synData['dw_star'] = $my_update['dw_star'];
     }
     $synData['score'] = $my_update['score'];
     $result = true;
     $this->start_trans();
     //        Com_Log::write("deal_result.".$player_id,"my_update:".var_export($my_update,true));
     $result = $this->get_data('KFArena')->set_kf_arena_info($player_id, $my_update);
     if ($result) {
         $result = $this->get_data('KFArena')->add_fight_log($my_fight_log);
     }
     $out_reward = array('result' => $win, 'levels' => $my_update['dw'] . ":" . $my_update['dw_lv'] . ":" . $my_update['dw_star'], 'base_reward' => '', 'other_reward' => '', 'rank' => 0, 'old_levels' => $old_levels, 'old_rank' => $old_rank, 'score_tale' => $my_update['score_tale']);
     if ($result) {
         $reward = "";
         $dw_config = $dw_configs[$my_update['dw']];
         if ($win == 1) {
             $rewards = $this->format_level_reward($dw_config['win_reward']);
             if (!empty($rewards)) {
                 $reward = $rewards[$my_update['dw_lv']];
             }
         } else {
             $rewards = $this->format_level_reward($dw_config['fail_reward']);
             if (!empty($rewards)) {
                 $reward = $rewards[$my_update['dw_lv']];
             }
         }
         $send_reward = array();
         #vip特权奖励加层
         $left_time = $this->get_game('VipSpecial')->get_left_time($player_id);
         if ($left_time) {
             $vip_level_config = Cache_VipLevelLimit::getInstance()->get_limit_info($player_info['privilege_level'], 10065);
         } else {
             $vip_level_config = array();
         }
         if ($vip_level_config) {
             $vip_addtion = $vip_level_config['max_times'] / 10000;
         }
         $full_reward_flag = $this->get_reward_rate();
         if (!empty($reward)) {
             $send_reward = $this->format_reward($reward['info'], $full_reward_flag, $vip_addtion);
         }
         if ($my_update['win'] > 10) {
             $up_win = 10;
         } else {
             $up_win = $my_update['win'];
         }
         $win_reward = Cache_CrossArenaWinReward::getInstance()->get_win_reward($up_win);
         if ($win_reward) {
             $win_send_reward = $this->format_reward($win_reward['item'], 100, $vip_addtion);
             $send_reward = array_merge($send_reward, $win_send_reward);
         }
         if (!empty($send_reward)) {
             if ($send_mail) {
                 $attachment = array();
                 foreach ($send_reward as $val) {
                     $attachment[] = array('prop_id' => $val['item_id'], 'prop_num' => $val['item_num']);
                 }
                 $phrase_config = Cache_FuncPhraseConfig::getInstance()->get_phrase_config_info(1201);
                 $result = $this->get_game('Mail')->async_trigger_mail($player_id, $phrase_config['title'], $phrase_config['content'], $attachment, $phrase_config['sender'], 1, 435);
             } else {
                 $result = $this->get_game('Reward')->send_reward($player_id, $send_reward, array('cmd_id' => '435'));
                 if ($result !== true) {
                     $this->throw_error($result);
                 }
             }
         }
     }
     if ($result) {
         $this->commit();
         $this->get_data('PlayerDailyTime')->add_used_time($player_id, 'kf_arena_use_times');
         //增加挑战次数
         //找回资源埋点
         $this->get_game('GetBackCurrency')->add_function_day_times($player_id, 6);
         $this->get_game('PlayerFunc')->sync_func_tips($player_id, 1040);
         //            $this->get_data('KFArena')->del_fight_lock($player_id);#删除战斗锁
         //            $out_reward['base_reward'] = isset($reward['info']) ? $reward['info'] : "" ; //基础奖励
         //            $result = $this->get_data('KFArena')->add_fight_cd($player_id); 先不记cd 测试完开放
         if ($send_mail == 0) {
             $this->get_game('Reward')->add_reward_log();
             $out_reward_log = $this->get_game('Reward')->get_out_reward();
             if ($out_reward_log) {
                 foreach ($out_reward_log as $item_id => $item_num) {
                     if (empty($out_reward['base_reward'])) {
                         $out_reward['base_reward'] .= "{$item_id}:{$item_num}";
                     } else {
                         $out_reward['base_reward'] .= "|{$item_id}:{$item_num}";
                     }
                 }
             }
         } else {
             if ($send_reward) {
                 foreach ($send_reward as $val) {
                     if (isset($val['item_id']) && $val['item_id'] > 0) {
                         if (empty($out_reward['base_reward'])) {
                             $out_reward['base_reward'] .= "{$val['item_id']}:{$val['item_num']}";
                         } else {
                             $out_reward['base_reward'] .= "|{$val['item_id']}:{$val['item_num']}";
                         }
                     }
                 }
             }
         }
         #存入排行
         $rank_data = array();
         $rank_data['player_id'] = $player_id;
         $rank_data['player_name'] = $player_info['name'];
         $rank_data['career_type'] = $player_info['career_type'];
         $rank_data['player_level'] = $player_info['level'];
         $rank_data['union_name'] = $player_info['union_name'];
         $rank_data['sum_fpower'] = $player_info['sum_fpower'];
         $rank_data['server_id'] = SERVER_ID;
         $rank_data['server_name'] = SHOW_TITLE;
         $rank_data['dw'] = $my_update['dw'];
         $rank_data['dw_lv'] = $my_update['dw_lv'];
         $rank_data['dw_star'] = $my_update['dw_star'];
         $rank_data['score'] = $my_update['score'];
         $rank_data['score_tale'] = $my_update['score_tale'];
         $rank_data['update_time'] = time();
         $this->get_cross('KFArena')->set_kf_arena_rank($player_id, $rank_data);
         //存入排行
         #如果打败 自己再传说排行 把自己冲传说排行删除
         if ($del_tale) {
             $this->get_cross('KFArena')->del_from_tale_rank($player_id);
         }
         #如果自己升入传说排行 把自己从普通排行删除
         if ($del_normal) {
             $this->get_cross('KFArena')->del_from_normal_rank($player_id);
         }
         $out_reward['rank'] = $this->get_cross('KFArena')->get_my_rank($player_id, $my_update['dw']);
         $this->get_data('KFArena')->set_kf_arena_info($player_id, array('rank' => $out_reward['rank']));
         if ($max_dw_log) {
             #传说升级日志特殊处理下 放到commint后
             if ($out_reward['rank'] > $old_rank) {
                 $my_fight_log = array('player_id' => $player_id, 'opp_player_id' => $oopp_player_id, 'opp_name' => $opp_name, 'result' => 1, 'star' => 0, 'dw' => $this->max_dw, 'rank' => $out_reward['rank']);
             } else {
                 $my_fight_log = array('player_id' => $player_id, 'opp_player_id' => $oopp_player_id, 'opp_name' => $opp_name, 'result' => 1, 'star' => 0, 'dw' => $this->max_dw, 'rank' => 0);
             }
             $this->get_data('KFArena')->add_fight_log($my_fight_log);
         }
         #日志
         Log_KfArena::getInstance()->add_kf_arena_log($player_id, $player_info['level'], $player_info['vip'], $player_info['privilege_level'], $my_update['dw'], $my_update['dw_lv'], $my_update['dw_star'], $my_update['score'], $my_update['score_tale'], $out_reward['rank'], $front_dw, $front_dw_lv, $front_dw_star, $front_score, $front_score_tale, $front_rank);
         Protocol_Player::p2c_part_update($player_id, $synData);
         if ($my_update['win'] > 0 && $my_update['win'] % 5 == 0) {
             $new_template = Cache_CrossArenaNewsTemplate::getInstance()->get_template(2, $my_update['win']);
             if (!empty($new_template)) {
                 $arena_news[] = str_replace('{$name}', $my_arena_info['name'], $new_template['template']);
             }
         }
         if (!empty($arena_news)) {
             foreach ($arena_news as $news) {
                 $this->get_cross('KFArena')->add_news($news);
             }
             Protocol::input($player_id, 8, 12, 1215, array(0 => $arena_news));
         }
         //            Com_Log::write("kfarena_out_reward.".$player_id,var_export($out_reward,true));
         if (!$send_mail) {
             Protocol::input($player_id, 8, 12, 1217, $out_reward);
             //推奖励面板
         }
         $this->get_game('PlayerAchieve')->async_trigger_achieve_target($player_id, 21, $my_update['dw'], 2);
         if ($my_update['win'] > 0) {
             $this->get_game('PlayerAchieve')->async_trigger_achieve_target($player_id, 22, $my_update['win'], 5);
         }
         $this->get_game('DailyBoon')->async_trigger_daily_boon_task($player_id, 3003, 1, 1);
         $this->get_game('UnionAchieve')->async_trigger_union_achieve($player_id, 10, $my_update['dw'], 2);
         #引导任务
         $this->get_game('TaskTrigger')->async_trigger_guide_task($player_id, 17, 1);
         //
         //            竞技场:
         //            1:{玩家名} 在竞技场中已经取得{n}连胜!越战越勇,无人能挡!
         //            $val:几连胜
         if ($my_update['win'] > 0) {
             $replace_info = array(array("rep_type" => 0, "rep_val" => $player_id), array("rep_type" => 7, "txt" => $my_update['win']));
             $this->get_game('SystemNotice')->push_sys_notice($player_id, 1060, 0, $replace_info, $my_update['win']);
         }
         //            2:祝贺 {玩家名} 在竞技场中已经取得{}段位!宛如天神下凡,实力超群!
         //            $val:几段位
         if ($my_update['dw'] > $my_arena_info['dw'] && $my_arena_info['dw_reward_flag'][$my_update['dw']] == 0) {
             $replace_info = array(array("rep_type" => 0, "rep_val" => $player_id), array("rep_type" => 7, "txt" => $dw_configs[$my_update['dw']]['name']));
             $this->get_game('SystemNotice')->push_sys_notice($player_id, 1061, 0, $replace_info, $my_update['dw']);
         }
     } else {
         $this->rollback();
         $this->throw_error('10104');
     }
     //        Com_Log::log("=============[{$player_id}] end ==================",'deal_result',1);
     return $result;
 }
コード例 #14
0
ファイル: WorldBoss.php プロジェクト: bluefan/phpsource
 public function send_lottery_mail($player_id, $phrase_id, $rewards)
 {
     $phrase_config = Cache_FuncPhraseConfig::getInstance()->get_phrase_config_info($phrase_id);
     if (empty($rewards)) {
         return 0;
     }
     $content = $phrase_config['content'];
     if ($phrase_id == 2002) {
         $content = sprintf($content, date('Y年m月d日'), $rewards[0]['prop_num']);
     } else {
         $content = sprintf($content, date('Y年m月d日'));
     }
     $re = $this->get_game('Mail')->async_trigger_mail($player_id, $phrase_config['title'], $content, $rewards, $phrase_config['sender'], 1, 11162, 0);
     $this->write_check($re);
     return true;
 }
コード例 #15
0
ファイル: UnionBoss.php プロジェクト: bluefan/phpsource
 public function send_mail($player_id, $rewards)
 {
     $player_id = intval($player_id);
     $phrase_config = Cache_FuncPhraseConfig::getInstance()->get_phrase_config_info(5);
     if (empty($rewards)) {
         return 0;
     }
     $boxname = Cache_Prop::getInstance()->get_prop_info($rewards[0]['item_id']);
     $content = sprintf($phrase_config['content'], $boxname['name']);
     $attachment = array();
     foreach ($rewards as $val) {
         $attachment[] = array("prop_id" => $val['item_id'], "prop_num" => $val['item_num']);
     }
     $re = $this->get_game('Mail')->async_trigger_mail($player_id, $phrase_config['title'], $content, $attachment, $phrase_config['sender'], 2, 491, 0);
     $this->write_check($re);
 }
コード例 #16
0
ファイル: Trial.php プロジェクト: bluefan/phpsource
 /**
  * 结束
  * @param int $sid 活动id 
  * @param array $roles 玩家
  * @param array $mails 是否邮件发送奖励
  * @param int $kill_num 击杀boss数
  * @param int $time 时间
  * @param int $owner_id 房主
  * @param int $for_ranklist 0 结算,1 算排名
  */
 public function game_over($sid, $roles, $mails, $kill_num, $time, $owner_id = 0, $for_ranklist = 0, $roles_dmg = array(), $arr_kill_cnt = array(), $friends)
 {
     $sid = intval($sid);
     $kill_num = intval($kill_num);
     $time = intval($time);
     //排行榜处理
     if ($for_ranklist) {
         //Com_Log::write('zzzwanghui','roles:'.json_encode($roles).'-kill_num:'.$kill_num.'-time:'.$time.'-owner:'.$owner_id.'-dmg:'.json_encode($roles_dmg).'-kills:'.json_encode($arr_kill_cnt));
         if (!empty($roles) && count($roles) == count($arr_kill_cnt) && count($roles_dmg) == count($roles)) {
             $players = array();
             $i = 0;
             $owner_name = '';
             foreach ($roles as $player_id) {
                 if ($player_id > 0) {
                     $temp = $this->get_data('Player')->get_player_info($player_id, array('player_id', 'name', 'career_type', 'level'));
                     $player_info = array('player_id' => $temp['player_id'], 'name' => $temp['name'], 'career_type' => $temp['career_type'], 'level' => $temp['level'], 'sum_fpower' => $roles_dmg[$i], 'kill_num' => $arr_kill_cnt[$i]);
                     $players[] = $player_info;
                     if ($player_id == $owner_id) {
                         $owner_name = $temp['name'];
                     }
                     #添加好友亲密度
                     $this->get_game('Athena')->add_firend_point($player_id, $friends[$i]);
                 }
                 $i++;
             }
             $data = array('owner_id' => $owner_id, 'players' => json_encode($players), 'kill_num' => $kill_num, 'time' => $time, 'reptime' => time());
             $this->get_data('Trial')->update_team_info($data);
         }
         return true;
     }
     //参数判断
     if (!$sid || !is_array($roles) || !is_array($mails)) {
         $this->throw_error(10107, 6010010);
     }
     $p_num = count($roles);
     if ($p_num != count($mails)) {
         $this->throw_error(10107, 6010014);
     }
     //奖励
     $buff = Cache_Trial::getInstance()->get_buff($sid, $kill_num);
     $rewards = Cache_Trial::getInstance()->get_trial_reward();
     //次数
     $set = Cache_ActivityHall::getInstance()->get_Activity_set($sid);
     if (!empty($set)) {
         $max_time = $set[0]['max_times'];
     }
     $record_info = $this->get_data('Trial')->get_record_info($sid);
     for ($i = 0; $i < $p_num; $i++) {
         $player_id = $roles[$i];
         $used = $this->get_trial_remaining_count($player_id, $sid);
         if ($used > $max_time) {
             //次数超过限制
             if (!$mails[$i]) {
                 //在线
                 if ($record_info) {
                     $arr_player = $this->get_data('Player')->get_player_info($record_info['player_id'], array('name', 'career_type'));
                     $record_info['player_name'] = $arr_player['name'];
                     $record_info['career_type'] = $arr_player['career_type'];
                     unset($record_info['add_time']);
                 }
                 $res = array();
                 $res['sid'] = $sid;
                 $res['kill_num'] = $kill_num;
                 $res['time'] = $time;
                 $res['reward'] = array();
                 $res['new'] = 0;
                 #是否创记录
                 $res['old_num'] = 0;
                 $res['old_time'] = 0;
                 $res['record'] = $record_info;
                 $res['reward_id'] = 0;
                 Protocol::input($player_id, 8, 11, 1142, $res);
             }
         } else {
             $new = 1;
             $p_info = $this->get_data('Player')->get_player_info($player_id, array('level', 'gm'));
             //只记录普通账号记录
             if ($p_info['gm'] == 0 || $p_info['gm'] == 3) {
                 $insert_data = array('sid' => $sid, 'player_id' => $player_id, 'kill_num' => $kill_num, 'time' => $time, 'add_time' => time());
                 if (0 == $i) {
                     if (!$record_info || ($record_info['kill_num'] < $kill_num || $record_info['kill_num'] == $kill_num && $time < $record_info['time'])) {
                         $record_info = array('sid' => $sid, 'player_id' => $player_id, 'kill_num' => $kill_num, 'time' => $time, 'add_time' => time());
                         $this->get_data('Trial')->update_record_info($sid, $record_info);
                     }
                 }
                 $player_trial = $this->get_data('Trial')->get_player_info($player_id, $sid);
                 if (!empty($player_trial) && isset($player_trial['player_id'])) {
                     //更新记录
                     if ($player_trial['kill_num'] < $kill_num || $player_trial['kill_num'] == $kill_num && $time < $player_trial['time']) {
                         $this->get_data('Trial')->update_player_info($player_id, $sid, $insert_data);
                         $new = 1;
                     } else {
                         $new = 0;
                     }
                 } else {
                     #添加记录
                     if ($insert_data['kill_num'] > 0) {
                         $this->get_data('Trial')->update_player_info($player_id, $sid, $insert_data);
                     }
                     $player_trial['kill_num'] = 0;
                     $player_trial['time'] = 0;
                 }
             }
             if (!($reward = Cache_Trial::getInstance()->get_reward($p_info['level'], $rewards))) {
                 $this->throw_error(10222, 6010011);
             }
             if ($record_info) {
                 $arr_player = $this->get_data('Player')->get_player_info($record_info['player_id'], array('name', 'career_type'));
                 $record_info['player_name'] = $arr_player['name'];
                 $record_info['career_type'] = $arr_player['career_type'];
                 unset($record_info['add_time']);
             }
             $res = array();
             $res['sid'] = $sid;
             $res['kill_num'] = $kill_num;
             $res['time'] = $time;
             $res['reward'] = array();
             $res['new'] = $new;
             #是否创记录
             $res['old_num'] = $player_trial['kill_num'];
             $res['old_time'] = $player_trial['time'];
             $res['record'] = $record_info;
             $reward_ids = explode('|', $reward);
             if ($reward_ids) {
                 if ($kill_num) {
                     foreach ($reward_ids as $value) {
                         $temp = explode(':', $value);
                         if (count($temp) > 1) {
                             $temp_reward = array('type' => Cache_Currency::getInstance()->get_key($temp[0]), 'item_id' => $temp[0], 'item_num' => $temp[1] * $buff);
                             array_push($res['reward'], $temp_reward);
                         } else {
                             $this->throw_error(10222, 6010015);
                         }
                     }
                 }
                 if ($mails[$i]) {
                     //下线发邮件
                     if ($kill_num) {
                         $phrase_config = Cache_FuncPhraseConfig::getInstance()->get_phrase_config_info(4071);
                         $content = sprintf($phrase_config['content'], $kill_num);
                         $attachment = array();
                         foreach ($res['reward'] as $value) {
                             $attachment[] = array("prop_id" => $value['item_id'], "prop_num" => $value['item_num']);
                         }
                         $this->get_game('Mail')->async_trigger_mail($player_id, $phrase_config['title'], $content, $attachment, $phrase_config['sender'], 1, 1142, 0);
                     }
                 } else {
                     if ($kill_num) {
                         $result = $this->get_game('Reward')->send_reward($player_id, $res['reward'], array('cmd_id' => 1142, 'bind_flag' => 0), 1);
                         if (true === $result) {
                             $this->get_game('Reward')->add_reward_log();
                             //记录日志
                             $res['reward_id'] = 1;
                         } else {
                             $this->throw_error(10110, 6010009);
                         }
                     } else {
                         $res['reward_id'] = 0;
                     }
                     Protocol::input($player_id, 8, 11, 1142, $res);
                 }
                 # 引导任务埋点
                 $this->get_game('TaskTrigger')->async_trigger_guide_task($player_id, 37, 1);
                 //添加活跃度
                 $this->get_game('DailyBoon')->async_trigger_daily_boon_task($player_id, 3012, 1);
             } else {
                 $this->throw_error(10222, 6010012);
             }
         }
     }
 }
コード例 #17
0
ファイル: GrabMine.php プロジェクト: bluefan/phpsource
 /**
  * 用途:获取结算奖励 + 484
  * @param $player_list和score_list已按降序排序过
  * @return array
  */
 public function get_reward($player_id, $map_id, $player_list, $score_list, $state_list, $looted_scores)
 {
     if (empty($map_id) || empty($player_list) || empty($score_list) || empty($state_list) || !is_array($player_list) || !is_array($score_list) || !is_array($state_list)) {
         $this->throw_error('10107');
         //参数错误!
     }
     # 获取排名奖励列表,已按排名排好序
     $rank_reward_list = Cache_GrabMine::getInstance()->get_rank_reward_list($map_id);
     if (empty($rank_reward_list)) {
         $this->throw_error('180003');
         # 抢矿副本排位奖励信息配置错误
     }
     $rank_reward_omit = $rank_reward_list[count($rank_reward_list) - 1];
     # 超过已配置最大排位的奖励,使用最大排位计算
     $involved_num = count($player_list);
     # 参与人数
     for ($i = 0; $i < $involved_num; $i++) {
         $rank_reward_info = empty($rank_reward_list[$i]) ? $rank_reward_omit : $rank_reward_list[$i];
         $player_info = $this->get_data('Player')->get_player_info($player_list[$i], array('player_id', 'level', 'vip', 'privilege_level'));
         if (empty($player_info['player_id'])) {
             # 可能是跨服造成的其它服玩家
             #Com_Log::debug_write('xgame.all.error', "Grabmine error: unvalid player: ".$player_list[$i]);
             #$this->throw_error('20002'); # 获取玩家信息失败
             continue;
         }
         # 获取vip对奖励的加成信息,只加成非道具奖励
         $vip_add_coeff = Com_Util::get_vip_special_reward_add_coeff(10036, $player_info['vip'], $player_info['privilege_level'], $player_info['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'])) {
             $this->throw_error('180005');
             # 抢矿副本基础奖励信息配置错误
         }
         if (!empty($state_list[$i])) {
             # 在线直接发奖
             $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);
             $re = $this->get_game('Reward')->send_reward($player_list[$i], $reward, array('cmd_id' => '484'), 1);
             $this->write_check_strict($re, 3010303);
             # 该方法会自动推送843协议告知前端显示奖励信息,会调用prop_806协议通知道具变更,调用p2c_part_update通知人物信息变更
             $ret = $this->get_game('Reward')->add_reward_log();
             $reward_fmt = array();
             if (!empty($reward)) {
                 foreach ($reward as $r) {
                     if (empty($r['item_id'])) {
                         # 虚拟货币
                         $item_idx = Cache_Currency::getInstance()->get_index($r['type']);
                         $reward_fmt[] = array('type' => $item_idx, 'item_id' => $item_idx, 'item_num' => $r['item_num']);
                     } else {
                         $reward_fmt[] = array('type' => $r['item_id'], 'item_id' => $r['item_id'], 'item_num' => $r['item_num']);
                     }
                 }
             }
             # 告知Flash排位奖励
             Protocol::input($player_list[$i], 8, 11, 1126, array('rank' => $i + 1, 'rank_reward' => $reward_fmt));
             $final_reward_detail = $this->get_game('Reward')->get_reward_detail_by_reward($reward);
             Com_Log::debug_write('xgame.grabmine', $player_list[$i] . "\tget_reward directly\t" . $player_info['level'] . "\t" . $player_info['vip'] . "\t" . $vip_add_coeff . "\t" . json_encode($final_reward_detail));
         } else {
             # 不在线的发邮件
             # 生成奖励邮件附件信息
             $attachment = array();
             $reward_detail_base = $this->get_game('Reward')->get_reward_detail_other_way($base_reward_info['base_reward'], $rank_reward_info['reward_add'], 1);
             foreach ($reward_detail_base as $item_idx => $item_num) {
                 $item_num = ceil($item_num * (1 + $vip_add_coeff));
                 $attachment[] = array("prop_id" => $item_idx, "prop_num" => $item_num);
             }
             $reward_detail_rank = $this->get_game('Reward')->get_reward_detail($rank_reward_info['reward_item'], 1);
             foreach ($reward_detail_rank as $item_idx => $item_num) {
                 $item_num = ceil($item_num * (1 + $vip_add_coeff));
                 $attachment[] = array("prop_id" => $item_idx, "prop_num" => $item_num);
             }
             # 邮件发送
             $day = date("n.j", $this->current_time);
             $hour = date("G:i", $this->current_time);
             $phrase_config = Cache_FuncPhraseConfig::getInstance()->get_phrase_config_info(9);
             $content = sprintf($phrase_config['content'], $day, $hour, $rank_reward_info['rank_id']);
             $re = $this->get_game('Mail')->async_trigger_mail($player_list[$i], $phrase_config['title'], $content, $attachment, $phrase_config['sender'], 1, 484);
             $final_reward_detail = array();
             foreach ($attachment as $val) {
                 $final_reward_detail[$val['prop_id']] += $val['prop_num'];
             }
             Com_Log::debug_write('xgame.grabmine', $player_list[$i] . "\tget_reward mail\t" . $player_info['level'] . "\t" . $player_info['vip'] . "\t" . $vip_add_coeff . "\t" . json_encode($final_reward_detail));
         }
         # 更新水晶争夺参与次数[结算完算参与]
         $re = $this->get_data('PlayerDailyTime')->add_used_time($player_info['player_id'], 'grabmine_involved_num', 1);
         $left_num = $this->get_grabmine_remain_involved_num($player_info['player_id']);
         if ($left_num < 0) {
             $left_num = 0;
         }
         Protocol_Player::p2c_part_update($player_info['player_id'], array('mineral_remaining_count' => $left_num));
         $this->write_check($re, 3010363);
         //找回资源埋点
         $this->get_game('GetBackCurrency')->add_function_day_times($player_info['player_id'], 8);
         # --------------------------------------------------------------------
         # 维护一个全榜玩家积分累计值排名的有序集合[积分做score]
         # --------------------------------------------------------------------
         if (!empty($looted_scores[$i])) {
             $re = $this->redis()->zsets_incr($this->grabmine_score_acc_sorted_set, $looted_scores[$i], $player_info['player_id']);
             Com_Log::write('xgame.grabmine', $this->grabmine_score_acc_sorted_set . "|" . $looted_scores[$i] . "|" . $player_info['player_id']);
             $this->write_check($re, 3010417);
             # 成就相关埋点: 获取当前排名并埋点触发成就
             $current_rank = $this->get_rank($player_info['player_id']);
             if (!empty($current_rank)) {
                 $this->get_game('PlayerAchieve')->async_trigger_achieve_target($player_info['player_id'], 45, $current_rank, 3);
             }
         }
         # --------------------------------------------------------------------
         # 活动日志记录
         # --------------------------------------------------------------------
         $event_log_info = array('log_type' => 'grabmine', 'player_id' => $player_info['player_id'], 'reg_time' => $this->current_time, 'map_id' => $map_id, 'score' => $score_list[$i], 'rank' => $i + 1, 'state' => $state_list[$i]);
         $this->get_game('Event')->async_deal_event_log($event_log_info);
         # --------------------------------------------------------------------
         # 游戏日志记录
         # --------------------------------------------------------------------
         $log_info = array('player_id' => $player_info['player_id'], 'player_level' => $player_info['level'], 'vip_level' => $player_info['vip'], 'vip_special_level' => $player_info['privilege_level'], 'add_time' => $this->current_time, 'map_id' => $map_id, 'score' => $score_list[$i], 'rank' => $i + 1, 'state' => $state_list[$i], 'reward' => json_encode($final_reward_detail));
         Log_Grabmine::getInstance()->add_log($log_info);
     }
     # 记录行为,TODO: 考虑更详细的日志信息记录
     $log_content = "{$player_id}\t" . "get_reward\t" . "{$map_id}\t" . json_encode($player_list) . "\t" . json_encode($score_list);
     Com_Log::debug_write('xgame.grabmine', $log_content);
 }
コード例 #18
0
ファイル: Prop.php プロジェクト: bluefan/phpsource
 /**
  * 发新道具的接口  如果道具叠加 可以吧道具拆多个发 给send_prop_auto_overlay方法调用
  * @param $player_id
  * @param $prop_id
  * @param $prop_num
  * @param $arrLogs 返回 道具日志
  * @param null $arrPropConfig  道具配置信息
  * @param null $channel 0包裹满不发邮件 1 包裹满发邮件
  * @return bool|string
  */
 protected function send_prop_to_player($player_id, $prop_id, $prop_num, &$arrLogs, $cmd_id, $arrPropConfig = null, $channel = 0, $player_info = null)
 {
     if (!$arrPropConfig) {
         $arrPropConfig = Cache_Prop::getInstance()->get_prop_info($prop_id);
     }
     if (!$arrPropConfig) {
         # 对于偶发性的奖励发送报道具配置出错问题添加调试日志
         //			Com_Log::write('xgame.debug', "Error occured in " . __CLASS__ . ":\t$player_id\t$prop_id\t$prop_num\t".json_encode($arrPropConfig));
         $this->throw_error('80003', '101800248');
         //道具配置出错,请联系客服!
     }
     if ($arrPropConfig['max_lap_num'] > 0) {
         $new_num = ceil($prop_num / $arrPropConfig['max_lap_num']);
         $rest_prop_num = $prop_num;
         $bag_pos = $this->get_empty_pos($player_id, $new_num, 1, $player_info);
         //            Com_Log::log($bag_pos,"pos.log",1);
         if (!$bag_pos) {
             if ($channel == 1) {
                 $phrase_id = 100000 + $cmd_id;
                 $phrase_config = Cache_FuncPhraseConfig::getInstance()->get_phrase_config_info($phrase_id);
                 if (empty($phrase_config)) {
                     $phrase_config = Cache_FuncPhraseConfig::getInstance()->get_phrase_config_info(1);
                 }
                 $attachment = array();
                 if ($arrPropConfig['type'] == 1) {
                     if (!isset($arrPropConfig['base_attr'])) {
                         $arrPropConfig = $this->get_equip_attr($arrPropConfig);
                     }
                     #TODO 包裹满的时候装备属性增加到包裹前生产好
                     $attachment[] = array('prop_id' => $prop_id, 'prop_num' => $prop_num, 'config' => $arrPropConfig);
                 } else {
                     $attachment[] = array('prop_id' => $prop_id, 'prop_num' => $prop_num);
                 }
                 $this->get_game('Mail')->async_trigger_mail($player_id, $phrase_config['title'], $phrase_config['content'], $attachment, $phrase_config['sender'], 1, $cmd_id);
                 //	                $this->throw_error("80034");//包裹已满,已发送到邮件!
                 $arrPropConfig["item_num"] = $prop_num;
                 $arrPropConfig['send_mail'] = 1;
                 $arrLogs[] = $arrPropConfig;
                 return true;
             } else {
                 $this->throw_error("80001");
                 //包裹已满!
             }
         }
         for ($i = 0; $i < $new_num; $i++) {
             $arrPropConfig['level'] = $arrPropConfig['level'];
             $arrPropConfig['bind_flag'] = $arrPropConfig['bind_flag'];
             $arrPropConfig['grid'] = $bag_pos[$i];
             $arrPropConfig['item_position'] = 1;
             $arrPropConfig['from_item_position'] = 0;
             $old_item_num = $arrPropConfig["item_num"];
             $arrPropConfig["item_num"] = $rest_prop_num > $arrPropConfig['max_lap_num'] ? $arrPropConfig['max_lap_num'] : $rest_prop_num;
             $rest_prop_num = $rest_prop_num - $arrPropConfig["item_num"];
             $res = $this->add_player_prop($player_id, $arrPropConfig, $cmd_id);
             if (!$res) {
                 $this->throw_error('80002');
             }
             //                $arrPropConfig['star_level'] = $res["star_level"];
             //                $arrTempLogs = array_merge($arrPropConfig,$res);
             //                $arrPropConfig['player_prop_id'] = $res['player_prop_id'];
             //                $arrPropConfig['prop_id'] = $res['sid'];
             //                $arrPropConfig['item_num'] = $res["item_num"];
             //                $arrPropConfig['star_level'] = $res["star_level"];
             //                $arrPropConfig['base_attr'] = $res["base_attr"];
             //                $arrPropConfig['addition_attr'] = $res["addition_attr"];
             //                $arrPropConfig['equip_view'] = $res["equip_view"];
             $arrLogs[] = $res;
             unset($arrTempLogs);
         }
     } else {
         $bag_pos = $this->get_empty_pos($player_id, $prop_num, 1, $player_info);
         //            Com_Log::log($bag_pos,"pos.log",1);
         if (!$bag_pos) {
             if ($channel == 1) {
                 $phrase_id = 100000 + $cmd_id;
                 $phrase_config = Cache_FuncPhraseConfig::getInstance()->get_phrase_config_info($phrase_id);
                 if (empty($phrase_config)) {
                     $phrase_config = Cache_FuncPhraseConfig::getInstance()->get_phrase_config_info(1);
                 }
                 $attachment = array();
                 if ($arrPropConfig['type'] == 1) {
                     if (!isset($arrPropConfig['base_attr'])) {
                         $arrPropConfig = $this->get_equip_attr($arrPropConfig);
                     }
                     #TODO 包裹满的时候装备属性增加到包裹前生产好
                     $attachment[] = array('prop_id' => $prop_id, 'prop_num' => $prop_num, 'config' => $arrPropConfig);
                 } else {
                     $attachment[] = array('prop_id' => $prop_id, 'prop_num' => $prop_num);
                 }
                 $this->get_game('Mail')->async_trigger_mail($player_id, $phrase_config['title'], $phrase_config['content'], $attachment, $phrase_config['sender'], 1, $cmd_id);
                 //	            	$this->throw_error("80034");//包裹已满,已发送到邮件!
                 $arrPropConfig["item_num"] = $prop_num;
                 $arrPropConfig['send_mail'] = 1;
                 $arrLogs[] = $arrPropConfig;
                 return true;
             } else {
                 $this->throw_error("80001");
                 //包裹已满!
             }
         }
         for ($i = 0; $i < $prop_num; $i++) {
             $arrPropConfig['level'] = $arrPropConfig['level'];
             $arrPropConfig['bind_flag'] = $arrPropConfig['bind_flag'];
             $arrPropConfig['grid'] = $bag_pos[$i];
             $arrPropConfig['item_position'] = 1;
             $arrPropConfig["item_num"] = 1;
             $res = $this->add_player_prop($player_id, $arrPropConfig, $cmd_id, $player_info);
             if (!$res) {
                 $this->throw_error('80002');
             }
             //                $arrPropConfig['star_level'] = $res["star_level"];
             //                $arrTempLogs = array_merge($arrPropConfig,$res);
             $arrLogs[] = $res;
         }
     }
     return true;
 }
コード例 #19
0
ファイル: UnionGrabDomain.php プロジェクト: bluefan/phpsource
 public function deal_rank_reward($grab_domain_conf = array())
 {
     if (!$grab_domain_conf) {
         $grab_domain_conf = Cache_UnionGrabDomain::getInstance()->get_base_conf();
     }
     //周几
     $week = $this->get_week();
     if ($week == $grab_domain_conf['week_end']) {
         $phrase_config = Cache_FuncPhraseConfig::getInstance()->get_phrase_config_info(9095);
         $data = $this->get_data('UnionGrabDomain')->get_rank_list_by_multisort();
         if ($data) {
             $rank = 1;
             $result = 1;
             $objUnionPlayerData = $this->get_data('UnionPlayer');
             foreach ($data as $union_info) {
                 if (!$union_info['status']) {
                     $rank_reward_str = Cache_UnionGrabDomain::getInstance()->get_union_rank_reward($rank);
                     $award_rank_add = Cache_UnionGrabDomain::getInstance()->get_union_rank_add_conf($rank);
                     $award_rank_add_str = $award_rank_add['rank_add'];
                     $reward_detail = $this->get_game('Reward')->get_reward_detail_other_way($rank_reward_str, $award_rank_add_str, 1);
                     $union_exp = 0;
                     $fund = 0;
                     foreach ($reward_detail as $key => $value) {
                         if (9 == $key) {
                             $union_exp = $value;
                         }
                         if (10 == $key) {
                             $fund = $value;
                         }
                     }
                     $create_player_id = $this->get_data('UnionInfo')->get_union_info($union_info['union_id'], 'create_player_id');
                     $this->start_trans();
                     $result = $this->get_data('UnionInfo')->update_union_info($union_info['union_id'], array('fund' => '+' . $fund));
                     $arr_union_reward = array();
                     $arr_union_reward[] = array("type" => "union_exp", "item_id" => 9, "item_num" => $union_exp);
                     $success_add_exp = $this->get_game('UnionReward')->send_reward($create_player_id, $arr_union_reward, array("cmd_id" => 2601));
                     if ($result) {
                         $result = $this->get_data('UnionGrabDomain')->set_week_union_info($union_info['union_id'], array('status' => 1));
                     }
                     if (!$result) {
                         $this->rollback();
                         break;
                     }
                     $this->commit();
                     if ($success_add_exp) {
                         $this->get_game('UnionReward')->add_union_reward_log();
                     }
                     //发邮件
                     $content = sprintf($phrase_config['content'], $rank, $success_add_exp, $fund);
                     $unionPlayerList = $objUnionPlayerData->get_union_player_info($union_info['union_id']);
                     foreach ($unionPlayerList as $player_id => $player_list) {
                         $this->get_game('Mail')->async_trigger_mail($player_id, $phrase_config['title'], $content, array(), $phrase_config['sender'], 2, 2601, 0);
                     }
                 }
                 $rank++;
             }
         }
     }
 }
コード例 #20
0
ファイル: AutoPve.php プロジェクト: bluefan/phpsource
 /**
  * 挂机领取奖励
  * @param unknown $add_exp
  * @param unknown $arr_item_id
  * @param unknown $arr_item_num
  */
 public function auto_pve_add_reward($player_id, $add_exp, $arr_item_id, $arr_item_num)
 {
     $reward = array();
     if (Com_Array::is_good_arr($arr_item_id)) {
         foreach ($arr_item_id as $key => $item_id) {
             $item_num = $arr_item_num[$key];
             if ($item_num > 0) {
                 $reward[] = array('type' => Cache_FbLoot::getInstance()->get_item_key($item_id), 'item_id' => $item_id, 'item_num' => $item_num);
             }
         }
     }
     if ($add_exp) {
         $reward[] = array('type' => Cache_FbLoot::getInstance()->get_item_key(1), 'item_id' => 1, 'item_num' => $add_exp);
     }
     if (!empty($reward)) {
         $result = $this->get_game('Reward')->send_reward($player_id, $reward, array('cmd_id' => '771'));
         if ($result !== true) {
             $attachment = array();
             foreach ($reward as $prop) {
                 $attachment[] = array("prop_id" => $prop['item_id'], "prop_num" => $prop['item_num']);
             }
             $phrase_config = Cache_FuncPhraseConfig::getInstance()->get_phrase_config_info(11);
             $this->get_game('Mail')->async_trigger_mail($player_id, $phrase_config['title'], $phrase_config['content'], $attachment, $phrase_config['sender'], 1, 771);
             Com_Log::debug_write('auto_pve_add_reward', "player_id={$player_id},fail=" . json_encode($reward));
             $this->throw_error(80034);
             return false;
         }
         Com_Log::debug_write('auto_pve_add_reward', "player_id={$player_id},sucess=" . json_encode($reward));
         $this->get_game('Reward')->add_reward_log(true);
     }
 }
コード例 #21
0
ファイル: VipReward.php プロジェクト: bluefan/phpsource
 public function send_mail_to_player($player_id, $vip_level)
 {
     $phrase_id = 0;
     if ($vip_level == 6) {
         $phrase_id = 8007;
         $func_id = 1290;
     } elseif ($vip_level == 10) {
         $phrase_id = 8008;
         $func_id = 1291;
     }
     if ($phrase_id > 0) {
         $phrase_config = Cache_FuncPhraseConfig::getInstance()->get_phrase_config_info($phrase_id);
         $content = $phrase_config['content'];
         $attachment = array();
         $re = $this->get_game('Mail')->async_trigger_mail($player_id, $phrase_config['title'], $content, $attachment, $phrase_config['sender'], 1, 2016, 0);
         $this->write_check($re);
         $func_data = array();
         $func_data[0][$func_id] = array('operate' => 1, 'func_id' => $func_id, 'open' => 1, 'guide' => 0, 'cd' => 0, 'tip' => 1);
         Protocol::input($player_id, 8, 7, 741, $func_data);
         Protocol::out();
     }
 }
コード例 #22
0
ファイル: GrabTreasure.php プロジェクト: bluefan/phpsource
 /**
  * 夺宝战斗结果
  * @param unknown $player_id
  * @param unknown $battle_seq
  * @param unknown $winner_player_id
  * @param unknown $loser_player_id
  */
 public function battle_result($player_id, $battle_seq, $winner_player_id, $loser_player_id)
 {
     $battle_seq = intval($battle_seq);
     $winner_player_id = intval($winner_player_id);
     $loser_player_id = intval($loser_player_id);
     $this->start_trans();
     $grab_fail_award = "";
     $get_piece_id = "";
     $battle_result = 0;
     $grab_result = 0;
     $opponent_player_id = $winner_player_id;
     $phrase_id = 0;
     $player_info = array();
     $opponent_player_info = array();
     if ($winner_player_id == 0 && $loser_player_id == 0) {
         $battle_id_info = $this->get_data("GrabTreasure")->get_battle_id_info($battle_seq);
         $player_id = $battle_id_info['player_id'];
         $opponent_player_id = $battle_id_info['opponent_player_id'];
         $player_info = $this->get_data('Player')->get_player_info($player_id, array("sum_fpower", "is_dummy", "name", "vip", "privilege_level", "level"));
         $opponent_player_info = $this->get_cross("GrabTreasure")->get_player_info($opponent_player_id, array("sum_fpower", "is_dummy", "name", "vip", "privilege_level", "level"));
         if (empty($opponent_player_info)) {
             $opponent_player_info = $this->get_data('Player')->get_player_info($opponent_player_id, array("sum_fpower", "is_dummy", "name", "vip", "privilege_level", "level"));
         }
         Com_Log::debug_write('async_trigger_battle_test', "player_id={$player_id},{$player_info['sum_fpower']}={$opponent_player_info['sum_fpower']}");
         if ($player_info['sum_fpower'] > $opponent_player_info['sum_fpower']) {
             $winner_player_id = $player_id;
             $loser_player_id = $opponent_player_id;
             $phrase_id = 16;
         } else {
             $winner_player_id = $opponent_player_id;
             $loser_player_id = $player_id;
             $phrase_id = 17;
         }
     }
     if ($player_id == $winner_player_id) {
         $battle_result = 1;
         $opponent_player_id = $loser_player_id;
         if (empty($opponent_player_info) || empty($player_info)) {
             $player_info = $this->get_data('Player')->get_player_info($player_id, array("sum_fpower", "is_dummy", "name", "vip", "privilege_level", "level"));
             $opponent_player_info = $this->get_cross("GrabTreasure")->get_player_info($opponent_player_id, array("sum_fpower", "is_dummy", "name", "vip", "privilege_level", "level"));
             if (empty($opponent_player_info)) {
                 $opponent_player_info = $this->get_data('Player')->get_player_info($opponent_player_id, array("sum_fpower", "is_dummy", "name", "vip", "privilege_level", "level"));
             }
         }
         #抢碎片成功概率
         $rate_config = $this->get_battle_success_rate($player_info, $opponent_player_info);
         $random_get_piece_result = Com_Random::probability($rate_config['success_rate'], 100);
         #新手引导成功率100%
         $player_treasure_info = $this->get_cross("GrabTreasure")->get_grab_treasure($player_id, array("battle_log_id", "battle_need_piece_id", "battle_piece_quality", "quality_piece_ids", "is_guide"));
         if (intval($player_treasure_info["is_guide"]) == 1) {
             $random_get_piece_result = true;
         }
         $player_treasure_info["is_guide"] = 0;
         #抢碎片成功
         if ($random_get_piece_result) {
             $grab_result = 1;
             $quality = $player_treasure_info["battle_piece_quality"];
             $need_piece_id = $player_treasure_info["battle_need_piece_id"];
             #挑战成功加碎片
             $player_treasure_info["quality_piece_ids"][$quality][$need_piece_id] = $need_piece_id;
             #真实玩家
             if ($opponent_player_info['is_dummy'] == 0) {
                 $grab_piece_id = $need_piece_id;
                 $opponent_treasure_info = $this->get_cross("GrabTreasure")->get_grab_treasure($opponent_player_id, array("quality_piece_ids"));
                 #碎片存在
                 if (isset($opponent_treasure_info["quality_piece_ids"][$quality]) && !empty($opponent_treasure_info["quality_piece_ids"][$quality])) {
                     if (isset($opponent_treasure_info["quality_piece_ids"][$quality][$need_piece_id])) {
                         unset($opponent_treasure_info["quality_piece_ids"][$quality][$need_piece_id]);
                     } else {
                         $grab_piece_id = array_shift($opponent_treasure_info["quality_piece_ids"][$quality]);
                     }
                     #被抢者扣碎片
                     $re = $this->get_cross("GrabTreasure")->update_grab_treasure($opponent_player_id, $opponent_treasure_info);
                     $this->write_check($re, 5010859);
                     #抢者加碎片
                     $re = $this->get_cross("GrabTreasure")->update_grab_treasure($player_id, $player_treasure_info);
                     $this->write_check($re, 5010867);
                     #解除战斗中锁
                     $re = $this->get_cross("GrabTreasure")->clear_battle_lock($opponent_player_id);
                     $this->write_check($re, 5010862);
                     #抢碎片日志
                     #{0}抢走了你的{1},简直不能忍!
                     $pieceConfig = Cache_GrabTreasurePiece::getInstance()->get_grab_treasure_piece($grab_piece_id);
                     $arr_replace = array(array('rep_type' => 0, 'rep_val' => $player_id, 'txt' => $player_info['name']), array('rep_type' => 7, 'txt' => $pieceConfig['name']));
                     $msg = Language_Message::make_message(123001, $arr_replace);
                     $add_log["player_id"] = $opponent_player_id;
                     $add_log["grab_player_id"] = $player_id;
                     $add_log["grab_piece_id"] = $grab_piece_id;
                     $add_log["quality"] = $quality;
                     $add_log["add_time"] = time();
                     $add_log['rep_content'] = $msg;
                     $add_log["is_allow_grab"] = 1;
                     $re = $this->get_cross("GrabTreasureLog")->add_grab_treasure_log($battle_seq, $add_log);
                     $this->write_check($re, 5010876);
                 } else {
                     $grab_result = 0;
                 }
             } else {
                 $re = $this->get_cross("GrabTreasure")->update_grab_treasure($player_id, $player_treasure_info);
                 $this->write_check($re, 5010992);
             }
             if (intval($player_treasure_info['battle_log_id']) > 0) {
                 $data = $this->get_cross('GrabTreasureLog')->get_grab_treasure_log($player_id, $player_treasure_info['battle_log_id']);
                 if (!empty($data)) {
                     $data['is_allow_grab'] = 0;
                     $re = $this->get_cross('GrabTreasureLog')->update_grab_treasure_info($player_id, $player_treasure_info['battle_log_id'], $data);
                     $this->write_check($re, 5010983);
                 }
             }
         }
         if ($grab_result == 0) {
             $need_piece_id = '';
             $grab_fail_award = $rate_config['fail_award'];
             $reward = $this->get_format_reward($grab_fail_award);
             if ($phrase_id > 0) {
                 $attachment = array();
                 foreach ($reward as $prop) {
                     $attachment[] = array("prop_id" => $prop['item_id'], "prop_num" => $prop['item_num']);
                 }
                 $phrase_config = Cache_FuncPhraseConfig::getInstance()->get_phrase_config_info($phrase_id);
                 $this->get_game('Mail')->async_trigger_mail($player_id, $phrase_config['title'], $phrase_config['content'], $attachment, $phrase_config['sender'], 1, 1230);
             } else {
                 $re = $this->get_game('Reward')->send_reward($player_id, $reward, array('cmd_id' => '1230'), 1);
                 if ($re !== true) {
                     $this->write_check($re, 5011077);
                 }
             }
         }
     }
     $is_battle_lock = $this->get_cross("GrabTreasure")->get_battle_lock($opponent_player_id);
     if ($is_battle_lock) {
         $re = $this->get_cross("GrabTreasure")->clear_battle_lock($opponent_player_id);
         $this->write_check($re, 5010872);
     }
     $this->commit();
     if ($battle_result == 1 && $grab_result == 0 && $phrase_id == 0) {
         $this->get_game('Reward')->add_reward_log();
     }
     if ($battle_result == 0 && $phrase_id > 0) {
         $phrase_config = Cache_FuncPhraseConfig::getInstance()->get_phrase_config_info($phrase_id);
         $this->get_game('Mail')->async_trigger_mail($player_id, $phrase_config['title'], $phrase_config['content'], array(), $phrase_config['sender'], 1);
     }
     #抢碎片增加日志
     if ($grab_result == 1) {
         if ($opponent_player_info['is_dummy'] == 0) {
             Log_Common::getInstance()->add_prop_log($opponent_player_id, $opponent_player_info['level'], $opponent_player_info['vip'], $opponent_player_info['privilege_level'], 1231, 11, 0, $grab_piece_id, 1, $pieceConfig['name'], $quality, 1, 0, 1, '', 0);
         }
         $pieceConfig = Cache_GrabTreasurePiece::getInstance()->get_grab_treasure_piece($need_piece_id);
         Log_Common::getInstance()->add_prop_log($player_id, $player_info['level'], $player_info['vip'], $player_info['privilege_level'], 1231, 10, 0, $need_piece_id, 1, $pieceConfig['name'], $quality, 1, 0, 1, '', 0);
         if ($phrase_id > 0) {
             $phrase_config = Cache_FuncPhraseConfig::getInstance()->get_phrase_config_info(18);
             $this->get_game('Mail')->async_trigger_mail($player_id, $phrase_config['title'], $phrase_config['content'], array(), $phrase_config['sender'], 1);
         }
     }
     $out = array('battle_result' => $battle_result, 'grab_result' => $grab_result, 'get_piece_id' => $need_piece_id, 'grab_fail_award' => $grab_fail_award);
     $this->get_game('PlayerFunc')->sync_func_tips($player_id, 1040);
     #日常任务埋点
     $this->get_game('TaskTrigger')->async_trigger_task($player_id, 119, 119, 1);
     Protocol::input($player_id, 8, 12, 1230, $out);
 }
コード例 #23
0
ファイル: AthenaQuestion.php プロジェクト: bluefan/phpsource
 public function get_reward($player_id, $map_id, $player_list, $score_list, $state_list)
 {
     if (empty($map_id) || empty($player_list) || empty($score_list) || empty($state_list) || !is_array($player_list) || !is_array($score_list)) {
         $this->throw_error('10107');
         //参数错误!
     }
     $involved_num = count($player_list);
     # 参与人数
     for ($i = 0; $i < $involved_num; $i++) {
         $player_info = $this->get_data('Player')->get_player_info($player_list[$i], array('player_id', 'level', 'vip', 'privilege_level'));
         if (empty($player_info)) {
             Com_Log::debug_write('xgame.all.error', "Grabmine error: unvalid player: " . $player_list[$i]);
             #$this->throw_error('20002'); # 获取玩家信息失败
         }
         # 获取排名奖励信息
         $rank_reward_info = Cache_AthenaQuestion::getInstance()->get_rank_reward_info($i + 1, $player_info['level']);
         # 获取分值奖励信息
         $score_reward_info = Cache_AthenaQuestion::getInstance()->get_score_reward_info($player_info['level']);
         if (empty($score_reward_info) || empty($score_reward_info['loop_score']) || empty($score_reward_info['score_reward'])) {
             $this->throw_error('190006');
             # 雅典娜答题积分奖励信息配置错误
         }
         $reward_detail_score = array();
         $reward_detail_rank = array();
         if (!empty($state_list[$i])) {
             # 在线直接发奖
             $reward = array();
             # 积分奖励
             if (!empty($score_list[$i])) {
                 # 积分不为0
                 $loop_num = intval($score_list[$i] / $score_reward_info['loop_score']);
                 $reward_detail_score = $this->get_game('Reward')->get_reward_detail($score_reward_info['score_reward'], $loop_num);
                 $this->get_game('Reward')->gen_reward_array($reward_detail_score, $reward);
             }
             # 排位奖励
             if (!empty($rank_reward_info)) {
                 $reward_detail_rank = $this->get_game('Reward')->get_reward_detail($rank_reward_info['rank_reward'], 1);
                 $this->get_game('Reward')->gen_reward_array($reward_detail_rank, $reward);
             }
             $re = $this->get_game('Reward')->send_reward($player_list[$i], $reward, array('cmd_id' => '484'), 1);
             $this->write_check_strict($re, 3010303);
             # 该方法会自动推送843协议告知前端显示奖励信息,会调用prop_806协议通知道具变更,调用p2c_part_update通知人物信息变更
             $ret = $this->get_game('Reward')->add_reward_log();
             $reward_fmt = array();
             if (!empty($reward)) {
                 $reward_detail = $this->get_game('Reward')->get_reward_detail_by_reward($reward);
                 foreach ($reward_detail as $item_id => $item_num) {
                     $reward_fmt[] = array('type' => $item_id, 'item_id' => $item_id, 'item_num' => $item_num);
                 }
             }
             # 告知Flash排位与奖励,注意score有可能为0
             Protocol::input($player_list[$i], 8, 11, 1150, array('score' => $score_list[$i], 'rank' => $i + 1, 'rank_reward' => $reward_fmt));
         } else {
             # 不在线的发邮件
             # 邮件发送
             $day = date("n.j", $this->current_time);
             $attachment_score = array();
             $attachment_rank = array();
             # 积分奖励
             if (!empty($score_list[$i])) {
                 # 积分不为0
                 $loop_num = intval($score_list[$i] / $score_reward_info['loop_score']);
                 $reward_detail_score = $this->get_game('Reward')->get_reward_detail($score_reward_info['score_reward'], $loop_num);
                 foreach ($reward_detail_score as $item_idx => $item_num) {
                     $attachment_score[] = array("prop_id" => $item_idx, "prop_num" => $item_num);
                 }
                 $phrase_config_score = Cache_FuncPhraseConfig::getInstance()->get_phrase_config_info($this->score_reward_mail_id);
                 $content_score = sprintf($phrase_config_score['content'], $day, $score_list[$i]);
                 $re = $this->get_game('Mail')->async_trigger_mail($player_list[$i], $phrase_config_score['title'], $content_score, $attachment_score, $phrase_config_score['sender'], 1, 552);
             }
             # 排位奖励
             if (!empty($rank_reward_info)) {
                 $reward_detail_rank = $this->get_game('Reward')->get_reward_detail($rank_reward_info['rank_reward'], 1);
                 foreach ($reward_detail_rank as $item_idx => $item_num) {
                     $attachment_rank[] = array("prop_id" => $item_idx, "prop_num" => $item_num);
                 }
                 $phrase_config_rank = Cache_FuncPhraseConfig::getInstance()->get_phrase_config_info($this->rank_reward_mail_id);
                 $content_rank = sprintf($phrase_config_rank['content'], $day, $i + 1);
                 $re = $this->get_game('Mail')->async_trigger_mail($player_list[$i], $phrase_config_rank['title'], $content_rank, $attachment_rank, $phrase_config_rank['sender'], 1, 552);
             }
         }
         # 更新雅典娜答题参与次数[结算完算参与]
         $re = $this->get_data('PlayerDailyTime')->add_used_time($player_info['player_id'], 'athena_question_involved_num', 1);
         $this->write_check($re, 3010355);
         # 找回资源埋点
         $this->get_game('GetBackCurrency')->add_function_day_times($player_info['player_id'], 9);
         # 引导任务埋点
         $this->get_game('TaskTrigger')->async_trigger_guide_task($player_info['player_id'], 36, 1);
         # 每日活跃度埋点
         $this->get_game('DailyBoon')->async_trigger_daily_boon_task($player_info['player_id'], 3013, 1);
         # --------------------------------------------------------------------
         # 游戏日志记录
         # --------------------------------------------------------------------
         $log_info = array('player_id' => $player_info['player_id'], 'player_level' => $player_info['level'], 'vip_level' => $player_info['vip'], 'vip_special_level' => $player_info['privilege_level'], 'add_time' => $this->current_time, 'map_id' => $map_id, 'score' => $score_list[$i], 'rank' => $i + 1, 'reward_score' => json_encode($reward_detail_score), 'reward_rank' => json_encode($reward_detail_rank));
         Log_AthenaQuestion::getInstance()->add_log($log_info);
     }
     return null;
 }