Aus Langeweile habe ich mal eine Funktion geschrieben, nämlich SendClientMessageEx, sieht so aus:
stock SendClientMessageEx(playerid,color,msg[],{Float,_}:...) {
new len=strlen(msg)+32,arg[10][32],args=3;
for(new i=0; i<len; i++) {
if(msg[i] == '\0') break;
switch(msg[i]) {
case '%': {
switch(msg[i+1]) {
case 's': {
for(new y; y<32; y++) {
if(getarg(args,y) == '\0') break;
arg[args][y] = getarg(args,y);
}
strdel(msg,i,i+2),strins(msg,arg[args],i,len),args++;
}
case 'd','i': format(arg[args],32,"%d",getarg(args,0)),strdel(msg,i,i+2),strins(msg,arg[args],i,len),args++;
case 'f': format(arg[args],32,"%.1f",getarg(args,0)),strdel(msg,i,i+2),strins(msg,arg[args],i,len),args++;
default: continue;
}
}
default: continue;
}
}
return SendClientMessage(playerid,color,msg);
}
Verwendet man z.B. so:
SendClientMessageEx(0,0xFF4800FF,"Hallo lieber %s. Test %d %d %d","Kaliber",1,2,3);
//Output-> Hallo lieber Kaliber. Test 1 2 3
Nun, in einem Test von mir ist diese Funktion, solange die Wiederholung unter 100 liegt schneller als dieses Makro:
new str2[128];
#define formatEx(%0,%1,%2,%3) format(str2,128,%2,%3) && SendClientMessage(%0,%1,str2)
Wollte nur mal den Code zeigen 
mfg. 