From ece975b66c07a0c9f7aa865e48ca7975387fce8f Mon Sep 17 00:00:00 2001 From: zhouhaihai Date: Wed, 17 Jul 2019 19:11:12 +0800 Subject: [PATCH] 属性计算 --- src/models/Hero.lua | 2 +- src/models/HeroPlugin.lua | 83 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/models/RolePlugin.lua | 17 +++++++++++++++++ 3 files changed, 101 insertions(+), 1 deletion(-) diff --git a/src/models/Hero.lua b/src/models/Hero.lua index c3df475..8e7d84e 100644 --- a/src/models/Hero.lua +++ b/src/models/Hero.lua @@ -57,7 +57,7 @@ function Hero:updateProperty(params) local datas = {} table.insert(datas, {key = params.field, newValue = self:getProperty(params.field)}) - local check = {level = true, breakL = true, wakeL = true, talent = true, loveL = true, skin = true} + local check = {level = true, breakL = true, wakeL = true, talent = true, loveL = true, skin = true, equip = true, rune = true} if check[params.field] then local orginValue = self:getProperty("battleV") local curValue = self:saveBattleValue() diff --git a/src/models/HeroPlugin.lua b/src/models/HeroPlugin.lua index 11b4294..a13d39b 100644 --- a/src/models/HeroPlugin.lua +++ b/src/models/HeroPlugin.lua @@ -24,6 +24,7 @@ function HeroPlugin.bind(Hero) end return point end + --角色属性值 = 基础属性值(unit)* [ 1 + 升级属性(unit_exp)+ 突破属性(unit_break)] * [ 1 + 觉醒属性(unit_wake)+ 天赋属性(unit_talent)] function Hero:getBaseAttrs(params) params = params or {} @@ -91,11 +92,93 @@ function HeroPlugin.bind(Hero) return attrs end + --当前属性 = [ 角色属性值 + 基础装备(固定)+ 专属装备(固定)] * [ 1 + 基础装备(百分比) + 专属装备(百分比)] function Hero:getTotalAttrs(params) local attrs = self:getBaseAttrs() + -- 装备零件 + local equipAttrs = self:getRuneEquipAttrs() + + for _, attName in pairs(AttsEnumEx) do + attrs[attName] = ((attrs[attName] or 0) + equipAttrs.value[attName]) * (1 + equipAttrs.precent[attName]) + end + + return attrs + end + + -- 当前零件和装备增加属性 + function Hero:getRuneEquipAttrs() + local attrs = {value = {}, precent = {}} + for _, attName in pairs(AttsEnumEx) do + attrs.value[attName] = 0 + attrs.precent[attName] = 0 + end + local equipSuits = {} + -- 装备效果 + for typ,level in pairs(self:getProperty("equip"):toNumMap()) do + if level > 0 then + local data = csvdb["equipCsv"][typ][level] + for k,v in pairs(data.attr1:toNumMap()) do + attrs.value[AttsEnumEx[k]] = attrs.value[AttsEnumEx[k]] + v + end + for k,v in pairs(data.attr2:toNumMap()) do + attrs.value[AttsEnumEx[k]] = attrs.value[AttsEnumEx[k]] + v + end + if data.suit ~= "" then + if not equipSuits[data.suit] then equipSuits[data.suit] = {} end + table.insert(equipSuits[data.suit], data) + end + end + end + -- 装备套装效果 + for suitId,eDatas in pairs(equipSuits) do + local suitCsv = csvdb["equip_suitCsv"][tonumber(suitId)] + if suitCsv then + local effects = suitCsv.effect:toTableArray(true) + local count = #eDatas + if count >= 2 then + attrs.precent[AttsEnumEx[effects[1][1]]] = attrs.precent[AttsEnumEx[effects[1][1]]] + effects[1][2] + end + if count >= 3 then + attrs.precent[AttsEnumEx[effects[2][1]]] = attrs.precent[AttsEnumEx[effects[2][1]]] + effects[1][2] + end + if count >= 4 then + attrs.precent[AttsEnumEx[effects[3][1]]] = attrs.precent[AttsEnumEx[effects[3][1]]] + effects[3][2] + end + end + end + -- 零件效果 + local suits = {} + for _, uid in pairs(self:getProperty("rune"):toNumMap()) do + if uid > 0 then + local rune = self.owner.runeBag[uid] + local buildData = csvdb["rune_buildCsv"][rune:getProperty("level")] + for k,v in pairs(rune:getProperty("attrs"):toNumMap()) do + attrs.value[AttsEnumEx[k]] = attrs.value[AttsEnumEx[k]] + (v * (1 + buildData.effect/100)) + + end + local csvData = csvdb["runeCsv"][rune:getProperty("type")][rune:getProperty("id")] + if not suits[csvData.suit] then suits[csvData.suit] = {} end + table.insert(suits[csvData.suit],csvData) + end + end + -- 零件套装效果 + for suitId,runeDatas in pairs(suits) do + local suitCsv = csvdb["rune_suitCsv"][tonumber(suitId)] + if suitCsv then + local effects = suitCsv.effect:toTableArray(true) + local count = #runeDatas + if count >= 2 then + attrs.precent[AttsEnumEx[effects[1][1]]] = attrs.precent[AttsEnumEx[effects[1][1]]] + effects[1][2] + end + if count == 6 then + attrs.precent[AttsEnumEx[effects[3][1]]] = attrs.precent[AttsEnumEx[effects[3][1]]] + effects[3][2] + end + end + end return attrs end + -- 战斗力(当前属性)= POWER[(生命 + 防御 * 7 + 闪避 * 4)*(攻击 + 命中 * 4)*(1 + 暴击几率/100 * 暴击伤害/100)* 攻击速度 / 60000 ,0.8 ] function Hero:getBattleValue() local attrs = self:getTotalAttrs() diff --git a/src/models/RolePlugin.lua b/src/models/RolePlugin.lua index 32710eb..8e6995a 100644 --- a/src/models/RolePlugin.lua +++ b/src/models/RolePlugin.lua @@ -500,6 +500,23 @@ function RolePlugin.bind(Role) end return max end + + function Role:warningHeartTooQuick() + -- 加速器检测 + -- local heartWarning = self:getProperty("heartWarning") + -- heartWarning = heartWarning + 1 + -- self:setProperty("heartWarning", heartWarning) + -- if heartWarning == 50 then + -- self:setProperty("delete", 1) + -- self:sendGmMsg("系统检测到你多次使用加速器,已经将你封杀,请联系管理员。") + -- self:log("gmAction",{desc = "ban"}) + -- return + -- end + -- if heartWarning < 50 and heartWarning % 5 == 0 then + -- self:sendGmMsg("警告!系统检测到你使用加速器,请立即停止使用!否则我们将封杀此账号!") + -- self:log("gmAction",{desc = "heartWarning", count = heartWarning}) + -- end + end end return RolePlugin \ No newline at end of file -- libgit2 0.21.2