Kod:
#include <amxmodx>
#include <fakemeta>
#include <cstrike>
#define PLUGIN "Dreams gaming"
#define VERSION "2.0"
#define AUTHOR "Dreams"
new g_Bot[3]; // Bot ID'lerini tutan dizi
new cvar_botname[3];
public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR);
cvar_botname[0] = register_cvar("specbot_1", "[- bot ekle -]");
cvar_botname[1] = register_cvar("specbot_2", "[- bot ekle -]");
cvar_botname[2] = register_cvar("specbot_3", "[- bot ekle -]");
// UserInfo değiştiğinde HLSW'nin bot olarak algılamasını engelleyen forward
register_forward(FM_ClientUserInfoChanged, "fw_ClientUserInfoChanged");
// 15 saniyede bir hassas slot ve bot kontrolü
set_task(15.0, "manage_bots", 777, _, _, "b");
}
public client_putinserver(id) {
// Bot sunucuya girdiğinde bot bayraklarını temizle (Normal Oyuncu Görünsün)
if (is_user_bot(id) || is_user_hltv(id)) {
set_user_info(id, "*bot", "0");
set_user_info(id, "hltv", "0");
}
}
public fw_ClientUserInfoChanged(id) {
if (!is_user_connected(id))
return FMRES_IGNORED;
// HLSW sorgularında 'BOT' olarak işaretlenmesini sürekli engeller
if (is_user_bot(id) || is_user_hltv(id)) {
set_user_info(id, "*bot", "0");
set_user_info(id, "hltv", "0");
}
return FMRES_IGNORED;
}
public manage_bots() {
new maxplayers = get_maxplayers();
new current_players = get_playersnum(1); // Sadece gerçek oyuncular
new desired_bots;
if (current_players >= (maxplayers - 2)) desired_bots = 0; // 2 slot kala hepsini at
else if (current_players >= (maxplayers - 3)) desired_bots = 1; // 3 slot kala 1 bot kalsın
else if (current_players >= (maxplayers - 4)) desired_bots = 2; // 4 slot kala 2 bot kalsın
else desired_bots = 3; // Yer çoksa 3 bot da kalsın
for (new i = 0; i < 3; i++) {
if (i < desired_bots) {
// Botun girmesi lazım
if (!is_user_connected(g_Bot[i])) {
g_Bot[i] = create_spec_bot(cvar_botname[i]);
}
if (is_user_connected(g_Bot[i])) make_ghost(g_Bot[i]);
} else {
// Botun çıkması lazım
if (is_user_connected(g_Bot[i])) {
server_cmd("kick #%d", get_user_userid(g_Bot[i]));
g_Bot[i] = 0;
}
}
}
}
create_spec_bot(cvar_ptr) {
new name[32];
get_pcvar_string(cvar_ptr, name, charsmax(name));
new bot = engfunc(EngFunc_CreateFakeClient, name);
if (bot > 0) {
engfunc(EngFunc_FreeEntPrivateData, bot);
// HLSW / GameTracker'ın BOT olarak görmemesi için engine bayraklarını sıfırla
set_user_info(bot, "*bot", "0");
set_user_info(bot, "hltv", "0");
// Sunucu bağlantı aşamalarını tamamla
dllfunc(DLLFunc_ClientConnect, bot, name, "127.0.0.1", "");
dllfunc(DLLFunc_ClientPutInServer, bot);
// Spectator (İzleyici) takımına al
cs_set_user_team(bot, CS_TEAM_SPECTATOR);
return bot;
}
return 0;
}
make_ghost(id) {
if (cs_get_user_team(id) != CS_TEAM_SPECTATOR)
cs_set_user_team(id, CS_TEAM_SPECTATOR);
set_pev(id, pev_effects, pev(id, pev_effects) | EF_NODRAW);
set_pev(id, pev_solid, SOLID_NOT);
if (pev(id, pev_deadflag) == DEAD_NO)
set_pev(id, pev_deadflag, DEAD_DEAD);
}