Stats setzen sich bei Restart zurück

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
  • Wenn ich /restart eingebe setzen sich Stats wie Geld,Level etc. zurück. Hier der Befehl:
    ocmd:restart(playerid,params[])
    {
    if(pInfo[playerid][Adminlevel]<6) return SendClientMessage(playerid,Weiss,"Diesen Befehl gibt es nicht! Benutze '/help' oder '/sup'");
    SendClientMessageToAll(Weiss,"INFO: Der Server wird neu gestartet!");
    new query[128],iname[MAX_PLAYER_NAME],gametext[64];
    format(gametext,sizeof(gametext),"Server wird neu gestartet Bitte warten...");
    GameTextForAll(gametext,5,1);
    for(new i=0; i<MAX_PLAYERS; i++)
    {
    GetPlayerName(i,iname,sizeof(iname));
    format(query,sizeof(query),"UPDATE user SET banned='%d',adminlevel='%d',level='%d',money='%d',faction='%d',rank='%d',wanteds='%d' WHERE username='%s'",pInfo[i][Banned],pInfo[i][Adminlevel],pInfo[i][Level],GetPlayerMoney(i),pInfo[i][Fraktion],pInfo[i][Rang],pInfo[i][Wanteds],iname);
    mysql_function_query(dbhandle,query,false,"","");
    }
    SendRconCommand("gmx");
    return 1;
    }

    Eigentlich werden doch alle Spieler gespeichert vor dem GMX Command, doch das klappt hier irgendwie nicht? die Werte in pInfo werden übrigens nach dem Logindialog gefüllt:
    public PasswortAbfrage(playerid)
    {
    new num_fields,num_rows;
    cache_get_data(num_rows,num_fields,dbhandle);
    if(num_rows>0)
    {
    pInfo[playerid][Logged] = 1;
    pInfo[playerid][Level] = cache_get_field_content_int(0,"level",dbhandle);
    pInfo[playerid][Geschlecht] = cache_get_field_content_int(0,"sex",dbhandle);
    pInfo[playerid][Alter] = cache_get_field_content_int(0,"age",dbhandle);
    pInfo[playerid][Adminlevel] = cache_get_field_content_int(0,"adminlevel",dbhandle);
    pInfo[playerid][Geld] = cache_get_field_content_int(0,"money",dbhandle);
    pInfo[playerid][Fraktion] = cache_get_field_content_int(0,"faction",dbhandle);
    pInfo[playerid][Rang] = cache_get_field_content_int(0,"rank",dbhandle);
    pInfo[playerid][Wanteds] = cache_get_field_content_int(0,"wanteds",dbhandle);
    //Sterne
    if(pInfo[playerid][Wanteds] >=10 && pInfo[playerid][Wanteds]<20) SetPlayerWantedLevel(playerid,1);
    if(pInfo[playerid][Wanteds] >=20 && pInfo[playerid][Wanteds]<30) SetPlayerWantedLevel(playerid,2);
    if(pInfo[playerid][Wanteds] >=30 && pInfo[playerid][Wanteds]<40) SetPlayerWantedLevel(playerid,3);
    if(pInfo[playerid][Wanteds] >=40 && pInfo[playerid][Wanteds]<50) SetPlayerWantedLevel(playerid,4);
    if(pInfo[playerid][Wanteds] >=50 && pInfo[playerid][Wanteds]<69) SetPlayerWantedLevel(playerid,5);
    if(pInfo[playerid][Wanteds] ==69) SetPlayerWantedLevel(playerid,6);
    TextDrawShowForPlayer(playerid, Time), TextDrawShowForPlayer(playerid, Date);
    SetPlayerScore(playerid,pInfo[playerid][Level]);
    new altmoney = GetPlayerMoney(playerid);
    GivePlayerMoney(playerid,-altmoney);
    GivePlayerMoney(playerid,pInfo[playerid][Geld]);
    SetPVarInt(playerid,"Speichern",1);
    SetSpawnInfo(playerid,0,29,-1969.4128,137.6455,27.6875,91.5533,0,0,0,0,0,0);
    SpawnPlayer(playerid);
    }
    else
    {
    SetPVarInt(playerid,"badlogin",GetPVarInt(playerid,"badlogin")+1);
    if(GetPVarInt(playerid,"badlogin")<3)
    {
    SendClientMessage(playerid,Rot,"Dieses Passwort war falsch!");
    ShowPlayerDialog(playerid,DIALOG_LOGIN1,DIALOG_STYLE_PASSWORD,"Login","Dein Passwort:","OK","Abbrechen");
    }
    if(GetPVarInt(playerid,"badlogin") >=3)
    {
    SendClientMessage(playerid,Rot,"Du wurdest gekickt, weil du dein Passwort dreimal falsch eingegeben hast!");
    Kick(playerid);
    }
    }
    return 1;
    }

    Greetz

  • Pawn:
    Troll hoch 10!? Er benutzt einen Query, und warum erstellst du eine Variable und rechnest dann den Define +1 und speicherst dann irgeneine beliebdige id, z.b. Mein Server hat 500 Slots, es wird 501 gespeichert. Eventuell hat er nicht mal diesen Stock,l lass den Spam, bitte.


    Uppermost:
    Was sagt der Mysql Log? Frage am besten ab ob der Spieler connected ist und setze einen Timer, der den Server nach 5 Sekunden neustartet, damit der Server alle Spieler schafft.

  • for(new i=0; i<MAX_PLAYERS; i++)
    {
    GetPlayerName(i,iname,sizeof(iname));
    format(query,sizeof(query),"UPDATE user SET banned='%d',adminlevel='%d',level='%d',money='%d',faction='%d',rank='%d',wanteds='%d' WHERE username='%s'",pInfo[i][Banned],pInfo[i][Adminlevel],pInfo[i][Level],GetPlayerMoney(i),pInfo[i][Fraktion],pInfo[i][Rang],pInfo[i][Wanteds],iname);
    mysql_function_query(dbhandle,query,false,"","");
    }
    mysql_function_query(dbhandle,"Select 1;",true,"Finish","");
    return 1;


    forward Finish();
    public Finish()
    {
    SendRconCommand("gmx");
    }


    Das hat den Effekt, dass erst dann der Server neugestartet wird, wenn alle Daten gespeichert sind.
    Außerdem musst du in der Schleife abfragen ob der Spieler connected und eingeloggt ist.
    Erst dann sollte der Query losgesendet werden.

  • Zitat

    Uppermost:
    Was sagt der Mysql Log? Frage am besten ab ob der Spieler connected ist und setze einen Timer, der den Server nach 5 Sekunden neustartet, damit der Server alle Spieler schafft.

    Werde ich probieren, danke-

    Werde ich auch machen, falls der Timer nicht klappt
    Der Timer hat tatsächlich funktioniert, wäre nicht drauf gekommen^^ Danke

    Greetz

    Einmal editiert, zuletzt von Uppermost ()