185 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			SourcePawn
		
	
	
	
	
	
			
		
		
	
	
			185 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			SourcePawn
		
	
	
	
	
	
| #pragma semicolon 1
 | |
| 
 | |
| #include <sourcemod>
 | |
| #include <multicolors>
 | |
| 
 | |
| bool g_bNewPlayer[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.2.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 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;
 | |
| 	NewPlayerMessage(client);
 | |
| 	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)
 | |
| {
 | |
| 	char sName[128];
 | |
| 	GetClientName(client, sName, sizeof(sName));
 | |
| 
 | |
| 	CPrintToChatAll("{cyan}Player {blueviolet}%s {cyan}has just connected to an UNLOZE Server for the first time! Welcome!", sName);
 | |
| 	if(g_cvServerType.IntValue >= 1 && g_cvServerType.IntValue <= 3)
 | |
| 	{
 | |
| 		CPrintToChat(client, "{cyan}Hi %s. 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}.", sName, g_cServerMessage);
 | |
| 	}
 | |
| 	else
 | |
| 	{
 | |
| 		CPrintToChat(client, "{cyan}Hi %s. 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}.", sName);
 | |
| 	}
 | |
| }
 | |
| 
 | |
| public void OnClientDisconnect(int client)
 | |
| {
 | |
| 	g_bNewPlayer[client] = false;
 | |
| } |