Ive been having SteamAuth issues (failure code 6 - meaning "Steam auth ticket has been canceled") for a while now. I've tried everything I can to fix this issue, even going to a base game install with no sourcemod, and it still happens to clients. I guess its just our server host. When it happens to a client, 99% of the time its on map change.
I went looking through the TF2 source (what im referring to is below in the spoiler) and came across:
void CSteam3Server::OnValidateAuthTicketResponse( ValidateAuthTicketResponse_t *pValidateAuthTicketResponse )
{
//Msg("Steam backend:Got approval for %x\n", pGSClientApprove->m_SteamID.ConvertToUint64() );
// We got the approval message from the back end.
// Note that if we dont get it, we default to approved anyway
// dont need to send anything back
// Tell IServerGameClients if its version is high enough.
if ( g_iServerGameClientsVersion >= 4 )
{
serverGameClients->NetworkIDValidated( client->GetClientName(), client->GetNetworkIDString() );
}
}
//-----------------------------------------------------------------------------
// Purpose: helper for the two places that deny a user connect
// Input : steamID - id to kick
// eDenyReason - reason
// pchOptionalText - some kicks also have a string with them
//-----------------------------------------------------------------------------
void CSteam3Server::OnValidateAuthTicketResponseHelper( CBaseClient *cl, EAuthSessionResponse eAuthSessionResponse )
{
INetChannel *netchan = cl->GetNetChannel();
// If the client is timing out, the Steam failure is probably related (e.g. game crashed). Let's just print that the client timed out.
if ( netchan && netchan->IsTimingOut() )
{
cl->Disconnect( CLIENTNAME_TIMED_OUT, cl->GetClientName() );
return;
}
// Emit a more detailed diagnostic.
WarningAndLog( "STEAMAUTH: Client %s received failure code %d\n", cl->GetClientName(), (int)eAuthSessionResponse );
switch ( eAuthSessionResponse )
{
case k_EAuthSessionResponseUserNotConnectedToSteam:
if ( !BLanOnly() )
cl->Disconnect( INVALID_STEAM_LOGON_NOT_CONNECTED );
break;
case k_EAuthSessionResponseLoggedInElseWhere:
if ( !BLanOnly() )
cl->Disconnect( INVALID_STEAM_LOGGED_IN_ELSEWHERE );
break;
case k_EAuthSessionResponseNoLicenseOrExpired:
cl->Disconnect( "This Steam account does not own this game. \nPlease login to the correct Steam account" );
break;
case k_EAuthSessionResponseVACBanned:
if ( !BLanOnly() )
cl->Disconnect( INVALID_STEAM_VACBANSTATE );
break;
case k_EAuthSessionResponseAuthTicketCanceled:
if ( !BLanOnly() )
cl->Disconnect( INVALID_STEAM_LOGON_TICKET_CANCELED );
break;
case k_EAuthSessionResponseAuthTicketInvalidAlreadyUsed:
case k_EAuthSessionResponseAuthTicketInvalid:
if ( !BLanOnly() )
cl->Disconnect( INVALID_STEAM_TICKET );
break;
case k_EAuthSessionResponseVACCheckTimedOut:
cl->Disconnect( "An issue with your computer is blocking the VAC system. You cannot play on secure servers.\n\nhttps://support.steampowered.com/kb_article.php?ref=2117-ILZV-2837" );
break;
default:
cl->Disconnect( "Client dropped by server" );
break;
}
}
Clients are always authed until the map change, then something happens and they lose it (losing connection to our server, or losing connection to steams).
I'm not sure if it is possible or not, but would there be a way to detour around OnValidateAuthTicketResponseHelper -> k_EAuthSessionResponseAuthTicketCanceled switch statement (or something to stop getting kicked for invalid auth ticket)? I know this could open up to people spoofing their ID's, but losing a bunch of people on map change isnt worth it (plus we assign admins based on IP, and ban via IP).
I'm willing to pay for a plugin if it comes to that.
I believe your interpretation of the problem is incorrect - the error you're seeing happens when the client crashes without leaving the server. Stopping their "ghost" being kicked from the server won't help, they'll just time out a little bit later anyway.
That's what I thought too at first. I talked to a bunch of people, and their game isn't physically crashing, they are just getting kicked to the main menu. Unless you can crash without physically crashing?
We were on Windows and moved to Linux last month, it wasn't happening on windows at all. So that was super weird, nothing changed plugin or config wise between.