From d27ad5e0ce091b36e92ad8b84581a914de01252e Mon Sep 17 00:00:00 2001 From: suhongyang <1609423485@qq.com> Date: Wed, 10 Jul 2019 14:20:11 +0800 Subject: [PATCH] 使用营养技 --- src/ProtocolCode.lua | 2 +- src/actions/AdvAction.lua | 12 ++++++++---- src/adv/Adv.lua | 39 +++++++++++++++++---------------------- src/adv/AdvPlayer.lua | 9 ++++++--- src/adv/AdvSkill.lua | 3 +-- 5 files changed, 33 insertions(+), 32 deletions(-) diff --git a/src/ProtocolCode.lua b/src/ProtocolCode.lua index 82a3b8d..683d86b 100644 --- a/src/ProtocolCode.lua +++ b/src/ProtocolCode.lua @@ -30,7 +30,7 @@ actionCodes = { Adv_roleFormatRpc = 152, Adv_clickBlockRpc = 153, Adv_useItemRpc = 154, - Adv_useSkillRpc = 155, + Adv_usePotionRpc = 155, Adv_exitAdvRpc = 156, Adv_nextTurnRpc = 157, Adv_specialSkillRpc = 158, diff --git a/src/actions/AdvAction.lua b/src/actions/AdvAction.lua index 89f51e6..3e0ae68 100644 --- a/src/actions/AdvAction.lua +++ b/src/actions/AdvAction.lua @@ -76,13 +76,17 @@ function _M.useItemRpc(agent, data) end --使用营养技能 -function _M.useSkillRpc(agent, data) +function _M.usePotionRpc(agent, data) local role = agent.role local msg = MsgPack.unpack(data) + local dishLevel = role.dinerData:getProperty("dishTree"):getv(msg.potionId, 0) + if dishLevel == 0 then + return + end local adv = role:getAdvData() - local status = adv:useSkill(msg.skillId, msg.target) -- target {roomId = 1, blockId = 1} 选择的目标 + local status = adv:usePotion(msg.potionId, dishLevel, msg.target) -- target {roomId = 1, blockId = 1} 选择的目标 if not status then return end - SendPacket(actionCodes.Adv_useSkillRpc, MsgPack.pack({events = adv:popBackEvents()})) + SendPacket(actionCodes.Adv_usePotionRpc, MsgPack.pack({events = adv:popBackEvents()})) return true end @@ -93,7 +97,7 @@ function _M.specialSkillRpc(agent, data) local adv = role:getAdvData() local status = adv:useSpecialSkill(msg.skillId) if not status then return end - SendPacket(actionCodes.Adv_useSkillRpc, MsgPack.pack({events = {}})) + SendPacket(actionCodes.Adv_specialSkillRpc, MsgPack.pack({events = {}})) return true end diff --git a/src/adv/Adv.lua b/src/adv/Adv.lua index b2043b4..4c6afa5 100644 --- a/src/adv/Adv.lua +++ b/src/adv/Adv.lua @@ -929,7 +929,7 @@ function Adv:useItem(itemId, count, target) end --生效 if itemData.type == 1 or itemData.type == 0 then --技能 - self.battle.player:releaseSkill(itemData.effect, 1, target) + self.battle.player:releaseSkill(itemData.effect, target) elseif itemData.type == 2 then --掉落 local item = csvdb["event_dropCsv"][itemData.effect]["range"]:randWeight(true) self:backReward(self:award({[item[1]] = item[2]}, {})) @@ -942,29 +942,24 @@ function Adv:useItem(itemId, count, target) return true end ---使用技能 -- TODO 改表了,估计要重写 -function Adv:useSkill(skillId, target) - local skillLevel = nil - for slot, heroId in pairs(self.advTeam.heros) do - if self.owner.heros[heroId] then - if csvdb["unitCsv"][self.owner.heros[heroId]:getSkinId()]["adv"] == skillId then - skillLevel = self.owner.heros[heroId]:getSkillLevel(4) - break - end - end - end - if not skillLevel then return end - local skillData = csvdb["adv_skillCsv"][skillId] - if self.advInfo.power < skillData.cost then return end - self.advInfo.power = self.advInfo.power - skillData.cost - if skillData.target:toArray(true, "=")[1] == 0 then - local enemy = self.battle:getEnemy(target.roomId, target.blockId) - if not enemy then return end - self.battle.player:releaseSkill(skillId, skillLevel, enemy) +--使用技能 +function Adv:usePotion(potionId, potionLevel, target) + -- cost + local potionData = csvdb["adv_potionCsv"][potionId][potionLevel] + -- if self.advInfo.power < skillData.cost then return end + -- self.advInfo.power = self.advInfo.power - skillData.cost + -- target + local enemy = self.battle:getEnemy(target.roomId, target.blockId) + if not enemy then return end + --生效 + if potionData.type == 1 or potionData.type == 0 then --技能 + self.battle.player:releaseSkill(potionData.effect, enemy) + elseif potionData.type == 2 then --掉落 + local item = csvdb["event_dropCsv"][potionData.effect]["range"]:randWeight(true) + self:backReward(self:award({[item[1]] = item[2]}, {})) else - self.battle.player:releaseSkill(skillId, skillLevel) + return end - self:afterRound() self:saveDB() return true diff --git a/src/adv/AdvPlayer.lua b/src/adv/AdvPlayer.lua index d00421c..65aec9c 100644 --- a/src/adv/AdvPlayer.lua +++ b/src/adv/AdvPlayer.lua @@ -337,12 +337,15 @@ end function BaseObject:releaseSpecialSkill() local skillData = table.remove(self.skillOrder, 1) - self:releaseSkill(skillData.id, skillData.level, skillData.target) + local skillSet = csvdb["adv_skill_specialCsv"][skillData.id][skillData.level] + for _, skillId in ipairs(skillSet.skillId:toArray(true, "=")) do + self:releaseSkill(skillId, skillData.target) + end end -function BaseObject:releaseSkill(skillId, skillLevel, target) +function BaseObject:releaseSkill(skillId, target) if self:hadBuff(Buff.CANT_SKILL) then return end -- 针对 怪物 - local skill = Skill.new(self, {id = skillId, level = skillLevel, target = target}) + local skill = Skill.new(self, {id = skillId, target = target}) --返回客户端 for _, target in ipairs(skill:getTargets()) do self.battle.adv:backSkill(self.id, skillId, target.id) diff --git a/src/adv/AdvSkill.lua b/src/adv/AdvSkill.lua index 7e194e3..f8c04f6 100644 --- a/src/adv/AdvSkill.lua +++ b/src/adv/AdvSkill.lua @@ -3,10 +3,9 @@ local Skill = class("Skill") function Skill:ctor(owner, data) self.owner = owner self.id = data.id - self.level = data.level or 1 self.defaultTarget = data.target - self.skillData = csvdb["adv_skillCsv"][self.id][self.level] + self.skillData = csvdb["adv_skillCsv"][self.id] self.targets = self:initTargets() end -- libgit2 0.21.2