1
0

- Cleaned up PLI Packet and its creation/sending and fixed bug of player not being removed on scoreboard (forgot to send color in the removal packet)

git-svn-id: http://mc-server.googlecode.com/svn/trunk@116 0a769ca7-a7f5-676a-18bf-c427514a06d6
This commit is contained in:
mtilden@gmail.com 2011-12-26 02:35:49 +00:00
parent c35db25269
commit a85ea1c9ac
5 changed files with 22 additions and 11 deletions

View File

@ -156,7 +156,6 @@ cClientHandle::cClientHandle(const cSocket & a_Socket)
m_pState->PacketMap[E_UPDATE_SIGN] = new cPacket_UpdateSign; m_pState->PacketMap[E_UPDATE_SIGN] = new cPacket_UpdateSign;
m_pState->PacketMap[E_RESPAWN] = new cPacket_Respawn; m_pState->PacketMap[E_RESPAWN] = new cPacket_Respawn;
m_pState->PacketMap[E_PING] = new cPacket_Ping; m_pState->PacketMap[E_PING] = new cPacket_Ping;
m_pState->PacketMap[E_PLAYER_LIST_ITEM] = new cPacket_PlayerListItem;
memset( m_LoadedChunks, 0x00, sizeof(cChunk*)*VIEWDISTANCE*VIEWDISTANCE ); memset( m_LoadedChunks, 0x00, sizeof(cChunk*)*VIEWDISTANCE*VIEWDISTANCE );
@ -1166,17 +1165,18 @@ void cClientHandle::HandlePacket( cPacket* a_Packet )
cWorld::PlayerList PlayerList = cRoot::Get()->GetWorld()->GetAllPlayers(); cWorld::PlayerList PlayerList = cRoot::Get()->GetWorld()->GetAllPlayers();
for( cWorld::PlayerList::iterator itr = PlayerList.begin(); itr != PlayerList.end(); ++itr ) for( cWorld::PlayerList::iterator itr = PlayerList.begin(); itr != PlayerList.end(); ++itr )
{ {
cPacket_PlayerListItem PlayerList; cPacket_PlayerListItem *PlayerList = new cPacket_PlayerListItem(m_Player->GetColor() + GetUsername(), false, (short)9999);
PlayerList.m_PlayerName = GetUsername(); (*itr)->GetClientHandle()->Send( *PlayerList );
PlayerList.m_Online = false;
PlayerList.m_Ping = (short)5;
(*itr)->GetClientHandle()->Send( PlayerList );
} }
} }
Destroy(); Destroy();
return; return;
} }
break; break;
case E_KEEP_ALIVE:
// TODO: Handle player ping per minecraft
//cPacket_KeepAlive* PacketData = reinterpret_cast<cPacket_KeepAlive*>(a_Packet);
break;
default: default:
break; break;
} }

View File

@ -51,6 +51,8 @@ public:
static void AuthenticateThread( void* a_Param ); static void AuthenticateThread( void* a_Param );
const char* GetUsername(); const char* GetUsername();
inline short GetPing() { return m_Ping; }
private: private:
void HandlePacket( cPacket* a_Packet ); void HandlePacket( cPacket* a_Packet );
void RemovePacket( cPacket * a_Packet ); void RemovePacket( cPacket * a_Packet );
@ -66,6 +68,9 @@ private:
float m_TimeLastPacket; float m_TimeLastPacket;
// TODO: ping calculation per minecraft
short m_Ping;
bool m_bLoggedIn; bool m_bLoggedIn;
bool m_bSendLoginResponse; bool m_bSendLoginResponse;

View File

@ -239,11 +239,8 @@ void cPlayer::Tick(float a_Dt)
for( cWorld::PlayerList::iterator itr = PlayerList.begin(); itr != PlayerList.end(); ++itr ) for( cWorld::PlayerList::iterator itr = PlayerList.begin(); itr != PlayerList.end(); ++itr )
{ {
if ((*itr) && (*itr)->GetClientHandle() && !((*itr)->GetClientHandle()->IsDestroyed())) { if ((*itr) && (*itr)->GetClientHandle() && !((*itr)->GetClientHandle()->IsDestroyed())) {
cPacket_PlayerListItem PlayerList; cPacket_PlayerListItem *PlayerList = new cPacket_PlayerListItem(GetColor() + GetName(), true, (*itr)->GetClientHandle()->GetPing());
PlayerList.m_PlayerName = GetColor() + GetName(); (*itr)->GetClientHandle()->Send( *PlayerList );
PlayerList.m_Online = true;
PlayerList.m_Ping = (short)5;
(*itr)->GetClientHandle()->Send( PlayerList );
} }
} }

View File

@ -1,5 +1,13 @@
#include "cPacket_PlayerListItem.h" #include "cPacket_PlayerListItem.h"
cPacket_PlayerListItem::cPacket_PlayerListItem(std::string a_PlayerName, bool a_Online, short a_Ping)
{
m_PacketID = E_PLAYER_LIST_ITEM;
m_PlayerName = a_PlayerName;
m_Online = a_Online;
m_Ping = a_Ping;
}
bool cPacket_PlayerListItem::Parse( cSocket & a_Socket ) bool cPacket_PlayerListItem::Parse( cSocket & a_Socket )
{ {
m_Socket = a_Socket; m_Socket = a_Socket;

View File

@ -7,6 +7,7 @@ class cPacket_PlayerListItem : public cPacket
{ {
public: public:
cPacket_PlayerListItem() { m_PacketID = E_PLAYER_LIST_ITEM; } cPacket_PlayerListItem() { m_PacketID = E_PLAYER_LIST_ITEM; }
cPacket_PlayerListItem(std::string a_PlayerName, bool a_Online, short a_Ping);
bool Parse(cSocket & a_Socket); bool Parse(cSocket & a_Socket);
bool Send(cSocket & a_Socket); bool Send(cSocket & a_Socket);