aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSorikoff <46191832+Sorikoff@users.noreply.github.com>2019-02-25 08:36:36 +0000
committerGiacomo Pozzoni <giacomopoz@gmail.com>2019-02-25 09:36:36 +0100
commitc2f2db08aa4f729fbd5b21528a215f6df0c131b6 (patch)
tree45c4d1d79271204fc73ad39e713e145aa8ff9a70 /src
parent47e1816bf78ea3050150fa3d4b0a93d8b9b10807 (diff)
Allow walk when chasing (#23069)
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Movement/MotionMaster.cpp4
-rw-r--r--src/server/game/Movement/MotionMaster.h2
-rw-r--r--src/server/game/Movement/MovementGenerators/ChaseMovementGenerator.cpp8
-rw-r--r--src/server/game/Movement/MovementGenerators/ChaseMovementGenerator.h3
-rw-r--r--src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp3
-rw-r--r--src/server/scripts/Outland/TempestKeep/Eye/boss_kaelthas.cpp9
6 files changed, 20 insertions, 9 deletions
diff --git a/src/server/game/Movement/MotionMaster.cpp b/src/server/game/Movement/MotionMaster.cpp
index 50ab36fba84..7fd49a1d359 100644
--- a/src/server/game/Movement/MotionMaster.cpp
+++ b/src/server/game/Movement/MotionMaster.cpp
@@ -585,14 +585,14 @@ void MotionMaster::MoveFollow(Unit* target, float dist, ChaseAngle angle, Moveme
Add(new FollowMovementGenerator(target, dist, angle), slot);
}
-void MotionMaster::MoveChase(Unit* target, Optional<ChaseRange> dist, Optional<ChaseAngle> angle)
+void MotionMaster::MoveChase(Unit* target, Optional<ChaseRange> dist, Optional<ChaseAngle> angle, bool walk)
{
// Ignore movement request if target not exist
if (!target || target == _owner)
return;
TC_LOG_DEBUG("movement.motionmaster", "MotionMaster::MoveChase: '%s', starts chasing '%s'", _owner->GetGUID().ToString().c_str(), target->GetGUID().ToString().c_str());
- Add(new ChaseMovementGenerator(target, dist, angle));
+ Add(new ChaseMovementGenerator(target, dist, angle, walk));
}
void MotionMaster::MoveConfused()
diff --git a/src/server/game/Movement/MotionMaster.h b/src/server/game/Movement/MotionMaster.h
index 5f89f2304da..b3a61d833e8 100644
--- a/src/server/game/Movement/MotionMaster.h
+++ b/src/server/game/Movement/MotionMaster.h
@@ -140,7 +140,7 @@ class TC_GAME_API MotionMaster
void MoveTargetedHome();
void MoveRandom(float spawndist = 0.0f);
void MoveFollow(Unit* target, float dist, ChaseAngle angle, MovementSlot slot = MOTION_SLOT_ACTIVE);
- void MoveChase(Unit* target, Optional<ChaseRange> dist = {}, Optional<ChaseAngle> angle = {});
+ void MoveChase(Unit* target, Optional<ChaseRange> dist = {}, Optional<ChaseAngle> angle = {}, bool walk = false);
void MoveChase(Unit* target, float dist, float angle) { MoveChase(target, ChaseRange(dist), ChaseAngle(angle)); }
void MoveChase(Unit* target, float dist) { MoveChase(target, ChaseRange(dist)); }
void MoveConfused();
diff --git a/src/server/game/Movement/MovementGenerators/ChaseMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/ChaseMovementGenerator.cpp
index 60584653630..a723b5dc3fe 100644
--- a/src/server/game/Movement/MovementGenerators/ChaseMovementGenerator.cpp
+++ b/src/server/game/Movement/MovementGenerators/ChaseMovementGenerator.cpp
@@ -56,7 +56,9 @@ static void DoMovementInform(Unit* owner, Unit* target)
AI->MovementInform(CHASE_MOTION_TYPE, target->GetGUID().GetCounter());
}
-ChaseMovementGenerator::ChaseMovementGenerator(Unit* target, Optional<ChaseRange> range, Optional<ChaseAngle> angle) : AbstractFollower(ASSERT_NOTNULL(target)), _range(range), _angle(angle)
+ChaseMovementGenerator::ChaseMovementGenerator(Unit *target, Optional<ChaseRange> range, Optional<ChaseAngle> angle,
+ bool walk) : AbstractFollower(ASSERT_NOTNULL(target)), _range(range),
+ _angle(angle), _walk(walk)
{
Mode = MOTION_MODE_DEFAULT;
Priority = MOTION_PRIORITY_NORMAL;
@@ -70,7 +72,7 @@ void ChaseMovementGenerator::Initialize(Unit* owner)
RemoveFlag(MOVEMENTGENERATOR_FLAG_INITIALIZATION_PENDING | MOVEMENTGENERATOR_FLAG_DEACTIVATED);
AddFlag(MOVEMENTGENERATOR_FLAG_INITIALIZED);
- owner->SetWalk(false);
+ owner->SetWalk(_walk);
_path = nullptr;
_lastTargetPosition.reset();
}
@@ -203,7 +205,7 @@ bool ChaseMovementGenerator::Update(Unit* owner, uint32 diff)
Movement::MoveSplineInit init(owner);
init.MovebyPath(_path->GetPath());
- init.SetWalk(false);
+ init.SetWalk(_walk);
init.SetFacing(target);
init.Launch();
diff --git a/src/server/game/Movement/MovementGenerators/ChaseMovementGenerator.h b/src/server/game/Movement/MovementGenerators/ChaseMovementGenerator.h
index f4fc1d4a1e5..e390465b441 100644
--- a/src/server/game/Movement/MovementGenerators/ChaseMovementGenerator.h
+++ b/src/server/game/Movement/MovementGenerators/ChaseMovementGenerator.h
@@ -30,7 +30,7 @@ class Unit;
class ChaseMovementGenerator : public MovementGenerator, public AbstractFollower
{
public:
- explicit ChaseMovementGenerator(Unit* target, Optional<ChaseRange> range = {}, Optional<ChaseAngle> angle = {});
+ explicit ChaseMovementGenerator(Unit* target, Optional<ChaseRange> range = {}, Optional<ChaseAngle> angle = {}, bool walk = false);
~ChaseMovementGenerator();
void Initialize(Unit*) override;
@@ -47,6 +47,7 @@ class ChaseMovementGenerator : public MovementGenerator, public AbstractFollower
Optional<ChaseRange> const _range;
Optional<ChaseAngle> const _angle;
+ bool _walk;
std::unique_ptr<PathGenerator> _path;
Optional<Position> _lastTargetPosition;
diff --git a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp
index fe2204b0354..c312bca4268 100644
--- a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp
+++ b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp
@@ -670,9 +670,8 @@ struct npc_dark_rider_of_acherus : public ScriptedAI
{
case EVENT_START_MOVING:
me->SetTarget(_horseGUID);
- me->SetWalk(true);
if (Creature* horse = ObjectAccessor::GetCreature(*me, _horseGUID))
- me->GetMotionMaster()->MoveChase(horse);
+ me->GetMotionMaster()->MoveChase(horse, {}, {}, true);
_events.ScheduleEvent(EVENT_DESPAWN_HORSE, 5s);
break;
case EVENT_DESPAWN_HORSE:
diff --git a/src/server/scripts/Outland/TempestKeep/Eye/boss_kaelthas.cpp b/src/server/scripts/Outland/TempestKeep/Eye/boss_kaelthas.cpp
index 0e606ec8830..aca35a0c537 100644
--- a/src/server/scripts/Outland/TempestKeep/Eye/boss_kaelthas.cpp
+++ b/src/server/scripts/Outland/TempestKeep/Eye/boss_kaelthas.cpp
@@ -908,6 +908,15 @@ class boss_thaladred_the_darkener : public CreatureScript
advisorbase_ai::Reset();
}
+ void AttackStart(Unit* who) override
+ {
+ if (!who || _inFakeDeath || me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE))
+ return;
+
+ if (me->Attack(who, true))
+ me->GetMotionMaster()->MoveChase(who, {}, {}, true);
+ }
+
void JustEngagedWith(Unit* who) override
{
Talk(SAY_THALADRED_AGGRO);