From bf838238e45f4ba96c0653f77cf1bf79e6c13c78 Mon Sep 17 00:00:00 2001 From: "mtilden@gmail.com" Date: Mon, 26 Dec 2011 01:07:35 +0000 Subject: - Make Color was using 2 extra characters which took 2 characters off the 16 max (including color codes) for scoreboard display - Added xC9 PlayerListItem packet and added code for player names to be added and removed from the scoreboard (need a catch-all for client disconnects: crashes, timeouts, etc) - Changed wid wording to a_WindowType git-svn-id: http://mc-server.googlecode.com/svn/trunk@113 0a769ca7-a7f5-676a-18bf-c427514a06d6 --- source/packets/cPacket_PlayerListItem.cpp | 27 +++++++++++++++++++++++++++ source/packets/cPacket_PlayerListItem.h | 21 +++++++++++++++++++++ source/packets/cPacket_WindowClose.h | 2 +- 3 files changed, 49 insertions(+), 1 deletion(-) create mode 100644 source/packets/cPacket_PlayerListItem.cpp create mode 100644 source/packets/cPacket_PlayerListItem.h (limited to 'source/packets') diff --git a/source/packets/cPacket_PlayerListItem.cpp b/source/packets/cPacket_PlayerListItem.cpp new file mode 100644 index 000000000..b0726dc8a --- /dev/null +++ b/source/packets/cPacket_PlayerListItem.cpp @@ -0,0 +1,27 @@ +#include "cPacket_PlayerListItem.h" + +bool cPacket_PlayerListItem::Parse( cSocket & a_Socket ) +{ + m_Socket = a_Socket; + if (!ReadString(m_PlayerName)) return false; + if (!ReadBool(m_Online)) return false; + if (!ReadShort(m_Ping)) return false; + return true; +} + +bool cPacket_PlayerListItem::Send( cSocket & a_Socket ) +{ + m_PlayerName = m_PlayerName.substr(0,16); + unsigned int TotalSize = c_Size + m_PlayerName.size()*sizeof(short); + char* Message = new char[TotalSize]; + + unsigned int i = 0; + AppendByte((char)m_PacketID, Message, i); + AppendString16(m_PlayerName, Message, i); + AppendBool(m_Online, Message, i); + AppendShort(m_Ping, Message, i); + + bool RetVal = !cSocket::IsSocketError( SendData( a_Socket, Message, TotalSize, 0 ) ); + delete [] Message; + return RetVal; +} diff --git a/source/packets/cPacket_PlayerListItem.h b/source/packets/cPacket_PlayerListItem.h new file mode 100644 index 000000000..a4e10eb74 --- /dev/null +++ b/source/packets/cPacket_PlayerListItem.h @@ -0,0 +1,21 @@ +#pragma once + +#include "cPacket.h" +#include "PacketID.h" + +class cPacket_PlayerListItem : public cPacket +{ +public: + cPacket_PlayerListItem() { m_PacketID = E_PLAYER_LIST_ITEM; } + + bool Parse(cSocket & a_Socket); + bool Send(cSocket & a_Socket); + + virtual cPacket* Clone() const { return new cPacket_PlayerListItem(*this); } + + std::string m_PlayerName; // Supports chat coloring, limited to 16 characters. + bool m_Online; + short m_Ping; + + static const unsigned int c_Size = 6; // Minimal size ( 6 + string ) +}; \ No newline at end of file diff --git a/source/packets/cPacket_WindowClose.h b/source/packets/cPacket_WindowClose.h index 1940eec0a..4784586a2 100644 --- a/source/packets/cPacket_WindowClose.h +++ b/source/packets/cPacket_WindowClose.h @@ -14,7 +14,7 @@ public: bool Parse(cSocket & a_Socket); bool Send(cSocket & a_Socket); - char m_Close; // 1 = close + char m_Close; // m_Close == cWindow WindowType number static const unsigned int c_Size = 1 + 1; }; \ No newline at end of file -- cgit v1.2.3