Du setzt einfach bei jedem PayDay wieder eine Variable hoch, und lässt diese dann auch abspeichern & laden.
Payday & Respektpunkt System
- justRevitox
- Geschlossen
- Erledigt
In 10 Minuten startet der nächtliche Backupvorgang! Es kann währenddessen (ca. 10 Minuten) zu Einschränkungen bei der Nutzung des Forums kommen
Weitere Infos findet ihr im Thema Backup des Forums
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
-
-
Also einfach bei meinem Spielerenum eine neue Variable z.b spielstunden? Und dann beim public PayDayTimer da wo er auch das Geld ausgezahlt kriegt, um 1 hochzählen also z.b sInfo[playerid][spielstunden] ++; ?
-
Ja, genau.
Setz das aber direkt unter sInfo[i][paydaytime] = 0;, weil wenn du das dort reinsetzt wo der Spieler das Geld bekommt, dann kann es sein, das er irgendwann keine Spielstunden bekommt, wenn die Variable jobgeld leer (== 0) ist. -
So im PayDayTimer?
public PayDayTimer()
{
new rpunkte;//Hier wird eine Variable erstellt, um die Respektpunkte mit dem Level zu berechnen
//Wir gehen eine Schleife durch alle Spieler durch
for(new i;i<MAX_PLAYERS;i++)
{
//Hier werden die Spieler "aussortiert" bzw. übersprungen, die entweder nicht mit dem Server verbunden, ein NPC oder nicht eingeloggt sind
if(!IsPlayerConnected(i) || IsPlayerNPC(i) || sInfo[i][eingeloggt] == 0)continue;
sInfo[i][paydaytime] ++;//Hier wird die Variable paydaytime immer um eins addiert
if(sInfo[i][paydaytime] == 60)//Ist die Variable == 60 (60 Minuten), dann ist PayDay
{
sInfo[i][respektpunkte] ++;//Respektpunkte wird um eins addiert
sInfo[i][paydaytime] = 0;//paydaytime wird wieder auf 0 gesetzt, damit das ganze von vorne anfangen kann
rpunkte = GetPlayerScore(i) * 6;
sInfo[i][spielstunden] ++;
}
if(sInfo[i][jobgeld] > 0)
{
GivePlayerMoney(i,sInfo[i][jobgeld]);
sInfo[i][jobgeld] = 0;
}
if(sInfo[i][respektpunkte] == rpunkte)
{
//Das Level kann um eins erhöht werden => Level Up
sInfo[i][level] ++;//Das Level wird hier um eins addiert
SetPlayerScore(i,sInfo[i][level]);//Das Level wird neu gesetzt
}
}
return 1;
} -
Du hast eine Klammer falsch gesetzt. Das muss so:
if(sInfo[i][paydaytime] == 60)//Ist die Variable == 60 (60 Minuten), dann ist PayDay
{
sInfo[i][respektpunkte] ++;//Respektpunkte wird um eins addiert
sInfo[i][paydaytime] = 0;//paydaytime wird wieder auf 0 gesetzt, damit das ganze von vorne anfangen kann
rpunkte = GetPlayerScore(i) * 6;
sInfo[i][spielstunden] ++;
if(sInfo[i][jobgeld] > 0)
{
GivePlayerMoney(i,sInfo[i][jobgeld]);
sInfo[i][jobgeld] = 0;
}
if(sInfo[i][respektpunkte] == rpunkte)
{
//Das Level kann um eins erhöht werden => Level Up
sInfo[i][level] ++;//Das Level wird hier um eins addiert
SetPlayerScore(i,sInfo[i][level]);//Das Level wird neu gesetzt
}
} -
Also jetzt so?
public PayDayTimer()
{
new rpunkte;//Hier wird eine Variable erstellt, um die Respektpunkte mit dem Level zu berechnen
//Wir gehen eine Schleife durch alle Spieler durch
for(new i;i<MAX_PLAYERS;i++)
{
//Hier werden die Spieler "aussortiert" bzw. übersprungen, die entweder nicht mit dem Server verbunden, ein NPC oder nicht eingeloggt sind
if(!IsPlayerConnected(i) || IsPlayerNPC(i) || sInfo[i][eingeloggt] == 0)continue;
sInfo[i][paydaytime] ++;//Hier wird die Variable paydaytime immer um eins addiert
if(sInfo[i][paydaytime] == 60)//Ist die Variable == 60 (60 Minuten), dann ist PayDay
{
sInfo[i][respektpunkte] ++;//Respektpunkte wird um eins addiert
sInfo[i][paydaytime] = 0;//paydaytime wird wieder auf 0 gesetzt, damit das ganze von vorne anfangen kann
rpunkte = GetPlayerScore(i) * 6;
sInfo[i][spielstunden] ++;
if(sInfo[i][jobgeld] > 0)
{
GivePlayerMoney(i,sInfo[i][jobgeld]);
sInfo[i][jobgeld] = 0;
}
if(sInfo[i][respektpunkte] == rpunkte)
{
//Das Level kann um eins erhöht werden => Level Up
sInfo[i][level] ++;//Das Level wird hier um eins addiert
SetPlayerScore(i,sInfo[i][level]);//Das Level wird neu gesetzt
}
}
}
return 1;
} -
Ja genau.
-
Okay, danke für deine Hilfe.
Wie lasse ich die Kills & Tote speichern & bei Stats auslesen? -
Genauso, wie mit den anderen Variablen auch.
Du fügst die beiden Variablen den Enum hinzu, und machst das bei OnPlayerDeath:
if(killerid != INVALID_PLAYER_ID)//Kein Selbstmord
{
sInfo[killerid][kills] ++;
sInfo[playerid][deaths] ++:
}
else //Selbstmord begangen => Nur die Tode werden addiert
{
sInfo[playerid][deaths] ++;
}
Speichern und Laden weiß du ja selbst. Wie du das ganze bei den Stats anzeigen lässt, solltest du auch wissen. Wenn nicht, dann zeige ich dir das nochmal. -
Genauso, wie mit den anderen Variablen auch.
Du fügst die beiden Variablen den Enum hinzu, und machst das bei OnPlayerDeath:
if(killerid != INVALID_PLAYER_ID)//Kein Selbstmord
{
sInfo[killerid][kills] ++;
sInfo[playerid][deaths] ++:
}
else //Selbstmord begangen => Nur die Tode werden addiert
{
sInfo[playerid][deaths] ++;
}
Speichern und Laden weiß du ja selbst. Wie du das ganze bei den Stats anzeigen lässt, solltest du auch wissen. Wenn nicht, dann zeige ich dir das nochmal.Ist das so richtig? oder habe ich da was mit GetPlayerScore falsch gemacht oder an sich?
ocmd:stats(playerid)
{
if(sInfo[playerid][eingeloggt] == 0)return SendClientMessage(playerid,COLOR_RED,"Du bist nicht Eingeloggt");
new string[500] ="{00FFD2} [Allgemeines] \n\n";
format(string,sizeof string,"%sName: {FFC800}%s\n {00FFD2}Level: {FFC800}%i\n {00FFD2}Geld: {FFC800}%i\n{00FFD2}Respektpunkte: {FFC800}%d/%d\nSpielstunden: %i\nKills: %i\nTode: %i",string,
SpielerName(playerid),sInfo[playerid][level],GetPlayerMoney(playerid),sInfo[playerid][respektpunkte],GetPlayerScore(playerid)*6,sInfo[playerid][spielstunden],sInfo[playerid][kills],sInfo[playerid][deaths]);
ShowPlayerDialog(playerid,DIALOG_STATS,DIALOG_STYLE_MSGBOX,"Statistik",string,"Okay","");
return 1;
} -
-
Passt so.
-
Hast du Skype oder so? Damit der Thread nicht so lange geht? @Mencent:
Ich habe noch eine Gehaltschecknumemr eingebaut. Sprich beim ersten Payday: Nummer 1, beim zweiten Nummer 2. Ist das dann so richtig?
public PayDayTimer()
{
new rpunkte;//Hier wird eine Variable erstellt, um die Respektpunkte mit dem Level zu berechnen
new string[128]; //Für die Nachricht des Paydays
//Wir gehen eine Schleife durch alle Spieler durch
for(new i;i<MAX_PLAYERS;i++)
{
//Hier werden die Spieler "aussortiert" bzw. übersprungen, die entweder nicht mit dem Server verbunden, ein NPC oder nicht eingeloggt sind
if(!IsPlayerConnected(i) || IsPlayerNPC(i) || sInfo[i][eingeloggt] == 0)continue;
sInfo[i][paydaytime] ++;//Hier wird die Variable paydaytime immer um eins addiert
if(sInfo[i][paydaytime] == 60)//Ist die Variable == 60 (60 Minuten), dann ist PayDay
{
sInfo[i][respektpunkte] ++;//Respektpunkte wird um eins addiert
sInfo[i][paydaytime] = 0;//paydaytime wird wieder auf 0 gesetzt, damit das ganze von vorne anfangen kann
rpunkte = GetPlayerScore(i) * 6;
sInfo[i][spielstunden] ++;
sInfo[i][gehaltschecknummer] ++;
format(string,sizeof string,"{FFFFFF}=========*{F5FF00}Gehaltscheck{FFFFFF}*==========");
format(string,sizeof string,"Du hast einen Gehaltscheck von deinem Chef bekommen.");
format(string,sizeof string,"Respektpunkte:{05D900} +1 || Spielstunden:{05D900} +1 || Aktuelles Level:{05D900} %i",sInfo[i][level]);
SendClientMessage(i,COLOR_WHITE,string);
if(sInfo[i][jobgeld] > 0)
{
format(string,sizeof string,"Verdientes Geld:{05D900} %i || Gehaltschecknummer:{05D900} %i",sInfo[i][jobgeld],sInfo[i][gehaltschecknummer]);
SendClientMessage(i, COLOR_WHITE,string);
GivePlayerMoney(i,sInfo[i][jobgeld]);
sInfo[i][jobgeld] = 0;
}
if(sInfo[i][respektpunkte] == rpunkte)
{
//Das Level kann um eins erhöht werden => Level Up
sInfo[i][level] ++;//Das Level wird hier um eins addiert
SetPlayerScore(i,sInfo[i][level]);//Das Level wird neu gesetzt
}
}
}
return 1;
} -
Ja, ist korrekt so.
Dafür ist die Scripting Base da.
-
Der Timer hat ja 60000 Milliseconds. Ich bin eine Minute aufm Server und hab in der Db bei paydaytime ne 24 stehen und bei /stats unter Respektpunkte 0/300
-
Erst wenn du bei paydaytime auf 60 kommst bekommst du einen PayDay, und damit einen Respektpunkt. Das heißt nach 60 Minuten.
-
Erst wenn du bei paydaytime auf 60 kommst bekommst du einen PayDay, und damit einen Respektpunkt. Das heißt nach 60 Minuten.
Wieso steht bei mir unter /stats 0/300 Respektpunkten?
@Mencent:
Jeffry: -
Entweder du hast noch keinen bekommen, oder du hast es fehlerhaft formatiert (mit format).
-
Entweder du hast noch keinen bekommen, oder du hast es fehlerhaft formatiert (mit format).
Ich will ja haben das er für Level 2 6 Respektpunkte brauch, für Level 3 12 Respektpunkte brauch also immer 6 mehr. Und wenn er die erreichten Respektpunkte hat z.b für Level 2 6 respektpunkte hat -> Level 2 und Rp wieder auf 0 und dann brauch er 12 etc
enum playerInfo{
eingeloggt, //Eingeloggt variable
level, //Spielerlevel
db_id, //Datenbank ID
alevel, //Adminlevel
fraktion, //Fraktion eines Spielers
rang, //fraktionsrang
spawnchange, //Deaktiviert, aber benutzbar
perso, //Personalausweis
job, //Job eines Spielers
busskill, //Bus EXP eines Spielers
busskilllevel, //Buslevel eines Spielers
pilotskill, //Pilot EXP eines Spielers
pilotskilllevel, //Pilotlevel eines Spielers
pRadio, //Radio variable
pSkin, //Skin des Spielers
paydaytime,
respektpunkte,
jobgeld,
spielstunden,
kills,
deaths,
gehaltschecknummer
}
public OnGameModeInit()
{
SetTimer("PayDayTimer",60000,1);//60000
}
ocmd:stats(playerid)
{
if(sInfo[playerid][eingeloggt] == 0)return SendClientMessage(playerid,COLOR_RED,"Du bist nicht Eingeloggt");
new string[500] ="{00FFD2} [Allgemeines] \n\n";
format(string,sizeof string,"%sName: {FFC800}%s\n {00FFD2}Level: {FFC800}%i\n {00FFD2}Geld: {FFC800}%i\n{00FFD2}Respektpunkte: {FFC800}%d/%d\nPayDay: %i\nSpielstunden: %i\nKills: %i\nTode: %i",string,
SpielerName(playerid),sInfo[playerid][level],GetPlayerMoney(playerid),sInfo[playerid][respektpunkte],GetPlayerScore(playerid)*6,sInfo[playerid][paydaytime],sInfo[playerid][spielstunden],sInfo[playerid][kills],sInfo[playerid][deaths]);
ShowPlayerDialog(playerid,DIALOG_STATS,DIALOG_STYLE_MSGBOX,"Statistik",string,"Okay","");
return 1;
}
public PayDayTimer()
{
new rpunkte;//Hier wird eine Variable erstellt, um die Respektpunkte mit dem Level zu berechnen
new string[128],string2[128],string3[128],string4[128],string5[128]; //Für die Nachricht des Paydays
//Wir gehen eine Schleife durch alle Spieler durch
for(new i;i<MAX_PLAYERS;i++)
{
//Hier werden die Spieler "aussortiert" bzw. übersprungen, die entweder nicht mit dem Server verbunden, ein NPC oder nicht eingeloggt sind
if(!IsPlayerConnected(i) || IsPlayerNPC(i) || sInfo[i][eingeloggt] == 0)continue;
sInfo[i][paydaytime] ++;//Hier wird die Variable paydaytime immer um eins addiert
if(sInfo[i][paydaytime] == 60)//Ist die Variable == 60 (60 Minuten), dann ist PayDay
{
format(string,sizeof string,"{FFFFFF}=========*{F5FF00}Gehaltscheck{FFFFFF}*==========");
SendClientMessage(i,COLOR_WHITE,string);
format(string2,sizeof string2,"Du hast einen Gehaltscheck von deinem Chef bekommen.");
SendClientMessage(i,COLOR_WHITE,string2);
format(string3,sizeof string3,"Respektpunkte:{05D900} +1 || Spielstunden:{05D900} +1 || Aktuelles Level:{05D900} %i",sInfo[i][level]);
SendClientMessage(i,COLOR_WHITE,string3);
sInfo[i][respektpunkte] ++;//Respektpunkte wird um eins addiert
sInfo[i][paydaytime] = 0;//paydaytime wird wieder auf 0 gesetzt, damit das ganze von vorne anfangen kann
rpunkte = GetPlayerScore(i) * 6;
sInfo[i][spielstunden] ++;
sInfo[i][gehaltschecknummer] ++;
if(sInfo[i][jobgeld] > 0)
{
format(string4,sizeof string4,"Verdientes Geld:{05D900} %i$ || Gehaltschecknummer:{05D900} %i",sInfo[i][jobgeld],sInfo[i][gehaltschecknummer]);
SendClientMessage(i, COLOR_WHITE,string4);
GivePlayerMoney(i,sInfo[i][jobgeld]);
sInfo[i][jobgeld] = 0;
}
if(sInfo[i][jobgeld] < 1 || sInfo[i][jobgeld] == 0)
{
format(string5,sizeof string5,"Arbeitslosengeld:{05D900} 400$ || Gehaltschecknummer:{05D900} %i",sInfo[i][gehaltschecknummer]);
SendClientMessage(i, COLOR_WHITE,string5);
GivePlayerMoney(i,400);
}
if(sInfo[i][respektpunkte] == rpunkte)
{
//Das Level kann um eins erhöht werden => Level Up
sInfo[i][level] ++;//Das Level wird hier um eins addiert
SetPlayerScore(i,sInfo[i][level]);//Das Level wird neu gesetzt
}
}
}
return 1;
} -
ocmd:stats(playerid)
{
if(sInfo[playerid][eingeloggt] == 0)return SendClientMessage(playerid,COLOR_RED,"Du bist nicht Eingeloggt");
new string[500] ="{00FFD2} [Allgemeines] \n\n";
format(string,sizeof string,"%sName: {FFC800}%s\n {00FFD2}Level: {FFC800}%i\n {00FFD2}Geld: {FFC800}%i\n{00FFD2}Respektpunkte: {FFC800}%d/%d\nPayDay: %i\nSpielstunden: %i\nKills: %i\nTode: %i",string,
SpielerName(playerid),sInfo[playerid][level],GetPlayerMoney(playerid),sInfo[playerid][respektpunkte],sInfo[playerid][level]*6,sInfo[playerid][paydaytime],sInfo[playerid][spielstunden],sInfo[playerid][kills],sInfo[playerid][deaths]);
ShowPlayerDialog(playerid,DIALOG_STATS,DIALOG_STYLE_MSGBOX,"Statistik",string,"Okay","");
return 1;
}public PayDayTimer()
{
new rpunkte;//Hier wird eine Variable erstellt, um die Respektpunkte mit dem Level zu berechnen
new string[145]; //Für die Nachricht des Paydays
//Wir gehen eine Schleife durch alle Spieler durch
for(new i;i<MAX_PLAYERS;i++)
{
//Hier werden die Spieler "aussortiert" bzw. übersprungen, die entweder nicht mit dem Server verbunden, ein NPC oder nicht eingeloggt sind
if(!IsPlayerConnected(i) || IsPlayerNPC(i) || sInfo[i][eingeloggt] == 0)continue;
sInfo[i][paydaytime] ++;//Hier wird die Variable paydaytime immer um eins addiert
if(sInfo[i][paydaytime] >= 60)//Ist die Variable == 60 (60 Minuten), dann ist PayDay
{
format(string,sizeof string,"{FFFFFF}=========*{F5FF00}Gehaltscheck{FFFFFF}*==========");
SendClientMessage(i,COLOR_WHITE,string);
format(string,sizeof string,"Du hast einen Gehaltscheck von deinem Chef bekommen.");
SendClientMessage(i,COLOR_WHITE,string);
format(string,sizeof string,"Respektpunkte:{05D900} +1 || Spielstunden:{05D900} +1 || Aktuelles Level:{05D900} %i",sInfo[i][level]);
SendClientMessage(i,COLOR_WHITE,string);
sInfo[i][respektpunkte] ++;//Respektpunkte wird um eins addiert
sInfo[i][paydaytime] = 0;//paydaytime wird wieder auf 0 gesetzt, damit das ganze von vorne anfangen kann
rpunkte = sInfo[i][level] * 6;
sInfo[i][spielstunden] ++;
sInfo[i][gehaltschecknummer] ++;
if(sInfo[i][jobgeld] > 0)
{
format(string,sizeof string,"Verdientes Geld:{05D900} %i$ || Gehaltschecknummer:{05D900} %i",sInfo[i][jobgeld],sInfo[i][gehaltschecknummer]);
SendClientMessage(i, COLOR_WHITE,string);
GivePlayerMoney(i,sInfo[i][jobgeld]);
sInfo[i][jobgeld] = 0;
}
if(sInfo[i][jobgeld] < 1 || sInfo[i][jobgeld] == 0)
{
format(string,sizeof string,"Arbeitslosengeld:{05D900} 400$ || Gehaltschecknummer:{05D900} %i",sInfo[i][gehaltschecknummer]);
SendClientMessage(i, COLOR_WHITE,string);
GivePlayerMoney(i,400);
}
if(sInfo[i][respektpunkte] == rpunkte)
{
//Das Level kann um eins erhöht werden => Level Up
sInfo[i][level] ++;//Das Level wird hier um eins addiert
SetPlayerScore(i,sInfo[i][level]);//Das Level wird neu gesetzt
sInfo[i][respektpunkte] = 0;
}
}
}
return 1;
}Versuche es so.
Beachte aber, dass du 60 Minuten warten musst, bis du einen PayDay bekommst, eben bis paydaytime auf 60 ist. -