Blame view

src/models/HeroPlugin.lua 5.53 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
          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
  
6947e382   zhouahaihai   好感度, 皮肤
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
          --好感度
          local loveUp = {}
          for i = 0, self:getProperty("loveL") do
              local reward = csvdb["unit_love_effectCsv"][i]["reward"] 
              for attrId, value in pairs(reward:toNumMap()) do
                  loveUp[AttsEnumEx[attrId]] = (loveUp[AttsEnumEx[attrId]] or 0) + value
              end
          end
  
          --皮肤
          local skinUp = {}
          local reward = (csvdb["unit_skinCsv"][self:getSkinId()] or {})["reward"] or ""
          for attrId, value in pairs(reward:toNumMap()) do
              skinUp[AttsEnumEx[attrId]] = (skinUp[AttsEnumEx[attrId]] or 0) + value
          end
  
          --觉醒
8c74292c   zhouahaihai   增加item 以及 角色突破
86
87
          local wData = csvdb["unit_wakeCsv"][wakeL]
          for attr, value in pairs(attrs) do
6947e382   zhouahaihai   好感度, 皮肤
88
              attrs[attr] = attrs[attr] * (100 + (wData[attr .. "Level"] or 0) + (talentAttrS[attr] or 0) + (loveUp[attr] or 0) + (skinUp[attr] or 0)) / 100
8c74292c   zhouahaihai   增加item 以及 角色突破
89
90
91
92
93
94
95
96
97
98
          end
  
          return attrs
      end
  
      --当前属性 = [ 角色属性值 + 基础装备(固定)+ 专属装备(固定)] * [ 1 + 基础装备(百分比) + 专属装备(百分比)]
      function Hero:getTotalAttrs(params)
          local attrs = self:getBaseAttrs()
          return attrs
      end
014efebb   zhouahaihai   战斗力公式
99
      -- 战斗力(当前属性)= POWER[(生命 + 防御 * 7 + 闪避 * 4)*(攻击 + 命中 * 4)*(1 + 暴击几率/100 * 暴击伤害/100)* 攻击速度 / 60000 ,0.8 ]
8c74292c   zhouahaihai   增加item 以及 角色突破
100
101
      function Hero:getBattleValue()
          local attrs = self:getTotalAttrs()
014efebb   zhouahaihai   战斗力公式
102
          local battleValue = ((attrs["hp"] + attrs["def"] * 7 + attrs["miss"] * 4) * (attrs["atk"] + attrs["hit"] * 4) * (1 + attrs["crit"]/100 * attrs["critHurt"]/100) * attrs["atkSpeed"] / 60000) ^ 0.8
8c74292c   zhouahaihai   增加item 以及 角色突破
103
104
105
106
107
108
109
110
111
112
113
          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   技能养成
114
115
116
117
      function Hero:getSkillLevel(idx)
          return self:getProperty("skillL"):getv(idx, 1)
      end
  
6947e382   zhouahaihai   好感度, 皮肤
118
119
120
121
      function Hero:getSkillData(idx, skin)
          local unitData = csvdb["unitCsv"][self:getSkinId(skin)]
          if idx == 1 then
              return csvdb["skill_blockCsv"][unitData.block]
197f12ee   zhouahaihai   必杀技展示
122
123
          elseif idx == 2 then
              return csvdb["skill_specialCsv"][unitData.special]
2d2b5643   zhouahaihai   技能
124
125
          elseif idx == 3 then
              return csvdb["skill_passiveCsv"][unitData.passive]
46fac6f1   zhouahaihai   酱料
126
127
128
129
130
131
          elseif idx == 4 then --冒险技能
              if unitData.adv > 1000 then
                  return csvdb["adv_skill_passiveCsv"][unitData.adv]
              else
                  return csvdb["adv_skillCsv"][unitData.adv]
              end
6947e382   zhouahaihai   好感度, 皮肤
132
133
134
135
136
137
138
139
140
141
142
          end
          return {}
      end
  
      function Hero:getSkinId(skin)
          skin = skin or self:getProperty("skin")
          if skin == 0 then
              return self:getProperty("type")
          else
              return 30000 + self:getProperty("type") * 10 + skin
          end
997cbdfe   zhouahaihai   技能养成
143
      end
997cbdfe   zhouahaihai   技能养成
144
  
8c74292c   zhouahaihai   增加item 以及 角色突破
145
146
147
148
  end
  
  
  return HeroPlugin