Blame view

src/models/HeroPlugin.lua 10.3 KB
8c74292c   zhouahaihai   增加item 以及 角色突破
1
2
3
4
5
  local HeroPlugin = {}
  
  
  function HeroPlugin.bind(Hero)
  
3133cb76   zhouhaihai   日志
6
7
8
9
10
11
12
13
14
15
16
  	function Hero:log(contents)
  		contents = contents or {}
  		if contents["cint1"] or contents["cint2"] or contents["cint3"] then
  			print("heroLog error log have cint1 or cint2 or cint3 ", debug.traceback())
  		end
  		contents["cint1"] = self:getProperty("id")
  		contents["cint2"] = self:getProperty("type")
  
  		self.owner:log("hero_action", contents)
  	end
  
a43410e1   zhengshouren   整理格式,使用tab替代空格
17
18
19
20
  	function Hero:getMaxLevel()
  		return math.min(#csvdb["unit_expCsv"], csvdb["unit_breakCsv"][self:getProperty("breakL")].levelLimit)
  	end
  
028db777   zhouhaihai   属性加成
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
  
  	-- 纯% 的属性
  	local PercentAttr = {
  		crit = 6, 			-- 暴击
  		critHurt = 8, 		-- 暴伤
  		vampire = 9, 		-- 吸血
  		pierce = 10, 		-- 穿透
  	}
  	-- base 原, add 增加值 ,atype 增加类型(0 值 1%)
  	local function addAttr(base, add, atype, attrName)
  		base = base or 0
  		add = add or 0
  		if PercentAttr[attrName] then
  			atype = 0
  		end
  		if atype == 1 then
  			return base * add / 100
  		else
  			return add
  		end
  	end
  
c4262012   zhouhaihai   基础属性修改
43
  	--角色自身 = 初始 *(1+升级)*(1+突破)*(1+觉醒)+ 天赋升级 + 天赋阶段
a43410e1   zhengshouren   整理格式,使用tab替代空格
44
45
46
47
48
49
50
51
  	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")
  
c4262012   zhouhaihai   基础属性修改
52
  		--天赋
a43410e1   zhengshouren   整理格式,使用tab替代空格
53
  		local talentAttrS = {}
c4262012   zhouhaihai   基础属性修改
54
  
a43410e1   zhengshouren   整理格式,使用tab替代空格
55
  		-- 四个基础属性
1c35c4cf   gaofengduan   fix hero awake
56
  		local curData = csvdb["unit_talentCsv"][talent:getv(0, 1)]
a43410e1   zhengshouren   整理格式,使用tab替代空格
57
  		if not curData then -- 已经满阶段了
1c35c4cf   gaofengduan   fix hero awake
58
  			curData = csvdb["unit_talentCsv"][#csvdb["unit_talentCsv"]]
a43410e1   zhengshouren   整理格式,使用tab替代空格
59
60
  			local strength = curData[#curData].strength
  			for i = 1, 4 do
0446679e   zhouhaihai   bug
61
  				talentAttrS[TalentAttsEnumEx[i]] = (talentAttrS[TalentAttsEnumEx[i]] or 0) + strength
a43410e1   zhengshouren   整理格式,使用tab替代空格
62
63
64
  			end
  		else
  			for i = 1, 4 do --4个天赋
0446679e   zhouhaihai   bug
65
  				talentAttrS[TalentAttsEnumEx[i]] = (talentAttrS[TalentAttsEnumEx[i]] or 0) + curData[talent:getv(i, 0)].strength
a43410e1   zhengshouren   整理格式,使用tab替代空格
66
67
  			end
  		end
c4262012   zhouhaihai   基础属性修改
68
69
70
71
  		--阶段属性
  		for i = 1, (talent:getv(0, 1) - 1) do
  			local curData = csvdb["unit_talentCsv"][i]
  			local effect = curData[#curData].effect:toArray(true, "=")
cdbe8a36   zhouhaihai   天赋
72
  			talentAttrS[AttsEnumEx[effect[1]]] = (talentAttrS[AttsEnumEx[effect[1]]] or 0) + effect[2]
c4262012   zhouhaihai   基础属性修改
73
  		end
a43410e1   zhengshouren   整理格式,使用tab替代空格
74
  
c4262012   zhouhaihai   基础属性修改
75
  		
cdbe8a36   zhouhaihai   天赋
76
77
  		for _, attrName in pairs(AttsEnumEx) do
  			if talentAttrS[attrName] then
028db777   zhouhaihai   属性加成
78
  				talentAttrS[attrName] = addAttr(unitData[attrName], talentAttrS[attrName], 1, attrName)
cdbe8a36   zhouhaihai   天赋
79
  			end
c4262012   zhouhaihai   基础属性修改
80
  		end
a43410e1   zhengshouren   整理格式,使用tab替代空格
81
  
c4262012   zhouhaihai   基础属性修改
82
83
84
85
86
87
88
  		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]
a43410e1   zhengshouren   整理格式,使用tab替代空格
89
90
  		local wData = csvdb["unit_wakeCsv"][wakeL]
  		for attr, value in pairs(attrs) do
028db777   zhouhaihai   属性加成
91
92
93
  			attrs[attr] = attrs[attr] + addAttr(attrs[attr], lData[attr .. "Level"], 1, attr)
  			attrs[attr] = attrs[attr] + addAttr(attrs[attr], blData[attr .. "Level"], 1, attr)
  			attrs[attr] = attrs[attr] + addAttr(attrs[attr], wData[attr .. "Level"], 1, attr) + (talentAttrS[attr] or 0)
a43410e1   zhengshouren   整理格式,使用tab替代空格
94
95
96
97
98
  		end
  
  		return attrs
  	end
  
ece975b6   zhouhaihai   属性计算
99
  
699f4a74   zhouhaihai   属性公式修改
100
  	--当前属性 = 角色属性值 * (1 + 装备套装(百分比) + 铭文套装(百分比))+ (装备(固定)+ 铭文(固定))
a43410e1   zhengshouren   整理格式,使用tab替代空格
101
  	function Hero:getTotalAttrs(params)
b53593b5   zhouhaihai   羁绊加成
102
  		params = params or {}
a43410e1   zhengshouren   整理格式,使用tab替代空格
103
  		local attrs = self:getBaseAttrs()
ece975b6   zhouhaihai   属性计算
104
105
106
107
  		-- 装备零件
  		local equipAttrs = self:getRuneEquipAttrs()
  
  		for _, attName in pairs(AttsEnumEx) do
028db777   zhouhaihai   属性加成
108
  			attrs[attName] = attrs[attName] or 0
028db777   zhouhaihai   属性加成
109
  			attrs[attName] = attrs[attName] + addAttr(attrs[attName], equipAttrs.percent[attName], 1, attName)
699f4a74   zhouhaihai   属性公式修改
110
  			attrs[attName] = attrs[attName] + addAttr(attrs[attName], equipAttrs.value[attName], 0, attName)
ece975b6   zhouhaihai   属性计算
111
112
  		end
  
b53593b5   zhouhaihai   羁绊加成
113
114
  		-- 羁绊加成
  	    if params.activeRelation then
028db777   zhouhaihai   属性加成
115
116
  	        for k, attName in pairs(AttsEnumEx) do
  				attrs[attName] = attrs[attName] + addAttr(attrs[attName], params.activeRelation[attName], 1, attName)
b53593b5   zhouhaihai   羁绊加成
117
118
  	        end
  	    end
ece975b6   zhouhaihai   属性计算
119
120
121
122
123
  		return attrs
  	end
  
  	-- 当前零件和装备增加属性
  	function Hero:getRuneEquipAttrs()
acfc2f02   zhouhaihai   零件套装增加冒险战斗被动
124
  		local attrs = {value = {}, percent = {}}
ece975b6   zhouhaihai   属性计算
125
126
  		for _, attName in pairs(AttsEnumEx) do
  			attrs.value[attName] = 0
acfc2f02   zhouhaihai   零件套装增加冒险战斗被动
127
  			attrs.percent[attName] = 0
ece975b6   zhouhaihai   属性计算
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
  		end
  		local equipSuits = {}
  		-- 装备效果
  		for typ,level in pairs(self:getProperty("equip"):toNumMap()) do
  			if level > 0 then
  				local data = csvdb["equipCsv"][typ][level]
  				for k,v in pairs(data.attr1:toNumMap()) do
  					attrs.value[AttsEnumEx[k]] = attrs.value[AttsEnumEx[k]] + v
  				end
  				for k,v in pairs(data.attr2:toNumMap()) do
  					attrs.value[AttsEnumEx[k]] = attrs.value[AttsEnumEx[k]] + v
  				end
  				if data.suit ~= "" then
  					if not equipSuits[data.suit] then equipSuits[data.suit] = {} end
  					table.insert(equipSuits[data.suit], data)
  				end
  			end
  		end
  		-- 装备套装效果
  		for suitId,eDatas in pairs(equipSuits) do
  			local suitCsv = csvdb["equip_suitCsv"][tonumber(suitId)]
  			if suitCsv then 
  				local effects = suitCsv.effect:toTableArray(true)
  				local count = #eDatas
  				if count >= 2 then
acfc2f02   zhouhaihai   零件套装增加冒险战斗被动
153
  					attrs.percent[AttsEnumEx[effects[1][1]]] = attrs.percent[AttsEnumEx[effects[1][1]]] + effects[1][2]
ece975b6   zhouhaihai   属性计算
154
155
  				end
  				if count >= 3 then
acfc2f02   zhouhaihai   零件套装增加冒险战斗被动
156
  					attrs.percent[AttsEnumEx[effects[2][1]]] = attrs.percent[AttsEnumEx[effects[2][1]]] + effects[1][2]
ece975b6   zhouhaihai   属性计算
157
158
  				end
  				if count >= 4 then
acfc2f02   zhouhaihai   零件套装增加冒险战斗被动
159
  					attrs.percent[AttsEnumEx[effects[3][1]]] = attrs.percent[AttsEnumEx[effects[3][1]]] + effects[3][2]
ece975b6   zhouhaihai   属性计算
160
161
162
163
  				end
  			end
  		end
  		-- 零件效果
031dcf99   zhouhaihai   修改战斗属性计算 冒险增加效果类型
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
  	    local suits = {}
  	    for _, uid in pairs(self:getProperty("rune"):toNumMap()) do
  	        if uid > 0 then
  	            local rune = self.owner.runeBag[uid]
  	            local csvData = csvdb["runeCsv"][rune:getProperty("type")][rune:getProperty("id")]
  	            local runeRareData = csvdb["rune_rareCsv"][csvData.rarity]
  	            local buildData = csvdb["rune_buildCsv"][rune:getProperty("level")]
  	            for k, v in pairs(rune:getProperty("attrs"):toNumMap()) do
  	                local attName = AttsEnumEx[k]
  	                --零件的加成属性有特殊需求 填的是 10倍的值
  	                --rare的effect不影响 特殊属性
  
  	                --铭文单件普通属性=attr*(1+[rune_build表effect]/100*[rune_rare表effect]/100)
  					--铭文单件特殊属性=attr+[rune_build表effect]
  
  	                local effect = buildData[attName]
  	                if not PercentAttr[attName] then
  	                    effect = buildData[attName] * runeRareData.effect / 100
  	                end
01accc9c   zhouhaihai   属性计算
183
  	                attrs.value[attName] = attrs.value[attName] + (v / 100) + addAttr(v / 100, effect, 1, attName)
031dcf99   zhouhaihai   修改战斗属性计算 冒险增加效果类型
184
185
186
187
188
189
  	            end
  	            
  	            if not suits[csvData.suit] then suits[csvData.suit] = {} end
  	            table.insert(suits[csvData.suit],csvData)
  	        end
  	    end
ece975b6   zhouhaihai   属性计算
190
191
192
193
194
195
  		-- 零件套装效果
  		for suitId,runeDatas in pairs(suits) do
  			local suitCsv = csvdb["rune_suitCsv"][tonumber(suitId)]
  			if suitCsv then
  				local effects = suitCsv.effect:toTableArray(true)
  				local count = #runeDatas
acfc2f02   zhouhaihai   零件套装增加冒险战斗被动
196
197
198
199
200
  				if count >= 2 and AttsEnumEx[effects[1][1]]then
  					attrs.percent[AttsEnumEx[effects[1][1]]] = attrs.percent[AttsEnumEx[effects[1][1]]] + effects[1][2]
  				end
  				if count >= 4 and AttsEnumEx[effects[2][1]] then
  					attrs.percent[AttsEnumEx[effects[2][1]]] = attrs.percent[AttsEnumEx[effects[2][1]]] + effects[2][2]
ece975b6   zhouhaihai   属性计算
201
  				end
acfc2f02   zhouhaihai   零件套装增加冒险战斗被动
202
203
  				if count >= 6 and AttsEnumEx[effects[3][1]] then
  					attrs.percent[AttsEnumEx[effects[3][1]]] = attrs.percent[AttsEnumEx[effects[3][1]]] + effects[3][2]
ece975b6   zhouhaihai   属性计算
204
205
206
  				end
  			end
  		end
a43410e1   zhengshouren   整理格式,使用tab替代空格
207
208
  		return attrs
  	end
ece975b6   zhouhaihai   属性计算
209
  
475a6d03   zhouhaihai   战斗力
210
  
17d9316a   zhouhaihai   修改 公式
211
  	-- 战斗力(当前属性)= POWER[(生命 + 防御 * 7 + 闪避 * 4)*(攻击*4 + 命中 * 2)*(1 + 暴击几率/100 * 暴击伤害/100)* 攻击速度 / 60000 ,0.8 ]
475a6d03   zhouhaihai   战斗力
212
213
  	function Hero:getBattleValue(activeRelation) -- isReal包括队伍加成
  	    local attrs = self:getTotalAttrs({activeRelation = activeRelation})
17d9316a   zhouhaihai   修改 公式
214
  	    local battleValue = ((attrs["hp"] + attrs["def"] * 7 + attrs["miss"] * 4) * (attrs["atk"] * 4 + attrs["hit"] * 2) * (1 + attrs["crit"]/100 * attrs["critHurt"]/100) * attrs["atkSpeed"] / 600000) ^ 0.8
475a6d03   zhouhaihai   战斗力
215
  	    return math.floor(battleValue)
a43410e1   zhengshouren   整理格式,使用tab替代空格
216
217
218
219
220
221
222
223
224
225
  	end
  
  	function Hero:saveBattleValue()
  		local battleValue = self:getBattleValue()
  		if battleValue ~= self:getProperty("battleV") then
  			self:setProperty("battleV", battleValue)
  		end
  		return battleValue
  	end
  
1c35c4cf   gaofengduan   fix hero awake
226
  	-- 技能1234 对应必杀技,冒险技,被动技,战斗技
a43410e1   zhengshouren   整理格式,使用tab替代空格
227
  	function Hero:getSkillLevel(idx)
0889982f   zhouhaihai   优化角色技能等级
228
229
230
231
232
233
234
235
236
237
  		local level = 1
  		for wakeL = 1, self:getProperty("wakeL") do
  			local wakeData = csvdb["unit_wakeCsv"][wakeL]
  			for _, slot in ipairs(wakeData.skill:toArray(true,"=")) do
  				if slot == idx then
  					level = level + 1
  				end
  			end
  		end
  		return level
a43410e1   zhengshouren   整理格式,使用tab替代空格
238
239
  	end
  
f2fa488d   wangyujie   删除skin相关
240
  	function Hero:getSkillData(idx)
1c35c4cf   gaofengduan   fix hero awake
241
  		local unitData = csvdb["unitCsv"][self:getProperty("type")]
a43410e1   zhengshouren   整理格式,使用tab替代空格
242
  		if idx == 1 then
a43410e1   zhengshouren   整理格式,使用tab替代空格
243
  			return csvdb["skill_specialCsv"][unitData.special]
1c35c4cf   gaofengduan   fix hero awake
244
  		elseif idx == 2 then
61421173   zhouhaihai   冒险技能取战斗的
245
  			return csvdb["adv_battle_specialCsv"][unitData.adv]
1c35c4cf   gaofengduan   fix hero awake
246
247
248
249
  		elseif idx == 3 then
  			return csvdb["skill_passiveCsv"][unitData.passive]
  		elseif idx == 4 then
  			return csvdb["skill_blockCsv"][unitData.block]
a43410e1   zhengshouren   整理格式,使用tab替代空格
250
251
252
  		end
  		return {}
  	end
a6508219   zhouhaihai   挂机奖励
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
  
  	function Hero:getRunes()
  	    local rune = self:getProperty("rune")
  	    if not rune or rune == "" then
  	        rune = "1=0 2=0 3=0 4=0 5=0 6=0"
  	    end
  	    local result = rune:toNumMap()
  	    for i = 1, 6 do
  	        if not result[i] then
  	            result[i] = 0
  	        end
  	    end
  	    return result
  	end
  
  	-- 101 冒险战斗被动技
  	-- 102 挂机战斗被动技
  	function Hero:getRuneSkill(skillType)
  	    local suits = {}
  	    for _,uid in pairs(self:getRunes()) do
  	        if uid > 0 then
  	            local runeData = self.owner.runeBag[uid]
  	            if not runeData then return  end
02538652   zhouhaihai   复制bug
276
  	            local csvData = csvdb["runeCsv"][runeData:getProperty("type")][runeData:getProperty("id")]
a6508219   zhouhaihai   挂机奖励
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
  	            if not suits[csvData.suit] then suits[csvData.suit] = {} end
  	            table.insert(suits[csvData.suit],csvData)
  	        end
  	    end
  
  	    for suitId,runes in pairs(suits) do
  	        local suitCsv = csvdb["rune_suitCsv"][tonumber(suitId)]
  	        if not suitCsv then return  end
  	        local effects = suitCsv.effect:toTableArray(true)
  	        local count = #runes
  	        if count >= 2 and effects[1][1] == skillType then
  	            return effects[1][2]
  	        end
  	        if count >= 4 and effects[2][1] == skillType then
  	            return effects[2][2]
  	        end
  	        if count >= 6 and effects[3][1] == skillType then
  	            return effects[3][2]
  	        end
  	    end
  	    return
  	end
8c74292c   zhouahaihai   增加item 以及 角色突破
299
300
301
302
  end
  
  
  return HeroPlugin