Spielstunden als Score

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
  • Irgendwie bekomme ich das grad nicht so ganz hin, weil ich mit der Syntax nicht so zurechtkomme gerade.


    Ich habe einen Public und einen Timer. Dieser Timer soll 60 Minuten laufen und danach den Spielerscore um 1 erhöhen (Das was man im Tabmenü sieht), sprich die Spielstunden sollen dort angezeigt werden.


    Kann mir da jemand beim Public helfen?


    //E: Später soll das ganze natürlich auch in Dini gespeichert werden.

    "Dem wird befohlen, der sich nicht selbst gehorchen kann" - Friedrich Nietzsche

  • Du musst es entweder in einem enum oder Globla speichern.
    Global müsste das so aussehen:
    new Spielstunden[MAX_PLAYERS];
    Dann in deinem Public:
    Spielstunden[playerid] += 1;
    dann musste du beim Score setzen das reinmachen:
    SetPlayerScore(playerid,Spielstunden[playerid]);
    So sollte es gehen falls es nicht geh bitte erneut melden.
    mfg


    Bewerte mich und meine Transaktionen als Mittelsmann

  • Ich teste es jetzt schonmal danke, kannst du mir noch genau sagen warum += und nicht ++ ? Kenne das gar nicht so :D


    //E: Geht nicht, der Score wird nicht geupdated, trotzdem der Timer auf 1000ms gestellt ist.


    Hier mal die Codes:


    Forward:


    forward Score(playerid);


    Timer unter OnGameModeInit:


    SetTimer("Score",1000,1);


    Public:


    public Score(playerid)
    {
    Spielstunden[playerid] += 1;
    SetPlayerScore(playerid,Spielstunden[playerid]);
    return 1;
    }

    "Dem wird befohlen, der sich nicht selbst gehorchen kann" - Friedrich Nietzsche

    Einmal editiert, zuletzt von Addickted ()

  • Spielstunden[playerid] += Varbiable; Du gibst einen bestimmten Wert also eine bestimmte variable die du definieren musst durch eine Zahl.
    Spielstunden[playerid] -= Variable; Du nimmst von den Spielstunden einen bestimmten Wert weg du musst nactürlich wie oben die Variable durch eine Zahl ersetztn.


    Für abfragen mit if also:
    if(Abfrage siehe unten)
    {
    //Was passieren soll
    ]
    Spielstunden[playerid] == Variable; Dies überprüft ob Spielstunden mit der Variable übereinstimmt wie immer muss die Variable definiert werden.
    Spielstunden[playerid] = Variable; Dies setzt Spielstunden auf die Variable wie immer muss die Variable definiert werden.
    Spielstunden[playerid] >= Variable;Du überprüfst nun ob die Variable Spielstunden größer ist als die Variable.Wie immer muss die Variable definiert werden.
    Spielstunden[playerid] < Variable;So kannst du überprüfen ob die variable Spielstunden kleiner ist als die Variable.Wie immer muss die Variable definiert werden.


    Falls es noch fragen gibt bitte melden.
    mfg


    //edit 1Sekunde=1000
    1Minute=600000 Milisekunden
    1Stunde=3600000 Milisekunden
    mfg


    Bewerte mich und meine Transaktionen als Mittelsmann

  • Ich weiss das das eine Sekunde war, sollte nur zum testen dienen ^^ Dennoch wird ja gar nicht erst der Score aktualisiert. Jemand von euch beiden eine Ahnung?

    "Dem wird befohlen, der sich nicht selbst gehorchen kann" - Friedrich Nietzsche

  • Es scheint egal zu sein, ob die Variable nun den Wert 0 hat oder nicht. Der Timer geht insgesamt nicht und ich weiss nicht wo das Problem liegen könnte.

    "Dem wird befohlen, der sich nicht selbst gehorchen kann" - Friedrich Nietzsche

  • Ich sobald der GM lädt, aber der Timer ist auf Wiederholung eingestellt, also sollte ich ja was davon mitbekommen. Kann man einen Timer irgendwie auslesen lassen bei welcher Sekunde er grad ist und diese sendet in einer SendClientMessage oder via printf? Wüsste sonst grad keine Lösung.

    "Dem wird befohlen, der sich nicht selbst gehorchen kann" - Friedrich Nietzsche

  • Das klappt nun mit dem Timer, allerdings ist der Timer extrem schnell. Trotzdem ich ihn auf eine Stunde nun gestellt habe, läuft er so schnell, dass mein Score beim Spawn schon 451 betrug.

    "Dem wird befohlen, der sich nicht selbst gehorchen kann" - Friedrich Nietzsche

  • Dann setze den Intervall auf 60000.


    Ich habs sogar noch höher eingestellt und es geht nicht. Ich habe das ganze in die Userdatei schreiben lassen, da stand eben ein Wert von 451 drin. Das haut nicht ganz hin.


    //E: Kp warum es eben auf 451 stand, aber der Timer scheint nun richtig zu laufen. Nun meine letzte Frage und zwar mal angenommen der Timer zählt seine Millisekunden und irgendwann beendet eine Person das Spiel. Wie kann ich an der Stelle des Disconnects, die Zeit Zwischenspeichern in Dini. Also ich weiss zwar wie man speichert, aber ich weiss immernoch nicht wie ich den Timer auslesen lassen könnte. Ich hoffe es versteht jemand was ich meine :D

    "Dem wird befohlen, der sich nicht selbst gehorchen kann" - Friedrich Nietzsche

    Einmal editiert, zuletzt von Addickted ()

  • Du erstellst in deinem enum eine Variable nehmen wir SS(SpielerStunden)
    enum Spieler_Info
    {
    SS
    }
    new pInfo[MAX_PLAYERS][Spieler_Info];
    Wenn er Connecete musst du es halt laden:
    pInfo[playerid][SS] =dini_Int(save,"Spielstunden");
    Wenn er das Spiel verlässt Speichern:
    dini_IntSet(save,"Spielstunden",pInfo[playerid][SS]);
    Und dann halt im Timer:
    pInfo[playerid][SS] +=1;
    mfg


    Bewerte mich und meine Transaktionen als Mittelsmann

  • Und dadurch würde er die gesammte Anzahl an Millisekunden speichern bei der er grad war wo der den Server verlassen hat und setzt es dann auch entsprechend fort?

    "Dem wird befohlen, der sich nicht selbst gehorchen kann" - Friedrich Nietzsche

  • So wird halt immer die SS gespeichert.
    Da der Timer ja jeder Minute startet wird 1 hinziugefügt.
    Und beim verlassen werden halt die SS also die Spielstunden gespeichert.
    mfg


    Bewerte mich und meine Transaktionen als Mittelsmann

  • Der Timer soll jetzt eine Stunde durchgehend laufen ^^ Daher wird erst dann ne 1 dran gehängt. Würde er vorher das Spiel verlassen, wäre die Zeit wieder weg. :)

    "Dem wird befohlen, der sich nicht selbst gehorchen kann" - Friedrich Nietzsche