Die Idee ist schon sehr gut von dir Kaliber nur wurde sowas schon lange umgesetzt und um es so zu sagen auch nicht schlecht und zwar von Ryder und Zeex , beziehungsweise ist die Version von Ryder noch schneller. Sowas ähnliches kann man auch nur mit Variabeln machen anstatt mit #emits nur ist sowas schon relative schwer vor allem
wenn man noch beliebig viele platzhalter verwenden will.
stock SendFormatMessage(const iPlayer, const iColor, const szFormat[], { Float, _ }: ...) {
new
iArgs = (numargs() - 3) << 2
;
if(iArgs) {
static
s_szBuf[144],
s_iAddr1,
s_iAddr2
;
#emit ADDR.PRI szFormat
#emit STOR.PRI s_iAddr1
for(s_iAddr2 = s_iAddr1 + iArgs, iArgs += 12; s_iAddr2 != s_iAddr1; s_iAddr2 -= 4) {
#emit LOAD.PRI s_iAddr2
#emit LOAD.I
#emit PUSH.PRI
}
#emit CONST.PRI s_szBuf
#emit PUSH.S szFormat
#emit PUSH.C 144
#emit PUSH.PRI
#emit PUSH.S iArgs
#emit SYSREQ.C format
#emit LCTRL 4
#emit LOAD.S.ALT iArgs
#emit ADD.C 4
#emit ADD
#emit SCTRL 4
return (iPlayer != -1) ? SendClientMessage(iPlayer, iColor, s_szBuf) : SendClientMessageToAll(iColor, s_szBuf);
}
return (iPlayer != -1) ? SendClientMessage(iPlayer, iColor, szFormat) : SendClientMessageToAll(iColor, szFormat);
}
//edit orginaler link noch hinzu gefügt
http://forum.sa-mp.com/showthread.php?p=1722584#post1722584