Commit 028db777beaa09fdf38520246df68df636056349
1 parent
8c7272a5
属性加成
Showing
2 changed files
with
35 additions
and
10 deletions
Show diff stats
src/models/HeroPlugin.lua
| @@ -18,6 +18,28 @@ function HeroPlugin.bind(Hero) | @@ -18,6 +18,28 @@ function HeroPlugin.bind(Hero) | ||
| 18 | return math.min(#csvdb["unit_expCsv"], csvdb["unit_breakCsv"][self:getProperty("breakL")].levelLimit) | 18 | return math.min(#csvdb["unit_expCsv"], csvdb["unit_breakCsv"][self:getProperty("breakL")].levelLimit) |
| 19 | end | 19 | end |
| 20 | 20 | ||
| 21 | + | ||
| 22 | + -- 纯% 的属性 | ||
| 23 | + local PercentAttr = { | ||
| 24 | + crit = 6, -- 暴击 | ||
| 25 | + critHurt = 8, -- 暴伤 | ||
| 26 | + vampire = 9, -- 吸血 | ||
| 27 | + pierce = 10, -- 穿透 | ||
| 28 | + } | ||
| 29 | + -- base 原, add 增加值 ,atype 增加类型(0 值 1%) | ||
| 30 | + local function addAttr(base, add, atype, attrName) | ||
| 31 | + base = base or 0 | ||
| 32 | + add = add or 0 | ||
| 33 | + if PercentAttr[attrName] then | ||
| 34 | + atype = 0 | ||
| 35 | + end | ||
| 36 | + if atype == 1 then | ||
| 37 | + return base * add / 100 | ||
| 38 | + else | ||
| 39 | + return add | ||
| 40 | + end | ||
| 41 | + end | ||
| 42 | + | ||
| 21 | --角色自身 = 初始 *(1+升级)*(1+突破)*(1+觉醒)+ 天赋升级 + 天赋阶段 | 43 | --角色自身 = 初始 *(1+升级)*(1+突破)*(1+觉醒)+ 天赋升级 + 天赋阶段 |
| 22 | function Hero:getBaseAttrs(params) | 44 | function Hero:getBaseAttrs(params) |
| 23 | params = params or {} | 45 | params = params or {} |
| @@ -53,7 +75,7 @@ function HeroPlugin.bind(Hero) | @@ -53,7 +75,7 @@ function HeroPlugin.bind(Hero) | ||
| 53 | 75 | ||
| 54 | for _, attrName in pairs(AttsEnumEx) do | 76 | for _, attrName in pairs(AttsEnumEx) do |
| 55 | if talentAttrS[attrName] then | 77 | if talentAttrS[attrName] then |
| 56 | - talentAttrS[attrName] = (unitData[attrName] or 0) * talentAttrS[attrName] / 100 | 78 | + talentAttrS[attrName] = addAttr(unitData[attrName], talentAttrS[attrName], 1, attrName) |
| 57 | end | 79 | end |
| 58 | end | 80 | end |
| 59 | 81 | ||
| @@ -66,9 +88,9 @@ function HeroPlugin.bind(Hero) | @@ -66,9 +88,9 @@ function HeroPlugin.bind(Hero) | ||
| 66 | local blData = csvdb["unit_breakCsv"][breakL] | 88 | local blData = csvdb["unit_breakCsv"][breakL] |
| 67 | local wData = csvdb["unit_wakeCsv"][wakeL] | 89 | local wData = csvdb["unit_wakeCsv"][wakeL] |
| 68 | for attr, value in pairs(attrs) do | 90 | for attr, value in pairs(attrs) do |
| 69 | - attrs[attr] = attrs[attr] * (1 + (lData[attr .. "Level"] or 0) / 100) | ||
| 70 | - * (1 + (blData[attr .. "Level"] or 0) / 100) | ||
| 71 | - * (1 + (wData[attr .. "Level"] or 0) / 100) + (talentAttrS[attr] or 0) | 91 | + attrs[attr] = attrs[attr] + addAttr(attrs[attr], lData[attr .. "Level"], 1, attr) |
| 92 | + attrs[attr] = attrs[attr] + addAttr(attrs[attr], blData[attr .. "Level"], 1, attr) | ||
| 93 | + attrs[attr] = attrs[attr] + addAttr(attrs[attr], wData[attr .. "Level"], 1, attr) + (talentAttrS[attr] or 0) | ||
| 72 | end | 94 | end |
| 73 | 95 | ||
| 74 | return attrs | 96 | return attrs |
| @@ -83,13 +105,15 @@ function HeroPlugin.bind(Hero) | @@ -83,13 +105,15 @@ function HeroPlugin.bind(Hero) | ||
| 83 | local equipAttrs = self:getRuneEquipAttrs() | 105 | local equipAttrs = self:getRuneEquipAttrs() |
| 84 | 106 | ||
| 85 | for _, attName in pairs(AttsEnumEx) do | 107 | for _, attName in pairs(AttsEnumEx) do |
| 86 | - attrs[attName] = ((attrs[attName] or 0) + equipAttrs.value[attName]) * (1 + equipAttrs.percent[attName] / 100) | 108 | + attrs[attName] = attrs[attName] or 0 |
| 109 | + attrs[attName] = attrs[attName] + addAttr(attrs[attName], equipAttrs.value[attName], 0, attName) | ||
| 110 | + attrs[attName] = attrs[attName] + addAttr(attrs[attName], equipAttrs.percent[attName], 1, attName) | ||
| 87 | end | 111 | end |
| 88 | 112 | ||
| 89 | -- 羁绊加成 | 113 | -- 羁绊加成 |
| 90 | if params.activeRelation then | 114 | if params.activeRelation then |
| 91 | - for k, v in pairs(AttsEnumEx) do | ||
| 92 | - attrs[v] = (attrs[v] or 0) * (1 + (params.activeRelation[v] or 0) / 100) | 115 | + for k, attName in pairs(AttsEnumEx) do |
| 116 | + attrs[attName] = attrs[attName] + addAttr(attrs[attName], params.activeRelation[attName], 1, attName) | ||
| 93 | end | 117 | end |
| 94 | end | 118 | end |
| 95 | return attrs | 119 | return attrs |
| @@ -143,8 +167,9 @@ function HeroPlugin.bind(Hero) | @@ -143,8 +167,9 @@ function HeroPlugin.bind(Hero) | ||
| 143 | local rune = self.owner.runeBag[uid] | 167 | local rune = self.owner.runeBag[uid] |
| 144 | local buildData = csvdb["rune_buildCsv"][rune:getProperty("level")] | 168 | local buildData = csvdb["rune_buildCsv"][rune:getProperty("level")] |
| 145 | for k,v in pairs(rune:getProperty("attrs"):toNumMap()) do | 169 | for k,v in pairs(rune:getProperty("attrs"):toNumMap()) do |
| 146 | - attrs.value[AttsEnumEx[k]] = attrs.value[AttsEnumEx[k]] + (v / 10 * (1 + buildData.effect/100)) -- 零件的加成属性有特殊需求 填的是 10倍的值 | ||
| 147 | - | 170 | + local attName = AttsEnumEx[k] |
| 171 | + -- 零件的加成属性有特殊需求 填的是 10倍的值 | ||
| 172 | + attrs.value[attName] = attrs.value[attName] + (v / 10) + addAttr(v / 10, buildData[attName], 1, attName) | ||
| 148 | end | 173 | end |
| 149 | local csvData = csvdb["runeCsv"][rune:getProperty("type")][rune:getProperty("id")] | 174 | local csvData = csvdb["runeCsv"][rune:getProperty("type")][rune:getProperty("id")] |
| 150 | if not suits[csvData.suit] then suits[csvData.suit] = {} end | 175 | if not suits[csvData.suit] then suits[csvData.suit] = {} end |