#pragma semicolon 1
#include <sdktools>
#define PL_VERSION "1.1.1"
static const String:FakeNames[][] = {"РандомЭэээ", "САНТЕХ НИК", "Катька", "ARI$TOKRAT", "Петруха", "Su4ka", "ext77", "Паша Техник", "quality", "Шторм", "ph34r", "1337sp34k", "HardPlayer", "StinG", "Immortal", "achmed", "benthas", "hmmmm", "LOLLOL", "HITM@N", "RUFA", "Metahander", "Meg", "Py6uH", "alyx", "Бутылка_Пива", "Эto_фuaско_брatan", "солдат", "Маршал", "CAT", "ПиздюК", "DoomThird"};
new IsNameUsed[MAXPLAYERS+1] = {-1, ...},
iMaxBots,
Float:fDelay;
public Plugin:myinfo =
{
name = "FakeClients",
author = "LouLoubizou(fixed by Grey83)",
description = "Put fake clients in server",
version = PL_VERSION,
url = "http://sourcemod.net/"
};
public OnPluginStart()
{
CreateConVar("sm_fakeclients_version", PL_VERSION, "Version of FakeClients plugin", FCVAR_SPONLY|FCVAR_REPLICATED|FCVAR_NOTIFY|FCVAR_DONTRECORD);
new Handle:cvar;
cvar = CreateConVar("sm_fakeclients_players","1","Number of players to simulate", FCVAR_SPONLY|FCVAR_REPLICATED|FCVAR_NOTIFY, true, _, true, 32.0);
iMaxBots = GetConVarInt(cvar);
HookConVarChange(cvar, OnChange_MaxBots);
cvar = CreateConVar("sm_fakeclients_delay","0.1","Delay after map change before fake clients join(seconds)", FCVAR_SPONLY|FCVAR_REPLICATED|FCVAR_NOTIFY, true, 0.1, true, 10.0);
fDelay = GetConVarFloat(cvar);
HookConVarChange(cvar, OnChange_Delay);
}
public OnChange_MaxBots(Handle:cvar, const String:oldValue[], const String:newValue[])
{
iMaxBots = StringToInt(newValue);
}
public OnChange_Delay(Handle:cvar, const String:oldValue[], const String:newValue[])
{
fDelay = StringToFloat(newValue);
}
public OnMapStart()
{
new numPlayers = GetClientCount(true); // Получаем количество игроков, включая ботов
if (numPlayers == 0) {
// Если на сервере нет игроков (только боты), добавляем одного бота
CreateTimer(fDelay, OnTimedCreateFakeClient, 0);
}
}
public OnClientPutInServer(client)
{
if(IsFakeClient(client))
return;
// Определяем текущее количество игроков на сервере
new numPlayers = 0;
for (new i = 1; i <= MaxClients; i++) {
if (IsClientInGame(i) && !IsClientSourceTV(i)) {
numPlayers++;
}
}
if (numPlayers == 1) {
// Если на сервере только вы, добавляем одного бота
CreateTimer(fDelay, OnTimedCreateFakeClient, 0);
}
}
public OnClientDisconnect(client)
{
CreateTimer(0.1, OnTimedCreateFakeClient, client);
}
public Action:OnTimedCreateFakeClient(Handle:timer, any:client){
new clientcount = GetClientCount(true);
if(clientcount == MaxClients || clientcount >= iMaxBots)
return Plugin_Handled;
new NumberOfFakeClients;
for(new i = 1; i <= MaxClients; i++) if(IsClientConnected(i) && IsFakeClient(i) && !IsClientSourceTV(i)) NumberOfFakeClients++;
if(NumberOfFakeClients >= iMaxBots)
return Plugin_Handled;
new RandomName;
while(CheckName(RandomName)) RandomName = GetRandomInt(0, 31);
IsNameUsed[CreateFakeClient(FakeNames[RandomName])] = RandomName;
return Plugin_Handled;
}
bool:CheckName(num)
{
for(new i = 1; i <= MaxClients; i++) if(IsNameUsed[i] == num) return true;
return false;
}