Problem bei Frakkammer

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
  • Moin zusammen,
    habe ein Problem und zwar,
    kann man nach den Befehl für Frakkammer unendlich viel Waffen nehmen.
    Die Materialien werden irgendwie nicht gezählt, ob so viel noch da sind.


    Hier mal ein teil des Systems, vielleicht seht ihr ja den Fehler:


    new PDMats;


    forward LoadTestMats();
    public LoadTestMats()
    {
    new arrCoords[1][64];
    new strFromFile2[256];
    new File: file = fopen("Test.ini", io_read);
    if (file)
    {
    fread(file, strFromFile2);
    split(strFromFile2, arrCoords, ',');
    PDMats = strval(arrCoords[0]);
    fclose(file);
    }
    else
    {
    printf("Test fehlt");
    }
    return 1;
    }


    forward SaveTestMats();
    public SaveTestMats()
    {
    new coordsstring[256];
    format(coordsstring, sizeof(coordsstring), "%d,", PDMats);
    new File: file2 = fopen("Test.ini", io_write);
    fwrite(file2, coordsstring);
    fclose(file2);
    return 1;
    }


    So dann hier die Abfrage, ob eigentlich so viele materialien verfügbar sind:


    if(frak == 1 && PDMats - 5 < 0)
    {
    SendClientMessage(playerid, COLOR_GRAD1, "So viele Materialien sind nicht mehr verfügbar!");
    return 1;
    }


    if(frak == 1)
    {
    PDMats -= 5;
    }


    Die Datei wird richtig angelegt in den Scriptfiles.
    Mit der Füllmenge von 0


    Nur wo ist hier der Fehler, dass ich unendlich Waffen nehmen kann?

    Einmal editiert, zuletzt von ReborN ()

  • Am besten lässt du dir die menge mal ausgeben was hier übergeben wird
    was du da gemacht hast sieht mir nicht wirklich nach dem wahren aus


    kannst ja mal ändern jedoch sehe ich hier generl kein wirklichen Fehler
    es kommt jedoch drauf an wie dein ganzer code aussieht ?


    if(frak != 1 && (PDMats - 5) <= 0)return SendClientMessage(playerid, COLOR_GRAD1, "So viele Materialien sind nicht mehr verfügbar!");
    PDMats -= 5;


    zu dem lass dir PDMats mal ausgegeben und schau auch das du die PDMats nicht ihrgend wo neu setzt auf einen wert.

  • es kommt jedoch drauf an wie dein ganzer code aussieht ?


    Möchte eigentlich nicht den ganzen Code hier schicken, da sonst jeder das mit der Frakkammer hat :S
    Jedenfalls wird PDMats nirgendwo mehr auf 0 gesetzt.


    Zudem durch dein Quelltext mit if(frak != 1 && (PDMats -5) <= 0)
    zeigt er ingame schon einmal den richtigen Text an mit: "Nicht mehr verfügbar".
    Dennoch wird jetzt angezeigt, dass in der Kammer -4 Materialien sind, auch wenn ich diese wieder auffülle, kommt es mit -4 Materialien

  • Möchte eigentlich nicht den ganzen Code hier schicken, da sonst jeder das mit der Frakkammer hat :S
    Jedenfalls wird PDMats nirgendwo mehr auf 0 gesetzt.


    Zudem durch dein Quelltext mit if(frak != 1 && (PDMats -5) <= 0)
    zeigt er ingame schon einmal den richtigen Text an mit: "Nicht mehr verfügbar".
    Dennoch wird jetzt angezeigt, dass in der Kammer -4 Materialien sind, auch wenn ich diese wieder auffülle, kommt es mit -4 Materialien


    ich meinte mit posten den command wie du ihn momentan hast durch (PDMats - 5) wird nämlich nix gesetzt und du hast vllt ihrgend was am Flaschen punkt.

  • posten den command wie du ihn momentan hast


    Naja hier mal der Command, wo es normal abgerufen werden sollte:


    if(dialogid == DIALOG_KAMMER_WAFFEN1)
    {
    if(response)
    {
    if(listitem == 0)
    {
    new frak;
    if(SpielerInfo[playerid][pMember] > 0)
    {
    frak = SpielerInfo[playerid][pMember];
    }
    else if(SpielerInfo[playerid][pLeader] > 0)
    {
    frak = SpielerInfo[playerid][pLeader];
    }
    if(frak != 1 && PDMats - 5 <= 0)
    {
    SendClientMessage(playerid, COLOR_GRAD1, "So viele Materialien sind nicht mehr verfügbar!");
    return 1;
    }
    SendClientMessage(playerid, COLOR_LIGHTBLUE, "Du hast dir ein Messer aus der Fraktionskammer genommen.");
    SendClientMessage(playerid, COLOR_LIGHTBLUE, "Kosten: 5 Materialien");
    GivePlayerWeapon(playerid, 4, 1);
    if(frak == 1)
    {
    PDMats -= 5;
    }
    SaveFrakMats();


    Hier wäre dann noch der Befehl, wo mir nun die -4 Materialien angezeigt werden:

    Spoiler anzeigen
    if(strcmp(cmd, "/matsanschauen", true) == 0)
    {
    new frak;
    if(SpielerInfo[playerid][sMember] > 0)
    {
    frak = SpielerInfo[playerid][sMember];
    }
    if(frak == 1)
    {
    format(ALLSTRING, sizeof(ALLSTRING), "In eurer Fraktionskammer sind %d Fraktions-Materialien!", PDMats);
    }


    So habe ich derzeit alle anderen Funktionen auch gesetzt