stock SendClientMessageFormatted(playerid, color, fstring[], {Float, _}:...){ new n = numargs() * 4; if (n == 3 * 4) { return SendClientMessage(playerid, color, fstring); } else { new message[128]; new arg_start; new arg_end; new i = 0; #emit CONST.pri fstring #emit ADD.C 0x4 #emit STOR.S.pri arg_start // first parameters's offset #emit LOAD.S.pri n #emit ADD.C 0x8 #emit STOR.S.pri arg_end // last parameters's offset // pushing variable arguments for (i = arg_end; i >= arg_start; i -= 4) { #emit LCTRL 5 #emit LOAD.S.alt i #emit ADD #emit LOAD.I #emit PUSH.pri } // pushing normal arguments #emit PUSH.S fstring // format string #emit PUSH.C 128 // sizeof(message) #emit PUSH.ADR message // the string which format() will write in #emit PUSH.S n // number of arguments * 4, always must be passed for natives #emit SYSREQ.C format // clearing the stack i = n / 4 + 1; while (--i >= 0) { #emit STACK 0x4 } return SendClientMessage(playerid, color, message); }}