1
0
forked from mirrors/0ad

Make the playername-deduplication ("User" -> "User (2)") optional.

Have it disabled by default to fix #3604.
Prevents players from rejoining as late-observers in case they timed-out
on the client-side but not on the server-side.

This was SVN commit r17851.
This commit is contained in:
elexis
2016-03-09 15:02:38 +00:00
parent c0f321b52e
commit f2ed0098ee
5 changed files with 23 additions and 3 deletions
+16 -1
View File
@@ -901,7 +901,22 @@ bool CNetServerWorker::OnAuthenticate(void* context, CFsmEvent* event)
}
CAuthenticateMessage* message = (CAuthenticateMessage*)event->GetParamRef();
CStrW username = server.DeduplicatePlayerName(SanitisePlayerName(message->m_Name));
CStrW username = SanitisePlayerName(message->m_Name);
// Either deduplicate or prohibit join if name is in use
bool duplicatePlayernames = false;
CFG_GET_VAL("network.duplicatePlayernames", duplicatePlayernames);
if (duplicatePlayernames)
username = server.DeduplicatePlayerName(username);
else if (std::find_if(
server.m_Sessions.begin(), server.m_Sessions.end(),
[&username] (const CNetServerSession* session)
{ return session->GetUserName() == username; })
!= server.m_Sessions.end())
{
session->Disconnect(NDR_PLAYERNAME_IN_USE);
return true;
}
// Disconnect banned usernames
if (std::find(server.m_BannedPlayers.begin(), server.m_BannedPlayers.end(), username) != server.m_BannedPlayers.end())