SA-MP Forums Archive
/pay command help - 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: /pay command help (/showthread.php?tid=308739)



/pay command help - ReneG - 05.01.2012

I'm still learning to code, so I looked up a /pay command tutorial. Followed the steps, and I get 4 errors upon compiling.

Here is my code.

pawn Код:
public OnPlayerCommandText(playerid, cmdtext[])
{
   

    new idx[256];
    new cmd[256];
   
    cmd = strtok(cmd, idx,
   
    if(strcmp("/pay", cmd, true, 10) ==0)
    {
        new tmp[256], tmp2[256];
        tmp = strtok(cmdtext, idx,
        tmp2 = strtok(cmdtext, idx, //money
    }
    if(!strlen(tmp)) {
        SendClientMessage(playerid, COLOR_GREY, "Usage: /pay [playerid] [amount]");
        return 1;
    }
   
    if(strlen(tmp2))
    {
        SendClientMessage(playerid, COLOR_GREY, "Usage: /pay [playerid] [amount]");
        return 1;
    }
    new reciever, money;
    reciever = strval(tmp);
    money = strval(tmp2);
     
    if(GetPlayerMoney(playerid) < money)
    {
        SendClientMessage(playerid, COLOR_GREY, "You don't have that much!");
        return 1;

    }
   
    new string[128];
    new playername[MAX_PLAYER_NAME];
    GetPlayerName(playerid, playername, sizeof(playername));
    new playername2[MAX_PLAYER_NAME];
    GetPlayerName(playerid, playername2, sizeof(playername2));
   
    format(string, sizeof(string), "You recieved &%d from %s.", money, playername);
    SendClientMessage(playerid, COLOR_GREY, string);
    format(string, sizeof(string), "You gave &%d to %s.", money, playername);
    SendClientMessage(playerid, COLOR_GREY, string);
   
    GivePlayerMoney(playerid, (0 - money));
    GivePlayerMoney(reciever, money);
   
    strtok(const string[], &index) {

    new length = strlen(string);
    while ((index < length) && (string[index] <= ' '))
    {
        index++;
    }

    new offset = index;
    new result[20];
    while ((index < length) && (string[index] > ' ') && ((index - offset) < (sizeof(result) - 1)))
    {
        result[index - offset] = string[index];
        index++;
    }
    result[index - offset] = EOS;
    return result;
   
    }
    return 1;
}
Error codes.
Код:
C:\Documents and Settings\Administrator\My Documents\My DM from scratch\gamemodes\new.pwn(236) : error 017: undefined symbol "strtok"
C:\Documents and Settings\Administrator\My Documents\My DM from scratch\gamemodes\new.pwn(236 -- 238) : error 029: invalid expression, assumed zero
C:\Documents and Settings\Administrator\My Documents\My DM from scratch\gamemodes\new.pwn(238 -- 239) : error 029: invalid expression, assumed zero
C:\Documents and Settings\Administrator\My Documents\My DM from scratch\gamemodes\new.pwn(238 -- 239) : fatal error 107: too many error messages on one line

Compilation aborted.Pawn compiler 3.2.3664	 	 	Copyright © 1997-2006, ITB CompuPhase


4 Errors.
If anyone could provide an answer of why I'm getting these errors, it would be greatly appreciated. I will +Rep.


Re: /pay command help - coole210 - 05.01.2012

You need a closing bracket and semicolon ( ; ) on each strtok line.


Re: /pay command help - [O.z]Caroline - 05.01.2012

Try this:
pawn Код:
public OnPlayerCommandText(playerid, cmdtext[])
{
    new idx;
    new cmd[128];
    cmd = strtok(cmdtext, idx);

    if(strcmp("/pay", cmd, true, 10) ==0 )
    {
        new tmp[128], tmp2[128];
        tmp = strtok(cmd, idx);
        tmp2 = strtok(cmd, idx); //money
        if(!strlen(tmp))
        {
            SendClientMessage(playerid, COLOR_GREY, "Usage: /pay [playerid] [amount]");
            return 1;
        }

        if(strlen(tmp2))
        {
            SendClientMessage(playerid, COLOR_GREY, "Usage: /pay [playerid] [amount]");
            return 1;
        }
       
        new reciever, money;
        reciever = strval(tmp);
        money = strval(tmp2);

        if(GetPlayerMoney(playerid) < money)
        {
            SendClientMessage(playerid, COLOR_GREY, "You don't have that much!");
            return 1;

        }

        new string[128];
        new playername[MAX_PLAYER_NAME];
        GetPlayerName(playerid, playername, sizeof(playername));
        new playername2[MAX_PLAYER_NAME];
        GetPlayerName(playerid, playername2, sizeof(playername2));

        format(string, sizeof(string), "You recieved &%d from %s.", money, playername);
        SendClientMessage(playerid, COLOR_GREY, string);
        format(string, sizeof(string), "You gave &%d to %s.", money, playername);
        SendClientMessage(playerid, COLOR_GREY, string);

        GivePlayerMoney(playerid, (0 - money));
        GivePlayerMoney(reciever, money);
        return 1;
    }
    return 0;
}
    strtok(const string[], &index) {

    new length = strlen(string);
    while ((index < length) && (string[index] <= ' '))
    {
        index++;
    }

    new offset = index;
    new result[20];
    while ((index < length) && (string[index] > ' ') && ((index - offset) < (sizeof(result) - 1)))
    {
        result[index - offset] = string[index];
        index++;
    }
    result[index - offset] = EOS;
    return result;

    }



Respuesta: /pay command help - Vladeksh - 05.01.2012

try this using sscanf 2.0, very simple
https://sampforum.blast.hk/showthread.php?tid=120356

Quote:
Originally Posted by SA-MP Wiki
Strtok

Note: This function is deprecated and use of it should be avoided where possible.
Better alternatives like sscanf are available for you to use.
pawn Код:
if(strcmp(cmd, "/pay", true) == 0)
{
    new reciever, money;
    if (sscanf(params, "dd", reciever, money)) SendClientMessage(playerid, COLOR_WHITE, "Usage: /pay [playerid] [amount]");
    else
    {
        if(GetPlayerMoney(playerid) < money)
        {
            SendClientMessage(playerid, COLOR_GREY, "You don't have that much!");
            return 1;
        }
        new string[64], playername[MAX_PLAYER_NAME], playername2[MAX_PLAYER_NAME];
        GetPlayerName(playerid, playername, sizeof(playername));
        GetPlayerName(reciever, playername2, sizeof(playername2));
        format(string, sizeof(string), "You recieved &%d from %s.", money, playername);
        SendClientMessage(playerid, COLOR_GREY, string);
        format(string, sizeof(string), "You gave &%d to %s.", money, playername);
        SendClientMessage(playerid, COLOR_GREY, string);
        GivePlayerMoney(playerid, GetPlayerMoney(playerid) - money);
        GivePlayerMoney(reciever, GetPlayerMoney(reciever) + money);
        return 1;
    }
}



Re: /pay command help - ReneG - 05.01.2012

I will try sscanf. I just wanted to acquaint myself with strtok. Thank you guys. Repped to all who answered.