for-schleife fricht einfach ab

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 liebe leute,


    Ich hab mal wieder mit pawn angefangen und fing an mit einem problem an dem ich vor monaten schoneinmal versagte.
    Diese forschleife läuft nicht komplett durch

    new datei[20];
    for(new i=1;i<=2000;i++)
    {
    format(datei,50,"car%d",i);//aus datei wird das "i"te element geladen(auser das 2000te)
    format(Schild[playerid][i][nummer],32,dini_Get(accFormat,datei));//Die geladenen strings werden in der arry verpackt
    time=i*0.05;//% Berechnung
    format(datei,50,"%.2f Prozent Fertig",Float:time);
    SendClientMessage(playerid,0xFFFFFFFF,datei);//% Anzeige
    }
    da diese Schleife Zeit beansprucht soll dem Spieler gezeigt werden wie lange es noch dauert.
    Die Schleife bricht bei 1999 ab darum steht im chat nie 100% fertig.
    Man sieht nur bis 99.95% egal wie hoch ich sie setz.
    Warum?

  • erhöhs mal auf 2001 ;)


    Auja gute Idee, dann haben wir 100,05%. :thumbup:


    Ich hab den Code mal getestet und es lief einwandfrei.


    new datei[20],Float:time;
    for(new i=1;i<=2000;i++)
    {
    format(datei,50,"carid%d",i);
    print(datei);
    time=i*0.05;//% Berechnung
    format(datei,50,"%.2f Prozent Fertig",time);
    print(datei);//% Anzeige
    }
    PS: Ich hatte keine Lust InGame zu gehen und das zu testen

    "Bevor ich mir Informationen aus der "Bild" hole,
    werde ich anfangen, Wahlergebnisse danach vorauszusagen,
    neben welchen Busch unsere Katze gepinkelt hat."

    Margarete Stokowski

  • Ich vermute, dass ich vergessen habe die variable für jeden spieler zu definiren, da jeder beim einloggen unterschiedlich weit ist.


    Das würde nur passieren, wenn du das in einem Befehl haben würdest.

    "Bevor ich mir Informationen aus der "Bild" hole,
    werde ich anfangen, Wahlergebnisse danach vorauszusagen,
    neben welchen Busch unsere Katze gepinkelt hat."

    Margarete Stokowski

  • ich habe auch kein syntaxfehler in der Schleife entdeckt, ich teset nun meine version ansonnsten hier mal das public:
    (login system von blackfox)
    public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
    {
    new pname[MAX_PLAYERS],accFormat[128],acccFormat[128];
    new Float:time[MAX_PLAYERS];
    GetPlayerName(playerid,pname,sizeof pname);
    format(accFormat,sizeof accFormat,"Spieler/%s.datei",pname);
    format(acccFormat,sizeof accFormat,"Unregistriert/%s.datei",pname);
    switch(dialogid) // dialogid auswählen
    {
    case DIALOG_LOGIN: // ID Login
    {
    if(response)
    {
    if(!strlen(inputtext))
    {
    SendClientMessage(playerid,0xFFFFFFFF,"Du hast kein Passwort angegeben und wurdest gekickt!");
    Kick(playerid);
    return 1;
    }
    if(strcmp(inputtext,dini_Get(accFormat,"Passwort")) == 0) // Passwort Direkt aus der Datei Laden
    {
    Spieler[playerid][skin] = dini_Int(accFormat,"skin");
    Spieler[playerid][lastx] = dini_Float(accFormat,"lastx");
    Spieler[playerid][lasty] = dini_Float(accFormat,"lasty");
    Spieler[playerid][lastz] = dini_Float(accFormat,"lastz");
    Spieler[playerid][eingeloggt] = 1; // Spieler ist nun erfolgreich eingeloggt
    new datei[20],Float:time[MAX_PLAYERS];
    for(new i=1;i<=2000;i++)
    {
    format(datei,50,"car%d",i);
    format(Schild[playerid][i][nummer],32,dini_Get(accFormat,datei));
    time[playerid]=i*0.05;
    format(datei,50,"%.2f Prozent Fertig",Float:time[playerid]);
    SendClientMessage(playerid,0xFFFFFFFF,datei);
    }
    SendClientMessage(playerid,0xFFFFFFFF,"Du wurdest erfolgreich eingeloggt.");
    }
    else
    {
    SendClientMessage(playerid,0xFFFFFFFF,"Das Passwort war Falsch und du wurdest gekickt!");
    Kick(playerid);
    }
    }
    else
    {
    SendClientMessage(playerid,0xFFFFFFFF,"Du hast abgebrochen und wurdest gekickt!");
    SendClientMessage(playerid,0xFFFFFFFF,"Du must dich einloggen um spielen zu können!");
    Kick(playerid);
    return 1;
    }
    }
    case DIALOG_REG: // ID Registrieren
    {
    if(response)
    {
    if(!strlen(inputtext)) // Text darf nicht = Null sein Null im Sinne von nichts
    {
    SendClientMessage(playerid,0xFFFFFFFF,"Du hast kein Passwort angegeben und wurdest gekickt!");
    Kick(playerid);
    return 1;
    }
    dini_Create(accFormat);
    dini_Create(acccFormat);
    dini_Set(accFormat,"Passwort",inputtext);
    new datei[20];
    new Float:time[MAX_PLAYERS];
    for(new i=1;i<=2000;i++)
    {
    format(datei,50,"car%d",i);
    dini_IntSet(accFormat,datei,0);
    time[playerid]=i*0.05;
    format(datei,50,"%.2f Prozent Fertig",Float:time[playerid]);
    SendClientMessage(playerid,0xFFFFFFFF,datei);
    }
    SendClientMessage(playerid,0xFFFFFFFF,"Account wurde angelegt und du wurdest eingeloggt.");
    Spieler[playerid][eingeloggt] = 1;
    }
    else
    {
    SendClientMessage(playerid,0xFFFFFFFF,"Du hast abgebrochen und wurdest gekickt!");
    SendClientMessage(playerid,0xFFFFFFFF,"Du must dich registrieren um spielen zu können!");
    Kick(playerid);
    return 1;
    }
    }
    }
    return 1;
    }

  • Kommt denn die Meldung, du wurdest erfolgreich eingeloggt?
    Wenn nicht, weiß ich die Lösung

    "Bevor ich mir Informationen aus der "Bild" hole,
    werde ich anfangen, Wahlergebnisse danach vorauszusagen,
    neben welchen Busch unsere Katze gepinkelt hat."

    Margarete Stokowski

  • Ich sags dir, dein Array ist zu klein :D
    Du hast den Array bestimmt auf 2000 gesetzt
    und ein Array fängt nicht bei 1 an sondern bei 0,
    d.h. du musst die Arrayzahl um eins veringern


    format(Schild[playerid][i-1][nummer],32,dini_Get(accFormat,datei));

    "Bevor ich mir Informationen aus der "Bild" hole,
    werde ich anfangen, Wahlergebnisse danach vorauszusagen,
    neben welchen Busch unsere Katze gepinkelt hat."

    Margarete Stokowski

  • Warum um eins erhöhen?
    Ganz einfach, weil es kein Auto mit der ID 0 gibt und laut deiner Schleife dann bis 2001 laufen würde


    Mit der vergrößerung des Arrays ist es zwar getan, aber du hast dann unbenutzen Speicher ;(

    "Bevor ich mir Informationen aus der "Bild" hole,
    werde ich anfangen, Wahlergebnisse danach vorauszusagen,
    neben welchen Busch unsere Katze gepinkelt hat."

    Margarete Stokowski