private function handle_fashion_for_dummy($player_id, $fashion_id)
 {
     $arr_list = explode('|', $fashion_id);
     if (!empty($arr_list)) {
         $arr_fashion_fit = array();
         $arr_fashion_info = array();
         $arr_fashion_attr = array();
         foreach ($arr_list as $fid) {
             $fashion = Cache_Fashion::getInstance()->get_fashion($fid);
             $arr_fashion_fit[$fashion['type']] = $fid;
             $arr_fashion_info[$fid] = array('type' => $fashion['type']);
             $attrs = explode("|", $fashion['attr_val']);
             if ($attrs) {
                 foreach ($attrs as $attr) {
                     $val = explode(":", $attr);
                     $arr_fashion_attr[$val[0]] += $val[1];
                 }
             }
         }
         TenYear::getInstance('Data_PlayerDetail')->update_player_detail($player_id, array('fashion_info' => $arr_fashion_info, 'fashion_fit' => $arr_fashion_fit, 'fashion_attr' => $arr_fashion_attr));
     }
 }
Beispiel #2
0
 /**
  * 获取进入游戏的初始化数据
  * @param $player_id
  * @return mixed
  */
 public function get_player_init_info($player_id, &$playerInfo = null, $calc_buff_attr = false)
 {
     $playerInfo = $this->get_data('Player')->get_player_info($player_id);
     if (empty($playerInfo)) {
         return array();
     }
     $player_detail = $this->get_data('PlayerDetail')->get_player_detail($player_id);
     $objPlayerAttr = $this->get_game('PlayerAttr');
     $objPlayerAttr->set_player_item($playerInfo);
     $objPlayerAttr->set_player_detail_item($player_detail);
     $syndata = $objPlayerAttr->get_player_attr($player_id, $calc_buff_attr);
     $objPlayerAttr->clear();
     //$syndata = $objPlayerAttr->get_player_attr($player_detail);
     $syndata['dower_info'] = $player_detail['dower_info'];
     $skill_infos = $this->get_game('PlayerSkill')->skill_list($player_id, $playerInfo, $player_detail);
     $syndata['skill_infos'] = $skill_infos['skill_infos'];
     $syndata['fairy_info'] = $skill_infos['fairy_info'];
     $syndata['hook_settings'] = $player_detail['hook_settings'];
     if (empty($syndata['hook_settings'])) {
         $syndata['hook_settings'] = $this->init_onhook_settings();
     }
     //        $equip = $this->get_game('Prop')->get_player_equip($player_id);
     $player_prop = $this->get_player_prop_info($player_id, $playerInfo['level']);
     $syndata['potion_dh_cnt'] = $player_prop['potion_dh_cnt'];
     $syndata['potion_hot_cnt'] = $player_prop['potion_hot_cnt'];
     $syndata['mp_potion_cnt'] = $player_prop['mp_potion_cnt'];
     $equip = $player_prop['equit'];
     $syndata['equip_skill'] = array();
     if (!empty($equip)) {
         $syndata['equip'] = array();
         foreach ($equip as $key => $prop) {
             if (!empty($prop['equip_view'])) {
                 if (is_string($prop['equip_view'])) {
                     $syndata['equip'][$key] = $prop['equip_view'];
                 } else {
                     $syndata['equip'][$key] = implode(':', $prop['equip_view']);
                 }
                 if ($syndata['equip'][$key] == '0:0:0:0' || $syndata['equip'][$key] == '0:0:0') {
                     $syndata['equip'][$key] = '';
                 }
                 //                    $prop_config = Cache_Prop::getInstance()->get_prop_info($prop['prop_id']);
                 ////                        $syndata['equip'][$key] = '0:0:0:0';
                 //                    $syndata['equip'][$key] = $prop_config['equip_views'];
             }
             //装备技能
             if (!empty($prop['star_map_desc'])) {
                 if (is_string($prop['star_map_desc'])) {
                     $prop['star_map_desc'] = json_decode($prop['star_map_desc'], true);
                 }
                 if (isset($prop['star_map_desc']['activate']['skill'])) {
                     $syndata['equip_skill'][$key] = $prop['star_map_desc']['activate']['skill'];
                 }
             }
         }
     }
     //套装更新了 衣服的equip_view
     $fashion_fit = $player_detail['fashion_fit'];
     $fashion_info = $player_detail['fashion_info'];
     if ($fashion_fit) {
         $meditation_flag = isset($player_detail['player_settings'][34]) ? $player_detail['player_settings'][34] : 0;
         $fashions = Cache_Fashion::getInstance()->get_fashion(array_values($fashion_fit));
         $now = time();
         if ($meditation_flag == 0) {
             if (isset($fashion_fit[1])) {
                 if ($fashion_info[$fashion_fit[1]]['timeliness'] > 0) {
                     $timeliness = $fashion_info[$fashion_fit[1]]['timeliness'] - $now;
                     if ($timeliness) {
                         $syndata['equip'][3] = $fashions[$fashion_fit[1]]['equip_view'];
                     }
                 } else {
                     $syndata['equip'][3] = $fashions[$fashion_fit[1]]['equip_view'];
                 }
             }
             if (isset($fashion_fit[2])) {
                 if ($fashion_info[$fashion_fit[2]]['timeliness'] > 0) {
                     $timeliness = $fashion_info[$fashion_fit[2]]['timeliness'] - $now;
                     if ($timeliness) {
                         $syndata['equip'][0] = $fashions[$fashion_fit[2]]['equip_view'];
                     }
                 } else {
                     $syndata['equip'][0] = $fashions[$fashion_fit[2]]['equip_view'];
                 }
             }
         }
     }
     #获取泳装
     $syndata['swim_suit'] = Cache_UnionSwim::getInstance()->get_swim_suit($playerInfo['career_type'], 0 + intval($playerInfo['vip']));
     if ($playerInfo['level'] > 15) {
         #减轻玩家刚激活时候的压力
         $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);
                 $syndata['hero_info'] = $hero_info;
                 $syndata['hero_code'] = $hero_code1;
                 $syndata['hero_state'] = 1;
                 $syndata['hero_level'] = $hero_info['hero_level'];
                 $syndata['hero_fit_level'] = $hero_info['fit'];
             } else {
                 $syndata['hero_code'] = 0;
                 $syndata['hero_state'] = 0;
                 $syndata['hero_info'] = array();
                 $syndata['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);
             $syndata['hero2_info'] = $after_hero_info;
             $syndata['hero2_code'] = $hero_code2;
             $syndata['hero2_state'] = 1;
             $syndata['hero2_level'] = $after_hero_info['hero_level'];
             $syndata['hero2_fit_level'] = $after_hero_info['fit'];
         } else {
             $syndata['hero2_code'] = 0;
             $syndata['hero2_state'] = 0;
             $syndata['hero2_info'] = array();
             $syndata['hero2_fit_level'] = 0;
         }
     } else {
         $syndata['hero_code'] = 0;
         $syndata['hero_state'] = 0;
         $syndata['hero_info'] = array();
         $syndata['hero_fit_level'] = 0;
         $syndata['hero2_code'] = 0;
         $syndata['hero2_state'] = 0;
         $syndata['hero2_info'] = array();
         $syndata['hero2_fit_level'] = 0;
     }
     //竞技场信息
     if ($playerInfo['level'] > 22) {
         #减轻玩家刚激活时候的压力
         $my_arena_info = $this->get_data('KFArena')->get_kf_arena_info($player_id);
     } else {
         $my_arena_info = array();
     }
     if (!empty($my_arena_info)) {
         $syndata['dw'] = $my_arena_info['dw'];
         $syndata['dw_lv'] = $my_arena_info['dw_lv'];
         $syndata['score'] = $my_arena_info['score'];
         $syndata['dw_star'] = $my_arena_info['dw_star'];
     }
     $syndata['city_id'] = empty($playerInfo['city_id']) ? 2100 : $playerInfo['city_id'];
     $syndata['city_x'] = empty($playerInfo['city_x']) ? 3382 : $playerInfo['city_x'];
     $syndata['city_y'] = empty($playerInfo['city_y']) ? 3538 : $playerInfo['city_y'];
     $task_data = $this->get_data('PlayerTask')->get_task_info($player_id);
     if ($task_data['main_val']) {
         list($task_id, $task_info) = each($task_data['main_val']);
         if ($task_info['target']) {
             $tar = reset($task_info['target']);
             $syndata['city_escort_map_sid'] = $tar['city_id'];
             $syndata['city_escort_target_x'] = $tar['pro_addr_x'];
             $syndata['city_escort_target_y'] = $tar['pro_addr_y'];
             $pro_npc = explode("|", $tar['pro_npc']);
             $syndata['city_escort_npc_sid'] = $pro_npc[0];
         }
         $syndata['task_id'] = $task_id;
         $syndata['task_step'] = $task_info['step'];
         if ($task_info['task_status'] == 1) {
             $syndata['task_start_status'] = 1;
         } else {
             $syndata['task_start_status'] = 0;
         }
     } else {
         $syndata['city_escort_map_sid'] = 0;
         $syndata['city_escort_target_x'] = 0;
         $syndata['city_escort_target_y'] = 0;
         $syndata['city_escort_npc_sid'] = 0;
     }
     if ($player_detail['equip_wing'] && isset($player_detail['wing_info'][$player_detail['equip_wing']])) {
         $wing_table_task = Cache_PlayerWing::getInstance()->get_player_wing_data(array('id' => $player_detail['wing_info'][$player_detail['equip_wing']]['id'], 'level' => $player_detail['wing_info'][$player_detail['equip_wing']]['lvl']));
         #$wing_table_task = $this->get_game('PlayerWing')->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']));
         $syndata['wing'] = $wing_table_task['avatar'];
         $syndata['wing_skill_id'] = intval($player_detail['wing_info'][$player_detail['equip_wing']]['skill_id'][0]);
         $syndata['wing_skill_id2'] = intval($player_detail['wing_info'][$player_detail['equip_wing']]['skill_id'][1]);
         $syndata['wing_skill_id3'] = intval($player_detail['wing_info'][$player_detail['equip_wing']]['skill_id'][2]);
     } else {
         $syndata['wing'] = '';
         $syndata['wing_skill_id'] = 0;
         $syndata['wing_skill_id2'] = 0;
         $syndata['wing_skill_id3'] = 0;
     }
     $syndata['title_id'] = $playerInfo['title_id'];
     $player_settings = $player_detail['player_settings'];
     if (isset($player_settings[37]) && $player_settings[37] == 1) {
         $syndata['meditation_status'] = 1;
     } elseif (isset($player_settings[38]) && $player_settings[38] == 1) {
         $syndata['meditation_status'] = 2;
     } else {
         $syndata['meditation_status'] = 0;
     }
     $syndata['medal_id'] = intval($playerInfo['medal_id']);
     $syndata['like_times'] = intval($playerInfo['like_times']);
     $syndata['flowers'] = intval($playerInfo['flowers']);
     $syndata['union_id'] = intval($playerInfo['union_id']);
     $syndata['union_name'] = $playerInfo['union_name'];
     $syndata['union_job'] = $playerInfo['union_job'];
     $syndata['min_attack_interval'] = 0;
     //默认给0就好了
     if ($playerInfo['level'] > 28) {
         $set = Cache_ActivityHall::getInstance()->get_Activity_set(4001);
         if (!empty($set)) {
             $used_athena_count = $this->get_game('Athena')->get_athena_remaining_count($player_id, 4001);
             #同步雅典娜次数给c++
             $left_athena_num = $set[0]['max_times'] - $used_athena_count;
             if ($left_athena_num < 0) {
                 $left_athena_num = 0;
             }
             $syndata['athena_remaining_count'] = $left_athena_num;
         } else {
             $syndata['athena_remaining_count'] = 0;
         }
         $set = Cache_ActivityHall::getInstance()->get_Activity_set(4011);
         if (!empty($set)) {
             $used_num = 0 + $this->get_data("PlayerDailyTime")->get_player_used_time($player_id, "world_boss_count");
             #同步世界boss次数给c++
             $left_worldboss_num = $set[0]['max_times'] - $used_num;
             if ($left_worldboss_num < 0) {
                 $left_worldboss_num = 0;
             }
             $syndata['worldboss_remaining_count'] = $left_worldboss_num;
         } else {
             $syndata['worldboss_remaining_count'] = 0;
         }
         #神之试炼当前剩余次数
         $syndata['trial_of_god_remaining_cnt'] = $this->get_game('Trial')->get_left_times($player_id);
         #抢矿当前剩余次数
         $syndata['mineral_remaining_count'] = $this->get_game('GrabMine')->get_grabmine_remain_involved_num($player_id);
         #跨服切磋次数
         $syndata['kf_3vs3_remaining_count'] = $this->get_game('KFDuel')->get_left_times($player_id);
         #毁灭奥克兰次数
         $syndata['count_boss_oakland'] = 0 + $this->get_data("PlayerDailyTime")->get_player_used_time($player_id, "count_boss_oakland");
         $syndata['count_monsters_oakland'] = 0 + $this->get_data("PlayerDailyTime")->get_player_used_time($player_id, "count_monsters_oakland");
         $syndata['count_chest_oakland'] = 0 + $this->get_data("PlayerDailyTime")->get_player_used_time($player_id, "count_chest_oakland");
     } else {
         $syndata['athena_remaining_count'] = 2;
         $syndata['worldboss_remaining_count'] = 2;
         $syndata['trial_of_god_remaining_cnt'] = 1;
         $syndata['mineral_remaining_count'] = 1;
         $syndata['kf_3vs3_remaining_count'] = 1;
         $syndata['count_boss_oakland'] = 0;
         $syndata['count_monsters_oakland'] = 0;
         $syndata['count_chest_oakland'] = 0;
     }
     if ($playerInfo['vip']) {
         $vip_info = $this->get_data('VipReward')->get_reward_log($player_id);
         $syndata['is_hidden_vip'] = isset($vip_info['is_hidden_vip']) ? $vip_info['is_hidden_vip'] : 0;
     } else {
         $syndata['is_hidden_vip'] = 0;
     }
     if ($playerInfo['privilege_level']) {
         #vip特权倒计时
         $syndata['privilege_left_time'] = $this->get_game('VipSpecial')->get_left_time($player_id);
     }
     #已开启翅膀
     $syndata['had_on_swings'] = $this->get_game('PlayerWing')->get_activation_wing_interface($player_id, $player_detail['wing_info']);
     //        $syndata['wing'] = "";
     //        $syndata['wing_skill_id'] = 0;
     //        var_dump($player_detail['wing_info']);
     # 魔法议会称号
     $magic_plm_title_id = $this->get_game('MagicParliament')->get_magic_parliament_title_id($player_id);
     if (!empty($magic_plm_title_id)) {
         $title_conf = Cache_MagicParliament::getInstance()->get_title_conf($magic_plm_title_id);
         $syndata['magic_plm_title_buff_id'] = $title_conf['buff_id'];
         $syndata['magic_plm_title_buff_expire_time'] = $this->get_game('MagicParliament')->get_magic_parliamen_flush_time();
     } else {
         $syndata['magic_plm_title_buff_id'] = 0;
         $syndata['magic_plm_title_buff_expire_time'] = 0;
     }
     $syndata['show_title'] = SHOW_TITLE;
     return $syndata;
 }
Beispiel #3
0
 private function get_list_for_time($time, $job_id)
 {
     $list = Cache_CzReward::getInstance()->get_reward_set();
     if (empty($list)) {
         $this->throw_error('10222', 2010026);
     }
     $res = array();
     foreach ($list as $v) {
         if ($v['date_type'] == $time) {
             $temp = array();
             if ($v['job_id'] == 1) {
                 $items = explode('|', $v['item_id']);
                 if (count($items) < 4) {
                     $this->throw_error(10222, 2010027);
                 }
                 if ($job_id > count($items)) {
                     $job_id = count($items);
                 }
                 $temp['item_id'] = $items[$job_id - 1];
             } else {
                 $temp['item_id'] = intval($v['item_id']);
             }
             $value = array();
             $value['sid'] = $v['sid'];
             if ($v['item_type'] == 1) {
                 $item_a = Cache_Prop::getInstance()->get_prop_info($temp['item_id']);
                 $value['attrs'] = Struct_Prop::get_prop_struct($item_a);
                 $value['item_id'] = $temp['item_id'];
                 $value['item_num'] = $v['item_num'];
                 $value['item_type'] = $v['item_type'];
                 $res[] = $value;
             } elseif ($v['item_type'] == 2) {
                 #翅膀
                 $value['attrs'] = array();
                 $value['item_id'] = $temp['item_id'];
                 $value['item_num'] = $v['item_num'];
                 $value['item_type'] = $v['item_type'];
                 $res[] = $value;
             } elseif ($v['item_type'] == 3) {
                 #时装
                 $fashion = Cache_Fashion::getInstance()->get_fashion($temp['item_id']);
                 if (empty($fashion)) {
                     $this->throw_error(10222, 2010025);
                 }
                 $value['attrs'] = $this->get_game('PlayerFashion')->get_fashion_data($fashion, 0);
                 $value['item_id'] = $temp['item_id'];
                 $value['item_num'] = $v['item_num'];
                 $value['item_type'] = $v['item_type'];
                 $res[] = $value;
             }
         }
     }
     return $res;
 }
Beispiel #4
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);
 }
Beispiel #5
0
 /**
  * 获取avatar 天梯也可以用这个
  * @param $player_id
  * @return array
  */
 public function get_player_avatar($player_id, $monster_id = 0, $career_type = 0, $remote = array(), $remote_player = array())
 {
     $player_avatar = array('monster_id' => 0, 'career_type' => 0, 'avatar' => array());
     # 为怪物时,前端自己从相关配置表生成怪物avatar
     if ($monster_id) {
         $player_avatar['monster_id'] = $monster_id;
         return $player_avatar;
     }
     # 为玩家时,影响avatar的相关功能顺序为:坐骑>时装>装备>默认
     # 默认avatar部分
     if ($career_type == 0) {
         $objPlayer = $this->get_data('Player');
         //            if(!empty($remote_player)){
         //                $objPlayer->set_remote($remote_player);#读取远程服务器的数据
         //            }
         $career_type = $objPlayer->get_player_info($player_id, 'career_type');
         $player_avatar['career_type'] = $career_type;
         //            $objPlayer->clear_remote();
         //            unset($objPlayer);
     }
     $role_attr_config = Cache_RoleAttr::getInstance()->get_role_attr($career_type);
     if (!empty($role_attr_config['role_avatar'])) {
         $player_avatar['avatar']['1'] = array('type' => 1, 'equip_view' => $role_attr_config['role_avatar']);
     }
     if (!empty($role_attr_config['weapon_avatar'])) {
         $player_avatar['avatar']['2'] = array('type' => 2, 'equip_view' => $role_attr_config['weapon_avatar']);
     }
     # 装备avatar部分
     $equip_lists = $this->get_game('Prop')->get_player_equip($player_id, $remote);
     for ($i = 0; $i < 10; $i++) {
         if (isset($equip_lists[$i])) {
             if (!empty($equip_lists[$i]['equip_view'])) {
                 $equip_view = is_string($equip_lists[$i]['equip_view']) ? $equip_lists[$i]['equip_view'] : implode(':', $equip_lists[$i]['equip_view']);
                 switch ($i) {
                     case 0:
                         # 武器
                         $player_avatar['avatar']['2'] = array('type' => 2, 'equip_view' => $equip_view);
                         break;
                     case 3:
                         # 身体
                         $player_avatar['avatar']['1'] = array('type' => 1, 'equip_view' => $equip_view);
                         break;
                     default:
                         # do nothing
                         break;
                 }
             }
         }
     }
     $objPlayerDetail = $this->get_data('PlayerDetail');
     //        if(!empty($remote_player)){
     //            $objPlayerDetail->set_remote($remote_player);
     //        }
     $player_detail = $objPlayerDetail->get_player_detail($player_id, array('equip_wing', 'wing_info', 'fashion_info', 'fashion_fit'));
     //        $objPlayerDetail->clear_remote();
     //        unset($objPlayerDetail);
     # 翅膀avatar部分
     if (!empty($player_detail['equip_wing'])) {
         $wing_id = $player_detail['equip_wing'];
         $wing_lv = $player_detail['wing_info'][$wing_id]['lvl'];
         $wing_config = Cache_PlayerWing::getInstance()->get_player_wing_info(array('id' => $wing_id, 'level' => $wing_lv));
         if (!empty($wing_config)) {
             $player_avatar['avatar']['3'] = array('type' => 3, 'equip_view' => $wing_config[0]['avatar']);
         }
     }
     # 时装avatar部分
     if (!empty($player_detail['fashion_fit']) && is_array($player_detail['fashion_fit'])) {
         $fashion_config = Cache_Fashion::getInstance()->get_fashion(array_values($player_detail['fashion_fit']));
         if (!empty($fashion_config)) {
             # fashion_type: 1表示身体部位时装 2表示武器部位时装
             foreach ($player_detail['fashion_fit'] as $fashion_type => $fashion_sid) {
                 if (empty($fashion_type)) {
                     continue;
                 }
                 # 异常时装数据跳过
                 $player_avatar['avatar'][$fashion_type] = array('type' => $fashion_type, 'equip_view' => $fashion_config[$fashion_sid]['equip_view']);
             }
         }
     }
     # 坐骑avatar部分
     return $player_avatar;
 }
Beispiel #6
0
 public function check_fashion_timer($player_id, $player_detail = null)
 {
     if (is_null($player_detail)) {
         $get_field = Protocol_Player::get_player_attr_detail_key();
         $get_field[] = 'player_settings';
         $get_field[] = 'fashion_info';
         $get_field[] = 'fashion_fit';
         $get_field[] = 'fashion_attr';
         $objPlayerDetail = $this->get_data('PlayerDetail');
         $player_detail = $objPlayerDetail->get_player_detail($player_id, $get_field);
     }
     $fashion_info = $player_detail['fashion_info'];
     $fashion_fit = $player_detail['fashion_fit'];
     $min_timeliness = 0;
     if ($fashion_info) {
         $now = time();
         $up_flag = false;
         foreach ($fashion_info as $sid => $val) {
             if ($val['timeliness'] <= $now) {
                 unset($fashion_info[$sid]);
                 if (isset($fashion_fit[$fashion_info[$sid]['type']]) && $fashion_fit[$fashion_info[$sid]['type']] == $sid) {
                     unset($fashion_fit[$fashion_info[$sid]['type']]);
                 }
                 $up_flag = true;
             } else {
                 $min_timeliness = min($min_timeliness, $val['timeliness']);
             }
         }
         if ($up_flag) {
             $attr = array();
             $fashion_configs = Cache_Fashion::getInstance()->get_fashion(array_keys($fashion_info));
             foreach ($fashion_configs as $fashion) {
                 if ($fashion['attr_val']) {
                     $attr_parse = $this->parse_data($fashion['attr_val']);
                     if ($attr_parse) {
                         foreach ($attr_parse as $key => $val) {
                             $attr[$key] += $val;
                         }
                     }
                 }
             }
             $res = $this->get_data('PlayerDetail')->update_player_detail($player_id, array('fashion_info' => $fashion_info, 'fashion_attr' => $attr, 'fashion_fit' => $fashion_fit));
             if ($res) {
                 $player_detail['fashion_attr'] = $attr;
                 $player_detail['fashion_fit'] = $fashion_fit;
                 $player_detail['fashion_info'] = $fashion_info;
                 $arr_part_update['fashion_fit'] = '';
                 $arr_part_update['attr'] = '';
                 $arr_part_update['player_data'] = array('player_detail' => $player_detail);
                 Protocol_Player::p2c_part_update($player_id, $arr_part_update);
             }
         }
     }
     if ($min_timeliness) {
         $params['type'] = 101838;
         $params['id'] = $player_id;
         $params['timeout'] = $min_timeliness;
         $params['param1'] = 0;
         $params['param2'] = 0;
         $params['param3'] = 0;
         $params['param4'] = 0;
         Protocol::input(0, 7, 4, 516, $params);
         Protocol::out();
     }
 }