#pragma semicolon 1 #include #include #include #include #include #pragma newdecls required char g_sDataFile[128]; char g_sCustomMessageFile[128]; Database g_hDatabase; Handle g_hCustomMessageFile; Handle g_hCustomMessageFile2; bool g_bHideCsays[MAXPLAYERS + 1] = { false, ... }; bool g_bHideCsaysHooked = false; Handle g_hCookieHideCsays = null; #define MSGLENGTH 100 //---------------------------------------------------------------------------------------------------- // Purpose: //---------------------------------------------------------------------------------------------------- public Plugin myinfo = { name = "Connect Announce", author = "Neon + Botox + Dogan", description = "Connect Announcer with special features for VIPS", version = "3.0", url = "" } //---------------------------------------------------------------------------------------------------- // Purpose: //---------------------------------------------------------------------------------------------------- public void OnPluginStart() { 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"); RegConsoleCmd("sm_hide_connect_csay", HideCsays, "Toggle blocking connect csay messages"); g_hCookieHideCsays = RegClientCookie("csays_blocked", "are csays blocked", CookieAccess_Protected); } //---------------------------------------------------------------------------------------------------- // Purpose: //---------------------------------------------------------------------------------------------------- public Action HideCsays(int client, int args) { g_bHideCsays[client] = !g_bHideCsays[client]; CheckHooks(); if(g_bHideCsays[client]) { ReplyToCommand(client, "You blocked Connect Csays"); SetClientCookie(client, g_hCookieHideCsays, "1"); } else { ReplyToCommand(client, "You unblocked Connect Csays"); SetClientCookie(client, g_hCookieHideCsays, ""); } return Plugin_Handled; } public void OnClientCookiesCached(int client) { char sBuffer[2]; GetClientCookie(client, g_hCookieHideCsays, sBuffer, sizeof(sBuffer)); if(sBuffer[0] != '\0') { g_bHideCsays[client] = true; g_bHideCsaysHooked = true; } else { g_bHideCsays[client] = false; } } public void OnClientDisconnect(int client) { g_bHideCsays[client] = false; CheckHooks(); } public void CheckHooks() { bool bShouldHook = false; for(int i = 1; i <= MaxClients; i++) { if(g_bHideCsays[i]) { bShouldHook = true; break; } } g_bHideCsaysHooked = bShouldHook; } //---------------------------------------------------------------------------------------------------- // 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 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 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)"); return; } static char sIP[16]; static char sAuth[32]; static char sCountry[32]; static char sName[128]; GetClientAuthId(client, AuthId_Steam2, sAuth, sizeof(sAuth)); 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); } } if(StrContains(sRawMsg, "{NOSTEAM}")) { if(!SteamClientAuthenticated(sAuth)) ReplaceString(sRawMsg, sizeof(sRawMsg), "{NOSTEAM}", " "); else ReplaceString(sRawMsg, sizeof(sRawMsg), "{NOSTEAM}", ""); } 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 (!CheckCommandAccess(client, "sm_joinmsg", ADMFLAG_CUSTOM1)) { CPrintToChatAll(sRawMsg); return; } 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 sBanned[16]; char sFinalMessage[512]; char sCustomMessage[256]; if (KvJumpToKey(g_hCustomMessageFile2, sAuth)) { KvGetString(g_hCustomMessageFile2, "banned", sBanned, sizeof(sBanned), ""); KvGetString(g_hCustomMessageFile2, "message", sCustomMessage, sizeof(sCustomMessage), ""); if(StrEqual(sCustomMessage, "reset") || StrEqual(sBanned, "true")) { CPrintToChatAll(sRawMsg); for(int i = 1; i <= MaxClients; i++) { if(!g_bHideCsays[i] && IsClientInGame(i)) { PrintCenterText(i, "%s %s %s", "[VIP]", sName, "connected"); } } } else { Format(sFinalMessage, sizeof(sFinalMessage), "%s %s", sRawMsg, sCustomMessage); CPrintToChatAll(sFinalMessage); for(int i = 1; i <= MaxClients; i++) { if(!g_bHideCsays[i] && IsClientInGame(i)) { CRemoveTags(sCustomMessage, 256); PrintCenterText(i, "%s %s %s %s", "[VIP]", sName, "connected", sCustomMessage); } } } } else 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)); }