public function handle_dirty_data() { $player_id_list = $this->get_whole_player_list(); if (empty($player_id_list)) { return false; } foreach ($player_id_list as $player_id) { $player_info = TenYear::getInstance('Data_Player')->get_player_info($player_id); $arr_player_detail = TenYear::getInstance('Data_PlayerDetail')->get_player_detail($player_id, array('skill_info', 'skill_rune_info')); $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']); if (empty($skill_list_distinct)) { echo "Warning: player_id={$player_id}|career_type=" . $player_info['career_type'] . "\n"; continue; #$this->throw_error('60022'); # 没有符合玩家职业的技能配置信息 } # 该步操作除了获取hash结构外,重置了每个技能的max_level为有效信息 $skill_hash_all = TenYear::getInstance('Game_PlayerSkill')->convert_skill_list_to_hash($skill_list_all); $exception_flag = 0; # 0无异常 >1异常 foreach ($skill_list_distinct as $val) { if ($val['display'] == 0) { continue; } $skill_id = $val['sid']; # 问题玩家 if (isset($arr_player_detail['skill_info'][$skill_id]) && $arr_player_detail['skill_info'][$skill_id]['level'] > $skill_hash_all[$skill_id][1]['max_level']) { echo "Warning: player_id={$player_id}|skill_id={$skill_id}|origin_level=" . $arr_player_detail['skill_info'][$skill_id]['level'] . "|max_level=" . $skill_hash_all[$skill_id][1]['max_level'] . "\n"; $arr_player_detail['skill_info'][$skill_id]['level'] = $skill_hash_all[$skill_id][1]['max_level']; $exception_flag += 1; } if (isset($arr_player_detail['skill_rune_info'][$skill_id])) { # 重置每个技能的符文为最大等级的激活状态 $rune_list_all = Cache_SkillRune::getInstance()->get_skill_rune_list_by_skill_id($skill_id); $rune_hash_all = TenYear::getInstance('Game_PlayerSkill')->convert_rune_list_to_hash($rune_list_all); foreach ($rune_hash_all as $rune_id => $rune_lv_info) { if (isset($arr_player_detail['skill_rune_info'][$skill_id][$rune_id]) && $arr_player_detail['skill_rune_info'][$skill_id][$rune_id]['level'] > $rune_lv_info[1]['max_level']) { echo "Warning: player_id={$player_id}|skill_id={$skill_id}|rune_id={$rune_id}|origin_level=" . $arr_player_detail['skill_rune_info'][$skill_id][$rune_id]['level'] . "|max_level=" . $rune_lv_info[1]['max_level'] . "\n"; $arr_player_detail['skill_rune_info'][$skill_id][$rune_id]['level'] = $rune_lv_info[1]['max_level']; $exception_flag += 1; } } } } if (!empty($exception_flag)) { # 修正等级 /** TenYear::getInstance('Data_PlayerDetail')->update_player_detail( $player_id, array('skill_info'=>$arr_player_detail['skill_info'], 'skill_rune_info' => $arr_player_detail['skill_rune_info']) ); **/ } } echo "End ...\n"; }
private function handle_skill_for_dummy($dr_info, $skill_info_string) { if (!empty($skill_info_string)) { $skill_list_dummy = array(); # 虚拟角色需要配置的技能信息 $skill_list_valid = array(); # 有效的技能信息,存储skill配置表中对应当前职业的技能 # 虚拟角色职业允许的技能信息 $skill_list_distinct = Cache_Skill::getInstance()->get_distinct_skill_list($dr_info['career_type']); if (empty($skill_list_distinct)) { # do nothing } else { $skill_info_arr = explode("|", $skill_info_string); foreach ($skill_info_arr as $sinfo) { list($skill_id, $skill_level) = explode(":", $sinfo); $skill_list_dummy[$skill_id] = $skill_level; } # 获取有效技能信息 foreach ($skill_list_distinct as $skill_record) { $skill_list_valid[$skill_record['sid']] = $skill_record; } } # 过滤掉无效的技能配置 foreach ($skill_list_dummy as $skill_id => $skill_level) { if (!isset($skill_list_valid[$skill_id])) { unset($skill_list_dummy[$skill_id]); } } # 激活并启用相关技能 if (!empty($skill_list_dummy)) { $player_detail_arr = TenYear::getInstance('Data_PlayerDetail')->get_player_detail($dr_info['player_id'], array('skill_info')); #echo "----------------------------------------------\n"; #var_export($player_detail_arr); #echo "----------------------------------------------\n"; if (!empty($player_detail_arr['skill_info'])) { foreach ($player_detail_arr['skill_info'] as $skill_id => &$sinfo) { $sinfo['keyboard'] = 0; # 全部置为不启用 } } foreach ($skill_list_dummy as $skill_id => $skill_level) { $player_detail_arr['skill_info'][$skill_id] = array('level' => $skill_level, 'keyboard' => $skill_list_valid[$skill_id]['keyboard']); } #echo "++++++++++++++++++++++++++++++++++++++++++++++\n"; #var_export($player_detail_arr); #echo "++++++++++++++++++++++++++++++++++++++++++++++\n"; TenYear::getInstance('Data_PlayerDetail')->update_player_detail($dr_info['player_id'], $player_detail_arr['skill_info']); } } }
public function get_skillrune_list($player_id) { try { $player_info = $this->get_data('Player')->get_player_info($player_id); $arr_player_detail = $this->get_data('PlayerDetail')->get_player_detail($player_id, array('skill_info', 'skill_rune_info', 'skill_keyboard', 'skill_rune_cote_info')); $skill_list_all = Cache_Skill::getInstance()->get_skill_list($player_info['career_type']); $skill_list_destinct = Cache_Skill::getInstance()->get_distinct_skill_list($player_info['career_type']); $out = array(); $arr = $this->get_game('PlayerSkill')->convert_skill_list_to_hash($skill_list_all); # skill_flag: 0未激活;1已激活; if (!empty($skill_list_destinct)) { foreach ($skill_list_destinct as $val) { $data = array(); if ($val['display'] == 0) { continue; } $data['skill_id'] = $val['sid']; $data['skill_name'] = $val['name']; # 是否激活判断 if (isset($arr_player_detail['skill_info'][$val['sid']]['level'])) { //已激活 $data['skill_flag'] = 1; $data['skill_level'] = $arr_player_detail['skill_info'][$val['sid']]['level']; } else { $data['skill_flag'] = 0; $data['skill_level'] = 1; # 默认一级 } $data['skill_keyboard'] = $val['keyboard']; # rune_flag: 0未激活不可激活[序号靠前符文尚未激活];1未激活但可激活;2已激活 list($data['rune_list'], $auto_active_rune_cote) = $this->flag_rune_info_new($val['sid'], $arr_player_detail['skill_rune_info'][$val['sid']], null, $arr_player_detail['skill_rune_cote_info'][$val['sid']]); $out[] = $data; } } #var_export($out); $skillrune_list = array(); foreach ($out as $skill_info) { foreach ($skill_info['rune_list'] as $v) { $si = array(); $si['skill_id'] = $skill_info['skill_id']; $si['skill_name'] = $skill_info['skill_name']; $si['skill_flag'] = $skill_info['skill_flag'] ? '已激活' : '未激活'; $si['skill_level'] = $skill_info['skill_level']; $si['skill_keyboard'] = $skill_info['skill_keyboard']; $si['rune_id'] = $v['rune_id']; $si['rune_level'] = $v['rune_level']; $si['next_rune_id'] = $v['next_rune_id']; $si['rune_flag'] = $v['flag']; if ($v['flag'] == 0) { $si['rune_flag_fmt'] = '未激活[不可激活]'; } elseif ($v['flag'] == 1) { $si['rune_flag_fmt'] = '未激活[可激活]'; } elseif ($v['flag'] == 2) { $si['rune_flag_fmt'] = '已激活'; } $si['cote_status'] = $v['cote_status']; $si['rune_name'] = $v['rune_name']; $skillrune_list[] = $si; } } #var_export($skillrune_list); return $skillrune_list; } catch (Exception $e) { $error = "Exception: " . $e->getFile() . " line:" . $e->getLine() . " " . $e->getMessage(); echo $error; } }
public function handle_skill_level_addition($player_id, &$skill_list, $player_info_all = null, $arr_player_detail_all = null) { /* if(is_null($player_info_all)){ $player_info = $this->get_data('Player')->get_player_info($player_id, array('player_id')); }else{ $player_info = $player_info_all; } */ if (is_null($arr_player_detail_all)) { $arr_player_detail = $this->get_data('PlayerDetail')->get_player_detail($player_id, array('skill_starmap_info')); # 星图加成信息 } else { $arr_player_detail = $arr_player_detail_all; } $train_set_attr_addition = $this->get_game('Train')->get_player_train_set_attr_addition($player_id, $player_info_all, $arr_player_detail_all); # 培养套装加成信息 if (!empty($skill_list) && is_array($skill_list)) { foreach ($skill_list as &$skill_info) { if (!empty($skill_info['skill_status'])) { if (!empty($arr_player_detail['skill_starmap_info'][$skill_info['skill_id']])) { $skill_info['skill_level'] += $arr_player_detail['skill_starmap_info'][$skill_info['skill_id']]; } if (!empty($train_set_attr_addition[$skill_info['skill_id']])) { $skill_info['skill_level'] += $train_set_attr_addition[$skill_info['skill_id']]; } # 最大等级保护 $max_level = Cache_Skill::getInstance()->get_skill_max_level($skill_info['skill_id']); if ($skill_info['skill_level'] > $max_level) { $skill_info['skill_level'] = $max_level; } } } } }
/** * @Purpose: * 创建单个翅膀数据 * @Param $player_id 玩家ID * @Param $wing_id 翅膀ID */ private function create_wing($data) { $id = $data['id']; $wing['id'] = $data['id']; $wing['lvl'] = $data['level']; $wing['attr'] = $this->format_table_field($data['attr_add']); Com_Log::log("{$wing['id']} wing fight attr :" . var_export($wing['attr'], true), 'wing_fight', 1); $wing['fight'] = Formula_Fpower::calc_fpower($wing['attr']); Com_Log::log("{$wing['id']} wing fight base :{$wing['fight']}", 'wing_fight', 1); //技能分解 $skill_data = explode("|", $data['skill_id']); $wing['skill_id'] = $skill_data; #翅膀技能加上战力 if (is_array($wing['skill_id'])) { foreach ($wing['skill_id'] as $skill_id) { $max_level = Cache_Skill::getInstance()->get_skill_max_level($skill_id); $wing['fight'] += intval(Formula_SkillFpower::$wing_skill[$max_level]); } } else { $max_level = Cache_Skill::getInstance()->get_skill_max_level($wing['skill_id']); $wing['fight'] += intval(Formula_SkillFpower::$wing_skill[$max_level]); } Com_Log::log("{$wing['id']} wing fight add skill:{$wing['fight']}", 'wing_fight', 1); /* if (Com_Array::is_good_arr($skill_data)) { foreach ($skill_data as $second_layer) { $wing['skill_id'][] = explode(":", $second_layer); } } */ #$wing[$id]['attr'] = json_encode($wing[$id]['attr']); $wing['show'] = 1; $wing['activation'] = 0; $wing['synthetic'] = 1; if ($data['condition']) { list($type, $value) = explode("|", $data['condition']); if ($type == 4) { #$wing['synthetic'] = 0; $wing['activation'] = 0; $item = explode(":", $value); $wing['condition'] = array($type, $item, 0); /* $l_data = explode(":", $data['show_condition']); if ($l_data[0] != 0) { $wing['show'] = 0; } */ } else { $value = $value > 0 ? $value : 0; $wing['condition'] = array($type, array($value)); } } $wing['state'] = 0; $wing['sort'] = $data['sort']; $wing['avatar'] = $data['avatar']; $wing['name'] = strval($data['name']); $wing['repair_flag'] = $this->repair_flag; return $wing; }
protected function get_skill_recommend($player_id, $level, $skill_data, $dower_data) { $out = array(); $strengthen = Cache_Strengthen::getInstance()->get_strengthen($level, 2); $strengthen_list = array(); $skill_configs = array(); $dower_configs = array(); foreach ($strengthen as $key => $val) { switch ($val['condition_type']) { case 11: //每个技能的等级 foreach ($skill_data['skill_list'] as $skill) { $skill_id = $skill['skill_id']; if (!isset($skill_configs[$skill_id])) { $skill_configs[$skill_id] = Cache_Skill::getInstance()->get_skill_info($skill_id); } // echo $val['condition_val']."|".$skill['skill_level']."|".$val['condition_operation']; if ($this->cal_condition($val['condition_val'], $skill['skill_level'], $val['condition_operation'])) { $tmp_val = $val; $tmp_val['name'] = $skill_configs[$skill_id][0]['name']; $strengthen_list[$val['sub_type']][$skill_id] = $tmp_val; } } continue 2; break; case 12: //每个技能是否有可开启的符文 foreach ($skill_data['skill_list'] as $skill) { $skill_id = $skill['skill_id']; if (count($strengthen_list[$val['sub_type']][$skill_id] >= 1)) { continue; } if (!isset($skill_configs[$skill_id])) { $skill_configs[$skill_id] = Cache_Skill::getInstance()->get_skill_info($skill_id); } $num = 0; foreach ($skill['rune_list'] as $rune) { if ($rune[3] == 1) { ++$num; } } if ($this->cal_condition($val['condition_val'], $num, $val['condition_operation'])) { $tmp_val = $val; $tmp_val['name'] = $skill_configs[$skill_id][0]['name']; $strengthen_list[$val['sub_type']][$skill_id] = $tmp_val; } } continue 2; break; case 13: //技能每个符文等级是否达上限 foreach ($skill_data['skill_list'] as $skill) { $skill_id = $skill['skill_id']; if (count($strengthen_list[$val['sub_type']][$skill_id] >= 1)) { continue; } if (!isset($skill_configs[$skill_id])) { $skill_configs[$skill_id] = Cache_Skill::getInstance()->get_skill_info($skill_id); } $num = 0; $rune_list_all = Cache_SkillRune::getInstance()->get_skill_rune_list_by_skill_id($skill_id); $rune_hash_all = $this->convert_rune_list_to_hash($rune_list_all); $rune_max_level = array(); foreach ($rune_hash_all as $rune_id => $rune_lv_info) { $rune_max_level[$rune_id] = $rune_lv_info[1]['max_level']; } foreach ($skill['rune_list'] as $rune) { if ($rune[2] <= $rune_max_level[$rune[1]]) { $tmp_val = $val; $tmp_val['name'] = $skill_configs[$skill_id][0]['name']; $strengthen_list[$val['sub_type']][$skill_id] = $tmp_val; break; } } } continue 2; break; case 14: //天赋格装备个数 $num = count($dower_data['inuse_dower_list']); // echo $val['condition_val']."|".$num."|".$val['condition_operation']; if ($this->cal_condition($val['condition_val'], $num, $val['condition_operation'])) { $strengthen_list[$val['sub_type']]['s14'] = $val; } break; case 15: //当前装备的天赋可升级 if ($dower_data['inuse_dower_list']) { foreach ($dower_data['inuse_dower_list'] as $dower) { if (count($strengthen_list[$val['sub_type']]) >= 2) { break; } $dower_id = $dower['dower_id']; if (!isset($dower_configs[$dower_id])) { $dower_configs[$dower_id] = Cache_Dower::getInstance()->get_dower_info($dower_id, 1); } if ($dower['up_lv_flag'] == 1) { $tmp_val = $val; $tmp_val['name'] = $dower_configs[$dower_id]['name']; $strengthen_list[$val['sub_type']][$dower_id] = $tmp_val; } } } break; case 16: if ($dower_data['optional_dower_list']) { foreach ($dower_data['optional_dower_list'] as $dower) { if (count($strengthen_list[$val['sub_type']]) >= 2) { break; } $dower_id = $dower['dower_id']; if (!isset($dower_configs[$dower_id])) { $dower_configs[$dower_id] = Cache_Dower::getInstance()->get_dower_info($dower_id, 1); } if ($dower['up_lv_flag'] == 1) { $tmp_val = $val; $tmp_val['name'] = $dower_configs[$dower_id]['name']; $strengthen_list[$val['sub_type']][$dower_id] = $tmp_val; } } } break; } } if (!empty($strengthen_list)) { $out['advise'] = $this->format_advise_list(2, $strengthen_list); } else { $out['advise'] = array(); } // var_dump($out['advise']); return $out; }
/** * 小红点提示 * @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; }