Admin-Prison: Spieler Variable bei einer IF-Abfrage funktioniert nicht richtig

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
  • Es gibt gewisse unlogische Fehler die keinen Sinn ergeben. Allerdings weiss ich nicht mehr weiter.


    Zur Schilderung:

    Ich habe ein Admin-Prison, wenn ein Spieler ins Prison kommt, erhält die SpielerVariable pPrison den Wert 1 (Und im folgenden entsteht ein Laufprison, für den der Wert 2 vorgesehen ist (Für die Logik)).


    Allerdings wenn der Spieler ins Prison kommt, den Wert pPrison 1 hat, wird diese Anweisung nach der If-Abfrage ignoriert und der Spieler wird zu den Koordinaden von SetSpawnInfo (Was am Anfang vom Login definiert wurde) teleportiert.

    Code
    SpielerInfo[playerid][pPrison] > 0


    Das komische hierbei ist, sobald ich die If-Abfrage in

    Code
    SpielerInfo[playerid][pPrison] == 0

    ändere und der Spieler nicht im Prison ist, wird meine Anweisung dahinter ausgeführt. Ich habe das gleiche mit SpielerInfo[playerid][pPrison] == 1 versucht wenn der Spieler ins Prison geschickt wurde, allerdings wird dann die If-Anweisung gänzlich ignoriert.


    Vielleicht habe ich einen Fehler, der auch ein Denkfehler sein könnte, aber ich hoffe ihr Brotfische könntet mir helfen:thumbup::thumbup:


    PS: Die Int Variable pPrison ist wirklich auf 1 wenn der Spieler ins Prison gesteckt wurde. Aber trotz allen werden nur meine Debug-Texte Dev: 1 & Dev: 4 angezeigt beim Spawn :)


    Jeffry


    Wer PALWAL-Sternchen vergibt, bekommt aus Prinzip ein Like 😏


    @palwal Donald Trump ist einer der besten Präsidenten welche die USA je hatte, meine Meinung.

  • Bist du sicher, dass auch alles wirklich korrekt geladen wird?

    Lass dir mal die Stellen ausgeben wo du die Value setzt und überprüfe die auch beim beim spawn, ob sie gleich geblieben ist.

    Falls nicht musst du sie folglich irgendwo überschreiben, weshalb der Code nicht funktioniert.


    Grundsätzlich müsste der Code super funktionieren, habe eben noch paar Kommentare der Übersicht halber rein gemacht.

    Noch eine Verständnisfrage: pPrison = 1 wenn der Spieler seine Zeit im Prison verbüßt, ansonsten 0?

  • Das ist ja das komische, da überprüfe ich ja nochmal die Werte der Variablen

    Code
    SendClientMessage(playerid, -1, "DEV: 1");
        format(string, 200, "Prison: %i, Sek: %i, T: %i", SpielerInfo[playerid][pPrison], SpielerInfo[playerid][pPrisonS], SpielerInfo[playerid][pPrisonT]);
        SendClientMessage(playerid, -1, string);
        format(string, 200, "Grund: %s, Admin: %s", SpielerInfo[playerid][pPrisonR], SpielerInfo[playerid][pPrisonA]);
        SendClientMessage(playerid, -1, string);

    und pPrison hat den Wert 1, aber führt die If-Anweisung nicht aus :(

    Wer PALWAL-Sternchen vergibt, bekommt aus Prinzip ein Like 😏


    @palwal Donald Trump ist einer der besten Präsidenten welche die USA je hatte, meine Meinung.

  • Versuche bitte mal folgendes:


    Code
    if(SpielerInfo[playerid][pPrison] > 0) {
        TimestampToDate(SpielerInfo[playerid][pPrisonT], year, month, day, hour, minute, second, 1);


    zu:

    Code
    printf("Vor Abfrage: pPrison: %d", SpielerInfo[playerid][pPrison]);
    if(SpielerInfo[playerid][pPrison] > 0) {
        printf("Nach Abfrage: pPrison: %d", SpielerInfo[playerid][pPrison]);
        TimestampToDate(SpielerInfo[playerid][pPrisonT], year, month, day, hour, minute, second, 1);
        printf("Nach TimestampToDate: pPrison: %d", SpielerInfo[playerid][pPrison]);

    Was gibt dir der Server Log dann aus?

  • Versuche bitte mal folgendes:


    Code
    if(SpielerInfo[playerid][pPrison] > 0) {
        TimestampToDate(SpielerInfo[playerid][pPrisonT], year, month, day, hour, minute, second, 1);


    zu:

    Code
    printf("Vor Abfrage: pPrison: %d", SpielerInfo[playerid][pPrison]);
    if(SpielerInfo[playerid][pPrison] > 0) {
        printf("Nach Abfrage: pPrison: %d", SpielerInfo[playerid][pPrison]);
        TimestampToDate(SpielerInfo[playerid][pPrisonT], year, month, day, hour, minute, second, 1);
        printf("Nach TimestampToDate: pPrison: %d", SpielerInfo[playerid][pPrison]);

    Was gibt dir der Server Log dann aus?


    Server-Log:

    Wer PALWAL-Sternchen vergibt, bekommt aus Prinzip ein Like 😏


    @palwal Donald Trump ist einer der besten Präsidenten welche die USA je hatte, meine Meinung.

  • Gerne :)

    Nur warum TimestampToDate so ein Einfluss hatte ist mit schleierhaft^^

    Der Grund ist, dass TimestampToDate an der Stelle das Array sprengt, daher auch die Fehlermeldung vom Crashdetect.

    Das Array MonthTimes ist 12 Zellen groß (es sind ja 12 Monate). Das bedeutet, dass man mit den Indizes 0 bis 11 darauf zugreifen kann. Der Fehler in der Include ist aber, dass mit dem Monat darauf zugegriffen wird (sprich 1 bis 12). Somit gibt es immer im Dezember Fehler, die durch die TimestampToDate Include auftreten, da dort das Array gesprengt wird und der Code an der Stelle aufhört weiter zu laufen (daher hat er bei dir nie etwas gemacht).