From cb4625a466e418697b7a9a6daaa186f54a98762d Mon Sep 17 00:00:00 2001 From: UnKownOwO <80520429@qq.com> Date: Thu, 1 Dec 2022 23:00:47 +0800 Subject: [PATCH] =?UTF-8?q?=E8=80=90=E5=8A=9B=E6=A8=A1=E5=9D=97=E7=BC=93?= =?UTF-8?q?=E6=85=A2=E6=94=80=E7=88=AC=E5=AE=8C=E5=96=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gs/constant/stamina_cost.go | 4 ++-- gs/game/user_stamina.go | 35 +++++++++++++++++++++++++++++++---- 2 files changed, 33 insertions(+), 6 deletions(-) diff --git a/gs/constant/stamina_cost.go b/gs/constant/stamina_cost.go index e0a0ba51..827477a8 100644 --- a/gs/constant/stamina_cost.go +++ b/gs/constant/stamina_cost.go @@ -4,7 +4,7 @@ var StaminaCostConst *StaminaCost type StaminaCost struct { // 消耗耐力 - CLIMBING int32 + CLIMBING_BASE int32 CLIMB_START int32 CLIMB_JUMP int32 DASH int32 @@ -28,7 +28,7 @@ type StaminaCost struct { func InitStaminaCostConst() { StaminaCostConst = new(StaminaCost) - StaminaCostConst.CLIMBING = -110 + StaminaCostConst.CLIMBING_BASE = -100 StaminaCostConst.CLIMB_START = -500 StaminaCostConst.CLIMB_JUMP = -2500 StaminaCostConst.DASH = -360 diff --git a/gs/game/user_stamina.go b/gs/game/user_stamina.go index 39b3ad3a..2fef5078 100644 --- a/gs/game/user_stamina.go +++ b/gs/game/user_stamina.go @@ -16,7 +16,29 @@ func (g *GameManager) SceneAvatarStaminaStepReq(player *model.Player, payloadMsg switch player.StaminaInfo.State { case proto.MotionState_MOTION_STATE_CLIMB: // 缓慢攀爬 - g.UpdateStamina(player, constant.StaminaCostConst.CLIMBING) + + // 缓慢攀爬的耐力将根据角度不同而改变 + // rotX ∈ [0,180) x = rotX + // rotX ∈ [180,360) x = rotX - 360.0 + // x >= 0 y = -x + 10 + // x < 0 y = -2x + 10 + // rotX req.Rot.X + // y 消耗的耐力修正值 + // base(-100) + y 消耗的耐力 + var x int32 + var costRevise int32 // 攀爬耐力修正值 + if req.Rot.X >= 0 && req.Rot.X < 180 { + x = int32(req.Rot.X) + } else if req.Rot.X >= 180 && req.Rot.X < 360 { + x = int32(req.Rot.X - 360.0) + } + if x >= 0 { + costRevise = -x + 10 + } else { + costRevise = -(x * 2) + 10 + } + //logger.LOG.Debug("stamina climbing, rotX: %v, costRevise: %v, cost: %v", req.Rot.X, costRevise, constant.StaminaCostConst.CLIMBING_BASE+costRevise) + g.UpdateStamina(player, constant.StaminaCostConst.CLIMBING_BASE+costRevise) case proto.MotionState_MOTION_STATE_SWIM_MOVE: // 缓慢游泳 g.UpdateStamina(player, constant.StaminaCostConst.SWIMMING) @@ -24,10 +46,15 @@ func (g *GameManager) SceneAvatarStaminaStepReq(player *model.Player, payloadMsg // PacketSceneAvatarStaminaStepRsp sceneAvatarStaminaStepRsp := new(proto.SceneAvatarStaminaStepRsp) - sceneAvatarStaminaStepRsp.Retcode = int32(proto.Retcode_RETCODE_RET_SUCC) - sceneAvatarStaminaStepRsp.UseClientRot = req.UseClientRot + // 角度超过范围返回值为错误 + if (req.Rot.X >= 0 && req.Rot.X < 90) || (req.Rot.X > 270 && req.Rot.X < 360) { + sceneAvatarStaminaStepRsp.Retcode = int32(proto.Retcode_RETCODE_RET_SUCC) + } else { + sceneAvatarStaminaStepRsp.Retcode = int32(proto.Retcode_RETCODE_RET_FAIL) + } + sceneAvatarStaminaStepRsp.UseClientRot = true sceneAvatarStaminaStepRsp.Rot = req.Rot - g.SendMsg(cmd.GetShopRsp, player.PlayerID, player.ClientSeq, sceneAvatarStaminaStepRsp) + g.SendMsg(cmd.SceneAvatarStaminaStepRsp, player.PlayerID, player.ClientSeq, sceneAvatarStaminaStepRsp) } // HandleStamina 处理即时耐力消耗