Payday & Respektpunkt System

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
  • Du setzt einfach bei jedem PayDay wieder eine Variable hoch, und lässt diese dann auch abspeichern & laden.

  • 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;
    }

  • 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;
    }

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • 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;
    }

  • 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.