Commit 1607a7f004e6c211a43deb58fdcbdced6de516d8
1 parent
bcf5bfbb
冒险事件 new
Showing
2 changed files
with
60 additions
and
29 deletions
Show diff stats
src/ProtocolCode.lua
@@ -54,6 +54,8 @@ actionCodes = { | @@ -54,6 +54,8 @@ actionCodes = { | ||
54 | Hang_roleFormatRpc = 255, | 54 | Hang_roleFormatRpc = 255, |
55 | Hang_getRewardRpc = 256, | 55 | Hang_getRewardRpc = 256, |
56 | Hang_quickRpc = 257, | 56 | Hang_quickRpc = 257, |
57 | + Hang_getRewardItemRpc = 258, | ||
58 | + Hang_getRewardCoinRpc = 259, | ||
57 | 59 | ||
58 | } | 60 | } |
59 | 61 |
src/adv/Adv.lua
@@ -48,7 +48,7 @@ local function checkIsIn(checkValue, checkType, checkRange) | @@ -48,7 +48,7 @@ local function checkIsIn(checkValue, checkType, checkRange) | ||
48 | end | 48 | end |
49 | 49 | ||
50 | --关卡事件库 | 50 | --关卡事件库 |
51 | -local function getEventLib(chapterId, level, needEventType) | 51 | +local function getEventLib(chapterId, level, needEventType) -- needEventType 需要的事件 |
52 | local chapter = math.floor(chapterId / 100) % 100 | 52 | local chapter = math.floor(chapterId / 100) % 100 |
53 | 53 | ||
54 | local libsToType = { | 54 | local libsToType = { |
@@ -73,9 +73,11 @@ local function getEventLib(chapterId, level, needEventType) | @@ -73,9 +73,11 @@ local function getEventLib(chapterId, level, needEventType) | ||
73 | if data.levelchapter == chapter then | 73 | if data.levelchapter == chapter then |
74 | if checkIsIn(level, data.leveltype, data.levellimit) then | 74 | if checkIsIn(level, data.leveltype, data.levellimit) then |
75 | if type(eventType) == "table" then | 75 | if type(eventType) == "table" then |
76 | - eventLib[eventType[data.type]][id] = data | 76 | + eventLib[eventType[data.type]][data.BlockEventType] = eventLib[eventType[data.type]][data.BlockEventType] or {} |
77 | + eventLib[eventType[data.type]][data.BlockEventType][id] = {showup = data.showup, limit = data.limit} | ||
77 | else | 78 | else |
78 | - eventLib[eventType][id] = data | 79 | + eventLib[eventType][data.BlockEventType] = eventLib[eventType][data.BlockEventType] or {} |
80 | + eventLib[eventType][data.BlockEventType][id] = {showup = data.showup, limit = data.limit} | ||
79 | end | 81 | end |
80 | end | 82 | end |
81 | end | 83 | end |
@@ -91,8 +93,14 @@ end | @@ -91,8 +93,14 @@ end | ||
91 | -- 生成地图 是否可以生成地图上层判断 | 93 | -- 生成地图 是否可以生成地图上层判断 |
92 | local function randomAdvMap(role, chapterId, level, notNotify) | 94 | local function randomAdvMap(role, chapterId, level, notNotify) |
93 | local chapterData = csvdb["adv_chapterCsv"][chapterId] | 95 | local chapterData = csvdb["adv_chapterCsv"][chapterId] |
94 | - if not chapterData then return end | ||
95 | - if level > chapterData.limitlevel then return end | 96 | + if not chapterData then |
97 | + error("chapterId " .. chapterId .. " dont exist!") | ||
98 | + return | ||
99 | + end | ||
100 | + if level > chapterData.limitlevel then | ||
101 | + error("level overflow!") | ||
102 | + return | ||
103 | + end | ||
96 | --随出地图 | 104 | --随出地图 |
97 | local raw_pool = chapterData.mapid:toArray(true, "=") | 105 | local raw_pool = chapterData.mapid:toArray(true, "=") |
98 | local advInfo = role:getProperty("advInfo") | 106 | local advInfo = role:getProperty("advInfo") |
@@ -108,11 +116,17 @@ local function randomAdvMap(role, chapterId, level, notNotify) | @@ -108,11 +116,17 @@ local function randomAdvMap(role, chapterId, level, notNotify) | ||
108 | end | 116 | end |
109 | end | 117 | end |
110 | end | 118 | end |
111 | - if not next(pool) then return end | 119 | + if not next(pool) then |
120 | + error("mapIds is empty!") | ||
121 | + return | ||
122 | + end | ||
112 | local mapId = pool[math.randomInt(1, #pool)] | 123 | local mapId = pool[math.randomInt(1, #pool)] |
113 | --随出事件 | 124 | --随出事件 |
114 | local mapData = csvdb["map_" .. csvdb["mapCsv"][mapId]["path"] .. "Csv"] | 125 | local mapData = csvdb["map_" .. csvdb["mapCsv"][mapId]["path"] .. "Csv"] |
115 | - if not mapData then return end | 126 | + if not mapData then |
127 | + error("mapId " .. mapId .. " dont exist!") | ||
128 | + return | ||
129 | + end | ||
116 | 130 | ||
117 | 131 | ||
118 | table.clear(advInfo) | 132 | table.clear(advInfo) |
@@ -122,52 +136,67 @@ local function randomAdvMap(role, chapterId, level, notNotify) | @@ -122,52 +136,67 @@ local function randomAdvMap(role, chapterId, level, notNotify) | ||
122 | advInfo.power = power | 136 | advInfo.power = power |
123 | advInfo.enemyId = 1 --怪递增的索引 | 137 | advInfo.enemyId = 1 --怪递增的索引 |
124 | advInfo.rooms = {} -- {[roomId] = {event = {}, open = {}},} -- event 事件信息(具体信息查看randomEvent), open 是否解锁 | 138 | advInfo.rooms = {} -- {[roomId] = {event = {}, open = {}},} -- event 事件信息(具体信息查看randomEvent), open 是否解锁 |
125 | - | ||
126 | --事件随机 | 139 | --事件随机 |
127 | - local eventLib = getEventLib(chapterId, level) | 140 | + local eventLib = getEventLib(chapterId, level) -- 同时记录出现次数 |
128 | local monsterEvents = {} --处理钥匙掉落 | 141 | local monsterEvents = {} --处理钥匙掉落 |
129 | local haveBoss = false | 142 | local haveBoss = false |
130 | 143 | ||
131 | local function randomEvent(roomId, blockId, eventType) | 144 | local function randomEvent(roomId, blockId, eventType) |
132 | if advInfo.rooms[roomId]["event"][blockId] then return end --已经有事件了 不覆盖 | 145 | if advInfo.rooms[roomId]["event"][blockId] then return end --已经有事件了 不覆盖 |
133 | - local event = {etype = eventType} | 146 | + local etype, especial = eventType, 0 |
147 | + if eventType > 100 then -- 特殊事件(固定) | ||
148 | + etype = math.floor(eventType / 100) | ||
149 | + especial = eventType % 100 | ||
150 | + end | ||
151 | + | ||
152 | + local event = {etype = etype} | ||
134 | local randomFunc = {} | 153 | local randomFunc = {} |
154 | + | ||
155 | + local function randomCommon() | ||
156 | + if not eventLib[etype] or not next(eventLib[etype]) or not eventLib[etype][especial] or not next(eventLib[etype][especial]) then return false end | ||
157 | + event.id = math.randWeight(eventLib[etype][especial], "showup") | ||
158 | + if eventLib[etype][especial][event.id].limit > 1 then | ||
159 | + eventLib[etype][especial][event.id].limit = eventLib[etype][especial][event.id].limit - 1 | ||
160 | + elseif eventLib[etype][especial][event.id].limit == 1 then | ||
161 | + eventLib[etype][especial][event.id] = nil | ||
162 | + end | ||
163 | + end | ||
164 | + | ||
135 | --入口 | 165 | --入口 |
136 | randomFunc[AdvEventType.In] = function()end | 166 | randomFunc[AdvEventType.In] = function()end |
137 | --出口 | 167 | --出口 |
138 | randomFunc[AdvEventType.Out] = function() end | 168 | randomFunc[AdvEventType.Out] = function() end |
139 | - | ||
140 | --boss | 169 | --boss |
141 | randomFunc[AdvEventType.BOSS] = function() | 170 | randomFunc[AdvEventType.BOSS] = function() |
142 | - if not next(eventLib[eventType]) or haveBoss then return false end | 171 | + if haveBoss then return false end |
172 | + if randomCommon() == false then | ||
173 | + return false | ||
174 | + end | ||
143 | haveBoss = true | 175 | haveBoss = true |
144 | - event.id = math.randWeight(eventLib[eventType], "showup") | ||
145 | end | 176 | end |
146 | --怪物 | 177 | --怪物 |
147 | randomFunc[AdvEventType.Monster] = function() | 178 | randomFunc[AdvEventType.Monster] = function() |
148 | - if not next(eventLib[eventType]) then return false end | ||
149 | - event.id = math.randWeight(eventLib[eventType], "showup") | 179 | + if randomCommon() == false then |
180 | + return false | ||
181 | + end | ||
150 | table.insert(monsterEvents, event) | 182 | table.insert(monsterEvents, event) |
151 | end | 183 | end |
184 | + | ||
152 | --选择点 | 185 | --选择点 |
153 | - randomFunc[AdvEventType.Choose] = function() | ||
154 | - if not next(eventLib[eventType]) then return false end | ||
155 | - event.id = math.randWeight(eventLib[eventType], "showup") | ||
156 | - end | 186 | + randomFunc[AdvEventType.Choose] = randomCommon |
157 | --掉落点 | 187 | --掉落点 |
158 | - randomFunc[AdvEventType.Drop] = randomFunc[AdvEventType.Choose] | 188 | + randomFunc[AdvEventType.Drop] = randomCommon |
159 | --交易所 | 189 | --交易所 |
160 | - randomFunc[AdvEventType.Trader] = randomFunc[AdvEventType.Choose] | 190 | + randomFunc[AdvEventType.Trader] = randomCommon |
161 | --建筑 | 191 | --建筑 |
162 | - randomFunc[AdvEventType.Build] = randomFunc[AdvEventType.Choose] | 192 | + randomFunc[AdvEventType.Build] = randomCommon |
163 | 193 | ||
164 | - if randomFunc[eventType] then | ||
165 | - if randomFunc[eventType]() ~= false then | 194 | + if randomFunc[etype] then |
195 | + if randomFunc[etype]() ~= false then | ||
166 | advInfo.rooms[roomId]["event"][blockId] = event | 196 | advInfo.rooms[roomId]["event"][blockId] = event |
167 | end | 197 | end |
168 | end | 198 | end |
169 | end | 199 | end |
170 | - | ||
171 | stagePool = {["global"] = {}} | 200 | stagePool = {["global"] = {}} |
172 | for roomId, roomName in pairs(mapData["rooms"]) do | 201 | for roomId, roomName in pairs(mapData["rooms"]) do |
173 | stagePool[roomId] = {} | 202 | stagePool[roomId] = {} |
@@ -181,7 +210,7 @@ local function randomAdvMap(role, chapterId, level, notNotify) | @@ -181,7 +210,7 @@ local function randomAdvMap(role, chapterId, level, notNotify) | ||
181 | end | 210 | end |
182 | for blockId, stageType in pairs(roomData["blocks"]) do | 211 | for blockId, stageType in pairs(roomData["blocks"]) do |
183 | if AdvSpecialStage[stageType] then | 212 | if AdvSpecialStage[stageType] then |
184 | - eventType = AdvEventType[AdvSpecialStage[stageType]] | 213 | + eventType = AdvEventType[AdvSpecialStage[stageType]] -- 地块固定类型 |
185 | randomEvent(roomId, blockId, eventType) | 214 | randomEvent(roomId, blockId, eventType) |
186 | else | 215 | else |
187 | stagePool["global"][stageType] = stagePool["global"][stageType] or {} | 216 | stagePool["global"][stageType] = stagePool["global"][stageType] or {} |
@@ -243,7 +272,7 @@ local function randomAdvMap(role, chapterId, level, notNotify) | @@ -243,7 +272,7 @@ local function randomAdvMap(role, chapterId, level, notNotify) | ||
243 | print("这个地图没有钥匙!!! mapId : " .. mapId) | 272 | print("这个地图没有钥匙!!! mapId : " .. mapId) |
244 | else | 273 | else |
245 | local event = monsterEvents[math.randomInt(1, #monsterEvents)] | 274 | local event = monsterEvents[math.randomInt(1, #monsterEvents)] |
246 | - event.item = {ItemId.AdvKey, 1} --掉落钥匙 --todo | 275 | + event.item = {ItemId.AdvKey, 1} --掉落钥匙 |
247 | end | 276 | end |
248 | end | 277 | end |
249 | end | 278 | end |
@@ -556,8 +585,8 @@ function Adv:addNewMonsterRand(monsterId, where) | @@ -556,8 +585,8 @@ function Adv:addNewMonsterRand(monsterId, where) | ||
556 | 585 | ||
557 | if not monsterId then | 586 | if not monsterId then |
558 | local eventLib = getEventLib(self.advInfo.chapter, self.advInfo.level, AdvEventType.Monster) | 587 | local eventLib = getEventLib(self.advInfo.chapter, self.advInfo.level, AdvEventType.Monster) |
559 | - if not next(eventLib[AdvEventType.Monster]) then return false end | ||
560 | - monsterId = math.randWeight(eventLib[AdvEventType.Monster], "showup") | 588 | + if not next(eventLib[AdvEventType.Monster][0]) then return false end |
589 | + monsterId = math.randWeight(eventLib[AdvEventType.Monster][0], "showup") | ||
561 | end | 590 | end |
562 | 591 | ||
563 | local event = {etype = AdvEventType.Monster, mId = self.advInfo.enemyId} | 592 | local event = {etype = AdvEventType.Monster, mId = self.advInfo.enemyId} |