229 lines
5.2 KiB
Lua
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 |