Umgehen vom lästigen format()?

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
  • Hallihallo,
    ich habe mich nach einem Monat Pause mal wieder an ein Script gesetzt.
    Diesmal soll jedoch alles auf den 0.3 Funktionen basieren und auch resourcenschonender sein..
    Sowas wie "PVars" soll zum Einsatz kommen, anstatt einen Spieler enum..
    Jedenfalls habe ich mich gerade gefragt, ob man es nicht i-wie machen kann, dass man dieses lästige "format()" umgehen kann, wenn man einen %s Text ausgeben will..
    Bsp:


    new msg[128];
    format(msg, sizeof msg, "Hallo %s, du Mensch xP", pName(playerid));
    SendClientMessage(playerid, 0xAA3333AA, msg);
    Kann man nicht einen stock oder sonstiges erstellen, wmot man
    "SendClientFMessage" definiert, dass man automatisch einen formatierten Text sendet?
    Beispiel wie man es nutzen soll:


    SendClientFMessage(playerid,0xAA3333AA, "Hallo %s, du Mesch xP", pName(playerid));
    (Ohne new, ohne format und nur ein SendClientMessage?!)


    Aufbau:
    SendClientFMessage(playerid, FARBE, AUSGABE, PARAMETER);


    Hatte mal etwas versucht:


    stock SendClientFMessage(playerid, color, const msg[], const params[])
    {
    new message[256];
    format(message, sizeof message, "%s%s", msg, params);
    return SendClientMessage(playerid, color, message);
    }


    Jedoch sieht das schon i-wie falsch aus..
    Ausserdem will ich auch Texte wie:
    __| Willkommen auf dem Server %s |__
    ausgeben lassen, also wo nach dem Parameter (in dem Falle, das %s für den Namen) nochmehr Text kommt..
    Das scheint mit meiner Funktion auch nicht zu gehen..


    Könnt ihr euch vorstellen, was ich meine?
    Ich hoffe ja und hoffe auch, dass ihr mir damit helfen könntet..
    MfG
    Maxx

  • forward SendPlayerFormattedText(playerid, const str[], define);
    forward public SendAllFormattedText(playerid, const str[], define);
    public SendPlayerFormattedText(playerid, const str[], define)
    {
    new tmpbuf[256];
    format(tmpbuf, sizeof(tmpbuf), str, define);
    SendClientMessage(playerid, 0xFF004040, tmpbuf);
    }


    public SendAllFormattedText(playerid, const str[], define)
    {
    new tmpbuf[256];
    format(tmpbuf, sizeof(tmpbuf), str, define);
    SendClientMessageToAll(0xFFFF00AA, tmpbuf);
    }

  • Schonmal danke für die schnelle Antwort.
    Habe es leicht modifiziert:
    forward SendClientFMessage(playerid, color, const str[], define);
    public SendClientFMessage(playerid, color, const str[], define)
    {
    new msg[256];
    format(msg, sizeof msg, str, define);
    SendClientMessage(playerid, color, msg);
    }


    (Sollte aber gehen oder (eingebaut habe ich noch COLOR ;)))
    Bekomme aber folgende Errors:
    C:\Users\***\Desktop\samp03asvr_R7_win32\gamemodes\basis.pwn(70) : error 035: argument type mismatch (argument 4)
    C:\Users\***\Desktop\samp03asvr_R7_win32\gamemodes\basis.pwn(77) : error 035: argument type mismatch (argument 4)
    Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase


    2 Errors.


    Woran liegts?
    Dazu dann noch die Zeilen:
    70:
    SendClientFMessage(playerid, 0xAA3333AA, "__| Willkommen zurück %s |__", pName(playerid));
    77:
    SendClientFMessage(playerid, 0xAA3333AA, "__| Willkommen %s |__", pName(playerid));
    Woran könnte es liegen?


    MfG
    Maxx

  • Ich glaube es liegt daran, dass "define" nicht dynmaisch ist.
    Ich glaube es stellt einen Integer wert als Übergabeparameter da.
    Um dies zu überprüfen stelle mal anstatt %s ein %d dahin, nur zum Test, und berichte uns davon.

  • Danke Goldkiller ;)
    Nur tauchen jetzt noch 4 Errors (immer derselbe) auf:
    C:\Users\***\Desktop\samp03asvr_R7_win32\gamemodes\basis.pwn(326) : error 017: undefined symbol "BYTES_PER_CELL"
    C:\Users\***\Desktop\samp03asvr_R7_win32\gamemodes\basis.pwn(347) : error 017: undefined symbol "BYTES_PER_CELL"
    C:\Users\***\Desktop\samp03asvr_R7_win32\gamemodes\basis.pwn(356) : error 017: undefined symbol "BYTES_PER_CELL"
    C:\Users\***\Desktop\samp03asvr_R7_win32\gamemodes\basis.pwn(360) : error 017: undefined symbol "BYTES_PER_CELL"
    Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase



    4 Errors.


    Nur wie soll ich "BYTES_PER_CELL" definieren?
    Was müsste da eingesetzt werden?..
    MfG
    Maxx