c1_lua/lua/app/userdata/hero/hero_entity_other.lua
2025-10-30 20:12:43 +08:00

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