Merge pull request #590 from mc-server/Wolf_Fix
Wolf: Small fix since the new AI and a new small feature.
This commit is contained in:
commit
1f4e12c50c
@ -75,10 +75,12 @@ void cWolf::OnRightClicked(cPlayer & a_Player)
|
|||||||
SetIsTame(true);
|
SetIsTame(true);
|
||||||
SetOwner(a_Player.GetName());
|
SetOwner(a_Player.GetName());
|
||||||
m_World->BroadcastEntityStatus(*this, ENTITY_STATUS_WOLF_TAMED);
|
m_World->BroadcastEntityStatus(*this, ENTITY_STATUS_WOLF_TAMED);
|
||||||
|
m_World->BroadcastParticleEffect("heart", (float) GetPosX(), (float) GetPosY(), (float) GetPosZ(), 0, 0, 0, 0, 5);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_World->BroadcastEntityStatus(*this, ENTITY_STATUS_WOLF_TAMING);
|
m_World->BroadcastEntityStatus(*this, ENTITY_STATUS_WOLF_TAMING);
|
||||||
|
m_World->BroadcastParticleEffect("smoke", (float) GetPosX(), (float) GetPosY(), (float) GetPosZ(), 0, 0, 0, 0, 5);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -123,6 +125,7 @@ void cWolf::Tick(float a_Dt, cChunk & a_Chunk)
|
|||||||
super::Tick(a_Dt, a_Chunk);
|
super::Tick(a_Dt, a_Chunk);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// The wolf is sitting so don't move him at all.
|
||||||
if (IsSitting())
|
if (IsSitting())
|
||||||
{
|
{
|
||||||
m_bMovingToDestination = false;
|
m_bMovingToDestination = false;
|
||||||
@ -145,8 +148,18 @@ void cWolf::Tick(float a_Dt, cChunk & a_Chunk)
|
|||||||
SetIsBegging(true);
|
SetIsBegging(true);
|
||||||
m_World->BroadcastEntityMetadata(*this);
|
m_World->BroadcastEntityMetadata(*this);
|
||||||
}
|
}
|
||||||
m_FinalDestination = a_Closest_Player->GetPosition();;
|
// Don't move to the player if the wolf is sitting.
|
||||||
|
if (IsSitting())
|
||||||
|
{
|
||||||
m_bMovingToDestination = false;
|
m_bMovingToDestination = false;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
m_bMovingToDestination = true;
|
||||||
|
}
|
||||||
|
Vector3d PlayerPos = a_Closest_Player->GetPosition();
|
||||||
|
PlayerPos.y++;
|
||||||
|
m_FinalDestination = PlayerPos;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
@ -185,15 +198,26 @@ void cWolf::TickFollowPlayer()
|
|||||||
} Callback;
|
} Callback;
|
||||||
if (m_World->DoWithPlayer(m_OwnerName, Callback))
|
if (m_World->DoWithPlayer(m_OwnerName, Callback))
|
||||||
{
|
{
|
||||||
// The player is present in the world, follow them:
|
// The player is present in the world, follow him:
|
||||||
double Distance = (Callback.OwnerPos - GetPosition()).Length();
|
double Distance = (Callback.OwnerPos - GetPosition()).Length();
|
||||||
if ((Distance > 30) && (!IsSitting()))
|
if (Distance > 30)
|
||||||
|
{
|
||||||
|
if (!IsSitting())
|
||||||
{
|
{
|
||||||
TeleportToCoords(Callback.OwnerPos.x, Callback.OwnerPos.y, Callback.OwnerPos.z);
|
TeleportToCoords(Callback.OwnerPos.x, Callback.OwnerPos.y, Callback.OwnerPos.z);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
MoveToPosition(Callback.OwnerPos);
|
m_FinalDestination = Callback.OwnerPos;
|
||||||
|
if (IsSitting())
|
||||||
|
{
|
||||||
|
m_bMovingToDestination = false;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
m_bMovingToDestination = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user