159 lines
3.4 KiB
SourcePawn
159 lines
3.4 KiB
SourcePawn
#pragma semicolon 1
|
|
#pragma newdecls required
|
|
|
|
#include <sourcemod>
|
|
#include <BotTargeting>
|
|
|
|
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];
|
|
}
|