139 lines
3.1 KiB
Lua
139 lines
3.1 KiB
Lua
local EquipEntity = require "app/userdata/equip/equip_entity"
|
|
local EquipEntityOther = class("EquipEntityOther", EquipEntity)
|
|
|
|
local EquipCfg = ConfigManager:getConfig("equip")
|
|
|
|
function EquipEntityOther:ctor(equip)
|
|
self.baseAttrs = {}
|
|
self:init(equip)
|
|
end
|
|
|
|
function EquipEntityOther:init(equip)
|
|
self:setId(equip.cfg_id)
|
|
self:initBaseAttr()
|
|
self:setExtraAttr(equip.extra_attrs)
|
|
|
|
self.lastPower = nil
|
|
end
|
|
|
|
function EquipEntityOther:setId(id)
|
|
self.id = id
|
|
self.config = EquipCfg[id]
|
|
end
|
|
|
|
--获取配置id
|
|
function EquipEntityOther:getId()
|
|
return self.id
|
|
end
|
|
|
|
--@region 属性
|
|
function EquipEntityOther:initBaseAttr()
|
|
for k,v in pairs(self.config.base_attr) do
|
|
self.baseAttrs[k] = v
|
|
end
|
|
end
|
|
|
|
function EquipEntityOther:setExtraAttr(attr)
|
|
self.extraAttrs = {}
|
|
self.extraMap = attr
|
|
if attr and #attr > 0 then
|
|
for i, data in pairs(attr) do
|
|
local attrType = GFunc.getAttrNameById(data.id)
|
|
if attrType then
|
|
self.extraAttrs[attrType] = (self.extraAttrs[attrType] or 0) + data.value
|
|
end
|
|
end
|
|
end
|
|
self.allAttrs = nil
|
|
end
|
|
|
|
function EquipEntityOther:getBaseAttr()
|
|
return self.baseAttrs
|
|
end
|
|
|
|
function EquipEntityOther:getExtraMap()
|
|
return self.extraMap
|
|
end
|
|
|
|
function EquipEntityOther:getExtraList()
|
|
local list = {}
|
|
for k,v in pairs(self.extraAttrs) do
|
|
table.insert(list, {type = k, num = v, id = GFunc.getAttrIdByName(k)})
|
|
end
|
|
table.sort(list, function (a, b)
|
|
return a.id < b.id
|
|
end)
|
|
return list
|
|
end
|
|
|
|
function EquipEntityOther:getExtraAttrs()
|
|
return self.extraAttrs
|
|
end
|
|
|
|
function EquipEntityOther:getAllAttr()
|
|
if self.allAttrs == nil then
|
|
self.allAttrs = {}
|
|
-- 基础
|
|
-- for attrName, attrNum in pairs(self:getBaseAttr()) do
|
|
-- self.allAttrs[attrName] = (self.allAttrs[attrName] or 0) + attrNum
|
|
-- end
|
|
self.allAttrs[self.baseAttrs.type] = (self.allAttrs[self.baseAttrs.type] or 0) + self.baseAttrs.num
|
|
-- 额外属性
|
|
for attrName, attrNum in pairs(self:getExtraAttrs()) do
|
|
self.allAttrs[attrName] = (self.allAttrs[attrName] or 0) + attrNum
|
|
end
|
|
|
|
-- self:calcPower()
|
|
end
|
|
|
|
return self.allAttrs
|
|
end
|
|
--@endregion
|
|
|
|
--@region 战力
|
|
function EquipEntityOther:setPowerDirty()
|
|
self.data.isPowerDirty = not self.data.isPowerDirty
|
|
end
|
|
|
|
function EquipEntityOther:getPower()
|
|
if not self.curPower then
|
|
self:getAllAttr()
|
|
end
|
|
return self.curPower
|
|
end
|
|
|
|
-- 计算战斗力
|
|
function EquipEntityOther:calcPower()
|
|
if self.lastPower then
|
|
self.lastPower = self.curPower
|
|
end
|
|
self.curPower = math.floor(self:_getAttrPower())
|
|
if not self.lastPower then
|
|
self.lastPower = self.curPower
|
|
end
|
|
|
|
if self.lastPower ~= self.curPower then
|
|
self:setPowerDirty()
|
|
end
|
|
end
|
|
|
|
function EquipEntityOther:_getAttrPower()
|
|
local power = 0
|
|
local attr = self:getAllAttr()
|
|
for attrName, attrNum in pairs(attr) do
|
|
local cfg = GFunc.getAttrNameCfg()[attrName]
|
|
if cfg then
|
|
local realValue = attrNum
|
|
-- 特殊处理,玩家基础暴击伤害不算
|
|
if attrName == GConst.BattleConst.ATTR_NAME.CRIT_TIME then
|
|
realValue = attrNum - 15000
|
|
end
|
|
power = power + math.floor(realValue * cfg.power / GConst.DEFAULT_FACTOR + 0.0000001)
|
|
end
|
|
end
|
|
|
|
return power
|
|
end
|
|
--@endregion
|
|
|
|
return EquipEntityOther |