diff --git a/src/adv/Adv.lua b/src/adv/Adv.lua index 8b8bd5a..3f8ff1b 100644 --- a/src/adv/Adv.lua +++ b/src/adv/Adv.lua @@ -1538,6 +1538,24 @@ local function clickBuild(self, room, block, params) local status, clearBlock = chooseCommon(self, room, block, chooseData, choose, "build") if not status then return end + local isMine = false -- 是不是宝藏怪 + for _, mid in ipairs(globalCsv.adv_egg_treasureLayer_id) do + if mid == oldId then + isMine = true + break + end + end + if isMine then + local advMine = self.owner:getProperty("advMine") + advMine[2] = advMine[2] or {} + local mineCo2 = advMine[2].co or {} + if chooseData.limit ~= 0 then + mineCo2[oldId] = (mineCo2[oldId] or 0) + 1 + end + advMine[2].co = mineCo2 + self.owner:setProperty("advMine", advMine) + end + self:checkTask(Adv.TaskType.Build, 1, oldId) self:checkAchievement(Adv.AchievType.Build, 1, oldId) self:checkAchievement(Adv.AchievType.BuildBySelect, 1, oldId, choose) @@ -1972,6 +1990,7 @@ function Adv:enemyDead(enemy, escape) break end end + if isMine then local advMine = self.owner:getProperty("advMine") advMine[1] = advMine[1] or {} @@ -1998,9 +2017,6 @@ function Adv:enemyDead(enemy, escape) etype = AdvEventType.Build, id = cId }) - if csvdb["event_buildingCsv"][cId].limit ~= 0 then - mineCo2[cId] = (mineCo2[cId] or 0) + 1 - end had = true end end diff --git a/src/adv/AdvMap.lua b/src/adv/AdvMap.lua index 9642c28..3baa959 100644 --- a/src/adv/AdvMap.lua +++ b/src/adv/AdvMap.lua @@ -13,12 +13,12 @@ local createMap, getEventLib function Map:ctor(adv, mapIdx, mapInfo, isEnter, isNewRelay) self.adv = adv local isNew = type(mapInfo) == "number" + self.mapIdx = mapIdx if isNew then -- mapInfo 传入 id mapInfo = createMap(self, mapInfo, isEnter, isNewRelay) -- 生成地图 end if not mapInfo then return end - self.mapIdx = mapIdx self.mapId = mapInfo.mapId self.isShow = mapInfo.isShow -- 是否全部展示 -- 客户端用 self.rooms = {} @@ -811,46 +811,47 @@ createMap = function(self, mapId, isEnter, isNewRelay) end end end - -- 宝藏怪刷新 - for idx = #(stagePool["global"][AdvCodeRandomStage] or {}), 1, -1 do - local c = stagePool["global"][AdvCodeRandomStage][idx] -- {room = roomId, block = blockId} - if mapInfo.rooms[c["room"]]["event"][c["block"]] then -- 存在 - table.remove(stagePool["global"][AdvCodeRandomStage], idx) - end - end - local ln = #(stagePool["global"][AdvCodeRandomStage] or {}) - local advMine = self.adv.owner:getProperty("advMine") - advMine[1] = advMine[1] or {} - local mineCh = advMine[1].ch or globalCsv.adv_egg_treasureMonster_showup - local mineCo = advMine[1].co or {} - local had = false - if ln > 0 then - if math.randomInt(1, 100) <= mineCh then -- 刷出来了 - local mpool = {} - for _, mid in ipairs(globalCsv.adv_egg_treasureMonster_id) do - local monster = csvdb["event_monsterCsv"][mid] - if (not mineCo[mid] or monster.limit == 0 or mineCo[mid] < monster.limit) and monster.showup > 0 then - mpool[mid] = {monster.showup} - end - end - if next(mpool) then - local idx = math.randomInt(1, ln) - local cur = stagePool["global"][AdvCodeRandomStage][idx] - giveEvent(cur["room"], cur["block"], AdvEventType.Monster, math.randWeight(mpool, 1)) + if self.mapIdx == 1 and not self.adv.isRelay then + for idx = #(stagePool["global"][AdvCodeRandomStage] or {}), 1, -1 do + local c = stagePool["global"][AdvCodeRandomStage][idx] -- {room = roomId, block = blockId} + if mapInfo.rooms[c["room"]]["event"][c["block"]] then -- 存在 table.remove(stagePool["global"][AdvCodeRandomStage], idx) - ln = ln - 1 - had = true end end + local ln = #(stagePool["global"][AdvCodeRandomStage] or {}) + local advMine = self.adv.owner:getProperty("advMine") + advMine[1] = advMine[1] or {} + local mineCh = advMine[1].ch or globalCsv.adv_egg_treasureMonster_showup + local mineCo = advMine[1].co or {} + local had = false + if ln > 0 then + if math.randomInt(1, 100) <= mineCh then -- 刷出来了 + local mpool = {} + for _, mid in ipairs(globalCsv.adv_egg_treasureMonster_id) do + local monster = csvdb["event_monsterCsv"][mid] + if (not mineCo[mid] or monster.limit == 0 or mineCo[mid] < monster.limit) and monster.showup > 0 then + mpool[mid] = {monster.showup} + end + end + if next(mpool) then + local idx = math.randomInt(1, ln) + local cur = stagePool["global"][AdvCodeRandomStage][idx] + giveEvent(cur["room"], cur["block"], AdvEventType.Monster, math.randWeight(mpool, 1)) + table.remove(stagePool["global"][AdvCodeRandomStage], idx) + ln = ln - 1 + had = true + end + end + end + if not had then + mineCh = math.min(mineCh + globalCsv.adv_egg_treasureMonster_showup_add, 100) + else + mineCh = nil + end + advMine[1].ch = mineCh + self.adv.owner:setProperty("advMine", advMine) end - if not had then - mineCh = math.min(mineCh + globalCsv.adv_egg_treasureMonster_showup_add, 100) - else - mineCh = nil - end - advMine[1].ch = mineCh - self.adv.owner:setProperty("advMine", advMine) if mapCsvData.clearType == 1 and not haveBoss then -- libgit2 0.21.2