diff --git a/source/cPlayer.cpp b/source/cPlayer.cpp index d0dfa879..41bb2494 100644 --- a/source/cPlayer.cpp +++ b/source/cPlayer.cpp @@ -16,6 +16,7 @@ #include "cTracer.h" #include "cRoot.h" #include "cMakeDir.h" +#include "cTimer.h" #include "packets/cPacket_NamedEntitySpawn.h" #include "packets/cPacket_EntityLook.h" @@ -82,6 +83,8 @@ cPlayer::cPlayer(cClientHandle* a_Client, const char* a_PlayerName) { m_EntityType = E_PLAYER; m_Inventory = new cInventory( this ); + cTimer t1; + m_LastPlayerListTime = t1.GetNowTime(); m_TimeLastTeleportPacket = cWorld::GetTime(); m_TimeLastPickupCheck = cWorld::GetTime(); @@ -234,14 +237,18 @@ void cPlayer::Tick(float a_Dt) InStateBurning(a_Dt); } - // Send Player List - cWorld::PlayerList PlayerList = cRoot::Get()->GetWorld()->GetAllPlayers(); - for( cWorld::PlayerList::iterator itr = PlayerList.begin(); itr != PlayerList.end(); ++itr ) - { - if ((*itr) && (*itr)->GetClientHandle() && !((*itr)->GetClientHandle()->IsDestroyed())) { - cPacket_PlayerListItem PlayerList(GetColor() + GetName(), true, (*itr)->GetClientHandle()->GetPing()); - (*itr)->GetClientHandle()->Send( PlayerList ); + cTimer t1; + // Send Player List (Once per m_LastPlayerListTime/1000 second(s)) + if (m_LastPlayerListTime + cPlayer::E_PLAYER_LIST_TIME <= t1.GetNowTime()) { + cWorld::PlayerList PlayerList = cRoot::Get()->GetWorld()->GetAllPlayers(); + for( cWorld::PlayerList::iterator itr = PlayerList.begin(); itr != PlayerList.end(); ++itr ) + { + if ((*itr) && (*itr)->GetClientHandle() && !((*itr)->GetClientHandle()->IsDestroyed())) { + cPacket_PlayerListItem PlayerList(GetColor() + GetName(), true, (*itr)->GetClientHandle()->GetPing()); + (*itr)->GetClientHandle()->Send( PlayerList ); + } } + m_LastPlayerListTime = t1.GetNowTime(); } } diff --git a/source/cPlayer.h b/source/cPlayer.h index e25fb1b0..6f52b3f1 100644 --- a/source/cPlayer.h +++ b/source/cPlayer.h @@ -112,5 +112,8 @@ protected: int m_GameMode; std::string m_IP; + long long m_LastPlayerListTime; + static const unsigned short E_PLAYER_LIST_TIME = 1000; // 1000 = once per second + cClientHandle* m_ClientHandle; }; //tolua_export