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"; }
/** * 符文整理 * seq 指向 * @param unknown $skill_id * @param unknown $pds_rune_info * @return boolean|multitype:NULL number Ambigous <boolean, unknown> */ public function flag_rune_info_new($skill_id, $pds_rune_info, $func = null, $skill_rune_cote_info = null) { $rune_base = Cache_SkillRune::getInstance()->get_skill_runebyskillid($skill_id); $seq = 0; $pds_rune_info = empty($pds_rune_info) ? array() : $pds_rune_info; $arr_data = array(); $auto_active_rune_cote = array(); # 需要自动激活的符文栏列表 if (is_array($rune_base)) { foreach ($rune_base as $k => $v) { $data = array(); $data['rune_id'] = $v['sid']; # 符文激活状态:0未激活不可激活[序号靠前符文尚未激活];1未激活但可激活;2已激活 if (isset($pds_rune_info[$v['sid']])) { $data['flag'] = 2; $data['rune_level'] = $pds_rune_info[$v['sid']]['level']; $seq = $v['rune_seq']; } elseif ($v['rune_seq'] == $seq + 1) { $data['flag'] = 1; } else { $data['flag'] = 0; } # 符文栏激活状态:0未激活,1已激活 $data['cote_status'] = 0; if (isset($skill_rune_cote_info[$v['sid']])) { $data['cote_status'] = 1; } if (empty($v['consumption_item_id']) && empty($v['comsumption_item_num'])) { $data['cote_status'] = 1; $auto_active_rune_cote[] = $v['sid']; } # next_rune_id: 暂时无效,未知使用逻辑 $data['next_rune_id'] = $v['sid']; if (in_array($func, array(401, 405))) { $arr_data[] = array('flag' => $data['flag'], 'rune_id' => $data['rune_id'], 'rune_level' => $data['rune_level']); } else { $arr_data[] = array('rune_id' => $data['rune_id'], 'rune_level' => $data['rune_level'], 'next_rune_id' => $data['next_rune_id'], 'flag' => $data['flag'], 'cote_status' => $data['cote_status'], 'rune_name' => $v['rune_name']); } } } return array($arr_data, $auto_active_rune_cote); }
public function get_player_skill_rune_list($skill_id, $player_skill_rune_info, $player_skill_rune_cote_info) { $skill_rune_info = Cache_SkillRune::getInstance()->get_skill_rune_list_group($skill_id); $seq = 0; $player_skill_rune_info = empty($player_skill_rune_info) ? array() : $player_skill_rune_info; $rune_list = array(); if (is_array($skill_rune_info)) { foreach ($skill_rune_info as $rinfo) { $data = array(); $data['rune_id'] = $rinfo['sid']; $data['rune_name'] = $rinfo['rune_name']; $data['rune_desc'] = $rinfo['rune_desc']; $data['rune_seq'] = $rinfo['rune_seq']; # 符文激活状态:0未激活,>0已激活 if (isset($player_skill_rune_info[$rinfo['sid']])) { $data['rune_status'] = 1; $data['rune_level'] = $player_skill_rune_info[$rinfo['sid']]['level']; } else { $data['rune_status'] = 0; $data['rune_level'] = 1; } # 符文栏激活状态:0未激活,1已激活 $data['cote_status'] = 0; if (isset($player_skill_rune_cote_info[$rinfo['sid']])) { # 已解锁的符文栏 $data['cote_status'] = 1; } $rune_list[] = $data; } } return $rune_list; }
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 */ public function calc_skill_fpower($player_id) { //$player_detail = $this->get_data('PlayerDetail')->get_player_detail($player_id,array('skill_info','skill_rune_info','dower_info')); $player_detail = is_null($this->player_detail) || !isset($this->player_detail['skill_info']) || !isset($this->player_detail['skill_rune_info']) || !isset($this->player_detail['dower_info']) || !isset($this->player_detail['skill_starmap_info']) ? $this->get_data('PlayerDetail')->get_player_detail($player_id, array('skill_starmap_info', 'skill_info', 'skill_rune_info', 'dower_info')) : $this->player_detail; $sum_power = 0; if ($player_detail['skill_info']) { foreach ($player_detail['skill_info'] as $skill_id => $val) { $sum_power += intval(Formula_SkillFpower::$skill[$val['level']]); if (isset($player_detail['skill_rune_info'][$skill_id])) { foreach ($player_detail['skill_rune_info'][$skill_id] as $rune_id => $rune_val) { $max_level = Cache_SkillRune::getInstance()->get_skill_rune_max_level($skill_id, $rune_id); if ($max_level > 0) { $fpower = Formula_SkillFpower::$rune / $max_level; } else { $fpower = 0; } $sum_power += $rune_val['level'] * $fpower; } } } } if ($player_detail['dower_info']) { foreach ($player_detail['dower_info'] as $val) { $level = isset($val['dower_lv']) ? $val['dower_lv'] : 1; $sum_power += intval(Formula_SkillFpower::$dower[$level]); } } return ceil($sum_power); }