local HeroPlugin = {} function HeroPlugin.bind(Hero) function Hero:getMaxLevel() return math.min(#csvdb["unit_expCsv"], csvdb["unit_breakCsv"][self:getProperty("breakL")].levelLimit) end function Hero:getSPoint() local point = 0 for i = 0, self:getProperty("wakeL") do if csvdb["unit_wakeCsv"][i] then point = point + csvdb["unit_wakeCsv"][i].sp end end return point end function Hero:getLSPoint() local point = self:getSPoint() for skill, level in pairs(self:getProperty("skillL"):toNumMap()) do point = point - (level - 1) end return point end --角色属性值 = 基础属性值(unit)* [ 1 + 升级属性(unit_exp)+ 突破属性(unit_break)] * [ 1 + 觉醒属性(unit_wake)+ 天赋属性(unit_talent)] function Hero:getBaseAttrs(params) params = params or {} local unitData = csvdb["unitCsv"][self:getProperty("type")] local level = params.level or self:getProperty("level") local breakL = params.breakL or self:getProperty("breakL") local wakeL = params.wakeL or self:getProperty("wakeL") local talent = params.talent or self:getProperty("talent") local attrs = {} for _, attName in pairs(AttsEnumEx) do attrs[attName] = unitData[attName] or 0 end local lData = csvdb["unit_expCsv"][level] local blData = csvdb["unit_breakCsv"][breakL] -- core for attr, value in pairs(attrs) do attrs[attr] = attrs[attr] * (100 + (lData[attr .. "Level"] or 0) + (blData[attr .. "Level"] or 0)) / 100 end local talentAttrS = {} -- 天赋阶段属性 for i = 1, (talent:getv(0, 1) - 1) do local curData = csvdb["unit_talentCsv"][i] local effect = curData[#curData].effect:toArray(true, "=") talentAttrS[AttsEnumEx[effect[1]]] = (talentAttrS[AttsEnumEx[effect[1]]] or 0) + effect[2] end -- 四个基础属性 local curData = csvdb["unit_talentCsv"][talent:getv(0, 1)] if not curData then -- 已经满阶段了 curData = csvdb["unit_talentCsv"][#csvdb["unit_talentCsv"]] local strength = curData[#curData].strength for i = 1, 4 do talentAttrS[AttsEnumEx[i]] = (talentAttrS[AttsEnumEx[i]] or 0) + strength end else for i = 1, 4 do --4个天赋 talentAttrS[AttsEnumEx[i]] = (talentAttrS[AttsEnumEx[i]] or 0) + curData[talent:getv(i, 0)].strength end end --好感度 local loveUp = {} for i = 0, self:getProperty("loveL") do local reward = csvdb["unit_love_effectCsv"][i]["reward"] for attrId, value in pairs(reward:toNumMap()) do loveUp[AttsEnumEx[attrId]] = (loveUp[AttsEnumEx[attrId]] or 0) + value end end --皮肤 local skinUp = {} local reward = (csvdb["unit_skinCsv"][self:getSkinId()] or {})["reward"] or "" for attrId, value in pairs(reward:toNumMap()) do skinUp[AttsEnumEx[attrId]] = (skinUp[AttsEnumEx[attrId]] or 0) + value end --觉醒 local wData = csvdb["unit_wakeCsv"][wakeL] for attr, value in pairs(attrs) do attrs[attr] = attrs[attr] * (100 + (wData[attr .. "Level"] or 0) + (talentAttrS[attr] or 0) + (loveUp[attr] or 0) + (skinUp[attr] or 0)) / 100 end return attrs end --当前属性 = [ 角色属性值 + 基础装备(固定)+ 专属装备(固定)] * [ 1 + 基础装备(百分比) + 专属装备(百分比)] function Hero:getTotalAttrs(params) local attrs = self:getBaseAttrs() return attrs end -- 战斗力(当前属性)= POWER[(生命 + 防御 * 7 + 闪避 * 4)*(攻击 + 命中 * 4)*(1 + 暴击几率 * 暴击伤害)* 攻击速度 / 60000 ,0.8 ] function Hero:getBattleValue() local attrs = self:getTotalAttrs() local battleValue = ((attrs["hp"] + attrs["def"] * 7 + attrs["miss"] * 4) * (attrs["atk"] + attrs["hit"] * 4) * (1 + attrs["crit"] * attrs["critHurt"]) * attrs["atkSpeed"] / 60000) ^ 0.8 return math.floor(battleValue) end function Hero:saveBattleValue() local battleValue = self:getBattleValue() if battleValue ~= self:getProperty("battleV") then self:setProperty("battleV", battleValue) end return battleValue end function Hero:getSkillLevel(idx) return self:getProperty("skillL"):getv(idx, 1) end function Hero:getSkillData(idx, skin) local unitData = csvdb["unitCsv"][self:getSkinId(skin)] if idx == 1 then return csvdb["skill_blockCsv"][unitData.block] elseif idx == 2 then return csvdb["skill_specialCsv"][unitData.special] elseif idx == 4 then --冒险技能 if unitData.adv > 1000 then return csvdb["adv_skill_passiveCsv"][unitData.adv] else return csvdb["adv_skillCsv"][unitData.adv] end end return {} end function Hero:getSkinId(skin) skin = skin or self:getProperty("skin") if skin == 0 then return self:getProperty("type") else return 30000 + self:getProperty("type") * 10 + skin end end end return HeroPlugin