Commit 1607a7f004e6c211a43deb58fdcbdced6de516d8
1 parent
bcf5bfbb
冒险事件 new
Showing
2 changed files
with
60 additions
and
29 deletions
Show diff stats
src/ProtocolCode.lua
src/adv/Adv.lua
| ... | ... | @@ -48,7 +48,7 @@ local function checkIsIn(checkValue, checkType, checkRange) |
| 48 | 48 | end |
| 49 | 49 | |
| 50 | 50 | --关卡事件库 |
| 51 | -local function getEventLib(chapterId, level, needEventType) | |
| 51 | +local function getEventLib(chapterId, level, needEventType) -- needEventType 需要的事件 | |
| 52 | 52 | local chapter = math.floor(chapterId / 100) % 100 |
| 53 | 53 | |
| 54 | 54 | local libsToType = { |
| ... | ... | @@ -73,9 +73,11 @@ local function getEventLib(chapterId, level, needEventType) |
| 73 | 73 | if data.levelchapter == chapter then |
| 74 | 74 | if checkIsIn(level, data.leveltype, data.levellimit) then |
| 75 | 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 | 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 | 81 | end |
| 80 | 82 | end |
| 81 | 83 | end |
| ... | ... | @@ -91,8 +93,14 @@ end |
| 91 | 93 | -- 生成地图 是否可以生成地图上层判断 |
| 92 | 94 | local function randomAdvMap(role, chapterId, level, notNotify) |
| 93 | 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 | 105 | local raw_pool = chapterData.mapid:toArray(true, "=") |
| 98 | 106 | local advInfo = role:getProperty("advInfo") |
| ... | ... | @@ -108,11 +116,17 @@ local function randomAdvMap(role, chapterId, level, notNotify) |
| 108 | 116 | end |
| 109 | 117 | end |
| 110 | 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 | 123 | local mapId = pool[math.randomInt(1, #pool)] |
| 113 | 124 | --随出事件 |
| 114 | 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 | 132 | table.clear(advInfo) |
| ... | ... | @@ -122,52 +136,67 @@ local function randomAdvMap(role, chapterId, level, notNotify) |
| 122 | 136 | advInfo.power = power |
| 123 | 137 | advInfo.enemyId = 1 --怪递增的索引 |
| 124 | 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 | 141 | local monsterEvents = {} --处理钥匙掉落 |
| 129 | 142 | local haveBoss = false |
| 130 | 143 | |
| 131 | 144 | local function randomEvent(roomId, blockId, eventType) |
| 132 | 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 | 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 | 166 | randomFunc[AdvEventType.In] = function()end |
| 137 | 167 | --出口 |
| 138 | 168 | randomFunc[AdvEventType.Out] = function() end |
| 139 | - | |
| 140 | 169 | --boss |
| 141 | 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 | 175 | haveBoss = true |
| 144 | - event.id = math.randWeight(eventLib[eventType], "showup") | |
| 145 | 176 | end |
| 146 | 177 | --怪物 |
| 147 | 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 | 182 | table.insert(monsterEvents, event) |
| 151 | 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 | 196 | advInfo.rooms[roomId]["event"][blockId] = event |
| 167 | 197 | end |
| 168 | 198 | end |
| 169 | 199 | end |
| 170 | - | |
| 171 | 200 | stagePool = {["global"] = {}} |
| 172 | 201 | for roomId, roomName in pairs(mapData["rooms"]) do |
| 173 | 202 | stagePool[roomId] = {} |
| ... | ... | @@ -181,7 +210,7 @@ local function randomAdvMap(role, chapterId, level, notNotify) |
| 181 | 210 | end |
| 182 | 211 | for blockId, stageType in pairs(roomData["blocks"]) do |
| 183 | 212 | if AdvSpecialStage[stageType] then |
| 184 | - eventType = AdvEventType[AdvSpecialStage[stageType]] | |
| 213 | + eventType = AdvEventType[AdvSpecialStage[stageType]] -- 地块固定类型 | |
| 185 | 214 | randomEvent(roomId, blockId, eventType) |
| 186 | 215 | else |
| 187 | 216 | stagePool["global"][stageType] = stagePool["global"][stageType] or {} |
| ... | ... | @@ -243,7 +272,7 @@ local function randomAdvMap(role, chapterId, level, notNotify) |
| 243 | 272 | print("这个地图没有钥匙!!! mapId : " .. mapId) |
| 244 | 273 | else |
| 245 | 274 | local event = monsterEvents[math.randomInt(1, #monsterEvents)] |
| 246 | - event.item = {ItemId.AdvKey, 1} --掉落钥匙 --todo | |
| 275 | + event.item = {ItemId.AdvKey, 1} --掉落钥匙 | |
| 247 | 276 | end |
| 248 | 277 | end |
| 249 | 278 | end |
| ... | ... | @@ -556,8 +585,8 @@ function Adv:addNewMonsterRand(monsterId, where) |
| 556 | 585 | |
| 557 | 586 | if not monsterId then |
| 558 | 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 | 590 | end |
| 562 | 591 | |
| 563 | 592 | local event = {etype = AdvEventType.Monster, mId = self.advInfo.enemyId} | ... | ... |