Пример #1
0
 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";
 }
Пример #2
0
 /**
  * 符文整理
  * 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);
 }
Пример #3
0
 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;
 }
Пример #4
0
 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;
 }
Пример #5
0
 /**
  * 计算技能模块战力  包括天赋
  * @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);
 }