diff options
author | STRWarrior <niels.breuker@hotmail.nl> | 2014-01-26 13:07:21 +0100 |
---|---|---|
committer | STRWarrior <niels.breuker@hotmail.nl> | 2014-01-26 13:07:21 +0100 |
commit | a533386144f234dcfb61ad6bc5341712ea244afd (patch) | |
tree | 136911017bc1cb509ef1028c234e6944fb3639ad /src/Mobs | |
parent | Merge pull request #588 from mc-server/Sheep_Eating (diff) | |
download | cuberite-a533386144f234dcfb61ad6bc5341712ea244afd.tar cuberite-a533386144f234dcfb61ad6bc5341712ea244afd.tar.gz cuberite-a533386144f234dcfb61ad6bc5341712ea244afd.tar.bz2 cuberite-a533386144f234dcfb61ad6bc5341712ea244afd.tar.lz cuberite-a533386144f234dcfb61ad6bc5341712ea244afd.tar.xz cuberite-a533386144f234dcfb61ad6bc5341712ea244afd.tar.zst cuberite-a533386144f234dcfb61ad6bc5341712ea244afd.zip |
Diffstat (limited to '')
-rw-r--r-- | src/Mobs/Wolf.cpp | 33 |
1 files changed, 27 insertions, 6 deletions
diff --git a/src/Mobs/Wolf.cpp b/src/Mobs/Wolf.cpp index 11e3f690a..217834eb1 100644 --- a/src/Mobs/Wolf.cpp +++ b/src/Mobs/Wolf.cpp @@ -75,10 +75,12 @@ void cWolf::OnRightClicked(cPlayer & a_Player) SetIsTame(true); SetOwner(a_Player.GetName()); m_World->BroadcastEntityStatus(*this, ENTITY_STATUS_WOLF_TAMED); + m_World->BroadcastParticleEffect("heart", (float) GetPosX(), (float) GetPosY(), (float) GetPosZ(), 0, 0, 0, 0, 5); } else { m_World->BroadcastEntityStatus(*this, ENTITY_STATUS_WOLF_TAMING); + m_World->BroadcastParticleEffect("smoke", (float) GetPosX(), (float) GetPosY(), (float) GetPosZ(), 0, 0, 0, 0, 5); } } } @@ -122,7 +124,8 @@ void cWolf::Tick(float a_Dt, cChunk & a_Chunk) { super::Tick(a_Dt, a_Chunk); } - + + // The wolf is sitting so don't move him at all. if (IsSitting()) { m_bMovingToDestination = false; @@ -145,8 +148,18 @@ void cWolf::Tick(float a_Dt, cChunk & a_Chunk) SetIsBegging(true); m_World->BroadcastEntityMetadata(*this); } - m_FinalDestination = a_Closest_Player->GetPosition();; - m_bMovingToDestination = false; + // Don't move to the player if the wolf is sitting. + if (IsSitting()) + { + m_bMovingToDestination = false; + } + else + { + m_bMovingToDestination = true; + } + Vector3d PlayerPos = a_Closest_Player->GetPosition(); + PlayerPos.y++; + m_FinalDestination = PlayerPos; break; } default: @@ -185,15 +198,23 @@ void cWolf::TickFollowPlayer() } 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(); - if ((Distance > 30) && (!IsSitting())) + if (Distance > 30) { TeleportToCoords(Callback.OwnerPos.x, Callback.OwnerPos.y, Callback.OwnerPos.z); } else { - MoveToPosition(Callback.OwnerPos); + m_FinalDestination = Callback.OwnerPos; + if (IsSitting()) + { + m_bMovingToDestination = false; + } + else + { + m_bMovingToDestination = true; + } } } } |