c1_lua/lua/app/userdata/equip/equip_data_other.lua
2025-10-30 20:12:43 +08:00

174 lines
4.1 KiB
Lua

local EquipDataOther = class("EquipDataOther", BaseData)
local EquipEntityOther = require "app/userdata/equip/equip_entity_other"
function EquipDataOther:ctor()
end
function EquipDataOther:clear()
self.allEquips = {}
end
function EquipDataOther:init(data)
data = data or GConst.EMPTY_TABLE
if EDITOR_MODE then
Logger.logHighlight("装备数据")
Logger.printTable(data)
end
self.allEquips = {}
self.equipLvs = {}
self.equipRefineLvs = {}
for slotId = 1, 5 do
for part = 1, 6 do
if data[slotId] and data[slotId][part] then
local uid = slotId * 100 + part
local equip = EquipEntityOther:create(data[slotId][part])
self.allEquips[uid] = equip
self.equipLvs[uid] = data[slotId][part].level
self.equipRefineLvs[uid] = data[slotId][part].refine
end
end
end
end
--@region 属性
function EquipDataOther:getResonateLevelValue(type, value, value2)
local list = DataManager.EquipData:getResonateList(type)
local lv = 0
local nextLv = 0
local attrs = {}
local attrNexts = {}
for i,v in ipairs(list) do
if type == 1 or type == 3 then
if v.parameter[1] <= value then
lv = i
for _, vv in ipairs(v.attr) do
attrs[vv.type] = (attrs[vv.type] or 0) + vv.num
end
else
nextLv = v.parameter
for _, vv in ipairs(v.attr) do
attrNexts[vv.type] = (attrNexts[vv.type] or 0) + vv.num
end
break
end
elseif type == 2 then
local isTrue = false
if v.parameter[1] < value then
isTrue = true
elseif v.parameter[1] == value and v.parameter[2] <= value2 then
isTrue = true
end
if isTrue then
lv = i
for _, vv in ipairs(v.attr) do
attrs[vv.type] = (attrs[vv.type] or 0) + vv.num
end
else
nextLv = v.parameter
for _, vv in ipairs(v.attr) do
attrNexts[vv.type] = (attrNexts[vv.type] or 0) + vv.num
end
break
end
end
end
return lv, nextLv, attrs, attrNexts, table.nums(list)
end
function EquipDataOther:getResonateLevel(type, slotId)
if type == 1 then
local minLv = 999
for i = 1, 6 do
local uid = slotId * 100 + i
local level = self.equipLvs[uid] or 0
if level < minLv then
minLv = level
end
end
return self:getResonateLevelValue(type, minLv)
elseif type == 2 then
local qlt = 99
local star = 99
for i = 1, 6 do
local uid = slotId * 100 + i
local equip = self.allEquips[uid]
if equip == nil then
qlt = 0
star = 0
break
end
local q = equip:getQlt()
local s = equip:getStar()
if qlt > q then
qlt = q
star = s
elseif qlt == q then
if star > s then
qlt = q
star = s
end
end
end
return self:getResonateLevelValue(type, qlt, star)
elseif type == 3 then
local minRefine = 999
for i = 1, 6 do
local uid = slotId * 100 + i
local refine = self.equipRefineLvs[uid] or 0
if refine < minRefine then
minRefine = refine
end
end
return self:getResonateLevelValue(type, minRefine)
end
end
function EquipDataOther:getEquipAttrBySlotId(slotId)
local allAttr = {}
for part = 1, 6 do
local uid = slotId * 100 + part
local equip = self.allEquips[uid]
if equip then
local attr = equip:getAllAttr()
for k, v in pairs(attr) do
allAttr[k] = (allAttr[k] or 0) + v
end
-- 升级属性
local level = self.equipLvs[uid] or 0
local baseType = equip:getBaseAttr().type
allAttr[baseType] = (attr[baseType] or 0) + DataManager.EquipData:getBaseAttrLvAdd(baseType, level)
-- 精炼属性
local equipAttrs = equip:getExtraMap()
local refine = self.equipRefineLvs[uid] or 0
if refine > 0 then
for _, extraAttr in pairs(equipAttrs) do
local attrName = GFunc.getAttrNameById(extraAttr.id)
local nowAttr = DataManager.EquipData:getRefineAttrAdd(refine, attrName)
allAttr[attrName] = (allAttr[attrName] or 0) + nowAttr.num
end
end
end
end
-- 共鸣
for i = 1, 3 do
local lv = self:getResonateLevel(i, slotId)
local list = DataManager.EquipData:getResonateList(i)
for ii, vv in ipairs(list) do
if ii <= lv then
for _, vvv in ipairs(vv.attr or {}) do
allAttr[vvv.type] = (allAttr[vvv.type] or 0) + vvv.num
end
else
break
end
end
end
return allAttr
end
--@endregion
return EquipDataOther