87 lines
4.1 KiB
Lua
87 lines
4.1 KiB
Lua
local HeroEntity = require "app/userdata/hero/hero_entity"
|
|
local HeroEntityOther = class("HeroEntityOther", HeroEntity)
|
|
local ATTR_NAME = GConst.BattleConst.ATTR_NAME
|
|
|
|
function HeroEntityOther:ctor(cfgId, lv, skin, star)
|
|
self.cfgId = cfgId
|
|
self.data.isDirty = false
|
|
self.data.lv = lv
|
|
self.data.skin = skin
|
|
self.data.star = star or 0
|
|
self.config = ConfigManager:getConfig("hero")[self.cfgId]
|
|
self.beginLv = 1 -- 激活等级
|
|
self.isNew = false
|
|
|
|
self.baseAttrOriginal = {}
|
|
self.starAttr = {}
|
|
self.skinAttr = {}
|
|
self.allBaseAttr = {}
|
|
self.allAttr = {}
|
|
self.attrDirty = true
|
|
self.attrBaseDirty = true
|
|
end
|
|
|
|
-- 更新所有属性(包括其他英雄的加成)
|
|
function HeroEntityOther:_updateAllAttr()
|
|
self.allAttr = {}
|
|
self.allBaseAttr = self:_getAllBaseAttr()
|
|
for k, v in pairs(self.allBaseAttr) do
|
|
self.allAttr[k] = v
|
|
end
|
|
|
|
-- 装备
|
|
local equipAttr = DataManager.EquipDataOther:getEquipAttrBySlotId(self:getMatchType())
|
|
for k, v in pairs(equipAttr) do
|
|
self.allAttr[k] = (self.allAttr[k] or 0) + v
|
|
end
|
|
|
|
-- 同属性通用加成
|
|
self.allAttr[GConst.MATCH_ALL_ATKP_NAME[self:getMatchType()]] = nil
|
|
for _, v in pairs(GConst.ATTR_ALL) do
|
|
self.allAttr[v] = nil
|
|
end
|
|
|
|
-- 攻击力(百分比)
|
|
local atkType = GConst.MATCH_ATTACK_NAME[self:getMatchType()]
|
|
-- 全局增加攻击力
|
|
local allAtk = self:getGlobalAttrByType(GConst.ATTR_ALL.ATTR_ATK_ALL)
|
|
local persionalAtk = self.allAttr[GConst.ATTR_PERSIONAL.ATTR_ATK] or 0
|
|
local atk = self.allAttr[atkType] + allAtk + persionalAtk
|
|
-- 全局元素攻击力百分比加成
|
|
local allFactorValue = self:getGlobalAttrByType(GConst.MATCH_ALL_ATKP_NAME[self:getMatchType()])
|
|
-- 个人攻击力百分比加成
|
|
local factorValue = self.allAttr[GConst.MATCH_ATTACK_ADD_NAME[self:getMatchType()]] or 0
|
|
-- 全局攻击力百分比加成
|
|
local allAtkP = self:getGlobalAttrByType(GConst.ATTR_ALL.ATTR_ATKP_ALL)
|
|
self.allAttr[atkType] = math.floor(atk * (1 + (factorValue + allFactorValue + allAtkP) / GConst.DEFAULT_FACTOR) + 0.0000001)
|
|
self.allAttr[GConst.MATCH_ATTACK_ADD_NAME[self:getMatchType()]] = nil
|
|
|
|
-- 生命(百分比)
|
|
local hpType = GConst.MATCH_HP_NAME[self:getMatchType()]
|
|
-- 全局增加生命
|
|
local allHp = self:getGlobalAttrByType(GConst.ATTR_ALL.ATTR_HP_ALL)
|
|
local persionalHp = self.allAttr[GConst.ATTR_PERSIONAL.ATTR_HP] or 0
|
|
local hp = self.allAttr[hpType] + allHp + persionalHp
|
|
-- 全局元素生命百分比加成
|
|
local allFactorValue = self:getGlobalAttrByType(GConst.MATCH_ALL_HPP_NAME[self:getMatchType()])
|
|
-- 个人生命百分比加成
|
|
local factorValue = self.allAttr[GConst.MATCH_HP_ADD_NAME[self:getMatchType()]] or 0
|
|
-- 全局生命百分比加成
|
|
local allHpP = self:getGlobalAttrByType(GConst.ATTR_ALL.ATTR_HPP_ALL)
|
|
self.allAttr[hpType] = math.floor(hp * (1 + (factorValue + allFactorValue + allHpP) / GConst.DEFAULT_FACTOR) + 0.0000001)
|
|
self.allAttr[GConst.MATCH_HP_ADD_NAME[self:getMatchType()]] = nil
|
|
|
|
self.allAttr[ATTR_NAME.DMGDEC] = (self.allAttr[ATTR_NAME.DMGDEC] or 0) + self:getGlobalAttrByType(GConst.ATTR_ALL.ATTR_DMGDEC_ALL)
|
|
self.allAttr[GConst.MATCH_CRIT_NAME[self:getMatchType()]] = (self.allAttr[GConst.MATCH_CRIT_NAME[self:getMatchType()]] or 0) + self:getGlobalAttrByType(GConst.ATTR_ALL.ATTR_CRIT_ALL)
|
|
self.allAttr[GConst.MATCH_CRIT_TIME_NAME[self:getMatchType()]] = (self.allAttr[GConst.MATCH_CRIT_TIME_NAME[self:getMatchType()]] or 0) + self:getGlobalAttrByType(GConst.ATTR_ALL.ATTR_CRIT_TIME_ALL)
|
|
self.allAttr[GConst.MATCH_NORMAL_HURTP_NAME[self:getMatchType()]] = (self.allAttr[GConst.MATCH_NORMAL_HURTP_NAME[self:getMatchType()]] or 0) + self:getGlobalAttrByType(GConst.ATTR_ALL.ATTR_NORMAL_HURTP_ALL) + self:getGlobalAttrByType(GConst.ATTR_PERSIONAL.ATTR_NORMAL_HURTP)
|
|
self.allAttr[GConst.MATCH_SKILL_HURTP_NAME[self:getMatchType()]] = (self.allAttr[GConst.MATCH_SKILL_HURTP_NAME[self:getMatchType()]] or 0) + self:getGlobalAttrByType(GConst.ATTR_ALL.ATTR_SKILL_HURTP_ALL) + self:getGlobalAttrByType(GConst.ATTR_PERSIONAL.ATTR_SKILL_HURTP)
|
|
|
|
self:calcPower()
|
|
end
|
|
|
|
function HeroEntityOther:getGlobalAttrByType(attrType)
|
|
return DataManager.HeroDataOther:getAttrByMatchType(self:getMatchType(), attrType) or 0
|
|
end
|
|
|
|
return HeroEntityOther |