Commit 42f2d1d368dd279752916367db67258110595636

Authored by suhongyang
1 parent a88a35fd

战斗内技能序列逻辑

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