Nachricht wird doppelt gesendet

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
  • Heyhey liebe Brotfischer!!
    Heute habe ich mal ein anderes Problem von mir für euch :D


    Und zwar bin ich im moment dabei mein Selfmade Script zu erstellen aber beim /departments befehl habe ich das Problem, das wenn ich /d text eingebe, das die nachricht mir doppelt angezeigt wird.


    Im Spoiler is der Befehl

    Spoiler anzeigen
    dcmd_d(playerid, params[])
    {
    new text[256];
    new string[256];
    new SpielerName[MAX_PLAYER_NAME];
    if(sscanf(params, "s[256]", text))
    {
    SendClientMessage(playerid, Rot, "Verwendung: /(d)epartments");
    }
    new rtext[100];
    new member = Spieler[playerid][Member];
    new leader = Spieler[playerid][Leader];
    if(member == 1 || leader == 1)
    {
    if(Spieler[playerid][Rang] == 1) { rtext = "Polizeipraktikant"; }
    else if(Spieler[playerid][Rang] == 2) { rtext = "Polizeiazubi"; }
    else if(Spieler[playerid][Rang] == 3) { rtext = "Polizeimeisteranwärter"; }
    else if(Spieler[playerid][Rang] == 4) { rtext = "Polizeiwachtmeister"; }
    else if(Spieler[playerid][Rang] == 5) { rtext = "Polizeimeister"; }
    else if(Spieler[playerid][Rang] == 6) { rtext = "Polizeiobermeister"; }
    else if(Spieler[playerid][Rang] == 7) { rtext = "Polizeikommisar"; }
    else if(Spieler[playerid][Rang] == 8) { rtext = "Polizeioberkommisar"; }
    else if(Spieler[playerid][Rang] == 9) { rtext = "Polizeihauptkommisar"; }
    else if(Spieler[playerid][Rang] == 10) { rtext = "Polizeirat"; }
    else if(Spieler[playerid][Rang] == 11) { rtext = "Polizeivorsitzender"; }
    else if(Spieler[playerid][Rang] == 12 || leader == 1) { rtext = "Polizeidirektor"; }
    }
    if(member == 2 || leader == 2)
    {
    if(Spieler[playerid][Rang] == 1) { rtext = "Gefreiter"; }
    else if(Spieler[playerid][Rang] == 2) { rtext = "Obergefreiter"; }
    else if(Spieler[playerid][Rang] == 3) { rtext = "Hauptgefreiter"; }
    else if(Spieler[playerid][Rang] == 4) { rtext = "Stabsgefreiter"; }
    else if(Spieler[playerid][Rang] == 5) { rtext = "Unteroffizier"; }
    else if(Spieler[playerid][Rang] == 6) { rtext = "Oberstabsgefreiter"; }
    else if(Spieler[playerid][Rang] == 7) { rtext = "Stabsunteroffizier"; }
    else if(Spieler[playerid][Rang] == 8) { rtext = "Feldwebel"; }
    else if(Spieler[playerid][Rang] == 9) { rtext = "Oberfeldwebel"; }
    else if(Spieler[playerid][Rang] == 10) { rtext = "Hauptfeldwebel"; }
    else if(Spieler[playerid][Rang] == 11) { rtext = "Leutnant"; }
    else if(Spieler[playerid][Rang] == 12 || leader == 2) { rtext = "General"; }
    }
    if(member == 3 || leader == 3)
    {
    if(Spieler[playerid][Rang] == 1) { rtext = "Sanitäter"; }
    else if(Spieler[playerid][Rang] == 2) { rtext = "Rettungshelfer"; }
    else if(Spieler[playerid][Rang] == 3) { rtext = "Rettungssanitäter"; }
    else if(Spieler[playerid][Rang] == 4) { rtext = "Rettungsassistent"; }
    else if(Spieler[playerid][Rang] == 5) { rtext = "Notarzt"; }
    else if(Spieler[playerid][Rang] == 6) { rtext = "Wachleiter"; }
    else if(Spieler[playerid][Rang] == 7 || leader == 3) { rtext = "Chefsanitäter"; }
    }
    if(Spieler[playerid][Gemuted] == 1)
    {
    SendClientMessage(playerid, Rot, " Du kannst nicht reden, weil du gemuted bist !");
    return 1;
    }
    GetPlayerName(playerid, SpielerName, sizeof(SpielerName));
    for(new i; i < MAX_PLAYERS; i++)
    {
    new Cops = Spieler[i][Member] == 1 || Spieler[i][Leader] == 1;
    new Armys = Spieler[i][Member] == 2 || Spieler[i][Leader] == 2;
    new Medics = Spieler[i][Member] == 3 || Spieler[i][Leader] == 3;
    if(Spieler[playerid][Member] == 1 || Spieler[playerid][Leader] == 1)
    {
    format(string, sizeof(string), "%s %s: %s", rtext, SpielerName, text);
    }
    else if(Spieler[playerid][Member] == 2 || Spieler[playerid][Leader] == 2)
    {
    format(string, sizeof(string), "%s %s: %s", rtext, SpielerName, text);
    }
    else if(Spieler[playerid][Member] == 3 || Spieler[playerid][Leader] == 3)
    {
    format(string, sizeof(string), "%s %s: %s", rtext, SpielerName, text);
    }
    SendClientMessage(Cops, Tuerkis, string);
    SendClientMessage(Armys, Tuerkis, string);
    SendClientMessage(Medics, Tuerkis, string);
    return 1;
    }
    printf("%s", string);
    return 1;
    }


    Ich weiß es ist etwas umständlich geschrieben :D


    Hoffe ihr könnt mir helfen ;)

    http://youtube.com/sixxaafx


    Ich habe dir bei einem Problem geholfen oder dir gefällt eines meiner Werke?
    Lass es mich Wissen, indem du auf dieses Bildchen klickst


  • Deine Forschleife war falsch und zu kompliziert geschrieben. Hier mal eine verbesserung.


    format(string, sizeof(string), "%s %s: %s", rtext, SpielerName, text);
    for(new i; i < MAX_PLAYERS; i++)
    {
    if(IsPlayerConnected(playerid) && (Spieler[i][Member] == 1 || Spieler[i][Leader] == 1 || Spieler[i][Member] == 2 || Spieler[i][Leader] == 2 || Spieler[i][Member] == 3 || Spieler[i][Leader] == 3))
    {
    SendClientMessage(i, Tuerkis, string);
    }
    }


    zur erklärung:
    new Cops = Spieler[i][Member] == 1 || Spieler[i][Leader] == 1;
    new Armys = Spieler[i][Member] == 2 || Spieler[i][Leader] == 2;
    new Medics = Spieler[i][Member] == 3 || Spieler[i][Leader] == 3;


    du hast hier in den Variablen einen warheitswert gespeichert. als erstes fängt die schleife bei 0 an. Nun bist du Cop also kannst du weder Medic noch Army sein dass heisst es kommt immer 2 mal 0 und 1 mal 1 raus.


    Nun hast du die Texte so gesendet, dass sie immer 2 mal an playerid 0 und einmal an playerid 1 sendet.


    Zudem hattest du am ende der for schleife ein return 1; dies bewirkt, dass wenn die schleife 0 fertig ist, der gesammte command nicht mehr ausgeführt wird. Also wird immer nur playerid 0 geprüft