Hey,
Wie kann ich das Scripen, das ich z.b jemand für 1Woche Premium geben kann? und es abläuft auch wenn er off ist etc.
Brauche nur die Funktion, den Befehl kann ich selber machen.
Gruß
Hey,
Wie kann ich das Scripen, das ich z.b jemand für 1Woche Premium geben kann? und es abläuft auch wenn er off ist etc.
Brauche nur die Funktion, den Befehl kann ich selber machen.
Gruß
Hallo,
das kannst du mit einem Timestamp lösen...
PAWN Funktion: gettime();
Anwenden könntest du das so...
new timeStamp = gettime();
if(timeStamp > als der aus der Datenbank) {
Premium abgelaufen -> Premiumvariable zurücksetzen
}
MfG
du musst natürlich auch das Datum in die DB eintragen und dann einfach abfragen ob die Woche um ist.
Das ganze geht auch via mysql
dazu braucht auch die spaltedie richtige einstellung
`PremiumTime` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' // beim erstellen der tabelle die jeweilige einstellung
die reihen folge kann man auch ändern.
Danach kann man wenn der spieler sich einloggt das ganze noch überprüfen entweder mit einem weiteren query ob die jeweilige zeit größer ist sollte ein ergebnis zurück kommen
dan hat er noch premium also schon wieder beim einloggen mit NOW() überprüfen.
oder direkt im query
ich habe bis jetzt so
ocmd:premium(playerid,params[])
{
new pID,dauer;
new timestamp,str[128];
timestamp = gettime();
new sekunden = dauer * 60;
timestamp += sekunden;
if(sscanf(params,"ud",pID,dauer)) return SendClientMessage(playerid,GRAU,"Benutze: /premium [SpielerName/ID] [Wochen]");
format(str,sizeof(str),"Blabla hat %d Wochen Premium",dauer);
SendClientMessageToAll(ROT,str);
mysql_SetInt("accounts", "Premium", timestamp, "Name", SpielerName(pID));
SavePlayer(pID);
return 1;
}
Loadplayer =
mysql_GetInt("accounts", "Premium", "Name", SpielerName(playerid));
Aber haut nicht ganz hin
Wenn du das machst
new sekunden = dauer * 60;
timestamp += sekunden;
Bevor dauer überhaupt initialisiert ist, kann das auch nix werden (0*60)
edit: und für Wochen musst du aus Sekunden noch Minuten,Stunden,Tage und Wochen machen.
Wenn du das machst
new sekunden = dauer * 60;
timestamp += sekunden;
Bevor dauer überhaupt initialisiert ist, kann das auch nix werden (0*60)
Verstehe nichts :D, könntest du es mir ein wenig vor machen?
ocmd:premium(playerid,params[])
{
new pID,dauer;
new timestamp,str[128];
if(sscanf(params,"ud",pID,dauer)) return SendClientMessage(playerid,GRAU,"Benutze: /premium [SpielerName/ID] [Wochen]");
timestamp = gettime();
new sekunden= dauer * 7*24*60*60;
timestamp += sekunden;
format(str,sizeof(str),"Blabla hat %d Wochen Premium",dauer);
SendClientMessageToAll(ROT,str);
mysql_SetInt("accounts", "Premium", timestamp, "Name", SpielerName(pID));
SavePlayer(pID);
return 1;
}
Sie Sequenz war falsch.
edit:
new sekunden= dauer * 7*24*60*60;
macht aus den angegebenen Wochen (dauer)
z.B.
1 Woche = 7 Tage = 168 Stunden = 10080 Minuten = 604800 Sekunden
Und wir brauchen ja Sekunden für den Timestamp
ocmd:premium(playerid,params[]) { new pID,dauer; new timestamp,str[128]; if(sscanf(params,"ud",pID,dauer)) return SendClientMessage(playerid,GRAU,"Benutze: /premium [SpielerName/ID] [Wochen]"); timestamp = gettime(); new sekunden= dauer * 7*24*60*60; timestamp += sekunden; format(str,sizeof(str),"Blabla hat %d Wochen Premium",dauer); SendClientMessageToAll(ROT,str); mysql_SetInt("accounts", "Premium", timestamp, "Name", SpielerName(pID)); SavePlayer(pID); return 1; }
Wie bekomme ich das noch hin, das sie Zeit in der Datenbank abläuft?
Alles anzeigenocmd:premium(playerid,params[])
{
new pID,dauer;
new timestamp,str[128];
if(sscanf(params,"ud",pID,dauer)) return SendClientMessage(playerid,GRAU,"Benutze: /premium [SpielerName/ID] [Wochen]");
timestamp = gettime();
new sekunden= dauer * 7*24*60*60;
timestamp += sekunden;
format(str,sizeof(str),"Blabla hat %d Wochen Premium",dauer);
SendClientMessageToAll(ROT,str);
mysql_SetInt("accounts", "Premium", timestamp, "Name", SpielerName(pID));
SavePlayer(pID);
return 1;
}
Sie Sequenz war falsch.
edit:
new sekunden= dauer * 7*24*60*60;
macht aus den angegebenen Wochen (dauer)
z.B.
1 Woche = 7 Tage = 168 Stunden = 10080 Minuten = 604800 Sekunden
Und wir brauchen ja Sekunden für den Timestamp
ocmd:premium(playerid,params[])
{
new pID,dauer;
new timestamp,str[128];
if(sscanf(params,"ud",pID,dauer)) return SendClientMessage(playerid,GRAU,"Benutze: /premium [SpielerName/ID] [Wochen]");
new sekunden= dauer * 7*24*60*60;
timestamp = gettime() + sekunden;
format(str,128,"Blabla hat %d Wochen Premium",dauer);
SendClientMessageToAll(ROT,str);
mysql_SetInt("accounts", "Premium", timestamp, "Name", SpielerName(pID));
return 1;
}
warum erst speichern und danach gleich nochmal ?
Alles anzeigenocmd:premium(playerid,params[])
{
new pID,dauer;
new timestamp,str[128];
if(sscanf(params,"ud",pID,dauer)) return SendClientMessage(playerid,GRAU,"Benutze: /premium [SpielerName/ID] [Wochen]");
new sekunden= dauer * 7*24*60*60;
timestamp = gettime() + sekunden;
format(str,128,"Blabla hat %d Wochen Premium",dauer);
SendClientMessageToAll(ROT,str);
mysql_SetInt("accounts", "Premium", timestamp, "Name", SpielerName(pID));
return 1;
}
warum erst speichern und danach gleich nochmal ?
Ist das normal wenn ich dann die db refreshe das die Zahlen nicht runter gehen?
Die hat keine Lust runter zu zählen.
natürlich nicht was für eine dumme Frage die bleibt konstant wnen du diese nicht änderst was auch nicht nötig ist wenn man das ergebnis was man ausließt vergleicht
An sich erstmal garnicht. Aber du kannst z.B. beim Connecten abfragen, ob die Zeit schon vorüber ist und dann alle Werte bezüglich Premium aus null oder 0 setzen.
Da das ja anscheinend übersehen wurde