Commit 42f2d1d368dd279752916367db67258110595636
1 parent
a88a35fd
战斗内技能序列逻辑
Showing
5 changed files
with
48 additions
and
4 deletions
Show diff stats
src/ProtocolCode.lua
src/actions/AdvAction.lua
| ... | ... | @@ -75,7 +75,7 @@ function _M.useItemRpc(agent, data) |
| 75 | 75 | return true |
| 76 | 76 | end |
| 77 | 77 | |
| 78 | ---使用技能 | |
| 78 | +--使用营养技能 | |
| 79 | 79 | function _M.useSkillRpc(agent, data) |
| 80 | 80 | local role = agent.role |
| 81 | 81 | local msg = MsgPack.unpack(data) |
| ... | ... | @@ -86,6 +86,16 @@ function _M.useSkillRpc(agent, data) |
| 86 | 86 | return true |
| 87 | 87 | end |
| 88 | 88 | |
| 89 | +--使用战斗技能 | |
| 90 | +function _M.battleSkillRpc(agent, data) | |
| 91 | + local role = agent.role | |
| 92 | + local msg = MsgPack.unpack(data) | |
| 93 | + local adv = role:getAdvData() | |
| 94 | + local status = adv:releaseBattleSkill(msg.skillId) | |
| 95 | + if not status then return end | |
| 96 | + SendPacket(actionCodes.Adv_useSkillRpc, MsgPack.pack({events = {}})) | |
| 97 | + return true | |
| 98 | +end | |
| 89 | 99 | |
| 90 | 100 | --退出 |
| 91 | 101 | function _M.exitAdvRpc(agent, data) | ... | ... |
src/adv/Adv.lua
| ... | ... | @@ -942,10 +942,9 @@ function Adv:useItem(itemId, count, target) |
| 942 | 942 | return true |
| 943 | 943 | end |
| 944 | 944 | |
| 945 | ---使用技能 | |
| 945 | +--使用技能 -- TODO 改表了,估计要重写 | |
| 946 | 946 | function Adv:useSkill(skillId, target) |
| 947 | 947 | local skillLevel = nil |
| 948 | - if skillId > 1000 then return end | |
| 949 | 948 | for slot, heroId in pairs(self.advTeam.heros) do |
| 950 | 949 | if self.owner.heros[heroId] then |
| 951 | 950 | if csvdb["unitCsv"][self.owner.heros[heroId]:getSkinId()]["adv"] == skillId then |
| ... | ... | @@ -971,6 +970,25 @@ function Adv:useSkill(skillId, target) |
| 971 | 970 | return true |
| 972 | 971 | end |
| 973 | 972 | |
| 973 | +--使用战斗技能 | |
| 974 | +function Adv:releaseBattleSkill(skillId) | |
| 975 | + if not csvdb["adv_skill_specialCsv"][skillId] or self.battle:isBattleEnd() then return end | |
| 976 | + local skillLevel = nil | |
| 977 | + for slot, heroId in pairs(self.advTeam.heros) do | |
| 978 | + if self.owner.heros[heroId] then | |
| 979 | + if csvdb["unitCsv"][self.owner.heros[heroId]:getSkinId()]["adv"] == skillId then | |
| 980 | + skillLevel = self.owner.heros[heroId]:getSkillLevel(4) | |
| 981 | + break | |
| 982 | + end | |
| 983 | + end | |
| 984 | + end | |
| 985 | + if not skillLevel or not csvdb["adv_skill_specialCsv"][skillId][skillLevel] then return end | |
| 986 | + local skillData = csvdb["adv_skill_specialCsv"][skillId][skillLevel] | |
| 987 | + local enemy = self.battle.enemy | |
| 988 | + self.battle.player:addSpecialSkill(skillId, skillLevel, enemy) | |
| 989 | + return true | |
| 990 | +end | |
| 991 | + | |
| 974 | 992 | --敌人死亡 |
| 975 | 993 | function Adv:enemyDead(roomId, blockId, escape) |
| 976 | 994 | local room = self.rooms[roomId] | ... | ... |
src/adv/AdvBattle.lua
| ... | ... | @@ -159,7 +159,11 @@ end |
| 159 | 159 | --战斗内角色回合逻辑 |
| 160 | 160 | function Battle:doPlayerTurn(atkPlayer, hurtPlayer) |
| 161 | 161 | atkPlayer:beforeTurn() |
| 162 | - hurtPlayer:hurt(atkPlayer:getHurtValue(), atkPlayer, {hurtType = 1}) | |
| 162 | + if #(atkPlayer.skillOrder) > 0 then | |
| 163 | + atkPlayer:releaseSpecialSkill() | |
| 164 | + else | |
| 165 | + hurtPlayer:hurt(atkPlayer:getHurtValue(), atkPlayer, {hurtType = 1}) | |
| 166 | + end | |
| 163 | 167 | atkPlayer:afterTurn() |
| 164 | 168 | atkPlayer:clearTurn() |
| 165 | 169 | end | ... | ... |
src/adv/AdvPlayer.lua
| ... | ... | @@ -14,6 +14,7 @@ function BaseObject:ctor(battle) |
| 14 | 14 | self.lock = nil |
| 15 | 15 | self.passives = {} --固有技能 |
| 16 | 16 | self.buffs = {} --buff |
| 17 | + self.skillOrder = {} --战斗内技能序列 | |
| 17 | 18 | self.isDead = false |
| 18 | 19 | self.mpMax = 0 |
| 19 | 20 | self.mp = 0 |
| ... | ... | @@ -329,6 +330,16 @@ function BaseObject:recover(value, releaser, params) |
| 329 | 330 | self.battle.adv:backHpChange(self.id, value) |
| 330 | 331 | end |
| 331 | 332 | |
| 333 | +function BaseObject:addSpecialSkill(skillId, skillLevel, target) | |
| 334 | + local skillData = {id = skillId, level = skillLevel, target = target} | |
| 335 | + table.insert(self.skillOrder, skillData) | |
| 336 | +end | |
| 337 | + | |
| 338 | +function BaseObject:releaseSpecialSkill() | |
| 339 | + local skillData = table.remove(self.skillOrder, 1) | |
| 340 | + self:releaseSkill(skillData.id, skillData.level, skillData.target) | |
| 341 | +end | |
| 342 | + | |
| 332 | 343 | function BaseObject:releaseSkill(skillId, skillLevel, target) |
| 333 | 344 | if self:hadBuff(Buff.CANT_SKILL) then return end -- 针对 怪物 |
| 334 | 345 | local skill = Skill.new(self, {id = skillId, level = skillLevel, target = target}) | ... | ... |