From 234a9d013f10c97d785163eb79af8403c956f537 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Wed, 8 Sep 2021 16:43:34 +0800 Subject: [PATCH] 1 --- server/gameserver/buff.cc | 7 +++++++ server/gameserver/creature.cc | 13 ++++++++++++- server/gameserver/creature.h | 6 ++++++ server/gameserver/player.cc | 8 +++++--- 4 files changed, 30 insertions(+), 4 deletions(-) diff --git a/server/gameserver/buff.cc b/server/gameserver/buff.cc index 42a2984..ac87785 100644 --- a/server/gameserver/buff.cc +++ b/server/gameserver/buff.cc @@ -340,6 +340,13 @@ void Buff::RecoverHoldWeapons() void Buff::ProcSprint() { if (caster_.Get()->IsPlayer()) { + owner->IncDisableMoveDirTimes(); + { + int old_times = owner->GetDisableMoveDirTimes(); + owner->SetDisableMoveDirTimes(0); + owner->SetMoveDir(owner->context_dir); + owner->SetDisableMoveDirTimes(old_times); + } Player* hum = (Player*)caster_.Get(); std::set* hited_objects = new std::set; owner->room->xtimer.AddRepeatTimerAndAttach diff --git a/server/gameserver/creature.cc b/server/gameserver/creature.cc index a8d435b..b173b6a 100644 --- a/server/gameserver/creature.cc +++ b/server/gameserver/creature.cc @@ -615,6 +615,17 @@ void Creature::RecalcBuffAttr() void Creature::OnBuffRemove(Buff& buff) { + switch (buff.meta->i->buff_effect()) { + case kBET_Sprint: + { + DecDisableMoveDirTimes(); + } + break; + default: + { + } + break; + } if (!buff.meta->i->only_server()) { room->frame_event.RemoveBuff(GetWeakPtrRef(), buff.meta->i->buff_id()); } @@ -1353,7 +1364,7 @@ void Creature::Initialize() void Creature::SetMoveDir(const a8::Vec2& move_dir) { - if (!GetBuffByEffectId(kBET_Sprint)) { + if (GetDisableMoveDirTimes() <= 0) { MoveableEntity::SetMoveDir(move_dir); } } diff --git a/server/gameserver/creature.h b/server/gameserver/creature.h index 2a7c4cc..5dd97d8 100644 --- a/server/gameserver/creature.h +++ b/server/gameserver/creature.h @@ -242,6 +242,10 @@ class Creature : public MoveableEntity void FollowToTarget(); int GetFollowTimes() { return follow_times_; }; void IncFollowTimes() { ++follow_times_; }; + void IncDisableMoveDirTimes() { ++disable_move_dir_times_ ; }; + void DecDisableMoveDirTimes() { ++disable_move_dir_times_ ; }; + int GetDisableMoveDirTimes() { return disable_move_dir_times_ ; }; + void SetDisableMoveDirTimes(int times) { disable_move_dir_times_ = times; }; protected: virtual void OnBuffRemove(Buff& buff); @@ -305,6 +309,8 @@ private: xtimer_list* auto_switch_weapon_timer_ = nullptr; int follow_times_ = 0; + int disable_move_dir_times_ = 0; + a8::Vec2 skill_dir_; float skill_param1 = 0; size_t curr_skill_phase = 0; diff --git a/server/gameserver/player.cc b/server/gameserver/player.cc index 800c849..ece8e4b 100644 --- a/server/gameserver/player.cc +++ b/server/gameserver/player.cc @@ -660,9 +660,11 @@ void Player::_CMMove(f8::MsgHdr& hdr, const cs::CMMove& msg) TypeConvert::FromPb(new_move_dir, &msg.move_dir()); if (!HasBuffEffect(kBET_Vertigo)) { if (!(HasBuffEffect(kBET_Jump) && follow_target.Get())) { - new_move_dir.Normalize(); - SetMoveDir(new_move_dir); - moving = true; + if (GetDisableMoveDirTimes() <= 0) { + new_move_dir.Normalize(); + SetMoveDir(new_move_dir); + moving = true; + } } } }