• 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
[Pawn] GetPlayerPos and show in chat?
#1
Hey all,



I'm new to the whole pawn scripting and I try to make a command that gives me my position.

But, when I use the command it doesn't send anything in the chat.



Code:
if (strcmp("/getpos", cmdtext, true, 7) == 0)

{

// Do something here

new Float:x, Float:y, Float:z;

GetPlayerPos(playerid, x, y, z);

SendClientMessage(playerid, -1,"Position: %f, %f, %f.", x, y, z);



return 1;

}

return 0;





I've also tried to remove the %f, %f, %f part but then it only sends me "Position:" without the actual player position.

Also when I compile/run my script, it gives me 3 warnings(warning 202: number of arguments does not match definition)



Any help would be appreciated.
  Reply
#2
You can't pass arguments to most of the native functions (naturally including SendClientMessage)

You need to use format before, like this:

Code:
if (strcmp("/getpos", cmdtext, true, 7) == 0)
{
// Do something here
// 64 is the size of the string
new buffer[64], Float:x, Float:y, Float:z;
GetPlayerPos(playerid, x, y, z);
format(buffer, sizeof(buffer), "Position: %f, %f, %f.", x, y, z);
SendClientMessage(playerid, -1, buffer);

return 1;
}
return 0;
Using Pawn.CMD?

If you're doing so, this is the very first sign that you absolutely shouldn't utilize your all powerful P-Code knowledge in any of the scripting discussion topics.
  Reply
#3
There is also an extended version of SendClientMessage which does receive parameters.



Code:
stock SendClientMessageEx(playerid, color, const str[], {Float,_}:...)

{

    static args, start, end,string[200];

    #emit LOAD.S.pri 8

    #emit STOR.pri args



    if (args > 12)

    {

        #emit ADDR.pri str

        #emit STOR.pri start



        for (end = start  (args - 12); end > start; end -= 4)

        {

            #emit LREF.pri end

            #emit PUSH.pri

        }

        #emit PUSH.S str

        #emit PUSH.C 156

        #emit PUSH.C string

        #emit PUSH.C args

        #emit SYSREQ.C format



        SendClientMessage(playerid, color, string);



        #emit LCTRL 5

        #emit SCTRL 4

        #emit RETN

    }

    return SendClientMessage(playerid, color, str);

}
  Reply
#4
(2020-12-19, 06:23 PM)Markski Wrote: There is also an extended version of SendClientMessage which does receive parameters.



Code:
stock SendClientMessageEx(playerid, color, const str[], {Float,_}:...)

{

    static args, start, end,string[200];

    #emit LOAD.S.pri 8

    #emit STOR.pri args



    if (args > 12)

    {

        #emit ADDR.pri str

        #emit STOR.pri start



        for (end = start  (args - 12); end > start; end -= 4)

        {

            #emit LREF.pri end

            #emit PUSH.pri

        }

        #emit PUSH.S str

        #emit PUSH.C 156

        #emit PUSH.C string

        #emit PUSH.C args

        #emit SYSREQ.C format



        SendClientMessage(playerid, color, string);



        #emit LCTRL 5

        #emit SCTRL 4

        #emit RETN

    }

    return SendClientMessage(playerid, color, str);

}

That's a terrible one at that, they should use va_SendClientMessage
Using Pawn.CMD?

If you're doing so, this is the very first sign that you absolutely shouldn't utilize your all powerful P-Code knowledge in any of the scripting discussion topics.
  Reply
#5
(2020-12-19, 06:59 PM)Pinch Wrote: That's a terrible one at that, they should use va_SendClientMessage



Why is that?
  Reply


Forum Jump: