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}) | ... | ... |