Wie rechne ich aus dem gettime(); Tage aus?
Also ich möchte ein Befehl machen "/makepremium <Spieler-ID> <Tage>" und wie rechne ich da die Tage dann aus?
Wie rechne ich aus dem gettime(); Tage aus?
Also ich möchte ein Befehl machen "/makepremium <Spieler-ID> <Tage>" und wie rechne ich da die Tage dann aus?
new zeitBisEnde = gettime() + tage * 86400; //1 Tag = 86400 Sekunden
So ich hab da jetzt mal etwas versucht aber ich glaube das funktioniert nicht ganz...
In der Datenbank wird diese zahl gespeichert, wenn ich 1 Tag Premium gebe.
-1446823452
stock MakePremium(playerid,dauer,makerid)
{
new timestamp,str[128],str2[128],query[1024];
timestamp = gettime();
new zeitBisEnde = gettime() + dauer * 86400;
timestamp += zeitBisEnde;
format(str,sizeof(str), "%s hat dir %i Tage den Premiumrank übergeben.", SpielerName(makerid), dauer);
SendClientMessage(playerid, GELB, str);
format(str2,sizeof(str2), "%s hat %s %i Tage den Premiumrank übergeben.", SpielerName(makerid), SpielerName(playerid), dauer);
SendAdminMessage(ADMIN, str2);
format(query,sizeof(query), "UPDATE accounts SET PremiumZeit='%d' WHERE ID='%i'", timestamp, sInfo[playerid][pDBID]);
mysql_function_query(mysql,query,false,"","");
return 1;
}
timestamp += zeitBisEnde;
Zu
timestamp = zeitBisEnde;
Du kannst aber auch einfach zeitBisEnde in die Datenbank eintragen.
Ok geht.
kann ich das abfagen auch wie hier bei meinem timeban machen.
Also bei dem login anzeigen wie lange der SPieler noch Premium hat.
new timestamp = gettime();
new bisgebannt = sInfo[playerid][pTimeBanZeit];
if(timestamp < bisgebannt)
{
new differenz = bisgebannt - timestamp;
new Minuten = differenz / 60;
new str[256];
format(str,sizeof(str), "Du bist noch für %i Minuten gebannt!", Minuten);
SendClientMessage(playerid, ADMIN, str);
SetTimer("KickTimer", 1000, false);
return 1;
} else {
new query[1024];
format(query,sizeof(query), "UPDATE accounts SET TimeBanZeit='0' WHERE ID='%i'", sInfo[playerid][pDBID]);
mysql_function_query(mysql,query,false,"","");
}
Ja, das kannst du genau gleich machen.
Nochmal zu den Stunden. Das ist diesesmal ja nicht
new zeitBisEnde = gettime() + tage * 86400;
Durch wie viel muss ich denn da teilen? durch die 86400? Um die Stunden zu bekommen?
new Minuten = differenz / 60;
Nochmal zu den Stunden. Das ist diesesmal ja nicht
new zeitBisEnde = gettime() + tage * 86400;
Durch wie viel muss ich denn da teilen? durch die 86400? Um die Stunden zu bekommen?
new Minuten = differenz / 60;
3600 ![]()
Geht soweit aber Der sagt mir das sind ~1430 Minuten?
Ein Tag hat 1440 Minuten. ![]()
Kannst es ja noch durch 60 teilen, dann hast du es in Stunden.
Oder du erstellst dir durch herunter rechnen eine Ausgabe wie
ZitatDu hast noch X Tage, X Stunden und X Minuten Premium.
Ja ok dann habe ich mich Falsch ausgedrückt.
Ich möchte das so haben, dass da dann steht bei 1 Tag Premium 23 Stunden und 59 Minuten.
new zeitBisEnde = DIE_SPIELER_VARIABLE;
new tage = zeitBisEnde / 86400;
zeitBisEnde -= tage * 86400;
new stunden = zeitBisEnde / 3600;
zeitBisEnde -= stunden * 3600;
new minuten = zeitBisEnde / 60;
zeitBisEnde -= minuten * 60;
new sekunden = zeitBisEnde;
mhm.... also entwerde stehe ich total auf dem Schlauch oder das nicht nicht richtig...
So hab ichs jetzt
new timestamp = gettime();
if(sInfo[playerid][pPremium] == 1){
new nochpremium = sInfo[playerid][pPremiumZeit];
if(timestamp < nochpremium)
{
new tage = nochpremium / 86400;
nochpremium -= tage * 86400;
new stunden = nochpremium / 3600;
nochpremium -= stunden * 3600;
new minuten = nochpremium / 60;
nochpremium -= minuten * 60;
new str[256];
format(str,sizeof(str), "Du bist noch für {FF9E00}%i Tage{FFFFFF}, {FF9E00}%i {FFFFFF}Stunden und {FF9E00}%i {FFFFFF}Minuten Premium!", tage, stunden, minuten);
SendClientMessage(playerid, WEISS, str);
} else {
new query[1024];
format(query,sizeof(query), "UPDATE accounts SET PremiumZeit='0', Premium='0' WHERE ID='%i'", sInfo[playerid][pDBID]);
mysql_function_query(mysql,query,false,"","");
}
}
Und das kommt dann im CHat bei 1 Tag Premium:
Die momentane Zeit muss noch abgezogen werden.
nochpremium = sInfo[playerid][pPremiumZeit] - gettime();
Dachte das machst du schon.
Das darfst du aber erst NACH der Abfrage machen.
EDIT:
Also so:
Okay es fkuntioniert nun danke! ![]()
Hey,
ich habe folgendes Problem:
Ich möchte das mit dem Befehl /random ein Randomplayer der gerade auf dem server ist zu einer Postmition geportet wird.
Ich bin mit meinen Latein am ende, und google konnte mir auch nicht wirklich helfen.
mfg.
Mausibiba
Ich möchte für eine Fraktion alle Skins zur verfügung stellen. Ist es hier möglich?
new BincoSystemFraktionsSkins[][BincoFrakt_daten] =//{Skinid,Fraktid}
{
{283,1},{282,1},{281,1},{280,1},{267,1},{266,1},{288,1},
{163,2},{164,2},{165,2},{166,2},{286,2},{141,2}
};
Oder muss ich da jetzt wirklich jede ID eintragen?#
Zeig mal dein Bincosystem her, meine magische Miesmuschel ist kaputt ![]()
@Mausibiba:
new player;
repeat:
player =random(MAX_PLAYERS);
if(!IsPlayerConnected(player))goto repeat;
//Hier deine Position abfragen und die des anderen Spielers setzen
benutz GetMaxPlayers();
@Mausibiba:
new player;
repeat:
player =random(MAX_PLAYERS);
if(!IsPlayerConnected(player))goto repeat;
Das ist sogenannter Spaghetti Code und eine sehr schlechte Möglichkeit dieses Problem zu lösen.
benutz GetMaxPlayers();
Dann würde das alles noch länger dauern, denn angenommen MAX_PLAYERS und GetMaxPlayers() würden den selben Wert haben, dann muss trotzdem immer wieder eine Funktion aufgerufen werden.
Besser zu lösen, wäre es mit einem Array:
/*
Oben im Skript am besten:
#undef MAX_PLAYERS
#define MAX_PLAYERS (ANZAHL_DER_MAXIMALEN_SPIELER)
*/
new bool:e_Player[MAX_PLAYERS char];
public OnPlayerConnect(playerid)
{
if(!IsPlayerNPC(playerid)) e_Player{playerid} = true; //für jeffry
return 1;
}
public OnPlayerDisconnect(playerid)
{
e_Player{playerid} = false;
return 1;
}
//Dann der Command
new tmp[MAX_PLAYERS],c,Float:p[3];
for(new i; i<MAX_PLAYERS; i++) if(e_Player{i} && i != playerid) tmp[code=c] = i,c++;
if(!c) return SendClientMessage(playerid,-1,"Es ist kein Spieler online, den du porten kannst!");
new p_random = tmp[random(c)];
GetPlayerPos(playerid,p[0],p[1],p[2]); //<< du fragst deine Position ab:
SetPlayerPos(p_random,p[0],p[1]+1.5,p[2]); //<<hier setzt du den random Spieler zu dir
mfg. ![]()
//Edit: Code