local HeroEntity = class("HeroEntity", BaseData) function HeroEntity:ctor(cfgId, lv) self.id = cfgId self.cfgId = cfgId self.data.lv = lv self.attrDirty = false self.config = ConfigManager:getConfig("hero")[self.cfgId] self.beginLv = self.config.begin_lv -- 初始等级 self.baseAttrOriginal = {} self.allAttr = {} self:initAttr() self:updateAttr() end function HeroEntity:initAttr() self.allAttr[GConst.ATTR_TYPE.hp] = 0 self.allAttr[GConst.ATTR_TYPE.atk_red] = 0 self.allAttr[GConst.ATTR_TYPE.atk_yellow] = 0 self.allAttr[GConst.ATTR_TYPE.atk_green] = 0 self.allAttr[GConst.ATTR_TYPE.atk_blue] = 0 self.allAttr[GConst.ATTR_TYPE.atk_purple] = 0 end function HeroEntity:setLv(lv) if not lv then return end if self.data.lv == lv then return end self.data.lv = lv self:setDirty() end function HeroEntity:getCfgId() return self.cfgId end function HeroEntity:getLv() return self.data.lv end function HeroEntity:getQlt() return self.config.qlt end function HeroEntity:getBeginLv() return self.beginLv end function HeroEntity:getMatchType() return self.config.position end function HeroEntity:setAttrDirty() self.attrDirty = true end function HeroEntity:getAllAttr() if self.attrDirty == true then self.attrDirty = false self:updateAttr() end return self.allAttr end function HeroEntity:updateAttr() self:updateBaseAttr() self:updateAllAttr() end function HeroEntity:updateBaseAttr() self.baseAttrOriginal[GConst.ATTR_TYPE.hp] = self:getCfgHp() self.baseAttrOriginal[GConst.ATTR_TYPE.atk_red] = 0 self.baseAttrOriginal[GConst.ATTR_TYPE.atk_yellow] = 0 self.baseAttrOriginal[GConst.ATTR_TYPE.atk_green] = 0 self.baseAttrOriginal[GConst.ATTR_TYPE.atk_blue] = 0 self.baseAttrOriginal[GConst.ATTR_TYPE.atk_purple] = 0 self.baseAttrOriginal[GConst.ATTR_TYPE[GConst.MATCH_ATTACK_NAME[self.config.position]]] = self:getCfgAtk() end function HeroEntity:getCfgHp(lv) lv = lv or self.data.lv if lv > self:getMaxLv() then lv = self:getMaxLv() end if self.config and self.config.hp then return self.config.hp[lv] or 0 end return 0 end function HeroEntity:getCfgAtk(lv) lv = lv or self.data.lv if lv > self:getMaxLv() then lv = self:getMaxLv() end if self.config and self.config.atk then return self.config.atk[lv] or 0 end return 0 end function HeroEntity:getUnlcokChapter() return self.config.unlock_chapter or 0 end function HeroEntity:updateAllAttr() for k, v in pairs(self.baseAttrOriginal) do self.allAttr[k] = v end end function HeroEntity:getAtk() return self.allAttr[GConst.ATTR_TYPE.atk] or 0 end function HeroEntity:getHp() return self.allAttr[GConst.ATTR_TYPE.hp] or 0 end function HeroEntity:setDirty() self.attrDirty = true end function HeroEntity:isMaxLv() return self.data.lv >= self:getMaxLv() end function HeroEntity:getMaxLv() if not self.maxLv then self.maxLv = ConfigManager:getConfigNum("hero_level") end return self.maxLv end function HeroEntity:canLvUp() if self:isMaxLv() then return false end local cost = self:getLvUpMaterials() if not cost then return false end local fragmentCost = cost[1] or 0 if not GFunc.checkCost(self:getFramentId(), fragmentCost, false) then return false end local goldCost = cost[2] or 0 if not GFunc.checkCost(GConst.ItemConst.ITEM_ID_GOLD, goldCost, false) then return false end return true end function HeroEntity:isUnlock() return self:getUnlcokChapter() <= DataManager.ChapterData:getMaxChapterId() end function HeroEntity:isActived() return self.data.lv >= self:getBeginLv() end function HeroEntity:getLvUpMaterials() local lv = self.data.lv + 1 if lv < self:getBeginLv() then lv = self:getBeginLv() end local nextLvInfo = ConfigManager:getConfig("hero_level")[lv] if not nextLvInfo then return end local fieldName = "cost_" .. self:getQlt() return nextLvInfo[fieldName] end function HeroEntity:getConfig() return self.config end function HeroEntity:getModelId() return self.config.model_id end function HeroEntity:getActiveSkill() return self.config.base_skill end function HeroEntity:getAssistingSkill() return self.config.support_skill end function HeroEntity:getHurtSkill() return self.config.hurt_skill end function HeroEntity:getFramentId() return self.config.item_id end function HeroEntity:getIcon() return self.config.icon end function HeroEntity:getHurtNum() return self.config.hurt_num end function HeroEntity:getName() return I18N:getConfig("hero")[self:getCfgId()].name end function HeroEntity:getActiveRogueCount() local lvInfo = ConfigManager:getConfig("hero_level")[self.data.lv] if not lvInfo then return 0 end return lvInfo.unlock_skill end function HeroEntity:getUnlockRogueId() return self.config.rouge_skill end function HeroEntity:getRogueSkillList() if not self.rogueSkillList then self.rogueSkillList = {} for i = 1, 3 do local id = self.config["rouge_skill_" .. i] if id then table.insert(self.rogueSkillList, id) else break end end end return self.rogueSkillList end function HeroEntity:getActiveTogueSkills() local list = {} for i = 1, self:getActiveRogueCount() do local id = self:getRogueSkillList()[i] if id then table.insert(list, id) else return end end return list end return HeroEntity