diff --git a/src/GlobalVar.lua b/src/GlobalVar.lua index 67065f3..80490e0 100644 --- a/src/GlobalVar.lua +++ b/src/GlobalVar.lua @@ -88,4 +88,5 @@ AdvBackEventType = { Next = 7, --进入下一层 End = 8, -- 结束 BlockChange = 9, -- 块改变 + PowerChange = 10, --体力改变 } \ No newline at end of file diff --git a/src/ProtocolCode.lua b/src/ProtocolCode.lua index e111142..271fb1b 100644 --- a/src/ProtocolCode.lua +++ b/src/ProtocolCode.lua @@ -27,6 +27,7 @@ actionCodes = { Adv_clickBlockRpc = 153, Adv_useItemRpc = 154, Adv_useSkillRpc = 155, + Adv_exitAdvRpc = 156, Hero_loadInfos = 201, Hero_updateProperty = 202, diff --git a/src/actions/AdvAction.lua b/src/actions/AdvAction.lua index 714a1f5..06d35f4 100644 --- a/src/actions/AdvAction.lua +++ b/src/actions/AdvAction.lua @@ -86,6 +86,16 @@ function _M.useSkillRpc(agent, data) end +--退出 +function _M.exitAdvRpc(agent, data) + local role = agent.role + -- local msg = MsgPack.unpack(data) + local adv = role:getAdvData() + local status = adv:exit() -- target {roomId = 1, blockId = 1} 选择的目标 + SendPacket(actionCodes.Adv_exitAdvRpc, MsgPack.pack({events = adv:popBackEvents()})) + return true +end + return _M \ No newline at end of file diff --git a/src/adv/Adv.lua b/src/adv/Adv.lua index f649b25..d951e97 100644 --- a/src/adv/Adv.lua +++ b/src/adv/Adv.lua @@ -98,7 +98,7 @@ local function randomAdvMap(role, chapterId, level, notNotify) local advInfo = role:getProperty("advInfo") local lastMapId = advInfo.mapId --非同一层不连续随出同一张类似的地图 local lastChapterId = advInfo.chapter - local power = advInfo.power or 0 --体力 + local power = advInfo.power or 100 --体力 local pool = {} for _, mapId in ipairs(raw_pool) do local temp = csvdb["mapCsv"][mapId] @@ -442,6 +442,11 @@ function Adv:over(success) self:backEnd(score) end +function Adv:exit() + self:over(-1) + self:saveDB() +end + function Adv:getMapInfo() if not next(self.advInfo) then return end return csvdb["mapCsv"][self.advInfo.mapId] @@ -935,6 +940,7 @@ function Adv:changePower(value, cType) self.advInfo.power = self.advInfo.power + self.advInfo.power * value end self.advInfo.power = math.floor(math.max(0, self.advInfo.power)) + self:pushBackEvent(AdvBackEventType.PowerChange) end function Adv:pushBackEvent(btype, params) @@ -978,6 +984,7 @@ function Adv:backAtk(enemyId, receiver) self:pushBackEvent(AdvBackEventType.Atk, {enemyId = enemyId, receiver = receiver}) end + function Adv:popBackEvents() local events = self.backEvents self.backEvents = {} diff --git a/src/adv/AdvBattle.lua b/src/adv/AdvBattle.lua index 0459a41..a01984e 100644 --- a/src/adv/AdvBattle.lua +++ b/src/adv/AdvBattle.lua @@ -132,6 +132,14 @@ function Battle:afterRound() table.remove(self.enemys, i) end end + + if self.adv.advInfo.power > 0 then + self.adv:changePower(-1) + else + self.player:hurt(self.player.hpMax / 10, nil, {hurtType = 4}) + end + + if self.player.isDead then self.adv:over(-1) end diff --git a/src/adv/AdvPlayer.lua b/src/adv/AdvPlayer.lua index 7ebf71b..a0ca639 100644 --- a/src/adv/AdvPlayer.lua +++ b/src/adv/AdvPlayer.lua @@ -160,7 +160,7 @@ function BaseObject:getInjuredValue(value) end --最终伤害 = [ 敌方攻击 * (1+伤害增加百分比-伤害减少百分比)*(1+受伤增加百分比-受伤减少百分比)+(伤害增加固定值-伤害增加固定值+受伤增加固定值-受伤增加固定值)]*(1+侍宠百分比)-侍宠固定值 --- params -- hurtType 1 普攻伤害 2 buff伤害 3 反弹伤害 +-- params -- hurtType 1 普攻伤害 2 buff伤害 3 反弹伤害 4 真实伤害 --进入这个方法之前计算好释放者加成的伤害 function BaseObject:hurt(value, releaser, params) params = params or {} @@ -180,8 +180,9 @@ function BaseObject:hurt(value, releaser, params) team:triggerPassive(Passive.TEAM_HURT, {trigger = releaser}) end end - - value = self:getInjuredValue(value) --减伤计算 + if not params.hurtType or params.hurtType ~= 4 then + value = self:getInjuredValue(value) --减伤计算 + end if value == 0 then return end -- 舍身和恃宠 -- libgit2 0.21.2