From 912a1e7adc650d20b0302a3dfe45816b5e541bc7 Mon Sep 17 00:00:00 2001 From: "madmaxoft@gmail.com" Date: Fri, 21 Dec 2012 11:04:08 +0000 Subject: Refactored the TakeDamage API to take equipped weapon and armor into consideration (PvP untested) http://forum.mc-server.org/showthread.php?tid=625 git-svn-id: http://mc-server.googlecode.com/svn/trunk@1087 0a769ca7-a7f5-676a-18bf-c427514a06d6 --- source/Player.cpp | 39 ++++++++++++++++++++++++--------------- 1 file changed, 24 insertions(+), 15 deletions(-) (limited to 'source/Player.cpp') diff --git a/source/Player.cpp b/source/Player.cpp index 555b8d3f9..9460bfd97 100644 --- a/source/Player.cpp +++ b/source/Player.cpp @@ -70,6 +70,7 @@ cPlayer::cPlayer(cClientHandle* a_Client, const AString & a_PlayerName) LOGD("Inventory window for player %p is at %p", this, m_InventoryWindow); SetMaxHealth(20); + m_MaxFoodLevel = 20; m_MaxFoodSaturationLevel = 20.f; @@ -222,18 +223,19 @@ void cPlayer::Tick(float a_Dt) { m_World->CollectPickupsByPlayer(this); - //Handle Health: + // Handle Health: m_FoodTickTimer++; - if(m_FoodTickTimer >= 80) + if (m_FoodTickTimer >= 80) { m_FoodTickTimer = 0; - if(m_FoodLevel >= 17) + if (m_FoodLevel >= 17) { Heal(1); - }else if(m_FoodLevel == 0) + } + else if (m_FoodLevel == 0) { - TakeDamage(1, NULL); + super::TakeDamage(dtStarving, NULL, 1, 1, 0); } } @@ -248,7 +250,7 @@ void cPlayer::Tick(float a_Dt) } else { - m_FoodLevel = MAX(m_FoodLevel -1, 0); + m_FoodLevel = MAX(m_FoodLevel - 1, 0); } SendHealth(); @@ -297,7 +299,7 @@ void cPlayer::SetTouchGround(bool a_bTouchGround) m_LastJumpHeight = (float)m_Pos.y; if (Damage > 0) { - TakeDamage(Damage, 0); + super::TakeDamage(dtFalling, NULL, Damage, Damage, 0); } m_LastGroundHeight = (float)m_Pos.y; @@ -353,23 +355,30 @@ void cPlayer::SendHealth() -void cPlayer::TakeDamage( int a_Damage, cEntity* a_Instigator ) +void cPlayer::DoTakeDamage(TakeDamageInfo & a_TDI) { - if (m_GameMode != eGameMode_Creative) + if (m_GameMode == eGameMode_Creative) { - cPawn::TakeDamage( a_Damage, a_Instigator ); - + // No damage / health in creative mode + return; + } + + super::DoTakeDamage(a_TDI); + + if (a_TDI.Attacker != NULL) + { + // Only increase hunger if being attacked by a mob AddFoodExhaustion(0.3f); - - SendHealth(); } + + SendHealth(); } -void cPlayer::KilledBy(cEntity * a_Killer) +void cPlayer::KilledBy(cPawn * a_Killer) { cPawn::KilledBy(a_Killer); @@ -544,7 +553,7 @@ void cPlayer::SendMessage(const AString & a_Message) -void cPlayer::TeleportTo(const double & a_PosX, const double & a_PosY, const double & a_PosZ) +void cPlayer::TeleportTo(double a_PosX, double a_PosY, double a_PosZ) { SetPosition( a_PosX, a_PosY, a_PosZ ); -- cgit v1.2.3