/** * 获取装备的属性 * @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; } }
/** * 获取翅膀的推荐道具 * @param $player_id * @param $wing_id * @param $part * @return array */ public function get_recommend_wing_equip($player_id, $wing_id, $part) { $obj_player_detail_data = $this->get_data('PlayerDetail'); $data = $obj_player_detail_data->get_player_detail($player_id, array('wing_info')); if (isset($data['wing_info'][$wing_id])) { $level = $data['wing_info'][$wing_id]['lvl']; } else { $level = 1; } $recommend = Cache_WingEquipRecommend::getInstance()->get_recommend($level, $part, $wing_id); $out = array(); if (!empty($recommend)) { $item = Cache_Prop::getInstance()->get_prop_info($recommend['item_id']); $equip = Cache_EquipBaseAttr::getInstance()->get_equip_base_attr($item['type'], $item['sub_type'], $item['quality'], $item['level'], $recommend['star_level']); $item['star_level'] = $equip['star_level']; $item['base_attr'] = $equip['base_attr']; $item['addition_attr'] = $equip['addition_attr']; $out['equip'] = Struct_Prop::get_prop_struct($item); } return $out; }
private function _forward_compatibility_for_wing_equip_addition_attr(&$prop_detail) { if (empty($prop_detail) || !is_array($prop_detail)) { return; } if ($prop_detail['type'] != 6) { return; } if (empty($prop_detail['star_level'])) { $arrPropConfig = Cache_Prop::getInstance()->get_prop_info($prop_detail['prop_id']); $equip = Cache_EquipBaseAttr::getInstance()->generate_prop_attr($arrPropConfig['type'], $arrPropConfig['sub_type'], $arrPropConfig['quality'], $arrPropConfig['level'], $arrPropConfig['vocation_limit'], $arrPropConfig['star_level']); $prop_detail['star_level'] = $equip['star_level']; if (!empty($equip['base_attr'])) { $prop_detail['base_attr'] = $equip['base_attr']; } if (!empty($equip['addition_attr'])) { $prop_detail['addition_attr'] = $equip['addition_attr']; } } elseif (intval($prop_detail['refine_version']) < 12) { $addition_attr_key_list = array_keys($prop_detail['addition_attr']); # 版本修正时避免再次随机 $equip = Cache_EquipBaseAttr::getInstance()->generate_prop_attr($prop_detail['type'], $prop_detail['sub_type'], $prop_detail['quality'], $prop_detail['level'], $prop_detail['vocation_limit'], $prop_detail['star_level'], $addition_attr_key_list); if (!empty($equip['base_attr'])) { $prop_detail['base_attr'] = $equip['base_attr']; } if (!empty($equip['addition_attr'])) { $prop_detail['addition_attr'] = $equip['addition_attr']; } } }