2018-03-24 17:20:48 +01:00
# pragma semicolon 1
# include <sourcemod>
# include <basecomm>
# include <connect>
# pragma newdecls required
2018-03-26 21:44:05 +02:00
/* CONVARS */
ConVar g_hCvar_BlockAdmin ;
ConVar g_hCvar_BlockVoice ;
2018-07-20 15:52:46 +02:00
2018-09-09 01:48:11 +02:00
/* DATABASE */
2018-09-09 19:16:30 +02:00
Database g_hDatabaseAntiSpoofing ;
2018-09-09 01:48:11 +02:00
2018-03-24 17:20:48 +01:00
//----------------------------------------------------------------------------------------------------
// Purpose:
//----------------------------------------------------------------------------------------------------
public Plugin myinfo =
{
name = " NoSteamManager " ,
author = " zaCade " ,
description = " Manage No-Steam clients, denying admin access, ect. " ,
2018-09-10 15:07:00 +02:00
version = " 1.1.0 "
2018-03-24 17:20:48 +01:00
} ;
//----------------------------------------------------------------------------------------------------
// Purpose:
//----------------------------------------------------------------------------------------------------
public void OnPluginStart ( )
{
2018-03-27 16:42:12 +02:00
g_hCvar_BlockAdmin = CreateConVar ( " sm_nosteam_block_admin " , " 1 " , " Should people marked as nosteam be blocked from admin? " , FCVAR_NONE , true , 0.0 , true , 1.0 ) ;
g_hCvar_BlockVoice = CreateConVar ( " sm_nosteam_block_voice " , " 1 " , " Should people marked as nosteam be blocked from voice? " , FCVAR_NONE , true , 0.0 , true , 1.0 ) ;
2018-03-26 21:44:05 +02:00
2018-03-24 17:20:48 +01:00
AddMultiTargetFilter ( " @steam " , Filter_Steam , " Steam Players " , false ) ;
AddMultiTargetFilter ( " @nosteam " , Filter_NoSteam , " No-Steam Players " , false ) ;
RegConsoleCmd ( " sm_nosteam " , Command_DisplaySteamStats , " Shows the number of Steam and No-Steam players " ) ;
RegConsoleCmd ( " sm_steam " , Command_DisplaySteamStats , " Shows the number of Steam and No-Steam players " ) ;
2018-03-26 21:44:05 +02:00
AutoExecConfig ( ) ;
2018-09-09 01:48:11 +02:00
char sError [ 256 ] ;
2018-09-09 19:16:30 +02:00
if ( SQL_CheckConfig ( " antispoofing " ) )
g_hDatabaseAntiSpoofing = SQL_Connect ( " antispoofing " , true , sError , sizeof ( sError ) ) ;
if ( g_hDatabaseAntiSpoofing = = null )
2018-09-09 01:48:11 +02:00
LogError ( " Could not connect to database: %s " , sError ) ;
2018-03-24 17:20:48 +01:00
}
//----------------------------------------------------------------------------------------------------
// Purpose:
//----------------------------------------------------------------------------------------------------
public void OnPluginEnd ( )
{
RemoveMultiTargetFilter ( " @steam " , Filter_Steam ) ;
RemoveMultiTargetFilter ( " @nosteam " , Filter_NoSteam ) ;
}
//----------------------------------------------------------------------------------------------------
// Purpose:
//----------------------------------------------------------------------------------------------------
public Action Command_DisplaySteamStats ( int client , int args )
{
char aBuf [ 1024 ] ;
char aBuf2 [ MAX_NAME_LENGTH ] ;
for ( int i = 1 ; i < = MaxClients ; i + + )
{
if ( IsClientInGame ( i ) & & ! IsFakeClient ( i ) )
{
char sSteamID [ 32 ] ;
GetClientAuthId ( i , AuthId_Steam2 , sSteamID , sizeof ( sSteamID ) ) ;
if ( ! SteamClientAuthenticated ( sSteamID ) )
{
GetClientName ( i , aBuf2 , sizeof ( aBuf2 ) ) ;
StrCat ( aBuf , sizeof ( aBuf ) , aBuf2 ) ;
StrCat ( aBuf , sizeof ( aBuf ) , " , " ) ;
}
}
}
if ( strlen ( aBuf ) )
{
aBuf [ strlen ( aBuf ) - 2 ] = 0 ;
ReplyToCommand ( client , " [SM] No-Steam clients online: %s " , aBuf ) ;
}
else
ReplyToCommand ( client , " [SM] No-Steam clients online: none " ) ;
return Plugin_Handled ;
}
//----------------------------------------------------------------------------------------------------
// Purpose:
//----------------------------------------------------------------------------------------------------
public bool Filter_Steam ( const char [ ] sPattern , Handle hClients )
{
for ( int i = 1 ; i < = MaxClients ; i + + )
{
if ( IsClientInGame ( i ) & & ! IsFakeClient ( i ) )
{
char sSteamID [ 32 ] ;
GetClientAuthId ( i , AuthId_Steam2 , sSteamID , sizeof ( sSteamID ) ) ;
if ( SteamClientAuthenticated ( sSteamID ) )
PushArrayCell ( hClients , i ) ;
}
}
return true ;
}
//----------------------------------------------------------------------------------------------------
// Purpose:
//----------------------------------------------------------------------------------------------------
public bool Filter_NoSteam ( const char [ ] sPattern , Handle hClients )
{
for ( int i = 1 ; i < = MaxClients ; i + + )
{
if ( IsClientInGame ( i ) & & ! IsFakeClient ( i ) )
{
char sSteamID [ 32 ] ;
GetClientAuthId ( i , AuthId_Steam2 , sSteamID , sizeof ( sSteamID ) ) ;
if ( ! SteamClientAuthenticated ( sSteamID ) )
PushArrayCell ( hClients , i ) ;
}
}
return true ;
}
//----------------------------------------------------------------------------------------------------
// Purpose:
//----------------------------------------------------------------------------------------------------
public Action OnClientPreAdminCheck ( int client )
{
2018-07-15 23:38:20 +02:00
if ( ! g_hCvar_BlockAdmin . BoolValue )
2018-03-26 21:44:05 +02:00
return Plugin_Continue ;
2018-07-15 23:38:20 +02:00
if ( IsFakeClient ( client ) | | IsClientSourceTV ( client ) )
2018-03-24 17:20:48 +01:00
return Plugin_Continue ;
char sSteamID [ 32 ] ;
GetClientAuthId ( client , AuthId_Steam2 , sSteamID , sizeof ( sSteamID ) ) ;
if ( ! SteamClientAuthenticated ( sSteamID ) )
{
LogMessage ( " %L was not authenticated with steam, denying admin. " , client ) ;
NotifyPostAdminCheck ( client ) ;
2018-09-09 01:48:11 +02:00
char sQuery [ 512 ] ;
2018-09-10 15:07:00 +02:00
Format ( sQuery , sizeof ( sQuery ) , " SELECT * from authenticated_steam_ids WHERE steam_auth = '%s' " , sSteamID ) ;
SQL_TQuery ( g_hDatabaseAntiSpoofing , TQueryCB , sQuery , GetClientUserId ( client ) ) ;
2018-09-09 01:48:11 +02:00
2018-03-24 17:20:48 +01:00
return Plugin_Handled ;
}
2018-09-09 19:16:30 +02:00
2018-09-09 19:32:22 +02:00
char sIP [ 32 ] ;
GetClientIP ( client , sIP , sizeof ( sIP ) ) ;
int iTimestamp = GetTime ( ) ;
char sQuery [ 512 ] ;
Format ( sQuery , sizeof ( sQuery ) , " INSERT INTO authenticated_steam_ids (steam_auth, last_ip, last_connect) VALUES ('%s', '%s', %d) ON DUPLICATE KEY UPDATE last_ip = '%s', last_connect = %d; " , sSteamID , sIP , iTimestamp , sIP , iTimestamp ) ;
2018-09-10 15:07:00 +02:00
SQL_FastQuery ( g_hDatabaseAntiSpoofing , sQuery ) ;
2018-03-24 17:20:48 +01:00
return Plugin_Continue ;
}
2018-03-24 17:22:05 +01:00
//----------------------------------------------------------------------------------------------------
2018-03-24 17:20:48 +01:00
// Purpose:
//----------------------------------------------------------------------------------------------------
public void OnClientPostAdminCheck ( int client )
{
2018-07-15 23:38:20 +02:00
if ( ! g_hCvar_BlockVoice . BoolValue )
2018-03-26 21:44:05 +02:00
return ;
2018-07-15 23:38:20 +02:00
if ( IsFakeClient ( client ) | | IsClientSourceTV ( client ) )
2018-03-24 17:20:48 +01:00
return ;
char sSteamID [ 32 ] ;
GetClientAuthId ( client , AuthId_Steam2 , sSteamID , sizeof ( sSteamID ) ) ;
if ( ! SteamClientAuthenticated ( sSteamID ) )
{
LogMessage ( " %L was not authenticated with steam, muting client. " , client ) ;
BaseComm_SetClientMute ( client , true ) ;
2018-09-09 01:48:11 +02:00
return ;
}
}
2018-03-24 17:20:48 +01:00
2018-09-09 01:48:11 +02:00
//----------------------------------------------------------------------------------------------------
// Purpose:
//----------------------------------------------------------------------------------------------------
public void TQueryCB ( Handle owner , Handle rs , const char [ ] error , any data )
{
int client = 0 ;
if ( ( client = GetClientOfUserId ( data ) ) = = 0 )
2018-03-24 17:20:48 +01:00
return ;
2018-09-09 01:48:11 +02:00
if ( SQL_GetRowCount ( rs ) > 0 )
{
2018-09-10 15:07:00 +02:00
char sCurrentIP [ 32 ] ;
GetClientIP ( client , sCurrentIP , sizeof ( sCurrentIP ) ) ;
2018-09-09 19:16:30 +02:00
2018-09-10 15:07:00 +02:00
char sStoredIP [ 32 ] ;
int iField ;
2018-09-09 19:16:30 +02:00
2018-09-10 15:07:00 +02:00
SQL_FetchRow ( rs ) ;
SQL_FieldNameToNum ( rs , " last_ip " , iField ) ;
SQL_FetchString ( rs , iField , sStoredIP , sizeof ( sStoredIP ) ) ;
delete rs ;
if ( StrEqual ( sCurrentIP , sStoredIP ) )
{
LogMessage ( " %L tried to join with a known authenticated SteamID while not being authentiated with steam. Allowing connection because IPs match (%s). " , client , sCurrentIP ) ;
}
else
{
LogMessage ( " %L tried to join with a known authenticated SteamID while not being authentiated with steam. Refusing connection because IPs do not match (Stored: %s)(Current: %s). " , client , sStoredIP , sCurrentIP ) ;
KickClient ( client , " Trying to join with a known authenticated SteamID while not being authentiated with steam. " ) ;
}
}
}