SA-MP Forums Archive
Should this work? - 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)
+---- Forum: Help Archive (https://sampforum.blast.hk/forumdisplay.php?fid=89)
+---- Thread: Should this work? (/showthread.php?tid=244408)



Should this work? - Rivera - 27.03.2011

Hi all! I am not new now in the scripting hobby, so I think I should try different ways to script. Have a look at this command:

pawn Код:
public OnPlayerCommandText(playerid, cmdtext[])
{
    dcmd(sethealth, 9, cmdtext);
    return 1;
}

dcmd_sethealth(playerid, params[]) {
    new pID, value;
    if(sscanf(params, "ui", pID, value)) {
        if(PlayerInfo[playerid][AdminLevel] >= 3) {
            if(pID != INVALID_PLAYER_ID) {
                new tName[MAX_PLAYER_NAME], string[128];
                GetPlayerName(pID, tName, MAX_PLAYER_NAME);
                format(string, sizeof(string), "You have set (%i) %s's health to %i", pID, tName, value);
                SetPlayerHealth(pID, value);
            }
            else return SendClientMessage(playerid, COLOR_GREEN, "Player Not Found");
        }
        else return SendClientMessage(playerid, COLOR_RED, "You have no acces to this command");
    }
    return SendClientMessage(playerid, COLOR_GOLD, "Syntax Error: /sethealth [playerid] [amount]");
}
No errors when I compile! Yeah, I know, the right way:

pawn Код:
dcmd_sethealth(playerid, params[]) {
    new pID, value, pName[MAX_PLAYER_NAME], string[128];
    if(sscanf(params, "ui", pID, value)) return SendClientMessage(playerid, COLOR_GOLD, "/sethealth [playerid] [amount]");
    else if(pID == INVALID_PLAYER_ID) return SendClientMessage(playerid, COLOR_GREEN, "Player Not Found");
    else if(PlayerInfo[playerid][AdminLevel] <= 3) return SendClientMessage(playerid, COLOR_RED, "You have no access to this command");
    else {
        SetPlayerHealth(playerid, value);
        GetPlayerName(pID, pName, MAX_PLAYER_NAME);
        format(string, sizeof(string), "You changed (%i) %s's health to %i", pID, pName, value);
        SendClientMessage(playerid, COLOR_LIGHTBLUE, string);
    }
    return 1;
}
But I tried the other way. Now, my question is:

1) Should the first way work IG?!
2) What way should I use to compile? I am for the first one. Dunno why, it seems more professional


Re: Should this work? - HyperZ - 27.03.2011

Use this:
pawn Код:
public OnPlayerCommandText(playerid, cmdtext[])
{
    dcmd(sethealth, 9, cmdtext);
    return 1;
}
pawn Код:
dcmd_sethealth(playerid, params[])
{
    new pID, value;
    if(PlayerInfo[playerid][AdminLevel] >= 3)
    {
        if(sscanf(params, "ud", pID, value)) return SendClientMessage(playerid, COLOR_GOLD, "Syntax Error: /sethealth [playerid] [amount]");
        if(pID == INVALID_PLAYER_ID) return SendClientMessage(playerid, COLOR_GREEN, "Player Not Found");
        new tName[MAX_PLAYER_NAME], string[128];
        GetPlayerName(pID, tName, MAX_PLAYER_NAME);
        format(string, sizeof(string), "You have set (%d) %s's health to %d", pID, tName, value);
        SendClientMessage(playerid, -1,string);
        SetPlayerHealth(pID, value);
    }
    else return SendClientMessage(playerid, COLOR_RED, "You have no acces to this command");
    return 1;
}
Edit: use sscanf2.


Re: Should this work? - Rivera - 27.03.2011

thanks bro. and yeah I use sscanf2

pawn Код:
#include <sscanf2>



Re: Should this work? - ricardo178 - 27.03.2011

But if your learning try to learn an other better like zcmd, y_cmd or something....