Commit 916096edc14926fb6b999571986eb0b1c013b0d4
1 parent
b176d7d3
神器效果
Showing
4 changed files
with
148 additions
and
10 deletions
Show diff stats
src/adv/Adv.lua
| @@ -205,10 +205,7 @@ function Adv:randomMapId(chapterId, level) | @@ -205,10 +205,7 @@ function Adv:randomMapId(chapterId, level) | ||
| 205 | return | 205 | return |
| 206 | end | 206 | end |
| 207 | if AdvCommon.isEndless(chapterId) then | 207 | if AdvCommon.isEndless(chapterId) then |
| 208 | - level = level % chapterData.limitlevel | ||
| 209 | - if level == 0 then | ||
| 210 | - level = chapterData.limitlevel | ||
| 211 | - end | 208 | + level = AdvCommon.getEndlessDataLv(chapterId, level) |
| 212 | else | 209 | else |
| 213 | if level > chapterData.limitlevel then | 210 | if level > chapterData.limitlevel then |
| 214 | error("level overflow!") | 211 | error("level overflow!") |
| @@ -261,11 +258,14 @@ function Adv:award(gift, params) | @@ -261,11 +258,14 @@ function Adv:award(gift, params) | ||
| 261 | end | 258 | end |
| 262 | local origin = items:getv(itemId, 0) | 259 | local origin = items:getv(itemId, 0) |
| 263 | local nums = origin + count | 260 | local nums = origin + count |
| 261 | + if csvdb["adv_artifactCsv"][itemId] then | ||
| 262 | + nums = self:checkArtifact(itemId, origin, count, nums) | ||
| 263 | + end | ||
| 264 | if nums <= 0 then | 264 | if nums <= 0 then |
| 265 | items = items:delk(itemId) | 265 | items = items:delk(itemId) |
| 266 | nums = 0 | 266 | nums = 0 |
| 267 | else | 267 | else |
| 268 | - items = items:incrv(itemId, count) | 268 | + items = items:setv(itemId, nums) |
| 269 | end | 269 | end |
| 270 | end | 270 | end |
| 271 | 271 | ||
| @@ -273,6 +273,116 @@ function Adv:award(gift, params) | @@ -273,6 +273,116 @@ function Adv:award(gift, params) | ||
| 273 | return tgift | 273 | return tgift |
| 274 | end | 274 | end |
| 275 | 275 | ||
| 276 | + | ||
| 277 | +function Adv:delArtifactEffect(effectType, effects) | ||
| 278 | + if effectType == 1 then | ||
| 279 | + for _, id in ipairs(effects:toArray(true, "=")) do | ||
| 280 | + self.battle.player:delPassiveById(id) | ||
| 281 | + end | ||
| 282 | + elseif effectType == 2 then | ||
| 283 | + for _, id in ipairs(effects:toArray(true, "=")) do | ||
| 284 | + self.battle.player:delBuffById(id) | ||
| 285 | + end | ||
| 286 | + end | ||
| 287 | +end | ||
| 288 | + | ||
| 289 | +function Adv:addArtifactEffect(effectType, effects) | ||
| 290 | + if effectType == 1 then | ||
| 291 | + for _, id in ipairs(effects:toArray(true, "=")) do | ||
| 292 | + self.battle.player:addPassive({id = id}) | ||
| 293 | + end | ||
| 294 | + elseif effectType == 2 then | ||
| 295 | + for _, id in ipairs(effects:toArray(true, "=")) do | ||
| 296 | + self.battle.player:addBuff(id) | ||
| 297 | + end | ||
| 298 | + end | ||
| 299 | +end | ||
| 300 | +-- 检查神器 | ||
| 301 | +function Adv:checkArtifact(itemId, origin, count, nums) | ||
| 302 | + local artifactData = csvdb["adv_artifactCsv"][itemId] | ||
| 303 | + if count == 0 or not artifactData then return nums end | ||
| 304 | + local advItems = self.owner:getProperty("advItems") | ||
| 305 | + if count < 0 then --删除 | ||
| 306 | + nums = 0 | ||
| 307 | + local curData = artifactData[origin] | ||
| 308 | + if curData then | ||
| 309 | + -- 删除自己的效果 | ||
| 310 | + self:delArtifactEffect(curData.type, curData.effect) | ||
| 311 | + | ||
| 312 | + --删除组合效果 | ||
| 313 | + if curData.comboId ~= 0 then | ||
| 314 | + local comboLv = advItems:getv(curData.comboId, 0) | ||
| 315 | + if comboLv ~= 0 then | ||
| 316 | + --删除自己的组合效果 | ||
| 317 | + if curData.comboType == 1 or curData.comboType == 2 then | ||
| 318 | + self:delArtifactEffect(curData.comboType, curData.comboEffect) | ||
| 319 | + elseif curData.comboType == 3 then | ||
| 320 | + self:delArtifactEffect(curData.type, curData.comboEffect) | ||
| 321 | + end | ||
| 322 | + | ||
| 323 | + -- 删除组合的组合效果 | ||
| 324 | + local comboData = (csvdb["adv_artifactCsv"][curData.comboId] or {})[comboLv] | ||
| 325 | + if comboData then | ||
| 326 | + if comboData.comboType == 1 or comboData.comboType == 2 then | ||
| 327 | + self:delArtifactEffect(comboData.comboType, comboData.comboEffect) | ||
| 328 | + elseif comboData.comboType == 3 then | ||
| 329 | + self:delArtifactEffect(comboData.type, comboData.comboEffect) | ||
| 330 | + self:addArtifactEffect(comboData.type, comboData.effect) | ||
| 331 | + end | ||
| 332 | + end | ||
| 333 | + end | ||
| 334 | + end | ||
| 335 | + end | ||
| 336 | + else | ||
| 337 | + nums = math.max(0, math.min(nums, #artifactData)) | ||
| 338 | + if nums == origin then return nums end | ||
| 339 | + if origin == 0 then --初始获得 | ||
| 340 | + local curData = artifactData[nums] | ||
| 341 | + local addSelfEffect = true | ||
| 342 | + --查看是否有组合 | ||
| 343 | + if curData.comboId ~= 0 then | ||
| 344 | + local comboLv = advItems:getv(curData.comboId, 0) | ||
| 345 | + if comboLv ~= 0 then | ||
| 346 | + --自己的组合效果 | ||
| 347 | + if curData.comboType == 1 or curData.comboType == 2 then | ||
| 348 | + self:addArtifactEffect(curData.comboType, curData.comboEffect) | ||
| 349 | + elseif curData.comboType == 3 then | ||
| 350 | + self:addArtifactEffect(curData.type, curData.comboEffect) | ||
| 351 | + addSelfEffect = false | ||
| 352 | + end | ||
| 353 | + | ||
| 354 | + --对方的组合效果 | ||
| 355 | + local comboData = (csvdb["adv_artifactCsv"][curData.comboId] or {})[comboLv] | ||
| 356 | + if comboData then | ||
| 357 | + if comboData.comboType == 1 or comboData.comboType == 2 then | ||
| 358 | + self:addArtifactEffect(comboData.comboType, comboData.comboEffect) | ||
| 359 | + elseif comboData.comboType == 3 then | ||
| 360 | + self:delArtifactEffect(comboData.type, comboData.effect) | ||
| 361 | + self:addArtifactEffect(comboData.type, comboData.comboEffect) | ||
| 362 | + end | ||
| 363 | + end | ||
| 364 | + end | ||
| 365 | + end | ||
| 366 | + if addSelfEffect then | ||
| 367 | + self:addArtifactEffect(curData.type, curData.effect) | ||
| 368 | + end | ||
| 369 | + else --升级 | ||
| 370 | + local originData = artifactData[origin] | ||
| 371 | + local curData = artifactData[nums] | ||
| 372 | + | ||
| 373 | + if originData then | ||
| 374 | + self:delArtifactEffect(originData.type, originData.effect) | ||
| 375 | + end | ||
| 376 | + | ||
| 377 | + if curData then | ||
| 378 | + self:addArtifactEffect(curData.type, curData.effect) | ||
| 379 | + end | ||
| 380 | + end | ||
| 381 | + end | ||
| 382 | + return nums | ||
| 383 | +end | ||
| 384 | + | ||
| 385 | + | ||
| 276 | -- 消耗物品 优先冒险背包 --check 只是检查够不够 | 386 | -- 消耗物品 优先冒险背包 --check 只是检查够不够 |
| 277 | function Adv:cost(item, params, check) | 387 | function Adv:cost(item, params, check) |
| 278 | local items = self.owner:getProperty("advItems") | 388 | local items = self.owner:getProperty("advItems") |
| @@ -461,6 +571,7 @@ local function clickDrop(self, room, block, params) | @@ -461,6 +571,7 @@ local function clickDrop(self, room, block, params) | ||
| 461 | local reward = {} | 571 | local reward = {} |
| 462 | if not block.event.item then return end | 572 | if not block.event.item then return end |
| 463 | local reward = self:award({[block.event.item[1]] = block.event.item[2]}) | 573 | local reward = self:award({[block.event.item[1]] = block.event.item[2]}) |
| 574 | + -- local reward = self:award({[5801] = 1}) | ||
| 464 | block:clear() | 575 | block:clear() |
| 465 | self:backReward(reward) | 576 | self:backReward(reward) |
| 466 | return true | 577 | return true |
src/adv/AdvCommon.lua
| @@ -51,4 +51,16 @@ function AdvCommon.isEndless(chapterId) | @@ -51,4 +51,16 @@ function AdvCommon.isEndless(chapterId) | ||
| 51 | return math.floor(chapterId / 100) == 2 | 51 | return math.floor(chapterId / 100) == 2 |
| 52 | end | 52 | end |
| 53 | 53 | ||
| 54 | +function AdvCommon.getEndlessDataLv(chapterId, level) | ||
| 55 | + local chapterData = csvdb["adv_chapterCsv"][chapterId] | ||
| 56 | + if level > globalCsv.adv_endless_custom_layer then | ||
| 57 | + level = (level - globalCsv.adv_endless_custom_layer) % chapterData.limitlevel | ||
| 58 | + if level == 0 then | ||
| 59 | + level = chapterData.limitlevel | ||
| 60 | + end | ||
| 61 | + level = level + globalCsv.adv_endless_custom_layer | ||
| 62 | + end | ||
| 63 | + return level | ||
| 64 | +end | ||
| 65 | + | ||
| 54 | return AdvCommon | 66 | return AdvCommon |
| 55 | \ No newline at end of file | 67 | \ No newline at end of file |
src/adv/AdvMap.lua
| @@ -348,11 +348,7 @@ end | @@ -348,11 +348,7 @@ end | ||
| 348 | getEventLib = function(self, needEventType) -- needEventType 需要的事件 | 348 | getEventLib = function(self, needEventType) -- needEventType 需要的事件 |
| 349 | local chapterId, level = self.adv.chapterId, self.adv.level | 349 | local chapterId, level = self.adv.chapterId, self.adv.level |
| 350 | if AdvCommon.isEndless(chapterId) then | 350 | if AdvCommon.isEndless(chapterId) then |
| 351 | - local chapterData = csvdb["adv_chapterCsv"][chapterId] | ||
| 352 | - level = level % chapterData.limitlevel | ||
| 353 | - if level == 0 then | ||
| 354 | - level = chapterData.limitlevel | ||
| 355 | - end | 351 | + level = AdvCommon.getEndlessDataLv(chapterId, level) |
| 356 | end | 352 | end |
| 357 | local libsToType = { | 353 | local libsToType = { |
| 358 | ["event_monsterCsv"] = {AdvEventType.Monster, AdvEventType.BOSS, AdvEventType.Monster}, | 354 | ["event_monsterCsv"] = {AdvEventType.Monster, AdvEventType.BOSS, AdvEventType.Monster}, |
src/adv/AdvPlayer.lua
| @@ -118,6 +118,24 @@ function BaseObject:addBuff(buffId, releaser) | @@ -118,6 +118,24 @@ function BaseObject:addBuff(buffId, releaser) | ||
| 118 | self.battle.adv:backBuff(self.id, buffId) | 118 | self.battle.adv:backBuff(self.id, buffId) |
| 119 | end | 119 | end |
| 120 | 120 | ||
| 121 | +function BaseObject:delBuffById(bId) | ||
| 122 | + for _, buff in ipairs(self.buffs) do | ||
| 123 | + if not buff.isDel and buff.id == bId then | ||
| 124 | + buff.isDel = true | ||
| 125 | + return buff | ||
| 126 | + end | ||
| 127 | + end | ||
| 128 | +end | ||
| 129 | + | ||
| 130 | +function BaseObject:delPassiveById(pId) | ||
| 131 | + for _, passive in ipairs(self.passives) do | ||
| 132 | + if not passive.isDel and passive.id == pId then | ||
| 133 | + passive.isDel = true | ||
| 134 | + return passive | ||
| 135 | + end | ||
| 136 | + end | ||
| 137 | +end | ||
| 138 | + | ||
| 121 | function BaseObject:hadBuff(bType) | 139 | function BaseObject:hadBuff(bType) |
| 122 | for _, buff in ipairs(self.buffs) do | 140 | for _, buff in ipairs(self.buffs) do |
| 123 | if not buff.isDel and buff:getType() == bType then | 141 | if not buff.isDel and buff:getType() == bType then |
| @@ -134,6 +152,7 @@ function BaseObject:hadBuffById(bId) | @@ -134,6 +152,7 @@ function BaseObject:hadBuffById(bId) | ||
| 134 | end | 152 | end |
| 135 | end | 153 | end |
| 136 | 154 | ||
| 155 | + | ||
| 137 | -- 通用的buff 效果汇总 -- 0 固定 1百分比 两种分类 | 156 | -- 通用的buff 效果汇总 -- 0 固定 1百分比 两种分类 |
| 138 | function BaseObject:getCommonBuffEffect(bType) | 157 | function BaseObject:getCommonBuffEffect(bType) |
| 139 | local effect, count = {[0] = 0, [1] = 0}, 0 | 158 | local effect, count = {[0] = 0, [1] = 0}, 0 |