Refactored item-eating from cClientHandle into cPlayer

git-svn-id: http://mc-server.googlecode.com/svn/trunk@519 0a769ca7-a7f5-676a-18bf-c427514a06d6
master
madmaxoft@gmail.com 2012-05-29 19:56:07 +00:00
parent 9d6a5b9ce0
commit 322ba59c3a
3 changed files with 73 additions and 83 deletions

View File

@ -981,77 +981,7 @@ void cClientHandle::HandleBlockPlace(cPacket_BlockPlace * a_Packet)
a_Packet->m_PosX, a_Packet->m_PosY, a_Packet->m_PosZ
);
// Hacked in edible items go!~
// TODO: Handle hunger
bool bEat = false;
bool isDoor = false;
switch (Item.m_ItemID)
{
case E_ITEM_APPLE:
//m_Player->Heal(4); // 2 hearts
m_Player->Feed(24); // 2 food bars
bEat = true;
break;
case E_ITEM_GOLDEN_APPLE:
//m_Player->Heal(20); // 10 hearts
m_Player->Feed(60); // 5 food
bEat = true;
break;
case E_ITEM_MUSHROOM_SOUP:
///m_Player->Heal(10); // 5 hearts
m_Player->Feed(48); // 4 food
bEat = true;
break;
case E_ITEM_BREAD:
//m_Player->Heal(5); // 2.5 hearts
m_Player->Feed(30); // 2.5 food
bEat = true;
break;
case E_ITEM_RAW_MEAT:
//m_Player->Heal(3); // 1.5 hearts
m_Player->Feed(18); // 1.5 food
bEat = true;
break;
case E_ITEM_COOKED_MEAT:
//m_Player->Heal(8); // 4 hearts
m_Player->Feed(48); // 4 food
bEat = true;
break;
case E_ITEM_RAW_FISH:
//m_Player->Heal(2); // 1 heart
m_Player->Feed(12); // 1 food
bEat = true;
break;
case E_ITEM_COOKED_FISH:
//m_Player->Heal(5); // 2.5 hearts
m_Player->Feed(30); // 2.5 food
bEat = true;
break;
case E_ITEM_RAW_CHICKEN:
//m_Player->Heal(3);
m_Player->Feed(12); // 1 food
bEat = true;
break;
case E_ITEM_COOKED_CHICKEN:
//m_Player->Heal(8);
m_Player->Feed(36); // 3 food
bEat = true;
break;
case E_ITEM_RAW_BEEF:
//m_Player->Heal(3);
m_Player->Feed(18); // 1.5 food
bEat = true;
break;
case E_ITEM_STEAK:
//m_Player->Heal(8);
m_Player->Feed(48); // 4 food
bEat = true;
break;
default:
break;
};
if (bEat)
if (m_Player->EatItem(Item.m_ItemID))
{
m_Player->GetInventory().RemoveItem(Item);
return;
@ -1062,6 +992,7 @@ void cClientHandle::HandleBlockPlace(cPacket_BlockPlace * a_Packet)
// clicked in air
return;
}
bool isDoor = false;
//TODO: Wrong Blocks!
int ClickedBlock = (int)m_Player->GetWorld()->GetBlock(a_Packet->m_PosX, a_Packet->m_PosY, a_Packet->m_PosZ);

View File

@ -305,20 +305,31 @@ void cPlayer::Heal( int a_Health )
}
}
void cPlayer::Feed( short a_Food )
{
if( m_FoodLevel < GetMaxFoodLevel() )
{
m_FoodLevel = MIN(a_Food + m_FoodLevel, GetMaxFoodLevel());
cPacket_UpdateHealth Health;
Health.m_Health = m_Health;
Health.m_Food = GetFood();
Health.m_Saturation = GetFoodSaturation();
m_ClientHandle->Send( Health );
bool cPlayer::Feed(short a_Food)
{
if (m_FoodLevel >= GetMaxFoodLevel())
{
return false;
}
m_FoodLevel = MIN(a_Food + m_FoodLevel, GetMaxFoodLevel());
cPacket_UpdateHealth Health;
Health.m_Health = m_Health;
Health.m_Food = GetFood();
Health.m_Saturation = GetFoodSaturation();
m_ClientHandle->Send( Health );
return true;
}
void cPlayer::TakeDamage( int a_Damage, cEntity* a_Instigator )
{
if ( !(m_GameMode == 1) ) {
@ -985,3 +996,46 @@ void cPlayer::UseEquippedItem()
bool cPlayer::EatItem(int a_ItemType)
{
// TODO: Handle hunger
switch (a_ItemType)
{
case E_ITEM_APPLE: return Feed(24); // 2 food bars
case E_ITEM_GOLDEN_APPLE: return Feed(60); // 5 food
case E_ITEM_MUSHROOM_SOUP: return Feed(48); // 4 food
case E_ITEM_BREAD: return Feed(30); // 2.5 food
case E_ITEM_RAW_MEAT: return Feed(18); // 1.5 food
case E_ITEM_COOKED_MEAT: return Feed(48); // 4 food
case E_ITEM_RAW_FISH: return Feed(12); // 1 food
case E_ITEM_COOKED_FISH: return Feed(30); // 2.5 food
case E_ITEM_COOKED_CHICKEN: return Feed(36); // 3 food
case E_ITEM_RAW_BEEF: return Feed(18); // 1.5 food
case E_ITEM_STEAK: return Feed(48); // 4 food
case E_ITEM_RAW_CHICKEN:
{
if (!Feed(12)) // 1 food
{
return false;
}
// TODO: A random chance to get food-poisoned
return true;
}
case E_ITEM_ROTTEN_FLESH:
{
if (!Feed(24))
{
return false;
}
// TODO: Food-poisoning
return true;
}
}
return false;
}

View File

@ -81,7 +81,10 @@ public:
void TossItem( bool a_bDraggingItem, int a_Amount = 1 ); //tolua_export
void Heal( int a_Health ); //tolua_export
void Feed( short a_Food );
/// Returns true if any food has been consumed, false if player "full"
bool Feed(short a_Food);
void TakeDamage( int a_Damage, cEntity* a_Instigator ); //tolua_export
void KilledBy( cEntity* a_Killer ); //tolua_export
void Respawn(); //tolua_export
@ -97,8 +100,10 @@ public:
const AString & GetLoadedWorldName() { return m_LoadedWorldName; }
void UseEquippedItem();
void UseEquippedItem(void);
/// Returns true if the item type is edible && it has been consumed, false otherwise
bool EatItem(int a_ItemType);
protected:
virtual void Destroyed();