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
|
ccbafe67
zhouhaihai
冒险神器和buff
|
34
|
self._hpMax = data._hpMax or self.hpMax
|
46fac6f1
zhouahaihai
酱料
|
35
36
37
38
|
end
-- 角色初始化完以后才是 技能和被动技能 方便初始化 buff 的 释放对象
function BaseObject:initAfter(data)
for _, passive in ipairs(data.passives or {}) do
|
36c30c5c
zhouahaihai
冒险
|
39
|
table.insert(self.passives, Passive.new(self, passive))
|
46fac6f1
zhouahaihai
酱料
|
40
41
42
43
44
45
|
end
for _, buff in ipairs(data.buffs or {}) do
table.insert(self.buffs, Buff.load(self, buff))
end
end
|
a734980c
suhongyang
冒险战斗数据打完以前不存储
|
46
47
48
49
50
51
52
|
function BaseObject:reset(data)
self.passives = {}
self.buffs = {}
self:initData(data)
self:initAfter(data)
end
|
46fac6f1
zhouahaihai
酱料
|
53
54
55
56
57
|
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...
|
58
|
buff:afterRound()
|
46fac6f1
zhouahaihai
酱料
|
59
60
61
|
end
end
|
46fac6f1
zhouahaihai
酱料
|
62
63
64
65
66
67
68
69
70
|
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
冒险
|
71
|
self.battle.adv:backBuff(self.id, self.buffs[i].id, true)
|
46fac6f1
zhouahaihai
酱料
|
72
73
74
75
76
77
78
79
80
81
|
self.buffs[i]:endBuff()
table.remove(self.buffs, i)
end
end
end
function BaseObject:clear()
self.buffs = {}
self.passives = {}
end
|
821f2b60
suhongyang
冒险战斗完善,增加battlebe...
|
82
|
function BaseObject:battleBegin()
|
65de8cf1
suhongyang
被动逻辑进一步修缮
|
83
|
for _, passive in ipairs(self.passives) do
|
821f2b60
suhongyang
冒险战斗完善,增加battlebe...
|
84
|
passive:battleBegin()
|
65de8cf1
suhongyang
被动逻辑进一步修缮
|
85
|
end
|
0d405dc3
suhongyang
Buff生命周期调整,被动加buf...
|
86
87
88
|
end
function BaseObject:battleEnd()
|
7c55db1f
suhongyang
Buff逻辑完善,buff生效次数...
|
89
|
for _, buff in ipairs(self.buffs) do
|
0d405dc3
suhongyang
Buff生命周期调整,被动加buf...
|
90
|
buff:battleEnd()
|
7c55db1f
suhongyang
Buff逻辑完善,buff生效次数...
|
91
|
end
|
65de8cf1
suhongyang
被动逻辑进一步修缮
|
92
93
|
end
|
23a38f47
suhongyang
new passives effect
|
94
95
|
function BaseObject:addPassive(params)
local skillId = params.id
|
3b0526d2
zhouhaihai
冒险demo
|
96
|
local skillData = csvdb["adv_map_passiveCsv"][skillId]
|
23a38f47
suhongyang
new passives effect
|
97
98
99
100
|
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,後面可以去掉
|
101
102
|
self.battle.adv:backPassive(self.id, skillId)
|
23a38f47
suhongyang
new passives effect
|
103
104
|
end
|
4f0a5fae
zhouhaihai
营养剂
|
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
|
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
酱料
|
123
|
function BaseObject:addBuff(buffId, releaser)
|
3b0526d2
zhouhaihai
冒险demo
|
124
|
local buffData = csvdb["adv_map_buffCsv"][buffId]
|
46fac6f1
zhouahaihai
酱料
|
125
126
|
if not buffData then return end
for _, buff in ipairs(self.buffs) do
|
7c55db1f
suhongyang
Buff逻辑完善,buff生效次数...
|
127
|
if not buff.isDel and (buff:getType() == Buff.CLEAR_BUFF or buff:getType() == Buff.IMMNUE_BUFF) then
|
ccbafe67
zhouhaihai
冒险神器和buff
|
128
|
if buff:canEffect(buffId) then
|
7c55db1f
suhongyang
Buff逻辑完善,buff生效次数...
|
129
|
buff:effect()
|
46fac6f1
zhouahaihai
酱料
|
130
131
132
133
|
return
end
end
end
|
ccbafe67
zhouhaihai
冒险神器和buff
|
134
135
136
137
138
139
140
141
142
|
local oldBuff = self:getBuffById(buffId)
if oldBuff then
if not oldBuff:checkKeep() then return end
oldBuff:overlay(releaser, {}) -- 叠加
else
-- 不能保持的buff 也加不上去
if not Buff.checkKeep({
owner = self,
buffData = buffData,
|
8781e103
zhouhaihai
冒险 bug
|
143
|
releaseId = releaser and releaser.monsterId or nil
|
ccbafe67
zhouhaihai
冒险神器和buff
|
144
145
146
|
}) then return end
table.insert(self.buffs, Buff.create(self, releaser, {id = buffId}))
end
|
d3da3368
zhouhaihai
冒险地图被动技, buff 神器
|
147
|
self:triggerPassive(Passive.GET_BUFF, {buffId = buffId})
|
36c30c5c
zhouahaihai
冒险
|
148
|
self.battle.adv:backBuff(self.id, buffId)
|
46fac6f1
zhouahaihai
酱料
|
149
150
|
end
|
ccbafe67
zhouhaihai
冒险神器和buff
|
151
152
153
154
155
156
157
158
|
function BaseObject:getBuffById(bId)
for idx, buff in ipairs(self.buffs) do
if buff.id == bId then
return buff
end
end
end
|
916096ed
zhouhaihai
神器效果
|
159
|
function BaseObject:delBuffById(bId)
|
ccbafe67
zhouhaihai
冒险神器和buff
|
160
161
162
163
164
|
for idx, buff in ipairs(self.buffs) do
if buff.id == bId then
self.battle.adv:backBuff(self.id, buff.id, true)
buff:endBuff()
table.remove(self.buffs, idx)
|
916096ed
zhouhaihai
神器效果
|
165
166
167
168
169
170
|
return buff
end
end
end
function BaseObject:delPassiveById(pId)
|
ccbafe67
zhouhaihai
冒险神器和buff
|
171
172
|
for idx, passive in ipairs(self.passives) do
if passive.id == pId then
|
ccbafe67
zhouhaihai
冒险神器和buff
|
173
|
table.remove(self.passives, idx)
|
916096ed
zhouhaihai
神器效果
|
174
175
176
177
178
|
return passive
end
end
end
|
46fac6f1
zhouahaihai
酱料
|
179
180
181
|
function BaseObject:hadBuff(bType)
for _, buff in ipairs(self.buffs) do
if not buff.isDel and buff:getType() == bType then
|
7828ffd0
zhouhaihai
冒险 连续选择点 和 地图因子
|
182
|
return buff
|
46fac6f1
zhouahaihai
酱料
|
183
184
185
186
|
end
end
end
|
1cb78a24
suhongyang
passive的筛选
|
187
188
189
|
function BaseObject:hadBuffById(bId)
for _, buff in ipairs(self.buffs) do
if not buff.isDel and buff.id == bId then
|
7828ffd0
zhouhaihai
冒险 连续选择点 和 地图因子
|
190
|
return buff
|
1cb78a24
suhongyang
passive的筛选
|
191
192
193
194
|
end
end
end
|
916096ed
zhouhaihai
神器效果
|
195
|
|
46fac6f1
zhouahaihai
酱料
|
196
|
-- 通用的buff 效果汇总 -- 0 固定 1百分比 两种分类
|
ccbafe67
zhouhaihai
冒险神器和buff
|
197
|
function BaseObject:getCommonBuffEffect(bType, otherCond)
|
46fac6f1
zhouahaihai
酱料
|
198
199
200
|
local effect, count = {[0] = 0, [1] = 0}, 0
for _, buff in ipairs(self.buffs) do
if not buff.isDel and buff:getType() == bType then
|
ccbafe67
zhouhaihai
冒险神器和buff
|
201
202
|
local cType, value, cond = buff:effect()
if cType and (not otherCond or otherCond == cond) then
|
4ae223df
zhouahaihai
Buff bug
|
203
|
effect[cType] = effect[cType] + value
|
46fac6f1
zhouahaihai
酱料
|
204
205
206
207
|
count = count + 1
end
end
end
|
4ae223df
zhouahaihai
Buff bug
|
208
|
effect[1] = effect[1] / 100
|
46fac6f1
zhouahaihai
酱料
|
209
210
211
|
return effect, count --效果 和生效的buff 个数
end
--伤害反弹
|
ccbafe67
zhouhaihai
冒险神器和buff
|
212
|
function BaseObject:getBackHurtBuff()
|
46fac6f1
zhouahaihai
酱料
|
213
214
215
|
local effect = {[0] = 0, [1] = 0}
for _, buff in ipairs(self.buffs) do
if not buff.isDel and buff:getType() == Buff.BACK_HURT then
|
ccbafe67
zhouhaihai
冒险神器和buff
|
216
|
local cType, value = buff:effect() -- aType 0 全部 1 普通攻击
|
46fac6f1
zhouahaihai
酱料
|
217
|
if cType then
|
ccbafe67
zhouhaihai
冒险神器和buff
|
218
|
effect[cType] = effect[cType] + value
|
46fac6f1
zhouahaihai
酱料
|
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
|
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
|
ccbafe67
zhouhaihai
冒险神器和buff
|
235
236
237
238
239
240
241
242
|
-- 奖励道具变化
function BaseObject:getRewardChange(itemId)
local change = self:getCommonBuffEffect(Buff.ITEM_GET_UP, itemId)
return change
end
-- buff 增益 检疫
function BaseObject:getBuffEffectChange(classify)
|
d3da3368
zhouhaihai
冒险地图被动技, buff 神器
|
243
244
245
246
247
|
local classifys = classify:toArray(true, " ")
local had = {}
for _, one in pairs(classifys) do
had[one] = 1
end
|
ccbafe67
zhouhaihai
冒险神器和buff
|
248
249
250
251
|
local effect = 0
for _, buff in ipairs(self.buffs) do
if not buff.isDel and buff:getType() == Buff_EFFECT_CHANGE then
local cType, value = buff:effect()
|
d3da3368
zhouhaihai
冒险地图被动技, buff 神器
|
252
|
if cType and had[cType] then
|
ccbafe67
zhouhaihai
冒险神器和buff
|
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
|
effect = effect + value
end
end
end
effect = effect / 100
return effect
end
function BaseObject:getAttrBuffChange(attr)
local AttrBuff = {
[Buff.ATTR_CHANGE] = 1,
[Buff.ATTR_CHANGE_COND] = 1,
}
local effect, count = {[0] = 0, [1] = 0}, 0
for _, buff in ipairs(self.buffs) do
if not buff.isDel and AttrBuff[buff:getType()] then
local cType, value, attrName = buff:effect()
if cType and attr == attrName then
effect[cType] = effect[cType] + value
count = count + 1
end
end
end
effect[1] = effect[1] / 100
return effect, count
end
|
46fac6f1
zhouahaihai
酱料
|
279
280
|
--重新计算属性
function BaseObject:reSetAttr(field)
|
36c30c5c
zhouahaihai
冒险
|
281
|
local old = self[field]
|
46fac6f1
zhouahaihai
酱料
|
282
|
self[field] = self["_" .. field] --重置一下
|
ccbafe67
zhouhaihai
冒险神器和buff
|
283
|
local effect = self:getAttrBuffChange(field)
|
e10edb5f
zhouahaihai
冒险事件新
|
284
|
self[field] = math.ceil((self[field] + effect[0]) * (1 + effect[1]))
|
36c30c5c
zhouahaihai
冒险
|
285
286
287
288
|
local delta = self[field] - old
if delta ~= 0 then
if field == "atk" then
self.battle.adv:backAtkChange(self.id, delta)
|
e996b82a
zhouahaihai
冒险增加防御属性
|
289
290
|
elseif field == "def" then
self.battle.adv:backDefChange(self.id, delta)
|
36c30c5c
zhouahaihai
冒险
|
291
292
|
end
end
|
46fac6f1
zhouahaihai
酱料
|
293
294
|
end
|
ccbafe67
zhouhaihai
冒险神器和buff
|
295
296
297
298
299
300
301
302
303
304
305
|
-- 重新计算 血量上限
function BaseObject:reSetHpMax()
self.hpMax = self._hpMax
for _, buff in ipairs(self.buffs) do
if not buff.isDel and buff:getType() == Buff.HP_MAX_CHANGE then
local cv = buff:effect()
if cv then
self.hpMax = self.hpMax + cv
end
end
end
|
98761edc
zhouhaihai
buff 补充
|
306
|
local effect = self:getAttrBuffChange("hp")
|
d3da3368
zhouhaihai
冒险地图被动技, buff 神器
|
307
|
self.hpMax = (self.hpMax + effect[0]) * (1 + effect[1])
|
98761edc
zhouhaihai
buff 补充
|
308
|
self.hpMax = math.ceil(math.max(1, self.hpMax))
|
ccbafe67
zhouhaihai
冒险神器和buff
|
309
310
311
|
self.hp = math.min(self.hpMax, self.hp)
end
|
46fac6f1
zhouahaihai
酱料
|
312
313
314
315
316
317
318
319
320
|
--计算打出伤害加成后的值
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
冒险增加防御属性
|
321
|
return math.max(0, (value + injuredChange[0]) * (1 + injuredChange[1]) - self.def)
|
46fac6f1
zhouahaihai
酱料
|
322
323
|
end
|
ae9a74b5
suhongyang
返回miss,快速战斗逻辑
|
324
|
--最终伤害 = [ (敌方攻击 - 己方防御) * (1+伤害增加百分比-伤害减少百分比)*(1+受伤增加百分比-受伤减少百分比)+(伤害增加固定值-伤害增加固定值+受伤增加固定值-受伤增加固定值)]*(1+侍宠百分比)-侍宠固定值
|
53e8037e
zhouhaihai
任务
|
325
|
-- params -- hurtType 1 普攻伤害 2 buff伤害 3 反弹伤害 4 真实伤害 5 客户端发回来的伤害 --直接作用 6 buff伤害(真实)
|
46fac6f1
zhouahaihai
酱料
|
326
327
328
329
|
--进入这个方法之前计算好释放者加成的伤害
function BaseObject:hurt(value, releaser, params)
params = params or {}
if params.hurtType and params.hurtType == 1 then
|
d3da3368
zhouhaihai
冒险地图被动技, buff 神器
|
330
331
332
333
334
|
-- releaser:triggerPassive(Passive.SELF_ATK)
-- for _, team in ipairs(releaser:getTeam(1, true)) do
-- team:triggerPassive(Passive.TEAM_ATK)
-- end
-- if self:hadBuff(Buff.IMMNUE_ATK) then return end --无视普通攻击
|
46fac6f1
zhouahaihai
酱料
|
335
|
|
d3da3368
zhouhaihai
冒险地图被动技, buff 神器
|
336
337
338
339
340
341
342
343
344
|
-- local hit = releaser.hit - self.miss --命中率
-- if hit < math.randomInt(1, 100) then --miss
-- self.battle.adv:backMiss(self.id)
-- return
-- end
end
if params.hurtType and (params.hurtType == 2 or params.hurtType == 6) then
self:triggerPassive(Passive.SELF_HURT, {trigger = releaser, buffId = params.buffId})
|
02c4de8d
zhouahaihai
增加 固有技
|
345
|
for _, team in ipairs(self:getTeam(1, true)) do
|
d3da3368
zhouhaihai
冒险地图被动技, buff 神器
|
346
|
team:triggerPassive(Passive.TEAM_HURT, {trigger = releaser, buffId = params.buffId})
|
02c4de8d
zhouahaihai
增加 固有技
|
347
|
end
|
46fac6f1
zhouahaihai
酱料
|
348
|
end
|
d3da3368
zhouhaihai
冒险地图被动技, buff 神器
|
349
|
|
53e8037e
zhouhaihai
任务
|
350
|
if params.hurtType ~= 5 and params.hurtType ~= 6 then
|
12f7b52c
zhouhaihai
冒险战斗
|
351
352
|
if not params.hurtType or params.hurtType ~= 4 then
value = self:getInjuredValue(value) --减伤计算
|
46fac6f1
zhouahaihai
酱料
|
353
|
end
|
12f7b52c
zhouhaihai
冒险战斗
|
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
|
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
酱料
|
369
|
end
|
12f7b52c
zhouhaihai
冒险战斗
|
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
|
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
酱料
|
385
386
387
388
389
|
end
end
end
end
|
e10edb5f
zhouahaihai
冒险事件新
|
390
|
value = math.max(0, math.ceil(value))
|
46fac6f1
zhouahaihai
酱料
|
391
392
|
if value == 0 then return end
-- 反弹伤害
|
12f7b52c
zhouhaihai
冒险战斗
|
393
|
if params.hurtType ~= 3 and params.hurtType ~= 5 and releaser and not releaser.isDead then
|
ccbafe67
zhouhaihai
冒险神器和buff
|
394
|
local backEffect = self:getBackHurtBuff()
|
46fac6f1
zhouahaihai
酱料
|
395
396
397
398
399
|
local backValue = math.max(0, value * backEffect[1] + backEffect[0])
releaser:hurt(backValue, releaser, {hurtType = 3})
end
--受伤了~
|
36c30c5c
zhouahaihai
冒险
|
400
|
self.battle.adv:backHpChange(self.id, -value)
|
46fac6f1
zhouahaihai
酱料
|
401
|
self.hp = math.max(0, self.hp - value)
|
b0fe1817
zhouahaihai
冒险分数
|
402
403
404
405
406
|
if self.cutHp then
self:cutHp(value)
end
|
46fac6f1
zhouahaihai
酱料
|
407
|
if self.hp == 0 then
|
02c4de8d
zhouahaihai
增加 固有技
|
408
409
410
411
412
|
self:triggerPassive(Passive.SELF_DEAD)
for _, team in ipairs(self:getTeam(1, true)) do
team:triggerPassive(Passive.TEAM_DEAD)
end
|
53e8037e
zhouhaihai
任务
|
413
|
if (params.hurtType == 6 or params.hurtType == 2) and self ~= self.battle.player then
|
b176d7d3
zhouhaihai
冒险成就
|
414
415
416
|
self.battle.adv:checkAchievement(self.battle.adv.AchievType.KillByBuff, 1, params.buffId)
end
|
46fac6f1
zhouahaihai
酱料
|
417
|
self.isDead = true
|
46fac6f1
zhouahaihai
酱料
|
418
|
end
|
02c4de8d
zhouahaihai
增加 固有技
|
419
420
421
422
|
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
酱料
|
423
424
425
426
|
end
--恢复
function BaseObject:recover(value, releaser, params)
params = params or {}
|
e10edb5f
zhouahaihai
冒险事件新
|
427
|
value = math.max(0, math.ceil(value))
|
46fac6f1
zhouahaihai
酱料
|
428
|
self.hp = math.min(self.hpMax, self.hp + value)
|
36c30c5c
zhouahaihai
冒险
|
429
|
self.battle.adv:backHpChange(self.id, value)
|
46fac6f1
zhouahaihai
酱料
|
430
431
|
end
|
42f2d1d3
suhongyang
战斗内技能序列逻辑
|
432
433
434
435
436
|
function BaseObject:addSpecialSkill(skillId, skillLevel, target)
local skillData = {id = skillId, level = skillLevel, target = target}
table.insert(self.skillOrder, skillData)
end
|
d27ad5e0
suhongyang
使用营养技
|
437
|
function BaseObject:releaseSkill(skillId, target)
|
36c30c5c
zhouahaihai
冒险
|
438
|
if self:hadBuff(Buff.CANT_SKILL) then return end -- 针对 怪物
|
d27ad5e0
suhongyang
使用营养技
|
439
|
local skill = Skill.new(self, {id = skillId, target = target})
|
36c30c5c
zhouahaihai
冒险
|
440
|
--返回客户端
|
1b8336a6
suhongyang
skill逻辑与player分开
|
441
|
for _, target in ipairs(skill:getTargets()) do
|
36c30c5c
zhouahaihai
冒险
|
442
443
|
self.battle.adv:backSkill(self.id, skillId, target.id)
end
|
1b8336a6
suhongyang
skill逻辑与player分开
|
444
|
skill:doEffect()
|
02c4de8d
zhouahaihai
增加 固有技
|
445
446
447
448
449
450
|
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
酱料
|
451
452
453
|
end
--0 全部 1 我方 2 敌方
|
53e8037e
zhouhaihai
任务
|
454
|
function BaseObject:getTeam(nType, noSelf, mapIdx, includeLock)
|
43babcff
zhouhaihai
优化冒险结构 增加夹层功能
|
455
|
mapIdx = mapIdx or self.battle.adv:getCurMapIdx()
|
46fac6f1
zhouahaihai
酱料
|
456
457
458
459
460
461
462
463
464
465
|
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
优化冒险结构 增加夹层功能
|
466
|
for _, enemy in pairs(self.battle.enemys[mapIdx]) do
|
46fac6f1
zhouahaihai
酱料
|
467
|
if not noSelf or enemy ~= self then
|
53e8037e
zhouhaihai
任务
|
468
|
if not enemy.isDead and (includeLock or not enemy.lock) then -- 已经翻开的
|
46fac6f1
zhouahaihai
酱料
|
469
470
471
472
473
474
475
476
477
|
table.insert(team, enemy)
end
end
end
end
if nType == 0 then
addPlayer()
addEnemy()
elseif nType == 1 then
|
b594a026
suhongyang
Fix bug
|
478
|
if not self.monsterId then --玩家
|
46fac6f1
zhouahaihai
酱料
|
479
480
481
482
483
|
addPlayer()
else
addEnemy()
end
elseif nType == 2 then
|
b594a026
suhongyang
Fix bug
|
484
|
if not self.monsterId then --玩家
|
46fac6f1
zhouahaihai
酱料
|
485
486
487
488
489
490
491
492
493
494
|
addEnemy()
else
addPlayer()
end
end
return team
end
function BaseObject:getDB()
local db = {}
|
46fac6f1
zhouahaihai
酱料
|
495
|
db.hp = self.hp
|
ccbafe67
zhouhaihai
冒险神器和buff
|
496
|
local baseAttr = {"atk", "miss", "hit", "def", "hpMax"}
|
46fac6f1
zhouahaihai
酱料
|
497
498
499
500
501
502
503
504
|
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
|
505
|
db.buffs = {}
|
46fac6f1
zhouahaihai
酱料
|
506
507
508
509
510
511
512
|
for _, buff in ipairs(self.buffs) do
table.insert(db.buffs, buff:getDB())
end
return db
end
function BaseObject:triggerPassive(condType, params)
|
02c4de8d
zhouahaihai
增加 固有技
|
513
514
515
516
|
if self.isDead then return end
for _, passive in ipairs(self.passives) do
passive:trigger(condType, params) --检查触发
end
|
46fac6f1
zhouahaihai
酱料
|
517
518
|
end
|
3b0526d2
zhouhaihai
冒险demo
|
519
520
521
|
function BaseObject:changeSp()
end
|
46fac6f1
zhouahaihai
酱料
|
522
|
local Enemy = class("Enemy", BaseObject)
|
43babcff
zhouhaihai
优化冒险结构 增加夹层功能
|
523
|
function Enemy:ctor(battle, mId, monsterId, roomId, blockId, lock, enemy, mapIdx)
|
46fac6f1
zhouahaihai
酱料
|
524
|
Enemy.super.ctor(self, battle)
|
36c30c5c
zhouahaihai
冒险
|
525
526
|
self.id = mId
self.monsterId = monsterId --数据id
|
46fac6f1
zhouahaihai
酱料
|
527
528
529
|
self.roomId = roomId
self.blockId = blockId
self.lock = lock
|
43babcff
zhouhaihai
优化冒险结构 增加夹层功能
|
530
|
self.mapIdx = mapIdx
|
46fac6f1
zhouahaihai
酱料
|
531
532
533
534
535
536
537
538
539
540
541
542
543
|
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
冒险分数
|
544
545
546
547
|
function Player:cutHp(value)
self.battle.adv:scoreChange(AdvScoreType.Hurt, value)
end
|
b53593b5
zhouhaihai
羁绊加成
|
548
549
|
function Player:initData(data)
Player.super.initData(self, data)
|
386ca58e
zhouhaihai
优化log
|
550
|
self.level = data.level or 1 --level 每增加1级 属性增长 growth * baseAttr
|
ccbafe67
zhouhaihai
冒险神器和buff
|
551
|
self.growth = data.growth
|
b53593b5
zhouhaihai
羁绊加成
|
552
|
self.exp = data.exp or 0
|
3b0526d2
zhouhaihai
冒险demo
|
553
|
self.sp = data.sp or 100
|
ccbafe67
zhouhaihai
冒险神器和buff
|
554
555
|
self.spMax = data.spMax or 100
self._spMax = data._spMax or 100
|
b53593b5
zhouhaihai
羁绊加成
|
556
557
558
|
end
function Player:addExp(value)
|
4f0a5fae
zhouhaihai
营养剂
|
559
560
561
562
|
-- buff 经验加成
local up = self:getCommonBuffEffect(Buff.EXP_UP)
value = math.ceil((value + up[0]) * (1 + up[1]))
|
51718558
zhouhaihai
中继层初始经验
|
563
|
if value <= 0 then return end
|
6732f756
zhouhaihai
玩家升级
|
564
565
566
567
568
569
570
571
572
573
574
575
|
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
|
8781e103
zhouhaihai
冒险 bug
|
576
|
for attr, _ in pairs(AdvAttsEnum) do
|
1ffc16b9
zhouhaihai
冒险 选择点和 建筑
|
577
|
self:addBaseAttr(attr, self.growth[attr] * delta)
|
6732f756
zhouhaihai
玩家升级
|
578
579
580
581
|
end
end
self.level = level
self.exp = newExp
|
85ded242
zhouhaihai
丰富返回事件
|
582
|
return value
|
b53593b5
zhouhaihai
羁绊加成
|
583
|
end
|
1ffc16b9
zhouhaihai
冒险 选择点和 建筑
|
584
585
586
587
588
|
--vtype 0/1 值/%
function Player:addBaseAttr(attr, value, vtype)
local attrName = attr
if attr == "hp" then
attrName = "hpMax"
|
e1679483
zhouhaihai
bug
|
589
|
elseif attr == "sp" then
|
1ffc16b9
zhouhaihai
冒险 选择点和 建筑
|
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
|
attrName = "spMax"
end
local baseName = "_" .. attrName
if not self[baseName] then return end
local oldV = self[baseName]
local change = value
if vtype == 1 then
change = oldV * value / 100
end
self[baseName] = self[baseName] + change
if attr == "hp" then
self.hp = self.hp + change
self:reSetHpMax()
elseif attr == "sp" then
self.sp = self.sp + change
self:reSetSpMax()
else
self:reSetAttr(attr)
end
end
|
b53593b5
zhouhaihai
羁绊加成
|
611
|
|
3b0526d2
zhouhaihai
冒险demo
|
612
613
|
--cType 0 or nil 值 1 百分比
function Player:changeSp(value, cType)
|
85ded242
zhouhaihai
丰富返回事件
|
614
|
local oldSp = self.sp
|
3b0526d2
zhouhaihai
冒险demo
|
615
616
617
618
619
620
|
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
|
ccbafe67
zhouhaihai
冒险神器和buff
|
621
|
self.sp = math.floor(math.min(self.spMax, math.max(0, self.sp)))
|
85ded242
zhouhaihai
丰富返回事件
|
622
|
self.battle.adv:pushBackEvent(AdvBackEventType.SpChange, {change = self.sp - oldSp})
|
3b0526d2
zhouhaihai
冒险demo
|
623
624
|
end
|
ccbafe67
zhouhaihai
冒险神器和buff
|
625
626
627
628
629
630
631
632
633
|
-- 重新计算 魔法上限
function BaseObject:reSetSpMax()
self.spMax = self._spMax
local change = self:getCommonBuffEffect(Buff.SP_MAX_CHANGE)
self.spMax = math.ceil((self.spMax + change[0]) * (1 + change[1]))
self.spMax = math.max(1, self.spMax)
self.sp = math.min(self.spMax, self.sp)
end
|
e90b4d20
zhouhaihai
战斗buff
|
634
635
636
|
--战斗结束了扣战斗buff次数
function Player:effectBattleBuff()
for _, buff in ipairs(self.buffs) do
|
b176d7d3
zhouhaihai
冒险成就
|
637
|
if not buff.isDel and (buff:getType() == Buff.BATTLE_BUFF or buff:getType() == Buff.BATTLE_PASSIVE) then
|
e90b4d20
zhouhaihai
战斗buff
|
638
639
640
641
|
buff:effect()
end
end
end
|
3b0526d2
zhouhaihai
冒险demo
|
642
|
|
596ac19f
zhouhaihai
buff
|
643
644
645
646
647
648
649
650
|
function Player:afterLayer()
for _, buff in ipairs(self.buffs) do
if not buff.isDel then
buff:afterLayer()
end
end
end
|
b53593b5
zhouhaihai
羁绊加成
|
651
652
|
function Player:getDB()
local db = Player.super.getDB(self)
|
ccbafe67
zhouhaihai
冒险神器和buff
|
653
|
for _ , field in pairs({"level", "exp", "growth", "sp", "spMax"}) do
|
b53593b5
zhouhaihai
羁绊加成
|
654
655
|
db[field] = self[field]
end
|
ccbafe67
zhouhaihai
冒险神器和buff
|
656
|
db["_spMax"] = self._spMax
|
b53593b5
zhouhaihai
羁绊加成
|
657
658
659
|
return db
end
|
3b0526d2
zhouhaihai
冒险demo
|
660
661
|
|
36c30c5c
zhouahaihai
冒险
|
662
|
return table.pack(Player, Enemy)
|