#pragma semicolon 1 #include #include #include 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; }