Core/Movement: enable item use and spell cast when dismounting

Remove error message and allow spell cast or item use from
mounted state on ground, especially when sitting on
a landed flying mount. Current behavior is that the player
will get the error message "You can't do that while moving"
when trying to cast a spell or pick up an item
while sitting on a flying mount after having landed.

By joschiwald, closes #6236

(cherry picked from commit 19aac66bc262a835cae288fc3d0ccdc8e93d0fb9)
This commit is contained in:
joschiwald
2017-01-12 03:36:32 +01:00
parent c4967d67bd
commit 71ffdccb5a
3 changed files with 10 additions and 19 deletions
-10
View File
@@ -15257,14 +15257,9 @@ bool Unit::SetDisableGravity(bool disable)
{
AddUnitMovementFlag(MOVEMENTFLAG_DISABLE_GRAVITY);
RemoveUnitMovementFlag(MOVEMENTFLAG_SWIMMING | MOVEMENTFLAG_SPLINE_ELEVATION);
SetFall(false);
}
else
{
RemoveUnitMovementFlag(MOVEMENTFLAG_DISABLE_GRAVITY);
if (!HasUnitMovementFlag(MOVEMENTFLAG_CAN_FLY))
SetFall(true);
}
static OpcodeServer const gravityOpcodeTable[2][2] =
{
@@ -15337,14 +15332,9 @@ bool Unit::SetCanFly(bool enable)
{
AddUnitMovementFlag(MOVEMENTFLAG_CAN_FLY);
RemoveUnitMovementFlag(MOVEMENTFLAG_SWIMMING | MOVEMENTFLAG_SPLINE_ELEVATION);
SetFall(false);
}
else
{
RemoveUnitMovementFlag(MOVEMENTFLAG_CAN_FLY | MOVEMENTFLAG_MASK_MOVING_FLY);
if (!IsLevitating())
SetFall(true);
}
static OpcodeServer const flyOpcodeTable[2][2] =
{
+4 -1
View File
@@ -473,8 +473,11 @@ void MotionMaster::MoveFall(uint32 id /*=0*/)
if (std::fabs(_owner->GetPositionZ() - tz) < 0.1f)
return;
_owner->SetFall(true);
// don't run spline movement for players
if (_owner->GetTypeId() == TYPEID_PLAYER)
_owner->SetFall(true);
return;
Movement::MoveSplineInit init(_owner);
init.MoveTo(_owner->GetPositionX(), _owner->GetPositionY(), tz, false);
@@ -2611,10 +2611,9 @@ void AuraEffect::HandleAuraAllowFlight(AuraApplication const* aurApp, uint8 mode
return;
}
target->SetCanFly(apply);
if (!apply && target->GetTypeId() == TYPEID_UNIT && !target->IsLevitating())
target->GetMotionMaster()->MoveFall();
if (target->SetCanFly(apply))
if (!apply && !target->IsLevitating())
target->GetMotionMaster()->MoveFall();
}
void AuraEffect::HandleAuraWaterWalk(AuraApplication const* aurApp, uint8 mode, bool apply) const
@@ -3021,10 +3020,9 @@ void AuraEffect::HandleAuraModIncreaseFlightSpeed(AuraApplication const* aurApp,
// do not remove unit flag if there are more than this auraEffect of that kind on unit on unit
if (mode & AURA_EFFECT_HANDLE_SEND_FOR_CLIENT_MASK && (apply || (!target->HasAuraType(SPELL_AURA_MOD_INCREASE_MOUNTED_FLIGHT_SPEED) && !target->HasAuraType(SPELL_AURA_FLY))))
{
target->SetCanFly(apply);
if (!apply && target->GetTypeId() == TYPEID_UNIT && !target->IsLevitating())
target->GetMotionMaster()->MoveFall();
if (target->SetCanFly(apply))
if (!apply && !target->IsLevitating())
target->GetMotionMaster()->MoveFall();
}
//! Someone should clean up these hacks and remove it from this function. It doesn't even belong here.