diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/server/scripts/Commands/cs_debug.cpp | 34 |
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()); } |