mirror of
https://github.com/mod-playerbots/mod-playerbots
synced 2025-12-01 21:12:50 +08:00
Fix bot swimming behavior at the surface and in shallow waters (#908)
- Fix for Bots don't swim properly near the surface #903 - Prevents bots teleporting/warping to the surface when in (shallow) waters.
This commit is contained in:
@@ -978,11 +978,13 @@ bool MovementAction::Follow(Unit* target, float distance) { return Follow(target
|
|||||||
|
|
||||||
void MovementAction::UpdateMovementState()
|
void MovementAction::UpdateMovementState()
|
||||||
{
|
{
|
||||||
if (bot->Unit::IsUnderWater())
|
int8 botInLiquidState = bot->GetLiquidData().Status;
|
||||||
|
|
||||||
|
if (botInLiquidState == LIQUID_MAP_IN_WATER || botInLiquidState == LIQUID_MAP_UNDER_WATER)
|
||||||
{
|
{
|
||||||
bot->SetSwim(true);
|
bot->SetSwim(true);
|
||||||
}
|
}
|
||||||
else if (!bot->Unit::IsInWater())
|
else
|
||||||
{
|
{
|
||||||
bot->SetSwim(false);
|
bot->SetSwim(false);
|
||||||
}
|
}
|
||||||
@@ -990,18 +992,21 @@ void MovementAction::UpdateMovementState()
|
|||||||
bool onGround = bot->GetPositionZ() <
|
bool onGround = bot->GetPositionZ() <
|
||||||
bot->GetMapWaterOrGroundLevel(bot->GetPositionX(), bot->GetPositionY(), bot->GetPositionZ()) + 1.0f;
|
bot->GetMapWaterOrGroundLevel(bot->GetPositionX(), bot->GetPositionY(), bot->GetPositionZ()) + 1.0f;
|
||||||
|
|
||||||
|
// Keep bot->SendMovementFlagUpdate() withing the if statements to not intefere with bot behavior on ground/(shallow) waters
|
||||||
if (!bot->HasUnitMovementFlag(MOVEMENTFLAG_FLYING) &&
|
if (!bot->HasUnitMovementFlag(MOVEMENTFLAG_FLYING) &&
|
||||||
bot->HasAuraType(SPELL_AURA_MOD_INCREASE_MOUNTED_FLIGHT_SPEED) && !onGround)
|
bot->HasAuraType(SPELL_AURA_MOD_INCREASE_MOUNTED_FLIGHT_SPEED) && !onGround)
|
||||||
{
|
{
|
||||||
bot->AddUnitMovementFlag(MOVEMENTFLAG_FLYING);
|
bot->AddUnitMovementFlag(MOVEMENTFLAG_FLYING);
|
||||||
|
bot->SendMovementFlagUpdate();
|
||||||
}
|
}
|
||||||
if (bot->HasUnitMovementFlag(MOVEMENTFLAG_FLYING) &&
|
|
||||||
|
else if (bot->HasUnitMovementFlag(MOVEMENTFLAG_FLYING) &&
|
||||||
(!bot->HasAuraType(SPELL_AURA_MOD_INCREASE_MOUNTED_FLIGHT_SPEED) || onGround))
|
(!bot->HasAuraType(SPELL_AURA_MOD_INCREASE_MOUNTED_FLIGHT_SPEED) || onGround))
|
||||||
{
|
{
|
||||||
bot->RemoveUnitMovementFlag(MOVEMENTFLAG_FLYING);
|
bot->RemoveUnitMovementFlag(MOVEMENTFLAG_FLYING);
|
||||||
|
bot->SendMovementFlagUpdate();
|
||||||
}
|
}
|
||||||
|
|
||||||
bot->SendMovementFlagUpdate();
|
|
||||||
// Temporary speed increase in group
|
// Temporary speed increase in group
|
||||||
// if (botAI->HasRealPlayerMaster()) {
|
// if (botAI->HasRealPlayerMaster()) {
|
||||||
// bot->SetSpeedRate(MOVE_RUN, 1.1f);
|
// bot->SetSpeedRate(MOVE_RUN, 1.1f);
|
||||||
|
|||||||
Reference in New Issue
Block a user