43babcff
zhouhaihai
优化冒险结构 增加夹层功能
|
1
2
3
4
5
6
7
8
9
10
11
12
13
|
--块类型
local AdvCommon = require "adv.AdvCommon"
local Passive = require "adv.AdvPassive"
local Block = class("AdvBlock")
function Block:ctor(room, blockId, event, isOpen, trapId)
self.room = room
self.blockId = blockId
self.col, self.row = AdvCommon.getCrById(self.blockId)
self.isOpen = isOpen and true or false
self.trapId = trapId
|
48962a74
zhouhaihai
路障系统提交
|
14
|
self:updateEvent(event, true)
|
43babcff
zhouhaihai
优化冒险结构 增加夹层功能
|
15
16
17
18
19
20
21
22
23
|
end
function Block:isBoss()
return self:getEventType() == AdvEventType.BOSS
end
function Block:isMonster()
return (self:getEventType() == AdvEventType.BOSS or self:getEventType() == AdvEventType.Monster)
end
|
9687f887
zhouhaihai
建筑被动
|
24
25
26
27
|
function Block:isBuild()
return self:getEventType() == AdvEventType.Build
end
|
cb071e8d
zhouhaihai
多条件选项
|
28
29
30
31
|
function Block:isChoose()
return self:getEventType() == AdvEventType.Choose
end
|
43babcff
zhouhaihai
优化冒险结构 增加夹层功能
|
32
33
34
35
|
function Block:getEventType()
return self.event and self.event.etype
end
|
2d87caee
zhouhaihai
地块替换优化 新的效果类型
|
36
37
38
39
|
function Block:getStageType()
return self.room:getStageType(self.blockId)
end
|
48962a74
zhouhaihai
路障系统提交
|
40
|
function Block:updateEvent(event, isInit)
|
2d87caee
zhouhaihai
地块替换优化 新的效果类型
|
41
42
43
44
45
|
if not isInit then
-- 有些事件删除 需要处理
if self:isBuild() then
self.room.map.adv.battle:removeBuildByPos(self.room.roomId, self.blockId)
elseif self:isMonster() then
|
739cf86a
zhouhaihai
字段名错误
|
46
47
|
if self.event.mId then
self.room.map.adv.battle:removeEnemyById(self.event.mId)
|
2d87caee
zhouhaihai
地块替换优化 新的效果类型
|
48
49
50
|
end
end
end
|
43babcff
zhouhaihai
优化冒险结构 增加夹层功能
|
51
|
self.event = event
|
2d87caee
zhouhaihai
地块替换优化 新的效果类型
|
52
53
|
if not isInit and self.event then
-- 判断下类型是不是错的
|
7dbd787a
zhouhaihai
bug
|
54
|
if not self:getEventData() and (self:getEventType() ~= AdvEventType.Drop or not self.event.item) then
|
2d87caee
zhouhaihai
地块替换优化 新的效果类型
|
55
56
57
58
59
60
|
self:clear()
assert(false, "updateEvent error, : event " .. (event.etype or "nil"))
return
end
self:randomEvent()
end
|
8955225b
zhouhaihai
快速拾取。快速使用
|
61
|
self:quickDrop()
|
43babcff
zhouhaihai
优化冒险结构 增加夹层功能
|
62
63
64
65
66
|
end
function Block:clear()
if self:getEventType() == AdvEventType.Trap then
self.trapId = self.event.id
|
44dd6cae
zhouhaihai
建筑消失删除建筑角色
|
67
68
69
70
71
|
elseif self:getEventType() == AdvEventType.Build then
local build = self.room.map.adv.battle:getBuild(self.room.roomId, self.blockId, self.room.map.mapIdx)
if build then
build.isDead = true
end
|
43babcff
zhouhaihai
优化冒险结构 增加夹层功能
|
72
73
74
75
|
end
self.event = nil
end
|
4f0a5fae
zhouhaihai
营养剂
|
76
77
|
function Block:randomEvent()
|
43babcff
zhouhaihai
优化冒险结构 增加夹层功能
|
78
79
80
81
82
83
84
|
local room = self.room
local map = room.map
local adv = map.adv
--如果翻开有数据处理在这里处理
local randomFunc = {}
--怪
randomFunc[AdvEventType.Monster] = function()
|
43babcff
zhouhaihai
优化冒险结构 增加夹层功能
|
85
86
|
local enemy = adv.battle:getEnemy(room.roomId, self.blockId, map.mapIdx)
if enemy then
|
a0834e49
zhouhaihai
增加潜行 功能
|
87
|
enemy:unlock()
|
43babcff
zhouhaihai
优化冒险结构 增加夹层功能
|
88
89
|
else
enemy = adv.battle:addEnemy(room, self, map.mapIdx)
|
43babcff
zhouhaihai
优化冒险结构 增加夹层功能
|
90
91
|
end
enemy:triggerPassive(Passive.BORN_ONCE)
|
d3da3368
zhouhaihai
冒险地图被动技, buff 神器
|
92
93
94
95
96
|
adv.battle.player:triggerPassive(Passive.OPEN_MONSTER, {trigger = enemy})
for _, monster in pairs(adv.battle.player:getTeam(2)) do
adv.battle.player:triggerPassive(Passive.OPEN_MONSTER, {trigger = enemy})
end
|
43babcff
zhouhaihai
优化冒险结构 增加夹层功能
|
97
98
99
100
|
end
randomFunc[AdvEventType.BOSS] = randomFunc[AdvEventType.Monster]
--掉落
randomFunc[AdvEventType.Drop] = function()
|
2d87caee
zhouhaihai
地块替换优化 新的效果类型
|
101
102
103
|
if not self.event.item then
self.event.item = csvdb["event_dropCsv"][self.event.id]["range"]:randWeight(true)
end
|
43babcff
zhouhaihai
优化冒险结构 增加夹层功能
|
104
105
106
107
108
109
|
end
--交易
randomFunc[AdvEventType.Trader] = function()
local data = csvdb["event_traderCsv"][self.event.id]
self.event.shop = {}
self.event.status = "" --购买次数状态 1 就是购买过了 -- 购买id就是shop索引
|
f8408529
zhouhaihai
冒险商店
|
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
|
local needDiscount = data.discount -- 需要的折扣数量
local curHad = {}
local advShop = adv.owner:getProperty("advShop")
local function randomGoods(range, gcount)
local pool = range:toTableArray(true) -- {{id, weight}, ... }
local function randomOneGood()
for i = #pool, 1, -1 do
local curId = pool[i][1]
local curData = csvdb["event_trader_goodsCsv"][curId]
if not curData then
table.remove(pool, i)
else
if curData.restrict == 1 then -- 冒险内限制
if curData.restrictnum <= ((adv.shopStatus[curId] or 0) + (curHad[curId] or 0)) then
table.remove(pool, i)
end
elseif curData.restrict == 2 then -- 角色限制
if curData.restrictnum <= ((advShop[curId] or 0) + (curHad[curId] or 0)) then
table.remove(pool, i)
end
end
end
end
if #pool <= 0 then
return false
end
local idx = math.randWeight(pool, 2)
local getId = pool[idx][1]
|
b992f1ca
zhouhaihai
bug
|
138
|
local getData = csvdb["event_trader_goodsCsv"][getId]
|
f8408529
zhouhaihai
冒险商店
|
139
|
if getData.restrict ~= 0 then
|
aef8ca87
zhouhaihai
两个bug
|
140
|
curHad[getId] = (curHad[getId] or 0) + 1
|
f8408529
zhouhaihai
冒险商店
|
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
|
end
if getData.discount ~= "" and needDiscount > 0 then
needDiscount = needDiscount - 1
table.insert(self.event.shop, {getId, getData.discount:randWeight()})
else
table.insert(self.event.shop, {getId})
end
return true
end
for i = 1, gcount do
if not randomOneGood() then
break
end
end
end
|
43babcff
zhouhaihai
优化冒险结构 增加夹层功能
|
158
159
160
|
for i = 1, 10 do
local numS, rangeS = "num" .. i, "range" .. i
if data[numS] and data[rangeS] then
|
f8408529
zhouhaihai
冒险商店
|
161
|
randomGoods(data[rangeS], data[numS])
|
43babcff
zhouhaihai
优化冒险结构 增加夹层功能
|
162
163
164
165
166
167
168
|
else
break
end
end
end
--建筑
randomFunc[AdvEventType.Build] = function()
|
9687f887
zhouhaihai
建筑被动
|
169
170
171
172
173
|
local build = adv.battle:getBuild(room.roomId, self.blockId, map.mapIdx)
if build then
build:unlock()
else
build = adv.battle:addEnemy(room, self, map.mapIdx)
|
9687f887
zhouhaihai
建筑被动
|
174
175
|
end
build:triggerPassive(Passive.BORN_ONCE)
|
43babcff
zhouhaihai
优化冒险结构 增加夹层功能
|
176
177
178
179
|
end
randomFunc[AdvEventType.Trap] = function()
local data = csvdb["event_trapCsv"][self.event.id]
|
e058aebe
zhouhaihai
修改生效位置
|
180
181
182
|
-- 因为一些神器效果 提前触发被动
adv.battle.player:triggerPassive(Passive.CLICK_TRAP)
|
7828ffd0
zhouhaihai
冒险 连续选择点 和 地图因子
|
183
|
local buffs = data.effect:toArray(true, "=")
|
f3c37873
zhouhaihai
block
|
184
|
|
b9b9c757
zhouhaihai
陷阱翻开房间
|
185
186
|
local backTrap = true
|
f3c37873
zhouhaihai
block
|
187
188
189
190
191
|
if data.target == 0 then -- 给玩家增加buff
for _, buffId in ipairs(buffs) do
adv.battle.player:addBuff(buffId)
end
elseif data.target == 1 then-- 给玩家 和 所有敌人同样增加buff
|
7828ffd0
zhouhaihai
冒险 连续选择点 和 地图因子
|
192
|
local enemys = adv.battle.player:getTeam(2)
|
f3c37873
zhouhaihai
block
|
193
194
195
|
for _, buffId in ipairs(buffs) do
adv.battle.player:addBuff(buffId)
end
|
7828ffd0
zhouhaihai
冒险 连续选择点 和 地图因子
|
196
197
198
199
200
|
for k , enemy in ipairs(enemys) do
for _, buffId in ipairs(buffs) do
enemy:addBuff(buffId)
end
end
|
b9b9c757
zhouhaihai
陷阱翻开房间
|
201
202
203
|
elseif data.target == 2 then -- 翻开房间
self.room.map.adv:getCurMap():openBlocksByRoom(self.room.roomId)
backTrap = false
|
f3c37873
zhouhaihai
block
|
204
205
|
elseif data.target == 3 then -- 翻开周围8格,并给怪物附带buff(不伤害玩家)
self.room.map.adv:getCurMap():openBlocksBySize(self.room.roomId, self.blockId, 2)
|
a0834e49
zhouhaihai
增加潜行 功能
|
206
207
208
209
|
local enemys = self.room.map.adv:getCurMap():getEnemysBySize(self.room.roomId, self.blockId, 2)
for _, e in ipairs(enemys) do
for _, buffId in ipairs(buffs) do
e:addBuff(buffId)
|
b382964b
zhouhaihai
给翻开的怪加buff
|
210
211
|
end
end
|
7828ffd0
zhouhaihai
冒险 连续选择点 和 地图因子
|
212
|
end
|
b9b9c757
zhouhaihai
陷阱翻开房间
|
213
|
|
7828ffd0
zhouhaihai
冒险 连续选择点 和 地图因子
|
214
215
216
217
218
219
|
if data.specialEff ~= "" then
local effect = data.specialEff:toArray(true, "=")
if effect[1] == 1 then
self.room.map.adv:mapItemChange(effect[2])
end
end
|
e058aebe
zhouhaihai
修改生效位置
|
220
|
|
b176d7d3
zhouhaihai
冒险成就
|
221
|
adv:checkAchievement(adv.AchievType.Trap, 1, self.event.id)
|
b9b9c757
zhouhaihai
陷阱翻开房间
|
222
223
224
|
if backTrap then
adv:backTrap()
end
|
43babcff
zhouhaihai
优化冒险结构 增加夹层功能
|
225
226
227
228
229
230
231
232
233
|
self:clear()
end
if self.event then -- 随机出具体的事件
if randomFunc[self:getEventType()] then
randomFunc[self:getEventType()]()
end
end
|
4f0a5fae
zhouhaihai
营养剂
|
234
235
|
end
|
48962a74
zhouhaihai
路障系统提交
|
236
237
238
239
240
241
242
243
244
245
246
247
|
-- 获取event 数据
function Block:getEventData()
local typToCsv = {
[AdvEventType.Monster] = "event_monsterCsv",
[AdvEventType.BOSS] = "event_monsterCsv",
[AdvEventType.Choose] = "event_chooseCsv",
[AdvEventType.Drop] = "event_dropCsv",
[AdvEventType.Build] = "event_buildingCsv",
[AdvEventType.Trader] = "event_traderCsv",
[AdvEventType.Trap] = "event_trapCsv",
[AdvEventType.Click] = "event_clickCsv",
[AdvEventType.Layer] = "event_layerCsv",
|
48962a74
zhouhaihai
路障系统提交
|
248
249
250
251
252
253
254
255
256
257
|
[AdvEventType.LinkChoose] = "event_linkchooseCsv",
}
local etype = self:getEventType()
if not etype then return end
if not self.event.id then return end
if not typToCsv[etype] then return end
return csvdb[typToCsv[etype]][self.event.id]
end
|
4f0a5fae
zhouhaihai
营养剂
|
258
259
260
261
262
263
264
|
--事件有需要额外处理的部分
function Block:open()
if self.isOpen then return end
local room = self.room
local map = room.map
local adv = map.adv
|
43babcff
zhouhaihai
优化冒险结构 增加夹层功能
|
265
|
self.isOpen = true
|
c843f805
zhouhaihai
bug 栈溢出
|
266
|
self:randomEvent()
|
8955225b
zhouhaihai
快速拾取。快速使用
|
267
|
self:quickDrop()
|
d3da3368
zhouhaihai
冒险地图被动技, buff 神器
|
268
|
return true
|
43babcff
zhouhaihai
优化冒险结构 增加夹层功能
|
269
270
|
end
|
8955225b
zhouhaihai
快速拾取。快速使用
|
271
272
273
274
275
276
277
278
279
280
|
function Block:quickDrop()
if self:getEventType() == AdvEventType.Drop and self.event.item then
local itemId, count = table.unpack(self.event.item)
if globalCsv.adv_auto_collect[itemId] then
self.room.map.adv:award({[itemId] = count}, {log = {desc = "clickDrop"}}, {roomId = self.room.roomId, blockId = self.blockId, tag = 1})
self:clear()
end
end
end
|
48962a74
zhouhaihai
路障系统提交
|
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
|
function Block:getObstacle()
local data = self:getEventData()
if not data then return 0 end
return data.obstacle or 0
end
-- 是否看守周围地板
function Block:isGuard()
return self.isOpen and self:getObstacle() == 2
end
-- 是否是路障
function Block:isHinder()
return self.isOpen and self:getObstacle() == 1
end
-- 玩家是否经过 -- 已经翻开 并且 不是路障
function Block:isWalk()
return self.isOpen and not self:isHinder()
end
|
43babcff
zhouhaihai
优化冒险结构 增加夹层功能
|
302
|
return Block
|