Commit 4f0a5faeacb8e70e036011cc850f53debe3d9aa5
1 parent
faabdf3c
营养剂
Showing
9 changed files
with
324 additions
and
14 deletions
Show diff stats
src/GlobalVar.lua
| @@ -78,6 +78,7 @@ ItemId = { | @@ -78,6 +78,7 @@ ItemId = { | ||
| 78 | EquipUp = 11, -- 装备升级材料 | 78 | EquipUp = 11, -- 装备升级材料 |
| 79 | DinerCoin = 12, --后勤物资 | 79 | DinerCoin = 12, --后勤物资 |
| 80 | LoveUp = 14, --好感度提升道具 | 80 | LoveUp = 14, --好感度提升道具 |
| 81 | + OldCoin = 15, --古代金币 | ||
| 81 | DinerSpTask = 20, -- 餐厅任务采购券 | 82 | DinerSpTask = 20, -- 餐厅任务采购券 |
| 82 | LoveBreak = 21, --好感度突破道具 | 83 | LoveBreak = 21, --好感度突破道具 |
| 83 | PvpKey = 22, -- pvp钥匙 | 84 | PvpKey = 22, -- pvp钥匙 |
| @@ -130,6 +131,7 @@ AdvBackEventType = { | @@ -130,6 +131,7 @@ AdvBackEventType = { | ||
| 130 | BattleBegin = 16, -- 战斗开始 | 131 | BattleBegin = 16, -- 战斗开始 |
| 131 | Trap = 17, --陷阱 | 132 | Trap = 17, --陷阱 |
| 132 | Layer = 18, --切换层 | 133 | Layer = 18, --切换层 |
| 134 | + MapShow = 19, -- 展示地图 | ||
| 133 | } | 135 | } |
| 134 | 136 | ||
| 135 | AdvScoreType = { | 137 | AdvScoreType = { |
src/actions/AdvAction.lua
| @@ -281,13 +281,32 @@ end | @@ -281,13 +281,32 @@ end | ||
| 281 | function _M.usePotionRpc(agent, data) | 281 | function _M.usePotionRpc(agent, data) |
| 282 | local role = agent.role | 282 | local role = agent.role |
| 283 | local msg = MsgPack.unpack(data) | 283 | local msg = MsgPack.unpack(data) |
| 284 | - local dishLevel = role.dinerData:getProperty("dishTree"):getv(msg.potionId, 0) | ||
| 285 | - if dishLevel == 0 then | ||
| 286 | - return | ||
| 287 | - end | 284 | + local potionId = msg.potionId -- 营养剂Id |
| 285 | + local target = msg.target -- {roomId = 1, blockId = 1} 选择的目标 | ||
| 286 | + local potionLv = role.dinerData:getProperty("dishTree"):getv(potionId, 0) | ||
| 287 | + if potionLv == 0 then return 1 end | ||
| 288 | + | ||
| 289 | + local potionSet = csvdb["adv_potionCsv"][potionId] | ||
| 290 | + if not potionSet then return 2 end | ||
| 291 | + | ||
| 292 | + local potionData = potionSet[potionLv] | ||
| 293 | + if not potionData then return 3 end | ||
| 294 | + | ||
| 295 | + local potionBag = role:getProperty("potionBag") | ||
| 296 | + local own = potionBag[potionId] or 0 | ||
| 297 | + if own <= 0 then return 4 end | ||
| 298 | + | ||
| 288 | local adv = role:getAdvData() | 299 | local adv = role:getAdvData() |
| 289 | - local status = adv:usePotion(msg.potionId, dishLevel, msg.target) -- target {roomId = 1, blockId = 1} 选择的目标 | 300 | + |
| 301 | + local status = adv:doActive(potionData.effect, target) -- target | ||
| 290 | if not status then return end | 302 | if not status then return end |
| 303 | + | ||
| 304 | + potionBag[potionId] = own - 1 | ||
| 305 | + role:updateProperty({field = "potionBag", value = potionBag}) | ||
| 306 | + adv:afterRound() | ||
| 307 | + adv:saveDB() | ||
| 308 | + role:checkTaskEnter("AdvUsePotion") | ||
| 309 | + | ||
| 291 | SendPacket(actionCodes.Adv_usePotionRpc, MsgPack.pack({events = adv:popBackEvents()})) | 310 | SendPacket(actionCodes.Adv_usePotionRpc, MsgPack.pack({events = adv:popBackEvents()})) |
| 292 | return true | 311 | return true |
| 293 | end | 312 | end |
src/adv/Adv.lua
| @@ -710,7 +710,10 @@ function Adv:clickBlock(roomId, blockId, params) | @@ -710,7 +710,10 @@ function Adv:clickBlock(roomId, blockId, params) | ||
| 710 | local _room, _block = one[1], one[2] | 710 | local _room, _block = one[1], one[2] |
| 711 | if _block.isOpen then canOpen = true end | 711 | if _block.isOpen then canOpen = true end |
| 712 | if _block.isOpen and _block:isMonster() then | 712 | if _block.isOpen and _block:isMonster() then |
| 713 | - hadMonster = true | 713 | + local enemy = self.battle:getEnemy(_room.roomId, _block.blockId) |
| 714 | + if not enemy:hadBuff(Buff.DONT_DEFEND) then | ||
| 715 | + hadMonster = true | ||
| 716 | + end | ||
| 714 | end | 717 | end |
| 715 | end | 718 | end |
| 716 | if canOpen and not hadMonster then --开放 | 719 | if canOpen and not hadMonster then --开放 |
| @@ -773,10 +776,172 @@ function Adv:useItem(itemId, count, target) | @@ -773,10 +776,172 @@ function Adv:useItem(itemId, count, target) | ||
| 773 | return true | 776 | return true |
| 774 | end | 777 | end |
| 775 | 778 | ||
| 779 | +function Adv:doActive(activeId, target) | ||
| 780 | + local activeData = csvdb["adv_activeCsv"][activeId] | ||
| 781 | + if not activeData then return end | ||
| 782 | + | ||
| 783 | + local targers = {} | ||
| 784 | + | ||
| 785 | + -- 筛选对象 | ||
| 786 | + if activeData.usetype == 1 then -- 自己 | ||
| 787 | + elseif activeData.usetype == 2 then -- 敌人 | ||
| 788 | + if not target or not target.roomId or not target.blockId then return end | ||
| 789 | + local block = self:getBlock(target.roomId, target.blockId) | ||
| 790 | + if block:isBoss() then return end | ||
| 791 | + local enemy = self.battle:getEnemy(target.roomId, target.blockId) | ||
| 792 | + if not enemy then return end | ||
| 793 | + local blocks = self:getCurMap():getBlocksBySize(target.roomId, target.blockId, activeData.scope) | ||
| 794 | + for _, block in pairs(blocks) do | ||
| 795 | + if block:isMonster() and not block:isBoss() then | ||
| 796 | + local e = self.battle:getEnemy(block.room.roomId, block.blockId) | ||
| 797 | + if e then | ||
| 798 | + table.insert(targers, e) | ||
| 799 | + end | ||
| 800 | + end | ||
| 801 | + end | ||
| 802 | + elseif activeData.usetype == 3 then -- 地板 | ||
| 803 | + if not target or not target.roomId or not target.blockId then return end | ||
| 804 | + local block = self:getBlock(target.roomId, target.blockId) | ||
| 805 | + if block:isBoss() then return end | ||
| 806 | + local blocks = self:getCurMap():getBlocksBySize(target.roomId, target.blockId, activeData.scope) | ||
| 807 | + for _, block in pairs(blocks) do | ||
| 808 | + if not block:isBoss() then | ||
| 809 | + table.insert(targers, block) | ||
| 810 | + end | ||
| 811 | + end | ||
| 812 | + elseif activeData.usetype == 4 then -- 自己或者没有目标 | ||
| 813 | + elseif activeData.usetype == 5 then -- 空地板 | ||
| 814 | + if not target or not target.roomId or not target.blockId then return end | ||
| 815 | + local block = self:getBlock(target.roomId, target.blockId) | ||
| 816 | + if not block.isOpen or block:getEventType() then return end | ||
| 817 | + local blocks = self:getCurMap():getBlocksBySize(target.roomId, target.blockId, activeData.scope) | ||
| 818 | + for _, block in pairs(blocks) do | ||
| 819 | + if not block:isBoss() then | ||
| 820 | + table.insert(targers, block) | ||
| 821 | + end | ||
| 822 | + end | ||
| 823 | + end | ||
| 824 | + | ||
| 825 | + local doActiveEffect = {} | ||
| 826 | + | ||
| 827 | + -- 1=map_buff_id:为范围内所有目标附加mapbuff | ||
| 828 | + doActiveEffect[1] = function(_, buffId) | ||
| 829 | + if not next(targers) and (activeData.usetype == 1 or activeData.usetype == 4)then | ||
| 830 | + table.insert(targers, self.battle.player) | ||
| 831 | + end | ||
| 832 | + | ||
| 833 | + for _, target in ipairs(targers) do | ||
| 834 | + target:addBuff(buffId, self.battle.player) | ||
| 835 | + end | ||
| 836 | + | ||
| 837 | + return true | ||
| 838 | + end | ||
| 839 | + -- 2=trader_id:召唤商人 | ||
| 840 | + doActiveEffect[2] = function(_, traderId) | ||
| 841 | + for _, target in ipairs(targers) do | ||
| 842 | + if target.isOpen and not target:getEventType() then | ||
| 843 | + target:updateEvent({ | ||
| 844 | + etype = AdvEventType.Trader, | ||
| 845 | + id = traderId, | ||
| 846 | + }) | ||
| 847 | + target:randomEvent() | ||
| 848 | + self:backBlockChange(target.room.roomId, target.blockId) | ||
| 849 | + end | ||
| 850 | + end | ||
| 851 | + return true | ||
| 852 | + end | ||
| 853 | + | ||
| 854 | + -- 3=monster_id:替换怪物,仅使用方式为2时生效 | ||
| 855 | + doActiveEffect[3] = function(_, monsterId) | ||
| 856 | + for _, target in ipairs(targers) do | ||
| 857 | + if not target.lock and not target.isDead then | ||
| 858 | + self.battle:removeEnemyById(target.id) | ||
| 859 | + self:getCurMap():addNewMonsterRand(monsterId, {target.roomId, target.blockId}) | ||
| 860 | + self:backBlockChange(target.roomId, target.blockId) | ||
| 861 | + end | ||
| 862 | + end | ||
| 863 | + return true | ||
| 864 | + end | ||
| 865 | + -- 4:显示本层 | ||
| 866 | + doActiveEffect[4] = function(_) | ||
| 867 | + self:getCurMap():showMap() | ||
| 868 | + self:backMapShow() | ||
| 869 | + return true | ||
| 870 | + end | ||
| 871 | + -- 5:放逐目标 | ||
| 872 | + doActiveEffect[5] = function(_) | ||
| 873 | + for _, target in ipairs(targers) do | ||
| 874 | + if not target.lock and not target.isDead then | ||
| 875 | + self.battle:removeEnemyById(target.id) | ||
| 876 | + local block = self:getBlock(target.roomId, target.blockId) | ||
| 877 | + block:clear() | ||
| 878 | + self:backBlockChange(target.roomId, target.blockId) | ||
| 879 | + end | ||
| 880 | + end | ||
| 881 | + return true | ||
| 882 | + end | ||
| 883 | + -- 6=陷阱id:移除陷阱,不填写id则移除所有陷阱 | ||
| 884 | + doActiveEffect[6] = function(_, trapId) | ||
| 885 | + if not next(targers) and activeData.usetype == 4 then | ||
| 886 | + -- 全屏 | ||
| 887 | + for _, room in pairs(self:getCurMap().rooms) do | ||
| 888 | + for _, block in pairs(room.blocks) do | ||
| 889 | + if block:getEventType() == AdvEventType.Trap then | ||
| 890 | + block:updateEvent(nil) | ||
| 891 | + self:backBlockChange(block.room.roomId, block.blockId) | ||
| 892 | + end | ||
| 893 | + end | ||
| 894 | + end | ||
| 895 | + else | ||
| 896 | + for _ , target in ipairs(targers) do | ||
| 897 | + if target:getEventType() == AdvEventType.Trap then | ||
| 898 | + target:updateEvent(nil) | ||
| 899 | + self:backBlockChange(target.room.roomId, target.blockId) | ||
| 900 | + end | ||
| 901 | + end | ||
| 902 | + end | ||
| 903 | + return true | ||
| 904 | + end | ||
| 905 | + | ||
| 906 | + -- 7=道具燃烧效果 | ||
| 907 | + doActiveEffect[7] = function(_) | ||
| 908 | + for _ , target in ipairs(targers) do | ||
| 909 | + if target:getEventType() == AdvEventType.Drop then | ||
| 910 | + target:updateEvent(nil) | ||
| 911 | + self:backBlockChange(target.room.roomId, target.blockId) | ||
| 912 | + end | ||
| 913 | + end | ||
| 914 | + return true | ||
| 915 | + end | ||
| 916 | + | ||
| 917 | + -- 8:翻开范围内的方格 | ||
| 918 | + doActiveEffect[8] = function(_) | ||
| 919 | + for _ , target in ipairs(targers) do | ||
| 920 | + if not target.isOpen then | ||
| 921 | + target:open() | ||
| 922 | + self:backBlockChange(target.room.roomId, target.blockId) | ||
| 923 | + end | ||
| 924 | + end | ||
| 925 | + return true | ||
| 926 | + end | ||
| 927 | + | ||
| 928 | + for _, effect in ipairs(activeData.effect:toArray()) do | ||
| 929 | + local cur = effect:toArray(true, "=") | ||
| 930 | + if doActiveEffect[cur[1]] then | ||
| 931 | + if not doActiveEffect[cur[1]](table.unpack(cur)) then | ||
| 932 | + return | ||
| 933 | + end | ||
| 934 | + end | ||
| 935 | + end | ||
| 936 | + | ||
| 937 | + return true | ||
| 938 | +end | ||
| 939 | + | ||
| 776 | --使用技能 | 940 | --使用技能 |
| 777 | function Adv:usePotion(potionId, potionLevel, target) | 941 | function Adv:usePotion(potionId, potionLevel, target) |
| 778 | -- cost | 942 | -- cost |
| 779 | local potionData = csvdb["adv_potionCsv"][potionId][potionLevel] | 943 | local potionData = csvdb["adv_potionCsv"][potionId][potionLevel] |
| 944 | + | ||
| 780 | local enemy = self.battle:getEnemy(target.roomId, target.blockId) | 945 | local enemy = self.battle:getEnemy(target.roomId, target.blockId) |
| 781 | if not enemy then return end | 946 | if not enemy then return end |
| 782 | --生效 | 947 | --生效 |
| @@ -788,9 +953,7 @@ function Adv:usePotion(potionId, potionLevel, target) | @@ -788,9 +953,7 @@ function Adv:usePotion(potionId, potionLevel, target) | ||
| 788 | else | 953 | else |
| 789 | return | 954 | return |
| 790 | end | 955 | end |
| 791 | - self:afterRound() | ||
| 792 | - self:saveDB() | ||
| 793 | - self.owner:checkTaskEnter("AdvUsePotion") | 956 | + |
| 794 | return true | 957 | return true |
| 795 | end | 958 | end |
| 796 | 959 | ||
| @@ -934,6 +1097,10 @@ function Adv:backLayer() | @@ -934,6 +1097,10 @@ function Adv:backLayer() | ||
| 934 | self:pushBackEvent(AdvBackEventType.Layer, {}) | 1097 | self:pushBackEvent(AdvBackEventType.Layer, {}) |
| 935 | end | 1098 | end |
| 936 | 1099 | ||
| 1100 | +function Adv:backMapShow() | ||
| 1101 | + self:pushBackEvent(AdvBackEventType.MapShow, {}) | ||
| 1102 | +end | ||
| 1103 | + | ||
| 937 | function Adv:scoreChange(scoreType, pms) | 1104 | function Adv:scoreChange(scoreType, pms) |
| 938 | local cutTypes = {} | 1105 | local cutTypes = {} |
| 939 | local score = 0 | 1106 | local score = 0 |
src/adv/AdvBattle.lua
| @@ -161,6 +161,18 @@ function Battle:triggerPassive(condType, params, mapIdx) | @@ -161,6 +161,18 @@ function Battle:triggerPassive(condType, params, mapIdx) | ||
| 161 | end | 161 | end |
| 162 | end | 162 | end |
| 163 | 163 | ||
| 164 | +-- 只是从战斗中移除 从地图中移除 在外面操作 | ||
| 165 | +function Battle:removeEnemyById(id) | ||
| 166 | + local mapIdx = self.adv:getCurMapIdx() | ||
| 167 | + for i = #self.enemys[mapIdx], 1, -1 do | ||
| 168 | + if self.enemys[mapIdx][i].id == id then | ||
| 169 | + local enemy = table.remove(self.enemys[mapIdx], i) | ||
| 170 | + enemy:clear() | ||
| 171 | + break | ||
| 172 | + end | ||
| 173 | + end | ||
| 174 | +end | ||
| 175 | + | ||
| 164 | --回合 | 176 | --回合 |
| 165 | function Battle:afterRound() | 177 | function Battle:afterRound() |
| 166 | local mapIdx = self.adv:getCurMapIdx() | 178 | local mapIdx = self.adv:getCurMapIdx() |
src/adv/AdvBlock.lua
| @@ -36,8 +36,8 @@ function Block:clear() | @@ -36,8 +36,8 @@ function Block:clear() | ||
| 36 | self.event = nil | 36 | self.event = nil |
| 37 | end | 37 | end |
| 38 | 38 | ||
| 39 | ---事件有需要额外处理的部分 | ||
| 40 | -function Block:open() | 39 | + |
| 40 | +function Block:randomEvent() | ||
| 41 | local room = self.room | 41 | local room = self.room |
| 42 | local map = room.map | 42 | local map = room.map |
| 43 | local adv = map.adv | 43 | local adv = map.adv |
| @@ -118,6 +118,16 @@ function Block:open() | @@ -118,6 +118,16 @@ function Block:open() | ||
| 118 | randomFunc[self:getEventType()]() | 118 | randomFunc[self:getEventType()]() |
| 119 | end | 119 | end |
| 120 | end | 120 | end |
| 121 | +end | ||
| 122 | + | ||
| 123 | + | ||
| 124 | +--事件有需要额外处理的部分 | ||
| 125 | +function Block:open() | ||
| 126 | + if self.isOpen then return end | ||
| 127 | + local room = self.room | ||
| 128 | + local map = room.map | ||
| 129 | + local adv = map.adv | ||
| 130 | + self:randomEvent() | ||
| 121 | adv.owner:checkTaskEnter("AdvOpenBlock") | 131 | adv.owner:checkTaskEnter("AdvOpenBlock") |
| 122 | self.isOpen = true | 132 | self.isOpen = true |
| 123 | end | 133 | end |
src/adv/AdvBuff.lua
| @@ -21,6 +21,11 @@ Buff.BATTLE_BUFF = 17 -- 切换为战斗中的buff | @@ -21,6 +21,11 @@ Buff.BATTLE_BUFF = 17 -- 切换为战斗中的buff | ||
| 21 | Buff.CHANGE_DROP = 18 -- 转换掉落 | 21 | Buff.CHANGE_DROP = 18 -- 转换掉落 |
| 22 | Buff.BATTLE_PASSIVE = 19 -- 切换为战斗中的被动技 | 22 | Buff.BATTLE_PASSIVE = 19 -- 切换为战斗中的被动技 |
| 23 | Buff.EXP_ADD = 20 -- 增加exp(每回合) | 23 | Buff.EXP_ADD = 20 -- 增加exp(每回合) |
| 24 | +Buff.DONT_DEFEND = 21 -- 不看守地板 -- 怪周围点半可点击 | ||
| 25 | + | ||
| 26 | +Buff.EXP_UP = 24 -- 杀敌经验提高 | ||
| 27 | +Buff.DISABLE_BUFF = 25 -- 禁用固有技 | ||
| 28 | +Buff.ATTR_CHANGE_COND = 26 --属性变化(状态)有条件 | ||
| 24 | 29 | ||
| 25 | --角色一些属性的变化 | 30 | --角色一些属性的变化 |
| 26 | local function commonAttr(_Buff, attrName) | 31 | local function commonAttr(_Buff, attrName) |
| @@ -34,6 +39,28 @@ local function commonAttr(_Buff, attrName) | @@ -34,6 +39,28 @@ local function commonAttr(_Buff, attrName) | ||
| 34 | self.owner:reSetAttr(attrName) | 39 | self.owner:reSetAttr(attrName) |
| 35 | end | 40 | end |
| 36 | end | 41 | end |
| 42 | +local function commonAttCond(_Buff, attrName) | ||
| 43 | + _Buff._init = function(self, data) --初始化变化值 | ||
| 44 | + local effectCount = 0 | ||
| 45 | + if self.buffData.effectValue4 == 0 then | ||
| 46 | + effectCount = self.owner.battle.adv.owner:getProperty("advItems"):getv(ItemId.OldCoin, 0) | ||
| 47 | + end | ||
| 48 | + self._changeV = self.buffData.effectValue2 * effectCount / self.buffData.effectValue5 | ||
| 49 | + self.owner:reSetAttr(attrName) | ||
| 50 | + end | ||
| 51 | + _Buff._initDB = function(self, data) | ||
| 52 | + self._changeV = data.cv | ||
| 53 | + end | ||
| 54 | + _Buff._effectValue = function(self) | ||
| 55 | + return self.buffData.effectValue1, self._changeV | ||
| 56 | + end | ||
| 57 | + _Buff._endBuff = function(self, data) | ||
| 58 | + self.owner:reSetAttr(attrName) | ||
| 59 | + end | ||
| 60 | + _Buff._getDB = function(self) | ||
| 61 | + return {cv = self._changeV} | ||
| 62 | + end | ||
| 63 | +end | ||
| 37 | 64 | ||
| 38 | local BuffFactory = { | 65 | local BuffFactory = { |
| 39 | [Buff.HP_CHANGE] = function(_Buff) | 66 | [Buff.HP_CHANGE] = function(_Buff) |
| @@ -108,6 +135,13 @@ local BuffFactory = { | @@ -108,6 +135,13 @@ local BuffFactory = { | ||
| 108 | local attrName = AttsEnumEx[_Buff.buffData.effectValue3] | 135 | local attrName = AttsEnumEx[_Buff.buffData.effectValue3] |
| 109 | commonAttr(_Buff, attrName) | 136 | commonAttr(_Buff, attrName) |
| 110 | end, | 137 | end, |
| 138 | + | ||
| 139 | + [Buff.ATTR_CHANGE] = function(_Buff) | ||
| 140 | + local attrName = AttsEnumEx[_Buff.buffData.effectValue3] | ||
| 141 | + commonAttCond(_Buff, attrName) | ||
| 142 | + end, | ||
| 143 | + | ||
| 144 | + | ||
| 111 | [Buff.BACK_HURT] = function(_Buff) | 145 | [Buff.BACK_HURT] = function(_Buff) |
| 112 | _Buff._effectValue = function(self) | 146 | _Buff._effectValue = function(self) |
| 113 | return self.buffData.effectValue1, self.buffData.effectValue2, self.buffData.effectValue3 | 147 | return self.buffData.effectValue1, self.buffData.effectValue2, self.buffData.effectValue3 |
| @@ -122,7 +156,7 @@ local BuffFactory = { | @@ -122,7 +156,7 @@ local BuffFactory = { | ||
| 122 | 156 | ||
| 123 | [Buff.INJURED_CHANGE] = function(_Buff) | 157 | [Buff.INJURED_CHANGE] = function(_Buff) |
| 124 | _Buff._effectValue = function(self) | 158 | _Buff._effectValue = function(self) |
| 125 | - return self.buffData.effectValue1, self.buffData.effectValue2 | 159 | + return self.buffData.effectValue1, self.buffData.effectValue2, self.buffData.effectValue3 |
| 126 | end | 160 | end |
| 127 | end, | 161 | end, |
| 128 | 162 | ||
| @@ -238,6 +272,18 @@ local BuffFactory = { | @@ -238,6 +272,18 @@ local BuffFactory = { | ||
| 238 | return self.buffData.effectValue1 | 272 | return self.buffData.effectValue1 |
| 239 | end | 273 | end |
| 240 | end, | 274 | end, |
| 275 | + | ||
| 276 | + [Buff.EXP_UP] = function(_Buff) | ||
| 277 | + --cType 0 or nil 值 1 百分比 | ||
| 278 | + _Buff._effectValue = function(self) | ||
| 279 | + return self.buffData.effectValue1, self.buffData.effectValue2 | ||
| 280 | + end | ||
| 281 | + end, | ||
| 282 | + [Buff.DISABLE_BUFF] = function(_Buff) | ||
| 283 | + _Buff._effectValue = function(self) | ||
| 284 | + return self.buffData.effectValue1 | ||
| 285 | + end | ||
| 286 | + end, | ||
| 241 | } | 287 | } |
| 242 | 288 | ||
| 243 | function Buff:ctor(owner, id) | 289 | function Buff:ctor(owner, id) |
| @@ -314,7 +360,7 @@ function Buff:afterRound() | @@ -314,7 +360,7 @@ function Buff:afterRound() | ||
| 314 | end | 360 | end |
| 315 | 361 | ||
| 316 | function Buff:decRound() | 362 | function Buff:decRound() |
| 317 | - if self.buffData.round == 0 then | 363 | + if self.buffData.round <= 0 then |
| 318 | return | 364 | return |
| 319 | end | 365 | end |
| 320 | self.round = self.round - 1 | 366 | self.round = self.round - 1 |
src/adv/AdvMap.lua
| @@ -17,6 +17,7 @@ function Map:ctor(adv, mapIdx, mapInfo) | @@ -17,6 +17,7 @@ function Map:ctor(adv, mapIdx, mapInfo) | ||
| 17 | 17 | ||
| 18 | self.mapIdx = mapIdx | 18 | self.mapIdx = mapIdx |
| 19 | self.mapId = mapInfo.mapId | 19 | self.mapId = mapInfo.mapId |
| 20 | + self.isShow = mapInfo.isShow -- 是否全部展示 -- 客户端用 | ||
| 20 | self.rooms = {} | 21 | self.rooms = {} |
| 21 | self:loadRooms(mapInfo.rooms) | 22 | self:loadRooms(mapInfo.rooms) |
| 22 | end | 23 | end |
| @@ -36,6 +37,7 @@ end | @@ -36,6 +37,7 @@ end | ||
| 36 | function Map:getDB() | 37 | function Map:getDB() |
| 37 | local map = {} | 38 | local map = {} |
| 38 | map.mapId = self.mapId | 39 | map.mapId = self.mapId |
| 40 | + map.isShow = self.isShow | ||
| 39 | map.rooms = {} | 41 | map.rooms = {} |
| 40 | for roomId, room in pairs(self.rooms) do | 42 | for roomId, room in pairs(self.rooms) do |
| 41 | map.rooms[roomId] = room:getDB() | 43 | map.rooms[roomId] = room:getDB() |
| @@ -43,6 +45,10 @@ function Map:getDB() | @@ -43,6 +45,10 @@ function Map:getDB() | ||
| 43 | return map | 45 | return map |
| 44 | end | 46 | end |
| 45 | 47 | ||
| 48 | +function Map:showMap() | ||
| 49 | + self.isShow = true | ||
| 50 | +end | ||
| 51 | + | ||
| 46 | --结束本层的时候调用 | 52 | --结束本层的时候调用 |
| 47 | function Map:checkOver() | 53 | function Map:checkOver() |
| 48 | local mapCsv = csvdb["mapCsv"][self.mapId] | 54 | local mapCsv = csvdb["mapCsv"][self.mapId] |
| @@ -159,6 +165,29 @@ function Map:getAroundBlocks(room, block) | @@ -159,6 +165,29 @@ function Map:getAroundBlocks(room, block) | ||
| 159 | return blocks | 165 | return blocks |
| 160 | end | 166 | end |
| 161 | 167 | ||
| 168 | +function Map:getBlocksBySize(roomId, blockId, size) | ||
| 169 | + local blocks = {} | ||
| 170 | + local room = self.rooms[roomId] | ||
| 171 | + if not room then return end | ||
| 172 | + local block = room.blocks[blockId] | ||
| 173 | + if not block then return end | ||
| 174 | + | ||
| 175 | + local col, row = room:tranLtoG(block.col, block.row) | ||
| 176 | + | ||
| 177 | + size = math.floor(size / 2) | ||
| 178 | + for c = col - size, col + size do | ||
| 179 | + for r = row - size, row + size do | ||
| 180 | + local rroom, rblock = self:getRBByPos(c, r) | ||
| 181 | + if rroom then | ||
| 182 | + table.insert(blocks, rblock) | ||
| 183 | + end | ||
| 184 | + end | ||
| 185 | + end | ||
| 186 | + return blocks | ||
| 187 | +end | ||
| 188 | + | ||
| 189 | + | ||
| 190 | + | ||
| 162 | -----------------------------随机地图----------------------------- | 191 | -----------------------------随机地图----------------------------- |
| 163 | 192 | ||
| 164 | createMap = function(self, mapId) | 193 | createMap = function(self, mapId) |
src/adv/AdvPassive.lua
| @@ -235,6 +235,10 @@ function Passive:canEffect(effType, effValue) | @@ -235,6 +235,10 @@ function Passive:canEffect(effType, effValue) | ||
| 235 | if self.owner.lock and effType ~= 3 then -- 锁定的只能触发翻开自己格子的固有技 | 235 | if self.owner.lock and effType ~= 3 then -- 锁定的只能触发翻开自己格子的固有技 |
| 236 | return | 236 | return |
| 237 | end | 237 | end |
| 238 | + --禁用被动技 | ||
| 239 | + if self.owner:getPassiveIdx(self) <= self.owner:getDisablePassiveCount() then | ||
| 240 | + return | ||
| 241 | + end | ||
| 238 | return true | 242 | return true |
| 239 | end | 243 | end |
| 240 | 244 |
src/adv/AdvPlayer.lua
| @@ -58,7 +58,6 @@ function BaseObject:afterRound() | @@ -58,7 +58,6 @@ function BaseObject:afterRound() | ||
| 58 | end | 58 | end |
| 59 | end | 59 | end |
| 60 | 60 | ||
| 61 | - | ||
| 62 | function BaseObject:clearRound() | 61 | function BaseObject:clearRound() |
| 63 | for i = #self.passives, 1, -1 do | 62 | for i = #self.passives, 1, -1 do |
| 64 | if self.passives[i].isDel then | 63 | if self.passives[i].isDel then |
| @@ -102,6 +101,24 @@ function BaseObject:addPassive(params) | @@ -102,6 +101,24 @@ function BaseObject:addPassive(params) | ||
| 102 | self.battle.adv:backPassive(self.id, skillId) | 101 | self.battle.adv:backPassive(self.id, skillId) |
| 103 | end | 102 | end |
| 104 | 103 | ||
| 104 | +function BaseObject:getPassiveIdx(passive) | ||
| 105 | + for idx, passive_ in ipairs(self.passives) do | ||
| 106 | + if passive_ == passive then | ||
| 107 | + return idx | ||
| 108 | + end | ||
| 109 | + end | ||
| 110 | +end | ||
| 111 | + | ||
| 112 | +function BaseObject:getDisablePassiveCount() | ||
| 113 | + local count = 0 | ||
| 114 | + for _, buff in ipairs(self.buffs) do | ||
| 115 | + if not buff.isDel and buff:getType() == Buff.DISABLE_BUFF then | ||
| 116 | + count = count + buff:effect() | ||
| 117 | + end | ||
| 118 | + end | ||
| 119 | + return count | ||
| 120 | +end | ||
| 121 | + | ||
| 105 | function BaseObject:addBuff(buffId, releaser) | 122 | function BaseObject:addBuff(buffId, releaser) |
| 106 | local buffData = csvdb["adv_map_buffCsv"][buffId] | 123 | local buffData = csvdb["adv_map_buffCsv"][buffId] |
| 107 | if not buffData then return end | 124 | if not buffData then return end |
| @@ -454,6 +471,10 @@ function Player:initData(data) | @@ -454,6 +471,10 @@ function Player:initData(data) | ||
| 454 | end | 471 | end |
| 455 | 472 | ||
| 456 | function Player:addExp(value) | 473 | function Player:addExp(value) |
| 474 | + -- buff 经验加成 | ||
| 475 | + local up = self:getCommonBuffEffect(Buff.EXP_UP) | ||
| 476 | + value = math.ceil((value + up[0]) * (1 + up[1])) | ||
| 477 | + | ||
| 457 | if value <= 0 then return end | 478 | if value <= 0 then return end |
| 458 | local newExp = self.exp + value | 479 | local newExp = self.exp + value |
| 459 | local level = self.level | 480 | local level = self.level |