local EquipEntity = class("EquipEntity", BaseData) local EquipCfg = ConfigManager:getConfig("equip") function EquipEntity:setDirty() self.allAttrs = nil self.curPower = nil end function EquipEntity:ctor(equip) self.baseAttrs = {} self:init(equip) end function EquipEntity:init(equip) self.uid = equip.uid self:setId(equip.cfg_id) self:initBaseAttr() self:setExtraAttr(equip.extra_attrs) self.lastPower = nil end -- 装备唯一id function EquipEntity:getUid() return self.uid end function EquipEntity:setId(id) self.id = id self.config = EquipCfg[id] self:setDirty() end --获取配置id function EquipEntity:getId() return self.id end --@region 配置 function EquipEntity:getPart() return self.config.type end function EquipEntity:getQlt() return self.config.qlt end function EquipEntity:getStar() return self.config.star end function EquipEntity:getIconRes() return self.config.icon end function EquipEntity:getEntityType() return GConst.ENTITY_TYPE.EQUIP_ENTITY end function EquipEntity:getName() return DataManager.EquipData:getName(self:getId()) end function EquipEntity:getNameQltColor() return string.format("%s", GFunc.getQltColor(self:getQlt()), self:getName()) end function EquipEntity:getPartName() return I18N:getGlobalText(GConst.EquipConst.EQUIP_PART_NAME[self:getPart()]) end --@endregion --@region 属性 function EquipEntity:initBaseAttr() for k,v in pairs(self.config.base_attr) do self.baseAttrs[k] = v end end function EquipEntity: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 EquipEntity:getBaseAttr() return self.baseAttrs end function EquipEntity:getBaseAttrWithLv(lv) local attr = {} attr.type = self.baseAttrs.type attr.num = self.baseAttrs.num + DataManager.EquipData:getBaseAttrLvAdd(self.baseAttrs.type, lv) return attr end function EquipEntity:getExtraMap() return self.extraMap end function EquipEntity: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 EquipEntity:getExtraAttrs() return self.extraAttrs end function EquipEntity: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 EquipEntity:setPowerDirty() self.data.isPowerDirty = not self.data.isPowerDirty end function EquipEntity:getPower() if not self.curPower then self:getAllAttr() end return self.curPower end -- 计算战斗力 function EquipEntity: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 EquipEntity:_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 --@region 数据 function EquipEntity:getPartLv(slotId) if not slotId then return 0 end return DataManager.EquipData:getPartLv(slotId, self:getPart()) end function EquipEntity:getMaxLv() return #DataManager.EquipData:getLevelConfig() end function EquipEntity:getIsLvMax(slotId) local lv = self:getPartLv(slotId) return lv >= self:getMaxLv() end --@endregion return EquipEntity