Example #1
0
 public function get_suit_config()
 {
     $configs = Cache_ItemFlag::getInstance()->get_item_flag_info();
     $out = array();
     if ($configs) {
         $arr_type = array();
         foreach ($configs as $key => $val) {
             if ($val['type'] == 'quality' && $val['equip_type'] == 1) {
                 $type = 1;
             } elseif ($val['type'] == 'strength' && $val['equip_type'] == 1) {
                 $type = 2;
             } elseif ($val['type'] == 'inlay' && $val['equip_type'] == 1) {
                 $type = 3;
             } elseif ($val['type'] == 'quality' && $val['equip_type'] == 2) {
                 $type = 4;
             } elseif ($val['type'] == 'strength' && $val['equip_type'] == 2) {
                 $type = 5;
             } else {
                 $type = 0;
             }
             $arr_type[$type]['type'] = $type;
             $arr_type[$type]['name'] = $val['type_name'];
             $arr_type[$type]['propertys'][] = $key;
         }
         foreach ($arr_type as $val) {
             $tmp = array('type' => $val['type'], 'name' => $val['name'], 'propertys' => array());
             foreach ($val['propertys'] as $key) {
                 $item = $configs[$key];
                 $flag = explode(":", $item['flag']);
                 $arr_condition = explode("|", $item['condition']);
                 $arr_cd = array();
                 foreach ($arr_condition as $con) {
                     if (!empty($con)) {
                         $ctmp = explode(":", $con);
                         $arr_cd[] = array('key' => Cache_ItemKey::getInstance()->get_item_key($ctmp[0]), 'value' => $ctmp[1]);
                     }
                 }
                 $attr = json_decode($item['attr'], true);
                 $arr_attr = array();
                 foreach ($attr as $k => $v) {
                     $arr_attr[] = array('key' => Cache_RoleKey::getInstance()->get_item_key($k), 'val' => $v['val']);
                 }
                 $tmp['propertys'][] = array('id' => $item['sid'], 'name' => $item['name'], 'num' => $flag[1], 'condition' => $arr_cd, 'attr' => $arr_attr);
             }
             $out[0][] = $tmp;
         }
     }
     return $out;
 }
Example #2
0
 public static function attr_sort_2($attr_list)
 {
     if (empty($attr_list)) {
         return $attr_list;
     }
     $attr_hash = array();
     foreach ($attr_list as $key => $val) {
         if (is_numeric($val['attr_key'])) {
             $val['attr_key_origin'] = Cache_RoleKey::getInstance()->get_attr_key_by_index($val['attr_key']);
         } else {
             $val['attr_key_origin'] = $val['attr_key'];
         }
         $val['sort_priority'] = self::$_sort_priority[$val['attr_key_origin']];
         $attr_hash[$key] = $val;
     }
     Com_Array::multisort($attr_hash, array('sort_priority' => 'asc'));
     foreach ($attr_hash as $attr_idx => $attr_val) {
         unset($attr_val['sort_priority']);
         unset($attr_val['attr_key_origin']);
         $attr_hash[$attr_idx] = $attr_val;
     }
     return $attr_hash;
 }
Example #3
0
 /**
  * @Purpose:
  * 获取玩家翅膀信息
  * @Param $player_id 玩家ID
  * @Return 指定格式的玩家翅膀列表
  */
 public function get_player_wing_info($player_id)
 {
     $player_id = intval($player_id);
     #获取临时数据区数据
     $data = $this->get_temporary_data();
     if (!$data) {
         #获取玩家翅膀信息
         $obj_player_detail_data = $this->get_data('PlayerDetail');
         $data = $obj_player_detail_data->get_player_detail($player_id, 'wing_info');
     }
     $activated_num = 0;
     $rtn_data = array();
     if (Com_Array::is_good_arr($data)) {
         #获取玩家声望等级
         $player_info = $this->get_data('Player')->get_player_info($player_id, array('online_time', 'fame_level', 'level'));
         foreach ($data as $key => $val) {
             if ($val['activation'] == 2 && $val['condition'][0] == 4) {
                 $data[$key]['upgrade'] = 2;
                 #获取下级数据
                 $wing_table = $this->get_cache_table_data('player_wing_table', array('id' => $val['id'], 'level' => $val['lvl'] + 1));
                 if ($wing_table[0]) {
                     $data[$key]['upgrade'] = 1;
                     $data[$key]['n_lvl'] = $val['lvl'] + 1;
                     $attr = $this->format_table_field($wing_table[0]['attr_add']);
                     if (Com_Array::is_good_arr($attr)) {
                         if (!empty($val['equip_attr']) && Com_Array::is_good_arr($val['equip_attr'])) {
                             foreach ($val['equip_attr'] as $attr_type => $attr_val) {
                                 $attr[$attr_type] += ceil($attr_val);
                             }
                         }
                         foreach ($attr as $type => $value) {
                             $data[$key]['n_attr_add'][$type][] = Cache_RoleKey::get_item_key($type);
                             $data[$key]['n_attr_add'][$type][] = $value;
                         }
                     }
                     //技能分解
                     if ($wing_table[0]['skill_id']) {
                         $skill_data = explode("|", $wing_table[0]['skill_id']);
                         $data[$key]['n_skill_id'] = $skill_data;
                     }
                     $data[$key]['success_rate'] = $wing_table[0]['success_rate'];
                     $data[$key]['coin'] = $wing_table[0]['expend_coin'];
                     $drop = $this->format_table_field($wing_table[0]['expend_drop']);
                     if (Com_Array::is_good_arr($drop)) {
                         foreach ($drop as $id => $num) {
                             $data[$key]['drop'][$id][] = $id;
                             $data[$key]['drop'][$id][] = $num;
                             if ($id >= 1 && $id <= 3) {
                                 #获取完成进度
                                 $data[$key]['drop'][$id][] = 0;
                             } else {
                                 #获取玩家背包中的升级道具数量
                                 $data[$key]['drop'][$id][] = $this->get_prop_num_by_player_bag($player_id, $id);
                             }
                         }
                     }
                     if ($wing_table[0]['condition']) {
                         list($type, $condition) = explode("|", $wing_table[0]['condition']);
                         if ($type == 5) {
                             $data[$key]['cur_fame_level'] = $player_info['fame_level'];
                             $data[$key]['need_fame_level'] = $condition;
                         }
                     }
                 }
             }
             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]) {
                         $data[$key]['activation'] = 1;
                     } else {
                         if ($player_info['online_time'] >= $data[$key]['condition'][1][0]) {
                             $data[$key]['activation'] = 1;
                         }
                     }
                 } else {
                     if ($val['condition'][0] == 7) {
                         $data[$key]['condition'][2] = $player_info['level'];
                         if ($data[$key]['condition'][2] >= $data[$key]['condition'][1][0]) {
                             $data[$key]['activation'] = 1;
                         }
                     } else {
                         if ($val['condition'][0] == 6) {
                             #获取翅膀配置表
                             $wing_table_task = $this->get_cache_table_data('player_wing_table', array('id' => $val['id'], 'level' => $val['lvl']));
                             if (!$wing_table_task[0]['condition']) {
                                 $this->throw_error('10109');
                                 #配置表读取错误
                             }
                             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) {
                                 $data[$key]['activation'] = 1;
                             }
                         }
                     }
                 }
                 if ($val['condition'][0] == 4) {
                     #获取翅膀配置表
                     $wing_table = $this->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) {
                                     $data[$val['id']]['activation'] = 1;
                                 }
                             }
                         }
                     }
                 }
             }
             #获取翅膀配置表
             $wing_table_task = $this->get_cache_table_data('player_wing_table', array('id' => $val['id'], 'level' => $val['lvl']));
             if (empty($wing_table_task[0]['avatar'])) {
                 $this->throw_error('10109');
                 #配置表读取错误
             }
             $data[$key]['avatar'] = $wing_table_task[0]['avatar'];
             #装备数据
             if (!empty($val['equipment']) && Com_Array::is_good_arr($val['equipment'])) {
                 foreach ($val['equipment'] as $equip_pos => $equip_info) {
                     $data[$key]['equipment_list'][$equip_pos][] = $equip_pos;
                     $data[$key]['equipment_list'][$equip_pos][] = Struct_Prop::get_prop_struct($equip_info);
                     if ($equip_pos == 7) {
                         #7为带新模型装备
                         $item_table = Cache_Prop::getInstance()->get_prop_info($equip_info['prop_id']);
                         $data[$key]['avatar'] = $item_table['equip_view'];
                     }
                 }
             }
             if (!empty($val['equip_attr']) && Com_Array::is_good_arr($val['equip_attr'])) {
                 foreach ($val['equip_attr'] as $attr_type => $attr_val) {
                     $val['attr'][$attr_type] += ceil($attr_val);
                 }
             }
             if (Com_Array::is_good_arr($val['attr'])) {
                 $addition = 0;
                 if ($val['id'] == 7) {
                     if (isset($data[8]) && $data[8]['activation'] == 2) {
                         $add_config = Cache_WingAddition::getInstance()->get_wing_addition($data[8]['lvl']);
                         $addition = $add_config['addition'] / 10000;
                         $attr_addition = $data[8]['attr'];
                         if (!empty($data[8]['equip_attr']) && Com_Array::is_good_arr($data[8]['equip_attr'])) {
                             foreach ($data[8]['equip_attr'] as $attr_type => $attr_val) {
                                 $attr_addition[$attr_type] += ceil($attr_val);
                             }
                         }
                         foreach ($attr_addition as $attr_type => $attr_val) {
                             $data[$key]['addition_attr'][$attr_type][] = Cache_RoleKey::get_item_key($attr_type);
                             $data[$key]['addition_attr'][$attr_type][] = $attr_val * $addition;
                         }
                     }
                 }
                 if ($val['id'] == 8) {
                     if (isset($data[7]) && $data[7]['activation'] == 2) {
                         $add_config = Cache_WingAddition::getInstance()->get_wing_addition($data[7]['lvl']);
                         $addition = $add_config['addition'] / 10000;
                         $attr_addition = $data[7]['attr'];
                         if (!empty($data[7]['equip_attr']) && Com_Array::is_good_arr($data[7]['equip_attr'])) {
                             foreach ($data[7]['equip_attr'] as $attr_type => $attr_val) {
                                 $attr_addition[$attr_type] += ceil($attr_val);
                             }
                         }
                         foreach ($attr_addition as $attr_type => $attr_val) {
                             $data[$key]['addition_attr'][$attr_type][] = Cache_RoleKey::get_item_key($attr_type);
                             $data[$key]['addition_attr'][$attr_type][] = $attr_val * $addition;
                         }
                     }
                 }
                 $data[$key]['addition_value'] = $addition * 100;
                 foreach ($val['attr'] as $type => $value) {
                     $data[$key]['attr_add'][$type][] = Cache_RoleKey::get_item_key($type);
                     $data[$key]['attr_add'][$type][] = $value;
                 }
             }
             #原20级才开始更新翅膀激活成就,导致20前激活的翅膀无法完成成就,在此做容错处理,重新统计已激活的翅膀,更新成就数据
             if ($val['activation'] == 2) {
                 if ($val['condition'][0] == 4) {
                     $activated_num += 3;
                 } else {
                     $activated_num++;
                 }
             }
             $rtn_data[$key] = Struct_PlayerAttr::get_wing_info_struct($data[$key]);
         }
     }
     if ($activated_num > 0) {
         //成就任务激活翅膀
         $this->get_game('PlayerAchieve')->async_trigger_achieve_target($player_id, 26, $activated_num);
     }
     return array('0' => $rtn_data);
 }
Example #4
0
 public function get_enhanced_refine_info($player_id, $player_prop_id, $refine_attr_seq = 0)
 {
     #$this->get_game('PlayerFunc')->get_func_is_open($player_id, $this->func_id_enhanced_refine);
     $this->param_check_numeric(array($player_id));
     $player_equip_info = $this->get_data('PlayerProp')->get_player_prop_detail($player_id, $player_prop_id);
     if (!$player_equip_info) {
         $this->throw_error('80013');
         # 玩家没有该装备!
     }
     if (Com_Util::is_first_charge_item($player_equip_info['prop_id'])) {
         $this->throw_error('81105');
         # 首充装备不允许精练
     }
     $out_849 = array('player_prop_id' => $player_prop_id, 'refine_info_list' => array(), 'add_success_rate_cost' => "{$this->add_success_rate_cost_cur_type}:{$this->add_success_rate_cost_cur_value}", 'add_success_rate' => $this->add_success_rate, 'attr_perfection_avg' => 0, 'refine_attr_seq' => empty($refine_attr_seq) ? 1 : $refine_attr_seq);
     # --------------------------------------------------------------------
     # 获取装备洗练属性信息 + 计算精炼属性增量,成功率与货币消耗
     # --------------------------------------------------------------------
     $attr_perfection_sum = 0;
     if (!empty($player_equip_info['refine_info'])) {
         $refine_info_mod = $this->get_en_refine_success_rate_and_cost_currency($player_equip_info['refine_info']);
         foreach ($refine_info_mod['attr_info'] as $attr_seq => $attr_info) {
             $en_refine_attr_value_current_lv = $attr_info['en_refine_success_num'] * ceil($attr_info['attr_limit'] / $attr_info['attr_section']);
             if ($attr_info['en_refine_lv'] >= $player_equip_info['level'] && $en_refine_attr_value_current_lv >= $attr_info['attr_limit']) {
                 $en_refine_attr_delta = 0;
                 # 已满
             } else {
                 $en_refine_attr_delta = ceil($attr_info['attr_limit'] / $attr_info['attr_section']);
             }
             $out_849['refine_info_list'][] = array('attr_seq' => $attr_info['attr_seq'], 'attr_key' => Cache_RoleKey::getInstance()->get_item_key($attr_info['attr_key']), 'attr_value' => $attr_info['attr_value'], 'attr_limit' => $attr_info['refine_attr_value'] + $attr_info['attr_stint'], 'attr_perfection' => $attr_info['attr_ratio'], 'en_refine_attr_delta' => $en_refine_attr_delta, 'en_refine_success_rate' => $attr_info['en_refine_success_rate'], 'en_refine_cost_currency' => $attr_info['en_refine_cost_currency'], 'lock_status' => 0);
             $attr_perfection_sum += $attr_info['attr_ratio'];
         }
     }
     $out_849['refine_info_list'] = Struct_Prop::attr_sort_2($out_849['refine_info_list']);
     $out_849['attr_perfection_avg'] = ceil($attr_perfection_sum / 5);
     #var_export($out_849);
     return $out_849;
 }
Example #5
0
 /**
  * 获取每一个套装的数据格式
  * @param $val
  * @param int $player_id
  * @return array
  */
 public function get_fashion_data($val, $player_id = 0, $timeliness = 0)
 {
     $attr_val = array();
     $fpower = 0;
     if ($val['attr_val']) {
         $attr = $this->parse_data($val['attr_val']);
         $fpower = Formula_Fpower::calc_fpower($attr);
         foreach ($attr as $key => $v) {
             $attr_val[] = array('key' => Cache_RoleKey::getInstance()->get_item_key($key), 'val' => $v);
         }
     }
     if ($val['material']) {
         $materials = $this->parse_data($val['material']);
         if (!empty($materials)) {
             list($key, $v) = each($materials);
             $material_id = $key;
             $material_num = $v;
         }
     } else {
         $material_id = 0;
         $material_num = 0;
     }
     return array('sid' => $val['sid'], 'name' => $val['name'], 'type' => $val['type'], 'icon' => $val['icon'], 'attr' => $attr_val, 'times' => $timeliness, 'avatar' => $val['equip_view'], 'sign' => $val['label'], 'signTime' => $val['label_time'], 'player_id' => $player_id, 'material_id' => $material_id, 'material_num' => $material_num, 'material_desc' => $val['material_desc'], 'career_type' => $val['career_type'], 'level' => $val['level'], 'obtain_desc' => $val['obtain_desc'], 'fpower' => $fpower);
 }