46fac6f1
zhouahaihai
酱料
|
1
2
|
-- 角色
local Buff = require "adv.AdvBuff"
|
1b8336a6
suhongyang
skill逻辑与player分开
|
3
|
local Skill = require "adv.AdvSkill"
|
46fac6f1
zhouahaihai
酱料
|
4
5
6
7
8
9
10
11
|
local Passive = require "adv.AdvPassive"
local BaseObject = class("BaseObject")
function BaseObject:ctor(battle)
self.battle = battle
self.hpMax = 0
self.hp = 0
self.atk = 0
|
e996b82a
zhouahaihai
冒险增加防御属性
|
12
|
self.def = 0
|
46fac6f1
zhouahaihai
酱料
|
13
14
15
16
|
self.aType = 0 --攻击类型
self.lock = nil
self.passives = {} --固有技能
self.buffs = {} --buff
|
42f2d1d3
suhongyang
战斗内技能序列逻辑
|
17
|
self.skillOrder = {} --战斗内技能序列
|
46fac6f1
zhouahaihai
酱料
|
18
|
self.isDead = false
|
46fac6f1
zhouahaihai
酱料
|
19
20
21
22
23
|
end
--初始化角色
function BaseObject:initData(data)
self.hpMax = data.hpMax or data.hp
self.hp = data.hp
|
46fac6f1
zhouahaihai
酱料
|
24
25
26
27
|
--可变化的值
self.atk = data.atk
self.miss = data.miss
self.hit = data.hit
|
e996b82a
zhouahaihai
冒险增加防御属性
|
28
|
self.def = data.def
|
46fac6f1
zhouahaihai
酱料
|
29
30
31
32
|
--基础值记录
self._atk = data._atk or self.atk
self._miss = data._miss or self.miss
self._hit = data._hit or self.hit
|
e996b82a
zhouahaihai
冒险增加防御属性
|
33
|
self._def = data._def or self.def
|
46fac6f1
zhouahaihai
酱料
|
34
35
36
37
|
end
-- 角色初始化完以后才是 技能和被动技能 方便初始化 buff 的 释放对象
function BaseObject:initAfter(data)
for _, passive in ipairs(data.passives or {}) do
|
36c30c5c
zhouahaihai
冒险
|
38
|
table.insert(self.passives, Passive.new(self, passive))
|
46fac6f1
zhouahaihai
酱料
|
39
40
41
42
43
44
|
end
for _, buff in ipairs(data.buffs or {}) do
table.insert(self.buffs, Buff.load(self, buff))
end
end
|
a734980c
suhongyang
冒险战斗数据打完以前不存储
|
45
46
47
48
49
50
51
|
function BaseObject:reset(data)
self.passives = {}
self.buffs = {}
self:initData(data)
self:initAfter(data)
end
|
46fac6f1
zhouahaihai
酱料
|
52
53
54
55
56
|
function BaseObject:afterRound()
for _, passive in ipairs(self.passives) do
passive:afterRound(self)
end
for _, buff in ipairs(self.buffs) do
|
0d405dc3
suhongyang
Buff生命周期调整,被动加buf...
|
57
|
buff:afterRound()
|
46fac6f1
zhouahaihai
酱料
|
58
59
60
|
end
end
|
46fac6f1
zhouahaihai
酱料
|
61
62
63
64
65
66
67
68
69
|
function BaseObject:clearRound()
for i = #self.passives, 1, -1 do
if self.passives[i].isDel then
self.passives[i]:endPassive()
table.remove(self.passives, i)
end
end
for i = #self.buffs, 1, -1 do
if self.buffs[i].isDel then
|
36c30c5c
zhouahaihai
冒险
|
70
|
self.battle.adv:backBuff(self.id, self.buffs[i].id, true)
|
46fac6f1
zhouahaihai
酱料
|
71
72
73
74
75
76
77
78
79
80
|
self.buffs[i]:endBuff()
table.remove(self.buffs, i)
end
end
end
function BaseObject:clear()
self.buffs = {}
self.passives = {}
end
|
821f2b60
suhongyang
冒险战斗完善,增加battlebe...
|
81
|
function BaseObject:battleBegin()
|
65de8cf1
suhongyang
被动逻辑进一步修缮
|
82
|
for _, passive in ipairs(self.passives) do
|
821f2b60
suhongyang
冒险战斗完善,增加battlebe...
|
83
|
passive:battleBegin()
|
65de8cf1
suhongyang
被动逻辑进一步修缮
|
84
|
end
|
0d405dc3
suhongyang
Buff生命周期调整,被动加buf...
|
85
86
87
|
end
function BaseObject:battleEnd()
|
7c55db1f
suhongyang
Buff逻辑完善,buff生效次数...
|
88
|
for _, buff in ipairs(self.buffs) do
|
0d405dc3
suhongyang
Buff生命周期调整,被动加buf...
|
89
|
buff:battleEnd()
|
7c55db1f
suhongyang
Buff逻辑完善,buff生效次数...
|
90
|
end
|
65de8cf1
suhongyang
被动逻辑进一步修缮
|
91
92
|
end
|
23a38f47
suhongyang
new passives effect
|
93
94
|
function BaseObject:addPassive(params)
local skillId = params.id
|
3b0526d2
zhouhaihai
冒险demo
|
95
|
local skillData = csvdb["adv_map_passiveCsv"][skillId]
|
23a38f47
suhongyang
new passives effect
|
96
97
98
99
|
if not skillData then return end
local level = params.level or 1
if not skillData[level] then return end
table.insert(self.passives, Passive.new(self, { id = skillId, level = level }))
|
4eadc2ab
suhongyang
獲得被動暫時增加log,後面可以去掉
|
100
101
|
self.battle.adv:backPassive(self.id, skillId)
|
23a38f47
suhongyang
new passives effect
|
102
103
|
end
|
4f0a5fae
zhouhaihai
营养剂
|
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
|
function BaseObject:getPassiveIdx(passive)
for idx, passive_ in ipairs(self.passives) do
if passive_ == passive then
return idx
end
end
end
function BaseObject:getDisablePassiveCount()
local count = 0
for _, buff in ipairs(self.buffs) do
if not buff.isDel and buff:getType() == Buff.DISABLE_BUFF then
count = count + buff:effect()
end
end
return count
end
|
46fac6f1
zhouahaihai
酱料
|
122
|
function BaseObject:addBuff(buffId, releaser)
|
3b0526d2
zhouhaihai
冒险demo
|
123
|
local buffData = csvdb["adv_map_buffCsv"][buffId]
|
46fac6f1
zhouahaihai
酱料
|
124
125
|
if not buffData then return end
for _, buff in ipairs(self.buffs) do
|
7c55db1f
suhongyang
Buff逻辑完善,buff生效次数...
|
126
127
128
|
if not buff.isDel and (buff:getType() == Buff.CLEAR_BUFF or buff:getType() == Buff.IMMNUE_BUFF) then
if buff:canEffect(buffId, buffData.group) then
buff:effect()
|
46fac6f1
zhouahaihai
酱料
|
129
130
131
132
133
|
return
end
end
end
table.insert(self.buffs, Buff.create(self, releaser, {id = buffId}))
|
36c30c5c
zhouahaihai
冒险
|
134
135
|
self.battle.adv:backBuff(self.id, buffId)
|
46fac6f1
zhouahaihai
酱料
|
136
137
|
end
|
916096ed
zhouhaihai
神器效果
|
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
|
function BaseObject:delBuffById(bId)
for _, buff in ipairs(self.buffs) do
if not buff.isDel and buff.id == bId then
buff.isDel = true
return buff
end
end
end
function BaseObject:delPassiveById(pId)
for _, passive in ipairs(self.passives) do
if not passive.isDel and passive.id == pId then
passive.isDel = true
return passive
end
end
end
|
46fac6f1
zhouahaihai
酱料
|
156
157
158
|
function BaseObject:hadBuff(bType)
for _, buff in ipairs(self.buffs) do
if not buff.isDel and buff:getType() == bType then
|
7828ffd0
zhouhaihai
冒险 连续选择点 和 地图因子
|
159
|
return buff
|
46fac6f1
zhouahaihai
酱料
|
160
161
162
163
|
end
end
end
|
1cb78a24
suhongyang
passive的筛选
|
164
165
166
|
function BaseObject:hadBuffById(bId)
for _, buff in ipairs(self.buffs) do
if not buff.isDel and buff.id == bId then
|
7828ffd0
zhouhaihai
冒险 连续选择点 和 地图因子
|
167
|
return buff
|
1cb78a24
suhongyang
passive的筛选
|
168
169
170
171
|
end
end
end
|
916096ed
zhouhaihai
神器效果
|
172
|
|
46fac6f1
zhouahaihai
酱料
|
173
174
175
176
177
|
-- 通用的buff 效果汇总 -- 0 固定 1百分比 两种分类
function BaseObject:getCommonBuffEffect(bType)
local effect, count = {[0] = 0, [1] = 0}, 0
for _, buff in ipairs(self.buffs) do
if not buff.isDel and buff:getType() == bType then
|
7c55db1f
suhongyang
Buff逻辑完善,buff生效次数...
|
178
|
local cType, value = buff:effect()
|
46fac6f1
zhouahaihai
酱料
|
179
|
if cType then
|
4ae223df
zhouahaihai
Buff bug
|
180
|
effect[cType] = effect[cType] + value
|
46fac6f1
zhouahaihai
酱料
|
181
182
183
184
|
count = count + 1
end
end
end
|
4ae223df
zhouahaihai
Buff bug
|
185
|
effect[1] = effect[1] / 100
|
46fac6f1
zhouahaihai
酱料
|
186
187
188
189
190
191
192
|
return effect, count --效果 和生效的buff 个数
end
--伤害反弹
function BaseObject:getBackHurtBuff(isAtk)
local effect = {[0] = 0, [1] = 0}
for _, buff in ipairs(self.buffs) do
if not buff.isDel and buff:getType() == Buff.BACK_HURT then
|
7c55db1f
suhongyang
Buff逻辑完善,buff生效次数...
|
193
|
local cType, value, aType = buff:effect() -- aType 0 全部 1 普通攻击
|
46fac6f1
zhouahaihai
酱料
|
194
195
|
if cType then
if aType == 0 or isAtk then
|
4ae223df
zhouahaihai
Buff bug
|
196
|
effect[cType] = effect[cType] + value
|
46fac6f1
zhouahaihai
酱料
|
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
|
end
end
end
end
return effect
end
--释放者伤害变化
function BaseObject:getHurtChange()
local change = self:getCommonBuffEffect(Buff.HURT_CHANGE)
return change
end
--受伤者受伤变化
function BaseObject:getInjuredChange()
local change = self:getCommonBuffEffect(Buff.INJURED_CHANGE)
return change
end
--重新计算属性
function BaseObject:reSetAttr(field)
|
36c30c5c
zhouahaihai
冒险
|
216
|
local old = self[field]
|
46fac6f1
zhouahaihai
酱料
|
217
|
self[field] = self["_" .. field] --重置一下
|
7c55db1f
suhongyang
Buff逻辑完善,buff生效次数...
|
218
|
local fieldToBuff = {atk = Buff.ATK_CHANGE, hit = Buff.HIT_CHANGE, miss = Buff.MISS_CHANGE, def = Buff.DEF_CHANGE}
|
46fac6f1
zhouahaihai
酱料
|
219
|
local effect = self:getCommonBuffEffect(fieldToBuff[field])
|
e10edb5f
zhouahaihai
冒险事件新
|
220
|
self[field] = math.ceil((self[field] + effect[0]) * (1 + effect[1]))
|
36c30c5c
zhouahaihai
冒险
|
221
222
223
224
|
local delta = self[field] - old
if delta ~= 0 then
if field == "atk" then
self.battle.adv:backAtkChange(self.id, delta)
|
e996b82a
zhouahaihai
冒险增加防御属性
|
225
226
|
elseif field == "def" then
self.battle.adv:backDefChange(self.id, delta)
|
36c30c5c
zhouahaihai
冒险
|
227
228
|
end
end
|
46fac6f1
zhouahaihai
酱料
|
229
230
231
232
233
234
235
236
237
238
239
|
end
--计算打出伤害加成后的值
function BaseObject:getHurtValue(value)
value = value or self.atk
local hurtChange = self:getHurtChange()
return math.max(0, (value + hurtChange[0]) * (1 + hurtChange[1]))
end
--计算自己伤害减免后的值
function BaseObject:getInjuredValue(value)
local injuredChange = self:getInjuredChange()
|
e996b82a
zhouahaihai
冒险增加防御属性
|
240
|
return math.max(0, (value + injuredChange[0]) * (1 + injuredChange[1]) - self.def)
|
46fac6f1
zhouahaihai
酱料
|
241
242
|
end
|
ae9a74b5
suhongyang
返回miss,快速战斗逻辑
|
243
|
--最终伤害 = [ (敌方攻击 - 己方防御) * (1+伤害增加百分比-伤害减少百分比)*(1+受伤增加百分比-受伤减少百分比)+(伤害增加固定值-伤害增加固定值+受伤增加固定值-受伤增加固定值)]*(1+侍宠百分比)-侍宠固定值
|
53e8037e
zhouhaihai
任务
|
244
|
-- params -- hurtType 1 普攻伤害 2 buff伤害 3 反弹伤害 4 真实伤害 5 客户端发回来的伤害 --直接作用 6 buff伤害(真实)
|
46fac6f1
zhouahaihai
酱料
|
245
246
247
248
|
--进入这个方法之前计算好释放者加成的伤害
function BaseObject:hurt(value, releaser, params)
params = params or {}
if params.hurtType and params.hurtType == 1 then
|
02c4de8d
zhouahaihai
增加 固有技
|
249
250
251
252
|
releaser:triggerPassive(Passive.SELF_ATK)
for _, team in ipairs(releaser:getTeam(1, true)) do
team:triggerPassive(Passive.TEAM_ATK)
end
|
46fac6f1
zhouahaihai
酱料
|
253
254
255
256
|
if self:hadBuff(Buff.IMMNUE_ATK) then return end --无视普通攻击
local hit = releaser.hit - self.miss --命中率
if hit < math.randomInt(1, 100) then --miss
|
ae9a74b5
suhongyang
返回miss,快速战斗逻辑
|
257
|
self.battle.adv:backMiss(self.id)
|
46fac6f1
zhouahaihai
酱料
|
258
259
|
return
end
|
02c4de8d
zhouahaihai
增加 固有技
|
260
261
262
263
|
self:triggerPassive(Passive.SELF_HURT, {trigger = releaser})
for _, team in ipairs(self:getTeam(1, true)) do
team:triggerPassive(Passive.TEAM_HURT, {trigger = releaser})
end
|
46fac6f1
zhouahaihai
酱料
|
264
|
end
|
53e8037e
zhouhaihai
任务
|
265
|
if params.hurtType ~= 5 and params.hurtType ~= 6 then
|
12f7b52c
zhouhaihai
冒险战斗
|
266
267
|
if not params.hurtType or params.hurtType ~= 4 then
value = self:getInjuredValue(value) --减伤计算
|
46fac6f1
zhouahaihai
酱料
|
268
|
end
|
12f7b52c
zhouhaihai
冒险战斗
|
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
|
if value == 0 then return end
-- 舍身和恃宠
local team = self:getTeam(1)
local transfer = {}
local absorb = {}
for _, one in ipairs(team) do
local change1, count1 = one:getCommonBuffEffect(Buff.INJURED_CHANGE)
local change2, count2 = one:getCommonBuffEffect(Buff.HURT_ABSORB)
if count1 > 0 then
table.insert(transfer, {one, change1, count1})
end
if count2 > 0 then
table.insert(absorb, {one, change2, count2})
end
|
46fac6f1
zhouahaihai
酱料
|
284
|
end
|
12f7b52c
zhouhaihai
冒险战斗
|
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
|
if #absorb == 1 then --舍身优先级高 --舍身生效
if absorb[1][1] ~= self then --舍身的人不是自己才有效
local absorbV = (value - absorb[1][2][0]) * absorb[1][2][1] + absorb[1][2][0] --固定值先生效
value = value - absorbV
absorb[1][1]:hurt(absorbV, releaser, params)
end
else
if #transfer == 1 and transfer[1][1] == self and #team > 1 then --侍宠 生效
local transferValue = (value - transfer[1][2][0])* transfer[1][2][1] + transfer[1][2][0] --固定值先生效
value = value - transferValue
local oneValue = transferValue / (#team - 1)
for _, one in ipairs(team) do
if one ~= self then
one:hurt(oneValue, releaser, params)
end
|
46fac6f1
zhouahaihai
酱料
|
300
301
302
303
304
|
end
end
end
end
|
e10edb5f
zhouahaihai
冒险事件新
|
305
|
value = math.max(0, math.ceil(value))
|
46fac6f1
zhouahaihai
酱料
|
306
307
|
if value == 0 then return end
-- 反弹伤害
|
12f7b52c
zhouhaihai
冒险战斗
|
308
|
if params.hurtType ~= 3 and params.hurtType ~= 5 and releaser and not releaser.isDead then
|
46fac6f1
zhouahaihai
酱料
|
309
310
311
312
313
314
|
local backEffect = self:getBackHurtBuff(params.hurtType == 1)
local backValue = math.max(0, value * backEffect[1] + backEffect[0])
releaser:hurt(backValue, releaser, {hurtType = 3})
end
--受伤了~
|
36c30c5c
zhouahaihai
冒险
|
315
|
self.battle.adv:backHpChange(self.id, -value)
|
46fac6f1
zhouahaihai
酱料
|
316
|
self.hp = math.max(0, self.hp - value)
|
b0fe1817
zhouahaihai
冒险分数
|
317
318
319
320
321
|
if self.cutHp then
self:cutHp(value)
end
|
46fac6f1
zhouahaihai
酱料
|
322
|
if self.hp == 0 then
|
02c4de8d
zhouahaihai
增加 固有技
|
323
324
325
326
327
|
self:triggerPassive(Passive.SELF_DEAD)
for _, team in ipairs(self:getTeam(1, true)) do
team:triggerPassive(Passive.TEAM_DEAD)
end
|
53e8037e
zhouhaihai
任务
|
328
|
if (params.hurtType == 6 or params.hurtType == 2) and self ~= self.battle.player then
|
b176d7d3
zhouhaihai
冒险成就
|
329
330
331
|
self.battle.adv:checkAchievement(self.battle.adv.AchievType.KillByBuff, 1, params.buffId)
end
|
46fac6f1
zhouahaihai
酱料
|
332
|
self.isDead = true
|
bedca62d
zhouahaihai
冒险
|
333
|
self.battle.adv:backDead(self.id)
|
46fac6f1
zhouahaihai
酱料
|
334
|
end
|
02c4de8d
zhouahaihai
增加 固有技
|
335
336
337
338
|
self:triggerPassive(Passive.HURT_PERCENT_SELF, {value = value / self.hpMax})
for _, team in ipairs(self:getTeam(1, true)) do
team:triggerPassive(Passive.HURT_PERCENT_TEAM, {value = value / self.hpMax})
end
|
46fac6f1
zhouahaihai
酱料
|
339
340
341
342
|
end
--恢复
function BaseObject:recover(value, releaser, params)
params = params or {}
|
e10edb5f
zhouahaihai
冒险事件新
|
343
|
value = math.max(0, math.ceil(value))
|
46fac6f1
zhouahaihai
酱料
|
344
|
self.hp = math.min(self.hpMax, self.hp + value)
|
36c30c5c
zhouahaihai
冒险
|
345
|
self.battle.adv:backHpChange(self.id, value)
|
46fac6f1
zhouahaihai
酱料
|
346
347
|
end
|
42f2d1d3
suhongyang
战斗内技能序列逻辑
|
348
349
350
351
352
|
function BaseObject:addSpecialSkill(skillId, skillLevel, target)
local skillData = {id = skillId, level = skillLevel, target = target}
table.insert(self.skillOrder, skillData)
end
|
d27ad5e0
suhongyang
使用营养技
|
353
|
function BaseObject:releaseSkill(skillId, target)
|
36c30c5c
zhouahaihai
冒险
|
354
|
if self:hadBuff(Buff.CANT_SKILL) then return end -- 针对 怪物
|
d27ad5e0
suhongyang
使用营养技
|
355
|
local skill = Skill.new(self, {id = skillId, target = target})
|
36c30c5c
zhouahaihai
冒险
|
356
|
--返回客户端
|
1b8336a6
suhongyang
skill逻辑与player分开
|
357
|
for _, target in ipairs(skill:getTargets()) do
|
36c30c5c
zhouahaihai
冒险
|
358
359
|
self.battle.adv:backSkill(self.id, skillId, target.id)
end
|
1b8336a6
suhongyang
skill逻辑与player分开
|
360
|
skill:doEffect()
|
02c4de8d
zhouahaihai
增加 固有技
|
361
362
363
364
365
366
|
for _, team in ipairs(self:getTeam(2)) do
team:triggerPassive(Passive.TARGET_SKILL)
end
for _, team in ipairs(self:getTeam(1, true)) do
team:triggerPassive(Passive.TEAM_SKILL)
end
|
46fac6f1
zhouahaihai
酱料
|
367
368
369
|
end
--0 全部 1 我方 2 敌方
|
53e8037e
zhouhaihai
任务
|
370
|
function BaseObject:getTeam(nType, noSelf, mapIdx, includeLock)
|
43babcff
zhouhaihai
优化冒险结构 增加夹层功能
|
371
|
mapIdx = mapIdx or self.battle.adv:getCurMapIdx()
|
46fac6f1
zhouahaihai
酱料
|
372
373
374
375
376
377
378
379
380
381
|
nType = nType or 0
local team = {}
local function addPlayer()
if not noSelf or self.battle.player ~= self then
if not self.battle.player.isDead then
table.insert(team, self.battle.player)
end
end
end
local function addEnemy()
|
43babcff
zhouhaihai
优化冒险结构 增加夹层功能
|
382
|
for _, enemy in pairs(self.battle.enemys[mapIdx]) do
|
46fac6f1
zhouahaihai
酱料
|
383
|
if not noSelf or enemy ~= self then
|
53e8037e
zhouhaihai
任务
|
384
|
if not enemy.isDead and (includeLock or not enemy.lock) then -- 已经翻开的
|
46fac6f1
zhouahaihai
酱料
|
385
386
387
388
389
390
391
392
393
|
table.insert(team, enemy)
end
end
end
end
if nType == 0 then
addPlayer()
addEnemy()
elseif nType == 1 then
|
b594a026
suhongyang
Fix bug
|
394
|
if not self.monsterId then --玩家
|
46fac6f1
zhouahaihai
酱料
|
395
396
397
398
399
|
addPlayer()
else
addEnemy()
end
elseif nType == 2 then
|
b594a026
suhongyang
Fix bug
|
400
|
if not self.monsterId then --玩家
|
46fac6f1
zhouahaihai
酱料
|
401
402
403
404
405
406
407
408
409
410
411
412
|
addEnemy()
else
addPlayer()
end
end
return team
end
function BaseObject:getDB()
local db = {}
db.hpMax = self.hpMax
db.hp = self.hp
|
e996b82a
zhouahaihai
冒险增加防御属性
|
413
|
local baseAttr = {"atk", "miss", "hit", "def"}
|
46fac6f1
zhouahaihai
酱料
|
414
415
416
417
418
419
420
421
|
for _, field in pairs(baseAttr) do
db[field] = self[field]
db["_"..field] = self["_" .. field]
end
db.passives = {}
for _, passive in ipairs(self.passives) do
table.insert(db.passives, passive:getDB())
end
|
4ae223df
zhouahaihai
Buff bug
|
422
|
db.buffs = {}
|
46fac6f1
zhouahaihai
酱料
|
423
424
425
426
427
428
429
|
for _, buff in ipairs(self.buffs) do
table.insert(db.buffs, buff:getDB())
end
return db
end
function BaseObject:triggerPassive(condType, params)
|
02c4de8d
zhouahaihai
增加 固有技
|
430
431
432
433
|
if self.isDead then return end
for _, passive in ipairs(self.passives) do
passive:trigger(condType, params) --检查触发
end
|
46fac6f1
zhouahaihai
酱料
|
434
435
|
end
|
3b0526d2
zhouhaihai
冒险demo
|
436
437
438
|
function BaseObject:changeSp()
end
|
46fac6f1
zhouahaihai
酱料
|
439
|
local Enemy = class("Enemy", BaseObject)
|
43babcff
zhouhaihai
优化冒险结构 增加夹层功能
|
440
|
function Enemy:ctor(battle, mId, monsterId, roomId, blockId, lock, enemy, mapIdx)
|
46fac6f1
zhouahaihai
酱料
|
441
|
Enemy.super.ctor(self, battle)
|
36c30c5c
zhouahaihai
冒险
|
442
443
|
self.id = mId
self.monsterId = monsterId --数据id
|
46fac6f1
zhouahaihai
酱料
|
444
445
446
|
self.roomId = roomId
self.blockId = blockId
self.lock = lock
|
43babcff
zhouhaihai
优化冒险结构 增加夹层功能
|
447
|
self.mapIdx = mapIdx
|
46fac6f1
zhouahaihai
酱料
|
448
449
450
451
452
453
454
455
456
457
458
459
460
|
self:initData(enemy)
end
function Enemy:unlock(id)
self.id = id
self.lock = nil
end
local Player = class("Player", BaseObject)
function Player:ctor(battle, data)
Player.super.ctor(self, battle)
self:initData(data)
end
|
b0fe1817
zhouahaihai
冒险分数
|
461
462
463
464
|
function Player:cutHp(value)
self.battle.adv:scoreChange(AdvScoreType.Hurt, value)
end
|
b53593b5
zhouhaihai
羁绊加成
|
465
466
|
function Player:initData(data)
Player.super.initData(self, data)
|
386ca58e
zhouhaihai
优化log
|
467
|
self.level = data.level or 1 --level 每增加1级 属性增长 growth * baseAttr
|
b53593b5
zhouhaihai
羁绊加成
|
468
469
|
self.growth = data.growth or 0
self.exp = data.exp or 0
|
3b0526d2
zhouhaihai
冒险demo
|
470
|
self.sp = data.sp or 100
|
b53593b5
zhouhaihai
羁绊加成
|
471
472
473
|
end
function Player:addExp(value)
|
4f0a5fae
zhouhaihai
营养剂
|
474
475
476
477
|
-- buff 经验加成
local up = self:getCommonBuffEffect(Buff.EXP_UP)
value = math.ceil((value + up[0]) * (1 + up[1]))
|
51718558
zhouhaihai
中继层初始经验
|
478
|
if value <= 0 then return end
|
6732f756
zhouhaihai
玩家升级
|
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
|
local newExp = self.exp + value
local level = self.level
if level >= #csvdb["adv_levelCsv"] then return end
while true do
local curData = csvdb["adv_levelCsv"][level]
if newExp < curData.exp then break end
level = level + 1
newExp = newExp - curData.exp
if level >= #csvdb["adv_levelCsv"] then break end
end
local delta = level - self.level
if delta > 0 then
local baseAttr = csvdb["adv_unitCsv"][self.battle.adv.chapterId]
for _, attr in pairs(AttsEnumEx) do
if baseAttr[attr] then
|
8019d0bb
zhouhaihai
冒险buff 调整
|
494
|
self[attr] = self[attr] + self.growth * delta
|
6732f756
zhouhaihai
玩家升级
|
495
|
if attr == "hp" then
|
8019d0bb
zhouhaihai
冒险buff 调整
|
496
|
self.hpMax = self.hpMax + self.growth * delta
|
6732f756
zhouhaihai
玩家升级
|
497
|
else
|
8019d0bb
zhouhaihai
冒险buff 调整
|
498
|
self["_" .. attr] = self["_" .. attr] + self.growth * delta
|
6732f756
zhouhaihai
玩家升级
|
499
500
501
502
503
504
|
end
end
end
end
self.level = level
self.exp = newExp
|
b53593b5
zhouhaihai
羁绊加成
|
505
506
|
end
|
3b0526d2
zhouhaihai
冒险demo
|
507
508
509
510
511
512
513
514
515
516
517
518
|
--cType 0 or nil 值 1 百分比
function Player:changeSp(value, cType)
cType = cType or 0
if cType == 0 then
self.sp = self.sp + value
elseif cType == 1 then
self.sp = self.sp + self.sp * value / 100
end
self.sp = math.floor(math.max(0, self.sp))
self.battle.adv:pushBackEvent(AdvBackEventType.SpChange)
end
|
e90b4d20
zhouhaihai
战斗buff
|
519
520
521
|
--战斗结束了扣战斗buff次数
function Player:effectBattleBuff()
for _, buff in ipairs(self.buffs) do
|
b176d7d3
zhouhaihai
冒险成就
|
522
|
if not buff.isDel and (buff:getType() == Buff.BATTLE_BUFF or buff:getType() == Buff.BATTLE_PASSIVE) then
|
e90b4d20
zhouhaihai
战斗buff
|
523
524
525
526
|
buff:effect()
end
end
end
|
3b0526d2
zhouhaihai
冒险demo
|
527
|
|
b53593b5
zhouhaihai
羁绊加成
|
528
529
|
function Player:getDB()
local db = Player.super.getDB(self)
|
3b0526d2
zhouhaihai
冒险demo
|
530
|
for _ , field in pairs({"level", "exp", "growth", "sp"}) do
|
b53593b5
zhouhaihai
羁绊加成
|
531
532
533
534
535
|
db[field] = self[field]
end
return db
end
|
3b0526d2
zhouhaihai
冒险demo
|
536
537
|
|
36c30c5c
zhouahaihai
冒险
|
538
|
return table.pack(Player, Enemy)
|