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