diff --git a/src/adv/Adv.lua b/src/adv/Adv.lua index 5804417..eb3ee9d 100644 --- a/src/adv/Adv.lua +++ b/src/adv/Adv.lua @@ -95,6 +95,7 @@ function Adv:initByChapter(chapterId, level, isToNext, notNotify, isRelay, isEnt if isEnter then -- 把 支援效果初始化为易用用的形式 self:initSupport(support or {}) + self.owner:setProperty("advLimit", {}) -- 清掉 Limit end -- 随机出地图 diff --git a/src/adv/AdvMap.lua b/src/adv/AdvMap.lua index dd61574..e8bb7d2 100644 --- a/src/adv/AdvMap.lua +++ b/src/adv/AdvMap.lua @@ -243,6 +243,7 @@ createMap = function(self, mapId, isEnter, isNewRelay) local haveBoss = false local haveLChoose = false + local eventLimit = self.adv.owner:getProperty("advLimit") local function randomEvent(roomId, blockId, eventType) if mapInfo.rooms[roomId]["event"][blockId] then return end --已经有事件了 不覆盖 @@ -259,6 +260,14 @@ createMap = function(self, mapId, isEnter, isNewRelay) if not eventLib[etype] or not next(eventLib[etype]) or not eventLib[etype][especial] or not next(eventLib[etype][especial]) then return false end event.id = math.randWeight(eventLib[etype][especial], "showup") if not event.id then return false end + + -- 不是 0 才会记录 + if eventLib[etype][especial][event.id].dlimit ~= 0 then + eventLimit[etype] = eventLimit[etype] or 0 + eventLimit[etype][event.id] = (eventLimit[etype][event.id] or 0) + 1 + end + + -- 消除 if eventLib[etype][especial][event.id].limit > 1 then eventLib[etype][especial][event.id].limit = eventLib[etype][especial][event.id].limit - 1 elseif eventLib[etype][especial][event.id].limit == 1 then @@ -495,6 +504,7 @@ createMap = function(self, mapId, isEnter, isNewRelay) event.item = mapCsvData.clear:toArray(true, "=") --掉落钥匙 end end + self.adv.owner:setProperty("advLimit", eventLimit) return mapInfo end @@ -519,6 +529,8 @@ getEventLib = function(self, needEventType) -- needEventType 需要的事件 local advEventOpenStatus = self.adv.owner:advEventOpenStatus() + local eventLimit = self.adv.owner:getProperty("advLimit") + for lib, eventType in pairs(libsToType) do -- init eventLib if type(eventType) == "table" then @@ -540,10 +552,24 @@ getEventLib = function(self, needEventType) -- needEventType 需要的事件 add = false end end + + -- data.limit 改为 整个冒险全程 + local limit = data.limit + if data.limit ~= 0 then + limit = data.limit - ((eventLimit[etype] or {})[id] or 0) + if limit <= 0 then + add = false + end + end + + if add and (etype == AdvEventType.LinkChoose or etype == AdvEventType.Choose) then --只能有一次 + limit = 1 + end + if add then if AdvCommon.checkIsIn(level, data.leveltype, data.levellimit) then eventLib[etype][data.BlockEventType] = eventLib[etype][data.BlockEventType] or {} - eventLib[etype][data.BlockEventType][id] = {showup = data.showup, limit = data.limit} + eventLib[etype][data.BlockEventType][id] = {showup = data.showup, limit = limit, dlimit = data.limit} end end end diff --git a/src/models/Role.lua b/src/models/Role.lua index a81669b..7ceefd8 100644 --- a/src/models/Role.lua +++ b/src/models/Role.lua @@ -83,6 +83,7 @@ Role.schema = { advEAchiev = {"table", {}}, -- 冒险无尽冒险手册 advRelay = {"table", {}}, -- 冒险中继点记录 {[chapter] = {[level] = 1}, [-1] = {[level] = 1}} -- -1 无尽 方便重置 advSup = {"table", {}}, -- 冒险支援效果 待选项 + advLimit = {"table", {}}, -- 冒险事件每次的limit --挂机相关 hangPass = {"table", {}}, -- 挂机通过的最大关卡 -- libgit2 0.21.2