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;
}
Stats setzen sich bei Restart zurück
- Uppermost
- Geschlossen
- Erledigt
-
-
Spoiler anzeigen public OnGameModeExit()
{
for(new max_playerss = 0; max_players <MAX_PLAYERS; max_players ++)
{
saveplayer(max_players);
}
} -
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-Zitatfor(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.Werde ich auch machen, falls der Timer nicht klappt
Der Timer hat tatsächlich funktioniert, wäre nicht drauf gekommen^^ Danke -
Vergiss nicht bei Schleifen abzufragen ob der Spieler überhaupt eingeloggt oder verbunden ist.
Sonst sendest du viele unnötige Querys. -
Jap, wird abgefragt^^ Hattet ihr ja empfohlen vorhin
-
ja kann er
Pawn: Für was? Er kann auch komplett ohne Stocks arbeiten, es wird zwar mehr Code, trotzdem sollte man so kleine Querys einfach so speichern.
-
-
breadfish.de
Hat das Thema geschlossen.