Commit ece975b66c07a0c9f7aa865e48ca7975387fce8f

Authored by zhouhaihai
1 parent 4ea1b5ac

属性计算

src/models/Hero.lua
... ... @@ -57,7 +57,7 @@ function Hero:updateProperty(params)
57 57 local datas = {}
58 58 table.insert(datas, {key = params.field, newValue = self:getProperty(params.field)})
59 59  
60   - local check = {level = true, breakL = true, wakeL = true, talent = true, loveL = true, skin = true}
  60 + local check = {level = true, breakL = true, wakeL = true, talent = true, loveL = true, skin = true, equip = true, rune = true}
61 61 if check[params.field] then
62 62 local orginValue = self:getProperty("battleV")
63 63 local curValue = self:saveBattleValue()
... ...
src/models/HeroPlugin.lua
... ... @@ -24,6 +24,7 @@ function HeroPlugin.bind(Hero)
24 24 end
25 25 return point
26 26 end
  27 +
27 28 --角色属性值 = 基础属性值(unit)* [ 1 + 升级属性(unit_exp)+ 突破属性(unit_break)] * [ 1 + 觉醒属性(unit_wake)+ 天赋属性(unit_talent)]
28 29 function Hero:getBaseAttrs(params)
29 30 params = params or {}
... ... @@ -91,11 +92,93 @@ function HeroPlugin.bind(Hero)
91 92 return attrs
92 93 end
93 94  
  95 +
94 96 --当前属性 = [ 角色属性值 + 基础装备(固定)+ 专属装备(固定)] * [ 1 + 基础装备(百分比) + 专属装备(百分比)]
95 97 function Hero:getTotalAttrs(params)
96 98 local attrs = self:getBaseAttrs()
  99 + -- 装备零件
  100 + local equipAttrs = self:getRuneEquipAttrs()
  101 +
  102 + for _, attName in pairs(AttsEnumEx) do
  103 + attrs[attName] = ((attrs[attName] or 0) + equipAttrs.value[attName]) * (1 + equipAttrs.precent[attName])
  104 + end
  105 +
  106 + return attrs
  107 + end
  108 +
  109 + -- 当前零件和装备增加属性
  110 + function Hero:getRuneEquipAttrs()
  111 + local attrs = {value = {}, precent = {}}
  112 + for _, attName in pairs(AttsEnumEx) do
  113 + attrs.value[attName] = 0
  114 + attrs.precent[attName] = 0
  115 + end
  116 + local equipSuits = {}
  117 + -- 装备效果
  118 + for typ,level in pairs(self:getProperty("equip"):toNumMap()) do
  119 + if level > 0 then
  120 + local data = csvdb["equipCsv"][typ][level]
  121 + for k,v in pairs(data.attr1:toNumMap()) do
  122 + attrs.value[AttsEnumEx[k]] = attrs.value[AttsEnumEx[k]] + v
  123 + end
  124 + for k,v in pairs(data.attr2:toNumMap()) do
  125 + attrs.value[AttsEnumEx[k]] = attrs.value[AttsEnumEx[k]] + v
  126 + end
  127 + if data.suit ~= "" then
  128 + if not equipSuits[data.suit] then equipSuits[data.suit] = {} end
  129 + table.insert(equipSuits[data.suit], data)
  130 + end
  131 + end
  132 + end
  133 + -- 装备套装效果
  134 + for suitId,eDatas in pairs(equipSuits) do
  135 + local suitCsv = csvdb["equip_suitCsv"][tonumber(suitId)]
  136 + if suitCsv then
  137 + local effects = suitCsv.effect:toTableArray(true)
  138 + local count = #eDatas
  139 + if count >= 2 then
  140 + attrs.precent[AttsEnumEx[effects[1][1]]] = attrs.precent[AttsEnumEx[effects[1][1]]] + effects[1][2]
  141 + end
  142 + if count >= 3 then
  143 + attrs.precent[AttsEnumEx[effects[2][1]]] = attrs.precent[AttsEnumEx[effects[2][1]]] + effects[1][2]
  144 + end
  145 + if count >= 4 then
  146 + attrs.precent[AttsEnumEx[effects[3][1]]] = attrs.precent[AttsEnumEx[effects[3][1]]] + effects[3][2]
  147 + end
  148 + end
  149 + end
  150 + -- 零件效果
  151 + local suits = {}
  152 + for _, uid in pairs(self:getProperty("rune"):toNumMap()) do
  153 + if uid > 0 then
  154 + local rune = self.owner.runeBag[uid]
  155 + local buildData = csvdb["rune_buildCsv"][rune:getProperty("level")]
  156 + for k,v in pairs(rune:getProperty("attrs"):toNumMap()) do
  157 + attrs.value[AttsEnumEx[k]] = attrs.value[AttsEnumEx[k]] + (v * (1 + buildData.effect/100))
  158 +
  159 + end
  160 + local csvData = csvdb["runeCsv"][rune:getProperty("type")][rune:getProperty("id")]
  161 + if not suits[csvData.suit] then suits[csvData.suit] = {} end
  162 + table.insert(suits[csvData.suit],csvData)
  163 + end
  164 + end
  165 + -- 零件套装效果
  166 + for suitId,runeDatas in pairs(suits) do
  167 + local suitCsv = csvdb["rune_suitCsv"][tonumber(suitId)]
  168 + if suitCsv then
  169 + local effects = suitCsv.effect:toTableArray(true)
  170 + local count = #runeDatas
  171 + if count >= 2 then
  172 + attrs.precent[AttsEnumEx[effects[1][1]]] = attrs.precent[AttsEnumEx[effects[1][1]]] + effects[1][2]
  173 + end
  174 + if count == 6 then
  175 + attrs.precent[AttsEnumEx[effects[3][1]]] = attrs.precent[AttsEnumEx[effects[3][1]]] + effects[3][2]
  176 + end
  177 + end
  178 + end
97 179 return attrs
98 180 end
  181 +
99 182 -- 战斗力(当前属性)= POWER[(生命 + 防御 * 7 + 闪避 * 4)*(攻击 + 命中 * 4)*(1 + 暴击几率/100 * 暴击伤害/100)* 攻击速度 / 60000 ,0.8 ]
100 183 function Hero:getBattleValue()
101 184 local attrs = self:getTotalAttrs()
... ...
src/models/RolePlugin.lua
... ... @@ -500,6 +500,23 @@ function RolePlugin.bind(Role)
500 500 end
501 501 return max
502 502 end
  503 +
  504 + function Role:warningHeartTooQuick()
  505 + -- 加速器检测
  506 + -- local heartWarning = self:getProperty("heartWarning")
  507 + -- heartWarning = heartWarning + 1
  508 + -- self:setProperty("heartWarning", heartWarning)
  509 + -- if heartWarning == 50 then
  510 + -- self:setProperty("delete", 1)
  511 + -- self:sendGmMsg("系统检测到你多次使用加速器,已经将你封杀,请联系管理员。")
  512 + -- self:log("gmAction",{desc = "ban"})
  513 + -- return
  514 + -- end
  515 + -- if heartWarning < 50 and heartWarning % 5 == 0 then
  516 + -- self:sendGmMsg("警告!系统检测到你使用加速器,请立即停止使用!否则我们将封杀此账号!")
  517 + -- self:log("gmAction",{desc = "heartWarning", count = heartWarning})
  518 + -- end
  519 + end
503 520 end
504 521  
505 522 return RolePlugin
506 523 \ No newline at end of file
... ...