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
  • Guten Abend, gute Nacht.
    Ich brauche Hilfe bei meinem Payday System.
    Ich möchte das wenn man 60 Minuten gespielt hat, einen Payday bekommt. Dort soll das jobgeld einem gegeben werden. Anstatt GiveplayerMoney beim Job muss ich den Wert dazu addieren.
    Ich brauche halt Hilfe da ich nicht weiß wie man ein Payday System schreibt. Ebenfalls soll man pro Payday einen "Respektpunkt" bekommen. Sollte man 6 haben soll man Level 2 werden, dann werden Sie wieder auf 0 gesetzt nach dem Levelup und man muss wieder 12 Paydays (12 Respektpunkte) haben damit man Level 3 wird etc.
    Die Respektpunkte sowie die Spielzeit soll gespeichert & ausgelesen werden.


    mfg,

  • Beitrag von Alexz ()

    Dieser Beitrag wurde gelöscht, Informationen über den Löschvorgang sind nicht verfügbar.

  • Hallo Peter Lustig, wie gehts dir denn?


    b2T:



    enum playerInfo{
    eingeloggt,
    level, //Spielerlevel
    db_id,
    alevel, //Adminlevel
    fraktion, //Fraktion eines Spielers
    rang, //fraktionsrang
    spawnchange, //Deaktiviert, aber benutzbar
    perso,
    job,
    busskill, //Bus EXP eines Spielers
    busskilllevel, //Buslevel eines Spielers
    pilotskill, //Pilot EXP eines Spielers
    pilotskilllevel, //Pilotlevel eines Spielers
    pRadio,
    pSkin
    }


    new sInfo[MAX_PLAYERS][playerInfo];



    public OnUserCheck(playerid) //Abfrage ob Registriert oder nicht
    {
    new num_rows,num_fields;
    cache_get_data(num_rows,num_fields,dbhandle);
    if(num_rows==0)//Nicht registriert
    {
    SetPlayerCameraPos(playerid, 320.0, 50.0, 170.0); //Kamera Position setzen
    SetPlayerCameraLookAt(playerid, 324.34, 54.122, 173.35); //Das Lookat der Kamera setzen
    ShowPlayerDialog(playerid,DIALOG_REGISTER,DIALOG_STYLE_INPUT,"Registrierung","Gib bitte dein gewünschtes Passwort an:","Okay","Abbrechen"); //Register Dialog anzeigen
    }
    else //Registriert
    {
    //Login
    SetPlayerCameraPos(playerid, 320.0, 50.0, 170.0); //Kamera Position setzen
    SetPlayerCameraLookAt(playerid, 324.34, 54.122, 173.35); //Das Lookat der Kamera setzen
    ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_PASSWORD,"Login","Gibt bitte dein Passwort ein:","Okay","Abbrechen"); //Login Dialog anzeigen
    }
    return 1;
    }



    savePlayer(playerid) //Spieler speichern Funktion
    {
    if(sInfo[playerid][eingeloggt]==0)return 1; //Wenn Spieler NICHT eingeloggt ist -> return 1; also nicht weitergehen.
    //Speichern Level,geld
    sInfo[playerid][pSkin] = GetPlayerSkin(playerid); //Hier wird in die Variable pSkin der Spielerskin "eingefügt"
    sInfo[playerid][level] = GetPlayerScore(playerid);
    new query[256]; //neuen query erstellen
    format(query,sizeof(query),"UPDATE user SET level = '%i', money = '%i', alevel = '%i', fraktion = '%i', rang = '%i', spawnchange = '%i', perso = '%i', job = '%i', busskill = '%i', busskilllevel = '%i', pilotskill = '%i', pilotskilllevel = '%i', pRadio = '%i', pSkin = '%i' WHERE id='%i'",
    sInfo[playerid][level],
    GetPlayerMoney(playerid),
    sInfo[playerid][alevel],
    sInfo[playerid][fraktion],
    sInfo[playerid][rang],
    sInfo[playerid][spawnchange],
    sInfo[playerid][perso],
    sInfo[playerid][job],
    sInfo[playerid][busskill],
    sInfo[playerid][busskilllevel],
    sInfo[playerid][pilotskill],
    sInfo[playerid][pilotskilllevel],
    sInfo[playerid][pRadio],
    sInfo[playerid][pSkin],
    sInfo[playerid][db_id]);
    mysql_function_query(dbhandle,query,false,"","");
    return 1;
    }



    public OnPasswordResponse(playerid) //Wenn Spieler sich eingeloggt hat
    {
    new num_fields,num_rows;
    cache_get_data(num_rows,num_fields,dbhandle);
    if(num_rows==1)
    {
    //Passwort richtig //Spieler laden
    sInfo[playerid][eingeloggt] = 1;
    sInfo[playerid][level] = cache_get_field_content_int(0,"level",dbhandle);
    SetPlayerScore(playerid,sInfo[playerid][level]);
    sInfo[playerid][db_id] = cache_get_field_content_int(0,"id",dbhandle);
    SetPlayerMoney(playerid,cache_get_field_content_int(0,"money",dbhandle));
    sInfo[playerid][alevel] = cache_get_field_content_int(0,"alevel",dbhandle);
    sInfo[playerid][fraktion] = cache_get_field_content_int(0,"fraktion",dbhandle);
    sInfo[playerid][rang] = cache_get_field_content_int(0,"rang",dbhandle);
    sInfo[playerid][spawnchange] = cache_get_field_content_int(0,"spawnchange",dbhandle);
    sInfo[playerid][perso] = cache_get_field_content_int(0,"perso",dbhandle);
    sInfo[playerid][job] = cache_get_field_content_int(0,"job",dbhandle);
    sInfo[playerid][busskill] = cache_get_field_content_int(0,"busskill",dbhandle);
    sInfo[playerid][busskilllevel] = cache_get_field_content_int(0,"busskilllevel",dbhandle);
    sInfo[playerid][pilotskill] = cache_get_field_content_int(0,"pilotskill",dbhandle);
    sInfo[playerid][pilotskilllevel] = cache_get_field_content_int(0,"pilotskilllevel",dbhandle);
    sInfo[playerid][pRadio] = cache_get_field_content_int(0,"pRadio",dbhandle);
    sInfo[playerid][pSkin] = cache_get_field_content_int(0,"pSkin",dbhandle);
    SetPlayerSkin(playerid,sInfo[playerid][pSkin]);
    loadSpielerAutos(playerid);
    SpawnPlayer(playerid);
    }
    else
    {
    //Passwort falsch
    SendClientMessage(playerid,COLOR_RED,"Das eingegebene Passwort ist falsch.");
    ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_PASSWORD,"Login","Gibt bitte dein Passwort ein:","Okay","Abbrechen");
    }
    return 1;
    }

  • Du startest bei OnGameModeInit einfach einen globalen Timer, mit dem Interval von 1 Minute = 60 Sekunden = 60000 Millisekunden.
    Im callback vom Timer gehst du mit einer Schleife durch alle Spieler hindurch, und setzt jeweils immer eine Variable, die du im Enum deklarieren kannst, um eins höher.
    Sollte diese Variable = 60 sein, kannst du dem Spieler das Geld usw. geben, und diese Variable wieder auf 0 zurücksetzen.
    Außerdem setzt du, wenn die Variable 60 war, jeweils eine neue variable um eins höher, was die Respektpunkte sind (kannst du ebenfalls im Enum deklarieren).


    Nun speicherst du diese beiden variablen noch mit ab, und lädst diese beim einloggen auch wieder.



    Bei deinem Enum musst du einfach eine neue variable einfügen, z.B. jobgeld. Wenn der Spieler mit dem Beruf fertig ist, addierst du zu der Variable einfach den Preis hinzu (das kannst du mit += machen).
    sInfo[playerid][jobgeld] += 500;
    So würden 500$ auf die jobgeld variable addiert werden. Beim payday gibst du dem Spieler dann den Wert von jobgeld als Geld und setzt gleichzeitig, nach GivePlayerMoney natürlich, die variable wieder auf 0.
    GivePlayerMoney(playerid,sInfo[playerid][jobgeld]);
    sInfo[playerid][jobgeld] = 0;

  • Hört sich jetzt so an, als wüsstest du immer noch nicht was du machen sollst bzw. wie das funktioniert. ^^
    Falls du Hilfe brauchst, dann sage nochmal bescheid, dann erkläre ich das anhand eines Beispiels. :klugs:

  • Klar. Die Erklärungen stehen dabei.
    //Das einfach in das Enum einfügen
    paydaytime,
    respektpunkte,
    jobgeld



    //Timer in OnGameModeInit rein
    SetTimer("PayDayTimer",60000,1);



    //Das ist das Callback für den Timer, einfach ganz nach unten in das Script einfügen
    forward 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;
    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;
    }

    Einmal editiert, zuletzt von AirM4X ()

  • Also so einfach einfügen & anpassen, okey.
    Nach der Registration ist er ja Level 1. Wie mache ich es das er für Level 2 , 6 Respektpunkte braucht, für Level 3 12 Respektpunkte etc?
    Und das dann noch in den Stats angezeigt wird: Respektpunkte: 2/6 z.b je nachdem?


    @Mencent:



    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",string,
    SpielerName(playerid),sInfo[playerid][level],GetPlayerMoney(playerid));
    ShowPlayerDialog(playerid,DIALOG_STATS,DIALOG_STYLE_MSGBOX,"Statistik",string,"Okay","");
    return 1;
    }


    Fehler bei public PayDayTimer:
    undefined Symbol: playerid
    if(!IsPlayerConnected(i) || IsPlayerNPC(i) || sInfo[playerid][eingeloggt] == 0)continue;

    Einmal editiert, zuletzt von justRevitox ()

  • Erstmal wegen dem Fehler:
    if(!IsPlayerConnected(i) || IsPlayerNPC(i) || sInfo[i][eingeloggt] == 0)continue;
    Das muss so, da habe ich ausversehen "playerid" eingetragen.


    Dann wegen dem Level und den Respektpunkten:
    rpunkte = GetPlayerScore(i) * 6;
    Hier rechne ich die benötigten Punkte aus. Level x 6
    Solltest du Level 3 sein, brauchst du für Level 4, 18 Punkte.


    In den Stats kannst du das ganz einfach so anzeigen lassen:
    format(string,sizeof string,"%sName: {FFC800}%s\n {00FFD2}Level: {FFC800}%i\n {00FFD2}Geld: {FFC800}%i\n{00FFD2}Respektpunkte: {FFC800}%d/%d",string,
    SpielerName(playerid),sInfo[playerid][level],GetPlayerMoney(playerid),sInfo[playerid][respektpunkte],GetPlayerScore(playerid)*6);


    Versuch das mal. ;)

  • Und so abspeichern und auslesen?

    savePlayer(playerid) //Spieler speichern Funktion
    {
    if(sInfo[playerid][eingeloggt]==0)return 1; //Wenn Spieler NICHT eingeloggt ist -> return 1; also nicht weitergehen.
    //Speichern Level,geld
    sInfo[playerid][pSkin] = GetPlayerSkin(playerid); //Hier wird in die Variable pSkin der Spielerskin "eingefügt"
    sInfo[playerid][level] = GetPlayerScore(playerid);
    new query[256]; //neuen query erstellen
    format(query,sizeof(query),"UPDATE user SET level = '%i', money = '%i', alevel = '%i', fraktion = '%i', rang = '%i', spawnchange = '%i', perso = '%i', job = '%i', busskill = '%i', busskilllevel = '%i', pilotskill = '%i', pilotskilllevel = '%i', pRadio = '%i', pSkin = '%i', paydaytime = '%i', respektpunkte = '%i', jobgeld = '%i' WHERE id='%i'",
    sInfo[playerid][level],
    GetPlayerMoney(playerid),
    sInfo[playerid][alevel],
    sInfo[playerid][fraktion],
    sInfo[playerid][rang],
    sInfo[playerid][spawnchange],
    sInfo[playerid][perso],
    sInfo[playerid][job],
    sInfo[playerid][busskill],
    sInfo[playerid][busskilllevel],
    sInfo[playerid][pilotskill],
    sInfo[playerid][pilotskilllevel],
    sInfo[playerid][pRadio],
    sInfo[playerid][pSkin],
    sInfo[playerid][paydaytime],
    sInfo[playerid][respektpunkte],
    sInfo[playerid][jobgeld],
    sInfo[playerid][db_id]);
    mysql_function_query(dbhandle,query,false,"","");
    return 1;
    }



    sInfo[playerid][paydaytime] = cache_get_field_content_int(0,"paydaytime",dbhandle);
    sInfo[playerid][respektpunkte] = cache_get_field_content_int(0,"respektpunkte",dbhandle);
    sInfo[playerid][jobgeld] = cache_get_field_content_int(0,"jobgeld",dbhandle);


    Und wie lasse ich die Spielzeit noch iwie speichern und auslesen in Stunden? :D