源战役客户端
您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
 
 
 
 
 

3229 行
108 KiB

EquipModel = EquipModel or BaseClass(BaseVo, true)
local EquipModel = EquipModel
local stringtotable = stringtotable
EquipModel.REQUEST_CCMD_EVENT = "EquipModel.REQUEST_CCMD_EVENT"--请求协议
EquipModel.OPEN_MAIN_VIEW = "EquipModel.OPEN_MAIN_VIEW"--打开主界面
EquipModel.CLOSE_MAIN_VIEW = "EquipModel.CLOSE_MAIN_VIEW"--关闭主界面
EquipModel.UPDATE_DYNAMIC_DETAILS = "EquipModel.UPDATE_DYNAMIC_DETAILS"--更新动态杀怪
EquipModel.UPDATE_VIEW_RED = "EquipModel.UPDATE_VIEW_RED"--更新红点
EquipModel.EQUIP_ITEM_BE_CLICK = "EquipModel.EQUIP_ITEM_BE_CLICK"--装备道具点击
EquipModel.OPEN_STRENGTH_SUIT_VIEW = "EquipModel.OPEN_STRENGTH_SUIT_VIEW"--打开精炼套装界面
EquipModel.OPEN_STAR_SUIT_VIEW = "EquipModel.OPEN_STAR_SUIT_VIEW"--打开星级套装界面
EquipModel.OPEN_EQUIP_STAR_TIP_VIEW = "EquipModel.OPEN_EQUIP_STAR_TIP_VIEW"--打开星级套装Tip界面
EquipModel.INFO_UPDATE = "EquipModel.INFO_UPDATE"--请求协议
EquipModel.UPDATE_RED_EQUIP_INFO = "EquipModel.UPDATE_RED_EQUIP_INFO"--红装成功刷新
EquipModel.OPEN_EQUIP_INHERIT_TIP_VIEW = "EquipModel.OPEN_EQUIP_INHERIT_TIP_VIEW"--打开继承选择装备界面
EquipModel.INHERIT_TIP_CHOOSE_EQUIP = "EquipModel.INHERIT_TIP_CHOOSE_EQUIP"--打继承选中装备
EquipModel.OPEN_EQUIP_EVOLUTION_AWARD_TIP_VIEW = "EquipModel.OPEN_EQUIP_EVOLUTION_AWARD_TIP_VIEW"--升星购买装备展示界面
EquipModel.EVOLUTION_SUCCUSCE = "EquipModel.EVOLUTION_SUCCUSCE"--升星成功
EquipModel.OPEN_GEMSTONES_CHOOSE_VIEW = "EquipModel.OPEN_GEMSTONES_CHOOSE_VIEW"--打开宝石选择界面
EquipModel.OPEN_GEMSTONES_STATE_VIEW = "EquipModel.OPEN_GEMSTONES_STATE_VIEW"--打开宝石操作界面
EquipModel.OPEN_GEMSTONE_SUIT_VIEW = "EquipModel.OPEN_GEMSTONE_SUIT_VIEW"--打开宝石套装界面
EquipModel.OPEN_EVOLUSTION_CHOOSE_VIEW = "EquipModel.OPEN_EVOLUSTION_CHOOSE_VIEW"--打开升星装备选择界面
EquipModel.OPEN_EVOLUSTION_TIP_VIEW = "EquipModel.OPEN_EVOLUSTION_TIP_VIEW"--打开升星装备选择界面
EquipModel.EVOLUTION_EQUIP_CHOOSE = "EquipModel.EVOLUTION_EQUIP_CHOOSE"--升星装备选择更新
EquipModel.EVOLUTION_UPDATE_EQUIP_MARKET_COST = "EquipModel.EVOLUTION_UPDATE_EQUIP_MARKET_COST"--升星装备市场购买刷新
EquipModel.OPEN_DRACONIC_CHOOSE_VIEW = "EquipModel.OPEN_DRACONIC_CHOOSE_VIEW"
EquipModel.OPEN_TOOL_MAIN_VIEW = "EquipModel.OPEN_TOOL_MAIN_VIEW"--打开装备工坊主界面
EquipModel.OPEN_DRACONIC_ATTR_SHOW_VIEW = "EquipModel.OPEN_DRACONIC_ATTR_SHOW_VIEW"--打开刻印属性展示界面
EquipModel.CHANGE_MAIN_BG_RES = "EquipModel.CHANGE_MAIN_BG_RES"--改变背景图
EquipModel.OPEN_EQUIP_INHERIT_WEAR_TIP_VIEW = "EquipModel.OPEN_EQUIP_INHERIT_WEAR_TIP_VIEW"--打开装备继承预览界面
EquipModel.UPDATE_EQUIP_MAX_SERIES = "EquipModel.UPDATE_EQUIP_MAX_SERIES"--刷新装备装备最大套装数
EquipModel.OPEN_GEMSTONE_AUTO_VIEW = "EquipModel.OPEN_GEMSTONE_AUTO_VIEW"--宝石一键镶嵌表现界面
EquipModel.OPEN_EVOLUTION_SCUCCESS_VIEW = "OPEN_EVOLUTION_SCUCCESS_VIEW"--打开升星成功界面
EquipModel.PLAY_GEMSTONE_EFFECT = "PLAY_GEMSTONE_EFFECT"--播放宝石界面特效
EquipModel.OPEN_EQUIP_BASE_TIPS_VIEW = "EquipModel.OPEN_EQUIP_BASE_TIPS_VIEW"--装备精炼升星基础提示界面
EquipModel.PLAY_GEMSTONE_AUTO_EFFECT = "EquipModel.PLAY_GEMSTONE_AUTO_EFFECT"--播放宝石自动镶嵌特效
EquipModel.CLOSE_EVOLUTION_SCUCCESS_VIEW = "EquipModel.CLOSE_EVOLUTION_SCUCCESS_VIEW"--关闭升星成功界面
EquipModel.CLOSE_EVOLUSTION_TIP_VIEW = "EquipModel.CLOSE_EVOLUSTION_TIP_VIEW"--关闭升星二次确认界面
EquipModel.UPDATE_EQUIP_TOOL_TIPS_EXP_LV = "EquipModel.UPDATE_EQUIP_TOOL_TIPS_EXP_LV"--更新守护饰品tip的经验值和等级(可成长装备)
EquipModel.OPEN_EVOLUSTION_ATTR_FIND_VIEW = "EquipModel.OPEN_EVOLUSTION_ATTR_FIND_VIEW"--打开升星属性查找界面
EquipModel.UPDATE_EQUIP_POWER = "EquipModel.UPDATE_EQUIP_POWER"--更新装备战力
EquipModel.UPDATE_STAR_SUIT_EFFECT = "EquipModel.UPDATE_STAR_SUIT_EFFECT"--更新星级套装
--页签
EquipModel.MainTab = {
Strengthen = 1,--精炼
Evolution = 2,--升星
Inherit = 3,--继承
UpQuality = 4,--升品
RedEquip = 5,--红装
Draconic = 6,--刻印
Gemstone = 7,--宝石
}
EquipModel.EquipPosIndex = {--装备位置索引
1,6,2,7,3,8,4,9,5,10
}
EquipModel.EquipType = {
Weapon = 1,--武器
Head = 2,--头盔
Body = 3,--身甲
Shoulder = 4,--披风
Hand = 5,--手甲
Leg = 6,--护腿
Shoes = 7,--鞋子
Necklace = 8,--项链
LeftRing = 9,--戒指
RightRing = 10,--耳饰
Guard = 11,--守护
Fetter = 12,--羁绊
}
--防御
EquipModel.DefEquipType = {
[2] = true,--头盔
[3] = true,--身甲
[4] = true,--披风
[6] = true,--护腿
[7] = true,--鞋子
}
--饰品
EquipModel.NecklaceEquipType = {
[5] = true,--手甲
[8] = true,--项链
[9] = true,--戒指
[10] = true,--耳饰
}
--装备局部百分比属性列表
EquipModel.STypeAttr = {
[221] = 1,--武器攻击
[223] = 2,--防具生命
[224] = 4,--防具防御
[225] = 1,--饰品攻击
}
EquipModel.EquipTypeName = {
"武器",
"头盔",
"身甲",
"披风",
"手甲",
"护腿",
"鞋子",
"项链",
"戒指",
"耳饰",
"守护",
}
--合成配置主类型
EquipModel.ComposeType = {
EquipUpQuality = 1,--升品
}
--升星数等于高级属性数减2
EquipModel.Evolution_Level_offer = 2
--外部提示穿戴等级限制
EquipModel.TipWearLevelLimit = 96
--宝石最大等级
EquipModel.GemstoneMaxLevel = 9
EquipModel.EvoAttrColor = {
"<color=#66abff>高级</color>",
"<color=#f558ff>超级</color>",
"<color=#feb940>至尊</color>",
"<color=#ff203a>绝世</color>",
}
--装备升品展示的10件装备equip_suit_type , 8不是装备= =。
--2020/1/7: 又改回来了= =。 这个保留着吧,以防万一
EquipModel.EmpowerEquipTransId = {
1,--武器
2,--头盔
3,--身甲
4,--披风
5,--手甲
6,--护腿
7,--鞋子
8,--项链
9,--戒指
10--耳饰
}
--装备宝石主类型
EquipModel.GemsType = {
Attark = 1,--攻击
Def = 2,--防御
Life = 3,--生命
}
--装备宝石主类型名字
EquipModel.GemsTypeName = {
[1] = "红宝石",
[2] = "蓝宝石",
[3] = "绿宝石",
}
--装备套件页签bg宽度
EquipModel.TabLenth = {
[1] = 130,
[2] = 180,
[3] = 223,
[4] = 270,
[5] = 326,
[6] = 370,
}
--宝石一键镶嵌展示效果
EquipModel.StoneAotuShowList = {
109002,109003,109004,109012,109013,109014,109022,109023,109024,109025,109005,
}
--装备升品等级对应名字
EquipModel.ReqEquipLvName = {
[1] = "红色",
[2] = "粉色",
[3] = "彩色",
}
--装备升品等级对应名字颜色循环列表
EquipModel.ColorList = {
[1] = "#ff3939",--红
[2] = "#ffc038",--黄
[3] = "#46f33d",--灰
[4] = "#40eef9",--绿
[5] = "#4e47e7",--蓝
[6] = "#cd47ff",
}
function EquipModel:__init()
EquipModel.Instance = self
self:Reset()
end
function EquipModel:Reset()
self.goods_model = GoodsModel:getInstance()
self.equip_sum_stars = 0--装备总星级
self.equip_activie_stars = 0--装备激活星级
self.equip_sum_power = 0--装备总战力
self.equip_force_strength = false--是否正在一键精炼
self.gems_lv_list = {}--装备激活宝石等级列表
self.gems_suit_red_list = {}--装备激活宝石套装红点列表
self.equip_pos_info = {}--装备位置列表信息15200
self.can_strength_info = {}--穿戴装备精炼列表
self.can_up_quality_info = {}--能否升品信息
self.red_dot_info = {}--红点列表
self.equip_red_equip_pos_list = {} -- 15200升品寻宝pos_list
self.red_dot_redEquip_info = {}--红装红点信息
self.gemstone_info_list = {}--15213宝石镶嵌信息
self.equip_gemsstone_red_list = {}
self.gem_next_level_list = {}--宝石下一阶段
self.gems_can_tip = false--宝石能否提示tips
self.redEquip_server_info = {}
self.equip_sum_power = 0
self.no_show_faker_evo = false--默认展示弱红点一次
self.draconic_red_info = {}--刻印装备位置红点
self.cur_max_series = 1 --当前已经开启的最大套代数
self.series_to_turn_cfg = {} --最大套装代数 转 转生数配置
self.turn_to_series_cfg = {} --转生数 转 最大套装代数配置
self.equipment_cfg = {}--装备基础配置初始化
self.equipment_suit_cfg = {}--装备套装配置初始化
self.equipment_gems_suit_cfg = {}--装备宝石套件配置
self.equipment_draconic_cfg = {}--装备刻印属性(暂不知道什么时候需要)
self.red_equip_cfg_list = {}--红装配置
self.suit_attr_active_list = {}--装备更新新套装属性激活
self.suit_attr_active_red_series_list = {}--装备更新新套装属性激活Red
self.suit_attr_red_bool = false
self.need_equip_duibi = false--默认不需要装备对比
self:InitEquipCfg()
end
function EquipModel:getInstance()
if EquipModel.Instance == nil then
EquipModel.Instance = EquipModel.New()
end
return EquipModel.Instance
end
--初始化需要的配置
function EquipModel:InitEquipCfg( )
--装备属性评分库
self.equipment_attr_rating_cfg = {}
local equipment_attr_rating_cfg_list = Config.Equipattrrating
for k,v in pairs(equipment_attr_rating_cfg_list) do
if not self.equipment_attr_rating_cfg[v.attr_id] then
self.equipment_attr_rating_cfg[v.attr_id] = {}
end
self.equipment_attr_rating_cfg[v.attr_id][v.power_section] = v
end
--装备宝石配置
self.equipment_gems_cfg = {}
self.equipment_gems_series_cfg = {}
self.equipment_gems_lv_cfg = {}--专门用于宝石越级升级的红点(这个宝石表操作逻辑很多直接初始化最好数量也不多)
local equipment_gems_cfg = DeepCopy(Config.Equipmentgems)
for k,v in pairs(equipment_gems_cfg) do
v.attr = stringtotable(v.attr)
self.equipment_gems_cfg[v.goods_id] = v
if not self.equipment_gems_series_cfg[v.type] then
self.equipment_gems_series_cfg[v.type] = {}
end
self.equipment_gems_series_cfg[v.type][v.goods_id] = v
if not self.equipment_gems_lv_cfg[v.type] then
self.equipment_gems_lv_cfg[v.type] = {}
end
self.equipment_gems_lv_cfg[v.type][v.lv] = v
end
self.equip_cfg_max_star = 0--装备星级配置最大星级
for k,v in pairs(Config.Equipmentstartotal) do
self.equip_cfg_max_star = self.equip_cfg_max_star < v.stars and v.stars or self.equip_cfg_max_star
end
end
--初始化装备升星概率表
function EquipModel:InitEquipEvolutionRatioCfg( )
--装备升星属性概率
self.equipment_evolution_ratio_cfg = {}
local equipment_evolution_ratio_cfg = Config.Equipmentgreatratio
for k,v in pairs(equipment_evolution_ratio_cfg) do
if not self.equipment_evolution_ratio_cfg[v.color] then
self.equipment_evolution_ratio_cfg[v.color] = {}
end
if not self.equipment_evolution_ratio_cfg[v.color][v.series] then
self.equipment_evolution_ratio_cfg[v.color][v.series] = {}
end
if not self.equipment_evolution_ratio_cfg[v.color][v.series][v.target_series] then
self.equipment_evolution_ratio_cfg[v.color][v.series][v.target_series] = {}
end
if not self.equipment_evolution_ratio_cfg[v.color][v.series][v.target_series][v.target_lv] then
self.equipment_evolution_ratio_cfg[v.color][v.series][v.target_series][v.target_lv] = {}
end
self.equipment_evolution_ratio_cfg[v.color][v.series][v.target_series][v.target_lv] = v
end
end
--刷新主界面装备图标红点
function EquipModel:CheckMainIconRedDot( )
local show = false
for k,v in pairs(self.red_dot_info) do
if v == true then
show = v
break
end
end
GlobalEventSystem:Fire(EventName.SHOW_FUNCTION_RED_POINT, 152, show)
local tool_show = false
for k,v in pairs(self.red_dot_info) do
if k == EquipModel.MainTab.Draconic then--升品和刻印进装备工坊了
if v == true then
tool_show = v
break
end
end
end
GlobalEventSystem:Fire(EventName.SHOW_FUNCTION_RED_POINT, 154, tool_show)
end
--这样写红点 每次调全局的只要调两次
function EquipModel:IsNeedRedAll( )
self.red_dot_info[EquipModel.MainTab.Strengthen] = self:CheckStrengthenRedDot()
self.red_dot_info[EquipModel.MainTab.RedEquip] = self:CheckRedEquipRedDot()
self.red_dot_info[EquipModel.MainTab.Evolution] = self:CheckEvolutionRedDot()
-- self.red_dot_info[EquipModel.MainTab.UpQuality] = self:CheckUpQualityRedDot()
self.red_dot_info[EquipModel.MainTab.Inherit] = self:CheckInheritDot()
-- self.red_dot_info[EquipModel.MainTab.Draconic] = self:CheckDraconicDot()
self.red_dot_info[EquipModel.MainTab.Gemstone] = self:CheckGemstoneDot()
self:CheckMainIconRedDot()
end
--红点刷新
function EquipModel:IsNeedRed( tab_type,is_all,not_refresh_view,refresh_gem_suit )
if not is_all then--全刷新就不判断等级了
local can_refresh = self:CheckLevel(tab_type)
if not can_refresh then return end
end
local bool = false
if tab_type == EquipModel.MainTab.Strengthen then--精炼
bool = self:CheckStrengthenRedDot()
elseif tab_type == EquipModel.MainTab.Evolution then--升星
bool = self:CheckEvolutionRedDot()
elseif tab_type == EquipModel.MainTab.Inherit then--继承
bool = self:CheckInheritDot()
elseif tab_type == EquipModel.MainTab.UpQuality then--升品
-- bool = self:CheckUpQualityRedDot()--转移到合成功能了
ComposeModel:getInstance():IsNeedRed(ComposeModel.MainTab.Guard)--守护
ComposeModel:getInstance():IsNeedRed(ComposeModel.MainTab.Ornaments)--饰品
elseif tab_type == EquipModel.MainTab.RedEquip then--红装
bool = self:CheckRedEquipRedDot()
elseif tab_type == EquipModel.MainTab.Draconic then--刻印
-- bool = self:CheckDraconicDot()
elseif tab_type == EquipModel.MainTab.Gemstone then--宝石
bool = self:CheckGemstoneDot(refresh_gem_suit)
ComposeModel:getInstance():IsNeedRed(ComposeModel.MainTab.Gemstone)--宝石
end
self.red_dot_info[tab_type] = bool
if not not_refresh_view then
self:Fire(EquipModel.UPDATE_VIEW_RED,tab_type,bool)
end
if not is_all then
self:CheckMainIconRedDot()
end
-- print("huangcong:EquipModel [222]: ",bool,tab_type)
-- PrintTable(self.red_dot_info)
end
--检查等级
function EquipModel:CheckLevel( tab_type )
local level = RoleManager:getInstance():GetMainRoleVo().level
if tab_type == EquipModel.MainTab.Strengthen and level >= Config.Modulesub["152@1"].open_lv then--精炼
return true
elseif tab_type == EquipModel.MainTab.Evolution and level >= Config.Modulesub["152@2"].open_lv then--升星
return true
elseif tab_type == EquipModel.MainTab.Inherit and level >= Config.Modulesub["152@3"].open_lv then--继承
return true
elseif tab_type == EquipModel.MainTab.UpQuality and level >= Config.Modulesub["152@4"].open_lv then--升品
return true
elseif tab_type == EquipModel.MainTab.RedEquip and level >= Config.Modulesub["154@1"].open_lv then--红装
return true
elseif tab_type == EquipModel.MainTab.Draconic and level >= Config.Modulesub["154@2"].open_lv then--刻印
return true
elseif tab_type == EquipModel.MainTab.Gemstone and level >= Config.Modulesub["152@7"].open_lv then--宝石
return true
end
return false
end
--检查精炼红点
function EquipModel:CheckStrengthenRedDot( )
local have_red = false
self:GetEquipCanStrength()--更新精炼数据
for k,v in pairs(self.can_strength_info) do
for kk,vv in pairs(v) do
if vv then
have_red = vv
break
end
end
end
return have_red
end
--检查红装红点
function EquipModel:CheckRedEquipRedDot( )
if not GetModuleIsOpen(154,1) then return false end
local boolRed = false
self.red_dot_redEquip_info = {}
-- 三个升级条件
-- 升级至红色品质装备的条件是 当前装备已经是橙色装备
local condition_2 = self:RedEquipCheckAllSeriesLv(3,1)-- 升级至粉色品质装备的条件是 前3代装备全部提升到红色
local condition_3 = self:RedEquipCheckAllSeriesLv(4,2)-- 升级至彩色品质装备的条件是 前4代装备全部提升到粉色
local wear_equip_suit_list = self.goods_model.wear_equip_suit_list or {}
local lv = 0
local info = nil
for k,v in pairs(wear_equip_suit_list) do
if not self.red_dot_redEquip_info[k] then
self.red_dot_redEquip_info[k] = {}
end
for kk,vv in pairs(v) do
lv = 0
info = self:GetRedEquipInfo(k,kk)
if info and info.lv then
lv = info.lv
end
local item_cfg = self:GetRedEquipCfg(k,kk,lv + 1)--取的是下一级的配置
if item_cfg and item_cfg.cost then
if self.goods_model:GetEnough(item_cfg.cost) == true then--首先消耗材料满足再进入判断
if item_cfg.condition and item_cfg.condition[1] == "equip_color" then--装备品质色
if wear_equip_suit_list[k] and wear_equip_suit_list[k][kk] and wear_equip_suit_list[k][kk].color >= 4 then
self.red_dot_redEquip_info[k][kk] = true
boolRed = true
end
elseif item_cfg.condition and item_cfg.condition[1] == "all_series_lv" then--套件等级条件
if item_cfg.condition[2] == 3 and condition_2 then--条件二
self.red_dot_redEquip_info[k][kk] = true
boolRed = true
elseif item_cfg.condition[2] == 4 and condition_3 then--条件三
self.red_dot_redEquip_info[k][kk] = true
boolRed = true
end
end
end
end
end
end
if not boolRed and GetModuleIsOpen(414) then
boolRed = EmpowerModel:GetInstance():GetEmpowerRedDotList()[EmpowerConst.EmpowerViewType.EmpowerShop]
end
if not boolRed and GetModuleIsOpen(414) then
local info = EmpowerModel:GetInstance().grid_game_info
boolRed = info and info.free_count > 0 or false
end
-- print("huangcong:EquipModel [start:448] :", self.red_dot_redEquip_info)
-- PrintTable(self.red_dot_redEquip_info)
-- print("huangcong:EquipModel [end]")
return boolRed
end
function EquipModel:GetRedEquipRedDot()
return self.red_dot_redEquip_info
end
--获得红装红点通过suit和equiptype
function EquipModel:GetRedEquipRedDotBySuitAndEquipType(suit,equip_type)
if self.red_dot_redEquip_info[suit] then
return self.red_dot_redEquip_info[suit][equip_type]
end
return false
end
--补齐列表为显示等级0
function EquipModel:SetRedEquipPosList(vo)
local list = vo
for k1,v1 in pairs(self.EmpowerEquipTransId) do
local isHave = false
for k,v in pairs(vo) do
if v.pos == v1 then
isHave = true
end
end
if isHave == false then
local subList = {}
subList.pos = v1
subList.power_lv = 0
table.insert(list, subList)
end
end
self.equip_red_equip_pos_list = list
end
function EquipModel:GetRedEquipPosList()
return self.equip_red_equip_pos_list
end
--装备位置信息
function EquipModel:SetEquipPosInfoList(list)
if not list then return end
self.equip_pos_info = {}
for i,v in ipairs(list) do
local carve_list = {}
for ii,vv in ipairs(v.carve_list) do
carve_list[vv.goods_id] = vv
end
v.carve_list = carve_list
self.equip_pos_info[v.pos] = v
end
end
function EquipModel:GetEquipPosInfoList(pos)
return self.equip_pos_info[pos]
end
function EquipModel:IsExistEmpowerPosAndLvReturnCost(series,pos,getLv)
local cfg = self:GetRedEquipCfg(series,pos,getLv)
if cfg then
return true,cfg.cost
end
return false
end
--获取最高阶的每一件装备
function EquipModel:GetMaxEquipList( )
local need_list = {}
local compare_list = {}
local maxLen = NewMainRoleModel:getInstance():GetRoleReinMaxTurn()
for k1,v1 in pairs(self.goods_model.wear_equip_suit_list) do
for k,v in pairs(v1) do
if compare_list[v.equip_suit_type] then
if compare_list[v.equip_suit_type] < v.cell then
compare_list[v.equip_suit_type] = v.cell
need_list[v.equip_suit_type] = v
end
else
compare_list[v.equip_suit_type] = v.cell
need_list[v.equip_suit_type] = v
end
end
end
return need_list
end
--检查升品的红点
function EquipModel:CheckUpQualityRedDot( )
local have_red = false
for k,v in pairs(self.can_up_quality_info) do
for kk,vv in pairs(v) do
if vv then
have_red = vv
break
end
end
end
return have_red
end
--检查继承红点
function EquipModel:CheckInheritDot( )
local bag_goods_list = self.goods_model.bag_goods_list
for k,v in pairs(bag_goods_list) do
local goods_vo = v
if goods_vo and goods_vo.type == GoodsModel.TYPE.EQUIP and goods_vo.goods_num > 0 then
local equip_cfg = self:GetEquipmentCfg(goods_vo.type_id)
if equip_cfg and equip_cfg.series ~= 99 then
--当前同等位置穿戴的装备数据
local cur_wear_data = nil
local can_inherit = false
if self.goods_model.wear_equip_suit_list[equip_cfg.series]
and self.goods_model.wear_equip_suit_list[equip_cfg.series][equip_cfg.equip_type]
then
cur_wear_data = self.goods_model.wear_equip_suit_list[equip_cfg.series][equip_cfg.equip_type]
local cur_wear_strength_level = 0--当前装备精炼等级
local cur_wear_evoblution_level = 0--当前升星等级
for k,v in pairs(cur_wear_data.other_data) do
if v.type == GoodsModel.GoodsInfoType.EquipmentLv then
cur_wear_strength_level = tonumber(v.info)
elseif v.type == GoodsModel.GoodsInfoType.EquipEvoLevel and equip_cfg.equip_type < EquipModel.EquipType.Necklace then
cur_wear_evoblution_level = tonumber(v.info)
end
end
--品质小于当前的装备并且是紫色装备或以上
--当前穿戴的装备升星和精炼都是0才给红点
local goods_strength_level = 0
local goods_evolution_level = 0
if goods_vo.color > 2 and goods_vo.color < cur_wear_data.color
and cur_wear_evoblution_level < 3 and cur_wear_strength_level == 0 then
for k,v in pairs(goods_vo.other_data) do
if v.type == GoodsModel.GoodsInfoType.EquipmentLv then
goods_strength_level = tonumber(v.info)
elseif v.type == GoodsModel.GoodsInfoType.EquipEvoLevel and equip_cfg.equip_type < EquipModel.EquipType.Necklace then
goods_evolution_level = tonumber(v.info)
end
end
--非首饰可以继承升星
if equip_cfg.equip_type < EquipModel.EquipType.Necklace then
--当前装备高级属性必须大于1
if goods_evolution_level > 1 then
return true
end
--当前装备精炼等级必须大于1
if goods_strength_level > 0 then
return true
end
--首饰只能继承精炼等级
elseif equip_cfg.equip_type >= EquipModel.EquipType.Necklace and equip_cfg.equip_type <= EquipModel.EquipType.RightRing then
if goods_strength_level > 0 then
return true
end
end
end
end
end
end
end
return false
end
--检查升星红点
function EquipModel:CheckEvolutionRedDot( )
local have_red = false
self:GetEquipCanEvolution()--更新升星数据
local anim_percent = 95
local life_skill_active = PetModel:getInstance():IsLifeSkillActived(PetConst.LifeSkill.EquipEvolutionSuccessRateUp)
local life_skill_ratio = PetModel:getInstance():GetPetLifeSkillRatio(PetConst.LifeSkill.EquipEvolutionSuccessRateUp)
local vip_card_ratio = VipModel.getInstance():VipCardEquipEvolutionRatio(true)
local add_life_skill_ratio = 0
if life_skill_active then
add_life_skill_ratio = life_skill_ratio
end
anim_percent = anim_percent - add_life_skill_ratio - vip_card_ratio---目标升星概率需要减去宠物和月卡加成的
for k,v in pairs(self.can_evolution_info) do
for kk,vv in pairs(v) do
local evolution_level = self:GetEquipEvolutionLevel(vv.goods_vo) + 1--当前装备升星等级
if vv.radio and vv.cost_enoght and (not vv.is_faker or vv.is_faker and not self.no_show_faker_evo) then--强红点/弱红点
if vv.radio >= anim_percent then
have_red = true
break
elseif self.bag_evoluton_radio_list[k] and self.bag_evoluton_radio_list[k][evolution_level]
and self.bag_evoluton_radio_list[k][evolution_level]/100 + vv.radio >= anim_percent then
have_red = true
break
end
end
end
end
if not have_red then
have_red = self:GetCurHaveStarRedDot()
end
return have_red
end
function EquipModel:CheckEvolutionStrengthStarRedDot( )
local have_red = self:GetCurHaveStarRedDot()
return have_red
end
--得到升星套件标签红点
function EquipModel:GetEvolutionSuitTabRedInfo( )
local info = {}
if self.can_evolution_info then
local anim_percent = 95
local life_skill_active = PetModel:getInstance():IsLifeSkillActived(PetConst.LifeSkill.EquipEvolutionSuccessRateUp)
local life_skill_ratio = PetModel:getInstance():GetPetLifeSkillRatio(PetConst.LifeSkill.EquipEvolutionSuccessRateUp)
local vip_card_ratio = VipModel.getInstance():VipCardEquipEvolutionRatio(true)
local add_life_skill_ratio = 0
if life_skill_active then
add_life_skill_ratio = life_skill_ratio
end
anim_percent = anim_percent - add_life_skill_ratio - vip_card_ratio---目标升星概率需要减去宠物和月卡加成的
for k,v in pairs(self.can_evolution_info) do
for kk,vv in pairs(v) do
local evolution_level = self:GetEquipEvolutionLevel(vv.goods_vo) + 1--当前装备升星等级
if vv.radio and vv.cost_enoght and (not vv.is_faker or vv.is_faker and not self.no_show_faker_evo) then
if vv.radio >= anim_percent then
info[k] = true
break
elseif self.bag_evoluton_radio_list[k] and self.bag_evoluton_radio_list[k][evolution_level]
and self.bag_evoluton_radio_list[k][evolution_level]/100 + vv.radio >= anim_percent then
info[k] = true
break
end
end
end
end
end
return info
end
--检查刻印红点
function EquipModel:CheckDraconicDot( )
return false
end
--[检查宝石红点主界面]
function EquipModel:CheckGemstoneDot( refresh_gem_suit )
local show = false
if not refresh_gem_suit then
local bag_goods_list = self.goods_model.bag_goods_list
local server_info = self:GetGemstoneSeriesInfo()--宝石镶嵌信息
local wear_equip_suit_list = self.goods_model.wear_equip_suit_list
local equip_gemsstone_red_list = {}--装备宝石红点列表
--背包中所有装备套件的宝石红点列表
if server_info and bag_goods_list and wear_equip_suit_list then
local bag_gem_list = {}
local wear_gem_list = {}
for k,v in pairs(bag_goods_list) do
if v.type == 1 and v.subtype == 23 and v.pos == 2 and v.goods_num >= 1 then--宝石类
local cfg = Config.Equipmentgems[v.type_id]
if cfg then
bag_gem_list[#bag_gem_list + 1] = cfg
end
end
end
if #bag_gem_list > 0 then--背包中有宝石
--先判断没有宝石装满的情况
for k,v in pairs(wear_equip_suit_list) do
for kk,vv in pairs(v) do
if kk ~= EquipModel.EquipType.Guard then
if not equip_gemsstone_red_list[k] then
equip_gemsstone_red_list[k] = {}
end
if not equip_gemsstone_red_list[k][kk] then
if not server_info[k] or not server_info[k][kk] then--有装备却没有宝石数据直接为true
equip_gemsstone_red_list[k][kk] = true
show = true
elseif TableSize(server_info[k][kk]) < 3 then--有装备却宝石没有装满直接为true
for i=1,3 do--确定是那种类型的宝石没有
if not server_info[k][kk][i] and not equip_gemsstone_red_list[k][kk] then
for kkk,vvv in pairs(bag_gem_list) do
if vvv.type == i then
equip_gemsstone_red_list[k][kk] = true
show = true
break
end
end
end
end
end
end
end
end
end
if not show then--先给镶嵌红点 再给其他的红点
--如果宝石装满了返回宝石等级高的
for k,v in pairs(wear_equip_suit_list) do
for kk,vv in pairs(v) do
if kk ~= EquipModel.EquipType.Guard then
if not equip_gemsstone_red_list[k][kk] then
for kkk,vvv in pairs(server_info[k][kk]) do
for kkkk,vvvv in pairs(bag_gem_list) do
if vvvv.type == vvv.type and vvvv.lv > vvv.lv then
equip_gemsstone_red_list[k][kk] = true
show = true
break
end
end
if self:CheckGemstoneViewDot(vvv.goods_id) then
equip_gemsstone_red_list[k][kk] = true
show = true
end
end
end
end
end
end
end
--如果可以升级也需要添加红点
end
end
self.equip_gemsstone_red_list = equip_gemsstone_red_list
end
for k,v in pairs(self.equip_gemsstone_red_list) do
if show then break end
for kk,vv in pairs(v) do
if vv then
show = true
break
end
end
end
local suit_show = self:CheckGemstoneSeriesRedDot()
if not show then--如果还没有红点就检查宝石套装的红点
show = suit_show
end
return show
end
--检查装备宝石是否有红点
function EquipModel:CheckGemstoneViewDot( type_id )
local show = false
local bag_goods_list = self.goods_model.bag_goods_list
--背包中所有装备套件的宝石红点列表
if bag_goods_list and type_id then
local bag_gem_list = {}
for k,v in pairs(bag_goods_list) do
if v.type == 1 and v.subtype == 23 and v.pos == 2 and v.goods_num >= 1 then--宝石类
local cfg = Config.Equipmentgems[v.type_id]
if cfg then
bag_gem_list[#bag_gem_list + 1] = cfg
end
end
end
if #bag_gem_list > 0 then--背包中有宝石
--先判断有没有比他高级的宝石
local cfg = Config.Equipmentgems[type_id]
if cfg then
for k,v in pairs(bag_gem_list) do
if v.type == cfg.type and v.lv > cfg.lv then
show = true
break
end
end
else
print("huangcong:EquipModel [start:778]宝石配置不存在 :", type_id)
end
--判断是否能升级
if not show then
show = self:CheckGemstoneCanLevel(type_id)
end
end
end
return show
end
--检查宝石是否能升级
function EquipModel:CheckGemstoneCanLevel( type_id )
if not type_id then return false end
local show = false
--寻找接下来能合成宝石的情况从高到低
local num = self.goods_model:GetTypeGoodsNum(type_id)
local gem_type = Config.Equipmentgems[type_id].type
local gem_cur_lv = Config.Equipmentgems[type_id].lv
if gem_cur_lv >= EquipModel.GemstoneMaxLevel then return false end
--递归方法
local function findGemstoneCanLevel( gem_cur_lv,need_num )
if gem_cur_lv <= 1 then return false end
local show = false
local need_last_gems_num = need_num
local last_cfg = self.equipment_gems_lv_cfg[gem_type][gem_cur_lv - 1]
if last_cfg then
local last_gems_num = self.goods_model:GetTypeGoodsNum(last_cfg.goods_id)
if last_gems_num >= need_last_gems_num then
show = true
else
show = findGemstoneCanLevel(gem_cur_lv - 1,(need_num - last_gems_num)*3)
end
end
return show
end
--先判断同等级的是否数量大于2
if num >= 2 then
show = true
--没有的话去寻找下一个等级的宝石看能不能凑齐2个同等级的
elseif gem_cur_lv > 1 then
local offer_num = 2 - num
local need_last_gems_num = offer_num*3
local last_cfg = self.equipment_gems_lv_cfg[gem_type][gem_cur_lv - 1]
if last_cfg then
local last_gems_num = self.goods_model:GetTypeGoodsNum(last_cfg.goods_id)
if last_gems_num >= need_last_gems_num then
show = true
end
end
if not show then
show = findGemstoneCanLevel(gem_cur_lv,need_last_gems_num)
end
end
return show
end
--检查宝石是否替换
function EquipModel:CheckGemstoneCanReplace( type_id )
local show = false
local bag_goods_list = self.goods_model.bag_goods_list
--背包中所有装备套件的宝石红点列表
if bag_goods_list and type_id then
local bag_gem_list = {}
for k,v in pairs(bag_goods_list) do
if v.type == 1 and v.subtype == 23 and v.pos == 2 and v.goods_num >= 1 then--宝石类
local cfg = Config.Equipmentgems[v.type_id]
if cfg then
bag_gem_list[#bag_gem_list + 1] = cfg
end
end
end
if #bag_gem_list > 0 then--背包中有宝石
--先判断有没有比他高级的宝石
local cfg = Config.Equipmentgems[type_id]
if cfg then
for k,v in pairs(bag_gem_list) do
if v.type == cfg.type and v.lv > cfg.lv then
show = true
break
end
end
else
print("huangcong:EquipModel [start:778]宝石配置不存在 :", type_id)
end
end
end
return show
end
--是否是玩家背包中的装备物品
function EquipModel:IsInEquipList(goods_id)--物品唯一ID
local is_bag = true
for k,v in pairs(self.goods_model.wear_equip_suit_list) do
for kk,vv in pairs(v) do
if vv.goods_id == goods_id then
is_bag = false
break
end
end
end
return is_bag
end
--是否是穿戴装备
function EquipModel:IsWearEquip( goods_id )
local wear_equip = self.goods_model.wear_equip_dic[goods_id] --传进来的物品id不是已穿戴列表中的
wear_equip = wear_equip or MateModel:GetInstance():GetIsMateShipByTypeId(goods_id)--羁绊信物默认穿戴中
return wear_equip and true or false
end
--判断是否需要显示装备对比tips
function EquipModel:ShowCompareTips(type_id, goods_id)
local show = false
local have_equip_data = nil
local wear_equip = self.goods_model.wear_equip_dic[goods_id] --传进来的物品id不是已穿戴列表中的
if wear_equip == nil then
local equip_cfg = self:GetEquipmentCfg(type_id)
if equip_cfg and equip_cfg.equip_type ~= EquipModel.EquipType.Guard then
local equip_series_list = self.goods_model.wear_equip_suit_list[equip_cfg.series] --在已穿戴列表中能找到与传进来的类型相同的装备
if equip_series_list and equip_series_list[equip_cfg.equip_type] then
show = true
have_equip_data = equip_series_list[equip_cfg.equip_type]
end
else
if self.cur_choose_suit ~= nil then
local equip_series_list = self.goods_model.wear_equip_suit_list[self.cur_choose_suit]
if equip_series_list and equip_series_list[equip_cfg.equip_type] then
show = true
have_equip_data = equip_series_list[equip_cfg.equip_type]
end
end
end
end
return show, have_equip_data
end
function EquipModel:InitEquipmentCfg( )
if TableSize(self.equipment_cfg) == 0 then
local equipment_cfg_list = DeepCopy(Config.Equipment)
for k,v in pairs(equipment_cfg_list) do
v.career = stringtotable(v.career)
v.base_attr = stringtotable(v.base_attr)
v.great_attr_list = stringtotable(v.great_attr_list)
v.attr_show = stringtotable(v.attr_show)
v.skill = stringtotable(v.skill)
v.suit = stringtotable(v.suit)
v.evolution_offer_ratio = stringtotable(v.evolution_offer_ratio)
self.equipment_cfg[v.goods_id] = v
end
end
end
--获得装备基本信息配置
function EquipModel:GetEquipmentCfg( goods_id )
self:InitEquipmentCfg()
if self.equipment_cfg[goods_id] then
return self.equipment_cfg[goods_id]
else
local is_mate = MateModel:GetInstance():GetIsMateShipByTypeId( goods_id )
if is_mate then
--羁绊信物的数据
local goods_basic = self.goods_model:GetGoodsBasicByTypeId( goods_id )
local model_save_temp_mate = self.mate_show_tool_tip_data
if model_save_temp_mate then
my_mate_conf = MateModel:GetInstance():GetShipConf(model_save_temp_mate.stage,model_save_temp_mate.star)
else
my_mate_conf = MateModel:GetInstance():GetCurShipConf()
end
if goods_basic and my_mate_conf then
local data = {goods_id = goods_id}
data.base_attr = stringtotable(my_mate_conf.attr)
data.name = my_mate_conf.name
data.series = 99
data.color = goods_basic.color
data.career = {[1] = 1,[2] = 2,[3] = 3,[4] = 4}
data.equip_type = 12
return data
end
end
-- print("没有装备配置哦!", goods_id)
end
end
--获得装备套件配置
function EquipModel:GetEquipmentSuitCfg( series,type )--1装备2首饰
if TableSize(self.equipment_suit_cfg) == 0 then
local equipment_suit_cfg_list = DeepCopy(Config.Equipmentsuit)
for k,v in pairs(equipment_suit_cfg_list) do
v.stage_attr = stringtotable(v.stage_attr)
v.attr = stringtotable(v.attr)
v.suit_equip = stringtotable(v.suit_equip)
if not self.equipment_suit_cfg[v.series] then
self.equipment_suit_cfg[v.series] = {}
end
if not self.equipment_suit_cfg[v.series][v.type] then
self.equipment_suit_cfg[v.series][v.type] = {}
end
self.equipment_suit_cfg[v.series][v.type][#self.equipment_suit_cfg[v.series][v.type] + 1] = v
end
local sort_func = function ( a, b )
return a.suit_num < b.suit_num
end
for series,v in pairs(self.equipment_suit_cfg) do
for type,vv in pairs(v) do
table.sort(vv, sort_func)
end
for type,vv in pairs(v) do
local suit_num_max = vv[#vv] and vv[#vv].suit_num
for k,vvv in ipairs(vv) do
vvv.suit_num_max = suit_num_max
end
end
end
end
if self.equipment_suit_cfg[series] and self.equipment_suit_cfg[series][type] then
return self.equipment_suit_cfg[series][type]
else
print("没有该套件信息哦", series,type)
end
end
--获得装备高级属性配置
function EquipModel:GetEquipmentGreatAttrCfg( attr_id )
local data = Config.Equipmentgreatattr[attr_id]
if data then
data = DeepCopy(data)
data.attr = stringtotable(data.attr)
return data
else
print("没有该高级属性条目哦", attr_id)
end
end
--获得装备属性评分power可能是查看他人战力
function EquipModel:GetEquipAttrRatingCfg( attr_id,attr_value,power )
if self.equipment_attr_rating_cfg[attr_id] and attr_id and attr_value then
local fight = power or RoleManager.Instance.mainRoleInfo.fighting
for k,v in pairs(self.equipment_attr_rating_cfg[attr_id]) do
if v.min_power <= fight and fight <= v.max_power then
return attr_value*v.rating
end
end
else
print('没有该属性的评分哦,不是特殊属性吧!', attr_id,attr_value)
end
end
--获得装备精炼属性的配置
function EquipModel:GetEquipStrengthAttrCfg( type_id,lv )
if not type_id or not lv then return end
local equip_cfg = self:GetEquipmentCfg(type_id)
if equip_cfg then
local series = equip_cfg.series
local equip_type = equip_cfg.equip_type
local key = series.."@"..equip_type.."@"..lv
if Config.Equipmentstrength[key] then
local data = DeepCopy(Config.Equipmentstrength[key])
data.attr = stringtotable(data.attr)
data.cost = stringtotable(data.cost)
return data
end
else
print('没有精炼属性的装备哦!', type_id,lv)
end
end
--获得装备精炼当前套装最大精炼等级
function EquipModel:GetEquipStrengSuitMaxLevel( series )
local max_level = 0
for k,v in pairs(Config.Equipmentstrengthtotal) do
if v.series == series then
max_level = max_level < v.lv and v.lv or max_level
end
end
return max_level
end
--获得升星属性的配置
function EquipModel:GetEquipEvolutionCfg( type_id,lv )
local equip_cfg = self:GetEquipmentCfg(type_id)
if equip_cfg then
local series = equip_cfg.series
local equip_type = equip_cfg.equip_type
local key = series.."@"..equip_type.."@"..lv
local cfg = Config.Equipmentgreat[key]
if cfg then
cfg = DeepCopy(cfg)
cfg.attr = stringtotable(cfg.attr)
cfg.cost = stringtotable(cfg.cost)
cfg.great_attr = stringtotable(cfg.great_attr)
cfg.great_attr_list = stringtotable(cfg.great_attr_list)
return cfg
end
else
-- print('没有配置的装备哦!', type_id,lv)
end
end
--获得装备提供升星概率的配置
function EquipModel:GetEquipEvolutionRatioCfg( type_id,target_series,target_lv )
if not type_id then return end
local equip_cfg = self:GetEquipmentCfg(type_id)
if equip_cfg and equip_cfg.equip_type <= EquipModel.EquipType.Shoes then
local goods_basic = self.goods_model:GetGoodsBasicByTypeId(type_id)
if goods_basic and goods_basic.color >= 3 then
local color = goods_basic.color
local series = equip_cfg.series
if target_series and target_lv then
local key_value = string.format("%s@%s@%s@%s",series,color,target_series,target_lv)
if Config.Equipmentgreatratio[key_value] then
return Config.Equipmentgreatratio[key_value]
else
print('没有升星属性概率的装备哦!', type_id,target_series,target_lv)
end
elseif not target_series then
if not self.equipment_evolution_ratio_cfg then--没找到初始化一次配置表
self:InitEquipEvolutionRatioCfg()
end
if self.equipment_evolution_ratio_cfg[color][series] and self.equipment_evolution_ratio_cfg[color][series] then
return self.equipment_evolution_ratio_cfg[color][series]
else
print('没有升星属性概率的装备哦!', type_id,target_series,target_lv)
end
end
end
else--不是装备
-- print('没有配置的装备哦!', type_id,lv)
end
end
--获得装备的所有高级属性Id列表
function EquipModel:GetEquipZhuoYueAttrIdList( type_id )
local equip_cfg = self:GetEquipmentCfg(type_id)
local attr_list = {}
if equip_cfg then
if equip_cfg.equip_type >= EquipModel.EquipType.Necklace then--首饰拿这些
for k,v in ipairs(equip_cfg.great_attr_list) do
attr_list[#attr_list + 1] = v
end
else
local attr_cfg_list = {}
for k,v in pairs(Config.Equipmentgreat) do
if v.series == equip_cfg.series and v.equip_type == equip_cfg.equip_type then
local data = DeepCopy(v)
data.attr = stringtotable(data.attr)
attr_cfg_list[#attr_cfg_list + 1] = data
end
end
local sort_func = function ( a, b )
return a.up_num < b.up_num
end
table.sort(attr_cfg_list, sort_func)
for k,v in ipairs(attr_cfg_list) do
attr_list[#attr_list + 1] = v.attr[1]
end
end
end
return attr_list
end
--获得升星最大等级
function EquipModel:GetEvoMaxLevel( type_id )
local equip_cfg = self:GetEquipmentCfg(type_id)
local max_star_level = 0
if equip_cfg then
if equip_cfg.equip_type >= EquipModel.EquipType.Necklace then--首饰拿这些
max_star_level = #equip_cfg.great_attr_list
else
for k,v in pairs(Config.Equipmentgreat) do
if v.series == equip_cfg.series and v.equip_type == equip_cfg.equip_type then
max_star_level = max_star_level + 1
end
end
end
end
return max_star_level
end
--判断是否是特殊装备属性评分
function EquipModel:GetIsEquipAttrRating( attr_id )
if self.equipment_attr_rating_cfg[attr_id] and attr_id then
return true
end
return false
end
--计算装备评分
--is_bag背包里面要计算精炼等级带来的评分
function EquipModel:MathEquipScore( goods_vo,goods_id,power )
local attr_info = {}
local empower_lv = 0
local equip_score = 0--评分
local haved_power = false--是否是已有战力
local equip_cfg = self:GetEquipmentCfg(goods_id)
if goods_vo and goods_vo.power and goods_vo.power~=nil and goods_vo.power ~= "" then
power = tonumber(goods_vo.power)
end
power = power ~= nil and power > 0 and power or RoleManager.Instance.mainRoleInfo.fighting
-- print("huangcong:EquipModel [start:1254] :", power)
--基础属性
if equip_cfg and equip_cfg.base_attr and TableSize(equip_cfg.base_attr) ~= 0 then
for k,v in pairs(equip_cfg.base_attr) do
attr_info[#attr_info + 1] = v
end
end
-- print("huangcong:EquipModel [start:243] attr_info:", attr_info)
-- PrintTable(attr_info)
-- print("huangcong:EquipModel [end]")
--高级属性
local zhuoyue_attr = {}
--精炼等级
local strengthen_level = 0
local star_evolution_lv = equip_cfg.color >= 3 and 1 or 0--星级升星属性等级
if goods_vo then
haved_power = goods_vo.pos == 1
for k,v in pairs(goods_vo.other_data or {}) do
if v.type == GoodsModel.GoodsInfoType.EquipEvoLevel and equip_cfg.equip_type < EquipModel.EquipType.Necklace then--非首饰读特殊属性
star_evolution_lv = tonumber(v.info)
elseif v.type == GoodsModel.GoodsInfoType.EquipmentLv then
strengthen_level = tonumber(v.info)
elseif v.type == GoodsModel.GoodsInfoType.EquipEmpower then--赋能等级
empower_lv = tonumber(v.info)
end
end
if haved_power then
local server_info = self:GetRedEquipInfo(equip_cfg.series,equip_cfg.equip_type)
if server_info then
empower_lv = server_info and server_info.lv or 0
if goods_vo.empower_lv then
empower_lv = goods_vo.empower_lv
end
end
end
if empower_lv and empower_lv > 0 then
local empower_cfg = self:GetRedEquipCfg(equip_cfg.series,equip_cfg.equip_type,empower_lv)--基础属性
if empower_cfg and empower_cfg.attr then
for k,v in pairs(empower_cfg.attr) do
attr_info[#attr_info + 1] = v
end
end
end
--获得精炼属性
if strengthen_level ~= 0 then
local strength_level_cfg = self:GetEquipStrengthAttrCfg(goods_id,strengthen_level)
if strength_level_cfg and strength_level_cfg.attr then
for k,v in pairs(strength_level_cfg.attr) do
attr_info[#attr_info + 1] = v
end
end
end
-- print("huangcong:EquipModel [start:278] attr_info:", attr_info,strengthen_level)
-- PrintTable(attr_info)
-- print("huangcong:EquipModel [end]")
local sort_func = function ( a, b )
if a.type ~= b.type then
return a.type > b.type
else
return a.id > b.id
end
end
table.sort(zhuoyue_attr, sort_func)
end
if equip_cfg.equip_type >= EquipModel.EquipType.Necklace then--首饰展示预览升星属性
for k,attr_cfg in pairs(equip_cfg.great_attr_list or {}) do
zhuoyue_attr[#zhuoyue_attr + 1] = {[1] = attr_cfg}
end
else
local equip_evo_cfg = self:GetEquipEvolutionCfg(equip_cfg.goods_id,star_evolution_lv)
if equip_evo_cfg and equip_evo_cfg.great_attr_list then
for i,attr_cfg in ipairs(equip_evo_cfg.great_attr_list) do
zhuoyue_attr[#zhuoyue_attr + 1] = {[1] = attr_cfg}
end
end
end
if zhuoyue_attr and TableSize(zhuoyue_attr) ~= 0 then
for k,v in pairs(zhuoyue_attr) do
attr_info[#attr_info + 1] = v[1]
end
end
--获得总属性列表了!
for k,v in pairs(attr_info) do
if self:GetIsEquipAttrRating(v[1]) then
equip_score = equip_score + self:GetEquipAttrRatingCfg(v[1],v[2],power)
else
equip_score = equip_score + GetPropOneAddNum(v[1])*v[2]
end
end
return math.floor(equip_score)
end
--获得装备awarditem具体数据
function EquipModel:GetBagEquipAwaraItemInfo( goods_vo )
local attr_info = {}
local strengthen_level = 0--精炼等级
local star = 0--卓越星级
local evolution_level = 0
local star_color = 1
if goods_vo then
--高级属性
local equip_cfg = self:GetEquipmentCfg(goods_vo.type_id)
--精炼等级
if equip_cfg then
evolution_level = equip_cfg.color >= 3 and 1 or 0
for k,v in pairs(goods_vo.other_data or {}) do
if v.type == GoodsModel.GoodsInfoType.EquipEvoLevel then--高级属性
evolution_level = tonumber(v.info)
elseif v.type == GoodsModel.GoodsInfoType.EquipmentLv then--精炼等级
strengthen_level = tonumber(v.info)
end
end
if equip_cfg and equip_cfg.equip_type >= EquipModel.EquipType.Necklace then
evolution_level = #equip_cfg.great_attr_list
for k,v in pairs(equip_cfg.great_attr_list) do
if v[3] then
star_color = star_color < v[3] and v[3] or star_color
end
end
else
local equip_evo_cfg = self:GetEquipEvolutionCfg(goods_vo.type_id,evolution_level)
if equip_evo_cfg and equip_evo_cfg.great_attr_list then
for k,v in pairs(equip_evo_cfg.great_attr_list) do
if v[3] then
star_color = star_color < v[3] and v[3] or star_color
end
end
end
end
end
star = evolution_level
end
local data = {}
data.star_color = star_color
data.star = star
data.evolution_level = evolution_level
data.strengthen_level = strengthen_level
data.goods_vo = goods_vo
-- print("huangcong:EquipModel [start:363] data:", data)
-- PrintTable(data)
-- print("huangcong:EquipModel [end]")
return data
end
--获得当前的套件激活信息
function EquipModel:GetCurSuitInfo( equip_list,tab_id )
-- local turn = RoleManager:getInstance():GetMainRoleVo().turn--暂时取消限制
local cur_wear_equip_list = equip_list or self.goods_model.wear_equip_suit_list
local suit_info = {}
for k,v in pairs(cur_wear_equip_list) do
if not tab_id then
suit_info[k] = TableSize(v) / 11
elseif tab_id == EquipModel.MainTab.Evolution then
local len = 0
if TableSize(v) > 0 then
for equip_type,vv in pairs(v) do
if equip_type < EquipModel.EquipType.Necklace then
len = len + 1
end
end
suit_info[k] = len / 7
end
end
end
return suit_info
end
--获得当前套件装备是否可以精炼
--只能说装备是真的要遍历很多东西最好把数据保存起来
function EquipModel:GetEquipCanStrength( )
--是否能精炼
local can_strength_info = {}
--首饰类是否能升品
local can_up_quality_info = {}
local necklace_up_info = {}
local wear_equip_suit_list = self.goods_model.wear_equip_suit_list
local equip_star_sum = 0
-- print("huangcong:EquipModel [start:1363] :", wear_equip_suit_list)
-- PrintTable(wear_equip_suit_list)
-- print("huangcong:EquipModel [end]")
if wear_equip_suit_list then
--能否精炼列表
for k,v in pairs(wear_equip_suit_list) do
for kk,vv in pairs(v) do
local strengthen_level = 0--当前装备等级
for kkk,vvv in pairs(vv.other_data or {}) do
if vvv.type == GoodsModel.GoodsInfoType.EquipmentLv then
strengthen_level = tonumber(vvv.info)
elseif vvv.type == GoodsModel.GoodsInfoType.EquipEvoLevel then
equip_star_sum = tonumber(vvv.info) + equip_star_sum
end
end
local base_cfg = self:GetEquipStrengthAttrCfg(vv.type_id,strengthen_level + 1)
if base_cfg then
local cost_list = {}
for kkk,vvv in ipairs(base_cfg.cost) do
local num = self.goods_model:GetTypeGoodsNum(vvv[2]) or 0
cost_list[kkk] = {num,vvv[2],vvv[3]}
end
local can_strength = self:CanStrength(cost_list)
if not can_strength_info[k] then
can_strength_info[k] = {}
end
can_strength_info[k][vv.equip_suit_type] = can_strength
end
--判断首饰类才能升品--这里是拿已穿戴的
if vv.equip_suit_type >= EquipModel.EquipType.Necklace then
local equip_cfg = self:GetEquipmentCfg(vv.type_id)
if equip_cfg and equip_cfg.equip_type and vv.goods_num > 0 then
equip_star_sum = #equip_cfg.great_attr_list + equip_star_sum
end
local compose_cfg = ComposeModel:getInstance():GetEvolutionComposeCfg(vv.type_id)
local limit_level = compose_cfg and compose_cfg.open_lv or 0
local cost_list = RoleManager.Instance.mainRoleInfo.level >= limit_level and compose_cfg and compose_cfg.cost_goods or {}
if cost_list and #cost_list > 0 then
local can_up_quality = true
for kkk,vvv in ipairs(cost_list) do
local goods_num = self.goods_model:GetTypeGoodsNum(vvv[2]) or 0
if goods_num < vvv[3] then
can_up_quality = false
end
end
if not can_up_quality_info[k] then
can_up_quality_info[k] = {}
end
can_up_quality_info[k][vv.equip_suit_type] = {can_up = can_up_quality,type_id = vv.type_id}
--这里是首饰的二次构造红点 因为要显示到具体的哪一个但是不需要知道哪一代
if not necklace_up_info[vv.type_id] then
necklace_up_info[vv.type_id] = can_up_quality
end
end
end
end
end
end
--这里再判断一次首饰的红点
local bag_goods_list = self.goods_model.bag_goods_list
for k,v in pairs(bag_goods_list) do
local equip_cfg = self:GetEquipmentCfg(v.type_id)
if equip_cfg and equip_cfg.equip_type and equip_cfg.equip_type >= EquipModel.EquipType.Necklace and v.goods_num > 0 then
local compose_cfg = ComposeModel:getInstance():GetEvolutionComposeCfg(v.type_id)
local limit_level = compose_cfg and compose_cfg.open_lv or 0
local cost_list = RoleManager.Instance.mainRoleInfo.level >= limit_level and compose_cfg and compose_cfg.cost_goods or {}
local series = equip_cfg.series
if cost_list and #cost_list > 0 then
local can_up_quality = true
for kkk,vvv in ipairs(cost_list) do
local goods_num = self:EquipGoodsNumById(vvv[2]) or 0
if goods_num < vvv[3] then
can_up_quality = false
end
end
--这里是首饰的二次构造红点 因为要显示到具体的哪一个但是不需要知道哪一代
if not necklace_up_info[v.type_id] then
necklace_up_info[v.type_id] = can_up_quality
end
end
end
end
if self.equip_sum_stars ~= 0 and equip_star_sum > self.equip_sum_stars then--星级提升
local tip_data = {}
tip_data.id = EquipModel.MainTab.Evolution
tip_data.star = equip_star_sum
local strengthtotal_cfg = Config.Equipmentstartotal[equip_star_sum]
if strengthtotal_cfg then
strengthtotal_cfg = DeepCopy(strengthtotal_cfg)
strengthtotal_cfg.stage_attr = stringtotable(strengthtotal_cfg.stage_attr)
tip_data.attr = strengthtotal_cfg.stage_attr
end
print("huangcong:EquipModel [start:1457] :", tip_data)
PrintTable(tip_data)
print("huangcong:EquipModel [end]")
if TableSize(tip_data.attr) <= 0 then
tip_data.is_skill_select = true
end
self:Fire(EquipModel.OPEN_EQUIP_BASE_TIPS_VIEW,tip_data)
end
self.equip_sum_stars = equip_star_sum
self.can_strength_info = can_strength_info
self.can_up_quality_info = can_up_quality_info
self.necklace_up_info = necklace_up_info--首饰升品信息
-- print("huangcong:EquipModel [start:1457] :", self.necklace_up_info)
-- PrintTable(self.necklace_up_info)
-- print("huangcong:EquipModel [end]")
-- print("huangcong:EquipModel [start:832] :", self.can_strength_info)
-- PrintTable(self.can_strength_info)
-- print("huangcong:EquipModel [end]")
end
function EquipModel:GetEquipCanStrengthByPos( series,pos )
-- PrintTable(self.can_strength_info)
-- print("huangcong:EquipModel [end]")
if self.can_strength_info[series] then
return self.can_strength_info[series][pos]
end
return false
end
--获取身上穿戴的装备能升品
function EquipModel:GetEquipCanUpQualityByPos( series,pos,type_id,cost_list )
if not self.can_up_quality_info then return false end
if series ~= 99 then
if self.can_up_quality_info and self.can_up_quality_info[series] and self.can_up_quality_info[series][pos] then
return self.can_up_quality_info[series][pos].can_up
end
else
-- for k,v in pairs(self.can_up_quality_info) do
-- for kk,vv in pairs(v) do
-- if vv.type_id == type_id then
-- return vv.can_up
-- end
-- end
-- end
local bool = self:GetBagEquipCanUpQualityByTypeId(type_id)
if not bool and cost_list then
for i,v in ipairs(cost_list) do
bool = self:GetBagEquipCanUpQualityByTypeId(v[2])
if bool then
return true
end
end
end
end
if not have_red and self.necklace_up_info and self.necklace_up_info[type_id] then
return true
end
return false
end
--获取背包上穿戴的装备能升品
function EquipModel:GetBagEquipCanUpQualityByTypeId( type_id )
if not self.necklace_up_info then return false end
return self.necklace_up_info[type_id] or false
end
--装备能否精炼顺便计算差多少钱
function EquipModel:CanStrength( cost_list )
if not cost_list then return end
local can_strength = true
local price = 0
local offer_cost = {}--返回差多少材料
for k,v in pairs(cost_list) do
if v[1] < v[3] then
can_strength = false
local goods_price, sell_price, price_type = self.goods_model:GetGoodsPrice(v[2])
price = (v[3] - v[1])*goods_price + price
offer_cost[v[2]] = v[3] - v[1]
end
end
return can_strength,price,offer_cost,price_type
end
--获得当前套件装备是否可以升星
function EquipModel:GetEquipCanEvolution( )
--升星红点列表
local can_evolution_info = {}
local wear_equip_suit_list = self.goods_model.wear_equip_suit_list
local cur_suit = EquipModel.getInstance():GetCurrentOpenSuitSeries()
if wear_equip_suit_list then
--能否升星列表
for k,v in pairs(wear_equip_suit_list) do
for kk,vv in pairs(v) do
--首饰类加上守护不做升星
if vv.equip_suit_type <= EquipModel.EquipType.Shoes and vv.goods_num > 0 then
local evolution_level = 0--当前装备升星等级
for kkk,vvv in pairs(vv.other_data or {}) do
if vvv.type == GoodsModel.GoodsInfoType.EquipEvoLevel then
evolution_level = tonumber(vvv.info) or 0
break
end
end
evolution_level = evolution_level >= 1 and evolution_level or 1
local base_cfg = self:GetEquipEvolutionCfg(vv.type_id,evolution_level + 1)
if base_cfg and vv.color >= 3 then
local cost_list = {}
for kkk,vvv in ipairs(base_cfg.cost) do
local num = self.goods_model:GetTypeGoodsNum(vvv[2]) or 0
cost_list[kkk] = {num,vvv[2],vvv[3]}
end
local cost_enoght,price,offer_cost,price_type = self:CanStrength(cost_list,true)
local is_enoght = cost_enoght
local is_faker = false
if not is_enoght then
local cost_price_list = {}
for i,v in ipairs(cost_list) do
local goods_price, sell_price, price_type = self.goods_model:GetGoodsPrice(v[2])
cost_price_list[price_type] = cost_price_list[price_type] or 0
if v[3] - v[1] > 0 then
cost_price_list[price_type] = goods_price*(v[3] - v[1])
end
end
is_enoght = true
is_faker = true
for price_type,v in pairs(cost_price_list) do
if price_type == 3 and RoleManager.Instance.mainRoleInfo.tong<v then--材料钱满足也行
is_enoght = false
is_faker = false
elseif price_type == 1 and RoleManager.Instance.mainRoleInfo.jin<v then--材料钱满足也行
is_enoght = false
is_faker = false
end
end
end
if not can_evolution_info[k] then
can_evolution_info[k] = {}
end
can_evolution_info[k][vv.equip_suit_type] = {radio = base_cfg.ratio/100 or 0,cost_enoght = is_enoght, goods_vo = vv, is_faker = is_faker}
end
end
end
end
end
local bag_goods_list = self.goods_model.bag_goods_list
--背包中所有装备套件的概率加成列表
local bag_evoluton_radio_list = {}
for k,v in pairs(bag_goods_list) do
if v.type == GoodsModel.TYPE.EQUIP and v.goods_num > 0 and self:SelfCareerIsOk(v.type_id) then
local equip_cfg = self:GetEquipmentCfg(v.type_id)
if self:SelfCareerIsOk(v.type_id)--职业相同
and equip_cfg.series <= cur_suit--代数解锁
and not self:EquipCanShowGoodsTip(v)--可操作
then
local equip_radio_cfg = self:GetEquipEvolutionRatioCfg(v.type_id)
if equip_radio_cfg then
for kk,vv in pairs(equip_radio_cfg) do
for kkk,vvv in pairs(vv) do
if not bag_evoluton_radio_list[kk] then
bag_evoluton_radio_list[kk] = {}
end
if not bag_evoluton_radio_list[kk][vvv.target_lv] then
bag_evoluton_radio_list[kk][vvv.target_lv] = 0
end
bag_evoluton_radio_list[kk][vvv.target_lv] = vvv.ratio + bag_evoluton_radio_list[kk][vvv.target_lv]
end
end
end
end
end
end
-- print("huangcong:EquipModel [start:413] :", bag_evoluton_radio_list)
-- PrintTable(bag_evoluton_radio_list)
-- print("huangcong:EquipModel [end]")
self.can_evolution_info = can_evolution_info
self.bag_evoluton_radio_list = bag_evoluton_radio_list
end
--获得背包装备列表并按照套件排列
--type_id是否需要当前的装备能升星的列表
function EquipModel:GetBagEquipList( type_id,goods_vo )
local bag_goods_list = self.goods_model.bag_goods_list
local career = RoleManager.Instance.mainRoleInfo.career
local equip_list = {}
--升星的装备背包表
local evolution_equip_list = {}
local cur_suit = self:GetCurrentOpenSuitSeries()
for k,v in pairs(bag_goods_list) do
if v.type == GoodsModel.TYPE.EQUIP and v.goods_num > 0 then
local equip_cfg = self:GetEquipmentCfg(v.type_id)
--职业不符合
local have_career = false
for i,v in ipairs(equip_cfg.career) do
if v == career then
have_career = true
break
end
end
if equip_cfg and equip_cfg.equip_type <= EquipModel.EquipType.Shoes
and have_career
and equip_cfg.series <= cur_suit
and not self:EquipCanShowGoodsTip(v) then
local series = equip_cfg.series
if not equip_list[equip_cfg.series] then
equip_list[equip_cfg.series] = {}
end
equip_list[equip_cfg.series][#equip_list[equip_cfg.series] + 1] = v
end
end
end
-- print("huangcong:EquipModel [start:680] :", equip_list)
-- PrintTable(equip_list)
-- print("huangcong:EquipModel [end]")
if type_id and goods_vo then
local need_evolution_equip_cfg = self:GetEquipmentCfg(type_id)
if need_evolution_equip_cfg then
local series = need_evolution_equip_cfg.series
local target_lv = self:GetEquipEvolutionLevel(goods_vo) + 1--当前装备升星等级
for k,v in pairs(equip_list) do
for kk,vv in pairs(v) do
local equip_cfg = self:GetEquipmentCfg(vv.type_id)
local equip_radio_cfg = self:GetEquipEvolutionRatioCfg(vv.type_id,series,target_lv)
if equip_radio_cfg then
if not evolution_equip_list[k] then
evolution_equip_list[k] = {}
end
vv.evolution_ratio = equip_radio_cfg.ratio/100
evolution_equip_list[k][#evolution_equip_list[k] + 1] = vv
end
end
end
end
end
-- print("huangcong:EquipModel [start:471] :", type_id)
-- PrintTable(equip_list)
-- print("huangcong:EquipModel [end]")
-- print("huangcong:EquipModel [start:561] :", type_id)
-- PrintTable(evolution_equip_list)
-- print("huangcong:EquipModel [end]")
return equip_list,evolution_equip_list
end
--判断装备是否具备精炼的的品质
function EquipModel:EquipIsStrength( goods_vo )
if goods_vo and goods_vo.equip_suit_type and goods_vo.equip_suit_type ~= EquipModel.EquipType.Guard then--守护不做精炼
return true
end
return false
end
--判断装备是否具备升星的品质
function EquipModel:EquipIsEvolution( goods_vo )
if goods_vo and goods_vo.equip_suit_type and goods_vo.equip_suit_type and (goods_vo.equip_suit_type <= EquipModel.EquipType.Shoes) then--首饰类不做升星
local evolution_level = self:GetEquipEvolutionLevel(goods_vo) + 1--当前装备升星等级
local base_cfg = self:GetEquipEvolutionCfg(goods_vo.type_id,evolution_level)
if base_cfg then
return true
end
end
return false
end
--判断装备是否具备升品的品质
function EquipModel:EquipIsUpQuality( goods_vo )
if goods_vo and goods_vo.equip_suit_type and goods_vo.equip_suit_type >= EquipModel.EquipType.Necklace then--首饰类才能升品
local compose_cfg = ComposeModel:getInstance():GetEvolutionComposeCfg(goods_vo.type_id)
local limit_level = compose_cfg and compose_cfg.open_lv or 0
if compose_cfg and RoleManager.Instance.mainRoleInfo.level >= limit_level then
return true
end
end
return false
end
--得到装备升星的升星等级
function EquipModel:GetEquipEvolutionLevel( goods_vo )
if goods_vo and goods_vo.equip_suit_type and goods_vo.equip_suit_type <= EquipModel.EquipType.Shoes and goods_vo.color>=3 then--首饰类不做升星
local evolution_level = 0--当前装备升星等级
for kkk,vvv in pairs(goods_vo.other_data or {}) do
if vvv.type == GoodsModel.GoodsInfoType.EquipEvoLevel then
evolution_level = tonumber(vvv.info)
end
end
evolution_level = evolution_level >= 1 and evolution_level or 1
return evolution_level
end
return 0
end
--判断装备是否能否升星
function EquipModel:EquipIsCanEvolution( series,pos,goods_vo,no_cost_enoght )
local level_is_ok = self:CheckLevel(EquipModel.MainTab.Evolution)
if series and pos and pos <= EquipModel.EquipType.Shoes and level_is_ok then--首饰类不做升星
if self.can_evolution_info and self.can_evolution_info[series] and self.can_evolution_info[series][pos] and (self.can_evolution_info[series][pos].cost_enoght or no_cost_enoght) then
local evolution_level = self:GetEquipEvolutionLevel(goods_vo) + 1--当前装备升星等级
local radio = self.can_evolution_info[series][pos].radio
if self.bag_evoluton_radio_list[series] and self.bag_evoluton_radio_list[series][evolution_level] then
radio = radio + self.bag_evoluton_radio_list[series][evolution_level]/100
end
local anim_percent = 95
local life_skill_active = PetModel:getInstance():IsLifeSkillActived(PetConst.LifeSkill.EquipEvolutionSuccessRateUp)
local life_skill_ratio = PetModel:getInstance():GetPetLifeSkillRatio(PetConst.LifeSkill.EquipEvolutionSuccessRateUp)
local vip_card_ratio = VipModel.getInstance():VipCardEquipEvolutionRatio(true)
local add_life_skill_ratio = 0
if life_skill_active then
add_life_skill_ratio = life_skill_ratio
end
anim_percent = anim_percent - add_life_skill_ratio - vip_card_ratio---目标升星概率需要减去宠物和月卡加成的
local cost_enought = false
if self.can_evolution_info[series] and self.can_evolution_info[series][pos] then
cost_enought = self.can_evolution_info[series][pos].cost_enoght and (not self.can_evolution_info[series][pos].is_faker or self.can_evolution_info[series][pos].is_faker and not self.no_show_faker_evo)
end
return radio >= anim_percent and cost_enought
end
end
return false
end
--获得套件装备精炼数据【用于精炼套装界面EquipStrengthenSuitView】
function EquipModel:GetEquipStrengthInfo( suit_id )
local strength_info = {}
local wear_equip_suit_list = self.goods_model.wear_equip_suit_list
if wear_equip_suit_list and wear_equip_suit_list[suit_id] then
for k,v in pairs(wear_equip_suit_list[suit_id]) do
if v.equip_suit_type ~= EquipModel.EquipType.Guard and not strength_info[v.equip_suit_type] then
local strengthen_level = 0--当前装备等级
for kkk,vvv in pairs(v.other_data or {}) do
if vvv.type == GoodsModel.GoodsInfoType.EquipmentLv then
strengthen_level = tonumber(vvv.info)
break
end
end
strength_info[v.equip_suit_type] = strengthen_level
end
end
end
-- print("huangcong:EquipModel [start:413] :", can_strength_info)
-- PrintTable(can_strength_info)
-- print("huangcong:EquipModel [end]")
return strength_info
end
--得到装备套装的配置
function EquipModel:GetStrengthTotalCfg( series )
local streng_total_cfg_list = {}
streng_total_cfg_list[series] = {}
for k,v in pairs(Config.Equipmentstrengthtotal) do
if v.series == series then
local data = DeepCopy(v)
data.attr = stringtotable(data.attr)
streng_total_cfg_list[series][data.lv] = data
end
end
return streng_total_cfg_list[series]
end
--得到星级套装的配置
--all是获得所有
function EquipModel:GetStarTotalCfg( star_lv,all )
if not all then
local cfg = Config.Equipmentstartotal[star_lv]
if cfg then
cfg = DeepCopy(cfg)
cfg.stage_attr = stringtotable(cfg.stage_attr)
cfg.attr = stringtotable(cfg.attr)
cfg.stage_skill = stringtotable(cfg.stage_skill)
cfg.skill = stringtotable(cfg.skill)
end
return cfg
elseif all then
local equipment_startotal_cfg_list = {}
local equipment_startotal_cfg = DeepCopy(Config.Equipmentstartotal)
for k,v in pairs(equipment_startotal_cfg) do
v.stage_attr = stringtotable(v.stage_attr)
v.attr = stringtotable(v.attr)
v.stage_skill = stringtotable(v.stage_skill)
v.skill = stringtotable(v.skill)
equipment_startotal_cfg_list[v.stars] = v
end
return equipment_startotal_cfg_list
end
print("没有该星级的套装:", star_lv)
end
--得到星星还有红点可以激活吗
function EquipModel:GetCurHaveStarRedDot( )
if self.equip_activie_stars and self.equip_sum_stars then
if self.equip_sum_stars > self.equip_activie_stars then
for k,v in pairsByKeys(Config.Equipmentstartotal) do
if v.stars > self.equip_activie_stars and v.stars <= self.equip_sum_stars then--配置星级大于激活星级并且小于装备总星级
return true
end
end
end
end
return false
end
--设置装备激活星级数量
function EquipModel:SetEquipActiveStarNum( star )
self.equip_activie_stars = star
end
--得到升品合成配置
function EquipModel:GetUpQualityComposeList( cost_list )
local compose_list = {}
local compose_req_list = {}
if cost_list and TableSize(cost_list) > 0 then
local bag_goods_list = self.goods_model.bag_goods_list
for k,v in pairs(bag_goods_list) do
for kk,vv in pairs(cost_list) do
local cur_goods_num = 0
for kkk,vvv in pairs(compose_list) do--如果消耗物品不足要继续拿下一个堆叠的物品
if vvv[2] == v.type_id then
cur_goods_num = vvv[3] + cur_goods_num
end
end
if vv[2] == v.type_id and cur_goods_num < vv[3] then
if v.goods_num + cur_goods_num >= vv[3] then
compose_list[#compose_list + 1] = {v.goods_id,v.type_id,vv[3] - cur_goods_num}
else
compose_list[#compose_list + 1] = {v.goods_id,v.type_id,v.goods_num}
end
end
end
end
end
-- print("huangcong:EquipModel [start:929] :",compose_list)
-- PrintTable(compose_list)
-- print("huangcong:EquipModel [end]")
return compose_list
end
--获得装备数量 包括身上穿的
function EquipModel:EquipGoodsNumById( type_id )
local goods_num,_,goods_vo_list = self.goods_model:GetTypeGoodsNum(type_id) or 0
local goods_vo = nil
goods_vo_list = goods_vo_list or {}
local equip_cfg = self:GetEquipmentCfg(type_id)
if equip_cfg then
local wear_equip_suit_list = self.goods_model.wear_equip_suit_list
if equip_cfg.series ~= 99 then
local series = equip_cfg.series
local pos = equip_cfg.equip_type
if wear_equip_suit_list[series] and wear_equip_suit_list[series][pos] then
if wear_equip_suit_list[series][pos].type_id == type_id then
goods_vo = wear_equip_suit_list[series][pos]
goods_vo_list[#goods_vo_list + 1] = goods_vo
end
end
else
for k,v in pairs(wear_equip_suit_list) do
if not goods_vo then
for kk,vv in pairs(v) do
if vv.type_id == type_id then
goods_vo = vv
goods_vo_list[#goods_vo_list + 1] = goods_vo
break
end
end
else
break
end
end
end
end
if goods_vo and goods_vo.goods_num > 0 then
goods_num = goods_num + 1
end
return goods_num,goods_vo_list
end
--穿戴装备要判断继承
function EquipModel:WearEquip( goods_vo,is_quick )
if not goods_vo or not goods_vo.color then return end
local equip_cfg = self:GetEquipmentCfg(goods_vo.type_id)
if not equip_cfg or not equip_cfg.color then return end
local len,list = NewMainRoleModel:getInstance():GetRoleReinMaxTurn()
if Config.Equipmentseriesopen[equip_cfg.series] then
local series_limit_cfg = Config.Equipmentseriesopen[equip_cfg.series]
if not series_limit_cfg then
print("huangcong:EquipModel [start:1324] 没有套件限制配置:", equip_cfg.type_id,equip_cfg.series)
return
end
if series_limit_cfg.open_lv > RoleManager.Instance.mainRoleInfo.level then
Message.show(series_limit_cfg.open_lv.."级开放第"..ChineseNumber(equip_cfg.series).."代装备","fault")
return
end
end
--当前同等位置穿戴的装备数据
local cur_wear_data = nil
local can_inherit = false
if self.goods_model.wear_equip_suit_list[equip_cfg.series]
and self.goods_model.wear_equip_suit_list[equip_cfg.series][equip_cfg.equip_type]
then
cur_wear_data = self.goods_model.wear_equip_suit_list[equip_cfg.series][equip_cfg.equip_type]
if not cur_wear_data or not cur_wear_data.color then return end
local cur_goods_strength_level = 0
for k,v in pairs(goods_vo.other_data) do
if v.type == GoodsModel.GoodsInfoType.EquipmentLv then
cur_goods_strength_level = tonumber(v.info)
break
end
end
--品质大于当前的装备
if equip_cfg.color > 3 and goods_vo.color > cur_wear_data.color then
for k,v in pairs(cur_wear_data.other_data) do
if cur_goods_strength_level == 0 then
if equip_cfg.equip_type < EquipModel.EquipType.Necklace then
local evolution_level = equip_cfg.color >= 3 and 1 or 0
if v.type == GoodsModel.GoodsInfoType.EquipEvoLevel then
evolution_level = tonumber(v.info) or 0
--当前装备高级属性必须大于1
if evolution_level > 1 then
can_inherit = true
break
end
elseif v.type == GoodsModel.GoodsInfoType.EquipmentLv then
local strengthen_level = tonumber(v.info)
if strengthen_level > 0 then
can_inherit = true
break
end
end
--首饰只能继承精炼等级
elseif equip_cfg.equip_type >= EquipModel.EquipType.Necklace and equip_cfg.equip_type <= EquipModel.EquipType.RightRing then
if v.type == GoodsModel.GoodsInfoType.EquipmentLv then
local strengthen_level = tonumber(v.info)
if strengthen_level > 0 then
can_inherit = true
break
end
end
end
end
end
end
end
local function cancel( ... )
-- self:Fire(EquipModel.REQUEST_CCMD_EVENT,15205,self.choose_equip_list[1].goods_id
-- ,self.choose_equip_list[1].pos,self.equip_data.goods_vo.goods_id,self.equip_data.goods_vo.pos)
end
local function ok( ... )
-- if equip_cfg.equip_type == EquipModel.EquipType.Guard then--如果是守护
-- if self.cur_choose_suit == 99 or not self.cur_choose_suit or is_quick then--如果是守护要特殊处理帮玩家选择守护
-- local len,list,really_turn = NewMainRoleModel:getInstance():GetRoleReinMaxTurn()
-- for i=1,really_turn do
-- if not self.goods_model.wear_equip_suit_list[i]
-- or not self.goods_model.wear_equip_suit_list[i][EquipModel.EquipType.Guard] then
-- self:Fire(EquipModel.REQUEST_CCMD_EVENT,15201,i,equip_cfg.equip_type,goods_vo.goods_id)
-- break
-- end
-- end
-- else
-- self:Fire(EquipModel.REQUEST_CCMD_EVENT,15201,self.cur_choose_suit, equip_cfg.equip_type, goods_vo.goods_id)
-- end
-- else
self:Fire(EquipModel.REQUEST_CCMD_EVENT,15201,equip_cfg.series,equip_cfg.equip_type,goods_vo.goods_id)
-- end
end
if not cur_wear_data or not can_inherit then
ok()
else
local equip_list_vo = {}
equip_list_vo[1] = cur_wear_data
equip_list_vo[2] = goods_vo
equip_list_vo[3] = ok
self:Fire(EquipModel.OPEN_EQUIP_INHERIT_WEAR_TIP_VIEW,equip_list_vo)
-- Alert.show("穿戴当前装备后,将<color=#fa1022>消耗原装备</color>并<color=#fa1022>自动继承</color>原先装备的<color=#fa1022>精炼等级</color>和<color=#fa1022>升星等级</color>,确认穿戴?",Alert.Type.Two,cancel,nil,"继承","取消")
end
end
-- [1,3]男性可用
-- [2,4]女性可用
-- [1,2]异剑士可用
-- [3,4]战灵师可用
-- [1,2,3,4]全职业可用
function EquipModel:GetCareerDesc( career_data )
local data = {}
for i,v in ipairs(career_data) do
data[v] = true
end
if TableSize(data) == 4 then
return "全职业可用"
elseif data[1] and data[3] then
return "鬼猎/暗鸦"
elseif data[2] and data[4] then
return "夙星/梦枭"
elseif data[1] and data[2] then
return "鬼猎/夙星"
elseif data[3] and data[4] then
return "暗鸦/梦枭"
end
end
--职业是否OK
function EquipModel:SelfCareerIsOk( type_id )
local career = RoleManager.Instance.mainRoleInfo.career
local equip_cfg = self:GetEquipmentCfg(type_id)
--职业不符合
local have_career = false
if equip_cfg then
for i,v in ipairs(equip_cfg.career) do
if v == career then
have_career = true
break
end
end
end
return have_career
end
--装备能否弹提示(对比传的是真实的物品信息)
function EquipModel:EquipCanShowGoodsTip( goods_vo )
local equip_cfg = self:GetEquipmentCfg(goods_vo.type_id)
if not equip_cfg then return false end
local wear_equip_suit_list = self.goods_model.wear_equip_suit_list
local len,list,really_turn = NewMainRoleModel:getInstance():GetRoleReinMaxTurn()
local level = RoleManager.Instance.mainRoleInfo.level
local career = RoleManager.Instance.mainRoleInfo.career
local series = equip_cfg.series
local pos = equip_cfg.equip_type
if goods_vo and goods_vo.goods_num <= 0 then
return false
end
--职业不符合
local have_career = false
for i,v in ipairs(equip_cfg.career) do
if v == career then
have_career = true
break
end
end
if not have_career then
return false,0
end
--转生不够无法装备
if series > EquipModel.getInstance():GetCurrentOpenSuitSeries() then
return false
end
--等级不足
if level < equip_cfg.lv then
return false
end
--守护要特殊处理没有装满守护就要弹出
if equip_cfg.equip_type == EquipModel.EquipType.Guard then
local cur_wear_num = 0
local score_list = {}
for k,v in pairs(wear_equip_suit_list) do
for kk,vv in pairs(v) do
if vv.equip_suit_type == EquipModel.EquipType.Guard then
cur_wear_num = cur_wear_num + 1
score_list[k] = self:MathEquipScore(vv,vv.type_id)
end
end
end
if cur_wear_num < really_turn then
return true,1
end
--如果都装满了 就要比拼评分了
-- local score = self:MathEquipScore(goods_vo,goods_vo.type_id)
-- for k,v in pairs(score_list) do
-- if score > v then
-- return true,1
-- end
-- end
return false--守护就不走下面的逻辑了
end
-- --同位置就比评分
-- local pos = equip_cfg.equip_type
-- if wear_equip_suit_list[series] and wear_equip_suit_list[series][pos] then--同位置比评分
-- local cur_wear_goods_vo = wear_equip_suit_list[series][pos]
-- local score = self:MathEquipScore(goods_vo,goods_vo.type_id)
-- local cur_wear_score = self:MathEquipScore(cur_wear_goods_vo,cur_wear_goods_vo.type_id)
-- if score > cur_wear_score then
-- return true,1
-- -- elseif score == cur_wear_score then
-- -- return false
-- end
-- else--否则就装备
-- return true,1
-- end
--同位置比品质
local pos = equip_cfg.equip_type
if wear_equip_suit_list[series] and wear_equip_suit_list[series][pos] then--同位置比评分
local cur_wear_goods_vo = wear_equip_suit_list[series][pos]
local goods_color = goods_vo.color
local cur_wear_goods_color = cur_wear_goods_vo.color
if goods_color > cur_wear_goods_color then
return true,1
end
else--否则就装备
return true,1
end
return false,2
end
--能否展示tips的按钮
function EquipModel:CanShowTipsBtn( )
if (BagController.Instance.BagView and BagController.Instance.BagView:HasOpen())
or (MarketController.Instance.market_view and MarketController.Instance.market_view:HasOpen())
or CapsuleEggModel:getInstance():IsShowCapsuleEggTakeOutBtn() then
return true
end
return false
end
--检查当前套件所有装备继承红点(因为逻辑很多 所以只在界面里面调用)
function EquipModel:CheckInheritSeriesDot( series )
local bag_goods_list = self.goods_model.bag_goods_list
-- print("huangcong:EquipModel [start:1519] :", bag_goods_list)
-- PrintTable(bag_goods_list)
-- print("huangcong:EquipModel [end]")
local series_list = {}
for k,v in pairs(bag_goods_list) do
local goods_vo = v
if goods_vo and goods_vo.type == GoodsModel.TYPE.EQUIP and goods_vo.goods_num > 0 then
local equip_cfg = self:GetEquipmentCfg(goods_vo.type_id)
if equip_cfg and equip_cfg.series ~= 99 and equip_cfg.series == series and not series_list[equip_cfg.equip_type] then
--当前同等位置穿戴的装备数据
local cur_wear_data = nil
local can_inherit = false
if self.goods_model.wear_equip_suit_list[equip_cfg.series]
and self.goods_model.wear_equip_suit_list[equip_cfg.series][equip_cfg.equip_type]
then
cur_wear_data = self.goods_model.wear_equip_suit_list[equip_cfg.series][equip_cfg.equip_type]
local cur_wear_strength_level = 0--当前装备精炼等级
local cur_wear_evoblution_level = 0--当前升星等级
for k,v in pairs(cur_wear_data.other_data) do
if v.type == GoodsModel.GoodsInfoType.EquipmentLv then
cur_wear_strength_level = tonumber(v.info)
elseif v.type == GoodsModel.GoodsInfoType.EquipEvoLevel then
cur_wear_evoblution_level = tonumber(v.info) or 0
end
end
--品质小于当前的装备并且是紫色装备或以上
--当前穿戴的装备升星和精炼都是0才给红点
local goods_strength_level = 0
local goods_evolution_level = 0
if goods_vo.color > 2 and goods_vo.color < cur_wear_data.color
and cur_wear_evoblution_level < 3 and cur_wear_strength_level == 0 then
for k,v in pairs(goods_vo.other_data) do
if v.type == GoodsModel.GoodsInfoType.EquipmentLv then
goods_strength_level = tonumber(v.info)
elseif v.type == GoodsModel.GoodsInfoType.EquipEvoLevel then
goods_evolution_level = tonumber(v.info) or 0
end
end
--非首饰可以继承升星
if equip_cfg.equip_type < EquipModel.EquipType.Necklace then
--当前装备高级属性必须大于1
if goods_evolution_level > 1 then
series_list[equip_cfg.equip_type] = true
end
--当前装备精炼等级必须大于1
if goods_strength_level > 0 then
series_list[equip_cfg.equip_type] = true
end
--首饰只能继承精炼等级
elseif equip_cfg.equip_type >= EquipModel.EquipType.Necklace and equip_cfg.equip_type <= EquipModel.EquipType.RightRing then
if goods_strength_level > 0 then
series_list[equip_cfg.equip_type] = true
end
end
end
end
end
end
end
-- print("huangcong:EquipModel [start:1556] :", series)
-- PrintTable(series_list)
-- print("huangcong:EquipModel [end]")
return series_list
end
--检查守护升品的红点
function EquipModel:CheckGuardRedDot( )
--首饰类是否能升品
if not self.can_up_quality_info then
self.can_up_quality_info = {}
end
local wear_equip_suit_list = self.goods_model.wear_equip_suit_list
local equip_star_sum = 0
if wear_equip_suit_list then
--能否精炼列表
for k,v in pairs(wear_equip_suit_list) do
for kk,vv in pairs(v) do
--判断首饰类才能升品
if vv.equip_suit_type == EquipModel.EquipType.Guard then
local compose_cfg = ComposeModel:getInstance():GetEvolutionComposeCfg(vv.type_id)
local limit_level = compose_cfg and compose_cfg.open_lv or 0
local cost_list = RoleManager.Instance.mainRoleInfo.level >= limit_level and compose_cfg and compose_cfg.cost_goods or {}
if cost_list and #cost_list > 0 then
local can_up_quality = true
for kkk,vvv in ipairs(cost_list) do
local goods_num = self.goods_model:GetTypeGoodsNum(vvv[2]) or 0
if goods_num < vvv[3] then
can_up_quality = false
end
end
if not self.can_up_quality_info[k] then
self.can_up_quality_info[k] = {}
end
self.can_up_quality_info[k][vv.equip_suit_type] = {can_up = can_up_quality,type_id = vv.type_id}
end
end
end
end
end
local have_red = false
for k,v in pairs(self.can_up_quality_info) do
for kk,vv in pairs(v) do
if kk == EquipModel.EquipType.Guard and vv and vv.can_up then
have_red = vv.can_up
break
end
end
end
if not have_red and self.necklace_up_info then
for k,v in pairs(self.necklace_up_info) do
local equip_cfg = self:GetEquipmentCfg(k)
if equip_cfg and equip_cfg.equip_type == EquipModel.EquipType.Guard then
if v then
return true
end
end
end
end
return have_red
end
--检查饰品升品的红点
function EquipModel:CheckOrnamentRedDot( )
local have_red = false
for k,v in pairs(self.can_up_quality_info) do
for kk,vv in pairs(v) do
if kk ~= EquipModel.EquipType.Guard and vv.can_up then
have_red = vv.can_up
break
end
end
end
if not have_red then
for k,v in pairs(self.necklace_up_info) do
local equip_cfg = self:GetEquipmentCfg(k)
if equip_cfg and equip_cfg.equip_type ~= EquipModel.EquipType.Guard then
if v then
return true
end
end
end
end
-- print("huangcong:EquipModel [start:2249] :", self.necklace_up_info)
-- PrintTable(self.necklace_up_info)
-- print("huangcong:EquipModel [end]")
return have_red
end
--获得刻印配置
function EquipModel:GetDraconicCfg( equip_type,type_id )
if TableSize(self.equipment_draconic_cfg) == 0 then--装备刻印属性(暂不知道什么时候需要)这里初始化一次即可
local equipment_draconic_cfg = DeepCopy(Config.Equipmentcarve)
for k,v in pairs(equipment_draconic_cfg) do
v.attr = stringtotable(v.attr)
if not self.equipment_draconic_cfg[v.equip_type] then
self.equipment_draconic_cfg[v.equip_type] = {}
end
self.equipment_draconic_cfg[v.equip_type][v.goods_id] = v
end
end
if equip_type and not type_id then
return self.equipment_draconic_cfg[equip_type]
elseif equip_type and type_id then
return self.equipment_draconic_cfg[equip_type][type_id]
end
end
--获得宝石配置通过type_id
function EquipModel:GetGemsCfgByTypeId( type_id )
return self.equipment_gems_cfg[type_id]
end
--获得宝石配置通过series,gems_type
function EquipModel:GetGemsCfgByGemsType( gems_type )
return self.equipment_gems_series_cfg[gems_type]
end
--获得宝石套件配置
function EquipModel:GetGemsSuitCfg( series,lv )
if TableSize(self.equipment_gems_suit_cfg) == 0 then--这样写收益最大因为开始就要判断红点而且判断的次数会比较频繁
local equipment_gems_suit_cfg = DeepCopy(Config.Equipmentgemstotal)
for k,v in pairs(equipment_gems_suit_cfg) do
v.attr = stringtotable(v.attr)
v.total_attr = stringtotable(v.total_attr)
if not self.equipment_gems_suit_cfg[v.series] then
self.equipment_gems_suit_cfg[v.series] = {}
end
self.equipment_gems_suit_cfg[v.series][v.lv] = v
end
end
if series and lv and self.equipment_gems_suit_cfg[series] then
return self.equipment_gems_suit_cfg[series][lv]
elseif series and self.equipment_gems_suit_cfg[series] then
return self.equipment_gems_suit_cfg[series]
end
end
--宝石镶嵌信息
function EquipModel:SetGemstoneInfo( series_list )
self.gemstone_info_list = {}
for i,v in ipairs(series_list) do
if not self.gemstone_info_list[v.series] then
self.gemstone_info_list[v.series] = {}
end
local gems_list = {}
for ii,vv in ipairs(v.gems) do
local cfg = self:GetGemsCfgByTypeId(vv.goods_id)
if cfg then
gems_list[cfg.type] = cfg
end
end
self.gemstone_info_list[v.series][v.pos] = gems_list
end
end
--宝石镶嵌信息
function EquipModel:SetGemstoneOneInfo( scmd )
if not self.gemstone_info_list[scmd.series] then
self.gemstone_info_list[scmd.series] = {}
end
local gems_list = {}
for ii,vv in ipairs(scmd.gems) do
local cfg = self:GetGemsCfgByTypeId(vv.goods_id)
if cfg then
gems_list[cfg.type] = cfg
end
end
self.gemstone_info_list[scmd.series][scmd.pos] = gems_list
end
--获得宝石套件属性信息
function EquipModel:GetGemstoneSeriesInfo( series,pos )
if series and not pos then
return self.gemstone_info_list[series]
elseif series and pos and self.gemstone_info_list[series] then
return self.gemstone_info_list[series][pos]
elseif not series and not pos then
return self.gemstone_info_list
end
end
--计算全身装备镶嵌宝石总战力
function EquipModel:MathGemstonePower( )
local sum_power = 0
for k,v in pairs(self.gemstone_info_list) do
for kk,vv in pairs(v) do
for kkk,vvv in pairs(vv) do
if vvv.attr and vvv.attr[1] then--属性
sum_power = sum_power + GetFighting(vvv.attr,true)
end
end
end
end
return sum_power
end
--计算当前代装备镶嵌宝石总战力
function EquipModel:MathSeriesGemstonePower( series )
local sum_power = 0
local list = self.gemstone_info_list[series]
if list and TableSize(list) > 0 then
for kk,vv in pairs(list) do
for kkk,vvv in pairs(vv) do
if vvv.attr and vvv.attr[1] then--属性
sum_power = sum_power + GetFighting(vvv.attr,true)
end
end
end
end
return sum_power
end
--得到当前选择套数装备镶嵌宝石总等级
function EquipModel:GetGemstoneLvBySeries( series )
local sum_lv = 0
if self.gemstone_info_list[series] then
for k,v in pairs(self.gemstone_info_list[series]) do
for kk,vv in pairs(v) do
sum_lv = sum_lv + vv.lv
end
end
end
return sum_lv
end
--得到宝石套装信息
function EquipModel:GetGemstoneSuitInfo( series )
local gemstone_info = self:GetGemstoneSeriesInfo(series)
local list = {}
for i=1,11 do
if i ~= EquipModel.EquipType.Guard then
if not gemstone_info or not gemstone_info[i] then
list[i] = 0
else
local lv = 0
if gemstone_info[i] then
for kk,vv in pairs(gemstone_info[i]) do
if Config.Equipmentgems[vv.goods_id] then
lv = lv + Config.Equipmentgems[vv.goods_id].lv
end
end
end
list[i] = lv
end
end
end
return list
end
--升星装备选择列表
function EquipModel:SetEvolutionEquipChooseList( choose_list )
self.evolution_choose_equip_list = choose_list
end
function EquipModel:GetEvolutionEquipChooseList( )
return self.evolution_choose_equip_list
end
--升星商城购买列表
function EquipModel:SetEvolutionMarketBuy( market_buy )
self.equip_evolution_market_buy = market_buy
end
function EquipModel:GetEvolutionMarketBuy( )
return self.equip_evolution_market_buy
end
--获得红装消耗配置
function EquipModel:GetRedEquipCfg( series,pos,lv )
if not series then
print("huangcong:EquipModel [start:2383] 套数不存在:")
return
end
if TableSize(self.red_equip_cfg_list) == 0 then--这里初始化一次
local red_equip_cfg_list = DeepCopy(Config.Equipmentempower)
for k,v in pairs(red_equip_cfg_list) do--红装
v.attr = stringtotable(v.attr)
v.cost = stringtotable(v.cost)
v.condition = stringtotable(v.condition)
if not self.red_equip_cfg_list[v.series] then
self.red_equip_cfg_list[v.series] = {}
end
if not self.red_equip_cfg_list[v.series][v.pos] then
self.red_equip_cfg_list[v.series][v.pos] = {}
end
self.red_equip_cfg_list[v.series][v.pos][v.lv] = v
end
end
if self.red_equip_cfg_list[series] and self.red_equip_cfg_list[series][pos] then
if pos and not lv then
return self.red_equip_cfg_list[series][pos]
elseif pos and lv then
return self.red_equip_cfg_list[series][pos][lv]
end
end
end
--获得刻印总属性展览
function EquipModel:GetDraconicAttrData( )
local info = self.equip_pos_info
local attr_cfg = {}
for k,v in pairs(info) do
if v.carve_id and v.carve_id ~= 0 then
local cfg = self:GetDraconicCfg(k,v.carve_id)
if cfg then
attr_cfg[#attr_cfg + 1] = cfg.attr
end
end
end
local attr_list = {}
for k,v in pairs(attr_cfg) do
for kk,vv in pairs(v) do
if not attr_list[vv[1]] then
attr_list[vv[1]] = {vv[1],vv[2]}
else
attr_list[vv[1]] = {vv[1],vv[2] + attr_list[vv[1]][2]}
end
end
end
-- print("huangcong:EquipModel [start:2204] :", attr_list)
-- PrintTable(attr_list)
-- print("huangcong:EquipModel [end]")
return attr_list
end
--获取装备红点
function EquipModel:GetEquipRedDotByType(tab_type)
if not tab_type then return false end
return self.red_dot_info[tab_type]
end
--获取跟随守护的id
function EquipModel:GetFollowGuardId( )
local type_id = RoleManager.Instance.mainRoleInfo.evil_type_id
local evil_id = 0
if type_id ~= 0 then
local basic = self.goods_model:GetGoodsBasicByTypeId(type_id)
evil_id = basic.model_id
end
return evil_id
end
--展示装备获取途径tip
function EquipModel:ShowEquipGetWayTip( transform,index,equip_suit_id )
if not transform then return end
local ui_tf = panelMgr:GetParent("UI").transform
local pos = ui_tf:InverseTransformPoint(transform.position)
local w = ScreenWidth
local h = ScreenHeight
pos.x = w / 2 + pos.x
pos.y = h / 2 + pos.y
local key = index .. "@" .. equip_suit_id .. "@" ..index
local cfg = Config.Equipmentempty[key]
if cfg then
BagModel:getInstance():Fire(BagModel.EQUIP_ITEM_GET_WAY_TIPS, cfg,pos.x,pos.y)
else
print(">>>>> unfinfd config Equipmentempty ", index, equip_suit_id )
end
end
--装备是否可穿
function EquipModel:IsCanWear(type_id)
local career = RoleManager.Instance.mainRoleInfo.career
local equip_cfg = self:GetEquipmentCfg(type_id)
local have_career = false
for i,v in ipairs(equip_cfg.career) do
if v == career then
have_career = true
break
end
end
return have_career
end
--装备是否可穿
function EquipModel:GetEquipPos(type_id)
local equip_cfg = self:GetEquipmentCfg(type_id)
return equip_cfg.equip_type
end
--当前已经开启的最大套装数
function EquipModel:GetCurrentOpenSuitSeries()
local my_turn = RoleManager:getInstance():GetMainRoleVo().turn
self.cur_max_series = self:GetEquipTurnToSeries(my_turn)
return self.cur_max_series
end
--通过代数获取装备转生术
function EquipModel:GetEquipSeriesToTurn(series)
local turn = 1
if not self.series_to_turn_cfg[series] then
if series == 1 then
self.series_to_turn_cfg[series] = 0
else
local cfg = Config.Transfer
for k,v in pairs(cfg) do
if v.equipment_series == series then
self.series_to_turn_cfg[series] = v.id
break
end
end
end
end
turn = self.series_to_turn_cfg[series]
return turn
end
--通过转生数获取装备代数
function EquipModel:GetEquipTurnToSeries(turn)
local series = 1
if not self.turn_to_series_cfg[turn] then
if turn == 0 then
self.turn_to_series_cfg[turn] = 1
else
local cfg = Config.Transfer
for k,v in pairs(cfg) do
if v.id == turn and v.stage == 5 then
self.turn_to_series_cfg[turn] = v.equipment_series
break
end
end
end
end
series = self.turn_to_series_cfg[turn]
return series
end
--当前可以激活的最大套装数
function EquipModel:GetCanActiveMaxSeries()
local max = 1
local level = RoleManager.Instance.mainRoleInfo.level
local config = Config.Equipmentseriesopen
for i,v in ipairs(config) do
if level >= v.open_lv and (v.task_id == 0 or TaskModel:getInstance():IsTaskFinished(v.task_id)) then
max = v.series
end
end
return max
end
--对应套是否可以开启
function EquipModel:CehckTargetSeriesCanOpen(series)
local str = ""
local my_turn = RoleManager.Instance.mainRoleInfo.turn
local need_turn = self:GetEquipSeriesToTurn(series)
if my_turn < need_turn then
local cfg = Config.Transfercareer
local career = RoleManager:getInstance():GetMainRoleVo().career
local career_str = " "
for k,v in pairs(cfg) do
if v.career == career and v.transfer_id == need_turn then
career_str = " " .. Trim(v.name) .. " "
break
end
end
str = string.format("完成 %s转职业%s可激活", WordManager:getHanZiNumber(need_turn), career_str)
end
return str
end
--获取最大套装数
function EquipModel:GetMaxSuitSeries()
local config = Config.Equipmentseriesopen
return config and #config or 0
end
--是否能够被吞噬
function EquipModel:IsCanSwallow(goods_basic)
local v = goods_basic
return v.type == GoodsModel.TYPE.EQUIP and v.subtype ~= 8 and v.subtype ~= 9 and v.subtype ~= 10 and v.subtype ~= 11
end
--是否能够被吞噬
function EquipModel:GuardIsCanSetFollow(type_id, goods_id)
local b = false
local equip_cfg = self:GetEquipmentCfg(type_id)
if equip_cfg and equip_cfg.equip_type == EquipModel.EquipType.Guard then
if type_id ~= RoleManager.Instance.mainRoleInfo.evil_type_id then
b = true
end
end
return b
end
--设置装备宝石激活的等级列表
function EquipModel:SetEquipGemActiveList( scmd )
self.gems_lv_list = {}
if scmd.gems_lv_list and #scmd.gems_lv_list > 0 then
for i,v in pairs(scmd.gems_lv_list) do
self.gems_lv_list[v.series] = v.gems_lv
end
end
self:IsNeedRed(EquipModel.MainTab.Gemstone,nil,nil,true)
end
--得到宝石激活等级
function EquipModel:GetEquipGemActiveLvBySeries( series )
return self.gems_lv_list[series] or 0
end
function EquipModel:CheckGemstoneSeriesRedDot( )
local show = false
self.gems_suit_red_list = {}
local len = NewMainRoleModel:getInstance():GetRoleReinMaxTurn()
local active_gems_num = 0
local sum_gems_num = 0
local next_level = 0
for i=1,len do
next_level = 0
active_gems_num = self:GetEquipGemActiveLvBySeries(i)
sum_gems_num = self:GetGemstoneLvBySeries(i)
local strengthtotal_cfg = self:GetGemsSuitCfg(i)
local cur_gems_attr = nil
for kk,vv in pairsByKeys(strengthtotal_cfg) do
if vv.lv > active_gems_num then
next_level = vv.lv
break
else
cur_gems_attr = vv.attr
end
end
self.gems_suit_red_list[i] = next_level ~= 0 and next_level <= sum_gems_num
if next_level ~= 0 and next_level <= sum_gems_num then
show = true
end
if not self.gem_next_level_list[i] then
self.gem_next_level_list[i] = {}
end
--判断星级套装是否要玩家主动去激活
for kk,vv in pairsByKeys(strengthtotal_cfg) do
if vv.lv <= sum_gems_num and not self.gem_next_level_list[i][vv.lv] then
self.gem_next_level_list[i][vv.lv] = true
if self.gems_can_tip then
local tip_data = {}
tip_data.id = EquipModel.MainTab.Gemstone
tip_data.star = vv.lv
tip_data.attr = vv.attr
tip_data.equip_suit_id = i
print("huangcong:EquipModel [start:2736] :", tip_data)
PrintTable(tip_data)
print("huangcong:EquipModel [end]")
self:Fire(EquipModel.OPEN_EQUIP_BASE_TIPS_VIEW,tip_data)
break
end
end
end
end
return show
end
--获得宝石镶嵌配置信息EquipToolTips宝石专用
function EquipModel:GetGemstoneEquipToolTipsInfo( gems_info )
local gems_list = {}
for ii,vv in ipairs(gems_info) do
local cfg = self:GetGemsCfgByTypeId(vv[2])
if cfg then
gems_list[cfg.type] = cfg
end
end
return gems_list
end
--获得当前装备最大套数
function EquipModel:GetCurHaveEquipMaxSuit( )
return self.goods_model.have_equip_max_suit or 1
end
--背包是否有宝石镶嵌
function EquipModel:BagHaveGemstoneSet( gems_type )
if not gems_type then return false end
if self.equipment_gems_series_cfg[gems_type] then
for i,v in pairs(self.equipment_gems_series_cfg[gems_type]) do
local num = self.goods_model:GetTypeGoodsNum(v.goods_id)
if num > 0 then
return true
end
end
--如果背包没有宝石则展示对应类型的1级宝石
for i,v in pairsByKeys(self.equipment_gems_series_cfg[gems_type]) do
UIToolTipMgr:getInstance():AppendGoodsTips(v.goods_id, nil, nil,nil,nil,nil,nil,true)
return false
end
end
return false
end
--设置红装(升品)信息
function EquipModel:SetRedEquipInfo( series_list )
self.redEquip_server_info = {}
for i,v in pairs(series_list) do
if not self.redEquip_server_info[v.series] then
self.redEquip_server_info[v.series] = {}
end
self.redEquip_server_info[v.series][v.pos] = v
end
-- print("huangcong:EquipModel [start:2640] :", self.redEquip_server_info)
-- PrintTable(self.redEquip_server_info)
-- print("huangcong:EquipModel [end]")
end
--获得红装(升品)信息
function EquipModel:GetRedEquipInfo( series,pos )
if series and pos and self.redEquip_server_info[series] then
return self.redEquip_server_info[series][pos]
elseif series and not pos and self.redEquip_server_info[series] then
return self.redEquip_server_info[series]
else
return self.redEquip_server_info
end
end
--检查升品所有套装等级是否满足条件
function EquipModel:RedEquipCheckAllSeriesLv( series,lv )
if not series or not lv then return false end
for i=1,series do
if self.redEquip_server_info[i] and TableSize(self.redEquip_server_info[i]) >= 7 then
for k,v in ipairs(self.redEquip_server_info[i]) do
if v.lv < lv and v.pos <= 7 then
return false
end
end
else
return false
end
end
return true
end
--获得红装商城同一个部位最低升品装备数量
function EquipModel:GetRedEquipShopCostlimitNum( equip_pos )
local list = self.goods_model.wear_equip_suit_list
local limit_cost = nil
local power_lv = 0--当前升品等级
local equip_info = nil
local strength_cfg = nil
local cost_list = nil
for equip_suit_id,v in pairs(list) do
local equip_info = v[equip_pos]
if equip_info and equip_info.color >= 4 then -- 橙装以上才能升品哟
local server_info = self:GetRedEquipInfo(equip_suit_id,equip_pos)
power_lv = 0--当前升品等级
if server_info then power_lv = server_info and server_info.lv or 0 end
strength_cfg = self:GetRedEquipCfg(equip_suit_id,equip_pos,power_lv + 1)--基础属性
if strength_cfg then
cost_list = strength_cfg.cost
if not limit_cost then
limit_cost = cost_list[1][3]
else
limit_cost = limit_cost > cost_list[1][3] and cost_list[1][3] or limit_cost
end
end
end
end
if not limit_cost then--没有这件装备或者没有橙装
local len,list = EquipModel.getInstance():GetCurrentOpenSuitSeries()
for i=1,len do
strength_cfg = self:GetRedEquipCfg(i,equip_pos,1)--基础属性
if strength_cfg then
cost_list = strength_cfg.cost
if not limit_cost then
limit_cost = cost_list[1][3]
else
limit_cost = limit_cost > cost_list[1][3] and cost_list[1][3] or limit_cost
end
end
end
end
return limit_cost
end
--获得商城道具ID装备位置
function EquipModel:GetShopGoodsIdEquipPos( goods_id )
if TableSize(self.red_equip_cfg_list) == 0 then--这里初始化一次
local red_equip_cfg_list = DeepCopy(Config.Equipmentempower)
for k,v in pairs(red_equip_cfg_list) do--红装
v.attr = stringtotable(v.attr)
v.cost = stringtotable(v.cost)
v.condition = stringtotable(v.condition)
if not self.red_equip_cfg_list[v.series] then
self.red_equip_cfg_list[v.series] = {}
end
if not self.red_equip_cfg_list[v.series][v.pos] then
self.red_equip_cfg_list[v.series][v.pos] = {}
end
self.red_equip_cfg_list[v.series][v.pos][v.lv] = v
end
end
for k,v in pairs(self.red_equip_cfg_list) do
for kk,vv in pairs(v) do
for kkk,vvv in pairs(vv) do
if vvv.cost and vvv.cost[1] and vvv.cost[1][2] == goods_id then
return vvv.pos
end
end
end
end
end
function EquipModel:GetEquipType( type_id )
local cfg = Config.Equipment[type_id]
if cfg then
return cfg.equip_type
end
end
--设置装备升星自动购买cookie
function EquipModel:SetEquipEvolutionAotuBuyCookie( bool )
CookieWrapper.Instance:SaveCookie(CookieLevelType.Account,CookieTimeType.TYPE_ALWAYS,CookieKey.EQUIP_AOTU_BUY_SHOP,bool)
CookieWrapper.Instance:WriteAll()
end
--获得装备升星自动购买cookie
function EquipModel:GetEquipEvolutionAotuBuyCookie( )
local bool = CookieWrapper.Instance:GetCookie(CookieLevelType.Account,CookieKey.EQUIP_AOTU_BUY_SHOP) or false
return bool
end
--计算升星属性战力
function EquipModel:MathGreatAttrFighting( attr_list,bool )
local new_list = {}
local fight_num = 0
for k,v in ipairs(attr_list) do
local data = {v[1],v[2]}
new_list[#new_list + 1] = data
end
-- print("huangcong:EquipModel [start:2977] :", attr_list)
-- PrintTable(attr_list)
-- print("huangcong:EquipModel [end]")
new_list = self:ChangeEquipSAttr(new_list)
-- print("huangcong:EquipModel [start:2981] :转化后的终极属性", new_list)
-- PrintTable(new_list)
new_list = ComposeAttr(new_list)
fight_num = GetFighting(new_list,bool or false)
return fight_num or 0
end
--饰品: 戒指 项链 耳饰 手套
--防具:头部 身体 披风 裤子 脚
--武器:武器
--[转换装备属性]
-- EquipModel.DefEquipType
-- EquipModel.NecklaceEquipType
function EquipModel:ChangeEquipSAttr( attr_list )--221
local wear_equip_suit_list = self.goods_model.wear_equip_suit_list or {}
local weapon_atk = 0--武器攻击
local def_hp = 0--防具生命
local necklace_atk = 0--饰品攻击
local necklace_def = 0--饰品防御
local weapon_attr_list = {}--武器属性列表
local def_attr_list = {}--防具属性列表
local necklace_attr_list = {}--饰品属性列表
for series,equip_series_list in pairs(wear_equip_suit_list) do
for equip_type,goods_vo in pairs(equip_series_list) do
local equip_cfg = self:GetEquipmentCfg(goods_vo.type_id)
if equip_cfg and equip_cfg.base_attr then
if equip_cfg.equip_type == 1 then--武器
for k,v in ipairs(equip_cfg.base_attr) do
if not weapon_attr_list[v[1]] then
weapon_attr_list[v[1]] = 0
end
weapon_attr_list[v[1]] = weapon_attr_list[v[1]] + v[2]
end
elseif EquipModel.DefEquipType[equip_cfg.equip_type] then--防具
for k,v in ipairs(equip_cfg.base_attr) do
if not def_attr_list[v[1]] then
def_attr_list[v[1]] = 0
end
def_attr_list[v[1]] = def_attr_list[v[1]] + v[2]
end
elseif EquipModel.NecklaceEquipType[equip_cfg.equip_type] then--饰品
for k,v in ipairs(equip_cfg.base_attr) do
if not necklace_attr_list[v[1]] then
necklace_attr_list[v[1]] = 0
end
necklace_attr_list[v[1]] = necklace_attr_list[v[1]] + v[2]
end
end
end
end
end
local new_attr_list = {}
local attr_id = nil
for k,v in ipairs(attr_list) do
local attr_id = EquipModel.STypeAttr[v[1]]
if attr_id then--如果是局部百分比属性
if v[1] == 221 and weapon_attr_list[attr_id] then--武器攻击
new_attr_list[#new_attr_list + 1] = {attr_id,round(v[2]/10000*weapon_attr_list[attr_id])}
elseif (v[1] == 223 or v[1] == 224) and def_attr_list[attr_id] then--防具生命/防具防御
new_attr_list[#new_attr_list + 1] = {attr_id,round(v[2]/10000*def_attr_list[attr_id])}
elseif v[1] == 225 and necklace_attr_list[attr_id] then--饰品攻击
new_attr_list[#new_attr_list + 1] = {attr_id,round(v[2]/10000*necklace_attr_list[attr_id])}
end
else
new_attr_list[#new_attr_list + 1] = v
end
end
-- print("huangcong:EquipModel [start:3044] :", def_attr_list)
-- PrintTable(def_attr_list)
-- print("huangcong:EquipModel [end]")
-- print("huangcong:EquipModel [start:3045] :", attr_list)
-- PrintTable(attr_list)
-- print("huangcong:EquipModel [end]")
-- print("huangcong:EquipModel [start:3047] :", new_attr_list)
-- PrintTable(new_attr_list)
-- print("huangcong:EquipModel [end]")
return new_attr_list
end
--装备更新新套装属性激活
function EquipModel:UpdateNewSuitAttrActive( is_init )
self.suit_attr_active_list = self.suit_attr_active_list or {}
local red_bool = false
local wear_equip_suit_list = self.goods_model.wear_equip_suit_list or {}
for series,v in pairs(wear_equip_suit_list) do
if not self.suit_attr_active_list[series] then
self.suit_attr_active_list[series] = {}
end
local cur_suit_id_num1,suit_equip_pos_list1 = self.goods_model:GetEquipSuitNum(series,1)--装备套装
local suit_cfg_list1 = self:GetEquipmentSuitCfg(series,1)
if suit_cfg_list1 then
local active_num_list1 = {}--新激活数量
for k,vv in pairs(suit_cfg_list1) do
if vv.suit_num <= cur_suit_id_num1 then
active_num_list1[#active_num_list1 + 1] = {vv.suit_num,false,true}--先默认未激活吧第三个参数是否是已经查看
end
end
if is_init then--初始化或者没有数据的时候
self.suit_attr_active_list[series][1] = active_num_list1
elseif not self.suit_attr_active_list[series][1] then--后面新增了
for k,v in pairs(active_num_list1) do
v = {v[1],true,false}
end
self.suit_attr_active_list[series][1] = active_num_list1
elseif #self.suit_attr_active_list[series][1] < #active_num_list1 then --开始对比
local new_list = {}
for i=1,#active_num_list1 do
if i <= #self.suit_attr_active_list[series][1] then
new_list[#new_list + 1] = self.suit_attr_active_list[series][1][i]
else
new_list[#new_list + 1] = {active_num_list1[i][1],true,false}
end
end
self.suit_attr_active_list[series][1] = new_list
end
end
local cur_suit_id_num2,suit_equip_pos_list2 = self.goods_model:GetEquipSuitNum(series,2)--饰品套装
local suit_cfg_list2 = self:GetEquipmentSuitCfg(series,2)
if suit_cfg_list2 then
local active_num_list2 = {}--新激活数量
for k,vv in pairs(suit_cfg_list2) do
if vv.suit_num <= cur_suit_id_num2 then
active_num_list2[#active_num_list2 + 1] = {vv.suit_num,false,true}--先默认未激活吧第三个参数是否是已经查看
end
end
if is_init then
self.suit_attr_active_list[series][2] = active_num_list2
elseif not self.suit_attr_active_list[series][2] then--初始化或者没有数据的时候
for k,v in pairs(active_num_list2) do
v = {v[1],true,false}
end
self.suit_attr_active_list[series][2] = active_num_list2
elseif #self.suit_attr_active_list[series][2] < #active_num_list2 then --开始对比
local new_list = {}
for i=1,#active_num_list2 do
if i <= #self.suit_attr_active_list[series][2] then
new_list[#new_list + 1] = self.suit_attr_active_list[series][2][i]
else
new_list[#new_list + 1] = {active_num_list2[i][1],true,false}
end
end
self.suit_attr_active_list[series][2] = new_list
end
end
end
self.suit_attr_active_red_series_list = {}
-- print("huangcong:EquipModel [start:3130] :", self.suit_attr_active_list)
-- PrintTable(self.suit_attr_active_list)
-- print("huangcong:EquipModel [end]")
for series,v in pairs(self.suit_attr_active_list) do
for equip_attr_type,vv in pairs(v) do
for kkk,vvv in pairs(vv) do
if vvv[2] then
self.suit_attr_active_red_series_list[series] = true
red_bool = true
end
end
end
end
self.suit_attr_red_bool = red_bool
GlobalEventSystem:Fire(EventName.UPDATE_BAG_RED)
end
--获得当前属性是否是最新属性是否查看过
function EquipModel:GetNewSuitAttrActiveInfo( series,equip_attr_type,suit_num )
if self.suit_attr_active_list[series] and self.suit_attr_active_list[series][equip_attr_type] then
for k,v in pairs(self.suit_attr_active_list[series][equip_attr_type]) do
if v[1] == suit_num then
return v[3]
end
end
end
return true
end
--获得套装属性红点信息
function EquipModel:GetSuitAttrRedBool( )
return self.suit_attr_red_bool
end