Admin ranks - Switch
#1

How do I do this properly? When I compile this pawn stops responding

Код:
GetAdminRankName(playerid)

    switch(PlayerInfo[id][pAdmin])
    {
        case 0:
        {
            return "Moderator"
        }
        case 1:
        {
            return "Game Administrator"
        }
        case 2:
        {
            return "Lead Administrator"
        }
        case 3:
        {
            return "Server Manager"
        }

        return 1;
}
CMD:makeadmin(playerid, params[])
{
    new id, AdminLevel;

    if(PlayerInfo[targetid][pAdmin] >= 3 || IsPlayerAdmin(playerid))
    {
        if(sscanf(params, "ui", id, AdminLevel))
            return SendClientMessage(playerid, -1, "USAGE: /makeadmin [ID] [LEVEL 1-4]");

        if(AdminLevel < 1 || AdminLevel > 4)
            return SendClientMessage(playerid, COLOR_RED, "ERROR: Invalid Admin level");

        if(!IsPlayerConnected(id))
            return SendClientMessage(playerid, COLOR_RED, "ERROR: Player is not connected!");

        SendClientMessageEx(playerid, COLOR_LAWNGREEN, "You've just been made: %s admin level: %i", ReturnName(id), GetAdminRankName);
        SendClientMessageEx(targetid, COLOR_LAWNGREEN, "You've just been made admin level: %i by %s", GetAdminRankName, ReturnName(id));

        PlayerInfo[id][pAdmin] = AdminLevel;
    }
    else return SendClientMessage(playerid, COLOR_RED, "ERROR: You are not an Admin!");

    return 1;
}
Reply
#2

Pawno stops working because you're missing a closing bracket } at the switch operator closing and a opening bracket { at the GetAdminRankName function opening.
This:
pawn Код:
GetAdminRankName(playerid)
{
    switch(PlayerInfo[id][pAdmin])
    {
        case 0:
        {
            return "Moderator"
        }
        case 1:
        {
            return "Game Administrator"
        }
        case 2:
        {
            return "Lead Administrator"
        }
        case 3:
        {
            return "Server Manager"
        }
    }
    return 1;
}
CMD:makeadmin(playerid, params[])
{
    new id, AdminLevel;

    if(PlayerInfo[targetid][pAdmin] >= 3 || IsPlayerAdmin(playerid))
    {
        if(sscanf(params, "ui", id, AdminLevel))
            return SendClientMessage(playerid, -1, "USAGE: /makeadmin [ID] [LEVEL 1-4]");

        if(AdminLevel < 1 || AdminLevel > 4)
            return SendClientMessage(playerid, COLOR_RED, "ERROR: Invalid Admin level");

        if(!IsPlayerConnected(id))
            return SendClientMessage(playerid, COLOR_RED, "ERROR: Player is not connected!");

        SendClientMessageEx(playerid, COLOR_LAWNGREEN, "You've just been made: %s admin level: %i", ReturnName(id), GetAdminRankName);
        SendClientMessageEx(targetid, COLOR_LAWNGREEN, "You've just been made admin level: %i by %s", GetAdminRankName, ReturnName(id));

        PlayerInfo[id][pAdmin] = AdminLevel;
    }
    else return SendClientMessage(playerid, COLOR_RED, "ERROR: You are not an Admin!");

    return 1;
}
Reply
#3

PHP код:
ReturnAdminLevel(playerid)
{
    new
        
string[64]
    ;
    switch (
PlayerInfo[playerid][pAdmin])
    {
        case 
1string"Moderator";
        case 
2string"Game Administrator";
        case 
3string"Lead Administrator";
        case 
4string"Server Manager";
        default:  
string"Undefined";
    }
    return 
string;

Then to use it here's an example:

PHP код:
SendClientMessageEx(playeridCOLOR_LAWNGREEN"%s has just promoted you to %s",ReturnName(playerid), ReturnAdminLevel(id)); 
Reply
#4

Quote:
Originally Posted by TheToretto
Посмотреть сообщение
PHP код:
ReturnAdminLevel(playerid)
{
    new
        
string[64]
    ;
    switch (
PlayerInfo[playerid][pAdmin])
    {
        case 
1string"Moderator";
        case 
2string"Game Administrator";
        case 
3string"Lead Administrator";
        case 
4string"Server Manager";
        default:  
string"Undefined";
    }
    return 
string;

Then to use it here's an example:

PHP код:
SendClientMessageEx(playeridCOLOR_LAWNGREEN"%s has just promoted you to %s",ReturnName(playerid), ReturnAdminLevel(id)); 
I mean when I do /makeadmin 0 4, it displays first case 2 and then the correct one. Same thing if I choose case 4 and then case 3, it displays first case 4 and then the correct one which is case 3.
Reply
#5

I see what you mean. It's because you're assigning the variable's value after sending the message.

Put this before sending the formatted message.

PHP код:
PlayerInfo[id][pAdmin] = AdminLevel
Reply
#6

This will also work
pawn Код:
GetAdminRankName(playerid)
{
    new string[24];
    switch(PlayerInfo[playerid][pAdmin])
    {
        case 0:
        {
            string = "Moderator"
        }
        case 1:
        {
            string = "Game Administrator"
        }
        case 2:
        {
            string = "Lead Administrator"
        }
        case 3:
        {
            string = "Server Manager"
        }
    }
    return string;
}
CMD:makeadmin(playerid, params[])
{
    new id, AdminLevel;

    if(PlayerInfo[targetid][pAdmin] >= 3 || IsPlayerAdmin(playerid))
    {
        if(sscanf(params, "ui", id, AdminLevel))
            return SendClientMessage(playerid, -1, "USAGE: /makeadmin [ID] [LEVEL 1-4]");

        if(AdminLevel < 1 || AdminLevel > 4)
            return SendClientMessage(playerid, COLOR_RED, "ERROR: Invalid Admin level");

        if(!IsPlayerConnected(id))
            return SendClientMessage(playerid, COLOR_RED, "ERROR: Player is not connected!");
        PlayerInfo[id][pAdmin] = AdminLevel;
        SendClientMessageEx(playerid, COLOR_LAWNGREEN, "You've just been made: %s admin level: %i", ReturnName(id), GetAdminRankName(id));
        SendClientMessageEx(targetid, COLOR_LAWNGREEN, "You've just been made admin level: %i by %s", GetAdminRankName(id), ReturnName(id));
    }
    else return SendClientMessage(playerid, COLOR_RED, "ERROR: You are not an Admin!");

    return 1;
}
You're using the function before the admin level.
Reply
#7

Quote:
Originally Posted by ConnorW
Посмотреть сообщение
This will also work
pawn Код:
GetAdminRankName(playerid)
{
    new string[24];
    switch(PlayerInfo[playerid][pAdmin])
    {
        case 0:
        {
            string = "Moderator"
        }
        case 1:
        {
            string = "Game Administrator"
        }
        case 2:
        {
            string = "Lead Administrator"
        }
        case 3:
        {
            string = "Server Manager"
        }
    }
    return string;
}
CMD:makeadmin(playerid, params[])
{
    new id, AdminLevel;

    if(PlayerInfo[targetid][pAdmin] >= 3 || IsPlayerAdmin(playerid))
    {
        if(sscanf(params, "ui", id, AdminLevel))
            return SendClientMessage(playerid, -1, "USAGE: /makeadmin [ID] [LEVEL 1-4]");

        if(AdminLevel < 1 || AdminLevel > 4)
            return SendClientMessage(playerid, COLOR_RED, "ERROR: Invalid Admin level");

        if(!IsPlayerConnected(id))
            return SendClientMessage(playerid, COLOR_RED, "ERROR: Player is not connected!");
        PlayerInfo[id][pAdmin] = AdminLevel;
        SendClientMessageEx(playerid, COLOR_LAWNGREEN, "You've just been made: %s admin level: %i", ReturnName(id), GetAdminRankName(id));
        SendClientMessageEx(targetid, COLOR_LAWNGREEN, "You've just been made admin level: %i by %s", GetAdminRankName(id), ReturnName(id));
    }
    else return SendClientMessage(playerid, COLOR_RED, "ERROR: You are not an Admin!");

    return 1;
}
You're using the function before the admin level.
This code will not show the admin level name. You're formatting an integer there...
Then the admin who's going to promote someone is the playerid, why do you returnname of the targetid? Makes no sense.

PHP код:
        SendClientMessageEx(playeridCOLOR_LAWNGREEN"You've just made: %s admin level: %s",ReturnName(id), GetAdminRankName(id));
        
SendClientMessageEx(targetidCOLOR_LAWNGREEN"You've just been made admin level: %s by %s"GetAdminRankName(id), ReturnName(playerid)); 
Reply
#8

Quote:
Originally Posted by TheToretto
Посмотреть сообщение
This code will not show the admin level name. You're formatting an integer there...
Then the admin who's going to promote someone is the playerid, why do you returnname of the targetid? Makes no sense.

PHP код:
        SendClientMessageEx(playeridCOLOR_LAWNGREEN"You've just made: %s admin level: %s",ReturnName(id), GetAdminRankName(id));
        
SendClientMessageEx(targetidCOLOR_LAWNGREEN"You've just been made admin level: %s by %s"GetAdminRankName(id), ReturnName(playerid)); 
LOL are you kidding me?
EDIT:
Basically his /makeadmin code is wrong, this is how it should work
pawn Код:
CMD:makeadmin(playerid, params[])
{
    new id, AdminLevel;

    if(PlayerInfo[playerid][pAdmin] >= 3 || IsPlayerAdmin(playerid))
    {
        if(sscanf(params, "ui", id, AdminLevel))
            return SendClientMessage(playerid, -1, "USAGE: /makeadmin [ID] [LEVEL 1-4]");

        if(AdminLevel < 1 || AdminLevel > 4)
            return SendClientMessage(playerid, COLOR_RED, "ERROR: Invalid Admin level");

        if(!IsPlayerConnected(id))
            return SendClientMessage(playerid, COLOR_RED, "ERROR: Player is not connected!");
        PlayerInfo[id][pAdmin] = AdminLevel;
        SendClientMessageEx(playerid, COLOR_LAWNGREEN, "You've just been made: %s admin level: %i", ReturnName(id), AdminLevel);
        SendClientMessageEx(id, COLOR_LAWNGREEN, "You've just been made admin level: %i(%s) by %s", AdminLevel, GetAdminRankName(id), ReturnName(playerid));
    }
    else return SendClientMessage(playerid, COLOR_RED, "ERROR: You are not an Admin!");

    return 1;
}
Reply
#9

Quote:
Originally Posted by ConnorW
Посмотреть сообщение
LOL are you kidding me?
EDIT:
Basically his /makeadmin code is wrong, this is how it should work
pawn Код:
CMD:makeadmin(playerid, params[])
{
    new id, AdminLevel;

    if(PlayerInfo[playerid][pAdmin] >= 3 || IsPlayerAdmin(playerid))
    {
        if(sscanf(params, "ui", id, AdminLevel))
            return SendClientMessage(playerid, -1, "USAGE: /makeadmin [ID] [LEVEL 1-4]");

        if(AdminLevel < 1 || AdminLevel > 4)
            return SendClientMessage(playerid, COLOR_RED, "ERROR: Invalid Admin level");

        if(!IsPlayerConnected(id))
            return SendClientMessage(playerid, COLOR_RED, "ERROR: Player is not connected!");
        PlayerInfo[id][pAdmin] = AdminLevel;
        SendClientMessageEx(playerid, COLOR_LAWNGREEN, "You've just been made: %s admin level: %i", ReturnName(id), GetAdminRankName(id));
        SendClientMessageEx(id, COLOR_LAWNGREEN, "You've just been made admin level: %i by %s", GetAdminRankName(id), ReturnName(playerid));
    }
    else return SendClientMessage(playerid, COLOR_RED, "ERROR: You are not an Admin!");

    return 1;
}
No I'm not kidding you, the output of the SCM is wrong. It won't show the admin rank because you're formatting an INTEGER instead of a string.

Your code:

PHP код:
        SendClientMessageEx(playeridCOLOR_LAWNGREEN"You've just been made: %s admin level: %i"ReturnName(id), GetAdminRankName(id));
        
SendClientMessageEx(idCOLOR_LAWNGREEN"You've just been made admin level: %i by %s"GetAdminRankName(id), ReturnName(id)); 
Reply


Forum Jump:


Users browsing this thread: 3 Guest(s)