#pragma semicolon 1 #pragma newdecls required #include #include bool g_bLateLoad = false; bool g_bIsAutismBot[MAXPLAYERS+1] = { false, ... }; int g_iAutismBotIndex[MAXPLAYERS+1] = { 0, ... }; // 0 = not an autism bot, 1-4 = autism bot index // The position in this list is the autism bot index (first entry = 1). // The index decides which UDP port the connection plugin talks to, so keep this order. char g_sAutismBotAuthIDs[][] = { "STEAM_0:1:60189040", // autism bot 1 "STEAM_0:0:518094602", // autism bot 2 "STEAM_0:0:204398871", // autism bot 3 "STEAM_0:0:610560766" // autism bot 4 }; public Plugin myinfo = { name = "Bot Targeting", author = "zaCade", description = "Adds extra targeting methods", version = "1.1" }; public APLRes AskPluginLoad2(Handle myself, bool late, char[] error, int err_max) { g_bLateLoad = late; CreateNative("IsClientAutismBot", Native_IsAutismBot); CreateNative("GetClientAutismBotIndex", Native_GetAutismBotIndex); RegPluginLibrary("BotTargeting"); return APLRes_Success; } public void OnPluginStart() { AddMultiTargetFilter("@autismbots", Filter_AutismBot, "Autism Bots", false); AddMultiTargetFilter("@!autismbots", Filter_NonAutismBot, "Non Autism Bots", false); if(g_bLateLoad) { char sAuthID[32]; for(int i = 1; i <= MaxClients; i++) { if(IsClientInGame(i) && !IsFakeClient(i) && IsClientAuthorized(i) && GetClientAuthId(i, AuthId_Steam2, sAuthID, sizeof(sAuthID))) { OnClientAuthorized(i, sAuthID); } } } } public void OnPluginEnd() { RemoveMultiTargetFilter("@autismbots", Filter_AutismBot); RemoveMultiTargetFilter("@!autismbots", Filter_NonAutismBot); } public void OnClientAuthorized(int client, const char[] sAuthID) { g_iAutismBotIndex[client] = 0; for(int i = 0; i < sizeof(g_sAutismBotAuthIDs); i++) { if(StrEqual(sAuthID, g_sAutismBotAuthIDs[i])) { g_iAutismBotIndex[client] = i + 1; break; } } g_bIsAutismBot[client] = g_iAutismBotIndex[client] != 0; } public void OnClientDisconnect(int client) { g_bIsAutismBot[client] = false; g_iAutismBotIndex[client] = 0; } public bool Filter_AutismBot(const char[] sPattern, Handle hClients, int client) { for(int i = 1; i <= MaxClients; i++) { if(IsClientInGame(i) && !IsFakeClient(i) && g_bIsAutismBot[i]) { PushArrayCell(hClients, i); } } return true; } public bool Filter_NonAutismBot(const char[] sPattern, Handle hClients, int client) { for(int i = 1; i <= MaxClients; i++) { if(IsClientInGame(i) && !IsFakeClient(i) && !g_bIsAutismBot[i]) { PushArrayCell(hClients, i); } } return true; } bool ValidateNativeClient(int client) { if(client > MaxClients || client <= 0) { ThrowNativeError(SP_ERROR_NATIVE, "Client is not valid."); return false; } if(!IsClientInGame(client)) { ThrowNativeError(SP_ERROR_NATIVE, "Client is not in-game."); return false; } if(!IsClientAuthorized(client)) { ThrowNativeError(SP_ERROR_NATIVE, "Client is not authorized."); return false; } return true; } public int Native_IsAutismBot(Handle hPlugin, int numParams) { int client = GetNativeCell(1); if(!ValidateNativeClient(client)) { return false; } return g_bIsAutismBot[client]; } public int Native_GetAutismBotIndex(Handle hPlugin, int numParams) { int client = GetNativeCell(1); if(!ValidateNativeClient(client)) { return 0; } return g_iAutismBotIndex[client]; }