コード例 #1
0
ファイル: PlayerBase.php プロジェクト: bluefan/phpsource
 /**
  * 获取进入游戏的初始化数据
  * @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;
 }
コード例 #2
0
ファイル: Prop.php プロジェクト: bluefan/phpsource
 /**
  * 获取装备的属性
  * @param $arrPropConfig
  * @return mixed
  */
 public function get_equip_attr($arrPropConfig)
 {
     if (($arrPropConfig['type'] == 1 or $arrPropConfig['type'] == 6) && !isset($arrPropConfig['base_attr'])) {
         if ($arrPropConfig['rechage'] == 1) {
             #首充
             $rechage_config = Cache_Rechage::getInstance()->get_rechage($arrPropConfig['prop_id']);
             if (empty($rechage_config)) {
                 $arrPropConfig['base_attr'] = array();
                 $arrPropConfig['addition_attr'] = array();
             } else {
                 if ($rechage_config['base_attribute']) {
                     $base = explode(":", $rechage_config['base_attribute']);
                     $arrPropConfig['base_attr'][$base[0]] = $base[1];
                 }
                 if ($rechage_config['add_attribute']) {
                     $addition = explode("|", $rechage_config['add_attribute']);
                     foreach ($addition as $attrs) {
                         $attr = explode(":", $attrs);
                         $arrPropConfig['addition_attr'][$attr[0]] = $attr[1];
                     }
                 }
                 if ($rechage_config['use_level']) {
                     $arrPropConfig['level'] = $rechage_config['use_level'];
                 }
                 if ($rechage_config['strengthen_level']) {
                     $arrPropConfig['intensive_level'] = $rechage_config['strengthen_level'];
                     $intensify_config = Cache_Forge::getInstance()->get_intensify_info($rechage_config['strengthen_level']);
                     $arrPropConfig['intensive_desc'] = Game_EquipIntensifier::get_latest_intensive_desc($arrPropConfig, $intensify_config);
                 }
             }
             return $arrPropConfig;
         } else {
             #$equip = Cache_EquipBaseAttr::getInstance()->get_equip_base_attr($arrPropConfig['sub_type'],$arrPropConfig['quality'],$arrPropConfig['level'],$arrPropConfig['star_level']);
             $equip = Cache_EquipBaseAttr::getInstance()->generate_prop_attr($arrPropConfig['type'], $arrPropConfig['sub_type'], $arrPropConfig['quality'], $arrPropConfig['level'], $arrPropConfig['vocation_limit'], $arrPropConfig['star_level']);
             if ($arrPropConfig['type'] == 6 && $arrPropConfig['sub_type'] == 7 && $arrPropConfig['attr_not_rand']) {
                 # 翅膀装备羽心类可能要求附加属性不随机
                 $stable_addition_attr = array();
                 # 获取翅膀装备信息
                 $item_info = Cache_PlayerWing::getInstance()->get_wing_equip_gift_info($arrPropConfig['prop_id']);
                 if (!empty($item_info)) {
                     $attr_key_hash = Struct_Prop::$_sort_priority;
                     # 使用这个哈希可以确保属性key的有效性及顺序性
                     foreach ($attr_key_hash as $attr_key => $val) {
                         if (!empty($item_info[$attr_key])) {
                             $stable_addition_attr[$attr_key] = $item_info[$attr_key];
                         }
                     }
                 }
                 if (!empty($stable_addition_attr)) {
                     $equip['addition_attr'] = $stable_addition_attr;
                 }
             }
             $arrPropConfig['star_level'] = $equip['star_level'];
             if (!empty($equip['base_attr'])) {
                 $arrPropConfig['base_attr'] = $equip['base_attr'];
             }
             if (!empty($equip['addition_attr'])) {
                 $arrPropConfig['addition_attr'] = $equip['addition_attr'];
             }
             if (!empty($equip['refine_attr'])) {
                 $arrPropConfig['refine_attr'] = $equip['refine_attr'];
             }
             if (!empty($equip['refine_info'])) {
                 $arrPropConfig['refine_info'] = $equip['refine_info'];
             }
             return $arrPropConfig;
         }
     } else {
         return $arrPropConfig;
     }
 }
コード例 #3
0
ファイル: PlayerWing.php プロジェクト: bluefan/phpsource
 public function get_wing_equip_gift($player_id, $item_id)
 {
     $this->param_check_numeric(array($player_id, $item_id));
     # 获取装备信息
     $item_info = Cache_PlayerWing::getInstance()->get_wing_equip_gift_info($item_id);
     if (empty($item_info)) {
         $this->throw_error('80048');
         # 未配置赠送的翅膀装备
     }
     # 判断达成条件
     $start = strtotime(SERVER_FIRST_START_TIME);
     list($login_series_max, $login_acc) = $this->get_game('EventCondFunc')->_cal_login_refer($player_id, $start, $this->current_time);
     if ($login_acc < $item_info['login_acc']) {
         $this->throw_error('80049');
         # 未达成翅膀装备领取条件
     }
     # 判断是否已领取
     $deal_log_list = $this->get_data('Wing')->get_deal_log($player_id, $item_id);
     if (!empty($deal_log_list)) {
         $this->throw_error('80050');
         # 已经领取过该翅膀装备,不能重复领取
     }
     $this->start_trans();
     # 发送道具
     $reward = array();
     $reward[] = array('type' => 'prop', 'item_id' => $item_id, 'item_num' => 1);
     $re = $this->get_game('Reward')->send_reward($player_id, $reward, array('cmd_id' => '1518'));
     #send_reward失败时,会返回各种失败情况的错误码
     $this->write_check_strict($re, 3010168);
     # 记录领取日志
     $deal_log = array('player_id' => $player_id, 'item_id' => $item_id, 'reg_time' => $this->current_time, 'item_num' => 1, 'vocation_limit' => $item_info['vocation_limit']);
     $re = $this->get_data('Wing')->record_deal_log($deal_log);
     $this->write_check($re, 3010183);
     $this->commit();
     # 该方法会自动推送843协议告知前端显示奖励信息,会调用prop_806协议通知道具变更,调用p2c_part_update通知人物信息变更
     $this->get_game('Reward')->add_reward_log();
     # 收集道具任务埋点
     $this->get_game('TaskTrigger')->async_trigger_task($player_id, 11, $item_id, 1);
     $out_1518 = array('result' => 1);
     return $out_1518;
 }
コード例 #4
0
ファイル: Strengthen.php プロジェクト: bluefan/phpsource
 /**
  * 获取翅膀推荐
  * @param $player_id
  * @param $data
  */
 protected function get_wing_recommend($player_id, $level, $data)
 {
     $out = array();
     $strengthen_list = array();
     if (empty($data)) {
         $strengthen = Cache_Strengthen::getInstance()->get_strengthen_by_condition_type($level, 24);
         $strengthen_list[$strengthen['sub_type']][$strengthen['sid']] = $strengthen;
     } else {
         $strengthen = Cache_Strengthen::getInstance()->get_strengthen($level, 5);
         $wing_config = Cache_PlayerWing::getInstance()->get_player_wing_info($data['id']);
         foreach ($strengthen as $key => $val) {
             $val['name'] = $wing_config[0]['name'];
             switch ($val['condition_type']) {
                 case 25:
                     //翅膀品质  妈的 没有品质
                     //                        if($this->cal_condition($val['condition_val'],$data[2],$val['condition_operation'])){
                     //                            continue;
                     //                        }
                     //                        continue 2;
                     break;
                 case 26:
                     //翅膀位阶
                     if ($data['id'] == 7 || $data['0'] == 8) {
                         if (!$this->cal_condition($val['condition_val'], $data['lvl'], $val['condition_operation'])) {
                             $strengthen_list[$val['sub_type']][$key] = $val;
                         }
                     }
                     break;
                 case 37:
                     #是否是大翅膀
                     if ($data['id'] == 7 || $data['id'] == 8) {
                         $flag = 1;
                     } else {
                         $flag = 0;
                     }
                     if ($this->cal_condition($val['condition_val'], $flag, $val['condition_operation'])) {
                         $strengthen_list[$val['sub_type']][$key] = $val;
                     }
                     break;
                 case 41:
                     #翅膀装备的数量
                     $num = count($data['equipment']);
                     if ($this->cal_condition($val['condition_val'], $num, $val['condition_operation'])) {
                         $strengthen_list[$val['sub_type']][$key] = $val;
                     }
                     break;
                 case 42:
                     #装备的品质
                     $num = count($data['equipment']);
                     $quality = array();
                     if ($num > 0) {
                         foreach ($data['equipment'] as $v) {
                             $quality[$v['quality']] += 1;
                         }
                     }
                     $c_val = explode(':', $val['condition_val']);
                     $num = intval($quality[$c_val[1]]);
                     if ($this->cal_condition($c_val[0], $num, $val['condition_operation'])) {
                         $strengthen_list[$val['sub_type']][$key] = $val;
                     }
                     break;
                 case 43:
                     #羽炼等级
                     $num = count($data['equipment']);
                     $intensive_level = array();
                     if ($num > 0) {
                         foreach ($data['equipment'] as $v) {
                             $intensive_level[$v['intensive_level']] += 1;
                         }
                     }
                     $c_val = explode(':', $val['condition_val']);
                     $num = intval($intensive_level[$c_val[1]]);
                     if ($this->cal_condition($c_val[0], $num, $val['condition_operation'])) {
                         $strengthen_list[$val['sub_type']][$key] = $val;
                     }
                     break;
             }
         }
     }
     if (!empty($strengthen_list)) {
         $out = $this->format_advise_list(5, $strengthen_list);
     }
     return $out;
 }
コード例 #5
0
ファイル: KFArena.php プロジェクト: bluefan/phpsource
 /**
  * 获取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;
 }
コード例 #6
0
ファイル: PlayerFunc.php プロジェクト: bluefan/phpsource
 /**
  * 小红点提示
  * @param $player_id
  * @param $type
  * @param $condition
  */
 public function red_icon($player_id, $player_info = null, $player_detail = null)
 {
     if (is_null($player_info)) {
         $player_info = $this->get_data('Player')->get_player_info($player_id, array('silver', 'crystal', 'level', 'fame_level', 'career_type', 'gold', 'online_time'));
     }
     if (is_null($player_detail)) {
         $player_detail = $this->get_data('PlayerDetail')->get_player_detail($player_id, array('func_open', 'equip_wing', 'wing_info', 'skill_info', 'skill_rune_info', 'skill_rune_cote_info', 'dower_info', 'train_info'));
     }
     $prop_list = $this->get_data('PlayerProp')->get_player_prop_by_item_position($player_id);
     //重包裹里去除道具
     $arr_prop_num = array();
     $arr_prop_type = array();
     $func_open = $player_detail['func_open'];
     if ($prop_list) {
         foreach ($prop_list as $prop) {
             $arr_prop_num[$prop['prop_id']] += $prop['item_num'];
             $arr_prop_type[$prop['type']][$prop['sub_type']][] = $prop;
         }
     }
     ##################[翅膀进阶检查]####################
     $wing_id = $player_detail['equip_wing'];
     $out = array();
     if (!empty($wing_id)) {
         if (isset($func_open[111])) {
             $wing_table = Cache_PlayerWing::getInstance()->get_player_wing_info(array('id' => $wing_id, 'level' => $player_detail[$wing_id]['lvl'] + 1));
             if ($wing_table) {
                 $tip = false;
                 if ($wing_table[0]['condition']) {
                     list($type, $condition) = explode("|", $wing_table[0]['condition']);
                     if ($type == 5) {
                         if ($player_info['fame_level'] >= $condition) {
                             $tip = true;
                         }
                     }
                 }
                 if ($tip) {
                     $material_prop = Com_FmtData::format_table_prop($wing_table[0]['condition']);
                     if (Com_Array::is_good_arr($material_prop)) {
                         foreach ($material_prop as $id => $num) {
                             if ($arr_prop_num[$id] >= intval($num)) {
                                 $tip = true;
                             }
                         }
                     }
                 }
                 if ($tip) {
                     $out[] = array('func_id' => 1, 'status' => intval($tip), 'param' => '');
                 }
             }
         }
     }
     ##################[翅膀进阶检查]####################
     ###################[翅膀激活]#######################
     if (isset($func_open[110]) && $player_detail['wing_info']) {
         $tip = false;
         $data = $player_detail['wing_info'];
         foreach ($data as $key => $val) {
             if ($val['activation'] == 0) {
                 #在线时间检测
                 if ($val['condition'][0] == 3) {
                     $data[$key]['condition'][2] = $this->get_game('DailyBoon')->daily_online_time($player_id);
                     if ($data[$key]['condition'][2] >= $data[$key]['condition'][1][0]) {
                         $tip = true;
                     } else {
                         if ($player_info['online_time'] >= $data[$key]['condition'][1][0]) {
                             $tip = true;
                         }
                     }
                 } else {
                     if ($val['condition'][0] == 7) {
                         $data[$key]['condition'][2] = $player_info['level'];
                         if ($data[$key]['condition'][2] >= $data[$key]['condition'][1][0]) {
                             $tip = true;
                         }
                     } else {
                         if ($val['condition'][0] == 6) {
                             #获取翅膀配置表
                             $wing_table_task = $this->get_game('PlayerWing')->get_cache_table_data('player_wing_table', array('id' => $val['id'], 'level' => $val['lvl']));
                             if ($wing_table_task) {
                                 list($type, $task_id) = explode("|", $wing_table_task[0]['condition']);
                                 $task_res = $this->get_game('TaskMain')->task_is_finish($player_id, $task_id);
                                 if ($task_res) {
                                     $tip = true;
                                 }
                             }
                         }
                     }
                 }
                 if ($val['condition'][0] == 4) {
                     #获取翅膀配置表
                     $wing_table = $this->get_game('PlayerWing')->get_cache_table_data('player_wing_table', array('id' => $val['id'], 'level' => 1));
                     if (Com_Array::is_good_arr($wing_table)) {
                         foreach ($wing_table as $wing) {
                             list($type, $value) = explode("|", $wing['condition']);
                             if ($type == 4) {
                                 if ($data[$val['id']]['activation'] != 0) {
                                     continue;
                                 }
                                 $is_activate = true;
                                 $wing_list = explode(":", $value);
                                 if (is_array($wing_list)) {
                                     #检测是否有被激活的翅膀
                                     foreach ($wing_list as $wid) {
                                         if ($data[$wid]['activation'] != 2) {
                                             $is_activate = false;
                                             break;
                                         }
                                     }
                                 } else {
                                     if ($data[$wing_list]['activation'] != 2) {
                                         $is_activate = false;
                                     }
                                 }
                                 #改变隐藏翅膀激活状态
                                 if ($is_activate) {
                                     $tip = true;
                                 }
                             }
                         }
                     }
                 }
                 if ($val['condition'][0] == 2 || $val['condition'][0] == 1) {
                     if ($data[$id]['condition'][2] >= $wing['condition'][1][0]) {
                         $tip = true;
                     }
                 }
             }
             if ($tip == true) {
                 break;
             }
         }
         if ($tip) {
             $out[] = array('func_id' => 15, 'status' => intval($tip), 'param' => '');
         }
     }
     ###################[翅膀激活]#######################
     ###################[翅膀羽炼]#######################
     //        if (isset($func_open[112])) {
     $start = strtotime(SERVER_FIRST_START_TIME);
     list($login_series_max, $login_acc) = $this->get_game('EventCondFunc')->_cal_login_refer($player_id, $start, $this->current_time);
     $deal_log_hash = $this->get_data('Wing')->get_deal_log_by_player_id($player_id);
     $tip = false;
     for ($i = 7; $i <= 8; $i++) {
         $item_list = Cache_PlayerWing::getInstance()->get_wing_equip_gift_info_list($i);
         if ($item_list) {
             foreach ($item_list as $item_info) {
                 $gain_status = 0;
                 # 领取状态:0可领,1条件未达成不可领,2已领取不可领[NOTE:可领只有一种情况,不可领有多种情况,所以这样表示]
                 # 判断达成条件
                 if ($login_acc < $item_info['login_acc'] && empty($deal_log_hash[$item_info['item_id']])) {
                     $tip = true;
                     break 2;
                 }
             }
         }
     }
     if ($tip) {
         $out[] = array('func_id' => 17, 'status' => intval($tip), 'param' => '');
     }
     //        }
     ###################[翅膀羽炼]#######################
     ##################[翅膀装备检查]###################
     $wing_info = $player_detail['wing_info'][$wing_id];
     if (isset($func_open[110]) && $wing_info) {
         $tip = false;
         if ($wing_id == 7 && $wing_id == 8) {
             if (!empty($wing_info['equipment']) && Com_Array::is_good_arr($wing_info['equipment'])) {
                 for ($i = 1; $i <= 7; $i++) {
                     if (!isset($wing_info['equipment'][$i])) {
                         if (isset($arr_prop_type[6][$i]) && count($arr_prop_type[6][$i] > 0)) {
                             foreach ($arr_prop_type[6][$i] as $arr_prop_detail) {
                                 if ($wing_info['lvl'] < $arr_prop_detail['level']) {
                                     $tip = true;
                                     break 2;
                                 }
                             }
                         }
                     }
                 }
             }
         }
         if ($tip) {
             $out[] = array('func_id' => 2, 'status' => intval($tip), 'param' => '');
         }
     }
     ##################[翅膀装备检查]###################
     ##################[英雄]##############################
     if (isset($func_open[20])) {
         $tip = false;
         $hero_list = $this->get_data('PlayerHero')->get_fight_hero($player_id);
         if (!empty($hero_list)) {
             foreach ($hero_list as $hero_id => $hero_code) {
                 $obj_player_hero_data = $this->get_data('PlayerHero');
                 $hero_data = $obj_player_hero_data->get_player_hero_info($player_id, $hero_id);
                 if ($hero_data) {
                     ###################[成长值]#########################################
                     if (isset($func_open[29])) {
                         $hero_conf = Cache_HeroAttr::getInstance()->get_hero_attr_info($hero_data['hero_code']);
                         if ($hero_data['grow_rate'] <= $hero_conf['grow_limit']) {
                             $obj_hero_grow = $this->get_data('PlayerHeroGrow');
                             $hero_grow_id = $obj_hero_grow->get_player_hero_grow_data($hero_id);
                             $hero_grow_conf = array();
                             $findFlag = false;
                             if (!$hero_grow_id) {
                                 $findFlag = true;
                             } else {
                                 $hero_grow_conf = Cache_HeroGrow::getInstance()->get_config_info($hero_grow_id);
                                 if (empty($hero_grow_conf)) {
                                     $findFlag = true;
                                 } else {
                                     if ($hero_data['grow_rate'] < $hero_grow_conf['grow_left'] || $hero_data['grow_rate'] >= $hero_grow_conf['grow_right']) {
                                         #区间错误
                                         $findFlag = true;
                                     }
                                 }
                             }
                             if ($findFlag) {
                                 #启动自动纠错
                                 $hero_grow_id = $this->get_game('Hero')->find_hero_grow_id($hero_data['grow_rate'], $hero_grow_conf);
                             }
                             if ($hero_grow_id) {
                                 $last_props[$hero_grow_conf['item_id']] = intval($arr_prop_num[$hero_grow_conf['item_id']]);
                                 if ($last_props[$hero_grow_conf['item_id']] >= $hero_grow_conf['item_nums']) {
                                     $tip = true;
                                 }
                             }
                             if ($tip) {
                                 $out[] = array('func_id' => 3, 'status' => intval($tip), 'param' => $hero_id);
                             }
                         }
                     }
                     ###################[成长值]#########################################
                     ##################[英雄等级]###############################
                     if (isset($func_open[22])) {
                         $tip = false;
                         $is_culture = $this->get_game('Hero')->is_culture_hero($player_id, $hero_id, $hero_data['hero_code']);
                         if ($is_culture) {
                             if ($hero_data['level'] < $player_info['level']) {
                                 //英雄是否满级
                                 $full_level_res = $this->get_game('Hero')->is_full_level($hero_data['hero_code'], $hero_data['level']);
                                 if (!$full_level_res) {
                                     //是否有同类型已培养的英雄
                                     $upgrade_prop_list = $this->get_game('Hero')->upgrade_prop_list;
                                     foreach ($upgrade_prop_list as $prop_id) {
                                         if (isset($arr_prop_num[$prop_id])) {
                                             $tip = true;
                                             break;
                                         }
                                     }
                                 }
                             }
                         }
                         if ($tip) {
                             $out[] = array('func_id' => 4, 'status' => intval($tip), 'param' => $hero_id);
                         }
                     }
                     ##################[英雄等级]###############################
                     ##################[英雄潜能]###############################
                     if (isset($func_open[23])) {
                         $tip = false;
                         //是否有同类型已培养的英雄
                         if ($is_culture) {
                             for ($i = 1; $i <= 3; $i++) {
                                 $hero_potential_base_table = $this->get_game('Hero')->get_hero_potential_base_table($i, $hero_data['potential_level']);
                                 if ($player_info['silver'] >= $hero_potential_base_table['coin_num']) {
                                     if (!empty($hero_potential_base_table) && $hero_potential_base_table['prop_id'] && $hero_potential_base_table['prop_num']) {
                                         //获取玩家背包中的升级道具数量
                                         $player_prop_num = $arr_prop_num[$hero_potential_base_table['prop_id']];
                                         if ($player_prop_num >= $hero_potential_base_table['prop_num']) {
                                             $attr_max = $this->get_game('Hero')->get_potential_attr_max($hero_data['potential_level'], $i);
                                             if ($hero_data['potential_' . $i] < $attr_max) {
                                                 $tip = true;
                                                 break;
                                             }
                                         }
                                     }
                                 }
                             }
                         }
                         if ($tip) {
                             $out[] = array('func_id' => 5, 'status' => intval($tip), 'param' => $hero_id);
                         }
                     }
                     ##################[英雄潜能]###############################
                     ##################[英雄合体]###############################
                     if (isset($func_open[24])) {
                         $tip = false;
                         if ($is_culture) {
                             $full_stairs_res = $this->get_game('Hero')->is_full_stairs($hero_data['hero_code'], $hero_data['fit']);
                             if (!$full_stairs_res) {
                                 $hero_attr_base = $this->get_game('Hero')->get_hero_attr_table($hero_data['hero_code']);
                                 $fit_table = $this->get_game('Hero')->get_hero_fit_table($hero_attr_base['fit_expend_type'], $hero_data['fit'] + 1);
                                 $player_prop_num = $arr_prop_num[$fit_table['prop_id']];
                                 if ($player_prop_num >= $fit_table['prop_num']) {
                                     $hero_info = $this->get_game('Hero')->get_fit_hero_num($player_id, $hero_id, $hero_data['fit_type'], $hero_data['hero_code'], $hero_data['quality'], $hero_data['quality']);
                                     //英雄是否足够
                                     $is_full_hero_res = $this->get_game('Hero')->is_full_hero($hero_attr_base['fit_expend_type'], $hero_data['fit'] + 1, $hero_info['num']);
                                     if ($is_full_hero_res) {
                                         $tip = true;
                                     }
                                 }
                             }
                         }
                         if ($tip) {
                             $out[] = array('func_id' => 6, 'status' => intval($tip), 'param' => $hero_id);
                         }
                     }
                     ##################[英雄合体]###############################
                     ##################[英雄星级]###############################
                     if (isset($func_open[25])) {
                         $tip = false;
                         if ($is_culture) {
                             $full_level_res = $this->get_game('Hero')->is_full_star($hero_data['hero_code'], $hero_data['star']);
                             if (!$full_level_res) {
                                 $star_table = $this->get_game('Hero')->get_hero_star_table($hero_data['star'] + 1);
                                 if ($star_table && $star_table['prop_id1']) {
                                     $prop_id = $star_table['prop_id1'];
                                     $deduct_coin_num = $star_table['prop_id2'];
                                     $player_prop_num = $arr_prop_num[$prop_id];
                                     if ($player_prop_num >= $star_table['prop_num1']) {
                                         if ($player_info['silver'] >= $deduct_coin_num) {
                                             $tip = true;
                                         }
                                     }
                                 }
                             }
                         }
                         if ($tip) {
                             $out[] = array('func_id' => 7, 'status' => intval($tip), 'param' => $hero_id);
                         }
                     }
                     ##################[英雄星级]###############################
                 }
             }
         }
     }
     ##################[英雄]##################################################
     ##################[女神]#################################################
     if (isset($func_open[30])) {
         $obj_player_fairy_data = $this->get_data('Fairy');
         $fairy_list = $obj_player_fairy_data->get_player_fairy_list($player_id);
         $fairy_id = '';
         if ($fairy_list) {
             foreach ($fairy_list as $val) {
                 $fairy_id = $val['fairy_id'];
                 if (!empty($fairy_id)) {
                     $fairy_info = $this->get_data('Fairy')->get_player_fairy_info($fairy_id);
                     if ($fairy_info) {
                         ##################[女神强化]############################################
                         if ($fairy_info['type'] == 1) {
                             $func_id = 35;
                         } else {
                             $func_id = 36;
                         }
                         if (isset($func_open[$func_id])) {
                             $tip = false;
                             $max_train_lv = Cache_FairyTrain::getInstance()->get_max_train_lv();
                             if (!empty($max_train_lv)) {
                                 $max_train_lv = 100;
                             }
                             if ($fairy_info['train_level'] < $max_train_lv) {
                                 $trainConfigs = $this->get_game('Fairy')->get_cache_table_data('fairy_train_table', array("lvl" => $fairy_info['train_level']));
                                 if ($trainConfigs[0] || !empty($trainConfigs[0]['expend'])) {
                                     $train_config = $trainConfigs[0];
                                     // 消耗需求
                                     $cost_material = explode("|", $train_config['expend']);
                                     //升级下一级消耗
                                     $costItemInfo = explode(':', $cost_material[0]);
                                     //道具消耗
                                     $costGoldInfo = !empty($cost_material[1]) ? explode(':', $cost_material[1]) : 0;
                                     //金币消耗
                                     if ($fairy_info['level'] >= $train_config['fairy_lvl']) {
                                         $cost_item_id = $costItemInfo[0];
                                         $cost_item_num = intval($costItemInfo[1]);
                                         $player_prop_num = $arr_prop_num[$cost_item_id];
                                         $cost_silver_num = is_array($costGoldInfo) ? intval($costGoldInfo[1]) : 0;
                                         if ($player_info['silver'] >= $cost_silver_num) {
                                             if ($player_prop_num >= $cost_item_num) {
                                                 $tip = true;
                                             }
                                         }
                                     }
                                 }
                             }
                             if ($tip) {
                                 $out[] = array('func_id' => 8, 'status' => intval($tip), 'param' => $fairy_id);
                             }
                         }
                         ##################[女神强化]############################################
                         ##################[女神培养]############################################
                         if (isset($func_open[31])) {
                             $tip = false;
                             $fairy_level_table = $this->get_game('Fairy')->get_fairy_lvl_tabel_data($fairy_info['fairy_code'], $fairy_info['star']);
                             if ($fairy_level_table) {
                                 if ($player_info['fame_level'] >= $fairy_level_table['fame']) {
                                     $item_data = array();
                                     $get_item_res = $this->get_game('Fairy')->get_item_data($fairy_info['fairy_code'], $fairy_info['star'], $item_data);
                                     if ($get_item_res == true) {
                                         $prop_id = $item_data['item'];
                                         $prop_num = $item_data['count'];
                                         $coin = $item_data['coin'];
                                         if ($item_data['fame'] > 0) {
                                             $coin = 0;
                                         }
                                         if ($prop_id && $prop_num) {
                                             if ($arr_prop_num[$prop_id] >= $prop_num) {
                                                 if ($player_info['silver'] >= $coin) {
                                                     $tip = true;
                                                 }
                                             }
                                         }
                                     }
                                 }
                             }
                             if ($tip) {
                                 $out[] = array('func_id' => 9, 'status' => intval($tip), 'param' => $fairy_id);
                             }
                         }
                         ##################[女神培养]############################################
                         ##################[女神符文位置]############################################
                         if (isset($func_open[31])) {
                             $tip = false;
                             if (Com_Array::is_good_arr($fairy_info['combination_list'])) {
                                 foreach ($fairy_info['combination_list'] as $value) {
                                     if ($value['state'] == 1) {
                                         $tip = true;
                                     }
                                 }
                             }
                             if ($tip) {
                                 $out[] = array('func_id' => 16, 'status' => intval($tip), 'param' => $fairy_id);
                             }
                         }
                         ##################[女神符文位置]############################################
                     }
                 }
             }
         }
     }
     ##################[女神]#################################################
     ########################[技能]##########################################
     $skill_list_all = Cache_Skill::getInstance()->get_skill_list($player_info['career_type']);
     $skill_list_distinct = Cache_Skill::getInstance()->get_distinct_skill_list($player_info['career_type'], 1);
     $skill_hash_all = $this->get_game('PlayerSkill')->convert_skill_list_to_hash($skill_list_all);
     $tip = false;
     foreach ($skill_list_distinct as $val) {
         if ($val['display'] == 0) {
             continue;
         }
         $skill_id = $val['sid'];
         $data['skill_status'] = 0;
         if (isset($player_detail['skill_info'][$skill_id]['level'])) {
             //已激活
             $data['skill_status'] = 1;
             $data['skill_level'] = $player_detail['skill_info'][$skill_id]['level'];
         }
         if ($data['skill_status'] > 0) {
             if ($data['skill_level'] < $skill_hash_all[$skill_id][$data['skill_level']]['max_level'] && $player_info['level'] >= $skill_hash_all[$skill_id][$data['skill_level'] + 1]['unlock'] && $player_info['silver'] >= $skill_hash_all[$skill_id][$data['skill_level'] + 1]['levelup_cost_silver'] && $player_info['crystal'] >= $skill_hash_all[$skill_id][$data['skill_level'] + 1]['levelup_cost_skill_point']) {
                 $tip = true;
                 break;
             }
         }
     }
     if ($tip) {
         $out[] = array('func_id' => 10, 'status' => intval($tip), 'param' => '');
     }
     ########################[技能]##########################################
     ########################[天赋]##########################################
     $tip = false;
     $active_dower_list = $this->get_data('PlayerDower')->get_player_dower($player_id);
     $dower_list_all = Cache_Dower::getInstance()->get_dower_list($player_info['career_type']);
     $dower_list_distinct = Cache_Dower::getInstance()->get_distinct_dower_list($player_info['career_type'], 0);
     //        $dower_hash_all = $this->get_game('PlayerSkill')->convert_dower_list_to_hash($dower_list_all);
     if (!empty($dower_list_distinct)) {
         foreach ($dower_list_distinct as $val) {
             $dower_id = $val['sid'];
             if (isset($active_dower_list[$dower_id])) {
                 $active_dower_list[$dower_id]['dower_lv'] += 1;
             } else {
                 $active_dower_list[$dower_id] = array('dower_id' => $dower_id, 'dower_lv' => 1, 'player_id' => $player_id);
             }
             # 获取天赋配置信息
             $dower_info = Cache_Dower::getInstance()->get_dower_info($dower_id, $active_dower_list[$dower_id]['dower_lv'], 0);
             if ($player_info['level'] > $dower_info['unlock']) {
                 if ($player_info['crystal'] >= $dower_info['cost_crystal']) {
                     if (!empty($dower_info['item_id']) && !empty($dower_info['item_num'])) {
                         $player_prop_num = $arr_prop_num[$dower_info['item_id']];
                         if ($player_prop_num >= $dower_info['item_num']) {
                             $tip = true;
                             break;
                         }
                     }
                 }
             }
         }
         if ($tip) {
             $out[] = array('func_id' => 11, 'status' => intval($tip), 'param' => '');
         }
     }
     ########################[圣器]##########################################
     $trains = $player_detail['train_info'];
     if ($trains) {
         foreach ($trains as $train_type => $train) {
             $train_rank = $train['train_rank'];
             foreach ($train['train_detail'] as $train_attr_seq => $train_detail) {
                 $train_step = $train_detail[$train_attr_seq]['train_step'] + 1;
                 $train_detail = Cache_Train::getInstance()->get_train_detail($train_type, $train_rank, $train_attr_seq, $train_step);
                 if ($train_detail) {
                     if (!empty($train_detail['require_player_level']) && $player_info['level'] >= $train_detail['require_player_level']) {
                         $cost_currency_value = Formula_Train::get_strengthen_train_cost();
                         $cost_currency_key = Cache_Currency::getInstance()->get_key($this->get_game('Train')->get_strengthen_train_cost_cur_type());
                         if ($player_info[$cost_currency_key] >= $cost_currency_value) {
                             if ($player_info['silver'] >= $train_detail['consume_silver']) {
                                 if (!empty($train_detail['consume_item_id'])) {
                                     if ($arr_prop_num[$train_detail['consume_item_id']] >= $train_detail['consume_item_num']) {
                                         if ($train_type == 1) {
                                             $out[] = array('func_id' => 12, 'status' => intval($tip), 'param' => '');
                                         }
                                         if ($train_type == 2) {
                                             $out[] = array('func_id' => 13, 'status' => intval($tip), 'param' => '');
                                         }
                                         if ($train_type == 3) {
                                             $out[] = array('func_id' => 14, 'status' => intval($tip), 'param' => '');
                                         }
                                     }
                                 }
                             }
                         }
                     }
                 }
             }
         }
     }
     ########################[圣器]#########################################
     return $out;
 }