Bekomme den Textdraw Chat nicht hin.

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
  • Hey,


    ich bekomme es einfach nicht hin mit meinem Textdraw Chat in einer Box.
    So sieht das ganze Ding aus:


    0-29 sind die Textdraws "ChatZeile[0] - ChatZeile[29]" mit jeweils einen String, der deren Inhalt widerspiegelt: "ChatInhalt[0] - ChatInhalt[29]".
    Nun möchte ich, wenn jemand etwas reinschreibt, dass alles ein Strück nach oben rückt, und die neuste Nachricht unten (ChatZeile[0]) steht,
    jedoch bekomme ich das einfach nicht hin, dass es auch funktioniert. Wie kann ich das machen?


    Ich habe diese 2 Varianten versucht, und beides ist fehlgeschlagen: Hat einer noch eine Idee?

    // -- Versuch 1 --
    stock ChatInput(playerid, text[])
    {
    new Ausgabe[128];
    format(Ausgabe,128,"~b~%s:~w~ %s",GetName(playerid),text);
    new x=28;
    for(new i=29; i>0; i--)
    {
    format(ChatInhalt[i],128,"%s",ChatInhalt[x]);
    TextDrawSetString(ChatZeile[i],ChatInhalt[i]);
    x--;
    if(x == 0)
    {
    format(ChatInhalt[i],128,"%s",ChatInhalt[x]);
    TextDrawSetString(ChatZeile[i],ChatInhalt[i]);
    TextDrawSetString(ChatZeile[0],Ausgabe);
    format(ChatInhalt[0],128,"%s",Ausgabe);
    break;
    }
    }
    return 1;
    }


    // -- Versuch 2 --
    stock ChatInput(playerid, text[])
    {
    for(new i=29; i>0; i--)
    {
    switch(i)
    {
    case 29:{
    format(ChatInhalt[i],128,"_");
    TextDrawSetString(ChatZeile[i],"_");
    }
    case 0..27:{
    format(ChatInhalt[i+1],128,ChatInhalt[i]);
    TextDrawSetString(ChatZeile[i+1],ChatInhalt[i]);
    if(i==0){
    new output[128];
    format(output,128,"%s: %s", GetName(playerid),text);
    }
    }
    }
    }
    return 1;
    }

  • format(ChatInhalt[i],128,"%s",ChatInhalt[x]);Bitte niemals so strings kopieren. Das ist eine wirklich, wirklich schlechte Angewohnheit. Siehe Code optimisation abschnitt "Copying strings".


    Versuchs mal so:
    stock ChatInput(playerid, text[]) {
    for(new i = 28; i > 0; i--) { //schleife rückwärts, 29 wird ausgelassen weil nicht aufrücken muss
    if(!strlen(ChatInhalt[i])) continue; //wenn leer ist braucht man auch nichts aufrücken
    ChatInhalt[i+1] = ChatInhalt[i]; //string in den darüberliegenden platz kopieren
    TextDrawSetString(ChatZeile[i+1], ChatInhalt[i+1]); //darüberlegenden platz updaten
    }
    // platz 0 ist bisher unberührt, aber bereits in 1 kopiert, also nur noch 0 zuweisen und feritg.
    format(ChatInhalt[0],128,"~b~%s:~w~ %s",GetName(playerid), text); //eine extra variable kann man sich hier eigentlich sparen
    TextDrawSetString(ChatZeile[0], ChatInhalt[0]); //selbsterklärend
    }
    Ist ungetestet, und es ist 6 Uhr, also verzeih mir wenn es nicht ganz funktioniert. Du kannst mich gerne per maddin: zitieren, dann schau ich später noch mal drüber.


    Mfg.

    The fact is, I am right. And if you think I'm wrong, you are wrong.