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;
|
|
} |