Hilfe bei for-Schleife

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
  • Heyho Leute,
    ich brauche mal eure Hilfe bei meiner for-Schleife, also ich denke es liegt daran.
    Wenn ein Spieler Ingame /robstore schreibt, dann bekommst er 2-mal die Nachricht das er sich z.B in keinem Store befindet.
    Wie oft die Nachricht angezeigt wird hängt damit zusammen wie viele Stores es gibt.
    Auch wenn es den Store im Raub verlässt wird er mit Nachrichten nur so zugespammt.


    Hier mal der Code:


    http://pastebin.com/raw/8WebLb9M

  • Der Code sieht schrecklich aus.


    Aus diesem Grund werfe ich da auch keinen weiteren Blick drauf, der Fehler bedeutet im Endeffekt folgendes:

    C
    new x;
    for(;;) //Endlosschleife
    {
        x = 1;
        break;
        x = 0;
    }

    Es ist klar, dass x = 0; nie aufgerufen wird, da das break dies verhindert.


    Anstatt dem break könnte dort aber auch ein return verwendet werden.


    Das Ergebnis wäre das selbe :)

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • Viele Fehler waren in dem Code nicht.
    Dass die Einrückung zerschossen war hat eventuell der Pastebin gemacht.
    Einmal eingerückt sah das Ganze wieder leserlich aus. Die Kommentare zu den jeweiligen Klammern habe ich entfernt.


    Hier die verbesserten Codes, die Fehler jeweils als Kommentar markiert.
    if(strcmp("/robstore", cmdtext, true, 10) == 0)
    {
    new str[60];
    if(robtimerKill[playerid] == -1)
    {
    if(GetPlayerSkin(playerid) == 230)
    {
    for(new la=0; la<sizeof(LadenInfo); la++)
    {
    if(IsPlayerInRangeOfPoint(playerid, 80, LadenInfo[la][b_ix], LadenInfo[la][b_iy], LadenInfo[la][b_iz]))
    {
    if(GetPlayerWeapon(playerid) != 0)
    {
    SendClientMessage(playerid, COLOR_RED, "Du hast einen Überfall gestartet!");
    SetPlayerWantedLevel(playerid, GetPlayerWantedLevel(playerid) + 1);
    robtimerKill[playerid] = SetTimerEx("robtimer", 60000, false, "i", playerid);
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(IsPlayerCop(i))
    {
    GetPlayerName(playerid, str, MAX_PLAYER_NAME);
    format(str, sizeof(str), "<< %s (%d) überfällt gerade einen Store! >>", str, playerid);
    SendClientMessage(i, COLOR_RED, str);
    }
    }
    format(string5, sizeof(string5), "Name: %s\nWANTED", GetName(playerid));
    Wanteds[playerid] = Create3DTextLabel(string5, COLOR_YELLOW, 0, 0, 0, 40.0, 0, 0);
    Attach3DTextLabelToPlayer(Wanteds[playerid], playerid, 0.0, 0.0, 0.7);
    }
    else
    {
    SendClientMessage(playerid, COLOR_WHITE, "Du hast keine Waffe bei dir oder diese nicht in der Hand");
    }
    return 1; //Hat gefehlt
    }
    }
    return SendClientMessage(playerid, COLOR_WHITE, "Du bist an keinem Store!"); //Aus der Schleife gezogen.
    }
    else
    {
    SendClientMessage(playerid, COLOR_WHITE, "Du bist ein Cop. Du kannst keinen Storerob starten!");
    }
    }
    else
    {
    SendClientMessage(playerid, COLOR_WHITE, "Du kannst nur einen Raub gleichzeitig starten!");
    }
    return 1;
    }


    if(newkeys & KEY_SECONDARY_ATTACK) //Vorgezogen
    {
    new str[145];
    for(new la=0; la<sizeof(LadenInfo); la++)
    {
    if(IsPlayerInRangeOfPoint(playerid, 3.0, LadenInfo[la][b_ix], LadenInfo[la][b_iy], LadenInfo[la][b_iz])) //BSN
    {
    if(robtimerKill[playerid] != -1)
    {
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(IsPlayerCop(i))
    {
    GetPlayerName(playerid, str, MAX_PLAYER_NAME);
    format(str, sizeof(str), "<< Der Überfall von %s (%d) ist gescheitert! (Store verlassen) >>", str, playerid);
    SendClientMessage(i, COLOR_RED, str);
    }
    }
    //Code drunter aus der Schleife geholt
    KillTimer(robtimerKill[playerid]);
    robtimerKill[playerid] = -1;
    sInfo[playerid][robbedStores]++;
    sInfo[playerid][fRobbedStores]++;
    saveRobs(playerid);
    SetPlayerInterior(playerid,0);
    SetPlayerPos(playerid, LadenInfo[la][b_x], LadenInfo[la][b_y], LadenInfo[la][b_z]);
    SendClientMessage(playerid, COLOR_RED, "Dein Überfall ist gescheitert da du den Store verlassen hast");
    }
    else
    {
    SetPlayerInterior(playerid,0);
    SetPlayerPos(playerid, LadenInfo[la][b_x], LadenInfo[la][b_y], LadenInfo[la][b_z]);
    }
    return 1; //Hat gefehlt
    }
    }
    }


    Und ja, mir ist bewusst dass der Thread-Starter gesperrt ist.
    Nichtsdestotrotz kann die Hilfestellung jemandem weiterhelfen, eventuell auch @Dachdecker , der ja auch nachgefragt hatte.