Blame view

src/models/HeroPlugin.lua 4.13 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
  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
997cbdfe   zhouahaihai   技能养成
23
              point = point - (level - 1)
8c74292c   zhouahaihai   增加item 以及 角色突破
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
          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
  
997cbdfe   zhouahaihai   技能养成
97
98
99
100
101
102
103
104
105
106
107
      function Hero:getSkillLevel(idx)
          return self:getProperty("skillL"):getv(idx, 1)
      end
  
      function Hero:getSkillData(idx)
      if idx == 1 then
          return csvdb["skill_blockCsv"][csvdb["unitCsv"][self:getProperty("type")].block]
      end
      return {}
  end
  
8c74292c   zhouahaihai   增加item 以及 角色突破
108
109
110
111
  end
  
  
  return HeroPlugin