Limit the input
#1

Hi guys, I got a quick question. Help is highly appreciated!

I'm building a lotto script, and I'm currently working on ticket purchase system. Everything is pretty much self explanatory: The player types /lotto 1-100, gets 100$ removed and gets a ticket. However, I can't seem to understand how to limit the input to 1-100. Because now, I can do /lotto 'anything' and it will show the ticket as 'Your lotto ticket number: 'anything'. I tried using > < <= signs, but they don't show any effect.

So the question is pretty simple: how do I limit the input to 1-100?

My code:
Код:
	if (strcmp (cmd, "/lotto", true)==0)                                     
	{
        new tmp[28];
		tmp = strtok(cmdtext, idx);
		if(strlen(tmp) == 0) return SendClientMessage(playerid, 0xDC143CAA, "USAGE: /lotto [1-100]"); //This one works
		if(strlen(tmp) < (1)) return SendClientMessage(playerid, 0xDC143CAA, "USAGE: /lotto [1-100]"); //This one is somewhy ignored
		if(strlen(tmp) > (100)) return SendClientMessage(playerid, 0xDC143CAA, "USAGE: /lotto [1-100]"); //This one is somewhy ignored
		if(strlen(tmp) <= (100))
		SendClientMessage(playerid, 0x10F441AA, "You have purchased a lotto ticket!");
		SendClientMessage(playerid, 0x10F441AA, tmp);
		SendClientMessage(playerid, 0x10F441AA, "Wait for the draw.. Good luck!");
		return 1;
	}
Thank you very much!

PS. Ignore that it doesn't really convert the input into an actual ticket number, it's just to see if everything works in the input type.
Reply
#2

Strlen gets the length of the string, not its contents (hence string length). See strval.
Reply
#3

Well start with this first. Did you try to print the value tmp so for example try putting this right under the tmp variable.

printf("Text: %d",tmp);

That will let you see if the text is even being printed inside the CMD when you run your server.
Reply
#4

Hey.
I'd recommend you to use sscanf and zcmd inc's.
Here's a working code for that:
pawn Код:
COMMAND:lotto(playerid, params[])
{
new Number;
if(!sscanf(params, "d", Number))
{
    SendClientMessage(playerid, 0xFF0000FF, "USAGE: Lotto [1-100]"); // if they write something like: /lotto or /lotto blabla
    return 1;
}
if(Number < 1 || Number > 100)
{
    SendClientMessage(playerid, 0xFF0000FF, "USAGE: Lotto [1-100]"); // if they write /lotto -3; /lotto 0; /lotto 101
    return 1;
}
SendClientMessage(playerid, 0x10F441AA, "You have purchased a lotto ticket!");
SendClientMessage(playerid, 0x10F441AA, "Wait for the draw.. Good luck!");

return 1;
}
Greetz,
LetsOWN
Reply
#5

Oh damn, thank you Vince! I'll update my progress soon.
Mrtms, look at the code more carefully:
Код:
SendClientMessage(playerid, 0x10F441AA, tmp);
Thank you LetsOWN[PL]! I'll put that into my code! I'll update if I get any more problems.

Umm.. Which part of the script do I put your code into?
Reply
#6

Hey.
You can paste it anywhere you want. I'd recommend you to paste it to the very bottom of your script, like other commands. You can orientate in the script a way better then

Greetz,
LetsOWN
Reply
#7

Pardon me for a silly question.. I've never used COMMAND:, it tells me that 'lotto' is never used. I'm used to making commands in the 'onplayercommandtext'
COMMAND:lotto(playerid, params[])
Any ideas?
Reply
#8

Please make sure that COMMAND:lotto(playerid, params[]) is not under any public and that there is #include <zcmd> line on the top of your script and you've latest version of this include in your Include folder.

Greetz,
LetsOWN
Reply
#9

That's the problem - I don't have ZCMD in my include folder. Thank you, setting that up!
Reply
#10

use strval()
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)