217 lines
		
	
	
		
			5.8 KiB
		
	
	
	
		
			SourcePawn
		
	
	
	
	
	
			
		
		
	
	
			217 lines
		
	
	
		
			5.8 KiB
		
	
	
	
		
			SourcePawn
		
	
	
	
	
	
#pragma semicolon 1
 | 
						|
 | 
						|
#include <sourcemod>
 | 
						|
#include <multicolors>
 | 
						|
#include <ccc>
 | 
						|
 | 
						|
bool g_bNewPlayer[MAXPLAYERS + 1] = { false, ... };
 | 
						|
bool g_bNewPlayerChatBlock[MAXPLAYERS + 1] = { false, ...};
 | 
						|
 | 
						|
ConVar g_cvServerType;
 | 
						|
char g_cServerMessage[128];
 | 
						|
 | 
						|
Database g_hDatabase;
 | 
						|
 | 
						|
public Plugin myinfo =
 | 
						|
{
 | 
						|
	name        = "ConnectAnnounceNewPlayers",
 | 
						|
	author      = "Dogan",
 | 
						|
	description = "Connect Announcer for new Players",
 | 
						|
	version     = "1.3.0",
 | 
						|
	url         = ""
 | 
						|
}
 | 
						|
 | 
						|
public void OnPluginStart()
 | 
						|
{
 | 
						|
	Database.Connect(SQL_OnDatabaseConnect, "unloze_newplayers");
 | 
						|
 | 
						|
	g_cvServerType = CreateConVar("sm_server_type", "1", "Server related private message for new players: 1 = ze; 2 = mg; 3 = zr; any other value = neutral");
 | 
						|
 | 
						|
	AddMultiTargetFilter("@newplayer", Filter_NewPlayers, "New Players", false);
 | 
						|
	RegConsoleCmd("sm_newplayer", Command_DisplayNewPlayers, "Shows the number of new players");
 | 
						|
 | 
						|
	AutoExecConfig(true, "plugin.ConnectAnnounceNewPlayers");
 | 
						|
	GetConVars();
 | 
						|
}
 | 
						|
 | 
						|
public void OnPluginEnd()
 | 
						|
{
 | 
						|
	RemoveMultiTargetFilter("@newplayer", Filter_NewPlayers);
 | 
						|
}
 | 
						|
 | 
						|
public void GetConVars()
 | 
						|
{
 | 
						|
	if(g_cvServerType.IntValue == 1)
 | 
						|
	{
 | 
						|
		g_cServerMessage = "Zombie Escape";
 | 
						|
	}
 | 
						|
	else if(g_cvServerType.IntValue == 2)
 | 
						|
	{
 | 
						|
		g_cServerMessage = "Minigames";
 | 
						|
	}
 | 
						|
	else if(g_cvServerType.IntValue == 3)
 | 
						|
	{
 | 
						|
		g_cServerMessage = "Zombie Riot";
 | 
						|
	}
 | 
						|
	else
 | 
						|
	{
 | 
						|
		g_cServerMessage = "";
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
public void ConVarChange(ConVar convar, char[] oldValue, char[] newValue)
 | 
						|
{
 | 
						|
	GetConVars();
 | 
						|
}
 | 
						|
 | 
						|
public bool Filter_NewPlayers(const char[] sPattern, Handle hClients)
 | 
						|
{
 | 
						|
	for(int i = 1; i <= MaxClients; i++)
 | 
						|
	{
 | 
						|
		if(IsClientInGame(i) && !IsFakeClient(i))
 | 
						|
		{
 | 
						|
			if(g_bNewPlayer[i])
 | 
						|
				PushArrayCell(hClients, i);
 | 
						|
		}
 | 
						|
	}
 | 
						|
	return true;
 | 
						|
}
 | 
						|
 | 
						|
public Action Command_DisplayNewPlayers(int client, int args)
 | 
						|
{
 | 
						|
	char aBuf[1024];
 | 
						|
	char aBuf2[MAX_NAME_LENGTH];
 | 
						|
 | 
						|
	for(int i = 1; i <= MaxClients; i++)
 | 
						|
	{
 | 
						|
		if(IsClientInGame(i) && !IsFakeClient(i))
 | 
						|
		{
 | 
						|
			if(g_bNewPlayer[i])
 | 
						|
			{
 | 
						|
				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] New Players online: %s", aBuf);
 | 
						|
	}
 | 
						|
	else
 | 
						|
		ReplyToCommand(client, "[SM] New Players online: none");
 | 
						|
 | 
						|
	return Plugin_Handled;
 | 
						|
}
 | 
						|
 | 
						|
public void OnClientPostAdminCheck(int client)
 | 
						|
{
 | 
						|
	if(IsFakeClient(client) || IsClientSourceTV(client))
 | 
						|
		return;
 | 
						|
 | 
						|
	char sAuthID[32];
 | 
						|
	GetClientAuthId(client, AuthId_Steam2, sAuthID, sizeof(sAuthID));
 | 
						|
 | 
						|
	char sQuery[512];
 | 
						|
	Format(sQuery, sizeof(sQuery), "SELECT * FROM connections WHERE auth='%s'", sAuthID);
 | 
						|
 | 
						|
	g_hDatabase.Query(SQL_OnQueryCompleted, sQuery, GetClientSerial(client), DBPrio_Low);
 | 
						|
}
 | 
						|
 | 
						|
public void SQL_OnDatabaseConnect(Database db, const char[] error, any data)
 | 
						|
{
 | 
						|
	if(!db || strlen(error))
 | 
						|
	{
 | 
						|
		LogError("Database error: %s", error);
 | 
						|
		return;
 | 
						|
	}
 | 
						|
 | 
						|
	g_hDatabase = db;
 | 
						|
 | 
						|
	char sQuery[512];
 | 
						|
	Format(sQuery, sizeof(sQuery), "CREATE TABLE IF NOT EXISTS connections (`auth` varchar(32))");
 | 
						|
 | 
						|
	g_hDatabase.Query(SQL_OnQueryCompleted, sQuery, _, DBPrio_Low);
 | 
						|
}
 | 
						|
 | 
						|
public void SQL_OnQueryCompleted(Database db, DBResultSet results, const char[] error, any data)
 | 
						|
{
 | 
						|
	if(!db || strlen(error))
 | 
						|
	{
 | 
						|
		LogError("Query error: %s", error);
 | 
						|
		return;
 | 
						|
	}
 | 
						|
 | 
						|
	int client;
 | 
						|
	if ((client = GetClientFromSerial(data)) == 0)
 | 
						|
		return;
 | 
						|
 | 
						|
	char sAuthID[32];
 | 
						|
	GetClientAuthId(client, AuthId_Steam2, sAuthID, sizeof(sAuthID));
 | 
						|
 | 
						|
	if(results.RowCount && results.FetchRow())
 | 
						|
	{
 | 
						|
		int iFieldNum;
 | 
						|
		char sResultAddress[32];
 | 
						|
		results.FieldNameToNum("auth", iFieldNum);
 | 
						|
		results.FetchString(iFieldNum, sResultAddress, sizeof(sResultAddress));
 | 
						|
 | 
						|
		if(StrEqual(sAuthID, sResultAddress, true))
 | 
						|
			return;
 | 
						|
	}
 | 
						|
 | 
						|
	g_bNewPlayer[client] = true;
 | 
						|
	g_bNewPlayerChatBlock[client] = true;
 | 
						|
	NewPlayerMessage(client);
 | 
						|
	CreateTimer(10.0, BlockChat, GetClientSerial(client), TIMER_FLAG_NO_MAPCHANGE);
 | 
						|
	char sQuery[512];
 | 
						|
	Format(sQuery, sizeof(sQuery), "INSERT INTO connections (auth) VALUES ('%s')" , sAuthID);
 | 
						|
 | 
						|
	g_hDatabase.Query(SQL_OnQueryCompleted, sQuery, _, DBPrio_Low);
 | 
						|
}
 | 
						|
 | 
						|
public Action NewPlayerMessage(int client)
 | 
						|
{
 | 
						|
	CPrintToChatAll("{cyan}Player {lightgreen}%N {cyan}has just connected to an UNLOZE Server for the first time! Welcome!", client);
 | 
						|
	if(g_cvServerType.IntValue >= 1 && g_cvServerType.IntValue <= 3)
 | 
						|
	{
 | 
						|
		CPrintToChat(client, "{purple}****************************************************");
 | 
						|
		CPrintToChat(client, "{purple}****************************************************");
 | 
						|
		CPrintToChat(client, "{cyan}Hi {lightgreen}%N{cyan}. Welcome to the {blueviolet}Unloze %s Server{cyan}! We hope you enjoy your stay here and add our server to your favorites. Make sure to check out our website at {blueviolet}www.unloze.com{cyan}.", client, g_cServerMessage);
 | 
						|
		CPrintToChat(client, "{purple}****************************************************");
 | 
						|
		CPrintToChat(client, "{purple}****************************************************");
 | 
						|
	}
 | 
						|
	else
 | 
						|
	{
 | 
						|
		CPrintToChat(client, "{purple}****************************************************");
 | 
						|
		CPrintToChat(client, "{purple}****************************************************");
 | 
						|
		CPrintToChat(client, "{cyan}Hi {lightgreen}%N. Welcome to this {blueviolet}Unloze Server{cyan}! We hope you enjoy your stay here and add our server to your favorites. Make sure to check out our website at {blueviolet}www.unloze.com{cyan}.", client);
 | 
						|
		CPrintToChat(client, "{purple}****************************************************");
 | 
						|
		CPrintToChat(client, "{purple}****************************************************");
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
public void OnClientDisconnect(int client)
 | 
						|
{
 | 
						|
	g_bNewPlayer[client] = false;
 | 
						|
	g_bNewPlayerChatBlock[client] = false;
 | 
						|
}
 | 
						|
 | 
						|
public Action BlockChat(Handle timer, int serialid)
 | 
						|
{
 | 
						|
	int client;
 | 
						|
	if ((client = GetClientFromSerial(serialid)) == 0)
 | 
						|
		return;
 | 
						|
 | 
						|
	g_bNewPlayerChatBlock[client] = false;
 | 
						|
}
 | 
						|
 | 
						|
public Action CCC_OnChatMessage(int client, int author, const char[] message)
 | 
						|
{
 | 
						|
	if(g_bNewPlayerChatBlock[client])
 | 
						|
		return Plugin_Handled;
 | 
						|
 | 
						|
	return Plugin_Continue;
 | 
						|
} |