diff --git a/src/adv/Adv.lua b/src/adv/Adv.lua index be02c21..57e9a9e 100644 --- a/src/adv/Adv.lua +++ b/src/adv/Adv.lua @@ -205,10 +205,7 @@ function Adv:randomMapId(chapterId, level) return end if AdvCommon.isEndless(chapterId) then - level = level % chapterData.limitlevel - if level == 0 then - level = chapterData.limitlevel - end + level = AdvCommon.getEndlessDataLv(chapterId, level) else if level > chapterData.limitlevel then error("level overflow!") @@ -261,11 +258,14 @@ function Adv:award(gift, params) end local origin = items:getv(itemId, 0) local nums = origin + count + if csvdb["adv_artifactCsv"][itemId] then + nums = self:checkArtifact(itemId, origin, count, nums) + end if nums <= 0 then items = items:delk(itemId) nums = 0 else - items = items:incrv(itemId, count) + items = items:setv(itemId, nums) end end @@ -273,6 +273,116 @@ function Adv:award(gift, params) return tgift end + +function Adv:delArtifactEffect(effectType, effects) + if effectType == 1 then + for _, id in ipairs(effects:toArray(true, "=")) do + self.battle.player:delPassiveById(id) + end + elseif effectType == 2 then + for _, id in ipairs(effects:toArray(true, "=")) do + self.battle.player:delBuffById(id) + end + end +end + +function Adv:addArtifactEffect(effectType, effects) + if effectType == 1 then + for _, id in ipairs(effects:toArray(true, "=")) do + self.battle.player:addPassive({id = id}) + end + elseif effectType == 2 then + for _, id in ipairs(effects:toArray(true, "=")) do + self.battle.player:addBuff(id) + end + end +end +-- 检查神器 +function Adv:checkArtifact(itemId, origin, count, nums) + local artifactData = csvdb["adv_artifactCsv"][itemId] + if count == 0 or not artifactData then return nums end + local advItems = self.owner:getProperty("advItems") + if count < 0 then --删除 + nums = 0 + local curData = artifactData[origin] + if curData then + -- 删除自己的效果 + self:delArtifactEffect(curData.type, curData.effect) + + --删除组合效果 + if curData.comboId ~= 0 then + local comboLv = advItems:getv(curData.comboId, 0) + if comboLv ~= 0 then + --删除自己的组合效果 + if curData.comboType == 1 or curData.comboType == 2 then + self:delArtifactEffect(curData.comboType, curData.comboEffect) + elseif curData.comboType == 3 then + self:delArtifactEffect(curData.type, curData.comboEffect) + end + + -- 删除组合的组合效果 + local comboData = (csvdb["adv_artifactCsv"][curData.comboId] or {})[comboLv] + if comboData then + if comboData.comboType == 1 or comboData.comboType == 2 then + self:delArtifactEffect(comboData.comboType, comboData.comboEffect) + elseif comboData.comboType == 3 then + self:delArtifactEffect(comboData.type, comboData.comboEffect) + self:addArtifactEffect(comboData.type, comboData.effect) + end + end + end + end + end + else + nums = math.max(0, math.min(nums, #artifactData)) + if nums == origin then return nums end + if origin == 0 then --初始获得 + local curData = artifactData[nums] + local addSelfEffect = true + --查看是否有组合 + if curData.comboId ~= 0 then + local comboLv = advItems:getv(curData.comboId, 0) + if comboLv ~= 0 then + --自己的组合效果 + if curData.comboType == 1 or curData.comboType == 2 then + self:addArtifactEffect(curData.comboType, curData.comboEffect) + elseif curData.comboType == 3 then + self:addArtifactEffect(curData.type, curData.comboEffect) + addSelfEffect = false + end + + --对方的组合效果 + local comboData = (csvdb["adv_artifactCsv"][curData.comboId] or {})[comboLv] + if comboData then + if comboData.comboType == 1 or comboData.comboType == 2 then + self:addArtifactEffect(comboData.comboType, comboData.comboEffect) + elseif comboData.comboType == 3 then + self:delArtifactEffect(comboData.type, comboData.effect) + self:addArtifactEffect(comboData.type, comboData.comboEffect) + end + end + end + end + if addSelfEffect then + self:addArtifactEffect(curData.type, curData.effect) + end + else --升级 + local originData = artifactData[origin] + local curData = artifactData[nums] + + if originData then + self:delArtifactEffect(originData.type, originData.effect) + end + + if curData then + self:addArtifactEffect(curData.type, curData.effect) + end + end + end + return nums +end + + -- 消耗物品 优先冒险背包 --check 只是检查够不够 function Adv:cost(item, params, check) local items = self.owner:getProperty("advItems") @@ -461,6 +571,7 @@ local function clickDrop(self, room, block, params) local reward = {} if not block.event.item then return end local reward = self:award({[block.event.item[1]] = block.event.item[2]}) + -- local reward = self:award({[5801] = 1}) block:clear() self:backReward(reward) return true diff --git a/src/adv/AdvCommon.lua b/src/adv/AdvCommon.lua index fbf3f90..3699e60 100644 --- a/src/adv/AdvCommon.lua +++ b/src/adv/AdvCommon.lua @@ -51,4 +51,16 @@ function AdvCommon.isEndless(chapterId) return math.floor(chapterId / 100) == 2 end +function AdvCommon.getEndlessDataLv(chapterId, level) + local chapterData = csvdb["adv_chapterCsv"][chapterId] + if level > globalCsv.adv_endless_custom_layer then + level = (level - globalCsv.adv_endless_custom_layer) % chapterData.limitlevel + if level == 0 then + level = chapterData.limitlevel + end + level = level + globalCsv.adv_endless_custom_layer + end + return level +end + return AdvCommon \ No newline at end of file diff --git a/src/adv/AdvMap.lua b/src/adv/AdvMap.lua index 343f497..d87e228 100644 --- a/src/adv/AdvMap.lua +++ b/src/adv/AdvMap.lua @@ -348,11 +348,7 @@ end getEventLib = function(self, needEventType) -- needEventType 需要的事件 local chapterId, level = self.adv.chapterId, self.adv.level if AdvCommon.isEndless(chapterId) then - local chapterData = csvdb["adv_chapterCsv"][chapterId] - level = level % chapterData.limitlevel - if level == 0 then - level = chapterData.limitlevel - end + level = AdvCommon.getEndlessDataLv(chapterId, level) end local libsToType = { ["event_monsterCsv"] = {AdvEventType.Monster, AdvEventType.BOSS, AdvEventType.Monster}, diff --git a/src/adv/AdvPlayer.lua b/src/adv/AdvPlayer.lua index 1dd5d5a..3d3fa60 100644 --- a/src/adv/AdvPlayer.lua +++ b/src/adv/AdvPlayer.lua @@ -118,6 +118,24 @@ function BaseObject:addBuff(buffId, releaser) self.battle.adv:backBuff(self.id, buffId) end +function BaseObject:delBuffById(bId) + for _, buff in ipairs(self.buffs) do + if not buff.isDel and buff.id == bId then + buff.isDel = true + return buff + end + end +end + +function BaseObject:delPassiveById(pId) + for _, passive in ipairs(self.passives) do + if not passive.isDel and passive.id == pId then + passive.isDel = true + return passive + end + end +end + function BaseObject:hadBuff(bType) for _, buff in ipairs(self.buffs) do if not buff.isDel and buff:getType() == bType then @@ -134,6 +152,7 @@ function BaseObject:hadBuffById(bId) end end + -- 通用的buff 效果汇总 -- 0 固定 1百分比 两种分类 function BaseObject:getCommonBuffEffect(bType) local effect, count = {[0] = 0, [1] = 0}, 0 -- libgit2 0.21.2