PHP Code:
#include < amxmodx >
#include <amxmisc>
#define MAX_ACCESS 5
#define OWNER_ACCESS ADMIN_IMMUNITY
enum{TYPE_STEAM,TYPE_NAME}
new const accNames[][] = {
"",
"Owner Access",
"Manager Access",
"Super Admin Access",
"Admin Access",
"Vip Access"
};
new const accFlags[][] = {
"",
"abcdefghijklmnopqrstuy",
"acdefghijklmnopqrstu",
"cefhijkmnp",
"cefhijm",
"ceir"
};
new accMenu, szKey;
public plugin_init()
{
register_plugin("Access Menu", "v1", "Angryx");
register_clcmd( "say /access","openAccessMenu",ADMIN_IMMUNITY,"");
register_clcmd( "say /manage","openAccessMenu",ADMIN_IMMUNITY,"");
register_clcmd("amx_removeadmin","remove_cmd",ADMIN_IMMUNITY,"amx_removeadmin <steamid or nick>");
}
public openAccessMenu(id)
{
if( !(get_user_flags(id) & OWNER_ACCESS) )
{
ColorChat(id, "You Need To Be An ^"^3Owner^1^" To Access This Menu");
return PLUGIN_HANDLED;
}
accMenu = menu_create("\r[\d Access \r] \yPlayers Manage Menu", "openPlayerMenu");
menu_additem(accMenu, "\yAdd \dOwner", "1", 0);
menu_additem(accMenu, "\yAdd \dManager", "2", 0);
menu_additem(accMenu, "\yAdd \dSuper Admin", "3", 0);
menu_additem(accMenu, "\yAdd \dAdmin", "4", 0);
menu_additem(accMenu, "\yAdd \dVip", "5", 0);
menu_additem(accMenu, "\yRemove \dAccess", "6", 0);
menu_setprop(accMenu, MPROP_NUMBER_COLOR, "\d");
menu_setprop(accMenu, MPROP_EXITNAME, "\yClose Menu");
menu_display(id, accMenu);
return PLUGIN_HANDLED;
}
public openPlayerMenu(id, accMenu, item)
{
if( item == MENU_EXIT )
{
menu_destroy(accMenu);
return PLUGIN_HANDLED;
}
new Data[6],iName[64], Access, CallBack;
menu_item_getinfo(accMenu, item, Access, Data, 5, iName, 63, CallBack);
szKey = str_to_num(Data);
switch(szKey)
{
case 1..5: getPlayers(id);
case 6: removevip_cmd(id);
}
//getPlayers(id);
menu_destroy(accMenu);
return PLUGIN_HANDLED;
}
public getPlayers(id)
{
new setLevel = menu_create("\r[\dAccess\r] \yPlayers Manage Menu", "setAccess");
new players[32], pnum, player, szName[32], szInfo[10], mItem[128];
get_players(players, pnum);
for( new i; i<pnum; i++ )
{
player = players[i];
get_user_name(player, szName, charsmax(szName));
num_to_str(player, szInfo, charsmax(szInfo));
formatex(mItem, sizeof mItem - 1, "\y%s", szName);
menu_additem(setLevel, mItem, szInfo, 0);
}
menu_display(id, setLevel);
}
public setAccess(id, setLevel, item)
{
if( item == MENU_EXIT )
{
menu_destroy(setLevel);
return PLUGIN_HANDLED;
}
new Data[6], iName[33], ownerName[32], playerName[32], playerid[21], Access, CallBack;
menu_item_getinfo(setLevel, item, Access, Data, 5, iName, 32, CallBack);
new plr = str_to_num(Data);
get_user_name(id, ownerName, sizeof ownerName - 1);
get_user_name(plr, playerName, sizeof playerName - 1);
get_user_authid(plr, playerid, sizeof playerid - 1);
server_cmd("amx_addadmin ^"%s^" ^"%s^"", playerid, accFlags[szKey]);
ColorChat(0, "Owner ^4%s^1 Gave^4 %s^1 Access To^4 %s", ownerName, accNames[szKey], playerName);
server_cmd("amx_reloadadmins")
menu_destroy(setLevel);
return PLUGIN_HANDLED;
}
public removevip_cmd(id) {
if(!is_user_connected(id))
return PLUGIN_HANDLED
new menu = menu_create("\y[\rAccess\y] - \wRemove Access:", "sub_remove_cmd")
new players[32], pnum, tempid
new szName[32], szTempid[10]
get_players(players, pnum, "ch")
for( new i; i<pnum; i++ )
{
tempid = players[i]
get_user_name(tempid, szName, 31)
num_to_str(tempid, szTempid, 9)
menu_additem(menu, szName, szTempid, 0)
}
menu_display(id, menu)
return PLUGIN_HANDLED
}
public sub_remove_cmd(id, menu, item) {
if( item == MENU_EXIT )
{
menu_destroy(menu)
return PLUGIN_HANDLED
}
new data[6], iName[64]
new access, callback
menu_item_getinfo(menu, item, access, data,5, iName, 63, callback)
new tempid = str_to_num(data)
new Steam[32]
get_user_authid(tempid, Steam, 31)
client_cmd(id, "amx_removeadmin ^"%s^"", Steam)
server_cmd("amx_reloadadmins")
id = str_to_num(data)
return PLUGIN_HANDLED
}
public remove_cmd(id,level,cid)
{
if(!access(id, ADMIN_IMMUNITY))
return PLUGIN_HANDLED
new players[32], inum, i, player;
new TARGET[32], playerinfo[32];
new command_type;
new bool:is_found = false;
get_players(players,inum);
read_argv(1,TARGET,31);
remove_quotes(TARGET);
if(equal(TARGET,"STEAM_",6))
{
command_type = TYPE_STEAM;
for(i = 0; i < inum; i++)
{
player = players[i];
get_user_authid(player, playerinfo, 31);
if(equal(playerinfo, TARGET))
{
remove_user_flags(player);
break;
}
}
}
else
{
command_type = TYPE_NAME;
for(i = 0; i < inum; i++)
{
player = players[i];
get_user_name(player,playerinfo,31);
if( containi(playerinfo,TARGET) != -1 )
{
remove_user_flags(player);
break;
}
}
}
new filename[64], text[512];
get_configsdir(filename,63);
format(filename,63,"%s/users.ini",filename);
new file = fopen(filename,"rt");
i = 0;
while(!feof(file))
{
fgets(file,text,50);
i++;
if(text[0] == ';')
continue;
parse(text,playerinfo,31,players,1);
if((command_type == TYPE_STEAM && equal(playerinfo, TARGET))
|| (command_type == TYPE_NAME && containi(playerinfo, TARGET) != -1))
{
is_found = true;
format(text,511,";%s",text);
write_file(filename,text,i-1);
console_print(id,"********************ADMIN ID REMOVAL TOOL**************");
console_print(id,"");
console_print(id," The target, %s, was removed from users.ini ",TARGET);
console_print(id,"");
console_print(id,"********************ADMIN ID REMOVAL TOOL**************");
server_cmd("amx_reloadadmins")
break;
}
}
if(!is_found)
{
console_print(id,"********************ADMIN ID REMOVAL TOOL**************");
console_print(id," The entry, %s, was not found in users.ini ",TARGET);
console_print(id,"********************ADMIN ID REMOVAL TOOL**************");
}
fclose(file);
return PLUGIN_HANDLED;
}
stock ColorChat(const id, const string[], {Float, Sql, Resul,_}:...) {
new msg[191], players[32], count = 1;
static len; len = formatex(msg, charsmax(msg), "^3[^1Admin Manage^3]^1 ");
vformat(msg[len], charsmax(msg) - len, string, 3);
if(id) players[0] = id;
else get_players(players,count,"ch");
for (new i = 0; i < count; i++)
{
if(is_user_connected(players[i]))
{
message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"),_, players[i]);
write_byte(players[i]);
write_string(msg);
message_end();
}
}
}