Schleife sendet merhmals die Nachricht

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,
    In einem alten Thread schien das Problem behoben.
    Doch jetzt kommt bei einer neuen for- Schleife dasselbe Problem:
    Die Nachricht wird mehrmals gesendet. Habe es schon mit einem bool versucht, aber ohne Erfolg.


    CMD:support(playerid,params[])
    {
    new bool:msg[MAX_PLAYERS],
    bool:msg2[MAX_PLAYERS];
    new string[128],stringd[128],text[128];
    if(sscanf(params,"s",text))
    {
    return ClientLanguageText(playerid,COLOR_RED,"Verwendung: /support [Text]","USAGE: /support [message]");
    }
    if(TicketGeschrieben[playerid] == 1)
    {
    return ClientLanguageText(playerid,COLOR_RED,"Du hast bereits ein Ticket geschrieben","You already have written a ticket!");
    }
    for(new i=0; i<MAX_PLAYERS; i++)
    {
    if(IsPlayerConnected(i)){
    if(ADuty[i] >= 1)
    {
    if(msg[i] == false)
    {
    format(string,sizeof(string),"%s(ID:%d) has written a ticket: %s",oPlayerName[playerid],playerid,text);
    format(stringd,sizeof(stringd),"%s(ID:%d) schrieb folgendes Ticket: %s",oPlayerName[playerid],playerid,text);
    ClientLanguageText(i,COLOR_YELLOW,stringd,string);
    TicketGeschrieben[playerid] = 1;
    msg[i] = true;
    }
    }
    else if(ADuty[i] == 0)
    {
    if(msg2[i] == false)
    {
    ClientLanguageText(playerid,COLOR_RED,"Im Moment ist kein Supporter zu erreichen!","At the moment there is no supporter online!");
    msg2[i] = true;
    }
    }
    }
    }
    return 1;
    }


    lg

  • Nicht gerade übersichtlich dein Code.


    Schau dir den Kommentar im Code an. Da wird beschrieben, was wir wieso machen. Sollte so funktionieren , testen kann Ich es ja schlecht :p.
    CMD:support(playerid,params[])
    {
    new
    string[128],
    stringd[128];
    text[128];
    // text brauchen wir nicht unbedingt. Wir könnten auch params verwenden.
    // Dann müssten wir aber folgenden check machen anstatt sscanf :
    // if( isnull(params) )
    if(sscanf(params,"s",text))
    {
    return ClientLanguageText(playerid,COLOR_RED,"Verwendung: /support [Text]","USAGE: /support [message]");
    }
    if(TicketGeschrieben[playerid] == 1)
    {
    return ClientLanguageText(playerid,COLOR_RED,"Du hast bereits ein Ticket geschrieben","You already have written a ticket!");
    }
    // Prüfen ob es überhaupt einen ADuty Spieler gibt!
    // Denn nur dann , senden wir die Nachricht, dass es keinen Supporter gibt
    new
    bool:bOnDuty = false;
    for(new i=0; i < MAX_PLAYERS; i++)
    {
    if(IsPlayerConnected(i))
    {
    if(ADuty[i] >= 1) {
    bOnDuty = true;
    }
    }
    }
    if(!bOnDuty) { // Kein ADuty Spieler gefunden!
    ClientLanguageText(playerid,COLOR_RED,"Im Moment ist kein Supporter zu erreichen!","At the moment there is no supporter online!");
    return 1;
    }
    // Wir formatieren 1x den String!
    // Das reicht völlig aus,da sowieso jeder die Gleiche Nachricht bekommt in diesem Fall
    format(string,sizeof(string),"%s(ID:%d) has written a ticket: %s",oPlayerName[playerid],playerid,text);
    format(stringd,sizeof(stringd),"%s(ID:%d) schrieb folgendes Ticket: %s",oPlayerName[playerid],playerid,text);
    // Wir wissen auch,dass es ADuty Spieler gibt! Daher setzen wir die Variable auf true / wahr / 1
    TicketGeschrieben[playerid] = 1;
    // Jetzt die ADuty Spieler erneut suchen.
    for(new i=0; i < MAX_PLAYERS; i++)
    {
    if(IsPlayerConnected(i))
    {
    if(ADuty[i] >= 1)
    {
    ClientLanguageText(i,COLOR_YELLOW,stringd,string);
    }
    }
    }
    return 1;
    }