Spieler Zeit speichern lasse, auch bei Offliene

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 Community,


    Ich habe mir jetz ein Perso system gemacht, also das mann sich personalausweis in der Stadthalle hollen kann,
    das wird bei mir so gemacht:


    if(PersoWurdeBestellt[playerid] == 0) {
    SendClientMessage(playerid,COLOR_SPECIALBLUE,"Sekretärin: {FFFFFF}Ihr Personalausweis wird nun fertiggestellt, bitte kommen sie in 10 minuten wieder.");
    PersoWurdeBestellt[playerid] = 1;
    SetTimerEx("PersoZeit",60000,0,"u",playerid);
    TogglePlayerControllable(playerid,1);
    }


    Soo nun ist mein Problemmmmm, wenn ich Offliene gehe, das dieser Timer dann verschfindet...und wenn ich on komme und 1 std warten kann, passiert nichts..


    Nun will ich das so machen, wenn man den Perso beantragt, das die Zeit läuft während der Spielt egal wie oft der sich ausgeloggt hat.


    MfG

  • Das kannst du machen, indem du einen Timer mit einer Sekunde erstellst, und bei diesem jedes mal dem Spieler von einer variable zeit eine Sekunde abziehst.


    OnGameModeInit
    SetTimer("PersoTimer", 888, 1); //888 ist etwas genauer eine Sekunde als 1000.


    Unten im Code:
    forward PersoTimer();
    public PersoTimer()
    {
    for(new i=0; i<MAX_PLAYERS;i++)
    {
    if(IsPlayerConnected(i) && PersoWurdeBestellt[i]==1)
    {
    WarteZeit[i]--;
    if(WarteZeit[i] < 1)
    {
    PersoWurdeBestellt[i]=0; //und noch ne Nachricht, dass der Perso geholt werden kann.
    }
    }
    }
    return 1;
    }


    Im Command: Timer weg machen und


    PersoWurdeBestellt[playerid] = 1;
    WarteZeit[playerid]=3600; //1 Stunde (in Sekunden)


    Beide Werte speicherst du dem Spieler in seine Datei/Datenbank wenn er den Server verlässt.

  • Hei,
    Danke dir, soweit habe ich es verstanden, nun habe ich ein kleines problem, wie lasse ich den Spieler abspeichern, also ich meine die Daten?
    Tut mir leid bin gerade ma 2-3 RICHTIG aktiv in der PAWN szene kenne mich da nicht so gut aus

  • Hast du denn kein Statistiken System mit dem dein Server die Spieler-Statistiken speichert?
    Wenn doch, dann solltest du dir dort abschauen wie es dort gemacht wurde. Am besten wäre es natürlich, wenn du die Sache selbst gemacht hättest.


    Einfach mal nachschauen wie z.B. Geld gespeichert wird. Das machst du dann genauso mit den beiden Variablen, jeweils.

  • mysql_SetInt("accounts", "Geld", SpielerInfo[playerid][pGeld], "Name", SpielerInfo[playerid][pSpieler]);


    Ich habs so, doch habs Selber gemacht, schreibe zurzeit ein Selfmade, kucke nebenbei Tutorials usw.
    Muss das Genau so abgespeichert werden?...

  • Ich habe ein kleines problem, also ich habs jetz so gemacht,


    Wo man das bei Menu auswählt.


    public OnPlayerSelectedMenuRow(playerid, row)
    {
    new Menu:SpielerInMenu = GetPlayerMenu(playerid);
    if(SpielerInMenu == SHMENU) {
    switch(row) {
    case 0: {
    if(SpielerInfo[playerid][pPersonalausweis] == 0) {
    if(SpielerInfo[playerid][pPersoBestellt] == 1) {
    SendClientMessage(playerid,COLOR_SPECIALBLUE,"Sekretärin: {FFFFFF}Ihr Personalausweis ist noch nicht fertig.");
    TogglePlayerControllable(playerid,1);
    }
    if(SpielerInfo[playerid][pPersoBestellt] == 0) {
    SendClientMessage(playerid,COLOR_SPECIALBLUE,"Sekretärin: {FFFFFF}Ihr Personalausweis wird nun fertiggestellt, bitte kommen sie in 10 minuten wieder.");
    SpielerInfo[playerid][pPersoBestellt] = 2;
    SetTimerEx("PersoZeit",888,0,"u",playerid);
    SpielerInfo[playerid][pPersoVerbleibendeZeit] = 3600;
    TogglePlayerControllable(playerid,1);
    }
    if(SpielerInfo[playerid][pPersoBestellt] == 3) {
    SendClientMessage(playerid,COLOR_SPECIALBLUE,"Sekretärin: {FFFFFF}Bitte schön, hier ist euer Personalausweis.");
    SendClientMessage(playerid,COLOR_SPECIALBLUE,"Sekretärin: {FFFFFF}Mit /showperso können sie den Personalausweis anderen Spieler vorzeigen.");
    SpielerInfo[playerid][pPersonalausweis] = 1;
    TogglePlayerControllable(playerid,1);
    }
    }else {
    SendClientMessage(playerid,COLOR_SPECIALBLUE,"Sekretärin: {FFFFFF}Sie haben bereits einen Personalausweis.");
    TogglePlayerControllable(playerid,1);
    }
    TogglePlayerControllable(playerid,1);
    }
    }
    }
    TogglePlayerControllable(playerid,1);
    return 1;
    }


    Dann habe ich das hier bei LoadPlayer


    SpielerInfo[playerid][pPersoBestellt] = mysql_GetInt("accounts", "PersoBestellt", "Name", SpielerInfo[playerid][pSpieler]);
    SpielerInfo[playerid][pPersoVerbleibendeZeit] = mysql_GetInt("accounts", "PersoVerbleibendeZeit", "Name", SpielerInfo[playerid][pSpieler]);


    Dann habe ich das hier bei SavePlayer


    mysql_SetInt("accounts", "PersoBestellt", SpielerInfo[playerid][pPersoBestellt], "Name", SpielerInfo[playerid][pSpieler]);
    mysql_SetInt("accounts", "PersoVerbleibendeZeit", SpielerInfo[playerid][pPersoVerbleibendeZeit], "Name", SpielerInfo[playerid][pSpieler]);


    Und bei dem Timer habe ich das Drinne...


    public PersoZeit(playerid)
    {
    if(IsPlayerConnected(playerid) && SpielerInfo[playerid][pPersoBestellt] == 2) {
    SpielerInfo[playerid][pPersoVerbleibendeZeit] --;
    if(SpielerInfo[playerid][pPersoVerbleibendeZeit] < 1) {
    SendClientMessage(playerid,COLOR_LIGHTRED,"[___LOS SANTOS STADTHALLE___]");
    SendClientMessage(playerid,COLOR_SPECIALBLUE,"Dein Personalausweis ist fertig, du kannst den in der Stadthalle abhollen.");
    }
    }
    return 1;
    }


    Doch, wenn ich 10min warte kommt da keine Nachricht...wisst ihr villt warum das so ist?...

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Das kannst du machen, indem du einen Timer mit einer Sekunde erstellst, und bei diesem jedes mal dem Spieler von einer variable zeit eine Sekunde abziehst.


    OnGameModeInit
    SetTimer("PersoTimer", 888, 1); //888 ist etwas genauer eine Sekunde als 1000.


    Hmm, pro Sekunde wird bei SpielerInfo[playerid][pPersoVerbleibendeZeit] abgezogen also 1 sekunde, ...
    das ist doch richtig....

  • Nein, so:
    SetTimerEx("PersoZeit",600000,0,"d",playerid);
    So wird jedes mal für den Spieler "playerid" der Timer 10 Minuten laufen, wenn er sich einen Personalausweis kauft.
    Es wird aber nach den 10 Minuten nicht wiederholt, da es auf 0 / false steht.
    Würde es auf 1 / true stehen, würde es nach den 10 Minuten neu anfangen.

  • also ich habs jetz einwenig überarbeitet, aber wenn ich


    KillTimer(PersoZeit);


    mache bekomme ich Errors unzwar denn hier:


    C:\Users\Gta Server\Desktop\Neuer Ordner\SEHR WICHTIG\Selfmade\gamemodes\PureReallifeSelfMade©.pwn(4660) : error 076: syntax error in the expression, or invalid function call
    Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase



    1 Error.


    was hat der zu bedeuten?