Blame view

src/models/HeroPlugin.lua 3.86 KB
8c74292c   zhouahaihai   增加item 以及 角色突破
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
  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
          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 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)) / 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
  
  end
  
  
  return HeroPlugin