From e996b82a8b92e1badb2f8624511d87b9423d5df8 Mon Sep 17 00:00:00 2001 From: zhouahaihai Date: Thu, 18 Apr 2019 10:52:33 +0800 Subject: [PATCH] 冒险增加防御属性 --- src/GlobalVar.lua | 1 + src/adv/Adv.lua | 6 ++++++ src/adv/AdvBattle.lua | 2 ++ src/adv/AdvBuff.lua | 5 +++++ src/adv/AdvPlayer.lua | 11 ++++++++--- 5 files changed, 22 insertions(+), 3 deletions(-) diff --git a/src/GlobalVar.lua b/src/GlobalVar.lua index 3e27da7..0f02f59 100644 --- a/src/GlobalVar.lua +++ b/src/GlobalVar.lua @@ -99,6 +99,7 @@ AdvBackEventType = { BlockChange = 9, -- 块改变 PowerChange = 10, --体力改变 Dead = 11, --怪死亡 + DefChange = 12, -- 防御变化 } AdvScoreType = { diff --git a/src/adv/Adv.lua b/src/adv/Adv.lua index 74d6837..0bddbe3 100644 --- a/src/adv/Adv.lua +++ b/src/adv/Adv.lua @@ -1010,6 +1010,12 @@ end function Adv:backAtkChange(enemyId, change) self:pushBackEvent(AdvBackEventType.AtkChange, {enemyId = enemyId, change = change}) end + +-- if is player enemyId is nil +function Adv:backDefChange(enemyId, change) + self:pushBackEvent(AdvBackEventType.DefChange, {enemyId = enemyId, change = change}) +end + -- if is player enemyId is nil function Adv:backBuff(enemyId, buffId, isDel) self:pushBackEvent(AdvBackEventType.Buff, {enemyId = enemyId, buffId = buffId, isDel = isDel}) diff --git a/src/adv/AdvBattle.lua b/src/adv/AdvBattle.lua index f559f35..6de10e8 100644 --- a/src/adv/AdvBattle.lua +++ b/src/adv/AdvBattle.lua @@ -39,6 +39,7 @@ function Battle:initPlayer() end player.hp = hp player.atk = tonumber(string.format("%0.0f", player.hp * 0.1)) --todo 系数是临时的 + player.def = 0 player.miss = 0 player.hit = 100 self.adv.advTeam.player = player @@ -64,6 +65,7 @@ function Battle:addEnemy(room, block) enemy.atk = enemyCsv.atk + enemyCsv.levelatk * self.adv.advInfo.level enemy.hit = enemyCsv.hit + enemyCsv.levelhit * self.adv.advInfo.level enemy.miss = enemyCsv.miss + enemyCsv.levelmiss * self.adv.advInfo.level + enemy.def = enemyCsv.def + enemyCsv.leveldef * self.adv.advInfo.level enemy.passives = {} for _, id in ipairs(enemyCsv.passive:toArray(true, "=")) do table.insert(enemy.passives, {id = id}) diff --git a/src/adv/AdvBuff.lua b/src/adv/AdvBuff.lua index 7d9dc85..9563192 100644 --- a/src/adv/AdvBuff.lua +++ b/src/adv/AdvBuff.lua @@ -18,6 +18,7 @@ Buff.OPEN_BLOCK = 14 -- 翻开格子(每回合) Buff.POWER_CHANGE = 15 -- 体力变化(每回合) Buff.HIT_CHANGE = 16 -- 命中变化(状态) Buff.MISS_CHANGE = 17 -- 闪避变化(状态) +Buff.DEF_CHANGE = 18 -- 防御变化(状态) --角色一些属性的变化 local function commonAttr(_Buff, attrName) @@ -106,6 +107,10 @@ local BuffFactory = { [Buff.MISS_CHANGE] = function(_Buff) commonAttr(_Buff, "miss") end, + + [Buff.DEF_CHANGE] = function(_Buff) + commonAttr(_Buff, "miss") + end, [Buff.BACK_HURT] = function(_Buff) _Buff._effectValue = function(self) diff --git a/src/adv/AdvPlayer.lua b/src/adv/AdvPlayer.lua index 667f57b..db09e4f 100644 --- a/src/adv/AdvPlayer.lua +++ b/src/adv/AdvPlayer.lua @@ -8,6 +8,7 @@ function BaseObject:ctor(battle) self.hpMax = 0 self.hp = 0 self.atk = 0 + self.def = 0 self.aType = 0 --攻击类型 self.lock = nil self.passives = {} --固有技能 @@ -22,10 +23,12 @@ function BaseObject:initData(data) self.atk = data.atk self.miss = data.miss self.hit = data.hit + self.def = data.def --基础值记录 self._atk = data._atk or self.atk self._miss = data._miss or self.miss self._hit = data._hit or self.hit + self._def = data._def or self.def end -- 角色初始化完以后才是 技能和被动技能 方便初始化 buff 的 释放对象 function BaseObject:initAfter(data) @@ -136,13 +139,15 @@ end function BaseObject:reSetAttr(field) local old = self[field] self[field] = self["_" .. field] --重置一下 - local fieldToBuff = {atk = Buff.IMMNUE_ATK, hit = Buff.HIT_CHANGE, miss = Buff.MISS_CHANGE} + local fieldToBuff = {atk = Buff.IMMNUE_ATK, hit = Buff.HIT_CHANGE, miss = Buff.MISS_CHANGE, def = Buff.DEF_CHANGE} local effect = self:getCommonBuffEffect(fieldToBuff[field]) self[field] = (self[field] + effect[0]) * (1 + effect[1]) local delta = self[field] - old if delta ~= 0 then if field == "atk" then self.battle.adv:backAtkChange(self.id, delta) + elseif field == "def" then + self.battle.adv:backDefChange(self.id, delta) end end end @@ -156,7 +161,7 @@ end --计算自己伤害减免后的值 function BaseObject:getInjuredValue(value) local injuredChange = self:getInjuredChange() - return math.max(0, (value + injuredChange[0]) * (1 + injuredChange[1])) + return math.max(0, (value + injuredChange[0]) * (1 + injuredChange[1]) - self.def) end --最终伤害 = [ 敌方攻击 * (1+伤害增加百分比-伤害减少百分比)*(1+受伤增加百分比-受伤减少百分比)+(伤害增加固定值-伤害增加固定值+受伤增加固定值-受伤增加固定值)]*(1+侍宠百分比)-侍宠固定值 @@ -393,7 +398,7 @@ function BaseObject:getDB() local db = {} db.hpMax = self.hpMax db.hp = self.hp - local baseAttr = {"atk", "miss", "hit"} + local baseAttr = {"atk", "miss", "hit", "def"} for _, field in pairs(baseAttr) do db[field] = self[field] db["_"..field] = self["_" .. field] -- libgit2 0.21.2