Command With Playerid and Reason
#1

Hey hey!... [SAP]Sidhu here.. I'm making a new GM and I'm stuck on one of the commands I want to make. I'm making a Cops and Robbers GM, and want to make the following command: /pullover [playerid] [reason]... I don't have a clue of how I would do this. Could somebody please help me make this?

Thanks.
Reply
#2

Use dcmd and sscanf.
Reply
#3

wut this sould do?
Reply
#4

pawn Код:
dcmd_pullover(playerid,params[])
{
   new giveplayerid, reason[128];
   if(sscanf(params,"ds",giveplayerid,reason))
   {
      //They left out a parameter
   }
   if(!IsPlayerConnected(giveplayerid))
   {
      //The specified player is not connected
   }
   //They specified a connected player and a reason
   //Do the rest
}
Reply
#5

Remember that sscanf has z (optional string).
And backwardsman, this is posted for Sidhu, it's not meant to post against you :P
Reply
#6

Woah, ok.. Remember, I'm new to this.. Can somebody explain that code to me?
Reply
#7

Check fast commands on WIKI
Reply
#8

pawn Код:
if(strcmp("/kick", cmdtext, true, 5) == 0) // "/kick" is 5 bytes long
    {
        if(strlen(cmdtext[6]) == 0) return SendClientMessage(playerid, 0xFF0000AA, "Usage: /kick [ID] [MSG]");
        //lenght of string at byte 6+, 0 if there is nothing there

        new id = strval(cmdtext[6]);
        //value of the string at byte 6+

        if(IsPlayerConnected(id) == 0) return SendClientMessage(playerid, 0xFF0000AA, "Player not connected");
        //check if the player is connected
       
        new pos = strfind(cmdtext, " ", true, 6);
        //get the position of the string after the space
       
        if(pos == -1) return SendClientMessage(playerid, 0xFF0000AA, "Usage: /kick [ID] [MSG]");
        //pos will be -1 if there is no space
       
        if(strlen(cmdtext[pos + 1]) == 0) return SendClientMessage(playerid, 0xFF0000AA, "Usage: /kick [ID] [MSG]");
        //check if there is a string after the space (pos is space, + 1 more byte)
       
        new string[128];
        format(string, sizeof(string), "ID %d has been kicked for %s", id, cmdtext[pos + 1]);
        SendClientMessageToAll(0xFFFFFFFF, string);
        //format your crap as needed
       
        Kick(id);
        //kick player
        return 1;
    }
Reply
#9

Quote:
Originally Posted by Lazarus
pawn Код:
if(strcmp("/kick", cmdtext, true, 5) == 0) // "/kick" is 5 bytes long
    {
        if(strlen(cmdtext[6]) == 0) return SendClientMessage(playerid, 0xFF0000AA, "Usage: /kick [ID] [MSG]");
        //lenght of string at byte 6+, 0 if there is nothing there

        new id = strval(cmdtext[6]);
        //value of the string at byte 6+

        if(IsPlayerConnected(id) == 0) return SendClientMessage(playerid, 0xFF0000AA, "Player not connected");
        //check if the player is connected
       
        new pos = strfind(cmdtext, " ", true, 6);
        //get the position of the string after the space
       
        if(pos == -1) return SendClientMessage(playerid, 0xFF0000AA, "Usage: /kick [ID] [MSG]");
        //pos will be -1 if there is no space
       
        if(strlen(cmdtext[pos + 1]) == 0) return SendClientMessage(playerid, 0xFF0000AA, "Usage: /kick [ID] [MSG]");
        //check if there is a string after the space (pos is space, + 1 more byte)
       
        new string[128];
        format(string, sizeof(string), "ID %d has been kicked for %s", id, cmdtext[pos + 1]);
        SendClientMessageToAll(0xFFFFFFFF, string);
        //format your crap as needed
       
        Kick(id);
        //kick player
        return 1;
    }
Awesome, thanks man!
Reply
#10

I'm making a /pullover command, and this is what I have..

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

    if(strcmp("/pullover", cmdtext, true, 9) == 0) // "/pullover" is 9 bytes long
    {
        if(strlen(cmdtext[10]) == 0) return SendClientMessage(playerid, 0xFF0000AA, "Usage: /kick [ID] [MSG]");
        //lenght of string at byte 10+, 0 if there is nothing there

        new id = strval(cmdtext[10]);
        //value of the string at byte 10+

        if(IsPlayerConnected(id) == 0) return SendClientMessage(playerid, 0xFF0000AA, "Player not connected");
        //check if the player is connected

        new pos = strfind(cmdtext, " ", true, 10);
        //get the position of the string after the space

        if(pos == -1) return SendClientMessage(playerid, 0xFF0000AA, "Usage: /pullover [ID] [MSG]");
        //pos will be -1 if there is no space

        if(strlen(cmdtext[pos + 1]) == 0) return SendClientMessage(playerid, 0xFF0000AA, "Usage: /pullover [ID] [MSG]");
        //check if there is a string after the space (pos is space, + 1 more byte)

        new string[128];
        format(string, sizeof(string), "ID %d is being asked to pullover for %s", id, cmdtext[pos + 1]);
        SendClientMessageToAll(0xFFFFFFFF, string);
        //format your crap as needed

        Pullover(id);
        //kick player
        return 1;
    }
When I try to compile, I get this error:

C:\Users\Sidhu\Desktop\CopsN'Robbers.pwn(735) : error 017: undefined symbol "Pullover"
Pawn compiler 3.2.3664 Copyright © 1997-2006, ITB CompuPhase


1 Error.
Reply
#11



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

    if(strcmp("/pullover", cmdtext, true, 9) == 0)
    {
        if(strlen(cmdtext[10]) == 0) return SendClientMessage(playerid, 0xFF0000AA, "Usage: /pullover [ID] [MSG]");

        new id = strval(cmdtext[10]);

        if(IsPlayerConnected(id) == 0) return SendClientMessage(playerid, 0xFF0000AA, "Player not connected");

        new pos = strfind(cmdtext, " ", true, 10);

        if(pos == -1) return SendClientMessage(playerid, 0xFF0000AA, "Usage: /pullover [ID] [MSG]");

        if(strlen(cmdtext[pos + 1]) == 0) return SendClientMessage(playerid, 0xFF0000AA, "Usage: /pullover [ID] [MSG]");

        new string[128];
        format(string, sizeof(string), "ID %d is being asked to pullover for %s", id, cmdtext[pos + 1]);
        SendClientMessage(id, 0xFFFFFFFF, string);

        return 1;
    }
I only looked at the last part id = playerid the code he sent you was to kick and you changed it but forgot some things anyway try that. I did not test in game but it compiled fine.
Reply
#12

You can't just make up functions, Sidhu. If your unsure if it exists, look on the wiki:

https://sampwiki.blast.hk/wiki/Category:Scripting_Functions
https://sampwiki.blast.hk/wiki/Scripting_Functions_Old
Reply
#13

Quote:
Originally Posted by Lazarus
You can't just make up functions, Sidhu. If your unsure if it exists, look on the wiki:

https://sampwiki.blast.hk/wiki/Category:Scripting_Functions
https://sampwiki.blast.hk/wiki/Scripting_Functions_Old
Well I highly doubt Pullover would exist :P, and it doesn't:P
Reply
#14

Quote:
Originally Posted by <3 HardStyle <3 | LarzI
Remember that sscanf has z (optional string).
And backwardsman, this is posted for Sidhu, it's not meant to post against you :P
I know :P

You should really look into dcmd and sscanf. It will make things a lot easier.
Reply
#15

That's an opinion, not a fact :P. I find the regular strcmp version easier, personally.

I like knowing Exactly how everything works.
pawn Код:
#define dcmd(%1,%2,%3) if (!strcmp((%3)[1], #%1, true, (%2)) && ((((%3)[(%2) + 1] == '\0') && (dcmd_%1(playerid, ""))) || (((%3)[(%2) + 1] == ' ') && (dcmd_%1(playerid, (%3)[(%2) + 2]))))) return 1
That is Not how I role (lol) ^. Plus it means you didn't completely make the script yourself, which feels like a real bummer to me. And I find it easier to find bugs in script that you make yourself.
Reply
#16

@Lazarus, it's kinda a fact
dcmd and sscanf is better and faster, unless the contrary is proved
Reply
#17

It's an option, as not everyone finds it easier. And that is a fact.

It's faster for some simple reasons, that's a fact, but not the easier thing. I never said anything about its speed.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)