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
|
43babcff
zhouhaihai
优化冒险结构 增加夹层功能
|
61
62
63
64
65
|
end
function Block:clear()
if self:getEventType() == AdvEventType.Trap then
self.trapId = self.event.id
|
44dd6cae
zhouhaihai
建筑消失删除建筑角色
|
66
67
68
69
70
|
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
优化冒险结构 增加夹层功能
|
71
72
73
74
|
end
self.event = nil
end
|
4f0a5fae
zhouhaihai
营养剂
|
75
76
|
function Block:randomEvent()
|
43babcff
zhouhaihai
优化冒险结构 增加夹层功能
|
77
78
79
80
81
82
83
|
local room = self.room
local map = room.map
local adv = map.adv
--如果翻开有数据处理在这里处理
local randomFunc = {}
--怪
randomFunc[AdvEventType.Monster] = function()
|
43babcff
zhouhaihai
优化冒险结构 增加夹层功能
|
84
85
|
local enemy = adv.battle:getEnemy(room.roomId, self.blockId, map.mapIdx)
if enemy then
|
a0834e49
zhouhaihai
增加潜行 功能
|
86
|
enemy:unlock()
|
43babcff
zhouhaihai
优化冒险结构 增加夹层功能
|
87
88
|
else
enemy = adv.battle:addEnemy(room, self, map.mapIdx)
|
43babcff
zhouhaihai
优化冒险结构 增加夹层功能
|
89
90
|
end
enemy:triggerPassive(Passive.BORN_ONCE)
|
d3da3368
zhouhaihai
冒险地图被动技, buff 神器
|
91
92
93
94
95
|
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
优化冒险结构 增加夹层功能
|
96
97
98
99
|
end
randomFunc[AdvEventType.BOSS] = randomFunc[AdvEventType.Monster]
--掉落
randomFunc[AdvEventType.Drop] = function()
|
2d87caee
zhouhaihai
地块替换优化 新的效果类型
|
100
101
102
|
if not self.event.item then
self.event.item = csvdb["event_dropCsv"][self.event.id]["range"]:randWeight(true)
end
|
43babcff
zhouhaihai
优化冒险结构 增加夹层功能
|
103
104
105
106
107
108
|
end
--交易
randomFunc[AdvEventType.Trader] = function()
local data = csvdb["event_traderCsv"][self.event.id]
self.event.shop = {}
self.event.status = "" --购买次数状态 1 就是购买过了 -- 购买id就是shop索引
|
f8408529
zhouhaihai
冒险商店
|
109
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
|
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
|
137
|
local getData = csvdb["event_trader_goodsCsv"][getId]
|
f8408529
zhouhaihai
冒险商店
|
138
|
if getData.restrict ~= 0 then
|
aef8ca87
zhouhaihai
两个bug
|
139
|
curHad[getId] = (curHad[getId] or 0) + 1
|
f8408529
zhouhaihai
冒险商店
|
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
|
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
优化冒险结构 增加夹层功能
|
157
158
159
|
for i = 1, 10 do
local numS, rangeS = "num" .. i, "range" .. i
if data[numS] and data[rangeS] then
|
f8408529
zhouhaihai
冒险商店
|
160
|
randomGoods(data[rangeS], data[numS])
|
43babcff
zhouhaihai
优化冒险结构 增加夹层功能
|
161
162
163
164
165
166
167
|
else
break
end
end
end
--建筑
randomFunc[AdvEventType.Build] = function()
|
9687f887
zhouhaihai
建筑被动
|
168
169
170
171
172
|
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
建筑被动
|
173
174
|
end
build:triggerPassive(Passive.BORN_ONCE)
|
43babcff
zhouhaihai
优化冒险结构 增加夹层功能
|
175
176
177
178
|
end
randomFunc[AdvEventType.Trap] = function()
local data = csvdb["event_trapCsv"][self.event.id]
|
e058aebe
zhouhaihai
修改生效位置
|
179
180
181
|
-- 因为一些神器效果 提前触发被动
adv.battle.player:triggerPassive(Passive.CLICK_TRAP)
|
7828ffd0
zhouhaihai
冒险 连续选择点 和 地图因子
|
182
|
local buffs = data.effect:toArray(true, "=")
|
f3c37873
zhouhaihai
block
|
183
|
|
b9b9c757
zhouhaihai
陷阱翻开房间
|
184
185
|
local backTrap = true
|
f3c37873
zhouhaihai
block
|
186
187
188
189
190
|
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
冒险 连续选择点 和 地图因子
|
191
|
local enemys = adv.battle.player:getTeam(2)
|
f3c37873
zhouhaihai
block
|
192
193
194
|
for _, buffId in ipairs(buffs) do
adv.battle.player:addBuff(buffId)
end
|
7828ffd0
zhouhaihai
冒险 连续选择点 和 地图因子
|
195
196
197
198
199
|
for k , enemy in ipairs(enemys) do
for _, buffId in ipairs(buffs) do
enemy:addBuff(buffId)
end
end
|
b9b9c757
zhouhaihai
陷阱翻开房间
|
200
201
202
|
elseif data.target == 2 then -- 翻开房间
self.room.map.adv:getCurMap():openBlocksByRoom(self.room.roomId)
backTrap = false
|
f3c37873
zhouhaihai
block
|
203
204
|
elseif data.target == 3 then -- 翻开周围8格,并给怪物附带buff(不伤害玩家)
self.room.map.adv:getCurMap():openBlocksBySize(self.room.roomId, self.blockId, 2)
|
a0834e49
zhouhaihai
增加潜行 功能
|
205
206
207
208
|
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
|
209
210
|
end
end
|
7828ffd0
zhouhaihai
冒险 连续选择点 和 地图因子
|
211
|
end
|
b9b9c757
zhouhaihai
陷阱翻开房间
|
212
|
|
7828ffd0
zhouhaihai
冒险 连续选择点 和 地图因子
|
213
214
215
216
217
218
|
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
修改生效位置
|
219
|
|
b176d7d3
zhouhaihai
冒险成就
|
220
|
adv:checkAchievement(adv.AchievType.Trap, 1, self.event.id)
|
b9b9c757
zhouhaihai
陷阱翻开房间
|
221
222
223
|
if backTrap then
adv:backTrap()
end
|
43babcff
zhouhaihai
优化冒险结构 增加夹层功能
|
224
225
226
227
228
229
230
231
232
|
self:clear()
end
if self.event then -- 随机出具体的事件
if randomFunc[self:getEventType()] then
randomFunc[self:getEventType()]()
end
end
|
4f0a5fae
zhouhaihai
营养剂
|
233
234
|
end
|
48962a74
zhouhaihai
路障系统提交
|
235
236
237
238
239
240
241
242
243
244
245
246
|
-- 获取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
路障系统提交
|
247
248
249
250
251
252
253
254
255
256
|
[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
营养剂
|
257
258
259
260
261
262
263
|
--事件有需要额外处理的部分
function Block:open()
if self.isOpen then return end
local room = self.room
local map = room.map
local adv = map.adv
|
43babcff
zhouhaihai
优化冒险结构 增加夹层功能
|
264
|
self.isOpen = true
|
c843f805
zhouhaihai
bug 栈溢出
|
265
|
self:randomEvent()
|
d3da3368
zhouhaihai
冒险地图被动技, buff 神器
|
266
|
return true
|
43babcff
zhouhaihai
优化冒险结构 增加夹层功能
|
267
268
|
end
|
48962a74
zhouhaihai
路障系统提交
|
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
|
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
优化冒险结构 增加夹层功能
|
290
|
return Block
|