diff options
Diffstat (limited to 'source/Mobs/Horse.cpp')
-rw-r--r-- | source/Mobs/Horse.cpp | 56 |
1 files changed, 35 insertions, 21 deletions
diff --git a/source/Mobs/Horse.cpp b/source/Mobs/Horse.cpp index c2a8f6ed0..f9705a451 100644 --- a/source/Mobs/Horse.cpp +++ b/source/Mobs/Horse.cpp @@ -10,7 +10,7 @@ cHorse::cHorse(int Type, int Color, int Style, int TameTimes) : - super("Horse", 100, "mob.horse.hit", "mob.horse.death", 1.4, 1.6), + super("Horse", mtHorse, "mob.horse.hit", "mob.horse.death", 1.4, 1.6), m_bHasChest(false), m_bIsEating(false), m_bIsRearing(false), @@ -76,8 +76,12 @@ void cHorse::Tick(float a_Dt, cChunk & a_Chunk) if (m_RearTickCount == 20) { m_bIsRearing = false; + m_RearTickCount = 0; + } + else + { + m_RearTickCount++; } - else { m_RearTickCount++;} } m_World->BroadcastEntityMetadata(*this); @@ -89,35 +93,45 @@ void cHorse::Tick(float a_Dt, cChunk & a_Chunk) void cHorse::OnRightClicked(cPlayer & a_Player) { - if (m_Attachee != NULL) + if (!m_bIsSaddled && m_bIsTame) { - if (m_Attachee->GetUniqueID() == a_Player.GetUniqueID()) + if (a_Player.GetEquippedItem().m_ItemType == E_ITEM_SADDLE) { - a_Player.Detach(); - return; + // Saddle the horse: + if (!a_Player.IsGameModeCreative()) + { + a_Player.GetInventory().RemoveOneEquippedItem(); + } + m_bIsSaddled = true; + m_World->BroadcastEntityMetadata(*this); } - - if (m_Attachee->IsPlayer()) + else if (!a_Player.GetEquippedItem().IsEmpty()) { - return; + // The horse doesn't like being hit, make it rear: + m_bIsRearing = true; + m_RearTickCount = 0; } - - m_Attachee->Detach(); } - - m_TameAttemptTimes++; - a_Player.AttachTo(this); - - if (a_Player.GetEquippedItem().m_ItemType == E_ITEM_SADDLE) + else { - if (!a_Player.IsGameModeCreative()) + if (m_Attachee != NULL) { - a_Player.GetInventory().RemoveOneEquippedItem(); + if (m_Attachee->GetUniqueID() == a_Player.GetUniqueID()) + { + a_Player.Detach(); + return; + } + + if (m_Attachee->IsPlayer()) + { + return; + } + + m_Attachee->Detach(); } - // Set saddle state & broadcast metadata - m_bIsSaddled = true; - m_World->BroadcastEntityMetadata(*this); + m_TameAttemptTimes++; + a_Player.AttachTo(this); } } |