• 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
[Pawn] Not sending an error message
#3
(2021-04-07, 04:26 PM)Radical Wrote: post your SendClientMSG function.



PHP Code:
stock SendClientMSG(playeridcolorfstring[], {Float_}:...)

{

? ? 
#define BYTES_PER_CELL 4

? ? // This is the number of parameters which are not variable that are passed

? ? // to this function (i.e. the number of named parameters).

? ? static const

? ? ? ? 
STATIC_ARGS 3;

? ? 
// Get the number of variable arguments.

? ? new

? ? ? ? 
= (numargs() - STATIC_ARGS) * BYTES_PER_CELL;

? ? if (
n)

? ? {

? ? ? ? new

? ? ? ? ? ? 
message[128],

? ? ? ? ? ? 
arg_start,

? ? ? ? ? ? 
arg_end;



? ? ? ? 
// Load the real address of the last static parameter. Do this by

? ? ? ? // loading the address of the last known static parameter and then

? ? ? ? // adding the value of [FRM].

? ? ? ? #emit CONST.alt? ? ? ? fstring

? ? ? ? #emit LCTRL? ? ? ? ? 5

? ? ? ? #emit ADD

? ? ? ? #emit STOR.S.pri? ? ? arg_start



? ? ? ? // Load the address of the last variable parameter. Do this by adding

? ? ? ? // the number of variable parameters on the value just loaded.

? ? ? ? #emit LOAD.S.alt? ? ? n

? ? ? ? #emit ADD

? ? ? ? #emit STOR.S.pri? ? ? arg_end



? ? ? ? // Push the variable arguments. This is done by loading the value of

? ? ? ? // each one in reverse order and pushing them. I'd love to be able to

? ? ? ? // rewrite this to use the values of pri and alt for comparison,

? ? ? ? // instead of having to constantly load and reload two variables.

? ? ? ? do

? ? ? ? {

? ? ? ? ? ? 
#emit LOAD.I

? ? ? ? ? ? #emit PUSH.pri

? ? ? ? ? ? arg_end -= BYTES_PER_CELL;

? ? ? ? ? ? 
#emit LOAD.S.pri? ? arg_end

? ? ? ? }

? ? ? ? while (
arg_end arg_start);



? ? ? ? 
// Push the static format parameters.

? ? ? ? #emit PUSH.S? ? ? ? fstring

? ? ? ? #emit PUSH.C? ? ? ? 128

? ? ? ? #emit PUSH.ADR? ? ? ? message



? ? ? ? // Now push the number of arguments passed to format, including both

? ? ? ? // static and variable ones and call the function.

? ? ? ? BYTES_PER_CELL 3;

? ? ? ? 
#emit PUSH.S? ? ? ? n

? ? ? ? #emit SYSREQ.C? ? ? ? format



? ? ? ? // Remove all data, including the return value, from the stack.

? ? ? ? BYTES_PER_CELL;

? ? ? ? 
#emit LCTRL? ? ? ? ? 4

? ? ? ? #emit LOAD.S.alt? ? ? n

? ? ? ? #emit ADD

? ? ? ? #emit SCTRL? ? ? ? ? 4



? ? ? ? return SendMessageToPlayer(playeridcolormessage);

? ? ? ? 
//return print(message);

? ? }

? ? else

? ? {

? ? ? ? return 
SendMessageToPlayer(playeridcolorfstring);

? ? ? ? 
//return print(fstring);

? ? }


  Reply


Messages In This Thread
Not sending an error message - by Axitz - 2021-04-07, 02:32 PM
RE: Not sending an error message - by Radical - 2021-04-07, 04:26 PM
RE: Not sending an error message - by Axitz - 2021-04-07, 05:05 PM
RE: Not sending an error message - by destiezk - 2021-04-07, 10:11 PM
RE: Not sending an error message - by Pinch - 2021-04-07, 11:26 PM
RE: Not sending an error message - by Axitz - 2021-04-08, 01:24 PM

Forum Jump: