26aeaf48
zhouhaihai
bug
|
1
|
local Player, Enemy, Build = table.unpack(require "adv.AdvPlayer")
|
46fac6f1
zhouahaihai
酱料
|
2
|
local Buff = require "adv.AdvBuff"
|
32bca13b
zhouahaihai
bug
|
3
|
local Passive = require "adv.AdvPassive"
|
36c30c5c
zhouahaihai
冒险
|
4
|
local Battle = class("Battle")
|
46fac6f1
zhouahaihai
酱料
|
5
6
7
|
function Battle:ctor(adv)
self.adv = adv
self.player = nil --玩家
|
02c4de8d
zhouahaihai
增加 固有技
|
8
|
self.isNewPlayer = false
|
46fac6f1
zhouahaihai
酱料
|
9
|
self.enemys = {} --怪
|
9687f887
zhouhaihai
建筑被动
|
10
|
self.builds = {} -- 建筑
|
43babcff
zhouhaihai
优化冒险结构 增加夹层功能
|
11
|
self.cachePassiveEvent = {}
|
46fac6f1
zhouahaihai
酱料
|
12
13
14
|
self:initPlayer()
self:initEnemys()
self:initAfter()
|
02c4de8d
zhouahaihai
增加 固有技
|
15
16
|
if self.isNewPlayer then
self.player:triggerPassive(Passive.BORN_ONCE)
|
51718558
zhouhaihai
中继层初始经验
|
17
|
self.player:addExp((self.adv.level - 1) * 40)
|
02c4de8d
zhouahaihai
增加 固有技
|
18
|
end
|
46fac6f1
zhouahaihai
酱料
|
19
20
|
end
|
78dcacb6
zhouhaihai
夹层 后处理 没做
|
21
22
23
24
|
function Battle:initAfter(mapIdx)
if not mapIdx then
self.player:initAfter(self.adv.owner:getProperty("advTeam").player)
end
|
43babcff
zhouhaihai
优化冒险结构 增加夹层功能
|
25
|
for idx, mapEnemys in pairs(self.enemys) do
|
78dcacb6
zhouhaihai
夹层 后处理 没做
|
26
27
28
29
|
if not mapIdx or idx == mapIdx then
for _, enemy in ipairs(mapEnemys) do
enemy:initAfter(self.adv:getBlock(enemy.roomId, enemy.blockId, idx).event.enemy)
end
|
43babcff
zhouhaihai
优化冒险结构 增加夹层功能
|
30
|
end
|
9687f887
zhouhaihai
建筑被动
|
31
32
|
end
for idx, mapBuilds in pairs(self.builds) do
|
78dcacb6
zhouhaihai
夹层 后处理 没做
|
33
34
35
36
|
if not mapIdx or idx == mapIdx then
for _, build in ipairs(mapBuilds) do
build:initAfter(self.adv:getBlock(build.roomId, build.blockId, idx).event.build)
end
|
9687f887
zhouhaihai
建筑被动
|
37
|
end
|
46fac6f1
zhouahaihai
酱料
|
38
|
end
|
46fac6f1
zhouahaihai
酱料
|
39
|
end
|
b53593b5
zhouhaihai
羁绊加成
|
40
41
42
43
44
45
46
47
48
|
--[[
队伍总属性 = 基础属性 + 等级 × 成长率
基础属性: 固定属性,与章节、队伍够成、养成无关,由策划给出
等级: 根据进入时的关卡,获得一个【初始等级】;消灭怪物获得经验后,累计N点会提升等级
羁绊加成: 加成条件与“战斗”相同,加成目标改为【冒险队】
成长率: 由【队伍总生存力】决定
成长率 =(总生存力 / 80)^0.52 + INT(总角色等级 / 50)* 1
--]]
|
46fac6f1
zhouahaihai
酱料
|
49
|
|
6b5c9206
zhouhaihai
冒险资助升级属性奖励
|
50
51
52
53
54
55
56
57
58
59
60
61
|
local function getAdvLvAttrUp(upAttrs, attrName, baseAttr)
-- 1=冒险队属性;1=点数/百分比=属性枚举=参数;属性枚举(1=生命上限/2=魔法上限/3=攻击/4=防御);点数/百分比(0=点数/1=百分比)
local Enem = {
hp = 1,
sp = 2,
atk = 3,
def = 4,
}
if not Enem[attrName] then return baseAttr end
return baseAttr + (upAttrs[Enem[attrName]] or 0)
end
|
46fac6f1
zhouahaihai
酱料
|
62
|
function Battle:initPlayer()
|
43babcff
zhouhaihai
优化冒险结构 增加夹层功能
|
63
64
|
local advTeam = self.adv.owner:getProperty("advTeam")
if not next(advTeam.heros) then return end
|
bfd33de5
zhouhaihai
队长技
|
65
|
local leaderPassive = {}
|
43babcff
zhouhaihai
优化冒险结构 增加夹层功能
|
66
67
|
local player = advTeam.player
if not player then
|
565b0ad0
zhouhaihai
bug
|
68
|
local advAddAttrs = self.adv.owner:getAdvLvAddAttrs()
|
6b5c9206
zhouhaihai
冒险资助升级属性奖励
|
69
|
|
43babcff
zhouhaihai
优化冒险结构 增加夹层功能
|
70
|
player = {}
|
ccbafe67
zhouhaihai
冒险神器和buff
|
71
|
player.level = 1
|
0e3ab88d
zhouhaihai
中继层
|
72
73
|
if self.adv.level ~= 1 then
local relayData = self.adv:isHaveRelay()
|
35e2e3c4
zhouhaihai
优化 gm advt 增加感知b...
|
74
75
76
|
if relayData then
player.level = relayData.level
end
|
0e3ab88d
zhouhaihai
中继层
|
77
|
end
|
ccbafe67
zhouhaihai
冒险神器和buff
|
78
|
player.exp = 0
|
6b5c9206
zhouhaihai
冒险资助升级属性奖励
|
79
|
player.sp = getAdvLvAttrUp(advAddAttrs, "sp", 100)
|
ccbafe67
zhouhaihai
冒险神器和buff
|
80
|
player.growth = {}
|
46fac6f1
zhouahaihai
酱料
|
81
|
player.passives = {}
|
ccbafe67
zhouhaihai
冒险神器和buff
|
82
|
|
43babcff
zhouhaihai
优化冒险结构 增加夹层功能
|
83
|
for slot, heroId in pairs(advTeam.heros) do
|
bfd33de5
zhouhaihai
队长技
|
84
85
86
87
88
89
90
|
if heroId == advTeam.leader or heroId == advTeam.leader2 then
local hero = self.adv.owner.heros[heroId]
if hero then
local unit = csvdb["unitCsv"][self.adv.owner.heros[heroId]:getProperty("type")]
if unit.advCaptain ~= 0 then
table.insert(player.passives, {id = unit.advCaptain, level = 1})
end
|
46fac6f1
zhouahaihai
酱料
|
91
92
93
|
end
end
end
|
ccbafe67
zhouhaihai
冒险神器和buff
|
94
95
|
local attrs = self.adv.owner:getTeamBattleInfo(advTeam).heros
|
6b5c9206
zhouhaihai
冒险资助升级属性奖励
|
96
97
|
|
ccbafe67
zhouhaihai
冒险神器和buff
|
98
99
100
|
for attrName, _ in pairs(AdvAttsEnum) do
for _, hero in pairs(attrs) do
player[attrName] = (player[attrName] or 0) + hero[attrName]
|
b53593b5
zhouhaihai
羁绊加成
|
101
|
end
|
6dc482bb
zhouhaihai
中继层完成, 新增两个冒险物品使用效果
|
102
|
player[attrName] = getAdvLvAttrUp(advAddAttrs, attrName, player[attrName]) * (globalCsv.adv_battle_attr_ratio[attrName] or 1)
|
4f72322e
zhouhaihai
冒险成长
|
103
|
player.growth[attrName] = player[attrName] * (globalCsv.adv_battle_attr_growth_ratio[attrName] or 1)
|
0e3ab88d
zhouhaihai
中继层
|
104
|
player[attrName] = player[attrName] + player.growth[attrName] * (player.level - 1)
|
b53593b5
zhouhaihai
羁绊加成
|
105
|
end
|
ccbafe67
zhouhaihai
冒险神器和buff
|
106
|
|
1b35c0a2
zhouhaihai
冒险
|
107
|
player.hpMax = player.hp or 0
|
02c4de8d
zhouahaihai
增加 固有技
|
108
|
self.isNewPlayer = true
|
43babcff
zhouhaihai
优化冒险结构 增加夹层功能
|
109
|
advTeam.player = player
|
46fac6f1
zhouahaihai
酱料
|
110
|
end
|
43babcff
zhouhaihai
优化冒险结构 增加夹层功能
|
111
|
self.player = Player.new(self, player)
|
46fac6f1
zhouahaihai
酱料
|
112
113
114
|
end
function Battle:initEnemys()
|
43babcff
zhouhaihai
优化冒险结构 增加夹层功能
|
115
116
117
118
119
|
for idx, map in pairs(self.adv.maps) do
self:initMapEnemys(idx)
end
end
|
78dcacb6
zhouhaihai
夹层 后处理 没做
|
120
121
|
-- after 是否是 后创建的夹层
function Battle:initMapEnemys(mapIdx, after)
|
43babcff
zhouhaihai
优化冒险结构 增加夹层功能
|
122
|
self.enemys[mapIdx] = {}
|
50fddc3f
zhouhaihai
bug
|
123
|
self.builds[mapIdx] = {}
|
43babcff
zhouhaihai
优化冒险结构 增加夹层功能
|
124
125
126
127
128
129
130
131
|
local map = self.adv.maps[mapIdx]
if map then
for _, room in pairs(map.rooms) do
for _, block in pairs(room.blocks) do
self:addEnemy(room, block, mapIdx)
end
end
end
|
78dcacb6
zhouhaihai
夹层 后处理 没做
|
132
133
134
|
if after then
self:initAfter(mapIdx)
end
|
43babcff
zhouhaihai
优化冒险结构 增加夹层功能
|
135
136
137
138
139
|
if self.cachePassiveEvent[mapIdx] then
for _, passiveC in ipairs(self.cachePassiveEvent or {}) do
for _, enemy in ipairs(self.enemys[mapIdx]) do
enemy:triggerPassive(passiveC[1], passiveC[2])
end
|
9687f887
zhouhaihai
建筑被动
|
140
141
142
143
|
for _, build in ipairs(self.builds[mapIdx]) do
build:triggerPassive(passiveC[1], passiveC[2])
end
|
46fac6f1
zhouahaihai
酱料
|
144
145
|
end
end
|
43babcff
zhouhaihai
优化冒险结构 增加夹层功能
|
146
|
self.cachePassiveEvent[mapIdx] = nil
|
46fac6f1
zhouahaihai
酱料
|
147
148
|
end
|
43babcff
zhouhaihai
优化冒险结构 增加夹层功能
|
149
150
151
152
|
function Battle:addEnemy(room, block, mapIdx)
mapIdx = mapIdx or self.adv:getCurMapIdx()
if block:isMonster() then
|
46fac6f1
zhouahaihai
酱料
|
153
154
155
|
if not block.event.enemy then
local enemyCsv = csvdb["event_monsterCsv"][block.event.id]
local enemy = {}
|
eee37c88
zhouhaihai
楼层数据
|
156
157
158
159
|
local curFloorData = self.adv:getCurFloorData() or {}
for attrName, _ in pairs(AdvAttsEnum) do
enemy[attrName] = enemyCsv[attrName] * curFloorData[attrName]
end
|
46fac6f1
zhouahaihai
酱料
|
160
|
enemy.passives = {}
|
de3b786f
zhouhaihai
字段换名字
|
161
|
for _, id in ipairs(enemyCsv.mapPassive:toArray(true, "=")) do
|
46fac6f1
zhouahaihai
酱料
|
162
163
164
|
table.insert(enemy.passives, {id = id})
end
block.event.enemy = enemy
|
46fac6f1
zhouahaihai
酱料
|
165
|
end
|
43babcff
zhouhaihai
优化冒险结构 增加夹层功能
|
166
167
|
local player = Enemy.new(self, block.event.mId or 999, block.event.id, room.roomId, block.blockId, not block.isOpen, block.event.enemy, mapIdx)
table.insert(self.enemys[mapIdx], player)
|
02c4de8d
zhouahaihai
增加 固有技
|
168
|
return player
|
9687f887
zhouhaihai
建筑被动
|
169
170
|
elseif block:isBuild() then
if not block.event.build then
|
53b7e3b5
zhouhaihai
bug
|
171
|
local buildCsv = csvdb["event_buildingCsv"][block.event.id]
|
9687f887
zhouhaihai
建筑被动
|
172
173
174
175
176
177
178
179
180
181
|
local build = {}
build.passives = {}
for _, id in ipairs(buildCsv.passive:toArray(true, "=")) do
table.insert(build.passives, {id = id})
end
block.event.build = build
end
local player = Build.new(self, block.event.id, room.roomId, block.blockId, not block.isOpen, block.event.build, mapIdx)
table.insert(self.builds[mapIdx], player)
return player
|
46fac6f1
zhouahaihai
酱料
|
182
183
184
|
end
end
|
43babcff
zhouhaihai
优化冒险结构 增加夹层功能
|
185
186
187
|
function Battle:getEnemy(roomId, blockId, mapIdx)
mapIdx = mapIdx or self.adv:getCurMapIdx()
for _, enemy in ipairs(self.enemys[mapIdx] or {}) do
|
36c30c5c
zhouahaihai
冒险
|
188
|
if enemy.roomId == roomId and enemy.blockId == blockId then
|
46fac6f1
zhouahaihai
酱料
|
189
190
191
192
193
|
return enemy
end
end
end
|
9687f887
zhouhaihai
建筑被动
|
194
195
196
197
198
199
200
|
function Battle:getBuild(roomId, blockId, mapIdx)
mapIdx = mapIdx or self.adv:getCurMapIdx()
for _, build in ipairs(self.builds[mapIdx] or {}) do
if build.roomId == roomId and build.blockId == blockId then
return build
end
end
|
d4720dfd
zhouhaihai
bug
|
201
|
end
|
9687f887
zhouhaihai
建筑被动
|
202
|
|
46fac6f1
zhouahaihai
酱料
|
203
|
function Battle:getEnemyById(id)
|
43babcff
zhouhaihai
优化冒险结构 增加夹层功能
|
204
205
206
207
208
|
for idx, mapEnemys in pairs(self.enemys) do
for _, enemy in ipairs(mapEnemys) do
if enemy.id == id then
return enemy
end
|
46fac6f1
zhouahaihai
酱料
|
209
210
211
|
end
end
end
|
39a6e08b
suhongyang
冒险战斗内逻辑调整
|
212
213
214
|
function Battle:getRBByEnemyId(enemyId)
local enemy = self:getEnemyById(enemyId)
|
43babcff
zhouhaihai
优化冒险结构 增加夹层功能
|
215
|
return enemy.roomId, enemy.blockId, enemy.mapIdx
|
39a6e08b
suhongyang
冒险战斗内逻辑调整
|
216
217
|
end
|
39a6e08b
suhongyang
冒险战斗内逻辑调整
|
218
|
|
46fac6f1
zhouahaihai
酱料
|
219
|
--触发全员被动技能
|
43babcff
zhouhaihai
优化冒险结构 增加夹层功能
|
220
221
|
function Battle:triggerPassive(condType, params, mapIdx)
mapIdx = mapIdx or self.adv:getCurMapIdx()
|
02c4de8d
zhouahaihai
增加 固有技
|
222
|
self.player:triggerPassive(condType, params)
|
43babcff
zhouhaihai
优化冒险结构 增加夹层功能
|
223
224
225
226
227
228
229
230
|
if not self.enemys[mapIdx] then
-- 缓存一下
self.cachePassiveEvent[mapIdx] = self.cachePassiveEvent[mapIdx] or {}
table.insert(self.cachePassiveEvent[mapIdx], {condType, params})
else
for _, enemy in ipairs(self.enemys[mapIdx]) do
enemy:triggerPassive(condType, params)
end
|
9687f887
zhouhaihai
建筑被动
|
231
232
233
|
for _, build in ipairs(self.builds[mapIdx]) do
build:triggerPassive(condType, params)
end
|
02c4de8d
zhouahaihai
增加 固有技
|
234
|
end
|
46fac6f1
zhouahaihai
酱料
|
235
236
|
end
|
4f0a5fae
zhouhaihai
营养剂
|
237
238
239
240
241
242
243
244
245
246
247
|
-- 只是从战斗中移除 从地图中移除 在外面操作
function Battle:removeEnemyById(id)
local mapIdx = self.adv:getCurMapIdx()
for i = #self.enemys[mapIdx], 1, -1 do
if self.enemys[mapIdx][i].id == id then
local enemy = table.remove(self.enemys[mapIdx], i)
enemy:clear()
break
end
end
end
|
c8c957e4
zhouhaihai
必要时删除建筑
|
248
249
250
251
252
253
254
255
256
257
258
|
-- 只是从战斗中移除 从地图中移除 在外面操作
function Battle:removeBuildByPos(roomId, blockId)
local mapIdx = self.adv:getCurMapIdx()
for i = #self.builds[mapIdx], 1, -1 do
if self.builds[mapIdx][i].roomId == roomId and self.builds[mapIdx][i].blockId == blockId then
local build = table.remove(self.builds[mapIdx], i)
build:clear()
break
end
end
end
|
4f0a5fae
zhouhaihai
营养剂
|
259
|
|
46fac6f1
zhouahaihai
酱料
|
260
261
|
--回合
function Battle:afterRound()
|
43babcff
zhouhaihai
优化冒险结构 增加夹层功能
|
262
|
local mapIdx = self.adv:getCurMapIdx()
|
35e2e3c4
zhouhaihai
优化 gm advt 增加感知b...
|
263
|
|
43babcff
zhouhaihai
优化冒险结构 增加夹层功能
|
264
|
table.sort(self.enemys[mapIdx], function(e1, e2)
|
46fac6f1
zhouahaihai
酱料
|
265
266
|
return e1.id < e2.id
end)
|
35e2e3c4
zhouhaihai
优化 gm advt 增加感知b...
|
267
268
|
self.player:afterRound("passive")
|
43babcff
zhouhaihai
优化冒险结构 增加夹层功能
|
269
|
for _, enemy in ipairs(self.enemys[mapIdx]) do
|
35e2e3c4
zhouhaihai
优化 gm advt 增加感知b...
|
270
|
enemy:afterRound("passive")
|
46fac6f1
zhouahaihai
酱料
|
271
|
end
|
a35f71ee
zhouhaihai
afterRound build
|
272
|
for _, build in ipairs(self.builds[mapIdx]) do
|
35e2e3c4
zhouhaihai
优化 gm advt 增加感知b...
|
273
274
275
276
277
278
|
build:afterRound("passive")
end
self.player:afterRound("buff")
for _, enemy in ipairs(self.enemys[mapIdx]) do
enemy:afterRound("buff")
|
a35f71ee
zhouhaihai
afterRound build
|
279
|
end
|
35e2e3c4
zhouhaihai
优化 gm advt 增加感知b...
|
280
281
282
283
284
285
|
for _, build in ipairs(self.builds[mapIdx]) do
build:afterRound("buff")
end
|
46fac6f1
zhouahaihai
酱料
|
286
|
self.player:clearRound()
|
43babcff
zhouhaihai
优化冒险结构 增加夹层功能
|
287
|
for _, enemy in ipairs(self.enemys[mapIdx]) do
|
46fac6f1
zhouahaihai
酱料
|
288
289
|
enemy:clearRound()
end
|
9687f887
zhouhaihai
建筑被动
|
290
291
292
|
for _, build in ipairs(self.builds[mapIdx]) do
build:clearRound()
end
|
43babcff
zhouhaihai
优化冒险结构 增加夹层功能
|
293
294
|
for i = #self.enemys[mapIdx], 1, -1 do
if self.enemys[mapIdx][i].isDead then
|
4faef572
zhouhaihai
冒险任务,冒险扫荡, 冒险中继
|
295
|
local enemy = table.remove(self.enemys[mapIdx], i)
|
7828ffd0
zhouhaihai
冒险 连续选择点 和 地图因子
|
296
297
|
self.adv:enemyDead(enemy, enemy.isDead == 1)
enemy:clear()
|
46fac6f1
zhouahaihai
酱料
|
298
299
|
end
end
|
9687f887
zhouhaihai
建筑被动
|
300
301
302
303
304
305
|
for i = #self.builds[mapIdx], 1, -1 do
if self.builds[mapIdx][i].isDead then
local build = table.remove(self.builds[mapIdx], i)
build:clear()
end
end
|
ec87b4a5
zhouahaihai
冒险 完善
|
306
|
|
d3da3368
zhouhaihai
冒险地图被动技, buff 神器
|
307
308
|
self.player:triggerPassive(Passive.AFTER_ROUND)
|
46fac6f1
zhouahaihai
酱料
|
309
|
if self.player.isDead then
|
4b7c7c96
zhouahaihai
增加 清空 挂机 冒险gm 角色经验
|
310
|
self.adv:over(false)
|
46fac6f1
zhouahaihai
酱料
|
311
312
313
|
end
end
|
e459a5fc
suhongyang
战斗回合检查同步以及回合数据缓存
|
314
|
|
12f7b52c
zhouhaihai
冒险战斗
|
315
316
317
318
|
function Battle:battleBegin(roomId, blockId, params)
local enemy = self:getEnemy(roomId, blockId)
if not enemy then return end
local player = params.player
|
92d7d6ac
zhouhaihai
加一些数据保护
|
319
|
if not player then return end
|
12f7b52c
zhouhaihai
冒险战斗
|
320
321
322
|
-- 玩家没死就是怪死了
if player.hp > 0 then
enemy:hurt(enemy.hp, self.player, {hurtType = 5})
|
e90b4d20
zhouhaihai
战斗buff
|
323
|
self.player:effectBattleBuff()
|
53e8037e
zhouhaihai
任务
|
324
325
|
self.adv.owner:checkTaskEnter("AdvBattleWin", {id = self.adv.chapterId})
|
d3da3368
zhouhaihai
冒险地图被动技, buff 神器
|
326
327
328
|
if params.bySkill then
self.player:triggerPassive(Passive.SKILL_KILL)
end
|
12f7b52c
zhouhaihai
冒险战斗
|
329
|
end
|
43babcff
zhouhaihai
优化冒险结构 增加夹层功能
|
330
331
332
333
334
335
336
|
if player.hp > self.player.hp then
self.player:recover(player.hp - self.player.hp, player)
else
self.player:hurt(math.max(0, math.ceil(self.player.hp - player.hp)), enemy, {hurtType = 5}) --战斗血量只会变少
end
self.player:changeSp(math.floor(player.sp - self.player.sp) , 0) --战斗魔力只会变少
|
12f7b52c
zhouhaihai
冒险战斗
|
337
338
339
|
end
|
46fac6f1
zhouahaihai
酱料
|
340
|
--写入数据
|
43babcff
zhouhaihai
优化冒险结构 增加夹层功能
|
341
342
343
344
345
346
347
348
|
function Battle:saveDB()
for idx, mapEnemys in pairs(self.enemys) do
for _, enemy in ipairs(mapEnemys) do
local block = self.adv:getBlock(enemy.roomId, enemy.blockId, idx)
if block and block:isMonster() then
block.event.enemy = enemy:getDB()
end
end
|
46fac6f1
zhouahaihai
酱料
|
349
|
end
|
6d2df562
zhouhaihai
保存建筑信息
|
350
351
352
353
354
355
356
357
|
for idx, mapBuilds in pairs(self.builds) do
for _, build in ipairs(mapBuilds) do
local block = self.adv:getBlock(build.roomId, build.blockId, idx)
if block and block:isBuild() then
block.event.build = build:getDB()
end
end
end
|
46fac6f1
zhouahaihai
酱料
|
358
359
|
end
|
36c30c5c
zhouahaihai
冒险
|
360
|
return Battle
|