19.12.2015, 03:26
Hi I get no warnings or errors but I have a feeling I screwed up.
Код:
enum {
EAdminDialog_ModifyAdmin,
EAdminDialog_SetAdminFlag,
EAdminDialog_AdminHelp,
EAdminDialog_AdminCmdHelp,
}
Код:
CMD:makeadmin(playerid, params[], help) {
new playa;
if(help) {
SendClientMessage(playerid, COLOR_WHITE, "Manage a players admin flags");
return 1;
}
if(!sscanf(params, "u", playa)) {
if(!IsPlayerConnected(playa)) {
SendClientMessage(playerid, COLOR_RED, "Player not connected");
return 1;
}
if(EAdminCMD:GetPVarInt(playa, "AdminFlags") & EAdminCMD_makeadmin && ~EAdminCMD:GetPVarInt(playerid, "AdminFlags") & EAdminCMD_makeadmin && GetPVarInt(playa, "AdminHidden") == 0) {
SendClientMessage(playerid, COLOR_LIGHTRED, "You cannot use this command on this person!");
return 1;
}
ShowAdminFlagsMenu(playerid, playa);
} else {
SendClientMessage(playerid, COLOR_WHITE, "USAGE: /makeadmin [id]");
}
return 1;
}
Код:
ShowAdminFlagsMenu(playerid, playa) {
tempstr[0] = 0;
dialogstr[0] = 0;
new EAdminCMD:aflags = EAdminCMD:GetPVarInt(playa, "AdminFlags");
new EAdminCMD:setterflags = EAdminCMD:GetPVarInt(playerid, "AdminFlags");
new statustext[32];
for(new i=0;i<sizeof(AdminFlagDescription);i++) {
if(aflags&AdminFlagDescription[i][EAFIFlag] || (AdminFlagDescription[i][EAFIFlag] == EAdminCMD_None && aflags == EAdminCMD_None)) {
statustext = "{00FF00}YES";
} else {
statustext = "{FF0000}NO";
}
format(tempstr,sizeof(tempstr),"{FFFFFF}%s - %s\n",AdminFlagDescription[i][EAFIDesc],statustext);
strcat(dialogstr,tempstr,sizeof(dialogstr));
}
if(setterflags & EAdminCMD_makeadmin) {
new title[64];
format(title,sizeof(title),"AND NOT AdminFlag\nAND AdminFlag\nSet AdminFlags(%d)",_:aflags);
strcat(dialogstr,title,sizeof(dialogstr));
}
SetPVarInt(playerid, "AdminEdit", playa);
SetPVarInt(playerid, "AdminEditFlags", GetPVarInt(playa, "AdminFlags"));
ShowPlayerDialog(playerid, EAdminDialog_ModifyAdmin, DIALOG_STYLE_LIST, "Modify Admin Permissions",dialogstr,"Toggle", "Done");
}
Код:
new editingadmin = GetPVarInt(playerid, "AdminEdit");
if(dialogid == EAdminDialog_ModifyAdmin)
{
if(GetPVarType(playerid,"AdminEdit") == PLAYER_VARTYPE_NONE) return 0;
if(response) {
new EAdminCMD:aflags = EAdminCMD:GetPVarInt(editingadmin, "AdminFlags");
new EAdminCMD:setterflags = EAdminCMD:GetPVarInt(playerid, "AdminFlags");
if(GetPVarInt(editingadmin, "AdminHidden") == 2 && ~setterflags & EAdminCMD_makeadmin) {
aflags = EAdminCMD_None;
}
if(listitem < sizeof(AdminFlagDescription)) {
if(~setterflags & EAdminCMD_makeadmin) {
if(~setterflags & AdminFlagDescription[listitem][EAFIFlag]) {
ShowAdminFlagsMenu(playerid, editingadmin);
SendClientMessage(playerid, COLOR_LIGHTRED, "You cannot elevate your privileges.");
return 1;
}
}
if(AdminFlagDescription[listitem][EAFIFlag] == EAdminCMD_None) {
aflags = EAdminCMD_None;
} else if(aflags & AdminFlagDescription[listitem][EAFIFlag]) {
aflags &= ~AdminFlagDescription[listitem][EAFIFlag];
} else {
aflags |= AdminFlagDescription[listitem][EAFIFlag];
}
SetPVarInt(editingadmin,"AdminFlags",_:aflags);
format(query,sizeof(query),"UPDATE `accounts` SET `adminlevel` = %d WHERE `id` = %d",GetPVarInt(editingadmin,"AdminFlags"), GetPVarInt(editingadmin,"AccountID"));
mysql_function_query(MySQLCon, query, true, "EmptyCallback", "");
ShowAdminFlagsMenu(playerid, editingadmin);
} else {
listitem -= sizeof(AdminFlagDescription);
SetPVarInt(playerid, "AdminModType", listitem);
ShowPlayerDialog(playerid,EAdminDialog_SetAdminFlag,DIALOG_STYLE_INPUT,"Enter Modification Value","Enter the value to perform the operation with:","Ok","Cancel");
}
} else {
if(GetPVarInt(playerid, "AdminEditFlags") != GetPVarInt(editingadmin, "AdminFlags")) {
format(query, sizeof(query), "* %s has edited %s's admin flags to be: %d",GetPlayerNameEx(playerid, ENameType_AccountName), GetPlayerNameEx(editingadmin, ENameType_AccountName),GetPVarInt(editingadmin,"AdminFlags"));
SendAdminMessage(COLOR_YELLOW, query);
}
DeletePVar(playerid, "AdminEdit");
DeletePVar(playerid, "AdminEditFlags");
}
}
if(dialogid == EAdminDialog_SetAdminFlag)
{
if(GetPVarType(playerid,"AdminEdit") == PLAYER_VARTYPE_NONE) return 0;
if(response) {
new EAdminFlags:aflags = EAdminFlags:GetPVarInt(editingadmin, "AdminFlags");
new type = GetPVarInt(playerid, "AdminModType");
new EAdminFlags:value = EAdminFlags:strval(inputtext);
switch(type) {
case 0: {
aflags &= ~value;
}
case 1: {
aflags &= value;
}
case 2: {
aflags = value;
}
}
SetPVarInt(editingadmin,"AdminFlags",_:aflags);
format(query,sizeof(query),"UPDATE `accounts` SET `adminlevel` = %d WHERE `id` = %d",GetPVarInt(editingadmin,"AdminFlags"), GetPVarInt(editingadmin,"AccountID"));
mysql_function_query(MySQLCon, query, true, "EmptyCallback", "");
ShowAdminFlagsMenu(playerid, editingadmin);
}
DeletePVar(playerid, "AdminModType");
}

