PayDay mag nach 10 Minuten nicht mehr updaten

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
  • Guten Tag,


    der Titel mag ein bisschen wirr klingen, aber ich denke ich kann das euch auch so verständlich erklären ;) Ich bastel mir gerade meinen eigenen PayDay zusammen. Ich habe eine MySQL Tabelle mit Daten zu jedem User (bitte im Anhang schauen).


    In der Spalte "payDayMinutes" wird nur festgehalten wie viel Minuten seit dem letzten PayDay vergangen sind. Dazu brauche ich einen Timer der alle 60 Sekunden die Spalte um einen Wert erhöht. Wenn er aber beim nächsten Durchlauf auf 60 updaten will, updatet er gleich wieder auf 0 und der User bekommt sein Geld + seinen Respekt Punkt. Ist ja auch irgendwie logisch.


    Mein Skript sieht wie folgt aus:

    forward payDay(playerid);
    public payDay (playerid)
    {
    printf("%s", "PayDay");
    // Objekte
    new playerName[MAX_PLAYER_NAME+1];
    new userID;
    new payDayMinutes[2];
    new payDayMoney[20];
    new userLevel[30];
    new userRespect[30];
    new userRespectPointsNeeded[10];
    new query1[180];
    new query2[180];
    new query3[180];
    new query4[180];
    new query5[180];
    new query6[180];
    new query7[180];

    // Spielername
    GetPlayerName(playerid, playerName, sizeof(playerName));

    // Bekomme UserID
    userID = strval(getUserID(playerName));

    // Sind bereits 60 Minuten vergangen ?
    format(query1, sizeof(query1), "SELECT payDayMinutes FROM users WHERE userID = %d", userID);
    mysql_query(query1);
    mysql_store_result();

    mysql_fetch_field("payDayMinutes", payDayMinutes);

    mysql_free_result();

    if (strval(payDayMinutes) == 59)
    {
    // Setze den PayDay wieder auf 0
    format(query2, sizeof(query2), "UPDATE users SET payDayMinutes = 0 WHERE userID = %d", userID);
    mysql_query(query2);

    // Wie viel Geld bekommt der Spieler ausgezahlt ?
    format(query3, sizeof(query3), "SELECT payDayMoney FROM users WHERE userID = %d", userID);
    mysql_query(query3);
    mysql_store_result();

    mysql_fetch_field("payDayMoney", payDayMoney);

    mysql_free_result();

    // Schreibe das Geld auf der Bank gut
    format(query4, sizeof(query4), "UPDATE bank_accounts SET money = %d WHERE userID = %d", payDayMoney, userID);
    mysql_query(query4);

    // Gebe dem User einen Respekt Punkt
    format(query5, sizeof(query5), "UPDATE users SET userRespect = userRespect + 1 WHERE userID = %d", userID);
    mysql_query(query5);

    // Bekomme Informationen zum nächsten Level Up
    format(query6, sizeof(query6), "SELECT userLevel, userRespect, userRespectPointsNeeded FROM users WHERE userID = %d", userID);
    mysql_query(query6);
    mysql_store_result();


    mysql_fetch_field("userLevel", userLevel);
    mysql_fetch_field("userRespect", userRespect);
    mysql_fetch_field("userRespectPointsNeeded", userRespectPointsNeeded);


    mysql_free_result();

    if (strval(userRespect) == strval(userRespectPointsNeeded))
    {
    format(query7, sizeof(query7), "UPDATE users SET userLevel = userLevel + 1, userRespect = 0, userRespectPointsNeeded = userRespectPointsNeeded + 4 WHERE userID = %d", userID);
    mysql_query(query7);
    }
    }
    else
    {
    // Erhöhe die Minuten des PayDay's
    format(query2, sizeof(query2), "UPDATE users SET payDayMinutes = payDayMinutes + 1 WHERE userID = %d", userID);
    mysql_query(query2);
    }
    }


    Jetzt habe ich aber leider das Problem, dass wenn er payDayMinutes auf 10 updatet er stehen bleibt. Ihr seht ich habe bereits ein printf ausgeben lassen um zu gucken ob der Timer die Funktion immernoch aufruft (das tut er auch). Aber warum hört das Skript auf in der MySQL Tabelle noch einmal zu updaten.


    Dann habe ich noch ein zweites Problem. Irgendwie werde nur ich (userID 1) geupdatet. Wenn die anderen Spieler joinen dann macht er nichts, nur bei mir.


    Ich habe SetTimerEx unter OnPlayerSpawn eingebaut da ich nicht möchte das die Leute einfach im Login Bildschirm hocken bleiben können und sich sozusagen hochleveln können. Oder darf ich das garnicht machen ?


    OnPlayerSpawn Auszug mit SetTimerEx:

    public OnPlayerSpawn(playerid)
    {
    // Setze den PayDay Timer
    SetTimerEx("payDay", 60000, 1, "i", playerid);


    return 1;
    }


    Ich hoffe ihr könnt mir wieder weiterhelfen :)

    Einmal editiert, zuletzt von Mr_Brox ()