aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/scripts/Commands/cs_debug.cpp34
1 files changed, 32 insertions, 2 deletions
diff --git a/src/server/scripts/Commands/cs_debug.cpp b/src/server/scripts/Commands/cs_debug.cpp
index c01a8e95559..bb2167abbe7 100644
--- a/src/server/scripts/Commands/cs_debug.cpp
+++ b/src/server/scripts/Commands/cs_debug.cpp
@@ -1309,7 +1309,35 @@ public:
char* mask2 = strtok(NULL, " \n");
uint32 moveFlags = (uint32)atoi(mask1);
- target->SetUnitMovementFlags(moveFlags);
+
+ static uint32 const FlagsWithHandlers = MOVEMENTFLAG_MASK_HAS_PLAYER_STATUS_OPCODE |
+ MOVEMENTFLAG_WALKING | MOVEMENTFLAG_SWIMMING |
+ MOVEMENTFLAG_SPLINE_ENABLED;
+
+ bool unhandledFlag = (moveFlags ^ target->GetUnitMovementFlags()) & ~FlagsWithHandlers;
+
+ target->SetWalk(moveFlags & MOVEMENTFLAG_WALKING);
+ target->SetDisableGravity(moveFlags & MOVEMENTFLAG_DISABLE_GRAVITY);
+ target->SetSwim(moveFlags & MOVEMENTFLAG_SWIMMING);
+ target->SetCanFly(moveFlags & MOVEMENTFLAG_CAN_FLY);
+ target->SetWaterWalking(moveFlags & MOVEMENTFLAG_WATERWALKING);
+ target->SetFeatherFall(moveFlags & MOVEMENTFLAG_FALLING_SLOW);
+ target->SetHover(moveFlags & MOVEMENTFLAG_HOVER);
+
+ if (moveFlags & (MOVEMENTFLAG_DISABLE_GRAVITY | MOVEMENTFLAG_CAN_FLY))
+ moveFlags &= ~MOVEMENTFLAG_FALLING;
+
+ if (moveFlags & MOVEMENTFLAG_ROOT)
+ {
+ target->SetControlled(true, UNIT_STATE_ROOT);
+ moveFlags &= ~MOVEMENTFLAG_MASK_MOVING;
+ }
+
+ if (target->HasUnitMovementFlag(MOVEMENTFLAG_SPLINE_ENABLED) && !(moveFlags & MOVEMENTFLAG_SPLINE_ENABLED))
+ target->StopMoving();
+
+ if (unhandledFlag)
+ target->SetUnitMovementFlags(moveFlags);
if (mask2)
{
@@ -1317,7 +1345,9 @@ public:
target->SetExtraUnitMovementFlags(moveFlagsExtra);
}
- target->SendMovementFlagUpdate();
+ if (mask2 || unhandledFlag)
+ target->SendMovementFlagUpdate();
+
handler->PSendSysMessage(LANG_MOVEFLAGS_SET, target->GetUnitMovementFlags(), target->GetExtraUnitMovementFlags());
}