Commit 42f2d1d368dd279752916367db67258110595636
1 parent
a88a35fd
战斗内技能序列逻辑
Showing
5 changed files
with
48 additions
and
4 deletions
Show diff stats
src/ProtocolCode.lua
@@ -31,6 +31,7 @@ actionCodes = { | @@ -31,6 +31,7 @@ actionCodes = { | ||
31 | Adv_useSkillRpc = 155, | 31 | Adv_useSkillRpc = 155, |
32 | Adv_exitAdvRpc = 156, | 32 | Adv_exitAdvRpc = 156, |
33 | Adv_nextTurnRpc = 157, | 33 | Adv_nextTurnRpc = 157, |
34 | + Adv_battleSkillRpc = 158, | ||
34 | 35 | ||
35 | Hero_loadInfos = 201, | 36 | Hero_loadInfos = 201, |
36 | Hero_updateProperty = 202, | 37 | Hero_updateProperty = 202, |
src/actions/AdvAction.lua
@@ -75,7 +75,7 @@ function _M.useItemRpc(agent, data) | @@ -75,7 +75,7 @@ function _M.useItemRpc(agent, data) | ||
75 | return true | 75 | return true |
76 | end | 76 | end |
77 | 77 | ||
78 | ---使用技能 | 78 | +--使用营养技能 |
79 | function _M.useSkillRpc(agent, data) | 79 | function _M.useSkillRpc(agent, data) |
80 | local role = agent.role | 80 | local role = agent.role |
81 | local msg = MsgPack.unpack(data) | 81 | local msg = MsgPack.unpack(data) |
@@ -86,6 +86,16 @@ function _M.useSkillRpc(agent, data) | @@ -86,6 +86,16 @@ function _M.useSkillRpc(agent, data) | ||
86 | return true | 86 | return true |
87 | end | 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 | function _M.exitAdvRpc(agent, data) | 101 | function _M.exitAdvRpc(agent, data) |
src/adv/Adv.lua
@@ -942,10 +942,9 @@ function Adv:useItem(itemId, count, target) | @@ -942,10 +942,9 @@ function Adv:useItem(itemId, count, target) | ||
942 | return true | 942 | return true |
943 | end | 943 | end |
944 | 944 | ||
945 | ---使用技能 | 945 | +--使用技能 -- TODO 改表了,估计要重写 |
946 | function Adv:useSkill(skillId, target) | 946 | function Adv:useSkill(skillId, target) |
947 | local skillLevel = nil | 947 | local skillLevel = nil |
948 | - if skillId > 1000 then return end | ||
949 | for slot, heroId in pairs(self.advTeam.heros) do | 948 | for slot, heroId in pairs(self.advTeam.heros) do |
950 | if self.owner.heros[heroId] then | 949 | if self.owner.heros[heroId] then |
951 | if csvdb["unitCsv"][self.owner.heros[heroId]:getSkinId()]["adv"] == skillId then | 950 | if csvdb["unitCsv"][self.owner.heros[heroId]:getSkinId()]["adv"] == skillId then |
@@ -971,6 +970,25 @@ function Adv:useSkill(skillId, target) | @@ -971,6 +970,25 @@ function Adv:useSkill(skillId, target) | ||
971 | return true | 970 | return true |
972 | end | 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 | function Adv:enemyDead(roomId, blockId, escape) | 993 | function Adv:enemyDead(roomId, blockId, escape) |
976 | local room = self.rooms[roomId] | 994 | local room = self.rooms[roomId] |
src/adv/AdvBattle.lua
@@ -159,7 +159,11 @@ end | @@ -159,7 +159,11 @@ end | ||
159 | --战斗内角色回合逻辑 | 159 | --战斗内角色回合逻辑 |
160 | function Battle:doPlayerTurn(atkPlayer, hurtPlayer) | 160 | function Battle:doPlayerTurn(atkPlayer, hurtPlayer) |
161 | atkPlayer:beforeTurn() | 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 | atkPlayer:afterTurn() | 167 | atkPlayer:afterTurn() |
164 | atkPlayer:clearTurn() | 168 | atkPlayer:clearTurn() |
165 | end | 169 | end |
src/adv/AdvPlayer.lua
@@ -14,6 +14,7 @@ function BaseObject:ctor(battle) | @@ -14,6 +14,7 @@ function BaseObject:ctor(battle) | ||
14 | self.lock = nil | 14 | self.lock = nil |
15 | self.passives = {} --固有技能 | 15 | self.passives = {} --固有技能 |
16 | self.buffs = {} --buff | 16 | self.buffs = {} --buff |
17 | + self.skillOrder = {} --战斗内技能序列 | ||
17 | self.isDead = false | 18 | self.isDead = false |
18 | self.mpMax = 0 | 19 | self.mpMax = 0 |
19 | self.mp = 0 | 20 | self.mp = 0 |
@@ -329,6 +330,16 @@ function BaseObject:recover(value, releaser, params) | @@ -329,6 +330,16 @@ function BaseObject:recover(value, releaser, params) | ||
329 | self.battle.adv:backHpChange(self.id, value) | 330 | self.battle.adv:backHpChange(self.id, value) |
330 | end | 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 | function BaseObject:releaseSkill(skillId, skillLevel, target) | 343 | function BaseObject:releaseSkill(skillId, skillLevel, target) |
333 | if self:hadBuff(Buff.CANT_SKILL) then return end -- 针对 怪物 | 344 | if self:hadBuff(Buff.CANT_SKILL) then return end -- 针对 怪物 |
334 | local skill = Skill.new(self, {id = skillId, level = skillLevel, target = target}) | 345 | local skill = Skill.new(self, {id = skillId, level = skillLevel, target = target}) |