• 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