43babcff
zhouhaihai
优化冒险结构 增加夹层功能
|
1
2
3
4
|
local Room = require "adv.AdvRoom"
local Passive = require "adv.AdvPassive"
local AdvCommon = require "adv.AdvCommon"
|
a0834e49
zhouhaihai
增加潜行 功能
|
5
6
|
local Buff = require "adv.AdvBuff"
|
43babcff
zhouhaihai
优化冒险结构 增加夹层功能
|
7
8
9
10
11
12
|
-- 一层地图
local Map = class("AdvMap")
-- 内部方法声明
local createMap, getEventLib
|
0e3ab88d
zhouhaihai
中继层
|
13
|
function Map:ctor(adv, mapIdx, mapInfo, isEnter, isNewRelay)
|
43babcff
zhouhaihai
优化冒险结构 增加夹层功能
|
14
|
self.adv = adv
|
23d9f086
zhouhaihai
展示房间
|
15
16
|
local isNew = type(mapInfo) == "number"
if isNew then -- mapInfo 传入 id
|
0e3ab88d
zhouhaihai
中继层
|
17
|
mapInfo = createMap(self, mapInfo, isEnter, isNewRelay) -- 生成地图
|
43babcff
zhouhaihai
优化冒险结构 增加夹层功能
|
18
19
20
21
22
|
end
if not mapInfo then return end
self.mapIdx = mapIdx
self.mapId = mapInfo.mapId
|
4f0a5fae
zhouhaihai
营养剂
|
23
|
self.isShow = mapInfo.isShow -- 是否全部展示 -- 客户端用
|
43babcff
zhouhaihai
优化冒险结构 增加夹层功能
|
24
|
self.rooms = {}
|
23d9f086
zhouhaihai
展示房间
|
25
|
self:loadRooms(mapInfo.rooms, isNew, isNewRelay)
|
43babcff
zhouhaihai
优化冒险结构 增加夹层功能
|
26
27
|
end
|
23d9f086
zhouhaihai
展示房间
|
28
|
function Map:loadRooms(rooms, isNew, isNewRelay)
|
7ca46333
zhouhaihai
map 传参错误
|
29
30
|
local mapInfoCsv = csvdb["mapCsv"][self.mapId]
local mapData = csvdb["map_" .. mapInfoCsv["path"] .. "Csv"]
|
8c7272a5
zhouhaihai
冒险 地图刷新需求
|
31
|
|
43babcff
zhouhaihai
优化冒险结构 增加夹层功能
|
32
33
|
for roomId, roomName in pairs(mapData["rooms"]) do
if roomName == "path" then
|
7ca46333
zhouhaihai
map 传参错误
|
34
|
self.rooms[roomId] = Room.new(self, roomId, mapData["path"], rooms[roomId], true, isNewRelay, mapInfoCsv.type)
|
43babcff
zhouhaihai
优化冒险结构 增加夹层功能
|
35
36
|
else
roomName = roomName:gsub("/", "_")
|
7ca46333
zhouhaihai
map 传参错误
|
37
|
self.rooms[roomId] = Room.new(self, roomId, csvdb["room_" .. roomName .. "Csv"], rooms[roomId], false, isNewRelay, mapInfoCsv.type)
|
43babcff
zhouhaihai
优化冒险结构 增加夹层功能
|
38
39
|
end
end
|
23d9f086
zhouhaihai
展示房间
|
40
41
42
43
|
if mapInfoCsv.type == 2 and isNew then
self:showMap()
end
|
43babcff
zhouhaihai
优化冒险结构 增加夹层功能
|
44
45
|
end
|
1313eac0
zhouhaihai
冒险的一些bug
|
46
47
48
49
50
51
|
function Map:initBattleAfter()
for roomId, room in pairs(self.rooms) do
room:initBattleAfter()
end
end
|
7b2dc17c
zhouhaihai
地图 层 buff passive
|
52
53
54
55
56
|
function Map:getMapInfoCsv()
return csvdb["mapCsv"][self.mapId]
end
|
43babcff
zhouhaihai
优化冒险结构 增加夹层功能
|
57
58
59
|
function Map:getDB()
local map = {}
map.mapId = self.mapId
|
4f0a5fae
zhouhaihai
营养剂
|
60
|
map.isShow = self.isShow
|
43babcff
zhouhaihai
优化冒险结构 增加夹层功能
|
61
62
63
64
65
66
67
|
map.rooms = {}
for roomId, room in pairs(self.rooms) do
map.rooms[roomId] = room:getDB()
end
return map
end
|
4f0a5fae
zhouhaihai
营养剂
|
68
69
70
71
|
function Map:showMap()
self.isShow = true
end
|
7b64b6cd
zhouhaihai
中继层优化
|
72
73
74
75
76
77
78
79
80
81
82
|
function Map:isAllOpen()
for roomId, room in pairs(self.rooms) do
for blockId, block in pairs(room.blocks) do
if not block.isOpen then
return false
end
end
end
return true
end
|
43babcff
zhouhaihai
优化冒险结构 增加夹层功能
|
83
84
85
86
87
|
--结束本层的时候调用
function Map:checkOver()
local mapCsv = csvdb["mapCsv"][self.mapId]
if mapCsv.clearType == 1 then -- 消耗
|
4fa29210
zhouhaihai
bug
|
88
|
if self.adv:cost(mapCsv.clear:toNumMap(), {log = {desc = "overCost", int1 = self.mapId}}) then return true end
|
43babcff
zhouhaihai
优化冒险结构 增加夹层功能
|
89
90
91
92
|
elseif mapCsv.clearType == 2 then -- 杀光
if #self.adv.battle.player:getTeam(2) == 0 then return true end
elseif mapCsv.clearType == 3 then -- 持有
if self.adv:cost(mapCsv.clear:toNumMap(), {}, true) then return true end
|
1d45a501
zhouhaihai
增加新的退出类型
|
93
|
elseif mapCsv.clearType == 4 then
|
7b64b6cd
zhouhaihai
中继层优化
|
94
|
return self:isAllOpen()
|
43babcff
zhouhaihai
优化冒险结构 增加夹层功能
|
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
|
else
return true
end
end
--随机一个空的位置生成怪, 如果没有就没有
function Map:addNewMonsterRand(monsterId, where)
local room, block
if where then
room, block = where[1], where[2]
else
local pool = {}
for _, room_ in pairs(self.rooms) do
for _, block_ in pairs(room_.blocks) do
if block_.isOpen and not block_.event then
table.insert(pool, {room_, block_})
end
end
end
if not next(pool) then return end
local idx = math.randomInt(1, #pool)
room, block = pool[idx][1], pool[idx][2]
end
if not monsterId then
|
4faef572
zhouhaihai
冒险任务,冒险扫荡, 冒险中继
|
120
|
local eventLib = getEventLib(self, AdvEventType.Monster)
|
43babcff
zhouhaihai
优化冒险结构 增加夹层功能
|
121
122
123
124
|
if not next(eventLib[AdvEventType.Monster][0]) then return false end
monsterId = math.randWeight(eventLib[AdvEventType.Monster][0], "showup")
end
|
a0834e49
zhouhaihai
增加潜行 功能
|
125
|
local event = {
|
2d87caee
zhouhaihai
地块替换优化 新的效果类型
|
126
|
etype = AdvEventType.Monster,
|
a0834e49
zhouhaihai
增加潜行 功能
|
127
128
|
id = monsterId,
}
|
43babcff
zhouhaihai
优化冒险结构 增加夹层功能
|
129
130
|
block:updateEvent(event)
|
43babcff
zhouhaihai
优化冒险结构 增加夹层功能
|
131
132
133
|
return room, block
end
|
2d87caee
zhouhaihai
地块替换优化 新的效果类型
|
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
|
-- 在指定地块类型上 放置指定类型事件id
function Map:layEventToStage(eventType, eventId, count, stage)
local pool = {}
for _, room_ in pairs(self.rooms) do
for _, block_ in pairs(room_.blocks) do
if block_.isOpen and not block_.event and block_:getStageType() == stage then
table.insert(pool, {room_, block_})
end
end
end
if not next(pool) then return {} end
local change = {}
count = math.min(#pool, count)
for i = 1, count do
local idx = math.randomInt(1, #pool)
local room, block = pool[idx][1], pool[idx][2]
table.remove(pool, idx)
local event = {
etype = eventType,
id = eventId,
}
block:updateEvent(event)
table.insert(change, {room, block})
end
return change
end
-- 地图中指定事件 切换为另一个事件
function Map:eventChangeToOther(eventTypeF, eventIdF, eventTypeT, eventIdT, count)
count = count or 1
local pool = {}
for _, room_ in pairs(self.rooms) do
for _, block_ in pairs(room_.blocks) do
if block_.isOpen and block_:getEventType() == eventTypeF and block_.event.id == eventIdF then
table.insert(pool, {room_, block_})
end
end
end
if not next(pool) then return {} end
local change = {}
count = math.min(#pool, count)
for i = 1, count do
local idx = math.randomInt(1, #pool)
local room, block = pool[idx][1], pool[idx][2]
table.remove(pool, idx)
local event = {
etype = eventTypeT,
id = eventIdT,
}
block:updateEvent(event)
table.insert(change, {room, block})
end
return change
end
|
e1b26027
zhouhaihai
增加移除项目排除功能
|
191
|
function Map:clearEventById(eventType, eventId, count, exclude)
|
2d87caee
zhouhaihai
地块替换优化 新的效果类型
|
192
193
|
count = count or 0
eventId = eventId or 0
|
e1b26027
zhouhaihai
增加移除项目排除功能
|
194
|
exclude = exclude or {}
|
2d87caee
zhouhaihai
地块替换优化 新的效果类型
|
195
196
|
local pool = {}
|
e1b26027
zhouhaihai
增加移除项目排除功能
|
197
198
199
200
|
for roomId, room_ in pairs(self.rooms) do
exclude[roomId] = exclude[roomId] or {}
for blockId, block_ in pairs(room_.blocks) do
if not exclude[roomId][blockId] and block_.isOpen and block_:getEventType() == eventType and (eventId == 0 or block_.event.id == eventId) then
|
2d87caee
zhouhaihai
地块替换优化 新的效果类型
|
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
|
table.insert(pool, {room_, block_})
end
end
end
if not next(pool) then return {} end
local change = {}
if count == 0 then
count = #pool
else
count = math.min(#pool, count)
end
for i = 1, count do
local idx = math.randomInt(1, #pool)
local room, block = pool[idx][1], pool[idx][2]
table.remove(pool, idx)
block:updateEvent(nil)
table.insert(change, {room, block})
end
return change
end
|
43babcff
zhouhaihai
优化冒险结构 增加夹层功能
|
223
|
-- 随机翻开 num 个 以开放的房间的 地块
|
c8210d56
zhouhaihai
boss 房有入口
|
224
|
function Map:openBlockRand(num, isPlayer, ignoreBack)
|
43babcff
zhouhaihai
优化冒险结构 增加夹层功能
|
225
226
227
228
229
230
231
232
233
234
235
236
|
local pool = {}
for _, room in pairs(self.rooms) do
if room.isShow and not room.isPath then
for _, block in pairs(room.blocks) do
if not block.isOpen then
table.insert(pool, {room.roomId, block.blockId})
end
end
end
end
if #pool <= num then
for _, temp in ipairs(pool) do
|
c8210d56
zhouhaihai
boss 房有入口
|
237
|
self:openBlock(temp[1], temp[2], isPlayer, ignoreBack)
|
43babcff
zhouhaihai
优化冒险结构 增加夹层功能
|
238
239
240
241
|
end
else
for i = 1, num do
local idx = math.randomInt(1, #pool)
|
c8210d56
zhouhaihai
boss 房有入口
|
242
|
self:openBlock(pool[idx][1], pool[idx][2], isPlayer, ignoreBack)
|
43babcff
zhouhaihai
优化冒险结构 增加夹层功能
|
243
244
245
246
247
248
|
table.remove(pool, idx)
end
end
end
|
48962a74
zhouhaihai
路障系统提交
|
249
|
-- 打开一个地块 操作翻开地块的入口方法 !!!
|
8781e103
zhouhaihai
冒险 bug
|
250
|
function Map:openBlock(roomId, blockId, isPlayer, ignoreBack)
|
43babcff
zhouhaihai
优化冒险结构 增加夹层功能
|
251
252
253
254
|
local room = self.rooms[roomId]
if not room then return end
local block = room.blocks[blockId]
if not block then return end
|
c8210d56
zhouhaihai
boss 房有入口
|
255
256
257
258
|
local status = room:openBlock(block)
if status then
if isPlayer then
|
6826fdf6
zhouhaihai
被动触发
|
259
|
self.adv.battle:triggerPassive(Passive.OPEN_BLOCK, {roomId = roomId, blockId = blockId})
|
d677158e
zhouhaihai
调整打开地块位置
|
260
|
self.adv.owner:checkTaskEnter("AdvOpenBlock")
|
29fe5045
zhouhaihai
检查点修改
|
261
262
263
264
265
266
267
268
269
|
-- 潜行检查
local sneakBuff = self.adv.battle.player:hadBuff(Buff.SNEAK)
if sneakBuff then
local enemys = self:getEnemysBySize(roomId, blockId, 2)
if #enemys > 0 then
sneakBuff:uncover()
end
end
|
c8210d56
zhouhaihai
boss 房有入口
|
270
271
272
273
274
|
end
if not ignoreBack then
self.adv:backBlockChange(roomId, blockId)
end
|
d3da3368
zhouhaihai
冒险地图被动技, buff 神器
|
275
|
end
|
b6a2b78b
zhouhaihai
冒险 buff 类型 34 35
|
276
|
return status
|
43babcff
zhouhaihai
优化冒险结构 增加夹层功能
|
277
278
|
end
|
c8210d56
zhouhaihai
boss 房有入口
|
279
|
function Map:openBlocksBySize(roomId, blockId, size, isPlayer, ignoreBack)
|
d3da3368
zhouhaihai
冒险地图被动技, buff 神器
|
280
281
|
local blocks = self:getBlocksBySize(roomId, blockId, size)
for _, block in pairs(blocks) do
|
c8210d56
zhouhaihai
boss 房有入口
|
282
|
self:openBlock(block.room.roomId, block.blockId, isPlayer, ignoreBack)
|
d3da3368
zhouhaihai
冒险地图被动技, buff 神器
|
283
284
285
|
end
end
|
c8210d56
zhouhaihai
boss 房有入口
|
286
|
function Map:openBlocksByRoom(roomId, isPlayer, ignoreBack)
|
d3da3368
zhouhaihai
冒险地图被动技, buff 神器
|
287
|
local room = self.rooms[roomId]
|
c8210d56
zhouhaihai
boss 房有入口
|
288
|
if not room then return end
|
d3da3368
zhouhaihai
冒险地图被动技, buff 神器
|
289
290
|
for blockId, block in pairs(room.blocks) do
|
c8210d56
zhouhaihai
boss 房有入口
|
291
|
self:openBlock(roomId, blockId, isPlayer, ignoreBack)
|
d3da3368
zhouhaihai
冒险地图被动技, buff 神器
|
292
293
294
|
end
end
|
6826fdf6
zhouhaihai
被动触发
|
295
|
function Map:openBlocksIsMonsterByRoom(roomId, count, isPlayer, ignoreBack)
|
b6a2b78b
zhouhaihai
冒险 buff 类型 34 35
|
296
297
298
|
local room = self.rooms[roomId]
if not room then return end
|
6826fdf6
zhouhaihai
被动触发
|
299
|
local allBlock = {}
|
b6a2b78b
zhouhaihai
冒险 buff 类型 34 35
|
300
|
for blockId, block in pairs(room.blocks) do
|
6826fdf6
zhouhaihai
被动触发
|
301
302
303
304
305
306
307
308
309
310
311
|
if block:isMonster() and not block.isOpen then
table.insert(allBlock, blockId)
end
end
local enemys = {}
local openBlock = function(blockId)
if self:openBlock(roomId, blockId, isPlayer, ignoreBack) then
local e = self.adv.battle:getEnemy(roomId, blockId)
if e then
table.insert(enemys, e)
|
b6a2b78b
zhouhaihai
冒险 buff 类型 34 35
|
312
313
314
|
end
end
end
|
6826fdf6
zhouhaihai
被动触发
|
315
316
317
318
319
320
321
322
323
324
325
326
|
if not count or count == -1 or count >= len(allBlock) then
for _, blockId in ipairs(allBlock) do
openBlock(blockId)
end
else
for i = 1, count do
local idx = math.randomInt(1, len(allBlock))
openBlock(allBlock[idx])
table.remove(allBlock, idx)
end
end
|
b6a2b78b
zhouhaihai
冒险 buff 类型 34 35
|
327
328
329
|
return enemys
end
|
c8210d56
zhouhaihai
boss 房有入口
|
330
|
function Map:openAllBlocks(isPlayer, ignoreBack)
|
d3da3368
zhouhaihai
冒险地图被动技, buff 神器
|
331
|
for roomId, room in pairs(self.rooms) do
|
c8210d56
zhouhaihai
boss 房有入口
|
332
|
self:openBlocksByRoom(room.roomId, isPlayer, ignoreBack)
|
d3da3368
zhouhaihai
冒险地图被动技, buff 神器
|
333
334
335
|
end
end
|
43babcff
zhouhaihai
优化冒险结构 增加夹层功能
|
336
337
338
339
340
341
342
343
344
345
346
|
--获取,某个位置上的 room 和 block
function Map:getRBByPos(c, r)
for roomId, room in pairs(self.rooms) do
local block = room:getBByGPos(c, r)
if block then
return room, block
end
end
end
|
6826fdf6
zhouhaihai
被动触发
|
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
|
function Map:getDistance(froomId, fblockId, troomId, tblockId)
local distance = -1
local room1 = self.rooms[froomId]
local room2 = self.rooms[troomId]
if room1 and room2 then
local block1 = room1[fblockId]
local block2 = room2[tblockId]
if block1 and block2 then
local c1, r1 = room1:tranLtoG(block1.col, block1.row)
local c2, r2 = room2:tranLtoG(block2.col, block2.row)
distance = math.max(math.abs(c1 - c2), math.abs(r1 - r2))
end
end
return distance
end
|
43babcff
zhouhaihai
优化冒险结构 增加夹层功能
|
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
|
function Map:getAroundBlocks(room, block)
local blocks = {}
local range = {1, -1}
local col, row = room:tranLtoG(block.col, block.row)
for _, add in ipairs(range) do
local rroom, rblock = self:getRBByPos(col + add, row)
if rroom then
table.insert(blocks, {rroom, rblock})
end
end
for _, add in ipairs(range) do
local rroom, rblock = self:getRBByPos(col, row + add)
if rroom then
table.insert(blocks, {rroom, rblock})
end
end
return blocks
end
|
4f0a5fae
zhouhaihai
营养剂
|
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
|
function Map:getBlocksBySize(roomId, blockId, size)
local blocks = {}
local room = self.rooms[roomId]
if not room then return end
local block = room.blocks[blockId]
if not block then return end
local col, row = room:tranLtoG(block.col, block.row)
size = math.floor(size / 2)
for c = col - size, col + size do
for r = row - size, row + size do
local rroom, rblock = self:getRBByPos(c, r)
if rroom then
table.insert(blocks, rblock)
end
end
end
return blocks
end
|
9104a922
zhouhaihai
多重掉落
|
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
|
-- 找周围的空格子 最多 49 个
function Map:getEmptyBlocks(roomId, blockId, count)
local blocks = {}
if count == 0 then return blocks end
local room = self.rooms[roomId]
if not room then return end
local block = room.blocks[blockId]
if not block then return end
local col, row = room:tranLtoG(block.col, block.row)
-- 找周围49个格子
for range = 0, 3 do
if range == 0 then
if block.isOpen and not block:getEventType() then
blocks[#blocks + 1] = block
if #blocks >= count then
return blocks
end
end
else
for _, c in ipairs({col - range , col + range}) do
for r = row - range, row + range do
local rroom, rblock = self:getRBByPos(c, r)
if rroom and rblock.isOpen and not rblock:getEventType() then
blocks[#blocks + 1] = rblock
if #blocks >= count then
return blocks
end
end
end
end
for _, r in ipairs({row - range , row + range}) do
for c = col - range + 1, col + range - 1 do
local rroom, rblock = self:getRBByPos(c, r)
if rroom and rblock.isOpen and not rblock:getEventType() then
blocks[#blocks + 1] = rblock
if #blocks >= count then
return blocks
end
end
end
end
end
end
return blocks
end
|
a0834e49
zhouhaihai
增加潜行 功能
|
452
453
454
455
456
457
458
459
460
461
462
463
464
465
|
function Map:getEnemysBySize(roomId, blockId, size)
local blocks = self:getBlocksBySize(roomId, blockId, size)
local enemys = {}
for _, block in ipairs(blocks) do
if block:isMonster() then
local e = self.adv.battle:getEnemy(block.room.roomId, block.blockId)
if e then
table.insert(enemys, e)
end
end
end
return enemys
end
|
1e789624
zhouhaihai
新的 buff 效果
|
466
467
468
469
470
471
472
473
474
475
476
477
|
function Map:getEventTypeAllMap(eventType)
local blocks = {}
if not eventType then return blocks end
for roomId, room in pairs(self.rooms) do
for blockId, block in pairs(room.blocks) do
if block.isOpen and block:getEventType() == eventType then
table.insert(blocks, block)
end
end
end
return blocks
end
|
43babcff
zhouhaihai
优化冒险结构 增加夹层功能
|
478
479
|
-----------------------------随机地图-----------------------------
|
0e3ab88d
zhouhaihai
中继层
|
480
481
|
-- isEnter isNewRelay 区分中继层的类型 --是否是开始进入 是否是第一次进入
createMap = function(self, mapId, isEnter, isNewRelay)
|
43babcff
zhouhaihai
优化冒险结构 增加夹层功能
|
482
483
484
485
486
487
488
489
490
|
local mapInfo = {}
mapInfo.rooms = {}
mapInfo.mapId = mapId
local mapCsvData =csvdb["mapCsv"][mapId]
local mapData = csvdb["map_" .. mapCsvData["path"] .. "Csv"]
if not mapData then
error("mapId " .. mapId .. " dont exist!")
return
end
|
8c7272a5
zhouhaihai
冒险 地图刷新需求
|
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
|
local etypeToStr = {
[AdvEventType.Choose] = "choose",
[AdvEventType.Drop] = "drop",
[AdvEventType.Monster] = "monster",
[AdvEventType.Trader] = "trader",
[AdvEventType.Build] = "building",
[AdvEventType.Trap] = "trap",
[AdvEventType.Click] = "click",
}
local highLevelEvent = {}
for _etype, _str in pairs(etypeToStr) do
if mapCsvData[_str] ~= "" then
highLevelEvent[_etype] = {}
end
for _id, _count in pairs(mapCsvData[_str]:toNumMap()) do
local _curData = csvdb["event_" .. _str .. "Csv"][_id]
if _curData then
highLevelEvent[_etype][_curData.BlockEventType] = highLevelEvent[_etype][_curData.BlockEventType] or {}
|
51f42130
zhouhaihai
地图限制bug
|
511
|
highLevelEvent[_etype][_curData.BlockEventType][_id] = {showup = _curData.showup, limit = _count, dlimit = _curData.limit}
|
8c7272a5
zhouhaihai
冒险 地图刷新需求
|
512
513
514
515
|
end
end
end
|
43babcff
zhouhaihai
优化冒险结构 增加夹层功能
|
516
|
--事件随机
|
4faef572
zhouhaihai
冒险任务,冒险扫荡, 冒险中继
|
517
|
local eventLib = getEventLib(self) -- 同时记录出现次数
|
43babcff
zhouhaihai
优化冒险结构 增加夹层功能
|
518
519
|
local monsterEvents = {} --处理钥匙掉落
local haveBoss = false
|
7828ffd0
zhouhaihai
冒险 连续选择点 和 地图因子
|
520
|
local haveLChoose = false
|
43babcff
zhouhaihai
优化冒险结构 增加夹层功能
|
521
|
|
17d8d855
zhouhaihai
冒险 时间 limit 改为全局
|
522
|
local eventLimit = self.adv.owner:getProperty("advLimit")
|
43babcff
zhouhaihai
优化冒险结构 增加夹层功能
|
523
524
525
526
527
528
529
530
531
532
533
534
535
|
local function randomEvent(roomId, blockId, eventType)
if mapInfo.rooms[roomId]["event"][blockId] then return end --已经有事件了 不覆盖
local etype, especial = eventType, 0
if eventType > 100 then -- 特殊事件(固定)
etype = math.floor(eventType / 100)
especial = eventType % 100
end
local event = {etype = etype}
local randomFunc = {}
local function randomCommon()
|
8c7272a5
zhouhaihai
冒险 地图刷新需求
|
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
|
-- 刷新地图专属的
local function randomByLevelLib(lib)
-- 刷新通用的
if not lib[etype] or not next(lib[etype]) or not lib[etype][especial] then return false end
-- 清一下全关卡次数用完的
for _eid, _edata in pairs(lib[etype][especial]) do
if _edata.dlimit ~= 0 and ((eventLimit[etype] or {})[_eid] or 0) >= _edata.dlimit then
lib[etype][especial][_eid] = nil
end
end
if not next(lib[etype][especial]) then return false end
event.id = math.randWeight(lib[etype][especial], "showup")
if not event.id then return false end
-- 不是 0 才会记录
if lib[etype][especial][event.id].dlimit ~= 0 then
eventLimit[etype] = eventLimit[etype] or {}
eventLimit[etype][event.id] = (eventLimit[etype][event.id] or 0) + 1
end
-- 消除单层次数用完的
if lib[etype][especial][event.id].limit > 1 then
lib[etype][especial][event.id].limit = lib[etype][especial][event.id].limit - 1
elseif lib[etype][especial][event.id].limit == 1 then
lib[etype][especial][event.id] = nil
end
return true
|
17d8d855
zhouhaihai
冒险 时间 limit 改为全局
|
565
566
|
end
|
8c7272a5
zhouhaihai
冒险 地图刷新需求
|
567
568
569
|
local status = randomByLevelLib(highLevelEvent)
if not status then
status = randomByLevelLib(eventLib)
|
43babcff
zhouhaihai
优化冒险结构 增加夹层功能
|
570
|
end
|
8c7272a5
zhouhaihai
冒险 地图刷新需求
|
571
|
return status
|
43babcff
zhouhaihai
优化冒险结构 增加夹层功能
|
572
573
574
575
576
|
end
--入口
randomFunc[AdvEventType.In] = function()end
--出口
|
e51ff6d2
zhouhaihai
冒险~
|
577
578
579
580
581
582
|
randomFunc[AdvEventType.Out] = function()end
-- --中继点出口
-- randomFunc[AdvEventType.Exit] = function()
-- -- if not self.adv.isRelay or self.adv.owner:checkOverGuide(GuideStep.AdvRelay) then return false end
-- return false
-- end
|
0e3ab88d
zhouhaihai
中继层
|
583
584
585
586
587
|
--开放出口
randomFunc[AdvEventType.InOut] = function() end
--开放出口
randomFunc[AdvEventType.Diner] = function()
|
c85f5bd6
zhouhaihai
新中继的屏蔽删掉
|
588
|
-- if not self.adv.isRelay or isEnter or isNewRelay then return false end
|
ed20b43c
zhouhaihai
冒险bug
|
589
|
-- if not self.adv.isRelay or isEnter then return false end
|
0e3ab88d
zhouhaihai
中继层
|
590
591
|
end
|
43babcff
zhouhaihai
优化冒险结构 增加夹层功能
|
592
593
594
595
596
597
598
|
--boss
randomFunc[AdvEventType.BOSS] = function()
if haveBoss then return false end
if randomCommon() == false then
return false
end
haveBoss = true
|
e994ca55
zhouhaihai
任务 自动领取
|
599
|
self.haveBoss = true -- 刷新任务用的临时变量
|
43babcff
zhouhaihai
优化冒险结构 增加夹层功能
|
600
|
end
|
7828ffd0
zhouhaihai
冒险 连续选择点 和 地图因子
|
601
602
603
604
605
606
607
608
609
610
611
612
|
randomFunc[AdvEventType.LinkChoose] = function()
if haveLChoose then return false end
if self.adv.lchoose.ing then -- 有正在进行的
event.id = self.adv.lchoose.ing
self.adv.lchoose.ing = nil
else
if randomCommon() == false then
return false
end
end
haveLChoose = true
end
|
09be9059
zhouhaihai
冒险接口
|
613
|
|
43babcff
zhouhaihai
优化冒险结构 增加夹层功能
|
614
615
616
617
618
|
--怪物
randomFunc[AdvEventType.Monster] = function()
if randomCommon() == false then
return false
end
|
5de33f03
zhouhaihai
nokey
|
619
620
621
622
623
|
local curData = csvdb["event_monsterCsv"][event.id]
if curData.noKey and curData.noKey == 1 then
else
table.insert(monsterEvents, event)
end
|
43babcff
zhouhaihai
优化冒险结构 增加夹层功能
|
624
625
626
627
628
629
630
|
end
--选择点
randomFunc[AdvEventType.Choose] = randomCommon
--掉落点
randomFunc[AdvEventType.Drop] = randomCommon
--交易所
|
0e3ab88d
zhouhaihai
中继层
|
631
|
randomFunc[AdvEventType.Trader] = function()
|
c85f5bd6
zhouhaihai
新中继的屏蔽删掉
|
632
|
-- if self.adv.isRelay and isNewRelay then return false end
|
0e3ab88d
zhouhaihai
中继层
|
633
634
|
return randomCommon()
end
|
43babcff
zhouhaihai
优化冒险结构 增加夹层功能
|
635
|
--建筑
|
0e3ab88d
zhouhaihai
中继层
|
636
|
randomFunc[AdvEventType.Build] = function()
|
ed20b43c
zhouhaihai
冒险bug
|
637
|
-- if self.adv.isRelay and isEnter then return false end
|
0e3ab88d
zhouhaihai
中继层
|
638
639
|
return randomCommon()
end
|
43babcff
zhouhaihai
优化冒险结构 增加夹层功能
|
640
641
642
643
644
645
|
--陷阱
randomFunc[AdvEventType.Trap] = randomCommon
--点击生效
randomFunc[AdvEventType.Click] = randomCommon
--跨层点
randomFunc[AdvEventType.Layer] = randomCommon
|
43babcff
zhouhaihai
优化冒险结构 增加夹层功能
|
646
647
648
649
650
651
652
653
654
655
656
|
if randomFunc[etype] then
if randomFunc[etype]() ~= false then
if mapCsvData.clearType == 1 and etype == AdvEventType.BOSS then
event.item = mapCsvData.clear:toArray(true, "=")
end
mapInfo.rooms[roomId]["event"][blockId] = event
end
end
end
|
6dc482bb
zhouhaihai
中继层完成, 新增两个冒险物品使用效果
|
657
658
659
660
661
|
local function giveEvent(roomId, blockId, eventType, eventId)
local event = {etype = eventType, id = eventId}
mapInfo.rooms[roomId]["event"][blockId] = event
end
|
43babcff
zhouhaihai
优化冒险结构 增加夹层功能
|
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
|
local stagePool = {["global"] = {}}
for roomId, roomName in pairs(mapData["rooms"]) do
stagePool[roomId] = {}
mapInfo.rooms[roomId] = {event = {}, open = {}, trap = {}} -- 事件, open open == 1 房间内地块全部开放
local roomData
if roomName == "path" then
roomData = mapData["path"]
else
roomName = roomName:gsub("/", "_")
roomData = csvdb["room_" .. roomName .. "Csv"]
end
for blockId, stageType in pairs(roomData["blocks"]) do
if AdvSpecialStage[stageType] then
local eventType = AdvEventType[AdvSpecialStage[stageType]] -- 地块固定类型
randomEvent(roomId, blockId, eventType)
else
stagePool["global"][stageType] = stagePool["global"][stageType] or {}
stagePool[roomId][stageType] = stagePool[roomId][stageType] or {}
table.insert(stagePool["global"][stageType], {room = roomId, block = blockId})
stagePool[roomId][stageType][blockId] = 1
end
end
end
|
6dc482bb
zhouhaihai
中继层完成, 新增两个冒险物品使用效果
|
686
687
688
689
690
|
-- 随机功能需要强制随机的东西
if self.adv.isRelay and isNewRelay then
local relayData = self.adv:isHaveRelay()
if relayData then
|
7b64b6cd
zhouhaihai
中继层优化
|
691
692
|
-- choose
|
6dc482bb
zhouhaihai
中继层完成, 新增两个冒险物品使用效果
|
693
694
|
local choose = relayData.choose:toArray(true, "=")
local lastCount = stagePool["global"][AdvCodeRandomStage] and #stagePool["global"][AdvCodeRandomStage] or 0
|
6dc482bb
zhouhaihai
中继层完成, 新增两个冒险物品使用效果
|
695
|
for _, chooseId in pairs(choose) do
|
f60fc764
zhouhaihai
bug
|
696
|
if lastCount <= 0 then break end
|
6dc482bb
zhouhaihai
中继层完成, 新增两个冒险物品使用效果
|
697
698
699
700
701
702
703
|
local idx = math.randomInt(1, lastCount)
local cur = stagePool["global"][AdvCodeRandomStage][idx]
giveEvent(cur["room"], cur["block"], AdvEventType.Choose, chooseId)
table.remove(stagePool["global"][AdvCodeRandomStage], idx)
lastCount = lastCount - 1
|
6fe355d6
zhouhaihai
map bug
|
704
|
stagePool[cur["room"]][AdvCodeRandomStage][cur["block"]] = nil
|
6dc482bb
zhouhaihai
中继层完成, 新增两个冒险物品使用效果
|
705
|
end
|
7b64b6cd
zhouhaihai
中继层优化
|
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
|
-- 掉落
local drop = relayData.drop:toNumMap()
for dropId, dropCount in pairs(drop) do
for i = 1, dropCount do
if lastCount <= 0 then break end
local idx = math.randomInt(1, lastCount)
local cur = stagePool["global"][AdvCodeRandomStage][idx]
giveEvent(cur["room"], cur["block"], AdvEventType.Drop, dropId)
table.remove(stagePool["global"][AdvCodeRandomStage], idx)
lastCount = lastCount - 1
stagePool[cur["room"]][AdvCodeRandomStage][cur["block"]] = nil
end
end
|
6dc482bb
zhouhaihai
中继层完成, 新增两个冒险物品使用效果
|
722
723
724
|
end
end
|
9ced5432
zhouhaihai
冒险支援效果 保底事件
|
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
|
-- 低保事件
local exEvent = {}
-- 首层额外刷新
if isEnter then
local first = self.adv:supportFirstLayerAddEvent()
if first then
exEvent = first
end
end
-- 每层额外刷新
if not self.adv.isRelay then
local every = self.adv:supportEveryLayerAddEvent()
if every then
for etype, events in pairs(every) do
exEvent[etype] = exEvent[etype] or {}
for id, num in pairs(events) do
exEvent[etype][id] = (exEvent[etype][id] or 0) + num
end
end
end
end
local lastCount = stagePool["global"][AdvCodeRandomStage] and #stagePool["global"][AdvCodeRandomStage] or 0
for etype, events in pairs(exEvent) do
if lastCount <= 0 then break end
for id, num in pairs(events) do
if lastCount <= 0 then break end
for i = 1, num do
if lastCount <= 0 then break end
local idx = math.randomInt(1, lastCount)
local cur = stagePool["global"][AdvCodeRandomStage][idx]
giveEvent(cur["room"], cur["block"], etype, id)
table.remove(stagePool["global"][AdvCodeRandomStage], idx)
lastCount = lastCount - 1
stagePool[cur["room"]][AdvCodeRandomStage][cur["block"]] = nil
end
end
end
|
43babcff
zhouhaihai
优化冒险结构 增加夹层功能
|
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
|
-- 全地图事件 优先级高
for stageType, events in pairs(mapData["events"]) do
for _, event in ipairs(events) do
local lastCount = stagePool["global"][stageType] and #stagePool["global"][stageType] or 0
if lastCount <= 0 then break end
if math.randomFloat(0, 1) <= (event["rate"] or 1) then
local count = math.randomInt(math.min(lastCount, event["minc"]), math.min(lastCount, event["maxc"]))
for i = 1, count do
local idx = math.randomInt(1, lastCount)
local cur = stagePool["global"][stageType][idx]
randomEvent(cur["room"], cur["block"], event["event"])
table.remove(stagePool["global"][stageType], idx)
lastCount = lastCount - 1
stagePool[cur["room"]][stageType][cur["block"]] = nil
end
end
end
end
-- 随机单个房间的事件
for roomId, roomName in pairs(mapData["rooms"]) do
local roomData
if roomName == "path" then
roomData = mapData["path"]
else
roomName = roomName:gsub("/", "_")
roomData = csvdb["room_" .. roomName .. "Csv"]
end
for stageType, events in pairs(roomData["events"]) do
local bpool = {}
if stagePool[roomId][stageType] then
for block, _ in pairs(stagePool[roomId][stageType]) do
table.insert(bpool, block)
end
end
for _, event in ipairs(events) do
if #bpool <= 0 then break end
if math.randomFloat(0, 1) <= (event["rate"] or 1) then
local count = math.randomInt(math.min(#bpool, event["minc"]), math.min(#bpool, event["maxc"]))
for i = 1, count do
local idx = math.randomInt(1, #bpool)
randomEvent(roomId, bpool[idx], event["event"])
table.remove(bpool, idx)
end
end
end
end
end
if mapCsvData.clearType == 1 and not haveBoss then
if not next(monsterEvents) then
error("这个地图没有钥匙!!! mapId : " .. mapId)
else
local event = monsterEvents[math.randomInt(1, #monsterEvents)]
event.item = mapCsvData.clear:toArray(true, "=") --掉落钥匙
end
end
|
17d8d855
zhouhaihai
冒险 时间 limit 改为全局
|
823
|
self.adv.owner:setProperty("advLimit", eventLimit)
|
43babcff
zhouhaihai
优化冒险结构 增加夹层功能
|
824
825
826
827
|
return mapInfo
end
--关卡事件库
|
4faef572
zhouhaihai
冒险任务,冒险扫荡, 冒险中继
|
828
829
|
getEventLib = function(self, needEventType) -- needEventType 需要的事件
local chapterId, level = self.adv.chapterId, self.adv.level
|
8da953a7
zhouhaihai
无尽模式
|
830
|
if AdvCommon.isEndless(chapterId) then
|
916096ed
zhouhaihai
神器效果
|
831
|
level = AdvCommon.getEndlessDataLv(chapterId, level)
|
8da953a7
zhouhaihai
无尽模式
|
832
|
end
|
43babcff
zhouhaihai
优化冒险结构 增加夹层功能
|
833
834
835
836
837
838
839
840
841
|
local libsToType = {
["event_monsterCsv"] = {AdvEventType.Monster, AdvEventType.BOSS, AdvEventType.Monster},
["event_chooseCsv"] = AdvEventType.Choose,
["event_dropCsv"] = AdvEventType.Drop,
["event_buildingCsv"] = AdvEventType.Build,
["event_traderCsv"] = AdvEventType.Trader,
["event_trapCsv"] = AdvEventType.Trap,
["event_clickCsv"] = AdvEventType.Click,
["event_layerCsv"] = AdvEventType.Layer,
|
7828ffd0
zhouhaihai
冒险 连续选择点 和 地图因子
|
842
|
["event_linkchooseCsv"] = AdvEventType.LinkChoose,
|
43babcff
zhouhaihai
优化冒险结构 增加夹层功能
|
843
844
|
}
local eventLib = {}
|
4faef572
zhouhaihai
冒险任务,冒险扫荡, 冒险中继
|
845
846
847
|
local advEventOpenStatus = self.adv.owner:advEventOpenStatus()
|
17d8d855
zhouhaihai
冒险 时间 limit 改为全局
|
848
849
|
local eventLimit = self.adv.owner:getProperty("advLimit")
|
43babcff
zhouhaihai
优化冒险结构 增加夹层功能
|
850
851
852
853
854
855
856
857
858
859
860
861
|
for lib, eventType in pairs(libsToType) do
-- init eventLib
if type(eventType) == "table" then
for _, temp in ipairs(eventType) do
eventLib[temp] = {}
end
else
eventLib[eventType] = {}
end
-- needEventType 只获取这个事件类型
if not needEventType or eventLib[needEventType] then
for id, data in pairs(csvdb[lib]) do
|
4faef572
zhouhaihai
冒险任务,冒险扫荡, 冒险中继
|
862
863
|
local etype = type(eventType) == "table" and eventType[data.type] or eventType
|
4d943586
zhouhaihai
直通 advt gm
|
864
|
if data.levelchapter == chapterId and (data.unlockType == 0 or (advEventOpenStatus[etype] or {})[data.unlockType]) then
|
7828ffd0
zhouhaihai
冒险 连续选择点 和 地图因子
|
865
866
867
868
869
870
|
local add = true
if etype == AdvEventType.LinkChoose then --link 只有起始任务并且还没完成的进入池子
if id % 10 ~= 1 or (data.limit ~= 0 and data.limit <= (self.adv.lchoose[id] or 0)) then
add = false
end
end
|
17d8d855
zhouhaihai
冒险 时间 limit 改为全局
|
871
|
|
8c7272a5
zhouhaihai
冒险 地图刷新需求
|
872
873
|
-- limit 单次上限 默认无限
local limit = 0
|
17d8d855
zhouhaihai
冒险 时间 limit 改为全局
|
874
875
876
877
|
if add and (etype == AdvEventType.LinkChoose or etype == AdvEventType.Choose) then --只能有一次
limit = 1
end
|
7828ffd0
zhouhaihai
冒险 连续选择点 和 地图因子
|
878
879
880
|
if add then
if AdvCommon.checkIsIn(level, data.leveltype, data.levellimit) then
eventLib[etype][data.BlockEventType] = eventLib[etype][data.BlockEventType] or {}
|
17d8d855
zhouhaihai
冒险 时间 limit 改为全局
|
881
|
eventLib[etype][data.BlockEventType][id] = {showup = data.showup, limit = limit, dlimit = data.limit}
|
7828ffd0
zhouhaihai
冒险 连续选择点 和 地图因子
|
882
|
end
|
43babcff
zhouhaihai
优化冒险结构 增加夹层功能
|
883
884
885
886
887
888
889
890
891
892
893
|
end
end
end
if needEventType then
break
end
end
end
return eventLib
end
|
43babcff
zhouhaihai
优化冒险结构 增加夹层功能
|
894
|
return Map
|