From 92c59963f82f81aa3202657e7fdbb2592924ede3 Mon Sep 17 00:00:00 2001 From: "cedeel@gmail.com" Date: Thu, 14 Jun 2012 13:06:06 +0000 Subject: Attempt to bring sanity to newlines across systems. git-svn-id: http://mc-server.googlecode.com/svn/trunk@606 0a769ca7-a7f5-676a-18bf-c427514a06d6 --- source/cPawn.cpp | 504 +++++++++++++++++++++++++++---------------------------- 1 file changed, 252 insertions(+), 252 deletions(-) (limited to 'source/cPawn.cpp') diff --git a/source/cPawn.cpp b/source/cPawn.cpp index 986d8904c..0037e56e4 100644 --- a/source/cPawn.cpp +++ b/source/cPawn.cpp @@ -1,252 +1,252 @@ - -#include "Globals.h" // NOTE: MSVC stupidness requires this to be the same across all modules - -#include "cPawn.h" -#include "cRoot.h" -#include "cServer.h" -#include "cWorld.h" -#include "cPlayer.h" -#include "cPluginManager.h" -#include "Vector3d.h" -#include "BlockID.h" - -#include "Defines.h" - -#include "packets/cPacket_TeleportEntity.h" -#include "packets/cPacket_EntityStatus.h" -#include "packets/cPacket_Metadata.h" - - - - - -CLASS_DEFINITION( cPawn, cEntity ) - - - - - -cPawn::cPawn() - : cEntity( 0, 0, 0 ) - , m_LastPosX( 0.0 ) - , m_LastPosY( 0.0 ) - , m_LastPosZ( 0.0 ) - , m_TimeLastTeleportPacket( 0.f ) - , m_bBurnable(true) - , m_MetaData(NORMAL) - , m_FireDamageInterval(0.f) - , m_BurnPeriod(0.f) -{ - SetMaxHealth(20); - SetMaxFoodLevel(125); -} - - - - - -cPawn::~cPawn() -{ - -} - - - - - -void cPawn::Heal( int a_Health ) -{ - (void)a_Health; -} - - - - - -void cPawn::TakeDamage( int a_Damage, cEntity* a_Instigator ) -{ - TakeDamageInfo TDI; - TDI.Damage = a_Damage; - TDI.Instigator = a_Instigator; - cRoot::Get()->GetPluginManager()->CallHook( cPluginManager::E_PLUGIN_TAKE_DAMAGE, 2, this, &TDI ); - - if( TDI.Damage == 0 ) return; - if( m_Health <= 0 ) return; // Can't take damage if already dead - - m_Health -= (short)TDI.Damage; - if( m_Health < 0 ) m_Health = 0; - - cPacket_EntityStatus Status; - Status.m_UniqueID = GetUniqueID(); - Status.m_Status = cPacket_EntityStatus::STATUS_TAKEDAMAGE; - m_World->BroadcastToChunk(m_ChunkX, m_ChunkY, m_ChunkZ, Status); - - if (m_Health <= 0) - { - KilledBy( TDI.Instigator ); - } -} - - - - - -void cPawn::KilledBy( cEntity* a_Killer ) -{ - m_Health = 0; - - if( cRoot::Get()->GetPluginManager()->CallHook( cPluginManager::E_PLUGIN_KILLED, 2, this, a_Killer ) ) - { - return; // Give plugins a chance to 'unkill' the pawn. - } - - cPacket_EntityStatus Status; - Status.m_UniqueID = GetUniqueID(); - Status.m_Status = cPacket_EntityStatus::STATUS_DIE; - m_World->BroadcastToChunk(m_ChunkX, m_ChunkY, m_ChunkZ, Status); -} - - - - - -void cPawn::TeleportToEntity( cEntity* a_Entity ) -{ - TeleportTo( a_Entity->GetPosX(), a_Entity->GetPosY(), a_Entity->GetPosZ() ); -} - - - - - -void cPawn::TeleportTo( const double & a_PosX, const double & a_PosY, const double & a_PosZ ) -{ - SetPosition( a_PosX, a_PosY, a_PosZ ); - - cPacket_TeleportEntity TeleportEntity( this ); - - cRoot::Get()->GetServer()->Broadcast( TeleportEntity ); -} - - - - - -void cPawn::Tick(float a_Dt) -{ - CheckMetaDataBurn(); //Check to see if pawn should burn based on block they are on - - if (GetMetaData() == BURNING) - { - InStateBurning(a_Dt); - } -} - - - - - - -void cPawn::SetMetaData(MetaData a_MetaData) -{ - //Broadcast new status to clients in the chunk - m_MetaData = a_MetaData; - cPacket_Metadata md(a_MetaData, GetUniqueID()); - m_World->BroadcastToChunk(m_ChunkX, m_ChunkY, m_ChunkZ, md); -} - - - - - -//----Change Entity MetaData -void cPawn::CheckMetaDataBurn() -{ - char Block = GetWorld()->GetBlock((int) m_Pos.x, (int) m_Pos.y, (int) m_Pos.z); - char BlockAbove = GetWorld()->GetBlock((int) m_Pos.x, (int) m_Pos.y + 1, (int) m_Pos.z); - char BlockBelow = GetWorld()->GetBlock((int) m_Pos.x, (int) m_Pos.y - 1, (int) m_Pos.z); - - if ( - (GetMetaData() == BURNING) && - (IsBlockWater(Block) || IsBlockWater(BlockAbove) || IsBlockWater(BlockBelow)) - ) - { - SetMetaData(NORMAL); - } - else if ( - m_bBurnable && - (GetMetaData() != BURNING) && - ( - IsBlockLava(Block) || (Block == E_BLOCK_FIRE) || - IsBlockLava(BlockAbove) || (BlockAbove == E_BLOCK_FIRE) || - IsBlockLava(BlockBelow) || (BlockBelow == E_BLOCK_FIRE) - ) - ) - { - SetMetaData(BURNING); - } -} - - - - - -//What to do if On fire -void cPawn::InStateBurning(float a_Dt) -{ - m_FireDamageInterval += a_Dt; - char Block = GetWorld()->GetBlock( (int)m_Pos.x, (int)m_Pos.y, (int)m_Pos.z ); - char BlockAbove = GetWorld()->GetBlock( (int)m_Pos.x, (int)m_Pos.y + 1, (int)m_Pos.z ); - if (m_FireDamageInterval > 800) - { - - m_FireDamageInterval = 0; - TakeDamage(1, this); - - m_BurnPeriod++; - if (IsBlockLava(Block) || Block == E_BLOCK_FIRE - || IsBlockLava(BlockAbove) || BlockAbove == E_BLOCK_FIRE) - { - m_BurnPeriod = 0; - TakeDamage(6, this); - } - else - { - TakeDamage(1, this); - } - - if (m_BurnPeriod > 7) - { - SetMetaData(NORMAL); - m_BurnPeriod = 0; - } - } -} - - - - - -void cPawn::SetMaxHealth(short a_MaxHealth) -{ - this->m_MaxHealth = a_MaxHealth; - - //Reset health - m_Health = a_MaxHealth; -} - - - - - -void cPawn::SetMaxFoodLevel(short a_MaxFoodLevel) -{ - m_MaxFoodLevel = a_MaxFoodLevel; - - //Reset food level - m_FoodLevel = a_MaxFoodLevel; -} - - - - + +#include "Globals.h" // NOTE: MSVC stupidness requires this to be the same across all modules + +#include "cPawn.h" +#include "cRoot.h" +#include "cServer.h" +#include "cWorld.h" +#include "cPlayer.h" +#include "cPluginManager.h" +#include "Vector3d.h" +#include "BlockID.h" + +#include "Defines.h" + +#include "packets/cPacket_TeleportEntity.h" +#include "packets/cPacket_EntityStatus.h" +#include "packets/cPacket_Metadata.h" + + + + + +CLASS_DEFINITION( cPawn, cEntity ) + + + + + +cPawn::cPawn() + : cEntity( 0, 0, 0 ) + , m_LastPosX( 0.0 ) + , m_LastPosY( 0.0 ) + , m_LastPosZ( 0.0 ) + , m_TimeLastTeleportPacket( 0.f ) + , m_bBurnable(true) + , m_MetaData(NORMAL) + , m_FireDamageInterval(0.f) + , m_BurnPeriod(0.f) +{ + SetMaxHealth(20); + SetMaxFoodLevel(125); +} + + + + + +cPawn::~cPawn() +{ + +} + + + + + +void cPawn::Heal( int a_Health ) +{ + (void)a_Health; +} + + + + + +void cPawn::TakeDamage( int a_Damage, cEntity* a_Instigator ) +{ + TakeDamageInfo TDI; + TDI.Damage = a_Damage; + TDI.Instigator = a_Instigator; + cRoot::Get()->GetPluginManager()->CallHook( cPluginManager::E_PLUGIN_TAKE_DAMAGE, 2, this, &TDI ); + + if( TDI.Damage == 0 ) return; + if( m_Health <= 0 ) return; // Can't take damage if already dead + + m_Health -= (short)TDI.Damage; + if( m_Health < 0 ) m_Health = 0; + + cPacket_EntityStatus Status; + Status.m_UniqueID = GetUniqueID(); + Status.m_Status = cPacket_EntityStatus::STATUS_TAKEDAMAGE; + m_World->BroadcastToChunk(m_ChunkX, m_ChunkY, m_ChunkZ, Status); + + if (m_Health <= 0) + { + KilledBy( TDI.Instigator ); + } +} + + + + + +void cPawn::KilledBy( cEntity* a_Killer ) +{ + m_Health = 0; + + if( cRoot::Get()->GetPluginManager()->CallHook( cPluginManager::E_PLUGIN_KILLED, 2, this, a_Killer ) ) + { + return; // Give plugins a chance to 'unkill' the pawn. + } + + cPacket_EntityStatus Status; + Status.m_UniqueID = GetUniqueID(); + Status.m_Status = cPacket_EntityStatus::STATUS_DIE; + m_World->BroadcastToChunk(m_ChunkX, m_ChunkY, m_ChunkZ, Status); +} + + + + + +void cPawn::TeleportToEntity( cEntity* a_Entity ) +{ + TeleportTo( a_Entity->GetPosX(), a_Entity->GetPosY(), a_Entity->GetPosZ() ); +} + + + + + +void cPawn::TeleportTo( const double & a_PosX, const double & a_PosY, const double & a_PosZ ) +{ + SetPosition( a_PosX, a_PosY, a_PosZ ); + + cPacket_TeleportEntity TeleportEntity( this ); + + cRoot::Get()->GetServer()->Broadcast( TeleportEntity ); +} + + + + + +void cPawn::Tick(float a_Dt) +{ + CheckMetaDataBurn(); //Check to see if pawn should burn based on block they are on + + if (GetMetaData() == BURNING) + { + InStateBurning(a_Dt); + } +} + + + + + + +void cPawn::SetMetaData(MetaData a_MetaData) +{ + //Broadcast new status to clients in the chunk + m_MetaData = a_MetaData; + cPacket_Metadata md(a_MetaData, GetUniqueID()); + m_World->BroadcastToChunk(m_ChunkX, m_ChunkY, m_ChunkZ, md); +} + + + + + +//----Change Entity MetaData +void cPawn::CheckMetaDataBurn() +{ + char Block = GetWorld()->GetBlock((int) m_Pos.x, (int) m_Pos.y, (int) m_Pos.z); + char BlockAbove = GetWorld()->GetBlock((int) m_Pos.x, (int) m_Pos.y + 1, (int) m_Pos.z); + char BlockBelow = GetWorld()->GetBlock((int) m_Pos.x, (int) m_Pos.y - 1, (int) m_Pos.z); + + if ( + (GetMetaData() == BURNING) && + (IsBlockWater(Block) || IsBlockWater(BlockAbove) || IsBlockWater(BlockBelow)) + ) + { + SetMetaData(NORMAL); + } + else if ( + m_bBurnable && + (GetMetaData() != BURNING) && + ( + IsBlockLava(Block) || (Block == E_BLOCK_FIRE) || + IsBlockLava(BlockAbove) || (BlockAbove == E_BLOCK_FIRE) || + IsBlockLava(BlockBelow) || (BlockBelow == E_BLOCK_FIRE) + ) + ) + { + SetMetaData(BURNING); + } +} + + + + + +//What to do if On fire +void cPawn::InStateBurning(float a_Dt) +{ + m_FireDamageInterval += a_Dt; + char Block = GetWorld()->GetBlock( (int)m_Pos.x, (int)m_Pos.y, (int)m_Pos.z ); + char BlockAbove = GetWorld()->GetBlock( (int)m_Pos.x, (int)m_Pos.y + 1, (int)m_Pos.z ); + if (m_FireDamageInterval > 800) + { + + m_FireDamageInterval = 0; + TakeDamage(1, this); + + m_BurnPeriod++; + if (IsBlockLava(Block) || Block == E_BLOCK_FIRE + || IsBlockLava(BlockAbove) || BlockAbove == E_BLOCK_FIRE) + { + m_BurnPeriod = 0; + TakeDamage(6, this); + } + else + { + TakeDamage(1, this); + } + + if (m_BurnPeriod > 7) + { + SetMetaData(NORMAL); + m_BurnPeriod = 0; + } + } +} + + + + + +void cPawn::SetMaxHealth(short a_MaxHealth) +{ + this->m_MaxHealth = a_MaxHealth; + + //Reset health + m_Health = a_MaxHealth; +} + + + + + +void cPawn::SetMaxFoodLevel(short a_MaxFoodLevel) +{ + m_MaxFoodLevel = a_MaxFoodLevel; + + //Reset food level + m_FoodLevel = a_MaxFoodLevel; +} + + + + -- cgit v1.2.3