Example #1
0
 /**
  * 初始化的一些操作
  */
 protected function init()
 {
     if (DEBUG > 0) {
         //            Com_SystemLog::init();//初始化系统日志
     }
     SynPlayer::init();
 }
Example #2
0
 public function buff_attr($player_id, $part_update = true)
 {
     $data = $this->get_data('PlayerBuffData')->get_buff_data($player_id);
     $buff_data = array();
     if ($data) {
         $buff_sid = array();
         //            $time = time();
         foreach ($data as $val) {
             //                if(($val['save_time']+$val['duration_total']/1000) > $time){
             $buff_sid[] = $val['buff_sid'];
             //                }
         }
         if ($buff_sid) {
             $buff_data = Cache_SkillBuff::getInstance()->get_buff_data($buff_sid);
         }
     }
     $buff_attr = array();
     $buff_attr_per = array();
     $buff_exp_addition = array();
     if (!empty($buff_data)) {
         foreach ($buff_data as $val) {
             $attr_key = $this->get_attr_by_buff_type($val['param1']);
             if ($val['buff_type'] == 'mod_fight_attr') {
                 $buff_attr[$attr_key] += $val['param2'];
             }
             if ($val['buff_type'] == 'mod_fight_attr_%') {
                 $buff_attr_per[$attr_key] += $val['param2'];
             }
             if ($val['buff_type'] == 'mod_exp_%') {
                 $buff_exp_addition['exp'] += $val['param1'];
             }
         }
         //            Com_Log::write("buff_attr".$player_id,"buff_attr".var_export($buff_attr,true));
         //            Com_Log::write("buff_attr".$player_id,"buff_attr_per".var_export($buff_attr_per,true));
     }
     $result = $this->get_data('PlayerDetail')->update_player_detail($player_id, array('buff_attr' => $buff_attr, 'buff_attr_per' => $buff_attr_per, 'buff_exp_addition' => $buff_exp_addition));
     if (!$part_update) {
         $objPlayer = $this->get_data('Player');
         $player_info = $objPlayer->get_player_info($player_id);
         $objFpowerCalc = $this->get_game('FpowerCalc');
         $objFpowerCalc->set_player_info($player_info);
         $player_fpower = $objFpowerCalc->calc_player_fpower($player_id);
         $player_info['fpower'] = $player_fpower['fpower'];
         $update_fpower['buff_fpower'] = $player_fpower['buff_fpower'];
         $update_fpower['fpower'] = $player_info['fpower'] + $player_info['sq_fpower'] + $player_info['skill_fpower'] + $player_info['equip_fpower'];
         $sum_fpower = $update_fpower['fpower'] + $player_info['hero_fpower'] + $player_info['fairy_fpower'] + $player_info['wing_fpower'] + $update_fpower['buff_fpower'];
         $update_fpower['sum_fpower'] = $sum_fpower;
         $objPlayer->update_player_info($player_id, $update_fpower);
         $syn_item['buff_fpower'] = $update_fpower['buff_fpower'];
         SynPlayer::set_syn_data($syn_item);
         $data = SynPlayer::get_data();
         Protocol::input($player_id, 7, 4, 417, array(0 => $data['m'], 1 => $data['u']));
     }
     if ($result && $part_update) {
         Protocol_Player::p2c_part_update($player_id, array('attr' => ''));
     }
 }
Example #3
0
 /**
  * C++请求某玩家信息
  * @param $player_id
  * @param $serial_no
  * @return mixed
  */
 public function query_role_info_ack($player_id, $serial_no, $min_level, $max_level, $func_type, $dungeon_type, $batch_index, $batch_count)
 {
     //		Com_Log::write('xgame.playerbase', "$player_id\t$serial_no\t$min_level\t$max_level\t$func_type");
     if (empty($player_id)) {
         # 生成一个robot
         # 按等级段从player表中随机匹配一个玩家,以该玩家属性生成的mask为准
         $player_id = $this->get_data('Player')->get_rand_player_by_level_segment($min_level, $max_level);
         if (empty($player_id)) {
             return false;
         }
         # 御风说的,427没有符合等级段的玩家,不返回下行
         # 获取一个去重后的随机昵称,并替换真实玩家昵称
         $robot_name = $this->get_data('PlayerName')->get_unused_rand_nickname();
         //			Com_Log::write('xgame.playerbase', "player_id:$player_id\trobot_name:$robot_name");
         # 获取一个新的player_id,替换掉真实玩家player_id,单服唯一,没有做更细致的$serial_no唯一
         $robot_id = $this->get_data('Player')->get_new_player_id_for_robot();
         if (!empty($func_type)) {
             $return_player_id = $player_id;
         } else {
             $return_player_id = $robot_id;
         }
     } else {
         # do nothing
         $return_player_id = $player_id;
     }
     $player_data = $this->get_player_whole_attr($player_id);
     # 替换掩码中的name和player_id
     $player_data['player_id'] = $return_player_id;
     $player_data['name'] = $robot_name ? $robot_name : $player_data['name'];
     # 属性折扣处理
     if (!empty($func_type)) {
         $player_data['atk_min'] = ceil($player_data['atk_min'] * (1 - 0.2));
         $player_data['atk_max'] = ceil($player_data['atk_max'] * (1 - 0.2));
         $player_data['arm'] = ceil($player_data['arm'] * (1 - 0.2));
         $player_data['crit_chance'] = ceil($player_data['crit_chance'] * (1 - 0.2));
         $player_data['damage_dodge'] = ceil($player_data['damage_dodge'] * (1 - 0.2));
         $player_data['hp'] = ceil($player_data['hp'] * (1 - 0.2));
     }
     SynPlayer::set_syn_data($player_data);
     $synPlayerData = SynPlayer::get_data();
     $out_427 = array('player_id' => $return_player_id, 'player_name' => $robot_name ? $robot_name : $player_data['name'], 'career_type' => $player_data['career_type'], 'serialno' => $serial_no, 'masks' => $synPlayerData['m'], 'values' => $synPlayerData['u'], 'func_type' => $func_type, 'dungeon_type' => intval($dungeon_type), 'batch_index' => intval($batch_index), 'batch_count' => intval($batch_count));
     # 记录行为
     //		Com_Log::write('xgame.playerbase',
     //			"{$player_id}\t".
     //			"query_role_info_ack\t".
     //			"{$out_427['player_id']}\t".
     //			"{$out_427['player_name']}\t".
     //			"{$out_427['career_type']}\t".
     //			"{$out_427['serialno']}\t".
     //			"{$out_427['func_type']}\t"
     //		);
     /**
     		$data = $this->playerInfo($player_id, $player_id);
     		$out_427 = array(
     			'player_id'		=> $robot_id ? $robot_id : $player_id,
     			'player_name'	=> $robot_name? $robot_name: $data['player_name'],
     			'career_type'	=> $data['career_type'],
     			'serialno'		=> $serial_no,
     			'masks'			=> $data['makes'],
     			'values'		=> $data['values'],
     		);
     		**/
     return $out_427;
 }
Example #4
0
 /**
  * 获取挑战双方战斗信息
  * @param unknown $player_id
  * @param unknown $opponent_player_id  对手玩家ID
  * @return multitype:number
  */
 public function grab_treasure_battle($player_id, $opponent_player_id, $need_pieces_id, $battle_log_id = 0)
 {
     $opponent_player_id = intval($opponent_player_id);
     $battle_log_id = intval($battle_log_id);
     $opponent_player_info = $this->get_cross("GrabTreasure")->get_player_info($opponent_player_id, array("player_id", "is_dummy", "server_id"));
     if (empty($opponent_player_info)) {
         $opponent_player_info = $this->get_data("Player")->get_player_info($opponent_player_id, array("player_id", "is_dummy", "server_id"));
         if (empty($opponent_player_info)) {
             $this->throw_error('20002');
             #获取玩家信息失败
         }
         $opponent_player_info['server_id'] = SERVER_ID;
     }
     list($prop_id, $pieces_index) = explode("_", $need_pieces_id);
     $pieceConfig = Cache_GrabTreasurePiece::getInstance()->get_grab_treasure_piece($need_pieces_id);
     if (empty($pieceConfig)) {
         $this->throw_error('80003', "5010905{$prop_id}{$pieces_index}");
     }
     $grab_prop_config = Cache_GrabTreasureBase::getInstance()->get_grab_treasure_id($prop_id);
     if (empty($grab_prop_config)) {
         $this->throw_error('80003', "5010900{$prop_id}");
         //游戏配置出错,请联系客服!
     }
     #限制挑战玩家在推荐列表中或抢回日志列表中
     if ($battle_log_id == 2) {
         $recommend_player_list = $this->get_cross("GrabTreasure")->get_grab_treasure($player_id, "recommend_player_list");
         #操作不符法
         if (empty($recommend_player_list) || !in_array($opponent_player_id, $recommend_player_list)) {
             $this->throw_error('173702', "5010916");
         }
     } else {
         $log_data = $this->get_game("GrabTreasure")->grab_treasure_log($player_id, 1, 100);
         if (empty($log_data['list'])) {
             $this->throw_error('173702', "5010923");
         }
         $is_allow_grab = 0;
         foreach ($log_data['list'] as $val) {
             if ($val["is_allow_grab"] == 1 && $val['grab_player_id'] == $opponent_player_id) {
                 $is_allow_grab = 1;
                 break;
             }
         }
         if ($is_allow_grab == 0) {
             $this->throw_error('173702', "5010932");
         }
     }
     $quality = $grab_prop_config['quality'];
     # 当天剩余可用挑战次数验证
     $buy_times_info = Cache_BuyTimes::getInstance()->get_buy_times_info($this->grab_treasure_battle_buy_type, 1);
     $battle_times = $this->get_data('PlayerDailyTime')->get_player_used_time($player_id, 'grab_treasure_battle_times');
     $battle_buy_times = $this->get_data('PlayerDailyTime')->get_player_used_time($player_id, 'grab_treasure_battle_buy_times');
     if (empty($battle_times)) {
         $battle_times = 0;
     }
     if (empty($battle_buy_times)) {
         $battle_buy_times = 0;
     }
     $battle_times_max = $battle_buy_times * $buy_times_info['per_num'] + $this->grab_treasure_max_times;
     if ($battle_times >= $battle_times_max) {
         $this->throw_error('113706');
         # 剩余可用挑战次数不足
     }
     $cd_acc_lock = $this->get_data('GrabTreasure')->get_battle_cd_acc_lock($player_id);
     # 获取挑战CD时间累计锁状态
     $battle_remain_cd = $this->get_data('GrabTreasure')->get_battle_remain_cd($player_id);
     # 获取:挑战剩余cd时间
     $safe_remain_cd = $this->get_cross('GrabTreasure')->get_safe_remain_cd($player_id);
     # 获取保护时间
     $allow_battle = 1;
     if (!empty($cd_acc_lock)) {
         # CD时间累计锁打开,不再允许CD累计
         if ($battle_remain_cd > 0) {
             $allow_battle = 0;
         }
     } else {
         # CD时间累计锁关闭,允许CD累计
         if ($battle_remain_cd >= $this->grab_treasure_battle_cd_stint) {
             $allow_battle = 0;
         }
     }
     if ($allow_battle == 0) {
         $this->throw_error('122201');
         # 夺宝战斗CD中[上次超过上限后CD尚未清零,CD累计锁尚未关闭]
     }
     #对手是否挑战中
     $is_in_battle = $this->get_cross("GrabTreasure")->get_battle_lock($opponent_player_id);
     if ($is_in_battle) {
         $this->throw_error("122203");
     }
     $player_info = $this->get_data('Player')->get_player_info($player_id, array("is_online", "privilege_level"));
     $is_online = $player_info["is_online"];
     #对方在线保护状态不可挑战
     $safe_remain_cd = $this->get_cross('GrabTreasure')->get_safe_remain_cd($opponent_player_id);
     # 获取保护时间
     if ($safe_remain_cd > 0) {
         #离线玩家没有开启保护模式
         if ($is_online) {
             $this->throw_error('122202');
         }
     }
     #验证对手是否存在该碎片
     if ($opponent_player_info['is_dummy'] == 0) {
         $grab_treasure_info = $this->get_cross("GrabTreasure")->get_grab_treasure($opponent_player_id);
         if ($grab_treasure_info) {
             if (!isset($grab_treasure_info['quality_piece_ids'][$quality]) || empty($grab_treasure_info['quality_piece_ids'][$quality])) {
                 if ($battle_log_id > 0) {
                     $log_data = $this->get_cross('GrabTreasureLog')->get_grab_treasure_log($player_id, $battle_log_id);
                     if (!empty($log_data)) {
                         $log_data['is_allow_grab'] = 0;
                         $this->get_cross('GrabTreasureLog')->update_grab_treasure_info($player_id, $battle_log_id, $log_data);
                     }
                 }
                 $this->throw_error('122801');
                 #碎片已被其它玩家抢光
             }
         }
     }
     $player_data = $this->get_game('PlayerBase')->get_player_whole_attr($player_id);
     if (SERVER_ID == $opponent_player_info['server_id']) {
         $opponent_player_data = $this->get_game('PlayerBase')->get_player_whole_attr($opponent_player_id);
     } else {
         $param = array("action" => "PlayerInfo", "command" => "get_player_whole_attr", "player_id" => $opponent_player_id);
         $objApi = TenYear::getInstance('Com_Uzapi');
         $objApi->setReqData($param);
         $ip = $this->get_cross('Base')->get_server_ip($opponent_player_info['server_id']);
         $objApi->setServerUrl($ip);
         $response = $objApi->sendRequest();
         if (!empty($response['return'])) {
             $opponent_player_data = $response['return'];
         } else {
             $opponent_player_data = array();
         }
     }
     SynPlayer::set_syn_data($player_data);
     $synPlayerData = SynPlayer::get_data();
     SynPlayer::set_syn_data($opponent_player_data);
     $synTgtPlayerData = SynPlayer::get_data();
     $data = array('ladder_id' => 0, 'role_id_0' => $player_data['player_id'], 'role_name_0' => $player_data['name'], 'career_type_0' => $player_data['career_type'], 'masks_0' => $synPlayerData['m'], 'values_0' => $synPlayerData['u'], 'role_id_1' => $opponent_player_data['player_id'], 'role_name_1' => $opponent_player_data['name'], 'career_type_1' => $opponent_player_data['career_type'], 'masks_1' => $synTgtPlayerData['m'], 'values_1' => $synTgtPlayerData['u']);
     # 获取唯一的战斗序列号
     $battle_seq = $this->get_cross('GrabTreasure')->get_new_grab_treasure_battle_seq();
     $data['ladder_id'] = $battle_seq;
     $this->start_trans();
     $is_add_battle_cd = 1;
     #特权免CD
     if ($player_info['privilege_level'] > 0) {
         $left_cd = $this->get_game('VipSpecial')->get_left_time($player_id);
         if ($left_cd > 0) {
             $vip_info = Cache_VipLevelLimit::getInstance()->get_limit_info_unrelated_to_vip_level(10080);
             if (!empty($vip_info)) {
                 if ($player_info['privilege_level'] >= $vip_info['vip_level']) {
                     $is_add_battle_cd = 0;
                 }
             }
         }
     }
     if ($is_add_battle_cd) {
         $re = $this->get_data('GrabTreasure')->add_battle_cd($player_id, $this->grab_treasure_battle_cd_time);
         $this->write_check($re, 5010726);
     }
     # 更新挑战次数
     $re = $this->get_data('PlayerDailyTime')->add_used_time($player_id, 'grab_treasure_battle_times', 1);
     $this->write_check($re, 5010731);
     #对手挑战中
     if ($opponent_player_info['is_dummy'] == 0) {
         $re = $this->get_cross("GrabTreasure")->add_battle_lock($opponent_player_id);
         $this->write_check($re, 5010765);
     }
     $update_data["battle_need_piece_id"] = $need_pieces_id;
     $update_data["battle_piece_quality"] = $quality;
     $update_data["battle_log_id"] = $battle_log_id;
     $re = $this->get_cross('GrabTreasure')->update_grab_treasure($player_id, $update_data);
     $this->write_check($re, 5010787);
     $this->commit();
     $battle_id_info = array('player_id' => $player_id, 'opponent_player_id' => $opponent_player_id);
     $this->get_data("GrabTreasure")->add_battle_id_info($battle_seq, $battle_id_info);
     #一旦掠夺其他玩家的保护,会取消自己的保护时间
     $this->get_cross("GrabTreasure")->clear_safe_remain_cd($player_id);
     # 推送C++战斗双方属性信息
     Protocol::input($player_id, 7, 4, 540, $data);
     unset($data['masks_0'], $data['values_0'], $data['masks_1'], $data['values_1']);
     $data_json = json_encode($data);
     Com_Log::debug_write('xgame.grab_treasure', "{$player_id}\t" . "grab_treasure_battle\t" . "{$data_json}\t");
     $out = array('result' => 1);
     #夺宝N次添加引导任务
     $this->get_game('TaskTrigger')->async_trigger_guide_task($player_id, 35, 1);
     $this->get_game('DailyBoon')->async_trigger_daily_boon_task($player_id, 3016, 1);
     return $out;
 }
Example #5
0
 /**
  * 心跳同步 更新session expires
  *
  * @return unknown
  */
 public function heart_sync($player_id)
 {
     $player_info = $this->get_data('Player')->get_player_info($player_id, array('silver', 'crystal', 'fame_level', 'career_type', 'gold', 'player_id', 'user_account', 'reg_time', 'ad_Info', 'level', 'vip', 'privilege_level', 'session_id', 'adult_flag', 'login_time', 'heart_time'));
     if (empty($player_info)) {
         return false;
     }
     $sessID = $player_info['session_id'];
     if (empty($sessID)) {
         return false;
     }
     $objSession = TenYear::getInstance('session');
     $objSession->set_expire($sessID);
     $this->online_time($player_id, $player_info);
     //计算在线时长
     if (OPERATOR_ID == 82) {
         $objT = $this->get_game('Tencent');
         $seesion_info = $objT->get_param($player_id);
         $objT->isLogin();
     }
     $data = $this->get_game('PlayerFunc')->red_icon($player_id, $player_info);
     Protocol::input($player_id, 8, 70, 7002, array(0 => $data, 1 => 1));
     $time = date('H:i');
     if ($time < '00:20') {
         $log_data = array('player_id' => $player_info["player_id"], 'channel' => 1, 'client_ip' => Com_System::get_client_ip(), 'game_client_ip' => Com_System::get_client_ip(), 'reg_time' => $player_info['reg_time'], 'ad_info' => $player_info['ad_Info'], 'player_level' => $player_info['level'], 'vip_level' => $player_info['vip'], 'vip_special_level' => $player_info['privilege_level']);
         Log_Common::getInstance()->add_log($log_data, 'day');
         if ($player_info['ad_Info']) {
             Com_System::send_request(array('user_account' => $player_info['user_account']), 'login');
         }
     }
     if ($time >= '05:05' && $time <= '05:15') {
         Com_Log::write("heart_sync." . $player_id, "start");
         $syn_item['count_boss_oakland'] = 0;
         $syn_item['count_monsters_oakland'] = 0;
         $syn_item['count_chest_oakland'] = 0;
         SynPlayer::set_syn_data($syn_item);
         $data = SynPlayer::get_data();
         Protocol::input($player_id, 7, 4, 417, array(0 => $data['m'], 1 => $data['u']));
     }
     if ($player_info['level'] > 9) {
         $data = $this->get_game('Quit')->get_close_info($player_id);
         Protocol::input($player_id, 8, 7, 792, $data);
         $data = $this->get_game('Strengthen')->get_guide_list($player_id);
         Protocol::input($player_id, 8, 18, 1808, $data);
     }
     return true;
 }
Example #6
0
 /**
  * C++获取技能接口 405 进副本
  * @param $player_id
  */
 public function role_skill_list_req($player_id)
 {
     $player_info = $this->get_data('Player')->get_player_info($player_id, array('level', 'career_type'));
     $arr_player_detail = $this->get_data('PlayerDetail')->get_player_detail($player_id, array('skill_info', 'skill_rune_info', 'skill_starmap_info', 'train_info'));
     $skill_infos = $this->skill_list($player_id, $player_info, $arr_player_detail);
     $syndata['skill_infos'] = $skill_infos['skill_infos'];
     $syndata['fairy_info'] = $skill_infos['fairy_info'];
     SynPlayer::set_syn_data($syndata);
     $synData = SynPlayer::get_data();
     return array(0, $synData['m'], $synData['u']);
 }
Example #7
0
 public function update_player_vip($player_id, $level)
 {
     if ($level < 0 || $level > 10) {
         echo "等级错误";
         return;
     }
     $objPlayer = TenYear::getInstance('Data_Player');
     $objPlayer->update_player_info($player_id, array('vip' => $level));
     SynPlayer::set_syn_data(array('vip' => $level));
     $data = SynPlayer::get_data();
     Protocol::input($player_id, 7, 4, 417, array(0 => $data['m'], 1 => $data['u']));
     $out = TenYear::getInstance('Game_PlayerBag')->get_vip_bag_storage_num($player_id);
     Protocol::input($player_id, 8, 8, 844, $out);
     Protocol::out();
     echo "添加成功";
 }
Example #8
0
 public function Sync_Union_create_msg($union_id)
 {
     $union_id = intval($union_id);
     $data = $this->get_data('UnionInfo')->get_union_info($union_id);
     if (!empty($data)) {
         #会长信息
         $pdata = $this->get_game('PlayerBase')->get_player_init_info($data['create_player_id']);
         if (empty($pdata)) {
             $data['err_code'] = 1;
             return $data;
         }
         #获取掩码数据
         SynPlayer::set_syn_data($pdata);
         $synData = SynPlayer::get_data();
         $temp = array();
         $temp['guild_id'] = $union_id;
         $temp['president_masks'] = $synData['m'];
         #会长角色属性掩码
         $temp['president_values'] = $synData['u'];
         #会长角色属性数据
         Protocol::input(0, 7, 4, 482, $temp);
         #更新缓存
         $this->Sync_Union_msg($union_id, -1, 2, 0, false, false);
     }
 }
Example #9
0
 /**
  * 1202: 获取天梯挑战双方战斗信息
  * @note 如果用$tgt_player_id[对手ID] + $mon_offset[怪物位置偏移量] + $reward_buff_offset[额外奖励buff位置偏移量]作为挑战参数,则三者的参数验证比较复杂
  * @param $opponent_seq 对手列表的唯一对手序号,方便参数验证
  * @return bool
  */
 public function challenge_battle($player_id, $opponent_seq)
 {
     # 参数合法性校验
     $latest_opponent_list = $this->get_data('Challenge')->get_player_latest_opponent_list($player_id);
     if (empty($latest_opponent_list) || empty($latest_opponent_list[$opponent_seq])) {
         $this->throw_error('120110');
         # 天梯挑战参数不合法
     }
     # 当天天梯剩余可用挑战次数验证
     $challenge_battle_num = $this->get_data('PlayerDailyTime')->get_player_used_time($player_id, 'challenge_battle_num');
     $challenge_battle_buy_num = $this->get_data('PlayerDailyTime')->get_player_used_time($player_id, 'challenge_battle_buy_num');
     if (empty($challenge_battle_num)) {
         $challenge_battle_num = 0;
     }
     if (empty($challenge_battle_buy_num)) {
         $challenge_battle_buy_num = 0;
     }
     $current_challenge_avail_battle_num = $challenge_battle_buy_num * 5 + $this->challenge_battle_stint - $challenge_battle_num;
     if ($current_challenge_avail_battle_num <= 0) {
         $this->throw_error('120112');
         # 天梯剩余可用挑战次数不足
     }
     # 战前排位优先
     $tgt_rank = $latest_opponent_list[$opponent_seq]['rank'];
     $tgt_player_id = $latest_opponent_list[$opponent_seq]['player_id'];
     $mon_offset = $latest_opponent_list[$opponent_seq]['mon_offset'];
     $reward_buff_type = $latest_opponent_list[$opponent_seq]['reward_buff_type'];
     $reward_buff_offset = $latest_opponent_list[$opponent_seq]['reward_buff_offset'];
     # NOTE: 因为怪物的sort_weight = 2 * mon_offset - 1;故而mon_offset临近的两个怪物中间一定会有一个玩家存在;
     # 例如mon_offset=[6,7]的怪物,其sort_weight为[11,13],则中间值sort_weight=12的一定是rank=6的实际玩家,故而向后取序号一定可以取到玩家
     $dummy_player_id = $mon_offset ? $latest_opponent_list[$opponent_seq - 1]['player_id'] : 0;
     # 挑战怪物时,需要取怪物后一位排名玩家属性
     $player_rank_info = $this->get_data('Challenge')->get_player_challenge_rank_info($player_id);
     # 选择挑战对手时,本人的最新排名信息
     if ($player_rank_info['challenge_status'] == 1 || $player_rank_info['challenge_status'] == 2) {
         # ---------------------------------------------------------------------
         # 验证对手列表是否过于陈旧(第一位)
         # ---------------------------------------------------------------------
         /**
         			# 获取最新的天梯对手玩家列表
         			list($opponent_list, $opponent_player_ids, $hold_monster_info) = $this->get_opponent_list($player_rank_info);
         			# 对对手列表添加额外奖励buff信息
         			$opponent_list = $this->challenge_reward_buff_handle($opponent_list, $player_id, $player_rank_info['challenge_status']);
         			# 获取简化的对手列表
         			$simplified_oppo_list = $this->get_simplified_opponent_list($opponent_list);
         			
         			$is_diff = $this->diff_oppo_list($simplified_oppo_list, $latest_opponent_list);
         			if (!empty($is_diff)) {
         				$latest_challenge_list = $this->get_challenge_list($player_id);	
         				Protocol::input($this->_authuser['player_id'],3,12,1201,$latest_challenge_list);
         				$this->throw_error('120115'); # 天梯列表过于陈旧,刷新后请重新选择对手
         			}
         			**/
         # ---------------------------------------------------------------------
         # 非怪物时,验证对手排位变化,若发生变化,则变更对手为该排位上的最新对手(第二位),由于上一步的确保,此步骤其实是多余的
         # ---------------------------------------------------------------------
         if (empty($mon_offset)) {
             $tgt_player_rank_info = $this->get_data('Challenge')->get_player_challenge_rank_info($tgt_player_id);
             if ($tgt_player_rank_info['rank'] != $tgt_rank) {
                 $tgt_player_rank_info = $this->get_data('Challenge')->get_player_challenge_rank_info_by_rank($tgt_rank);
                 $tgt_player_id = $tgt_player_rank_info['player_id'];
                 #$this->throw_error('120113'); # 对手排位已改变,请更新对手列表后再挑战
             }
         }
         # ---------------------------------------------------------------------
         # 验证对手是否已经在天梯挑战过程中(第三位)
         # ---------------------------------------------------------------------
         if (empty($mon_offset)) {
             if (!empty($tgt_player_rank_info['is_in_battle']) && $this->current_time < $tgt_player_rank_info['in_battle_time'] + $this->challenge_battle_vtime) {
                 $this->throw_error('120114');
                 # 对手正在天梯战斗中,请稍后再战或更换对手
             }
         } else {
             $monster_info = $this->get_data('Challenge')->get_challenge_monster_info($mon_offset);
             if (!empty($monster_info['is_in_battle']) && $this->current_time < $monster_info['in_battle_time'] + $this->challenge_battle_vtime) {
                 $this->throw_error('120114');
                 # 对手正在天梯战斗中,请稍后再战或更换对手
             }
         }
     }
     # 是否允许挑战校验,检测是否战斗CD超过规定值
     $cd_acc_lock = $this->get_data('Challenge')->get_cd_acc_lock($player_id);
     # 获取天梯挑战CD时间累计锁状态
     $remain_cd = $this->get_data('Challenge')->get_challenge_remain_cd($player_id);
     if (!empty($cd_acc_lock)) {
         # CD时间累计锁打开,不再允许CD累计
         if ($remain_cd > 0) {
             $this->throw_error('120135');
             # 天梯挑战冷却中[上次超过上限后CD尚未清零,CD累计锁尚未关闭]
         }
     } else {
         # CD时间累计锁关闭,允许CD累计
         if ($remain_cd >= $this->challenge_battle_cd_stint) {
             $this->throw_error('120105');
             # 天梯挑战冷却中,可花费钻石清除[CD累计值超过上限]
         }
     }
     # 是否允许挑战校验,检测是否在上一场战斗CD中,本人
     $last_battle_log = $this->get_data('Challenge')->get_challenge_battle_log_by_player_id($player_id);
     if ($last_battle_log['battle_status'] == 0 && $this->current_time < $last_battle_log['reg_time'] + $this->challenge_battle_vtime) {
         $this->throw_error('120101');
         # 天梯战斗CD中
     }
     # 验证mon_offset是否合法
     if (!empty($mon_offset)) {
         $monster_info = $this->get_data('Challenge')->get_challenge_monster_info($mon_offset);
         if (empty($monster_info)) {
             $this->throw_error('120109');
             # 天梯挑战怪物不存在或已被击杀
         }
     }
     $player_data = $this->get_player_whole_attr($player_id);
     $player_info = $this->get_data('Player')->get_player_info($player_id);
     # 连败时的战力加成处理
     if ($player_info['challenge_cont_lose'] > 0) {
         $ability_add_info = Cache_Ladder::getInstance()->get_ability_add_info($player_info['challenge_cont_lose']);
         if (empty($ability_add_info)) {
             $this->throw_error('120106');
             # 没有连胜或连败的加成配置信息
         }
         $player_data['sum_fpower'] = $player_data['sum_fpower'] * (1 + intval($ability_add_info['ability_add'] / 100));
     }
     if ($mon_offset) {
         # 玩家挑战NPC
         $dummy_player_data = $this->get_player_whole_attr($dummy_player_id);
         # 虚拟玩家属性
         #Com_Log::debug_write('xgame.challenge', "$player_id challenge $tgt_player_id " . json_encode($dummy_player_data));
         # 属性折扣处理
         $this->battle_attr_addition_handle($player_data);
         SynPlayer::set_syn_data($player_data);
         $synPlayerData = SynPlayer::get_data();
         SynPlayer::set_syn_data($dummy_player_data);
         $synTgtPlayerData = SynPlayer::get_data();
         $data = array('ladder_id' => 0, 'role_id_0' => $player_data['player_id'], 'role_name_0' => $player_data['name'], 'career_type_0' => $player_data['career_type'], 'masks_0' => $synPlayerData['m'], 'values_0' => $synPlayerData['u'], 'role_id_1' => $dummy_player_data['player_id'], 'role_name_1' => $dummy_player_data['name'], 'career_type_1' => $dummy_player_data['career_type'], 'masks_1' => $synTgtPlayerData['m'], 'values_1' => $synTgtPlayerData['u'], 'monster_npc_sid' => $tgt_player_id, 'extra_buff_id0' => 0, 'extra_buff_id1' => 0);
     } else {
         # 玩家挑战玩家
         $tgt_player_data = $this->get_player_whole_attr($tgt_player_id);
         #Com_Log::debug_write('xgame.challenge', "$player_id challenge $tgt_player_id " . json_encode($tgt_player_data));
         #Com_Log::debug_write('xgame.challenge', "$player_id challenge $tgt_player_id skill_infos_tgt " . json_encode($tgt_player_data['skill_infos']));
         # 属性折扣处理
         $this->battle_attr_discount_handle($player_data, $tgt_player_data);
         SynPlayer::set_syn_data($player_data);
         $synPlayerData = SynPlayer::get_data();
         SynPlayer::set_syn_data($tgt_player_data);
         $synTgtPlayerData = SynPlayer::get_data();
         $data = array('ladder_id' => 0, 'role_id_0' => $player_data['player_id'], 'role_name_0' => $player_data['name'], 'career_type_0' => $player_data['career_type'], 'masks_0' => $synPlayerData['m'], 'values_0' => $synPlayerData['u'], 'role_id_1' => $tgt_player_data['player_id'], 'role_name_1' => $tgt_player_data['name'], 'career_type_1' => $tgt_player_data['career_type'], 'masks_1' => $synTgtPlayerData['m'], 'values_1' => $synTgtPlayerData['u'], 'monster_npc_sid' => 0, 'extra_buff_id0' => 0, 'extra_buff_id1' => 0);
     }
     # 获取挑战额外加成BUFF可用加成次数
     $second_last_login_time = !empty($player_info['second_last_login_time']) ? $player_info['second_last_login_time'] : $player_info['login_time'];
     $extra_buff_avail_num = $this->get_challenge_battle_extra_buff_avail_num($player_id, $second_last_login_time);
     # 赋值额外加成buff并消耗1次使用次数
     if ($extra_buff_avail_num > 0) {
         $data['extra_buff_id0'] = $this->extra_buff_id_self;
         $extra_buff_avail_num -= 1;
         $extra_buff_avail_num = max($extra_buff_avail_num, $this->extra_buff_avail_num_stint);
         $re = $this->get_data('Challenge')->set_player_extra_buff_avail_num($player_id, $extra_buff_avail_num);
         $this->write_check($re, 3010491);
     }
     # 第一次天梯挑战则加一个额外buff
     if (empty($player_rank_info['in_battle_time'])) {
         $data['extra_buff_id0'] = $this->extra_buff_id_self;
         $data['extra_buff_id1'] = $this->extra_buff_id_opponent;
     }
     # 获取唯一的战斗序列号
     $battle_seq = $this->get_data('Challenge')->get_new_challenge_battle_seq($player_id);
     $data['ladder_id'] = $battle_seq;
     $this->start_trans();
     # 增加天梯挑战cd时间,只有当vip等级小于某个值时才有挑战CD
     $vip_limit_type = Cache_VipLevelLimit::getInstance()->get_limit_info_func_id(10013);
     $vip_limit_info = Cache_VipLevelLimit::getInstance()->get_limit_info_unrelated_to_vip_level(10013);
     if (!empty($vip_limit_type) && !empty($vip_limit_info)) {
         # 有vip限制
         if ($vip_limit_type['fun_type'] == 1) {
             # vip限制
             if ($player_info['vip'] < $vip_limit_info['vip_level']) {
                 $re = $this->get_data('Challenge')->add_challenge_battle_cd($player_id, $this->challenge_battle_cd_time);
                 $this->write_check($re, 3010512);
             }
         } elseif ($vip_limit_type['fun_type'] == 2) {
             # 特权限制
             $left_time = $this->get_game('VipSpecial')->get_left_time($player_id);
             if ($player_info['privilege_level'] < $vip_limit_info['vip_level'] || $left_time == 0) {
                 $re = $this->get_data('Challenge')->add_challenge_battle_cd($player_id, $this->challenge_battle_cd_time);
                 $this->write_check($re, 3010512);
             }
         }
     } else {
         # 无vip限制
         $re = $this->get_data('Challenge')->add_challenge_battle_cd($player_id, $this->challenge_battle_cd_time);
         $this->write_check($re, 3010516);
     }
     # 更新天梯挑战次数
     $re = $this->get_data('PlayerDailyTime')->add_used_time($player_id, 'challenge_battle_num', 1);
     $this->write_check($re, 3010521);
     # 记录挑战日志,注意要以两种方式记录,以battle_seq为key和以player_id为key两种,后面那种允许覆盖,仅记录玩家最后一次挑战信息
     $battle_log = array('battle_seq' => $battle_seq, 'player_id' => $player_id, 'tgt_player_id' => $tgt_player_id, 'battle_status' => 0, 'reg_time' => $this->current_time, 'mon_offset' => $mon_offset, 'battle_result' => 0, 'reward_buff_type' => $reward_buff_type, 'reward_buff_offset' => $reward_buff_offset);
     $re = $this->get_data('Challenge')->update_challenge_battle_log($battle_log);
     $this->write_check($re, 3010536);
     # 更新战斗状态
     if ($player_rank_info['challenge_status'] == 1 || $player_rank_info['challenge_status'] == 2) {
         # 真实天梯对手才需要更新
         $player_rank_info['is_in_battle'] = 1;
         $player_rank_info['in_battle_time'] = $this->current_time;
         $re = $this->get_data('Challenge')->update_challenge_rank_info($player_rank_info);
         $this->write_check($re, 3010543);
         if (empty($mon_offset)) {
             $tgt_player_rank_info['is_in_battle'] = 1;
             $tgt_player_rank_info['in_battle_time'] = $this->current_time;
             $re = $this->get_data('Challenge')->update_challenge_rank_info($tgt_player_rank_info);
             $this->write_check($re, 3010548);
         } else {
             $monster_info['is_in_battle'] = 1;
             $monster_info['in_battle_time'] = $this->current_time;
             $re = $this->get_data('Challenge')->update_challenge_monster_info($monster_info);
             $this->write_check($re, 3010553);
         }
     }
     $this->commit();
     //找回资源埋点
     $this->get_game('GetBackCurrency')->add_function_day_times($player_id, 5);
     # 蛋疼的次数同步埋点
     $this->get_game('PlayerFunc')->sync_func_tips($player_id, 1040);
     # 推送C++战斗双方属性信息
     Protocol::input($player_id, 7, 4, 428, $data);
     # 每日活跃任务埋点
     $this->get_game('DailyBoon')->async_trigger_daily_boon_task($player_id, 3002, 1, 1);
     # 记录行为
     unset($data['masks_0'], $data['values_0'], $data['masks_1'], $data['values_1']);
     $data_json = json_encode($data);
     Com_Log::write('xgame.challenge', "{$player_id}\t" . "challenge_battle\t" . "{$data_json}\t");
     $out = array('result' => 1);
     return $out;
 }
Example #10
0
 /**
  * 战斗开始
  * @param $player_id 角色id
  * @param $opp_player_id 对手
  * @param $star 星数
  * @return array 
  */
 public function fight_begin($player_id, $opp_player_id, $star)
 {
     $opp_player_id = intval($opp_player_id);
     if (!in_array($star, array(1, 2, 3))) {
         //参数错误
         $this->throw_error(10107, 6010124);
     }
     $left_num = $this->get_left_times($player_id);
     if ($left_num <= 0) {
         //次数用完
         $this->throw_error(17888, 6010124);
     }
     //玩家不存在
     $player_data = $this->get_game('PlayerBase')->get_player_whole_attr($player_id);
     if (!$player_data) {
         $this->throw_error(70110, 6010125);
     }
     $opponent_player_data = $this->get_game('PlayerBase')->get_player_whole_attr($opp_player_id);
     if (!$opponent_player_data) {
         $this->throw_error(70110, 6010126);
     }
     $union_id = $player_data['union_id'];
     $opp_union_id = $opponent_player_data['union_id'];
     if (!$union_id || !$opp_union_id) {
         $this->throw_error(171101, 6010134);
     }
     $ntime = $time = time();
     $time = $this->get_data('UnionGrabDomain')->get_revise_time($time);
     $day = date('Ymd', $time);
     $grab_domain_conf = Cache_UnionGrabDomain::getInstance()->get_base_conf();
     if ($ntime > strtotime($grab_domain_conf['end_time']) || $ntime < strtotime($grab_domain_conf['start_time'])) {
         $this->throw_error(70204, 6010160);
     }
     //公会排名低
     $grab_domain_info = $this->get_data('UnionGrabDomain')->get_domain_info($day);
     if (!$grab_domain_info || !in_array($union_id, $grab_domain_info['group_union']) || !in_array($opp_union_id, $grab_domain_info['group_union'])) {
         $this->throw_error(6010127);
     }
     $grab_opp_union_info = $this->get_data('UnionGrabDomain')->get_union_info($day, $opp_union_id);
     if (1 != $grab_opp_union_info['status']) {
         //战斗标记未开启
         $this->throw_error(6010132);
     }
     if ($union_id != $grab_opp_union_info['opp_union_id']) {
         //不是敌方公会
         $this->throw_error(6010137);
     }
     if (!in_array($opp_player_id, $grab_opp_union_info['manor_info'])) {
         //领地不存在
         $this->throw_error(6010138);
     }
     $grab_opp_manor_info = $this->get_data('UnionGrabDomain')->get_manor_info($day, $opp_player_id);
     if (isset($grab_opp_manor_info) && $grab_opp_manor_info['is_fight']) {
         if ($ntime - $grab_opp_manor_info['fight_time'] > 300) {
             //处理C++异常
             $player_info = $this->get_data('UnionGrabDomain')->get_player_info($day, $grab_opp_manor_info['fight_player_id']);
             if ($player_info) {
                 if ($player_id == $grab_opp_manor_info['fight_player_id']) {
                     $attack_fpower = $player_data['sum_fpower'];
                 } else {
                     $attack_fpower = $this->get_data('Player')->get_player_info($grab_opp_manor_info['fight_player_id'], 'sum_fpower');
                 }
                 $defender_fpower = $opponent_player_data['sum_fpower'];
                 if ($attack_fpower >= $defender_fpower) {
                     $winner_role_id = $grab_opp_manor_info['fight_player_id'];
                     $loser_role_id = $opp_player_id;
                 } else {
                     $winner_role_id = $opp_player_id;
                     $loser_role_id = ${$grab_opp_manor_info}['fight_player_id'];
                 }
                 $battle_id = $player_info['battle_id'];
                 $this->game_over($battle_id, $winner_role_id, $loser_role_id, false);
                 $grab_opp_manor_info = $this->get_data('UnionGrabDomain')->get_manor_info($day, $opp_player_id);
             }
         } else {
             $this->throw_error(6010128);
             //有盟友正在攻打该领地
         }
     }
     if (isset($grab_opp_manor_info) && $grab_opp_manor_info['miss_star'] >= 3) {
         $this->throw_error(6010129);
         //该领地已被我方占领
     }
     if (isset($grab_opp_manor_info) && $grab_opp_manor_info['miss_star'] >= $star) {
         $this->throw_error(6010130);
         //此选择更高级别挑战
     }
     $update = array('is_fight' => 1, 'fight_player_id' => $player_id, 'fight_time' => $ntime);
     $buff_id = 0;
     if (1 == $star) {
         $buff_id = 10601;
     } elseif (3 == $star) {
         $buff_id = 10602;
     }
     SynPlayer::set_syn_data($player_data);
     $synPlayerData = SynPlayer::get_data();
     SynPlayer::set_syn_data($opponent_player_data);
     $synTgtPlayerData = SynPlayer::get_data();
     $data = array('guild_war_id' => 0, 'role_id_0' => $player_data['player_id'], 'role_name_0' => $player_data['name'], 'career_type_0' => $player_data['career_type'], 'masks_0' => $synPlayerData['m'], 'values_0' => $synPlayerData['u'], 'role_id_1' => $opponent_player_data['player_id'], 'role_name_1' => $opponent_player_data['name'], 'career_type_1' => $opponent_player_data['career_type'], 'masks_1' => $synTgtPlayerData['m'], 'values_1' => $synTgtPlayerData['u'], 'extra_buff_id0' => 0, 'extra_buff_id1' => $buff_id);
     # 获取唯一的战斗序列号
     $battle_seq = $this->get_data('UnionGrabDomain')->get_new_battle_seq();
     $data['guild_war_id'] = $battle_seq;
     $this->start_trans();
     $re = $this->get_data('UnionGrabDomain')->set_player_info($day, $player_id, array('battle_id' => $battle_seq, 'battle_star' => $star));
     $this->write_check($re, 6010133);
     $re = $this->get_data('UnionGrabDomain')->set_battle_info($battle_seq, array('battle_id' => $battle_seq, 'attack_player_id' => $player_id, 'defender_player_id' => $opp_player_id, 'battle_star' => $star, 'status' => 0));
     $this->write_check($re, 6010161);
     $re = $this->get_data('UnionGrabDomain')->set_manor_info($day, $opp_player_id, $update);
     $this->write_check($re, 6010125);
     $re = $this->get_data('PlayerDailyTime')->add_used_time($player_id, 'union_grab_domain_use_times');
     //增加挑战次数
     $this->write_check($re, 6010131);
     $this->commit();
     # 推送C++战斗双方属性信息
     Protocol::input($player_id, 7, 4, 542, $data);
     $ret = array('res' => 1);
     return $ret;
 }
Example #11
0
 public function sync($data)
 {
     if (empty($data)) {
         return;
     }
     $data = json_decode($data, true);
     if (!isset($data['player_id'])) {
         return;
     }
     $player_id = $data['player_id'];
     $arr_update = $data['arr_update'];
     $gateway = $data['gateway'];
     //测试环境 推送到不同的gateway
     //        echo $gateway."\n";
     SynPlayer::init($player_id);
     SynPlayer::set_player($player_id);
     if (isset($arr_update['load']) && $arr_update['load'] == 1) {
         #登陆的时候加载下数据
         SynPlayer::init_syn_data(null);
         SynPlayer::set_syn_data($arr_update['init_data']);
         return;
     }
     ########################################################
     $objPlayerBase = $this->get_game('PlayerBase');
     $objFpowerCalc = $this->get_game('FpowerCalc');
     $objPlayer = $this->get_data('Player');
     $objDetail = $this->get_data('PlayerDetail');
     $objPlayerSkill = $this->get_game('PlayerSkill');
     $objPlayerAchieve = $this->get_game('PlayerAchieve');
     $objFairy = $this->get_data('Fairy');
     $objHero = $this->get_game('Hero');
     $objPlayerHero = $this->get_data('PlayerHero');
     $objPlayerWing = $this->get_game('PlayerWing');
     ########################################################
     $player_detail = null;
     $playerInfo = null;
     if (isset($arr_update['player_data'])) {
         $player_detail = $arr_update['player_data']['player_detail'];
         $playerInfo = $arr_update['player_data']['player'];
         if (isset($arr_update['player_data']['player_detail']) && empty($player_detail)) {
             $player_detail = $objDetail->get_player_detail($player_id, Protocol_Player::get_player_attr_detail_key());
         }
         if (isset($arr_update['player_data']['player']) && empty($playerInfo)) {
             $playerInfo = $objPlayer->get_player_info($player_id);
         }
         // Com_Log::write("sync.".$player_id,"player_data".var_export($arr_update['player_data'],true));
     }
     //Com_Log::write("sync.".$player_id,"player_detail".var_export($player_detail,true));
     //Com_Log::write("sync.".$player_id,"playerInfo".var_export($playerInfo,true));
     $cur_data = SynPlayer::get_uval();
     //        Com_Log::write('potion_hot_cnt_'.$player_id,var_export($cur_data,true));
     if (empty($cur_data)) {
         SynPlayer::init_syn_data(null);
         $init_data = $objPlayerBase->get_player_init_info($player_id);
         SynPlayer::set_syn_data($init_data);
         $cur_data = SynPlayer::get_uval();
         if (isset($arr_update['potion_dh_cnt'])) {
             $arr_update['potion_dh_cnt'] = 0;
         }
         #初次同步 如果有这些同步就置为0
         if (isset($arr_update['potion_hot_cnt'])) {
             $arr_update['potion_hot_cnt'] = 0;
         }
         if (isset($arr_update['mp_potion_cnt'])) {
             $arr_update['mp_potion_cnt'] = 0;
         }
     }
     $syn_item = array();
     $player_info = array();
     if (isset($arr_update['attr']) || isset($arr_update['fairy_info']) || isset($arr_update['hero_info'])) {
         //更新人物属性
         //            Com_Log::write('sync_player',"############################[start]##################################");
         //            Com_Log::write('sync_player',"cur_data:".var_export($cur_data,true));
         $player_info = $this->get_player_info($player_id, $playerInfo, $player_detail);
         $attr = Cache_AttrConfig::getInstance()->get_attr();
         //            Com_Log::write('sync_player',"attr:".var_export($attr,true));
         $attr_mag = array();
         $level = $cur_data[36];
         //            Com_Log::write("sync_level.".$player_id,"level:{$level}");
         foreach ($attr as $key) {
             $cur_val = $cur_data[SynPlayer::get_attr_inde($key)];
             $now_val = intval($player_info[$key]);
             //                Com_Log::write('sync_player.'.$player_id,"key:{$key} cur_val:{$cur_val} now_val:{$now_val}");
             //                echo "key:{$key} cur_val:{$cur_val} now_val:{$now_val}\n";
             if ($cur_val != $now_val) {
                 $diff_val = $now_val - $cur_val;
                 if ($level <= 20 && $diff_val < 0) {
                     //                        continue;
                 } else {
                     if ($diff_val < 0) {
                         $diff_val = $diff_val * -1;
                         $color = "FC0100";
                         $symbol = "-";
                     } else {
                         $color = "66FD34";
                         $symbol = "+";
                     }
                     if ($key != 'atk_max') {
                         $param = array(array('rep_type' => 6, 'rep_val' => $key), array('rep_type' => 7, 'rep_val' => $symbol, 'rep_color' => $color), array('rep_type' => 7, 'rep_val' => $diff_val, 'rep_color' => $color));
                         $attr_mag[] = Language_Message::make_message('10116', $param);
                     }
                 }
             }
             $syn_item[$key] = $now_val;
             //                Com_Log::write('sync_player',"############################[end]##################################");
         }
         if (!empty($attr_mag)) {
             if (isset($arr_update['exp'])) {
                 $msg_out = array(0 => $attr_mag, 1 => 2000);
             } else {
                 $msg_out = array(0 => $attr_mag, 1 => 0);
             }
             Protocol::input($player_id, 8, 7, 742, $msg_out);
         }
     }
     $update_fpower = array();
     if (isset($arr_update['wing']) || isset($arr_update['dower_info']) || isset($arr_update['hero_info']) || isset($arr_update['attr']) || isset($arr_update['fairy_info']) || isset($arr_update['skill_infos'])) {
         if (empty($player_info)) {
             $player_info = $this->get_player_info($player_id, $playerInfo, $player_detail);
         }
         Com_Log::write("player_fpower." . $player_id, "############################[start]#####################################");
         Com_Log::write("player_fpower." . $player_id, "player_info:" . var_export($player_info, true));
         Com_Log::write("player_fpower." . $player_id, "player_detail:" . var_export($player_detail, true));
         //            Com_Log::write("sync_player_fpower.".$player_id,"player_info:".var_export($player_info,true));
         //            Com_Log::write("sync_player_fpower.".$player_id,"player_detail:".var_export($player_detail,true));
         $objFpowerCalc->set_player_info($player_info);
         $objFpowerCalc->set_player_detail($player_detail);
         $player_fpower = $this->get_game('FpowerCalc')->calc_player_fpower($data['player_id']);
         $player_info['fpower'] = $update_fpower['fpower'] = $player_fpower['fpower'];
         $update_fpower['buff_fpower'] = $syn_item['buff_fpower'] = $player_fpower['buff_fpower'];
         if (isset($arr_update['attr'])) {
             $update_fpower['equip_fpower'] = $objFpowerCalc->calc_equip_fpower($player_id);
             $player_info['equip_fpower'] = $syn_item['equip_fpower'] = $update_fpower['equip_fpower'];
             $update_fpower['sq_fpower'] = $objFpowerCalc->calc_sq_fpower($player_id);
             $player_info['sq_fpower'] = $syn_item['sq_fpower'] = $update_fpower['sq_fpower'];
         }
         if (isset($arr_update['fairy_info'])) {
             $update_fpower['fairy_fpower'] = $objFpowerCalc->calc_fairy_fpower($player_id);
             $player_info['fairy_fpower'] = $syn_item['fairy_fpower'] = $update_fpower['fairy_fpower'];
         }
         if (isset($arr_update['hero_info'])) {
             $update_fpower['hero_fpower'] = $objFpowerCalc->calc_hero_fpower($player_id);
             $player_info['hero_fpower'] = $syn_item['hero_fpower'] = $update_fpower['hero_fpower'];
         }
         if (isset($arr_update['skill_infos']) || isset($arr_update['dower_info'])) {
             $update_fpower['skill_fpower'] = $objFpowerCalc->calc_skill_fpower($player_id);
             $player_info['skill_fpower'] = $syn_item['skill_fpower'] = $update_fpower['skill_fpower'];
         }
         if (isset($arr_update['wing'])) {
             $update_fpower['wing_fpower'] = $objFpowerCalc->calc_wing_fpower($player_id);
             $player_info['wing_fpower'] = $syn_item['wing_fpower'] = $update_fpower['wing_fpower'];
         }
         if ($update_fpower) {
             $update_fpower['fpower'] = $player_info['fpower'] + $player_info['sq_fpower'] + $player_info['skill_fpower'] + $player_info['equip_fpower'];
             Com_Log::write("player_fpower." . $player_id, "fpower:{$player_info['fpower']} sq_fpower:{$player_info['sq_fpower']} skill_fpower:{$player_info['skill_fpower']} equip_fpower:{$player_info['equip_fpower']}");
             $sum_fpower = $update_fpower['fpower'] + $player_info['hero_fpower'] + $player_info['fairy_fpower'] + $player_info['wing_fpower'] + $update_fpower['buff_fpower'];
             Com_Log::write("player_fpower." . $player_id, "hero_fpower:{$player_info['hero_fpower']} fairy_fpower:{$player_info['fairy_fpower']} wing_fpower:{$player_info['wing_fpower']} buff_fpower:{$update_fpower['buff_fpower']}");
             $update_fpower['sum_fpower'] = $sum_fpower;
             if ($sum_fpower > $player_info['max_sum_fpower']) {
                 $update_fpower['max_sum_fpower'] = $sum_fpower;
             }
             $yesterday_max_sum_fpower = $this->get_data("PlayerDailyTime")->get_player_used_time($player_id, 'yesterday_max_sum_fpower');
             if (intval($yesterday_max_sum_fpower) == 0) {
                 $grab_treasure_info = $this->get_cross("GrabTreasure")->get_grab_treasure($player_id);
                 if (!empty($grab_treasure_info)) {
                     $yesterday_max_sum_fpower = intval($player_info['max_sum_fpower']) ? $player_info['max_sum_fpower'] : $player_info['sum_fpower'];
                     $this->get_data("PlayerDailyTime")->set_used_time($player_id, 'yesterday_max_sum_fpower', $yesterday_max_sum_fpower);
                 }
             }
             $objPlayer->update_player_info($player_id, $update_fpower);
             $syn_item['fpower'] = $update_fpower['fpower'];
             $syn_item['sum_fpower'] = $sum_fpower;
             Com_Log::write("player_fpower." . $player_id, "sum_fpower:{$sum_fpower} fpower:{$update_fpower['fpower']}");
             $this->get_data("Player")->set_player_sum_fpower($player_id, $sum_fpower);
             if ($player_info['level'] > 20) {
                 if (!isset($player_info['union_id'])) {
                     $playerInfo = $objPlayer->get_player_info($player_id);
                 }
                 $this->get_data("UnionInfo")->set_union_player_sum_fpower($player_info['union_id'], $player_id, $sum_fpower);
             }
             $objPlayerAchieve->async_trigger_achieve_target($player_id, 1, $sum_fpower, 2, $player_info['level']);
         }
         $objFpowerCalc->clear_static();
         unset($arr_update['attr']);
         Com_Log::write("player_fpower." . $player_id, "############################[end]#####################################");
     }
     if (isset($arr_update['equip_model']) || isset($arr_update['fashion_fit'])) {
         if (empty($arr_update['equip_model'])) {
             $arr_update['equip_model'] = $this->get_equip_views($player_id);
         }
         if (!isset($player_detail['fashion_fit']) || !isset($player_detail['player_settings'])) {
             $player_detail = $objDetail->get_player_detail($player_id, array('fashion_fit', 'player_settings'));
         }
         $fashion_fit = $player_detail['fashion_fit'];
         $meditation_flag = isset($player_detail['player_settings'][34]) ? $player_detail['player_settings'][34] : 0;
         if ($meditation_flag == 0) {
             if ($fashion_fit) {
                 $fashions = Cache_Fashion::getInstance()->get_fashion(array_values($fashion_fit));
                 if ($fashions) {
                     if (isset($fashion_fit[1])) {
                         $arr_update['equip_model'][3] = $fashions[$fashion_fit[1]]['equip_view'];
                     }
                     if (isset($fashion_fit[2])) {
                         $arr_update['equip_model'][0] = $fashions[$fashion_fit[2]]['equip_view'];
                     }
                 }
             }
         }
         $syn_item['equip'] = $arr_update['equip_model'];
         unset($arr_update['equip_model']);
     }
     if (isset($arr_update['meditation'])) {
         if (!isset($player_detail['player_settings'])) {
             $player_detail = $objDetail->get_player_detail($player_id, array('player_settings'));
         }
         $player_settings = $player_detail['player_settings'];
         if (isset($player_settings[37]) && $player_settings[37] == 1) {
             $syn_item['meditation_status'] = 1;
         } elseif (isset($player_settings[38]) && $player_settings[38] == 1) {
             $syn_item['meditation_status'] = 2;
         } else {
             $syn_item['meditation_status'] = 0;
         }
     }
     # 冥想功能开启状态同步
     if (isset($arr_update['meditation_open_status'])) {
         if (empty($arr_update['meditation_open_status'])) {
             $player_detail = $objDetail->get_player_detail($player_id, array('func_open'));
         } else {
             $player_detail = $arr_update['meditation_open_status'];
         }
         if (isset($player_detail['func_open']['44'])) {
             $syn_item['meditation_open_status'] = 1;
         } else {
             $syn_item['meditation_open_status'] = 0;
         }
     }
     if (isset($arr_update['equip_swallow'])) {
         $syn_item['equip_swallow'] = $arr_update['equip_swallow'];
         unset($arr_update['equip_swallow']);
     }
     if (isset($arr_update['equip_skill'])) {
         $syn_item['equip_skill'] = $arr_update['equip_skill'];
         unset($arr_update['equip_skill']);
     }
     //        $log_skill = false;
     if (isset($arr_update['skill_infos'])) {
         //Com_Log::write("skill_infos.".$player_id,"player_info:".var_export($arr_update,true));
         //Com_Log::write("skill_infos.".$player_id,"player_info:".var_export($playerInfo,true));
         //Com_Log::write("skill_infos.".$player_id,"player_deatail:".var_export($player_detail,true));
         $skill_infos = $objPlayerSkill->skill_list($player_id, $playerInfo, $player_detail);
         //            Com_Log::write('sync_skill_infos.'.$player_id,var_export($skill_infos['skill_infos'],true));
         $syn_item['skill_infos'] = $skill_infos['skill_infos'];
         //            $log_skill = true;
         unset($arr_update['skill_infos']);
     }
     if (isset($arr_update['fairy_info'])) {
         $fairy_list = $objFairy->get_player_fairy_list($player_id);
         $syn_item['fairy_info'] = array();
         if (!empty($fairy_list)) {
             foreach ($fairy_list as $keys => $val) {
                 foreach ($val['combination_list'] as $value) {
                     //获取有镶嵌的属性ID
                     if ($value['state'] > 1) {
                         $val['triggers'][] = $value['state'];
                     }
                 }
                 $syn_item['fairy_info'][] = $val;
             }
         }
         unset($arr_update['fairy_info']);
     }
     if (isset($arr_update['hero_info'])) {
         $hero_list = $this->get_data('PlayerHero')->get_fight_hero($player_id);
         if ($hero_list) {
             list($hero_id1, $hero_code1) = each($hero_list);
             if ($hero_id1) {
                 $hero_info = $this->get_game('Hero')->get_player_hero_attr($player_id, $hero_id1);
                 $syn_item['hero_info'] = $hero_info;
                 $syn_item['hero_code'] = $hero_code1;
                 $syn_item['hero_state'] = 1;
                 $syn_item['hero_level'] = $hero_info['hero_level'];
                 $syn_item['hero_fit_level'] = $hero_info['fit'];
             } else {
                 $syn_item['hero_code'] = 0;
                 $syn_item['hero_state'] = 0;
                 $syn_item['hero_info'] = array();
                 $syn_item['hero_fit_level'] = 0;
             }
             list($hero_id2, $hero_code2) = each($hero_list);
             if ($hero_id2) {
                 $after_hero_info = $this->get_game('Hero')->get_player_hero_attr($player_id, $hero_id2);
                 $syn_item['hero2_info'] = $after_hero_info;
                 $syn_item['hero2_code'] = $hero_code2;
                 $syn_item['hero2_state'] = 1;
                 $syn_item['hero2_level'] = $after_hero_info['hero_level'];
                 $syn_item['hero2_fit_level'] = $after_hero_info['fit'];
             } else {
                 $syn_item['hero2_code'] = 0;
                 $syn_item['hero2_state'] = 0;
                 $syn_item['hero2_info'] = array();
                 $syn_item['hero2_fit_level'] = 0;
             }
         } else {
             $syn_item['hero_code'] = 0;
             $syn_item['hero_state'] = 0;
             $syn_item['hero_info'] = array();
             $syn_item['hero_fit_level'] = 0;
             $syn_item['hero2_code'] = 0;
             $syn_item['hero2_state'] = 0;
             $syn_item['hero2_info'] = array();
             $syn_item['hero2_fit_level'] = 0;
         }
         unset($arr_update['hero_info']);
     }
     if (isset($arr_update['dower_info'])) {
         if (!isset($player_detail['dower_info'])) {
             $player_detail = $objDetail->get_player_detail($player_id, array('dower_info'));
         }
         $syn_item['dower_info'] = $player_detail['dower_info'];
         unset($arr_update['dower_info']);
     }
     if (isset($arr_update['hook_settings'])) {
         if (empty($arr_update['hook_settings'])) {
             $player_detail = $objDetail->get_player_detail($player_id, array('hook_settings'));
         } else {
             $player_detail = $arr_update['hook_settings'];
         }
         $syn_item['hook_settings'] = $player_detail['hook_settings'];
         unset($arr_update['hook_settings']);
     }
     if (isset($arr_update['wing'])) {
         if (!isset($player_detail['equip_wing']) || !isset($player_detail['wing_info'])) {
             $player_detail = $objDetail->get_player_detail($player_id, array('equip_wing', 'wing_info'));
         }
         if ($player_detail['equip_wing'] && isset($player_detail['wing_info'][$player_detail['equip_wing']])) {
             $wing_table_task = $objPlayerWing->get_cache_table_data('player_wing_table', array('id' => $player_detail['wing_info'][$player_detail['equip_wing']]['id'], 'level' => $player_detail['wing_info'][$player_detail['equip_wing']]['lvl']));
             $syn_item['wing'] = $wing_table_task[0]['avatar'];
             $syn_item['wing_skill_id'] = intval($player_detail['wing_info'][$player_detail['equip_wing']]['skill_id'][0]);
             $syn_item['wing_skill_id2'] = intval($player_detail['wing_info'][$player_detail['equip_wing']]['skill_id'][1]);
             $syn_item['wing_skill_id3'] = intval($player_detail['wing_info'][$player_detail['equip_wing']]['skill_id'][2]);
         } else {
             $syn_item['wing'] = '';
             $syn_item['wing_skill_id'] = 0;
             $syn_item['wing_skill_id2'] = 0;
             $syn_item['wing_skill_id3'] = 0;
         }
         unset($arr_update['wing']);
     }
     ##################[同步当前任务]#####################################
     if (isset($arr_update['city_escort_map_sid'])) {
         $syn_item['city_escort_map_sid'] = $arr_update['city_escort_map_sid'];
         unset($arr_update['city_escort_map_sid']);
     }
     if (isset($arr_update['city_escort_target_x'])) {
         $syn_item['city_escort_target_x'] = $arr_update['city_escort_target_x'];
         unset($arr_update['city_escort_target_x']);
     }
     if (isset($arr_update['city_escort_target_y'])) {
         $syn_item['city_escort_target_y'] = $arr_update['city_escort_target_y'];
         unset($arr_update['city_escort_target_y']);
     }
     if (isset($arr_update['city_escort_npc_sid'])) {
         $syn_item['city_escort_npc_sid'] = $arr_update['city_escort_npc_sid'];
         unset($arr_update['city_escort_npc_sid']);
     }
     if (isset($arr_update['task_id'])) {
         $syn_item['task_id'] = $arr_update['task_id'];
         unset($arr_update['task_id']);
     }
     if (isset($arr_update['task_step'])) {
         $syn_item['task_step'] = $arr_update['task_step'];
         unset($arr_update['task_step']);
     }
     if (isset($arr_update['task_start_status'])) {
         $syn_item['task_start_status'] = $arr_update['task_start_status'];
         unset($arr_update['task_start_status']);
     }
     ##################[同步当前任务]#######################################
     #########################[竞技场同步]##################################
     if (isset($arr_update['dw'])) {
         $syn_item['dw'] = $arr_update['dw'];
         unset($arr_update['dw']);
     }
     if (isset($arr_update['dw_lv'])) {
         $syn_item['dw_lv'] = $arr_update['dw_lv'];
         unset($arr_update['dw_lv']);
     }
     if (isset($arr_update['score'])) {
         $syn_item['score'] = $arr_update['score'];
         unset($arr_update['score']);
     }
     if (isset($arr_update['dw_star'])) {
         $syn_item['dw_star'] = $arr_update['dw_star'];
         unset($arr_update['dw_star']);
     }
     #########################[竞技场同步]##################################
     if (isset($arr_update['potion_dh_cnt'])) {
         #修改直接回血药剂数量
         $cur_data = SynPlayer::get_uval();
         $cur_val = intval($cur_data[SynPlayer::POTION_DH_CNT]);
         $syn_item['potion_dh_cnt'] = $cur_val + intval($arr_update['potion_dh_cnt']);
         unset($arr_update['potion_dh_cnt']);
     }
     if (isset($arr_update['potion_hot_cnt'])) {
         #修改缓慢回血药剂数量
         $cur_data = SynPlayer::get_uval();
         $cur_val = intval($cur_data[SynPlayer::POTION_HOT_CNT]);
         $syn_item['potion_hot_cnt'] = $cur_val + intval($arr_update['potion_hot_cnt']);
         unset($arr_update['potion_hot_cnt']);
     }
     if (isset($arr_update['mp_potion_cnt'])) {
         #修改回蓝药剂数量
         $cur_data = SynPlayer::get_uval();
         $cur_val = intval($cur_data[SynPlayer::MP_POTION_CNT]);
         $syn_item['mp_potion_cnt'] = $cur_val + intval($arr_update['mp_potion_cnt']);
         unset($arr_update['mp_potion_cnt']);
     }
     if (isset($arr_update['light_fairy_name'])) {
         #光女神名字
         $syn_item['light_fairy_name'] = $arr_update['light_fairy_name'];
         //            Com_Log::write('light_fairy_name_'.$player_id,$arr_update['light_fairy_name']);
         unset($arr_update['light_fairy_name']);
     }
     if (isset($arr_update['dark_fairy_name'])) {
         #按女神名字
         $syn_item['dark_fairy_name'] = $arr_update['dark_fairy_name'];
         //            Com_Log::write('dark_fairy_name'.$player_id,$arr_update['dark_fairy_name']);
         unset($arr_update['dark_fairy_name']);
     }
     if (isset($arr_update['athena_remaining_count'])) {
         #守护女神次数
         $syn_item['athena_remaining_count'] = $arr_update['athena_remaining_count'];
         unset($arr_update['athena_remaining_count']);
     }
     if (isset($arr_update['worldboss_remaining_count'])) {
         #世界boss次数
         $syn_item['worldboss_remaining_count'] = $arr_update['worldboss_remaining_count'];
         unset($arr_update['worldboss_remaining_count']);
     }
     if (isset($arr_update['had_on_swings'])) {
         #已开启翅膀
         $syn_item['had_on_swings'] = $arr_update['had_on_swings'];
         unset($arr_update['had_on_swings']);
     }
     if (isset($arr_update['trial_of_god_remaining_cnt'])) {
         #神之试炼当前剩余次数
         $syn_item['trial_of_god_remaining_cnt'] = $arr_update['trial_of_god_remaining_cnt'];
         unset($arr_update['trial_of_god_remaining_cnt']);
     }
     if (isset($arr_update['is_hidden_vip'])) {
         #vip显示状态
         $syn_item['is_hidden_vip'] = $arr_update['is_hidden_vip'];
         unset($arr_update['is_hidden_vip']);
     }
     if (isset($arr_update['mineral_remaining_count'])) {
         #抢矿剩余次数
         $syn_item['mineral_remaining_count'] = $arr_update['mineral_remaining_count'];
         unset($arr_update['mineral_remaining_count']);
     }
     if (isset($arr_update['privilege_left_time'])) {
         #vip特权剩余时间
         $syn_item['privilege_left_time'] = $arr_update['privilege_left_time'];
         unset($arr_update['privilege_left_time']);
     }
     if (isset($arr_update['kf_3vs3_remaining_count'])) {
         #跨服切磋次数
         $syn_item['kf_3vs3_remaining_count'] = $arr_update['kf_3vs3_remaining_count'];
         unset($arr_update['kf_3vs3_remaining_count']);
     }
     //毁灭奥克兰次数
     if (isset($arr_update['count_boss_oakland'])) {
         $syn_item['count_boss_oakland'] = $arr_update['count_boss_oakland'];
         unset($arr_update['count_boss_oakland']);
     }
     if (isset($arr_update['count_boss_oakland'])) {
         $syn_item['count_boss_oakland'] = $arr_update['count_boss_oakland'];
         unset($arr_update['count_boss_oakland']);
     }
     if (isset($arr_update['count_chest_oakland'])) {
         $syn_item['count_chest_oakland'] = $arr_update['count_chest_oakland'];
         unset($arr_update['count_chest_oakland']);
     }
     if (!empty($arr_update)) {
         //            Com_Log::write("sync_publish.".$player_id,var_export($arr_update,true));
         #Com_Log::write('nut','---1--'.json_encode($arr_update));
         foreach ($arr_update as $key => $val) {
             $syn_item[$key] = $val;
             #先临时这样写
             #Com_Log::write('nut','---3--'.json_encode($arr_update));
             $currency_key = Cache_Currency::get_currency_key();
             if (empty($val) && !in_array($key, $currency_key)) {
                 if (!isset($player_info[$key])) {
                     $player_info = $this->get_player_info($player_id);
                 }
                 $syn_item[$key] = $player_info[$key];
             } else {
                 $syn_item[$key] = $val;
             }
             if ($key == 'silver') {
                 if ($player_id == 1895663) {
                     Com_Log::write('xgame.p2c_part_update_tmp', json_encode($syn_item));
                 }
                 $objPlayerAchieve->async_trigger_achieve_target($player_id, 23, $syn_item[$key], 2, $player_info['level']);
                 //出发成就
             }
             if ($key == 'gold') {
                 $objPlayerAchieve->async_trigger_achieve_target($player_id, 25, $syn_item[$key], 4, $player_info['level']);
             }
         }
     }
     #Com_Log::debug_write("sync.".$player_id, "arr_update".json_encode($arr_update));
     #Com_Log::debug_write("sync.".$player_id, "player_info".json_encode($player_info));
     unset($objPlayerBase, $objFpowerCalc, $objPlayer, $objDetail, $objPlayerSkill, $objPlayerAchieve, $objFairy, $objHero, $objPlayerHero, $objPlayerWing);
     SynPlayer::set_syn_data($syn_item);
     $data = SynPlayer::get_data();
     //        if(isset($data['u'][225])){
     //            Com_Log::write('silver_'.$player_id,"silver:{$data['u'][225]}");
     //        }
     //        if($log_skill){
     //            Com_Log::write('sync_skill_infos.'.$player_id,var_export($data['m'],true));
     //            Com_Log::write('sync_skill_infos.'.$player_id,var_export($data['u'],true));
     //        }
     Protocol::input($player_id, 7, 4, 417, array(0 => $data['m'], 1 => $data['u']));
     Protocol::out($gateway);
 }
Example #12
0
 /**
  * 初始化
  */
 public static function init($player_id = 0)
 {
     $count = ceil(self::ENUM_COUNT / 32);
     for ($i = 0; $i < $count; $i++) {
         if (IS_FRONT) {
             self::$_masks[$i] = 0;
         } else {
             self::$_masks[$player_id][$i] = 0;
         }
     }
     if (IS_FRONT) {
         self::$_uval = array();
     }
     //        if(self::$_player_id == 0){
     //            self::$_uval = array();
     //        }
     //        else{
     //            self::$_uval[self::$_player_id] = array();
     //        }
     self::$_player_id = $player_id;
 }
Example #13
0
 /**
  * C++推送过来的对手 转发给你前端
  * @param $player_id
  * @param $server_id
  */
 public function get_enemy($error_code, $query_id, $entity_id, $m_player_id, $dummy)
 {
     $out = array('error_code' => 0, 'query_id' => intval($query_id), 'entity_id' => $entity_id, 'role_id' => $m_player_id, 'role_name' => '', 'career_type' => 0, 'masks' => array(), 'values' => array(), 'dummy' => $dummy, 'cancel_cost' => '', 'rank' => 0, 'levels' => '');
     Com_Log::write("get_enemy." . $m_player_id, "m_player_id:{$m_player_id}");
     if ($error_code > 0) {
         #匹配对手失败
         Protocol::input($m_player_id, 8, 12, 1220, array('result' => 0));
         #让前端播放动画 发给前端 停止动画
         Protocol_Msg::msg($m_player_id, 12013);
         $out['error_code'] = 1;
         return $out;
     }
     $player_info = $this->get_game('PlayerBase')->get_player_init_info($m_player_id);
     Com_Log::write("get_enemy." . $m_player_id, "player_info:" . var_export($player_info, true));
     if (empty($player_info)) {
         //$player_info['level'] < 30
         Protocol::input($m_player_id, 8, 12, 1220, array('result' => 0));
         #让前端播放动画 发给前端 停止动画
         Protocol_Msg::msg($m_player_id, 12015);
         $out['error_code'] = 1;
         return $out;
     }
     $out['role_name'] = $player_info['name'];
     $out['career_type'] = $player_info['career_type'];
     SynPlayer::set_syn_data($player_info);
     $synData = SynPlayer::get_data();
     $out['masks'] = $synData['m'];
     $out['values'] = $synData['u'];
     $my_arena_info = $this->get_data('KFArena')->get_kf_arena_info($m_player_id);
     Com_Log::write("get_enemy." . $m_player_id, "my_arena_info:" . var_export($my_arena_info, true));
     $kf_arena_conf = Cache_CrossArenaConf::getInstance()->get_conf(array('currency_cost_type', 'change_player_cost'));
     $change_player_cost = intval($kf_arena_conf['change_player_cost']['val']);
     $out['cancel_cost'] = $kf_arena_conf['currency_cost_type']['val'] . ":{$change_player_cost}";
     if (!empty($my_arena_info)) {
         $out['rank'] = intval($my_arena_info['rank']);
         $out['levels'] = intval($my_arena_info['dw']) . ":" . intval($my_arena_info['dw_lv']) . ":" . intval($my_arena_info['dw_star']);
     } else {
         $out['rank'] = 0;
         $out['levels'] = "1:1:0";
     }
     return $out;
 }