c1_lua/lua/app/userdata/bag/equip_data.lua
2023-04-07 15:22:56 +08:00

229 lines
5.2 KiB
Lua

local EquipEntity = require "app/userdata/bag/equip_entity"
local EquipData = class("EquipData", BaseData)
function EquipData:setDirty()
self.data.isDirty = not self.data.isDirty
end
function EquipData:setAttrDirty()
self.isAttrDirty = true
end
function EquipData:ctor()
self.equips = {}
self.data.isDirty = false
self.isAttrDirty = true
end
function EquipData:init(data)
if not data then
return
end
self.equips = {}
for _, equip in pairs(data) do
self:_add(equip)
end
self.allWearAttr = {}
self.allOwnAttr = {}
end
function EquipData:_add(equip)
self.equips[equip.id] = EquipEntity:create(equip)
end
function EquipData:clear()
self.equips = {}
end
function EquipData:addEquipCountById(id, count, equipGetType)
if EDITOR_MODE then
if not equipGetType then
local params = {
content = "EquipData addEquipCountById has no equipGetType",
boxType = GConst.MESSAGE_BOX_TYPE.MB_OK,
okText = I18N:getGlobalText(I18N.GlobalConst.BTN_TEXT_OK),
}
GFunc.showMessageBox(params)
Logger.log("EquipData addEquipCountById has no equipGetType")
end
end
local data = {id = id, count = count}
local equipEntity = self:getEquipByCfgId(id)
equipEntity:addCount(count)
BIReport:postEquipGet(id, equipGetType)
end
-- 是否有装备可以升级
function EquipData:isEquipsCanUp(part)
for k,v in pairs(self.equips) do
if v:getPart() == part and v:lvUpCostEnough() then
return true
end
end
return false
end
-- 获取所有可升级装备信息
function EquipData:getAllEquipsCanUpByPart(part)
local reqEquips = {}
local rspEquips = {}
for k,v in pairs(self.equips) do
if v:getPart() == part then
local canUpLv, targetUpLv, targetNum = v:getCanUpLv()
if canUpLv then
-- table.insert(equipInfos, {id = k, targetUpLv = targetUpLv, costNum = costNum})
table.insert(reqEquips, k)
table.insert(rspEquips, {id = k, level = targetUpLv, count = targetNum})
end
end
end
return reqEquips, rspEquips
end
-- 升级所有装备
-- function EquipData:onAllEquipsUp(equipUpInfos)
-- for i,v in ipairs(equipUpInfos) do
-- local entity = self:getEquipByCfgId(v.id)
-- entity:setLv(v.targetUpLv)
-- entity:addCount(-v.costNum)
-- end
-- self:setDirty()
-- end
-- 获取所有装备数据
function EquipData:getAllEquips()
return self.equips
end
function EquipData:updateAllAttr()
self.allWearAttr = {}
self.allOwnAttr = {}
local wearEquips = DataManager.FightInfoData:getWearEquips()
for part, equipEntity in pairs(wearEquips) do
if equipEntity then
local allAttr = equipEntity:getAllWearAttr()
for type, value in pairs(allAttr) do
if not self.allWearAttr[type] then
self.allWearAttr[type] = BigNumOpt.getEmptyBigNum()
end
self.allWearAttr[type] = BigNumOpt.bigNumAdd(self.allWearAttr[type], value)
end
end
end
for k,v in pairs(self.equips) do
if v:getLv() > 0 then
local allAttr = v:getAllOwnAttr()
for type, value in pairs(allAttr) do
if not self.allOwnAttr[type] then
self.allOwnAttr[type] = BigNumOpt.getEmptyBigNum()
end
self.allOwnAttr[type] = BigNumOpt.bigNumAdd(self.allOwnAttr[type], value)
end
end
end
end
-- 获取所有已穿戴装备属性
function EquipData:getAllWearAttr()
if self.isAttrDirty then
self.isAttrDirty = false
self:updateAllAttr()
end
return self.allWearAttr
end
-- 获取所有已拥有装备属性
function EquipData:getAllOwnAttr()
if self.isAttrDirty then
self.isAttrDirty = false
self:updateAllAttr()
end
return self.allOwnAttr
end
function EquipData:getEquipByCfgId(id)
if not self.equips[id] then
self.equips[id] = EquipEntity:create({id = id, count = 0, level = 0})
end
return self.equips[id]
end
function EquipData:getBestEquipByPart(part)
local equip
for k,v in pairs(self.equips) do
if v:getLv() > 0 and v:getPart() == part then
if not equip then
equip = v
else
local wearAttr1 = equip:getAllWearAttr()
local wearAttr2 = v:getAllWearAttr()
for k, vv in pairs(wearAttr1) do
if BigNumOpt.bigNumCompare(wearAttr2[k], vv) > 0 then
equip = v
break
end
end
end
end
end
local equips = {}
if equip then
for k,v in pairs(self.equips) do
if v:getLv() > 0 and v:getPart() == part then
local wearAttr1 = equip:getAllWearAttr()
local wearAttr2 = v:getAllWearAttr()
for k, vv in pairs(wearAttr1) do
if BigNumOpt.bigNumCompare(wearAttr2[k], vv) == 0 then
table.insert(equips, v)
break
end
end
end
end
end
return equips
end
-- function EquipData:onEquipLvUp(id)
-- if not self.equips[id] then
-- return
-- end
-- self.equips[id]:onEquipLvUp()
-- self:setDirty()
-- end
-- 读取配置
function EquipData:getEquipCfgArrByPart(part)
local equipCfg = ConfigManager:getConfig("equip")
local tab = {}
for k,v in pairs(equipCfg) do
if part and v.part == part then
v.id = k
table.insert(tab, v)
end
end
table.sort(tab, function (a, b)
if a.qlt == b.qlt then
return a.id < b.id
end
return a.qlt < b.qlt
end)
return tab
end
function EquipData:getEquipCfgArrByPartAndQlt(part, qlt)
local equipCfg = ConfigManager:getConfig("equip")
local tab = {}
for k,v in pairs(equipCfg) do
if part and v.part == part and v.qlt == qlt then
table.insert(tab, k)
end
end
return tab
end
return EquipData