Here's a simple AMXX plugin to manage jkbotti bots. Made it back in the days when I was still hosting HLDM server. Feel free to use, or not.
PHP Code:
#include <amxmodx>
#include <amxmisc>
new pCount
new g_CurBotDiff = 4
new bool:g_ObserverEnable = false
new bool:g_LevelTagEnable = false
new bool:g_AutoWaypointEnable = true
new bool:g_RandomizeBots = false
new bool:g_RandomColor = true
public plugin_init()
{
register_plugin("JK Botti Bot Manager", "1.0", "kNowo")
register_concmd("bot_menu", "cmdBotMenu", ADMIN_BAN, "Easy menu to manage jk_botti bots.")
}
public cmdBotMenu(id, level, cid)
{
if (!cmd_access(id, level, cid, 1))
return PLUGIN_HANDLED
MenuBotMain(id)
return PLUGIN_HANDLED
}
public MenuBotMain(id)
{
new gMenu_Main = menu_create("Bot Manager Menu", "m_MainHandler")
menu_additem(gMenu_Main, "Set Bot Difficulty", "1", 0)
menu_additem(gMenu_Main, "Add Bots", "2", 0)
menu_additem(gMenu_Main, "Kick Bots", "3", 0)
menu_additem(gMenu_Main, "Other Bot Settings", "4", 0)
menu_display(id, gMenu_Main, 0)
return PLUGIN_HANDLED
}
public m_MainHandler(id, menu, item)
{
if (item == MENU_EXIT)
{
menu_destroy(menu)
return PLUGIN_HANDLED
}
new cmd[4], iName[64]
new access, callback
menu_item_getinfo(menu, item, access, cmd, 3, iName, 63, callback)
new iChoice = str_to_num(cmd)
switch(iChoice)
{
case 1: MenuBotDiff(id)
case 2: MenuBotAddMain(id)
case 3: MenuBotKickMain(id)
case 4: MenuBotSetting(id)
}
menu_destroy(menu)
return PLUGIN_HANDLED
}
public MenuBotDiff(id)
{
new gMenu_BotDiff = menu_create("Set Bot Difficulty", "m_BotDiffHandler")
new szVeryEasy[40], szEasy[40], szNormal[40], szHard[40], szExpert[40]
formatex(szVeryEasy, charsmax(szVeryEasy), "Very Easy%s", g_CurBotDiff == 5 ? " - Current Setting" : "")
formatex(szEasy, charsmax(szEasy), "Easy%s", g_CurBotDiff == 4 ? " - Current Setting" : "")
formatex(szNormal, charsmax(szNormal), "Normal%s", g_CurBotDiff == 3 ? " - Current Setting" : "")
formatex(szHard, charsmax(szHard), "Hard%s", g_CurBotDiff == 2 ? " - Current Setting" : "")
formatex(szExpert, charsmax(szExpert), "Expert%s", g_CurBotDiff == 1 ? " - Current Setting" : "")
menu_additem(gMenu_BotDiff, szVeryEasy, "5", 0)
menu_additem(gMenu_BotDiff, szEasy, "4", 0)
menu_additem(gMenu_BotDiff, szNormal, "3", 0)
menu_additem(gMenu_BotDiff, szHard, "2", 0)
menu_additem(gMenu_BotDiff, szExpert, "1", 0)
menu_setprop(gMenu_BotDiff, MPROP_EXITNAME, "Back")
menu_display(id, gMenu_BotDiff, 0)
}
public m_BotDiffHandler(id, menu, item)
{
if (item == MENU_EXIT)
{
menu_destroy(menu)
MenuBotMain(id)
return PLUGIN_HANDLED
}
new cmd[5], iName[64]
new access, callback
menu_item_getinfo(menu, item, access, cmd, 4, iName, 63, callback)
new iChoice = str_to_num(cmd)
server_cmd("jk_botti botskill %d", iChoice)
g_CurBotDiff = iChoice
menu_destroy(menu)
MenuBotDiff(id)
return PLUGIN_HANDLED
}
public MenuBotAddMain(id)
{
new gMenu_BotAddMain = menu_create("Add Bots", "m_BotAddMainHandler")
menu_additem(gMenu_BotAddMain, "Add Bots Manually (recommended)", "1", 0)
menu_additem(gMenu_BotAddMain, "Add Bots using min/max bot cvars", "2", 0)
menu_setprop(gMenu_BotAddMain, MPROP_EXITNAME, "Back")
menu_display(id, gMenu_BotAddMain, 0)
}
public m_BotAddMainHandler(id, menu, item)
{
if (item == MENU_EXIT)
{
menu_destroy(menu)
MenuBotMain(id)
return PLUGIN_HANDLED
}
new cmd[4], iName[64]
new access, callback
menu_item_getinfo(menu, item, access, cmd, 3, iName, 63, callback)
new iChoice = str_to_num(cmd)
switch(iChoice)
{
case 1: MenuBotAddManual(id)
case 2: MenuBotAdd(id)
}
menu_destroy(menu)
return PLUGIN_HANDLED
}
public MenuBotAddManual(id)
{
new gMenu_BotAddManual = menu_create("Add Bots Manually", "m_BotAddManualHandler")
menu_additem(gMenu_BotAddManual, "Add 1 bot", "1", 0)
menu_additem(gMenu_BotAddManual, "Add 2 bots", "2", 0)
menu_additem(gMenu_BotAddManual, "Add 5 bots", "3", 0)
menu_setprop(gMenu_BotAddManual, MPROP_EXITNAME, "Back")
menu_display(id, gMenu_BotAddManual, 0)
}
public m_BotAddManualHandler(id, menu, item)
{
if (item == MENU_EXIT)
{
menu_destroy(menu)
MenuBotAddMain(id)
return PLUGIN_HANDLED
}
new cmd[4], iName[64]
new access, callback
menu_item_getinfo(menu, item, access, cmd, 3, iName, 63, callback)
new iChoice = str_to_num(cmd)
switch(iChoice)
{
case 1: server_cmd("jk_botti addbot")
case 2: server_cmd("jk_botti addbot; jk_botti addbot")
case 3: server_cmd("jk_botti addbot; jk_botti addbot; jk_botti addbot; jk_botti addbot; jk_botti addbot")
}
menu_destroy(menu)
set_task(0.1, "MenuBotAddManual", id)
return PLUGIN_HANDLED
}
public MenuBotAdd(id)
{
new gMenu_BotAdd = menu_create("Add Bots using min/max bots cvar", "m_BotAddHandler")
menu_additem(gMenu_BotAdd, "Add 1 bot", "1", 0)
menu_additem(gMenu_BotAdd, "Add 2 bots", "2", 0)
menu_additem(gMenu_BotAdd, "Add 5 bots", "3", 0)
menu_additem(gMenu_BotAdd, "Add 10 bots", "4", 0)
menu_setprop(gMenu_BotAdd, MPROP_EXITNAME, "Back")
menu_display(id, gMenu_BotAdd, 0)
}
public m_BotAddHandler(id, menu, item)
{
if (item == MENU_EXIT)
{
menu_destroy(menu)
MenuBotAddMain(id)
return PLUGIN_HANDLED
}
new cmd[4], iName[64]
new access, callback
menu_item_getinfo(menu, item, access, cmd, 3, iName, 63, callback)
new iChoice = str_to_num(cmd)
pCount = get_playersnum(0)
switch(iChoice)
{
case 1: server_cmd("jk_botti min_bots %d; jk_botti max_bots %d", pCount + 1, pCount + 1)
case 2: server_cmd("jk_botti min_bots %d; jk_botti max_bots %d", pCount + 2, pCount + 2)
case 3: server_cmd("jk_botti min_bots %d; jk_botti max_bots %d", pCount + 5, pCount + 5)
case 4: server_cmd("jk_botti min_bots %d; jk_botti max_bots %d", pCount + 10, pCount + 10)
}
menu_destroy(menu)
set_task(0.1, "MenuBotAdd", id)
return PLUGIN_HANDLED
}
public MenuBotKickMain(id)
{
new gMenu_BotKickMain = menu_create("Kick Bots", "m_BotKickMainHandler")
menu_additem(gMenu_BotKickMain, "Kick Bots Manually (recommended)", "1", 0)
menu_additem(gMenu_BotKickMain, "Kick Bots using min/max bots cvar", "2", 0)
menu_setprop(gMenu_BotKickMain, MPROP_EXITNAME, "Back")
menu_display(id, gMenu_BotKickMain, 0)
}
public m_BotKickMainHandler(id, menu, item)
{
if (item == MENU_EXIT)
{
menu_destroy(menu)
MenuBotMain(id)
return PLUGIN_HANDLED
}
new cmd[2], iName[64]
new access, callback
menu_item_getinfo(menu, item, access, cmd, 1, iName, 63, callback)
new iChoice = str_to_num(cmd)
switch(iChoice)
{
case 1: MenuBotKickManual(id)
case 2: MenuBotKick(id)
}
menu_destroy(menu)
return PLUGIN_HANDLED
}
public MenuBotKickManual(id)
{
new gMenu_BotKickManual = menu_create("Kick Bots Manually", "m_BotKickManualHandler")
menu_additem(gMenu_BotKickManual, "Kick 1 Bot", "1", 0)
menu_additem(gMenu_BotKickManual, "Kick All Bots", "2", 0)
menu_setprop(gMenu_BotKickManual, MPROP_EXITNAME, "Back")
menu_display(id, gMenu_BotKickManual, 0)
}
public m_BotKickManualHandler(id, menu, item)
{
if (item == MENU_EXIT)
{
menu_destroy(menu)
MenuBotKickMain(id)
return PLUGIN_HANDLED
}
new cmd[2], iName[64]
new access, callback
menu_item_getinfo(menu, item, access, cmd, 1, iName, 63, callback)
new iChoice = str_to_num(cmd)
switch(iChoice)
{
case 1:
{
new botid, botuserid
botid = find_player("i")
if(botid)
{
botuserid = get_user_userid(botid)
server_cmd("kick #%d", botuserid)
}
}
case 2:
{
new botids[32], inum, botid, botuserid
get_players(botids, inum, "dh")
for(new i = 0; i < inum; i++)
{
botid = botids[i]
botuserid = get_user_userid(botid)
server_cmd("kick #%d", botuserid)
}
}
}
menu_destroy(menu)
set_task(0.1, "MenuBotKickManual", id)
return PLUGIN_HANDLED
}
public MenuBotKick(id)
{
new gMenu_BotKick = menu_create("Kick Bots using min/max bots cvar", "m_BotKickHandler")
menu_additem(gMenu_BotKick, "Kick 1 bot", "1", 0)
menu_additem(gMenu_BotKick, "Kick all bots", "2", 0)
menu_setprop(gMenu_BotKick, MPROP_EXITNAME, "Back")
menu_display(id, gMenu_BotKick, 0)
}
public m_BotKickHandler(id, menu, item)
{
if (item == MENU_EXIT)
{
menu_destroy(menu)
MenuBotKickMain(id)
return PLUGIN_HANDLED
}
new cmd[2], iName[64]
new access, callback
menu_item_getinfo(menu, item, access, cmd, 1, iName, 63, callback)
new iChoice = str_to_num(cmd)
pCount = get_playersnum(0)
switch(iChoice)
{
case 1: server_cmd("jk_botti min_bots 0; jk_botti max_bots %d", pCount - 1)
case 2: server_cmd("jk_botti min_bots 0; jk_botti max_bots 0")
}
menu_destroy(menu)
set_task(0.1, "MenuBotKick", id)
return PLUGIN_HANDLED
}
public MenuBotSetting(id)
{
new gMenu_BotSetting = menu_create("Other Bot Settings", "m_BotSettingHandler")
new szObserver[25], szBotLvlTag[25], szAutoWaypoint[25], szRandomizeBots[40], szRandomColor[35]
formatex(szAutoWaypoint, charsmax(szAutoWaypoint), "Auto waypoint - %s", g_AutoWaypointEnable ? "ENABLED" : "DISABLED")
formatex(szObserver, charsmax(szObserver), "Observer mode - %s", g_ObserverEnable ? "ENABLED" : "DISABLED")
formatex(szBotLvlTag, charsmax(szBotLvlTag), "Bot level tag - %s", g_LevelTagEnable ? "ENABLED" : "DISABLED")
formatex(szRandomizeBots, charsmax(szRandomizeBots), "Random bots on mapchange - %s", g_RandomizeBots ? "ENABLED" : "DISABLED")
formatex(szRandomColor, charsmax(szRandomColor), "Random model color - %s", g_RandomColor ? "ENABLED" : "DISABLED")
menu_additem(gMenu_BotSetting, szAutoWaypoint, "1", 0)
menu_additem(gMenu_BotSetting, szObserver, "2", 0)
menu_additem(gMenu_BotSetting, szBotLvlTag, "3", 0)
menu_additem(gMenu_BotSetting, szRandomizeBots, "4", 0)
menu_additem(gMenu_BotSetting, szRandomColor, "5", 0)
menu_setprop(gMenu_BotSetting, MPROP_EXITNAME, "Back")
menu_display(id, gMenu_BotSetting, 0)
}
public m_BotSettingHandler(id, menu, item)
{
if (item == MENU_EXIT)
{
menu_destroy(menu)
MenuBotMain(id)
return PLUGIN_HANDLED
}
new cmd[3], iName[64]
new access, callback
menu_item_getinfo(menu, item, access, cmd, 2, iName, 63, callback)
new iChoice = str_to_num(cmd)
switch(iChoice)
{
case 1:
{
if(g_AutoWaypointEnable)
{
server_cmd("jk_botti autowaypoint 0")
g_AutoWaypointEnable = false
}
else
{
server_cmd("jk_botti autowaypoint 1")
g_AutoWaypointEnable = true
}
}
case 2:
{
if(g_ObserverEnable)
{
server_cmd("jk_botti observer 0")
g_ObserverEnable = false
}
else
{
server_cmd("jk_botti observer 1")
g_ObserverEnable = true
}
}
case 3:
{
if(g_LevelTagEnable)
{
server_cmd("jk_botti bot_add_level_tag 0")
g_LevelTagEnable = false
}
else
{
server_cmd("jk_botti bot_add_level_tag 1")
g_LevelTagEnable = true
}
}
case 4:
{
if(g_RandomizeBots)
{
server_cmd("jk_botti randomize_bots_on_mapchange 0")
g_RandomizeBots = false
}
else
{
server_cmd("jk_botti randomize_bots_on_mapchange 1")
g_RandomizeBots = true
}
}
case 5:
{
if(g_RandomColor)
{
server_cmd("jk_botti random_color 0")
g_RandomColor = false
}
else
{
server_cmd("jk_botti random_color 1")
g_RandomColor = true
}
}
}
menu_destroy(menu)
MenuBotSetting(id)
return PLUGIN_HANDLED
}