#include <amxmodx>
#include <amxmisc>
#include <sqlx>
new const PLUGIN[] = "AddAdminMenu";
new const VERSION[] = "0.1.0";
new const AUTHOR[] = "Turán*";
#pragma semicolon 1 //Mindig ahova lehet tegyél ";" jelet
#define Owner ADMIN_IMMUNITY //Tárolja az immunitás jogot
#define CHAT_ON //Ha nem akarod a chatet használni akkor rakj elé "//" jelet.
enum _: Admin_Properties{
eSelectNum,
eName[64],
ePermission[64],
eSetPermission
}
new const Admin_Permissions[][Admin_Properties] ={
//Hozzáadni: hányadik | chatben megjelenő prefix | jogok | adhat-e másnak jogot vagy nem(1 igen, 0 nem)
{0, "Játékos", "z", 0},
{1, "Szerverkezelő", "abcvnmlpoikujzhtgrfedwsayc", 1},
{2, "Tulajdonos", "abcvnmlpoikujzhtgrfedwsayc", 1},
{3, "FőAdmin", "bmcfscdtiue", 0},
{4, "Admin", "bmcfscdtiue", 0}
};
new g_sSteamID[64];
new g_iAdminNum[33], g_bChoosed[33];
new Handle:g_SqlTuple;
new g_iMaxplayers;
new g_fPermissionLoadTime;
new g_cPrefix;
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR);
//|===============[SQL infó && Tábla létrehozás]===============|//
//Kiszolgáló | Felhasználónév | Adatbázis jelszava | Adatbázis neve
g_SqlTuple = SQL_MakeDbTuple("", "", "", "");
p_SQLCreateTable();
//|===============[Parancsok]===============|//
register_clcmd("say /rankadd", "p_CheckUserPermission");
register_concmd("admin_set", "p_AdminSet", _, "<steamid> <Hányadik(jog)>");
//|===============[Chat]===============|//
#if defined CHAT_ON
register_clcmd("say", "sayhook");
register_clcmd("say_team", "sayhook");
#endif
//|===============[Cvarok]===============|//
g_iMaxplayers = get_maxplayers();
g_fPermissionLoadTime = register_cvar("Adminload_time", "0.1");
g_cPrefix = register_cvar("Prefix", "[Szerver] »");
}
public p_CheckUserPermission(id)
{
if(Admin_Permissions[g_iAdminNum[id]][eSetPermission] == 1 || get_user_flags(id) & Owner)
{
p_AdminSetMenu(id);
client_print_color(id, print_team_default, "^4%s ^1Válasszad ki hogy kinek szeretnél jogokat adni, vagy elvenni.", get_server_prefix());
}
else
{
client_print_color(id, print_team_default, "^4%s ^1Nincs ehhez jogod!", get_server_prefix());
return PLUGIN_HANDLED;
}
return PLUGIN_HANDLED;
}
public p_AdminSet(id)
{
if(Admin_Permissions[g_iAdminNum[id]][eSetPermission] == 1 || get_user_flags(id) & Owner)
{
new SteamID[64], sPermissionNumber[16], iPermissionNumber;
read_argv(1, SteamID, charsmax(SteamID));
read_argv(2, sPermissionNumber, charsmax(sPermissionNumber));
new iTarget = cmd_target(id, SteamID, CMDTARGET_NO_BOTS);
iPermissionNumber = str_to_num(sPermissionNumber);
if(!iTarget)
return PLUGIN_HANDLED;
new sAdminName[64], sTargetName[64], sAdminSteamID[64];
get_user_name(id, sAdminName, charsmax(sAdminName));
get_user_authid(id, sAdminSteamID, charsmax(sAdminSteamID));
get_user_name(iTarget, sTargetName, charsmax(sTargetName));
if(containi(SteamID, "STEAM_") > -1)
{
if(iPermissionNumber >= sizeof(Admin_Permissions) || strlen(sPermissionNumber) == 0)
{
console_print(id, "*---------------------------------------------------------*");
console_print(id, "Rossz szam!");
console_print(id, "Beirt szam: %d", iPermissionNumber);
console_print(id, "Maximum szam: %d", sizeof(Admin_Permissions) - 1);
console_print(id, "*---------------------------------------------------------*");
return PLUGIN_HANDLED;
}
if(g_iAdminNum[iTarget] == iPermissionNumber)
{
console_print(id, "**%s mar rendelkezik ezzel a joggal!**", sTargetName);
return PLUGIN_HANDLED;
}
if(is_user_connected(iTarget))
{
new sQuery[512], sData[1], iLen;
sData[0] = id;
iLen += formatex(sQuery[iLen], charsmax(sQuery), "UPDATE `AdminSet` SET TargetAdminlevel = ^"%d^", ", iPermissionNumber);
iLen += formatex(sQuery[iLen], charsmax(sQuery)-iLen, "TargetName = ^"%s^", ", sTargetName);
iLen += formatex(sQuery[iLen], charsmax(sQuery)-iLen, "AdminSteamID = ^"%s^", ", sAdminSteamID);
iLen += formatex(sQuery[iLen], charsmax(sQuery)-iLen, "AdminName = ^"%s^" WHERE TargetSteamid = ^"%s^";", sAdminName, SteamID);
SQL_ThreadQuery(g_SqlTuple, "p_SQLUpdateThr", sQuery, sData, 1);
if(iPermissionNumber == 0)
client_print_color(0, print_team_default, "^4%s ^3ADMIN: ^4%s^1 elvette^3 %s^1 jogait mostantól csak^3 %s.", get_server_prefix(), sAdminName, sTargetName, Admin_Permissions[iPermissionNumber][eName]);
else
client_print_color(0, print_team_default, "^4%s ^3ADMIN: ^4%s,^3 %s^1(%s)^1 jogot adott^3 %s^1 játékosnak.", get_server_prefix(), sAdminName, Admin_Permissions[iPermissionNumber][eName], Admin_Permissions[iPermissionNumber][ePermission], sTargetName);
g_iAdminNum[iTarget] = iPermissionNumber;
}
}
else
{
console_print(id, "**Nem megfelelo formatum!**");
return PLUGIN_HANDLED;
}
}
else
console_print(id, "**Nincs ehhez jogod!**");
return PLUGIN_HANDLED;
}
public p_AdminSetMenu(id)
{
new sMenu[128], iRow[7], sName[64], sTitle[128];
formatex(sTitle, charsmax(sTitle), g_bChoosed[id] == 0 ? "Válassz játékost":"Válassz rangot");
formatex(sMenu, charsmax(sMenu), "\r%s \w| \d%s", get_server_prefix(), sTitle);
new iMenu = menu_create(sMenu, "p_AdminSetMenu_h");
if(!g_bChoosed[id])
{
for(new i = 0; i < g_iMaxplayers; i++)
{
if(!is_user_connected(i) || is_user_bot(i) || i == id)
continue;
get_user_name(i, sName, charsmax(sName));
num_to_str(i, iRow, 7);
formatex(sMenu, charsmax(sMenu), "\w%s", sName);
menu_additem(iMenu, sMenu, iRow);
}
}
else
{
for(new i = 0; i < sizeof(Admin_Permissions); i++)
{
get_user_name(i, sName, charsmax(sName));
num_to_str(i, iRow, 7);
formatex(sMenu, charsmax(sMenu), "\w%s", Admin_Permissions[i][eName]);
menu_additem(iMenu, sMenu, iRow);
}
}
menu_setprop(iMenu, MPROP_BACKNAME, "\wVissza");
menu_setprop(iMenu, MPROP_NEXTNAME, "\wKövetkező");
menu_setprop(iMenu, MPROP_EXITNAME, "\wKilépés");
menu_setprop(iMenu, MPROP_SHOWPAGE, 0);
menu_display(id, iMenu, 0);
}
public p_AdminSetMenu_h(id, iMenu, iItem)
{
if(iItem == MENU_EXIT)
{
menu_destroy(iMenu);
return PLUGIN_HANDLED;
}
new iPlayer, iRankNum;
if(!g_bChoosed[id])
{
g_bChoosed[id] = true;
iPlayer = iItem;
p_AdminSetMenu(id);
}
else
{
g_bChoosed[id] = false;
iRankNum = iItem;
p_ChoosedRank(id, iPlayer, iRankNum);
}
menu_destroy(iMenu);
return PLUGIN_HANDLED;
}
public p_ChoosedRank(id, iPlayer, iRankNum)
{
new sAdminName[64], sTargetName[64], sAdminSteamID[64], SteamID[64];
get_user_name(id, sAdminName, charsmax(sAdminName));
get_user_authid(id, sAdminSteamID, charsmax(sAdminSteamID));
get_user_authid(iPlayer+1, SteamID, charsmax(SteamID));
get_user_name(iPlayer+1, sTargetName, charsmax(sTargetName));
if(g_iAdminNum[iPlayer+1] == iRankNum)
{
client_print_color(id, print_team_default, "^4%s^3 %s^1 már rendelkezik ezzel a joggal!", get_server_prefix(), sTargetName);
p_AdminSetMenu(id);
return PLUGIN_HANDLED;
}
new sQuery[512], sData[1], iLen;
sData[0] = id;
iLen += formatex(sQuery[iLen], charsmax(sQuery), "UPDATE `AdminSet` SET TargetAdminlevel = ^"%d^", ", iRankNum);
iLen += formatex(sQuery[iLen], charsmax(sQuery)-iLen, "TargetName = ^"%s^", ", sTargetName);
iLen += formatex(sQuery[iLen], charsmax(sQuery)-iLen, "AdminSteamID = ^"%s^", ", sAdminSteamID);
iLen += formatex(sQuery[iLen], charsmax(sQuery)-iLen, "AdminName = ^"%s^" WHERE TargetSteamid = ^"%s^";", sAdminName, SteamID);
SQL_ThreadQuery(g_SqlTuple, "p_SQLUpdateThr", sQuery, sData, 1);
if(iRankNum == 0)
client_print_color(0, print_team_default, "^4%s ^3ADMIN: ^4%s^1 elvette^3 %s^1 jogait mostantól csak^3 %s.", get_server_prefix(), sAdminName, sTargetName, Admin_Permissions[iRankNum][eName]);
else
client_print_color(0, print_team_default, "^4%s ^3ADMIN: ^4%s,^3 %s^1(%s)^1 jogot adott^3 %s^1 játékosnak.", get_server_prefix(), sAdminName, Admin_Permissions[iRankNum][eName], Admin_Permissions[iRankNum][ePermission], sTargetName);
g_iAdminNum[iPlayer+1] = iRankNum;
return PLUGIN_HANDLED;
}
#if defined CHAT_ON
public sayhook(id)
{
new sMessage[192];
read_args(sMessage, charsmax(sMessage));
remove_quotes(sMessage);
if(strlen(sMessage) == 0 || sMessage[0] == '/')
return PLUGIN_HANDLED;
new sDeath[16], sName[MAX_NAME_LENGTH];
get_user_name(id, sName, charsmax(sName));
for(new i = 1; i <= get_maxplayers(); i++)
{
if(is_user_connected(i) && !is_user_bot(i))
{
formatex(sDeath, charsmax(sDeath), is_user_alive(id) ? "":"*Halott*");
client_print_color(i, print_team_default, "%s^4[%s]^3%s^1: %s", sDeath, Admin_Permissions[g_iAdminNum[id]][eName], sName, sMessage);
}
}
return PLUGIN_HANDLED;
}
#endif
public p_SQLCreateTable()
{
new iLen;
static sQuery[512];
iLen += formatex(sQuery[iLen], charsmax(sQuery), "CREATE TABLE IF NOT EXISTS `AdminSet` ");
iLen += formatex(sQuery[iLen], charsmax(sQuery)-iLen, "( ");
iLen += formatex(sQuery[iLen], charsmax(sQuery)-iLen, "`TargetSteamid` varchar(64) NOT NULL,");
iLen += formatex(sQuery[iLen], charsmax(sQuery)-iLen, "`TargetName` varchar(64) NOT NULL, ");
iLen += formatex(sQuery[iLen], charsmax(sQuery)-iLen, "`TargetAdminlevel` INT(11) NOT NULL,");
iLen += formatex(sQuery[iLen], charsmax(sQuery)-iLen, "`AdminSteamID` varchar(64) NOT NULL,");
iLen += formatex(sQuery[iLen], charsmax(sQuery)-iLen, "`AdminName` varchar(64) NOT NULL,");
iLen += formatex(sQuery[iLen], charsmax(sQuery)-iLen, "`Id` INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY)");
SQL_ThreadQuery(g_SqlTuple, "p_SQLCreateTableThr", sQuery);
}
public p_SQLCreateTableThr(iFailState, Handle:sQuery, sError[], iErrcode, sData[], sDataSize)
{
if(iFailState == TQUERY_CONNECT_FAILED)
set_fail_state("[HIBA*] NEM TUDTAM CSATLAKOZNI AZ ADATBAZISHOZ!");
else if(iFailState == TQUERY_QUERY_FAILED)
set_fail_state("Query Error");
if(iErrcode)
log_amx("[HIBA*] HIBAT DOBTAM: %s", sError);
}
public p_SQLLoadData(id)
{
static sQuery[512], sData[1];
sData[0] = id;
get_user_authid(id, g_sSteamID, charsmax(g_sSteamID));
formatex(sQuery, charsmax(sQuery), "SELECT * FROM `AdminSet` WHERE TargetSteamid = ^"%s^";", g_sSteamID);
SQL_ThreadQuery(g_SqlTuple, "p_SQLLoadDataThr", sQuery, sData, 1);
}
public p_SQLLoadDataThr(iFailState, Handle:sQuery, sError[], iErrcode, sData[], sDataSize)
{
if(iFailState == TQUERY_CONNECT_FAILED || iFailState == TQUERY_QUERY_FAILED)
{
log_amx("%s", sError);
return;
}
else
{
new id = sData[0];
new iRowFound = SQL_NumRows(sQuery);
if(iRowFound > 0)
g_iAdminNum[id] = SQL_ReadResult(sQuery, SQL_FieldNameToNum(sQuery, "TargetAdminlevel"));
else
{
p_PermissionsAdd(id);
p_SQLSave(id);
}
}
}
public p_SQLSave(id)
{
static sQuery[512];
get_user_authid(id, g_sSteamID, charsmax(g_sSteamID));
formatex(sQuery, charsmax(sQuery), "INSERT INTO `AdminSet` (`TargetSteamid`) VALUES (^"%s^");", g_sSteamID);
SQL_ThreadQuery(g_SqlTuple, "p_SQLSaveThr", sQuery);
}
public p_SQLSaveThr(iFailState, Handle:sQuery, sError[], iErrcode, sData[], sDataSize)
{
if(iFailState == TQUERY_CONNECT_FAILED || iFailState == TQUERY_QUERY_FAILED)
{
log_amx("%s", sError);
return;
}
}
public p_SQLUpdateThr(iFailState, Handle:sQuery, sError[], iErrcode, sData[], sDataSize)
{
if(iFailState == TQUERY_CONNECT_FAILED || iFailState == TQUERY_QUERY_FAILED)
{
log_amx("%s", sError);
return;
}
new id = sData[0];
p_PermissionsAdd(id);
}
get_server_prefix()
{
new sPrefix[64];
get_pcvar_string(g_cPrefix, sPrefix, charsmax(sPrefix));
return sPrefix;
}
public p_PermissionsAdd(id)
{
new iFlag;
iFlag = read_flags(Admin_Permissions[g_iAdminNum[id]][ePermission]);
remove_user_flags(id, iFlag);
set_user_flags(id, iFlag);
}
public client_authorized(id)
{
if(is_user_bot(id))
return PLUGIN_HANDLED;
p_SQLLoadData(id);
set_task(get_pcvar_float(g_fPermissionLoadTime), "p_PermissionsAdd", id);
return PLUGIN_HANDLED;
}
public client_disconnect(id)
{
if(is_user_bot(id))
return PLUGIN_HANDLED;
g_iAdminNum[id] = 0;
g_bChoosed[id] = false;
return PLUGIN_HANDLED;
}