Commit 42f2d1d368dd279752916367db67258110595636

Authored by suhongyang
1 parent a88a35fd

战斗内技能序列逻辑

src/ProtocolCode.lua
... ... @@ -31,6 +31,7 @@ actionCodes = {
31 31 Adv_useSkillRpc = 155,
32 32 Adv_exitAdvRpc = 156,
33 33 Adv_nextTurnRpc = 157,
  34 + Adv_battleSkillRpc = 158,
34 35  
35 36 Hero_loadInfos = 201,
36 37 Hero_updateProperty = 202,
... ...
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})
... ...