Chat "vergrößern"

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
  • Schau jetzt:
    Auflösung:


    Ingame:

    // Das War mein Text
    public OnPlayerConnect(playerid)
    {
    SendClientMessage(playerid, COLOR_WHITE, "Hallo Breadfish.de. Jetzt zeige ich euch das der String nur 128 Wörter hat aber länger ist als der Bildschirm. Hahahahahahahaha");
    return 1;
    }

    ZIELE:
    -Beiträge ohne Verwarnung/Warnung
    NICHT GESCHAFT :thumbup:

  • Dann zähl mal ;)
    Das wußte ich auch aber nen string hat trotzdem nur 128 Zeichen bei SCM ;)


  • Wäre mein Kumpel hier angemeldet würde er dir das auch bestätigen können (Scripting Profi).
    Er war auch auf diesen Servern (meist Stunt) und war auch erstaunt, wie sowas geht ^^

    Ja ich wollte das nur erklären, weil sein Freund hat ihm ja gesagt das die Texte über den Bildschirm gehen. Vllt hat der nur die Aufösung niedrig gehabt

    ZIELE:
    -Beiträge ohne Verwarnung/Warnung
    NICHT GESCHAFT :thumbup:

  • mach die Auflösung größer dann wirds umso kleiner
    umso größer desto kleiner die Auflösung ;)

  • dass kann natürlich sein aber dann sollte er es nicht behaupten ;) das nen string meh als 128 Zeichen hat wenn 3 Leute nein sagen :D

  • Also das Wiki sagt uns folgendes: Limits
    Text I/O 128 cells (512 bytes)


    Also kann der Text 128 Zellen (gleich 512 bytes) enthalte.


    edit: ASCII nutzt 7 Bit strukturen, welche jeweils zwei Werte (1 u 0) annehmen können. 2^7 = 128.

  • Das stimmt ja auch das der Text nur 128 Zeichen haben kann!!!!! Ich habe es nicht behauptet, habe es nur erklärt wie die schrift über den Bildschirm gehen würde

    ZIELE:
    -Beiträge ohne Verwarnung/Warnung
    NICHT GESCHAFT :thumbup:

  • Das stimmt ja auch das der Text nur 128 Zeichen haben kann!!!!! Ich habe es nicht behauptet, habe es nur erklärt wie die schrift über den Bildschirm gehen würde


    nicht du @ Threadersteller :D

  • Also das Wiki sagt uns folgendes: Limits
    Text I/O 128 cells (512 bytes)


    Also kann der Text 128 Zellen (gleich 512 bytes) enthalte.


    edit: ASCII nutzt 7 Bit strukturen, welche jeweils zwei Werte (1 u 0) annehmen können. 2^7 = 128.


    Dass ASCII 7 bit (bzw. wenn man die extended ASCII Zeichen mit zaehlt alle 8 bit eines bytes) nutzt hat aber nichts mit der maximalen Zeichenlaenge zu tun. Normaler weise ist ASCII nur 1 byte lang, aber pawn scheint wohl alles in 4byte zu packen, daher sind die 128 Zeichen dort als 512 byte anstatt 128 byte aufgelistet.


    SA-MP hat eine maximale textlaenge von 128 zeichen.
    Was MasterX4 beschreibt ist ein normaler Chat-Text. Dieser wird nach x-Zeichen (habe sie nicht gezaehlt) in eine neue Zeile geschoben. Mit SendClientMessage* Nachrichten wird das nicht gemacht. Sie gehen einfach ueber die Laenge des Bildschirms hinaus, haben jedoch ebenfalls eine maximale text-laenge von 128Zeichen.
    Wenn nun der vom domme erstellte command 'o' verwendet wird und 128zeichen gesendet werden wird der Text zum ende hin abgeschnitten, da nur 128 Zeichen erlaubt sind und am Anfang noch Zeichen hinzugefuegt werden und danach wird noch etwas visuell abgeschnitten, sofern die Bildschirm aufloesung zu klein fuer 128Zeichen in einer Reihe ist.
    Um dieses problem zu loesen muesste man die strlen vom Input string nehmen und wenn sie > ist als x-zeichen wird der Restliche Teilstring mit einem seperaten SendClientMessage* gesendet.


    Pseudo-code von dem was ich meine:

    #define MAX_PLAYER_TEXT_LENGTH (128)


    dcmd_o(playerid,params[]) {
    new Text[MAX_PLAYER_TEXT_LENGTH];
    new newText[MAX_PLAYER_TEXT_LENGTH+123]; // 123 = Ersetzen mit erwarteter Laenge von 'GetPVarInt(playerid,"Alter"),GetName(playerid),playerid'
    new copyCat;
    if(SpielerEingeloggt[playerid] == 0) { return SendClientMessage(playerid,rot,"Du bist nicht eingeloggt!"); }
    if(sscanf(params, "s",Text)) { return SendClientMessage(playerid,rot,"Nutzung: /o [Text]"); }
    format(newText,sizeof newText," (( %d* %s[%d]: %s ))",GetPVarInt(playerid,"Alter"),GetName(playerid),playerid,Text);
    if ( strlen(newText) > MAX_PLAYER_TEXT_LENGTH ){ copyCat = newText[MAX_PLAYER_TEXT_LENGTH-1]; newText[MAX_PLAYER_TEXT_LENGTH-1] = 0; }
    SendClientMessageToAll(weiss,string);
    newText[MAX_PLAYER_TEXT_LENGTH-1] = copyCat;
    SendClientMessageToAll(weiss,&newText[MAX_PLAYER_TEXT_LENGTH-1]);
    return 1;
    }
    Fehler garantie: Garantiere dass Fehler drin sind.


    Edit:
    Habe mal den pseudo-code in echten code umgewandelt. Ohne pointer ist das eine echt bloede Aufgabe soetwas zu entwickeln und memcpy ist ohne pointer auch mehr Dekoration als nuetzlich.
    Link: http://forum.sa-mp.de/san-andreas-multiplayer/scripting-base/18-nützliche-codeschnipsel-26#post589437

    3 Mal editiert, zuletzt von SBIKA ()