From 2594ab3610f479d17091541819194d541d89961e Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Tue, 11 Apr 2023 15:56:37 +0800 Subject: [PATCH] 1 --- server/gameserver/buff/sprint.cc | 27 ++++++++++++++++----------- server/gameserver/buff/sprint.h | 1 + server/gameserver/creature.cc | 13 +++++++++++-- server/gameserver/roomobstacle.cc | 4 ++-- 4 files changed, 30 insertions(+), 15 deletions(-) diff --git a/server/gameserver/buff/sprint.cc b/server/gameserver/buff/sprint.cc index e3d525be..7c493bff 100644 --- a/server/gameserver/buff/sprint.cc +++ b/server/gameserver/buff/sprint.cc @@ -100,17 +100,7 @@ void SprintBuff::Check(Position& pre_pos, Position& src_pos, std::mapGetPos()) < 2) { ++stop_times_; if (stop_times_ > 3) { - owner->room->xtimer.SetTimeoutEx - ( - 1, - [this] (int event, const a8::Args* args) - { - if (a8::TIMER_EXEC_EVENT == event) { - owner->RemoveBuffByUniId(buff_uniid); - owner->TryAddBuff(owner, meta->_int_buff_param1, skill_meta); - } - }, - &xtimer_attacher); + SprintEnd(); } return; } @@ -175,3 +165,18 @@ void SprintBuff::OnEnemyHit(Creature* enemy) enemy->TryAddBuff(owner, buff_id, skill_meta); } } + +void SprintBuff::SprintEnd() +{ + owner->room->xtimer.SetTimeoutEx + ( + 1, + [this] (int event, const a8::Args* args) + { + if (a8::TIMER_EXEC_EVENT == event) { + owner->RemoveBuffByUniId(buff_uniid); + owner->TryAddBuff(owner, meta->_int_buff_param1, skill_meta); + } + }, + &xtimer_attacher); +} diff --git a/server/gameserver/buff/sprint.h b/server/gameserver/buff/sprint.h index 45a11eab..d53147b0 100644 --- a/server/gameserver/buff/sprint.h +++ b/server/gameserver/buff/sprint.h @@ -8,6 +8,7 @@ class SprintBuff : public Buff virtual void Activate() override; virtual void Deactivate() override; + void SprintEnd(); private: void SprintMove(); diff --git a/server/gameserver/creature.cc b/server/gameserver/creature.cc index 5bce0a08..8b7af869 100644 --- a/server/gameserver/creature.cc +++ b/server/gameserver/creature.cc @@ -41,6 +41,8 @@ #include "mt/MapThing.h" #include "mt/Text.h" +#include "buff/sprint.h" + #include "f8/utils.h" #include "buff/bufffactory.h" @@ -2299,8 +2301,15 @@ void Creature::UpdateMove() if (!GetMovement()->IsFindPath()) { GetMovement()->CalcTargetPos(mt::Param::s().move_step_len); if (!GetMovement()->UpdatePosition()) { - if (IsPlayer() && !HasBuffEffect(kBET_Sprint)) { - ShortFindPath(); + if (IsPlayer()) { + if (HasBuffEffect(kBET_Sprint)) { + SprintBuff* buff = (SprintBuff*)GetBuffByEffectId(kBET_Sprint); + if (buff) { + buff->SprintEnd(); + } + } else { + ShortFindPath(); + } } } } diff --git a/server/gameserver/roomobstacle.cc b/server/gameserver/roomobstacle.cc index 50ae15d2..43665f53 100644 --- a/server/gameserver/roomobstacle.cc +++ b/server/gameserver/roomobstacle.cc @@ -682,8 +682,8 @@ void RoomObstacle::InstallPreExplostionSummonTimer() if (a8::TIMER_EXEC_EVENT == event) { glm::vec3 pos = glm::vec3( GetPos().GetX() + bomb_born_offset.GetX(), - 0.0f, - GetPos().GetY() + bomb_born_offset.GetY() + GetPos().GetY(), + GetPos().GetZ() + bomb_born_offset.GetZ() ); if (room->CanAddObstacle(pos, obstacle_id)) { RoomObstacle* p = room->CreateObstacle