Broadcast playerlist removal in every world (#4201)
This commit is contained in:
parent
7d8f126ada
commit
a879778968
@ -127,13 +127,11 @@ cClientHandle::~cClientHandle()
|
|||||||
{
|
{
|
||||||
RemoveFromAllChunks();
|
RemoveFromAllChunks();
|
||||||
m_Player->GetWorld()->RemoveClientFromChunkSender(this);
|
m_Player->GetWorld()->RemoveClientFromChunkSender(this);
|
||||||
if (!m_Username.empty())
|
|
||||||
{
|
|
||||||
// Send the Offline PlayerList packet:
|
|
||||||
World->BroadcastPlayerListRemovePlayer(*m_Player, this);
|
|
||||||
}
|
|
||||||
m_Player->DestroyNoScheduling(true);
|
m_Player->DestroyNoScheduling(true);
|
||||||
}
|
}
|
||||||
|
// Send the Offline PlayerList packet:
|
||||||
|
cRoot::Get()->BroadcastPlayerListsRemovePlayer(*m_Player);
|
||||||
|
|
||||||
m_PlayerPtr.reset();
|
m_PlayerPtr.reset();
|
||||||
m_Player = nullptr;
|
m_Player = nullptr;
|
||||||
}
|
}
|
||||||
|
19
src/Root.cpp
19
src/Root.cpp
@ -755,6 +755,8 @@ void cRoot::SendPlayerLists(cPlayer * a_DestPlayer)
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void cRoot::BroadcastPlayerListsAddPlayer(const cPlayer & a_Player, const cClientHandle * a_Exclude)
|
void cRoot::BroadcastPlayerListsAddPlayer(const cPlayer & a_Player, const cClientHandle * a_Exclude)
|
||||||
{
|
{
|
||||||
for (const auto & itr : m_WorldsByName)
|
for (const auto & itr : m_WorldsByName)
|
||||||
@ -764,6 +766,21 @@ void cRoot::BroadcastPlayerListsAddPlayer(const cPlayer & a_Player, const cClien
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void cRoot::BroadcastPlayerListsRemovePlayer(const cPlayer & a_Player, const cClientHandle * a_Exclude)
|
||||||
|
{
|
||||||
|
for (const auto & itr : m_WorldsByName)
|
||||||
|
{
|
||||||
|
itr.second->BroadcastPlayerListRemovePlayer(a_Player);
|
||||||
|
} // for itr - m_WorldsByName[]
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void cRoot::BroadcastChat(const AString & a_Message, eMessageType a_ChatPrefix)
|
void cRoot::BroadcastChat(const AString & a_Message, eMessageType a_ChatPrefix)
|
||||||
{
|
{
|
||||||
for (WorldMap::iterator itr = m_WorldsByName.begin(), end = m_WorldsByName.end(); itr != end; ++itr)
|
for (WorldMap::iterator itr = m_WorldsByName.begin(), end = m_WorldsByName.end(); itr != end; ++itr)
|
||||||
@ -786,6 +803,8 @@ void cRoot::BroadcastChat(const cCompositeChat & a_Message)
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
bool cRoot::ForEachPlayer(cPlayerListCallback a_Callback)
|
bool cRoot::ForEachPlayer(cPlayerListCallback a_Callback)
|
||||||
{
|
{
|
||||||
for (WorldMap::iterator itr = m_WorldsByName.begin(), itr2 = itr; itr != m_WorldsByName.end(); itr = itr2)
|
for (WorldMap::iterator itr = m_WorldsByName.begin(), itr2 = itr; itr != m_WorldsByName.end(); itr = itr2)
|
||||||
|
@ -154,9 +154,12 @@ public:
|
|||||||
/** Send playerlist of all worlds to player */
|
/** Send playerlist of all worlds to player */
|
||||||
void SendPlayerLists(cPlayer * a_DestPlayer);
|
void SendPlayerLists(cPlayer * a_DestPlayer);
|
||||||
|
|
||||||
/** Broadcast Player through all worlds */
|
/** Broadcast playerlist addition through all worlds */
|
||||||
void BroadcastPlayerListsAddPlayer(const cPlayer & a_Player, const cClientHandle * a_Exclude = nullptr);
|
void BroadcastPlayerListsAddPlayer(const cPlayer & a_Player, const cClientHandle * a_Exclude = nullptr);
|
||||||
|
|
||||||
|
/** Broadcast playerlist removal through all worlds */
|
||||||
|
void BroadcastPlayerListsRemovePlayer(const cPlayer & a_Player, const cClientHandle * a_Exclude = nullptr);
|
||||||
|
|
||||||
// tolua_begin
|
// tolua_begin
|
||||||
|
|
||||||
/** Sends a chat message to all connected clients (in all worlds) */
|
/** Sends a chat message to all connected clients (in all worlds) */
|
||||||
|
Loading…
Reference in New Issue
Block a user