aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Entities
diff options
context:
space:
mode:
authorccrs <ccrs@users.noreply.github.com>2020-05-02 22:52:01 +0200
committerccrs <ccrs@users.noreply.github.com>2020-05-02 22:52:01 +0200
commitb8422e667b242ae4ab2bbdfda43656ed1fe485ae (patch)
tree9c11718e8b4269f6d80c8590726c580f4f15f312 /src/server/game/Entities
parent9b5375f858b7a9bac409cc0b17c56391f2787f5b (diff)
Core/Movement: 0e2342c followup
Diffstat (limited to 'src/server/game/Entities')
-rw-r--r--src/server/game/Entities/Creature/CreatureGroups.cpp3
-rw-r--r--src/server/game/Entities/Unit/Unit.h62
2 files changed, 33 insertions, 32 deletions
diff --git a/src/server/game/Entities/Creature/CreatureGroups.cpp b/src/server/game/Entities/Creature/CreatureGroups.cpp
index fd7ae9eb9d7..6d70541326a 100644
--- a/src/server/game/Entities/Creature/CreatureGroups.cpp
+++ b/src/server/game/Entities/Creature/CreatureGroups.cpp
@@ -290,8 +290,7 @@ void CreatureGroup::LeaderStartedMoving()
float angle = pair.second->FollowAngle + float(M_PI); // for some reason, someone thought it was a great idea to invert relativ angles...
float dist = pair.second->FollowDist;
- MovementGenerator const* moveGen = member->GetMotionMaster()->GetMovementGenerator([](MovementGenerator const* movement)->bool { return movement->GetMovementGeneratorType() == FORMATION_MOTION_TYPE; }, MOTION_SLOT_DEFAULT);
- if (!moveGen)
+ if (!member->HasUnitState(UNIT_STATE_FOLLOW_FORMATION))
member->GetMotionMaster()->MoveFormation(_leader, dist, angle, pair.second->LeaderWaypointIDs[0], pair.second->LeaderWaypointIDs[1]);
}
}
diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h
index afa948ed66d..5f1b8034bb8 100644
--- a/src/server/game/Entities/Unit/Unit.h
+++ b/src/server/game/Entities/Unit/Unit.h
@@ -209,44 +209,46 @@ enum DeathState
enum UnitState : uint32
{
- UNIT_STATE_DIED = 0x00000001, // player has fake death aura
- UNIT_STATE_MELEE_ATTACKING = 0x00000002, // player is melee attacking someone
- UNIT_STATE_CHARMED = 0x00000004, // having any kind of charm aura on self
- UNIT_STATE_STUNNED = 0x00000008,
- UNIT_STATE_ROAMING = 0x00000010,
- UNIT_STATE_CHASE = 0x00000020,
- UNIT_STATE_FOCUSING = 0x00000040,
- UNIT_STATE_FLEEING = 0x00000080,
- UNIT_STATE_IN_FLIGHT = 0x00000100, // player is in flight mode
- UNIT_STATE_FOLLOW = 0x00000200,
- UNIT_STATE_ROOT = 0x00000400,
- UNIT_STATE_CONFUSED = 0x00000800,
- UNIT_STATE_DISTRACTED = 0x00001000,
- UNIT_STATE_ISOLATED = 0x00002000, // area auras do not affect other players
- UNIT_STATE_ATTACK_PLAYER = 0x00004000,
- UNIT_STATE_CASTING = 0x00008000,
- UNIT_STATE_POSSESSED = 0x00010000, // being possessed by another unit
- UNIT_STATE_CHARGING = 0x00020000,
- UNIT_STATE_JUMPING = 0x00040000,
- UNIT_STATE_MOVE = 0x00100000,
- UNIT_STATE_ROTATING = 0x00200000,
- UNIT_STATE_EVADE = 0x00400000,
- UNIT_STATE_ROAMING_MOVE = 0x00800000,
- UNIT_STATE_CONFUSED_MOVE = 0x01000000,
- UNIT_STATE_FLEEING_MOVE = 0x02000000,
- UNIT_STATE_CHASE_MOVE = 0x04000000,
- UNIT_STATE_FOLLOW_MOVE = 0x08000000,
- UNIT_STATE_IGNORE_PATHFINDING = 0x10000000, // do not use pathfinding in any MovementGenerator
+ UNIT_STATE_DIED = 0x00000001, // player has fake death aura
+ UNIT_STATE_MELEE_ATTACKING = 0x00000002, // player is melee attacking someone
+ UNIT_STATE_CHARMED = 0x00000004, // having any kind of charm aura on self
+ UNIT_STATE_STUNNED = 0x00000008,
+ UNIT_STATE_ROAMING = 0x00000010,
+ UNIT_STATE_CHASE = 0x00000020,
+ UNIT_STATE_FOCUSING = 0x00000040,
+ UNIT_STATE_FLEEING = 0x00000080,
+ UNIT_STATE_IN_FLIGHT = 0x00000100, // player is in flight mode
+ UNIT_STATE_FOLLOW = 0x00000200,
+ UNIT_STATE_ROOT = 0x00000400,
+ UNIT_STATE_CONFUSED = 0x00000800,
+ UNIT_STATE_DISTRACTED = 0x00001000,
+ UNIT_STATE_ISOLATED = 0x00002000, // area auras do not affect other players
+ UNIT_STATE_ATTACK_PLAYER = 0x00004000,
+ UNIT_STATE_CASTING = 0x00008000,
+ UNIT_STATE_POSSESSED = 0x00010000, // being possessed by another unit
+ UNIT_STATE_CHARGING = 0x00020000,
+ UNIT_STATE_JUMPING = 0x00040000,
+ UNIT_STATE_FOLLOW_FORMATION = 0x00080000,
+ UNIT_STATE_MOVE = 0x00100000,
+ UNIT_STATE_ROTATING = 0x00200000,
+ UNIT_STATE_EVADE = 0x00400000,
+ UNIT_STATE_ROAMING_MOVE = 0x00800000,
+ UNIT_STATE_CONFUSED_MOVE = 0x01000000,
+ UNIT_STATE_FLEEING_MOVE = 0x02000000,
+ UNIT_STATE_CHASE_MOVE = 0x04000000,
+ UNIT_STATE_FOLLOW_MOVE = 0x08000000,
+ UNIT_STATE_IGNORE_PATHFINDING = 0x10000000, // do not use pathfinding in any MovementGenerator
+ UNIT_STATE_FOLLOW_FORMATION_MOVE = 0x20000000,
UNIT_STATE_ALL_STATE_SUPPORTED = UNIT_STATE_DIED | UNIT_STATE_MELEE_ATTACKING | UNIT_STATE_CHARMED | UNIT_STATE_STUNNED | UNIT_STATE_ROAMING | UNIT_STATE_CHASE
| UNIT_STATE_FOCUSING | UNIT_STATE_FLEEING | UNIT_STATE_IN_FLIGHT | UNIT_STATE_FOLLOW | UNIT_STATE_ROOT | UNIT_STATE_CONFUSED
| UNIT_STATE_DISTRACTED | UNIT_STATE_ISOLATED | UNIT_STATE_ATTACK_PLAYER | UNIT_STATE_CASTING
| UNIT_STATE_POSSESSED | UNIT_STATE_CHARGING | UNIT_STATE_JUMPING | UNIT_STATE_MOVE | UNIT_STATE_ROTATING
| UNIT_STATE_EVADE | UNIT_STATE_ROAMING_MOVE | UNIT_STATE_CONFUSED_MOVE | UNIT_STATE_FLEEING_MOVE
- | UNIT_STATE_CHASE_MOVE | UNIT_STATE_FOLLOW_MOVE | UNIT_STATE_IGNORE_PATHFINDING,
+ | UNIT_STATE_CHASE_MOVE | UNIT_STATE_FOLLOW_MOVE | UNIT_STATE_IGNORE_PATHFINDING | UNIT_STATE_FOLLOW_FORMATION_MOVE,
UNIT_STATE_UNATTACKABLE = UNIT_STATE_IN_FLIGHT,
- UNIT_STATE_MOVING = UNIT_STATE_ROAMING_MOVE | UNIT_STATE_CONFUSED_MOVE | UNIT_STATE_FLEEING_MOVE | UNIT_STATE_CHASE_MOVE | UNIT_STATE_FOLLOW_MOVE,
+ UNIT_STATE_MOVING = UNIT_STATE_ROAMING_MOVE | UNIT_STATE_CONFUSED_MOVE | UNIT_STATE_FLEEING_MOVE | UNIT_STATE_CHASE_MOVE | UNIT_STATE_FOLLOW_MOVE | UNIT_STATE_FOLLOW_FORMATION_MOVE,
UNIT_STATE_CONTROLLED = UNIT_STATE_CONFUSED | UNIT_STATE_STUNNED | UNIT_STATE_FLEEING,
UNIT_STATE_LOST_CONTROL = UNIT_STATE_CONTROLLED | UNIT_STATE_POSSESSED | UNIT_STATE_JUMPING | UNIT_STATE_CHARGING,
UNIT_STATE_CANNOT_AUTOATTACK = UNIT_STATE_CONTROLLED | UNIT_STATE_CHARGING | UNIT_STATE_CASTING,