SendFormatMessage

Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • Hallo,
    ich habe mir folgenden Code geschrieben:
    #define SendFormatMessage(%0, %1, %2, %3, %4) format(%3, sizeof(%3), %2, %4); SendClientMessage(%0, %1, %3)
    #define SendFormatMessageToAll(%0, %1, %2, %3) format(%2, sizeof(%2), %1, %3); SendClientMessageToAll(%0, %2)
    Dadurch kann ich mir eine Zeile sparen, weil ich die Funktion Format überspringen kann.
    new msg[64];
    SendFormatMessage(playerid, COLOR_RED, "Dein Name ist %s und du bist %i Jahre alt.", msg, pName, Alter); //msg = Variablenname der zu formatierenden VariableWie man allerdings sehen kann muss ich dennoch die Variable erstellen. Wenn ich versuche sie im Define zu erstellen gibt es logischerweise einen Error. Gibt es eine Möglichkeit, mir die Deklarierung der Variable bei jeder Nachricht zu ersparen? Wenn ich es global mache, dann ist in den meisten formatierten Nachrichten viel freier "Platz" vorhanden, da ich ja dann nicht immer 256 - bzw. 128 Zeichen benötige. Ich hoffe ihr versteht was ich meine und könnt mir einen Tipp dafür geben.


    Mit freundl. Grüßen
    Padarom

    Ich bin
    .. seit etwa 2007 in der Webentwicklung tätig, seit 2013 professionell
    .. Erfahrener Entwickler in PHP, Swift, Javascript, Typescript und Ruby. Zusätzlich habe ich Erfahrung in Python, Java, C#, C++, Prolog und einigen esoterischen Programmiersprachen
    .. Luftfahrtenthusiast und Segelflieger

  • Versuch es lieber mal mit y_va.
    http://forum.sa-mp.com/showpost.php?p=1421736&postcount=2462
    y_va.inc
    Damit kannste schnell und einfach Funktionen erstellen,die direkt mit format Arbeiten sollen.


    Falls du es mit deiner Methode dennoch machen möchtest,du kannst den Code ja ein Level anheben ( mir fällt beim Besten willen nicht ein,wie man es richtig nennt :-O ). Damit meine ich, { } benutzen und dort drin deinen Code ;).Dann klappt es aber nicht mehr mit dem Semikolon am Ende, daher nutzen die meisten dafür einen Umweg.Der ist aber schon relativ Alt und mit der y_va Methode ist es definitiv eleganter:



    static stock bool:FALSE = false;
    #define SendFormat(%0,%1,%2,%3) do{new _str[128];format(_str,128,%2,%3);SendClientMessage(%0,%1,_str);}while(FALSE)

  • Das klappt mit der Methode, danke.
    Anstatt ein neues Thema zu eröffnen kann ich ja auch hier nochmal nachfragen (da es auch wieder um #define geht):


    Für gewöhnlich werden Farben ja wie folgt definiert:
    #define COLOR_RED 0xFF006600
    So ist der HEX-Code (FF0066) aber nicht so klar zu lesen. Deswegen wollte ich es ein bisschen einfacher machen:
    #define c(%1) 0x%100
    #define COLOR_RED c(FF0066)
    So ist der Text allerdings immer schwarz. Das ist wohl weil er statt %1 00 am Ende ein %100 erkennt. Wenn ich allerdings eine Leertaste dazwischen mache bekomme ich selbstverständlich dort Fehler, wo die Farbe dann verwendet wird. Außerdem wird die 0 (am Anfang beim 0x) wegcecuttet, wie ich herausgefunden habe.
    Abgesehen davon, dass das für die meisten sinnlos aussieht (Wieso macht er c(...) statt einfach 0x...00?), würde ich dennoch gerne wissen wie ich das fehlerfrei bewerkstelligen kann.

    Da im Chat die Transparenz ja ignoriert wird habe ich einfach das 00 am Ende durche in FF ersetzt. Nun klappt es fehlerfrei.


    Mit freundl. Grüßen
    Padarom

    Ich bin
    .. seit etwa 2007 in der Webentwicklung tätig, seit 2013 professionell
    .. Erfahrener Entwickler in PHP, Swift, Javascript, Typescript und Ruby. Zusätzlich habe ich Erfahrung in Python, Java, C#, C++, Prolog und einigen esoterischen Programmiersprachen
    .. Luftfahrtenthusiast und Segelflieger

    2 Mal editiert, zuletzt von Padarom ()