[Hilfe] Wie zähle ich die Spielminuten eines Spielers?

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
  • Hallo Leute,


    ich möchte in den Statistiken meiner Spieler die Spielzeit in Minuten seit des
    Logins und die Spielzeit in Minuten seit des Registrierens anzeigen lassen.


    Ich habe bereits nach Tutorials gesucht, aber keine gefunden.
    Es wäre sehr hilfreich, wenn mir das jemand erklären
    oder eine Anleitung geben könnte wie sowas geht.


    Aber bitte kein C&P, da ich dabei auch etwas lernen möchte! ;)




    Mit freundlichen Grüßen
    AlphaGen

    DIVIDE ET IMPERA

  • nen Timer erstellen der alle 60 Sekunden einen Wert um 1 Höher setzt

  • Du erstellst einen timer der 60 Sekunden läuft


    dazu einen Public
    wo du das macht:


    SpielerInfo[playerid][pSpielminuten]+=1;

  • Erst erstellst du in deinem Login System die Spielminuten.
    Dann wenn sich ein Spieler eingeloggt hat : SetTimer("minuten", 1000, false);.
    Dann kommt forward minuten();
    Dann public minuten()
    { Spieler[playerid][Spielminuten] += 1;
    return 1;
    }


  • Ich wusste garnicht, das eine Minute 1000 Millisekunden lang ist.
    Was bringt ihm Copy & Paste Code, er lernt doch eh nichts draus.
    Außerdem sollte man noch überprüfen, ob der Spieler wirklich online ist, da Timer nicht sofort disposed werden.


    #Brotfischbaron


    In schā'a llāh

  • So, ich habe gerade folgendes geschrieben.
    Seht es euch bitte an, ich bin mir nämlich nicht so wirklich sicher ob es richtig ist, funktionieren tut es aber eig.


    Hier ist mein Werk:



    enum Spielerdaten
    {
    Loginminuten, //Spielzeit seit dem Login.
    Gesammtminuten //Spielzeit seit dem Registrieren.
    }



    public OnPlayerConnect(playerid)
    {
    SetTimer("minuten", 60000, true); /läuft 60sek, damit er sich endlos wiederholt hab ich ihn auf "true" gestellt.
    return 1;
    }



    forward minuten(playerid);
    public minuten(playerid)
    {
    if(IsPlayerConnected(playerid))
    {
    sSpieler[playerid][Loginminuten] += 1; // Es wird 1Min zu der Loginzeit gezählt.
    sSpieler[playerid][Gesammtminuten] += 1; // Es wird 1Min zu der Gesammtzeit gezählt.
    new Playerdatei[64];
    new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid,name,sizeof(name));
    format(Playerdatei,sizeof(Playerdatei),"/Accounts/%s.ini",name);
    dini_IntSet(Playerdatei,"Loginminuten",sSpieler[playerid][Loginminuten]);
    dini_IntSet(Playerdatei,"Gesammtminuten",sSpieler[playerid][Gesammtminuten]);
    //Damit das ganze auch direkt in der Spielerdatei geschrieben wird und von zb. dem Statistikbefehl ausgelesen werden kann.
    }
    return 1;
    }






    public OnPlayerDisconnect(playerid, reason)
    {
    SpielerSpeichern(playerid);
    new Playerdatei[64];
    new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid,name,sizeof(name));
    format(Playerdatei,sizeof(Playerdatei),"/Accounts/%s.ini",name);
    dini_IntSet(Playerdatei,"Loginminuten",0);
    //Die Minuten seit des Logins werden beim disconneten wieder auf 0 gesetzt.
    return 1;


    }








    stock Register(playerid,key[])
    {
    new Playerdatei[64];
    new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid,name,sizeof(name));
    format(Playerdatei,sizeof(Playerdatei),"/Accounts/%s.ini",name);
    dini_Create(Playerdatei);
    dini_Set(Playerdatei,"Passwort",key);
    SendClientMessage(playerid,BLAU,"Erfolgreich registriert.");
    SetPlayerScore(playerid,0);
    dini_IntSet(Playerdatei,"Loginminuten",0); //Erstellt den Speicherort für die Spielzeit seit des Logins.
    dini_IntSet(Playerdatei,"Gesammtminuten",0); //Erstellt den Speicherort für die Spielzeit seit des Registrierens.
    SetPVarInt(playerid,"Eingeloggt",1);
    return 1;
    }








    stock AccountLaden(playerid)
    {
    new Playerdatei[64];
    new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid,name,sizeof(name));
    format(Playerdatei,sizeof(Playerdatei),"/Accounts/%s.ini",name);
    sSpieler[playerid][Loginminuten] = dini_Int(Playerdatei,"Loginminuten"); //Läd die Spielzeit seit des Logins immer wieder mit 0 und wird vom Timer jede Minute mit 1 addiert.
    sSpieler[playerid][Gesammtminuten] = dini_Int(Playerdatei,"Gesammtminuten"); //Läd die Spielzeit seit des Registrierens.
    SetPVarInt(playerid,"Eingeloggt",1);
    return 1;
    }







    stock SpielerSpeichern(playerid)
    {
    if(GetPVarInt(playerid,"Eingeloggt") == 1)
    {
    new Playerdatei[64];
    new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid,name,sizeof(name));
    format(Playerdatei,sizeof(Playerdatei),"/Accounts/%s.ini",name);
    dini_IntSet(Playerdatei,"Loginminuten",sSpieler[playerid][Loginminuten]); //Speichert die Spielzeit seit des Logins. (wird aber eh beim Disconneten immer auf 0 gesetzt..)
    dini_IntSet(Playerdatei,"Gesammtminuten",sSpieler[playerid][Gesammtminuten]); //Speichert die Spielzeit seit des Registrierens.
    }
    //Gehört hier nicht eig. ein return 1; hin?
    }




    DIVIDE ET IMPERA

    Einmal editiert, zuletzt von [GSD]AlphaGen ()

  • nen Timer erstellen der alle 60 Sekunden einen Wert um 1 Höher setzt


    Autsch.. Ich hoffe nicht das du das wirklich tun willst...
    Benutze lieber Timestamps..
    http://forum.sa-mp.com/showthread.php?t=254915


    Es bieten sich einige Vorteile draus. Zumal du bei deiner Verwendung gar kein Timer brauchst..
    Legt einfach bei der Registrierung einen an und bei jedem Login einen.
    Dann wenn du diese Verwenden willst kannst du einfach dir den Aktuellen holen und die bereits gespeicherten damit vergleichen.

    Mit freundlichen Grüßen
    eXchange


    Bitte keine Script/Supportanfragen via PN!!!
    (Ausnahme: Scripten gegen Bezahlung!)

  • Welche Vorteile bietet das denn genau?
    Warum genau ist es besser?
    PS: Mein Englisch ist nicht gerade gut... ^^

    DIVIDE ET IMPERA

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen