SA-MP Forums Archive
Admin Rank displays incorrectly - Printable Version

+- SA-MP Forums Archive (https://sampforum.blast.hk)
+-- Forum: SA-MP Scripting and Plugins (https://sampforum.blast.hk/forumdisplay.php?fid=8)
+--- Forum: Scripting Help (https://sampforum.blast.hk/forumdisplay.php?fid=12)
+--- Thread: Admin Rank displays incorrectly (/showthread.php?tid=510109)



Admin Rank displays incorrectly - HydraX - 29.04.2014

pawn Код:
YCMD:setadmin(playerid, params[], help)
{
    if( pInfo[playerid][Adminlevel] >= 4 )
    {
        new
            TargetID,
            tLevel,
            tReason[50],
            AdmRank[128];

        if( !sscanf(params, "uiS(No reason specified)[50]", TargetID, tLevel, tReason) )
        {
            if( tLevel > 6 )                    return SendClientMessage( playerid, -1, "[SYSTEM]: Maximum Level: 6." );
            if( pInfo[TargetID][Adminlevel] == tLevel )                    return SendClientMessage( playerid, -1, "[SYSTEM]: This player is already this level." );
            if( strlen( tReason ) > 50 )        return SendClientMessage( playerid, -1, "[SYSTEM]: Please use between 0-50 characters." );
            if( !IsPlayerConnected(TargetID)) return SendClientMessage( playerid, -1, "[SYSTEM]: Invalid ID. Please try again." );
            new
                MyString[128],
                TargetString[128];
            if(pInfo[TargetID][Adminlevel] == 0) { AdmRank = "Regular Player"; }
            else if(pInfo[TargetID][Adminlevel] == 1) { AdmRank = "Moderator"; }
            else if(pInfo[TargetID][Adminlevel] == 2) { AdmRank = "Professional Moderator"; }
            else if(pInfo[TargetID][Adminlevel] == 3) { AdmRank = "Administrator"; }
            else if(pInfo[TargetID][Adminlevel] == 4) { AdmRank = "Head Administrator"; }
            else if(pInfo[TargetID][Adminlevel] >= 5) { AdmRank = "Owner"; }
            if( pInfo[TargetID][Adminlevel] < tLevel )
            {
                format( MyString, sizeof MyString, "[SYSTEM]: You promoted %s(ID:%d) to a %s. Level: (%i). Reason: %s", GetName(TargetID), TargetID, AdmRank, tLevel, tReason );
                format( TargetString, sizeof TargetString, "[SYSTEM]: You have been promoted by %s(ID:%d) to a %s. Level: (%i). Reason: %s", GetName(playerid), playerid, AdmRank, tLevel, tReason );
                SendClientMessage( TargetID, -1, TargetString );
            }
            else
            {
                format( MyString, sizeof MyString, "[SYSTEM]: You demoted %s(ID:%d) to a %s. Level: (%i). Reason: %s", GetName(TargetID), TargetID, AdmRank, tLevel, tReason );
                format( TargetString, sizeof TargetString, "[SYSTEM]: You have been demoted by %s(ID:%d) to a %s. Level: (%i). Reason: %s", GetName(playerid), playerid, AdmRank, tLevel, tReason );
                SendClientMessage( TargetID, -1, TargetString );
            }
            SendClientMessage( playerid, -1, MyString );
            pInfo[TargetID][Adminlevel] = tLevel;
        }
        else
            return SendClientMessage( playerid, -1, "[SYSTEM]: /setadmin <TargetID> <Level> <(OPTIONAL)Reason>" );
    }
    else
        return SendClientMessage( playerid, -1, "[SYSTEM]: You have to be a moderator to use this command!" );
    return 1;
}
Whenever I promote or demoted a player, the "AdmRank" string is suppose to show the level name at which coincides the level number, but instead it's incorrectly displayed.

i.e.

Owner - level 5 and 6
Head Admin - level 4
Admin - level 3
Pro Mod - level 2
Mod - level 1

but it displays incorrectly..

Owner - level 5 and 6
Owner - level 4
Head admin - level 3
Admin - level 2
Pro Mod - level 1
Mod - level 0


Re: Admin Rank displays incorrectly - iZN - 29.04.2014

Why don't you use switch() statement?

pawn Код:
YCMD:setadmin(playerid, params[], help)
{
    if( pInfo[playerid][Adminlevel] >= 4 )
    {
        new
            TargetID,
            tLevel,
            tReason[50],
            AdmRank[128];

        if( !sscanf(params, "uiS(No reason specified)[50]", TargetID, tLevel, tReason) )
        {
            if( tLevel > 6 )                    return SendClientMessage( playerid, -1, "[SYSTEM]: Maximum Level: 6." );
            if( pInfo[TargetID][Adminlevel] == tLevel )                    return SendClientMessage( playerid, -1, "[SYSTEM]: This player is already this level." );
            if( strlen( tReason ) > 50 )        return SendClientMessage( playerid, -1, "[SYSTEM]: Please use between 0-50 characters." );
            if( !IsPlayerConnected(TargetID)) return SendClientMessage( playerid, -1, "[SYSTEM]: Invalid ID. Please try again." );
            new
                MyString[128],
                TargetString[128];
            switch(pInfo[TargetID][Adminlevel])
            {
                case 0: AdmRank = "Regular Player";
                case 1: AdmRank = "Moderator";
                case 2: AdmRank = "Professional Moderator";
                case 3: AdmRank = "Administrator";
                case 4: AdmRank = "Head Administrator";
                case 5,6: AdmRank = "Owner";
            }
            if( pInfo[TargetID][Adminlevel] < tLevel )
            {
                format( MyString, sizeof MyString, "[SYSTEM]: You promoted %s(ID:%d) to a %s. Level: (%i). Reason: %s", GetName(TargetID), TargetID, AdmRank, tLevel, tReason );
                format( TargetString, sizeof TargetString, "[SYSTEM]: You have been promoted by %s(ID:%d) to a %s. Level: (%i). Reason: %s", GetName(playerid), playerid, AdmRank, tLevel, tReason );
                SendClientMessage( TargetID, -1, TargetString );
            }
            else
            {
                format( MyString, sizeof MyString, "[SYSTEM]: You demoted %s(ID:%d) to a %s. Level: (%i). Reason: %s", GetName(TargetID), TargetID, AdmRank, tLevel, tReason );
                format( TargetString, sizeof TargetString, "[SYSTEM]: You have been demoted by %s(ID:%d) to a %s. Level: (%i). Reason: %s", GetName(playerid), playerid, AdmRank, tLevel, tReason );
                SendClientMessage( TargetID, -1, TargetString );
            }
            SendClientMessage( playerid, -1, MyString );
            pInfo[TargetID][Adminlevel] = tLevel;
        }
        else
            return SendClientMessage( playerid, -1, "[SYSTEM]: /setadmin <TargetID> <Level> <(OPTIONAL)Reason>" );
    }
    else
        return SendClientMessage( playerid, -1, "[SYSTEM]: You have to be a moderator to use this command!" );
    return 1;
}



Re: Admin Rank displays incorrectly - AphexCCFC - 29.04.2014

Stock:

pawn Код:
stock AdminRank(playerid)
{
    new name[23];
    if(pInfo[playerid][Adminlevel] == 0) format(name, sizeof(name), "Regular Player");
    else if(pInfo[playerid][Adminlevel] == 1) format(name, sizeof(name), "Moderator");
    else if(pInfo[playerid][Adminlevel] == 2) format(name, sizeof(name), "Professional Moderator");
    else if(pInfo[playerid][Adminlevel] == 3) format(name, sizeof(name), "Administrator");
    else if(pInfo[playerid][Adminlevel] == 4) format(name, sizeof(name), "Head Administrator");
    else if(pInfo[playerid][Adminlevel] > 4) format(name, sizeof(name), "Owner");
    return name;
}
Command:

pawn Код:
YCMD:setadmin(playerid, params[], help)
{
    if( pInfo[playerid][Adminlevel] >= 4 )
    {
        new
            TargetID,
            tLevel,
            tReason[50],

        if( !sscanf(params, "uiS(No reason specified)[50]", TargetID, tLevel, tReason) )
        {
            if( tLevel > 6 )                    return SendClientMessage( playerid, -1, "[SYSTEM]: Maximum Level: 6." );
            if( pInfo[TargetID][Adminlevel] == tLevel )                    return SendClientMessage( playerid, -1, "[SYSTEM]: This player is already this level." );
            if( strlen( tReason ) > 50 )        return SendClientMessage( playerid, -1, "[SYSTEM]: Please use between 0-50 characters." );
            if( !IsPlayerConnected(TargetID)) return SendClientMessage( playerid, -1, "[SYSTEM]: Invalid ID. Please try again." );
            new
                MyString[128],
                TargetString[128];
            if( pInfo[TargetID][Adminlevel] < tLevel )
            {
                format( MyString, sizeof MyString, "[SYSTEM]: You promoted %s(ID:%d) to a %s. Level: (%i). Reason: %s", GetName(TargetID), TargetID, AdminRank(TargetID), tLevel, tReason );
                format( TargetString, sizeof TargetString, "[SYSTEM]: You have been promoted by %s(ID:%d) to a %s. Level: (%i). Reason: %s", GetName(playerid), playerid, AdminRank(playerid), tLevel, tReason );
                SendClientMessage( TargetID, -1, TargetString );
            }
            else
            {
                format( MyString, sizeof MyString, "[SYSTEM]: You demoted %s(ID:%d) to a %s. Level: (%i). Reason: %s", GetName(TargetID), TargetID, AdminRank(TargetID), tLevel, tReason );
                format( TargetString, sizeof TargetString, "[SYSTEM]: You have been demoted by %s(ID:%d) to a %s. Level: (%i). Reason: %s", GetName(playerid), playerid, AdminRank(playerid), tLevel, tReason );
                SendClientMessage( TargetID, -1, TargetString );
            }
            SendClientMessage( playerid, -1, MyString );
            pInfo[TargetID][Adminlevel] = tLevel;
        }
        else
            return SendClientMessage( playerid, -1, "[SYSTEM]: /setadmin <TargetID> <Level> <(OPTIONAL)Reason>" );
    }
    else
        return SendClientMessage( playerid, -1, "[SYSTEM]: You have to be a moderator to use this command!" );
    return 1;
}
Try that.


Re: Admin Rank displays incorrectly - HydraX - 29.04.2014

I never knew a switch was needed for this, I thought AdmRank was pretty much like tLevel, variables where it would just get the rank after the guy was demoted/promoted. I'll try it out.


Re: Admin Rank displays incorrectly - HydraX - 29.04.2014

By the way it still isn't working.




Re: Admin Rank displays incorrectly - iZN - 29.04.2014

switch tLevel instead. That should do it.


pawn Код:
switch(tLevel)
{
    case 0: AdmRank = "Regular Player";
    case 1: AdmRank = "Moderator";
    case 2: AdmRank = "Professional Moderator";
    case 3: AdmRank = "Administrator";
    case 4: AdmRank = "Head Administrator";
    case 5,6: AdmRank = "Owner";
}



Re: Admin Rank displays incorrectly - HydraX - 29.04.2014

Thanks!


Re: Admin Rank displays incorrectly - Luis- - 29.04.2014

Would an array be faster Alex? And would it possible for an example?


Re: Admin Rank displays incorrectly - Vince - 29.04.2014

I don't believe it's faster, but it's convenient because you can use it across your entire script. But that's beside the point of this topic. The actual problem is that the current admin level is retrieved, rather than the updated admin level because the messages are sent before the new level is actually set. If that made sense.

Edit: no strikethrough tag


Re: Admin Rank displays incorrectly - Luis- - 29.04.2014

Yeah sorry for hijacking the topic, I just like finding out that I can make things faster.