Funktion für sehr lange Texte

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
  • Es ist zwar nur ein kleiner Code, aber dennoch dachte ich mir, ihn mal zu posten...
    Kennst du es auch, wenn du Nachrichten hast, wo du nicht weißt, ob sie zu lang sind?
    Ich persönlich habe dann immer zu viele Nachrichten versendet, die nebenbei gesehen noch zu kurz waren (wie auch bei unserer automatischen Fahrschule)
    Da dacht ich mir, entwickel mal ne Funktion, die die Texte dann "durchschneidet" und erst, wenn 128 Zeichen erreicht sind, so viel gibt das Textfeld von sa:mp her, sendet er den Textu nd packt das übrige in einen neuen Text.
    Dieser Code schneidet den Text dann noch passend in Stücke, sodass kein zusammenhängendes Wort, esseidern es ist länger als 128 Zeichen, kaputt geht, ich habe im Script jetzt mal das stehen:
    LangeNachricht(playerid,blau,"ajgklajklgajgklaj aklgjalkgjalkgjal jaglk ajlkgjalkgjalkgjalkgja aklgjaklgjaklgjalk agkljaklgjaklgjakl aklgjaklgjaklgjaklgj akgjaklgjaklgjaklgj aklgjaklgjalkgjal akgjaklgjaklgjalkg aklgjalkgajkl gajklgakajaklg klagjaklgjaklgjal jalkgja ljaglkgjaklgjalkgjalkgj aklgjaklgjalkgjalk agkjalkgjalkgjalkgj agkjalkgjaklgjaklgj akgjalkgjalkgjalkgj lajglkajglkagjla alagkjalkga",0);
    Und die Funktion macht mir das daraus:


    Zur Funktion:
    //ganz nach unten:
    stock LangeNachricht(playerid,farbe,text[],an=0) {
    new gla, st=strlen(text), gla2;
    hier: {
    if(st>128) {
    new s[128];
    if(gla2==0) {
    format(s,sizeof(s),"%s",text); }
    else {
    format(s,sizeof(s),"%s",text[gla2+1]); }
    for(new i=0; i<128; i++) {
    if(s[i]==' ') {
    gla=i; }}
    format(s[gla],sizeof(s)," ");
    if(an==0) {
    SendClientMessage(playerid,farbe,s); }
    else {
    SendClientMessageToAll(farbe,s); }
    st-=gla;
    gla2+=gla;
    goto hier; }
    }
    if(st<=128) {
    if(gla2>=1) {
    new s[128];
    format(s,sizeof(s),"%s",text[gla2+1]);
    if(an==0) {
    SendClientMessage(playerid,farbe,s); }
    else {
    SendClientMessageToAll(farbe,s); }
    }
    else {
    if(an==0) {
    SendClientMessage(playerid,farbe,text); }
    else {
    SendClientMessageToAll(farbe,text); }
    }
    }
    return 1;
    }
    Der Spieler würde diese Nachricht jetzt ohne Probleme zugesendet bekommen


    //EDIT: Funktion 3 mal bearbeitet
    Was ist neu?
    Es wurde ein "an" hinzugefügt
    LangeNachricht(playerid,FARBE,text[],an);
    Wenn man bei "an" eine 0 (oder gar nichts) einträgt, wird diese Nachricht an eine Person, der playerid gesendet, wenn man bei "an" 1 einträgt, wird die Nachricht an alle gesendet (bei "playerid" trägt man dann irgendwas ein, wird da ja nicht mehr gebraucht)

  • Nochmal neu hingeschrieben, hatte ein Denkfehler, der ist jetzt behoben...
    Dafür ist dort jetzt ein Scriptfehleru nd ich bkomme ihn nicht behoben, ich schildere ihn mal:
    Auszug ausm Script:
    new s[128];
    if(gla2==0) {
    printf("5 z: %d gla2: %d",z,gla2);
    format(s,sizeof(s),"%s",text);//in dieser Zeile wird z=0
    printf("7 z: %d gla2: %d",z,gla2); }
    else {
    printf("5 z: %d gla2: %d",z,gla2);
    format(s,sizeof(s),"%s",text[gla2+z]);//in dieser Zeile wird z=0
    printf("7 z: %d gla2: %d",z,gla2); }
    Auszug aus der Log

    Zitat

    [14:06:40] 5 z: 1 gla2: 0
    [14:06:40] 7 z: 0 gla2: 0
    Und für den zweiten Durchlauf:
    [14:06:40] 5 z: 1 gla2: 125
    [14:06:40] 7 z: 0 gla2: 125


    Ich habe ja die Zeilen markiert, in dieser Zeile "format(s..." überschreibt sich "z" einfach undi ch weiß nicht, warum


    Dieser Scriptfehler hat aber keine großen Auswirkungen, wenn der Text länger als 256 Zeichen ist, dann ist anfangs ein Leerzeichen zu viel


    PS: Dennoch möcht ich mich für das nette Feedback bedanken :love:

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen