2016-01-19 23:57:32 +01:00
# pragma semicolon 1
# include <sourcemod>
2018-03-23 14:18:30 +01:00
# include <connect>
2016-01-19 23:57:32 +01:00
# include <geoip>
2018-07-23 11:04:35 +02:00
# include <morecolors>
2016-01-19 23:57:32 +01:00
# pragma newdecls required
2018-07-23 11:04:35 +02:00
char g_sDataFile [ 128 ] ;
char g_sCustomMessageFile [ 128 ] ;
Database g_hDatabase ;
Handle g_hCustomMessageFile ;
Handle g_hCustomMessageFile2 ;
# define MSGLENGTH 100
//----------------------------------------------------------------------------------------------------
// Purpose:
//----------------------------------------------------------------------------------------------------
2016-01-19 23:57:32 +01:00
public Plugin myinfo = {
name = " Connect Announce " ,
2018-07-23 11:04:35 +02:00
author = " Neon + Botox " ,
description = " Connect Announcer " ,
version = " 2.0 " ,
2016-01-19 23:57:32 +01:00
url = " "
}
2018-07-23 11:04:35 +02:00
//----------------------------------------------------------------------------------------------------
// Purpose:
//----------------------------------------------------------------------------------------------------
public void OnPluginStart ( )
2016-01-19 23:57:32 +01:00
{
2018-07-23 11:04:35 +02:00
BuildPath ( Path_SM , g_sCustomMessageFile , sizeof ( g_sCustomMessageFile ) , " configs/connect_announce/custom-messages.cfg " ) ;
BuildPath ( Path_SM , g_sDataFile , sizeof ( g_sDataFile ) , " configs/connect_announce/settings.cfg " ) ;
char error [ 255 ] ;
if ( SQL_CheckConfig ( " hlstatsx " ) )
{
g_hDatabase = SQL_Connect ( " hlstatsx " , true , error , sizeof ( error ) ) ;
}
if ( g_hDatabase = = null )
{
LogError ( " Could not connect to database: %s " , error ) ;
}
RegAdminCmd ( " sm_joinmsg " , Command_JoinMsg , ADMFLAG_CUSTOM1 , " Sets a custom message which will be shown upon connecting to the server " ) ;
RegAdminCmd ( " sm_resetjoinmsg " , Command_ResetJoinMsg , ADMFLAG_CUSTOM1 , " Resets your custom connect message " ) ;
}
//----------------------------------------------------------------------------------------------------
// Purpose:
//----------------------------------------------------------------------------------------------------
public Action Command_JoinMsg ( int client , int args )
{
if ( ! client )
{
ReplyToCommand ( client , " [ConnectAnnounce] Cannot use command from server console " ) ;
return Plugin_Handled ;
}
char sAuth [ 32 ] ;
GetClientAuthId ( client , AuthId_Steam2 , sAuth , sizeof ( sAuth ) ) ;
if ( g_hCustomMessageFile ! = null )
CloseHandle ( g_hCustomMessageFile ) ;
g_hCustomMessageFile = CreateKeyValues ( " custom_messages " ) ;
if ( ! FileToKeyValues ( g_hCustomMessageFile , g_sCustomMessageFile ) )
{
SetFailState ( " [ConnectAnnounce] Config file missing! " ) ;
return Plugin_Handled ;
}
KvRewind ( g_hCustomMessageFile ) ;
if ( args < 1 )
{
if ( KvJumpToKey ( g_hCustomMessageFile , sAuth ) )
{
char sCustomMessage [ 256 ] ;
KvGetString ( g_hCustomMessageFile , " message " , sCustomMessage , sizeof ( sCustomMessage ) , " " ) ;
if ( StrEqual ( sCustomMessage , " reset " ) )
{
CPrintToChat ( client , " [ConnectAnnounce] No Join Message set! Use sm_joinmsg <your message here> to set one. " ) ;
return Plugin_Handled ;
}
CPrintToChat ( client , " [ConnectAnnounce] Your Join Message is: %s " , sCustomMessage ) ;
}
else
CPrintToChat ( client , " [ConnectAnnounce] No Join Message set! Use sm_joinmsg <your message here> to set one. " ) ;
}
else
{
char sArg [ 512 ] ;
int iLength ;
iLength = GetCmdArgString ( sArg , sizeof ( sArg ) ) ;
if ( iLength > MSGLENGTH )
{
ReplyToCommand ( client , " [ConnectAnnounce] Maximum message length is %d characters! " , MSGLENGTH ) ;
return Plugin_Handled ;
}
if ( KvJumpToKey ( g_hCustomMessageFile , sAuth , true ) )
KvSetString ( g_hCustomMessageFile , " message " , sArg ) ;
else
{
SetFailState ( " [ConnectAnnounce] Could not find/create Key Value! " ) ;
return Plugin_Handled ;
}
KvRewind ( g_hCustomMessageFile ) ;
KeyValuesToFile ( g_hCustomMessageFile , g_sCustomMessageFile ) ;
CPrintToChat ( client , " [ConnectAnnounce] Your Join Message is: %s " , sArg ) ;
}
KvRewind ( g_hCustomMessageFile ) ;
return Plugin_Handled ;
}
//----------------------------------------------------------------------------------------------------
// Purpose:
//----------------------------------------------------------------------------------------------------
public Action Command_ResetJoinMsg ( int client , int args )
{
if ( ! client )
{
ReplyToCommand ( client , " [ConnectAnnounce] Cannot use command from server console " ) ;
return Plugin_Handled ;
}
char sAuth [ 32 ] ;
GetClientAuthId ( client , AuthId_Steam2 , sAuth , sizeof ( sAuth ) ) ;
if ( g_hCustomMessageFile ! = null )
CloseHandle ( g_hCustomMessageFile ) ;
g_hCustomMessageFile = CreateKeyValues ( " custom_messages " ) ;
if ( ! FileToKeyValues ( g_hCustomMessageFile , g_sCustomMessageFile ) )
{
SetFailState ( " [ConnectAnnounce] Config file missing! " ) ;
return Plugin_Handled ;
}
KvRewind ( g_hCustomMessageFile ) ;
if ( KvJumpToKey ( g_hCustomMessageFile , sAuth , true ) )
KvSetString ( g_hCustomMessageFile , " message " , " reset " ) ;
KvRewind ( g_hCustomMessageFile ) ;
KeyValuesToFile ( g_hCustomMessageFile , g_sCustomMessageFile ) ;
CPrintToChat ( client , " [ConnectAnnounce] Your Join Message got reset. " ) ;
return Plugin_Handled ;
}
//----------------------------------------------------------------------------------------------------
// Purpose:
//----------------------------------------------------------------------------------------------------
public void TQueryCB ( Handle owner , Handle rs , const char [ ] error , any data )
{
int client = 0 ;
if ( ( client = GetClientOfUserId ( data ) ) = = 0 )
{
return ;
}
int iRank = - 1 ;
if ( SQL_GetRowCount ( rs ) > 0 )
{
int iField ;
SQL_FetchRow ( rs ) ;
SQL_FieldNameToNum ( rs , " rank " , iField ) ;
iRank = SQL_FetchInt ( rs , iField ) ;
iRank + = 1 ;
}
Handle hFile = OpenFile ( g_sDataFile , " r " ) ;
static char sRawMsg [ 301 ] ;
if ( hFile ! = INVALID_HANDLE )
{
ReadFileLine ( hFile , sRawMsg , sizeof ( sRawMsg ) ) ;
TrimString ( sRawMsg ) ;
CloseHandle ( hFile ) ;
}
else
{
LogError ( " [SM] File not found! (configs/ConnectAnnounce/settings.txt) " ) ;
2016-01-19 23:57:32 +01:00
return ;
2018-07-23 11:04:35 +02:00
}
2016-01-19 23:57:32 +01:00
static char sIP [ 16 ] ;
2018-03-23 14:18:30 +01:00
static char sAuth [ 32 ] ;
2016-01-19 23:57:32 +01:00
static char sCountry [ 32 ] ;
2018-07-23 11:04:35 +02:00
static char sName [ 128 ] ;
2016-01-19 23:57:32 +01:00
GetClientAuthId ( client , AuthId_Steam2 , sAuth , sizeof ( sAuth ) ) ;
2018-07-23 11:04:35 +02:00
GetClientName ( client , sName , sizeof ( sName ) ) ;
AdminId aid ;
if ( StrContains ( sRawMsg , " {PLAYERTYPE} " ) )
{
aid = GetUserAdmin ( client ) ;
if ( GetAdminFlag ( aid , Admin_Generic ) )
{
ReplaceString ( sRawMsg , sizeof ( sRawMsg ) , " {PLAYERTYPE} " , " Admin " ) ;
}
else if ( GetAdminFlag ( aid , Admin_Custom1 ) )
{
ReplaceString ( sRawMsg , sizeof ( sRawMsg ) , " {PLAYERTYPE} " , " VIP " ) ;
}
else if ( GetAdminFlag ( aid , Admin_Custom6 ) )
{
ReplaceString ( sRawMsg , sizeof ( sRawMsg ) , " {PLAYERTYPE} " , " Member " ) ;
}
else
{
ReplaceString ( sRawMsg , sizeof ( sRawMsg ) , " {PLAYERTYPE} " , " Player " ) ;
}
}
if ( StrContains ( sRawMsg , " {RANK} " ) )
{
if ( iRank ! = - 1 )
{
char sBuffer [ 16 ] ;
Format ( sBuffer , sizeof ( sBuffer ) , " [#%d] " , iRank ) ;
ReplaceString ( sRawMsg , sizeof ( sRawMsg ) , " {RANK} " , sBuffer ) ;
}
}
2016-01-19 23:57:32 +01:00
2018-07-23 11:04:35 +02:00
if ( StrContains ( sRawMsg , " {NOSTEAM} " ) )
{
if ( ! SteamClientAuthenticated ( sAuth ) )
ReplaceString ( sRawMsg , sizeof ( sRawMsg ) , " {NOSTEAM} " , " <NoSteam> " ) ;
else
ReplaceString ( sRawMsg , sizeof ( sRawMsg ) , " {NOSTEAM} " , " " ) ;
}
2018-03-23 14:18:30 +01:00
2018-07-23 11:04:35 +02:00
if ( StrContains ( sRawMsg , " {STEAMID} " ) )
{
ReplaceString ( sRawMsg , sizeof ( sRawMsg ) , " {STEAMID} " , sAuth ) ;
}
if ( StrContains ( sRawMsg , " {NAME} " ) )
{
ReplaceString ( sRawMsg , sizeof ( sRawMsg ) , " {NAME} " , sName ) ;
}
if ( StrContains ( sRawMsg , " {COUNTRY} " ) )
{
if ( GetClientIP ( client , sIP , sizeof ( sIP ) ) & & GeoipCountry ( sIP , sCountry , sizeof ( sCountry ) ) )
{
char sBuffer [ 128 ] ;
Format ( sBuffer , sizeof ( sBuffer ) , " from %s " , sCountry ) ;
ReplaceString ( sRawMsg , sizeof ( sRawMsg ) , " {COUNTRY} " , sBuffer ) ;
}
else
ReplaceString ( sRawMsg , sizeof ( sRawMsg ) , " {COUNTRY} " , " " ) ;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////
if ( g_hCustomMessageFile2 ! = null )
CloseHandle ( g_hCustomMessageFile2 ) ;
g_hCustomMessageFile2 = CreateKeyValues ( " custom_messages " ) ;
if ( ! FileToKeyValues ( g_hCustomMessageFile2 , g_sCustomMessageFile ) )
{
SetFailState ( " [ConnectAnnounce] Config file missing! " ) ;
return ;
}
KvRewind ( g_hCustomMessageFile2 ) ;
char sFinalMessage [ 512 ] ;
char sCustomMessage [ 256 ] ;
if ( KvJumpToKey ( g_hCustomMessageFile2 , sAuth ) )
{
KvGetString ( g_hCustomMessageFile2 , " message " , sCustomMessage , sizeof ( sCustomMessage ) , " " ) ;
if ( StrEqual ( sCustomMessage , " reset " ) )
CPrintToChatAll ( sRawMsg ) ;
else
{
Format ( sFinalMessage , sizeof ( sFinalMessage ) , " %s %s " , sRawMsg , sCustomMessage ) ;
CPrintToChatAll ( sFinalMessage ) ;
}
}
2016-01-19 23:57:32 +01:00
else
2018-07-23 11:04:35 +02:00
CPrintToChatAll ( sRawMsg ) ;
}
//----------------------------------------------------------------------------------------------------
// Purpose:
//----------------------------------------------------------------------------------------------------
public void OnClientPostAdminCheck ( int client )
{
if ( IsFakeClient ( client ) )
return ;
static char sAuth [ 32 ] ;
GetClientAuthId ( client , AuthId_Steam2 , sAuth , sizeof ( sAuth ) ) ;
strcopy ( sAuth , sizeof ( sAuth ) , sAuth [ 8 ] ) ;
char sQuery [ 512 ] ;
Format ( sQuery , sizeof ( sQuery ) , " SELECT COUNT(*) AS rank FROM hlstats_Players WHERE hlstats_Players.game = 'css-ze' AND hideranking = 0 AND skill > (SELECT skill from hlstats_Players JOIN hlstats_PlayerUniqueIds ON hlstats_Players.playerId = hlstats_PlayerUniqueIds.playerId WHERE uniqueId = '%s' AND hlstats_PlayerUniqueIds.game = 'css-ze') " , sAuth ) ;
SQL_TQuery ( g_hDatabase , TQueryCB , sQuery , GetClientUserId ( client ) ) ;
2016-01-19 23:57:32 +01:00
}