Commit 9104a922a7fc39f1a9660fcae0a5eb1c27cd4f59
1 parent
6133e29f
多重掉落
Showing
3 changed files
with
119 additions
and
36 deletions
Show diff stats
src/adv/Adv.lua
@@ -8,6 +8,7 @@ local Adv = class("Adv") | @@ -8,6 +8,7 @@ local Adv = class("Adv") | ||
8 | local AdvTask = import(".AdvTask") --任务相关数据搞出去 | 8 | local AdvTask = import(".AdvTask") --任务相关数据搞出去 |
9 | AdvTask.bind(Adv) | 9 | AdvTask.bind(Adv) |
10 | 10 | ||
11 | + | ||
11 | function Adv:ctor(owner) | 12 | function Adv:ctor(owner) |
12 | assert(owner, "Adv instance must have owner(role)") | 13 | assert(owner, "Adv instance must have owner(role)") |
13 | self.owner = owner | 14 | self.owner = owner |
@@ -1805,45 +1806,77 @@ function Adv:enemyDead(enemy, escape) | @@ -1805,45 +1806,77 @@ function Adv:enemyDead(enemy, escape) | ||
1805 | end | 1806 | end |
1806 | local changeV = self.battle.player:addExp(monsterData.exp) | 1807 | local changeV = self.battle.player:addExp(monsterData.exp) |
1807 | self:backDead(enemyId, changeV) | 1808 | self:backDead(enemyId, changeV) |
1808 | - if enemy:hadBuff(Buff.CHANGE_DROP_TO_CLICK) then -- 掉落转为 click | ||
1809 | - local clickId = buff:effect() | ||
1810 | - block:updateEvent({ | ||
1811 | - etype = AdvEventType.Click, | ||
1812 | - id = clickId | ||
1813 | - }) | ||
1814 | - self.battle.player:triggerPassive(Passive.BATTLE_WIN) | ||
1815 | - else | ||
1816 | - local item = block.event.item | ||
1817 | - if not item then | ||
1818 | - local buff = enemy:hadBuff(Buff.CHANGE_DROP) | ||
1819 | - if buff then | ||
1820 | - item = table.pack(buff:effect()) | ||
1821 | - else | ||
1822 | - if monsterData.dropid == 0 then | ||
1823 | - item = {0, 0} | 1809 | + |
1810 | + local toClick = enemy:hadBuff(Buff.CHANGE_DROP_TO_CLICK) | ||
1811 | + if toClick then | ||
1812 | + toClick = toClick:effect() | ||
1813 | + end | ||
1814 | + | ||
1815 | + local changItem = enemy:hadBuff(Buff.CHANGE_DROP) | ||
1816 | + if changItem then | ||
1817 | + changItem = table.pack(changItem:effect()) | ||
1818 | + end | ||
1819 | + | ||
1820 | + local addMult = 0 | ||
1821 | + local dropBuff = enemy:hadBuff(Buff.DROP_BUFF_BY_ENEMY) -- 根据敌人数量变化个数 | ||
1822 | + if dropBuff then | ||
1823 | + local team = enemy:getTeam(1, true) | ||
1824 | + addMult = addMult + 0.2 * #team | ||
1825 | + end | ||
1826 | + | ||
1827 | + local dropIds = monsterData.dropid:toArray(true, "=") | ||
1828 | + local drops = {} | ||
1829 | + local cCcount = 0 -- 需要改变为click 的个数 | ||
1830 | + for _, dropId in ipairs(dropIds) do | ||
1831 | + local dropData = csvdb["event_dropCsv"][dropId] | ||
1832 | + if dropData then | ||
1833 | + local cur = dropData["range"]:randWeight(true) | ||
1834 | + if cur and cur[1] ~= 0 then | ||
1835 | + if toClick then | ||
1836 | + cCcount = cCcount + 1 | ||
1824 | else | 1837 | else |
1825 | - local dropData = csvdb["event_dropCsv"][monsterData.dropid] | ||
1826 | - item = dropData["range"]:randWeight(true) | 1838 | + local item = changItem and changItem or cur |
1839 | + item[2] = math.floor(item[2] * (1 + addMult)) | ||
1840 | + drops[#drops + 1] = item | ||
1827 | end | 1841 | end |
1828 | end | 1842 | end |
1829 | - | ||
1830 | end | 1843 | end |
1831 | - if item[1] == 0 then | ||
1832 | - block:clear() | ||
1833 | - self.battle.player:triggerPassive(Passive.BATTLE_WIN) | ||
1834 | - else | ||
1835 | - local buff = enemy:hadBuff(Buff.DROP_BUFF_BY_ENEMY) -- 根据敌人数量变化个数 | ||
1836 | - if buff then | ||
1837 | - local team = enemy:getTeam(1, true) | ||
1838 | - item[2] = math.floor(item[2] * (1 + 0.2 * #team)) | ||
1839 | - end | ||
1840 | - block:updateEvent({ | ||
1841 | - etype = AdvEventType.Drop, | ||
1842 | - item = item | ||
1843 | - }) | ||
1844 | - self.battle.player:triggerPassive(Passive.BATTLE_WIN, {itemId = item[1], count = item[2]}) | 1844 | + end |
1845 | + -- 这些奖励可能会有被动加成 | ||
1846 | + self.battle.player:triggerPassive(Passive.BATTLE_WIN, {drops = drops}) | ||
1847 | + | ||
1848 | + -- 自身带的掉落是不会被改变的 也不会被加成 | ||
1849 | + if block.event.item and block.event.item[1] ~= 0 then | ||
1850 | + drops[#drops + 1] = block.event.item | ||
1851 | + end | ||
1852 | + | ||
1853 | + -- 清空当前的格子 | ||
1854 | + block:clear() | ||
1855 | + | ||
1856 | + -- 掉落走一波 | ||
1857 | + local blocks = self:getCurMap():getEmptyBlocks(roomId, blockId, #drops) | ||
1858 | + for _i, cblock in ipairs(blocks) do | ||
1859 | + cblock:updateEvent({ | ||
1860 | + etype = AdvEventType.Drop, | ||
1861 | + item = drops[_i] | ||
1862 | + }) | ||
1863 | + if cblock ~= block then | ||
1864 | + self:backBlockChange(cblock.room.roomId, cblock.blockId) | ||
1865 | + end | ||
1866 | + end | ||
1867 | + | ||
1868 | + -- 转换的click走一波 | ||
1869 | + local blocks = self:getCurMap():getEmptyBlocks(roomId, blockId, cCcount) | ||
1870 | + for _i, cblock in ipairs(blocks) do | ||
1871 | + cblock:updateEvent({ | ||
1872 | + etype = AdvEventType.Click, | ||
1873 | + id = clickId | ||
1874 | + }) | ||
1875 | + if cblock ~= block then | ||
1876 | + self:backBlockChange(cblock.room.roomId, cblock.blockId) | ||
1845 | end | 1877 | end |
1846 | end | 1878 | end |
1879 | + | ||
1847 | self:checkTask(Adv.TaskType.Kill, 1, enemyId) | 1880 | self:checkTask(Adv.TaskType.Kill, 1, enemyId) |
1848 | self:checkTask(Adv.TaskType.KillAll) | 1881 | self:checkTask(Adv.TaskType.KillAll) |
1849 | self:checkAchievement(Adv.AchievType.Kill, 1, enemyId) | 1882 | self:checkAchievement(Adv.AchievType.Kill, 1, enemyId) |
src/adv/AdvMap.lua
@@ -349,6 +349,55 @@ function Map:getBlocksBySize(roomId, blockId, size) | @@ -349,6 +349,55 @@ function Map:getBlocksBySize(roomId, blockId, size) | ||
349 | return blocks | 349 | return blocks |
350 | end | 350 | end |
351 | 351 | ||
352 | +-- 找周围的空格子 最多 49 个 | ||
353 | +function Map:getEmptyBlocks(roomId, blockId, count) | ||
354 | + local blocks = {} | ||
355 | + if count == 0 then return blocks end | ||
356 | + local room = self.rooms[roomId] | ||
357 | + if not room then return end | ||
358 | + local block = room.blocks[blockId] | ||
359 | + if not block then return end | ||
360 | + | ||
361 | + local col, row = room:tranLtoG(block.col, block.row) | ||
362 | + | ||
363 | + -- 找周围49个格子 | ||
364 | + for range = 0, 3 do | ||
365 | + if range == 0 then | ||
366 | + if block.isOpen and not block:getEventType() then | ||
367 | + blocks[#blocks + 1] = block | ||
368 | + if #blocks >= count then | ||
369 | + return blocks | ||
370 | + end | ||
371 | + end | ||
372 | + else | ||
373 | + for _, c in ipairs({col - range , col + range}) do | ||
374 | + for r = row - range, row + range do | ||
375 | + local rroom, rblock = self:getRBByPos(c, r) | ||
376 | + if rroom and rblock.isOpen and not rblock:getEventType() then | ||
377 | + blocks[#blocks + 1] = rblock | ||
378 | + if #blocks >= count then | ||
379 | + return blocks | ||
380 | + end | ||
381 | + end | ||
382 | + end | ||
383 | + end | ||
384 | + | ||
385 | + for _, r in ipairs({row - range , row + range}) do | ||
386 | + for c = col - range + 1, col + range - 1 do | ||
387 | + local rroom, rblock = self:getRBByPos(c, r) | ||
388 | + if rroom and rblock.isOpen and not rblock:getEventType() then | ||
389 | + blocks[#blocks + 1] = rblock | ||
390 | + if #blocks >= count then | ||
391 | + return blocks | ||
392 | + end | ||
393 | + end | ||
394 | + end | ||
395 | + end | ||
396 | + end | ||
397 | + end | ||
398 | + return blocks | ||
399 | +end | ||
400 | + | ||
352 | function Map:getEnemysBySize(roomId, blockId, size) | 401 | function Map:getEnemysBySize(roomId, blockId, size) |
353 | local blocks = self:getBlocksBySize(roomId, blockId, size) | 402 | local blocks = self:getBlocksBySize(roomId, blockId, size) |
354 | local enemys = {} | 403 | local enemys = {} |
@@ -514,7 +563,6 @@ createMap = function(self, mapId, isEnter, isNewRelay) | @@ -514,7 +563,6 @@ createMap = function(self, mapId, isEnter, isNewRelay) | ||
514 | --交易所 | 563 | --交易所 |
515 | randomFunc[AdvEventType.Trader] = function() | 564 | randomFunc[AdvEventType.Trader] = function() |
516 | -- if self.adv.isRelay and isNewRelay then return false end | 565 | -- if self.adv.isRelay and isNewRelay then return false end |
517 | - if self.adv.isRelay then return false end | ||
518 | return randomCommon() | 566 | return randomCommon() |
519 | end | 567 | end |
520 | --建筑 | 568 | --建筑 |
src/adv/AdvPassive.lua
@@ -485,8 +485,10 @@ end | @@ -485,8 +485,10 @@ end | ||
485 | 485 | ||
486 | --10=战斗额外掉落次数 | 486 | --10=战斗额外掉落次数 |
487 | function Passive:effect10(count, triggerPms) | 487 | function Passive:effect10(count, triggerPms) |
488 | - if triggerPms.count then | ||
489 | - self.owner.battle.adv:award({[triggerPms.itemId] = triggerPms.count * count}, {log = {desc = "passive", int1 = self.id}}) | 488 | + if triggerPms.drops then |
489 | + for _, drop in pairs(triggerPms.drops) do | ||
490 | + drop[2] = drop[2] + math.floor(drop[2] * count) | ||
491 | + end | ||
490 | end | 492 | end |
491 | end | 493 | end |
492 | 494 |