Nabend zusammen
Da ich ein Problem seit längeren habe, und da ich auch Sniper um Rat gebeten habe es mal nachzuschauen,
Fanden wir keinerlei lösungen zu den Problem was ich habe.
Bei mir ist das Problem, das sich die Werte von Spielern bei mehreren Spielern verschieben.
Das kann unterschiedlich sein ich mach mal ein paar beispiele
Spieler a komm 100 Minuten in den Knast Funktioniert
Spieler B Connectet und bekommt den Knastwert von Spieler A als Geld (nur als Beispiel)
Dann kommt es vor, das sich beim Speichern einfach mal die Werte um eine Spalte nach vorne Rücken
Sprich aus knastzeit wird dan Premium und so weiter.
Dies Problem tritt aber nur auf, wenn mehrere Spieler online sind und auch meist nach einen Savegame.
Ich geb euch mal die 3 Funktionen
Laden:
stock LoadPlayer(playerid,Key[])
{
new Data[1024],query[256];
format(query, 256, "SELECT * FROM `player` WHERE `Name` = '%s' AND `Passwort` = '%s'", PlayerInfo[playerid][Name],MD5_Hash(Key));
mysql_query(query, (-1), (0), SQL);
mysql_store_result(SQL);
if(mysql_num_rows(SQL)!=0)
{
mysql_free_result(SQL);
format(query, sizeof(query),"SELECT * FROM `player` WHERE `Name` = '%s'",PlayerInfo[playerid][Name]);
mysql_query(query, (-1), (0), SQL);
mysql_store_result(SQL);
while(mysql_fetch_row(Data, "|", SQL))
{
sscanf(Data, "p<|>ds[64]s[128]dddddddddddds[128]s[128]s[16]ddddddd",
PlayerInfo[playerid][Userid],PlayerInfo[playerid][Name],PlayerInfo[playerid][Passwort],PlayerInfo[playerid][Admin],PlayerInfo[playerid][Job],PlayerInfo[playerid][Team],PlayerInfo[playerid][Geld],PlayerInfo[playerid][Skin],
PlayerInfo[playerid][Level],PlayerInfo[playerid][Respekt],PlayerInfo[playerid][PayDay],PlayerInfo[playerid][PayDayTog],PlayerInfo[playerid][Rank],PlayerInfo[playerid][Leader],PlayerInfo[playerid][Banned],PlayerInfo[playerid][BanGrund],
PlayerInfo[playerid][BanAdmin],PlayerInfo[playerid][IP],PlayerInfo[playerid][Nummer],PlayerInfo[playerid][Safeban],PlayerInfo[playerid][Helm],PlayerInfo[playerid][Jobvertrag],PlayerInfo[playerid][Star],PlayerInfo[playerid][Igvip],
PlayerInfo[playerid][Jailtime]);
}
GivePlayerMoney(playerid,PlayerInfo[playerid][Geld]);
SetPlayerScore(playerid,PlayerInfo[playerid][Nummer]);
if(PlayerInfo[playerid][Safeban]!=0 && IsPlayerSafe(playerid)==0)
{
PlayerSafeJoin(playerid);
SendClientMessage(playerid,cRed,"Du wurdest von "AC_BOT_NAME" gekickt, da du Safe Gebannt bist und den Louncher nicht eingeschaltet hast.");
SendClientMessage(playerid,cRed,"Solltest du den Louncher bereits eingeschaltet haben, so starte den bitte neu und versuch dann wieder zu connecten.");
Kick(playerid);
}
if(IsPlayerSafe(playerid)==0)
{
format(query, sizeof(query), "{006100}[Join] %s hat den Server betreten.", PlayerInfo[playerid][Name]);
SendClientMessageToAll(cGreen, query);
}
else
{
format(query, sizeof(query), "{006100}[{FF8000}Safe{006100}-Join] %s hat den Server betreten.", PlayerInfo[playerid][Name]);
SendClientMessageToAll(cGreen, query);
PlayerSafeJoin(playerid);
}
SetPVarInt(playerid,"loggedin",1);
SetPVarInt(playerid,"played",1);
SpawnPlayer(playerid);
mysql_free_result(SQL);
return 1;
}
else
{
mysql_free_result(SQL);
format(query, 128, "{FFFFFF}Fehler{FF6E00} %s {FFFFFF}Das Passwort war Falsch", PlayerInfo[playerid][Name]);
ShowPlayerDialog(playerid,diaLogin,DIALOG_STYLE_PASSWORD,"GTA "Servername"",query,"Login","");
return 1;
}
}
Speichern:
stock SavePlayer(playerid)
{
new query[1024];
format(query, 1024, "UPDATE `player` SET `Admin` = '%d', `Job` = '%d', `Team` = '%d', `Cash` = '%d', `Skin` = '%d', `Level` = '%d', `Respekt` = '%d', `PayDay` = '%d', `PayDayTog` = '%d', `Rank` = '%d', `Leader` = '%d', `Nummer` = '%d', \
`Ban` = '%d', `BanGrund` = '%s', `BanAdmin` = '%s', `IP` = '%s', `SaveBan` = '%d', `Helm` = '%d', `Jobvertrag` = '%d', `Star` = '%d', `VIP` = '%d', `Jailtime` = '%d' WHERE `Name` = '%s' AND `id` = '%d'",
PlayerInfo[playerid][Admin],PlayerInfo[playerid][Job],PlayerInfo[playerid][Team],GetPlayerMoney(playerid)/*PlayerInfo[playerid][Geld]*/,PlayerInfo[playerid][Skin],PlayerInfo[playerid][Level],PlayerInfo[playerid][Respekt],PlayerInfo[playerid][PayDay],PlayerInfo[playerid][PayDayTog],PlayerInfo[playerid][Rank],
PlayerInfo[playerid][Leader],PlayerInfo[playerid][Nummer],PlayerInfo[playerid][Banned],PlayerInfo[playerid][BanGrund],PlayerInfo[playerid][BanAdmin],PlayerInfo[playerid][IP],PlayerInfo[playerid][Safeban],PlayerInfo[playerid][Helm],
PlayerInfo[playerid][Jobvertrag],PlayerInfo[playerid][Star],PlayerInfo[playerid][Igvip],PlayerInfo[playerid][Jailtime],PlayerInfo[playerid][Name],PlayerInfo[playerid][Userid]);
mysql_query(query, (-1), (0), SQL);
return 1;
}
Savegame:
DT_Public SaveGame()
{
new t1,t2,stunde,minute,sekunde,query[512];
gettime(stunde,minute,sekunde);
t1 = sekunde;
for(new i;i<MAX_PLAYERS;i++)
{
if(GetPVarInt(i,"loggedin")==1)
{
SavePlayer(i);
}
}
format(query, sizeof(query), "UPDATE `Server` SET `Kasse` = '%d',`Benzin` = '%d',`Kies` = '%d',`Container` = '%d', `Waren` = '%d' WHERE `Name` = 'Server'",Server[ServerKasse],Server[ServerBenzin],Server[ServerKies],Server[Servercontainer],Server[ServerLemis]);
mysql_query(query, (-1), (0), SQL);
format(query, sizeof(query), "UPDATE `JobWaren` SET `Supermarkt1` = '%d' WHERE `Name` = 'Server'",Supermarktware);
mysql_query(query, (-1), (0), SQL);
for(new i;i<MBI;i++)
{
if(strlen(biz2[i][bOwner]))
{
format(query,sizeof query,"UPDATE `Bizz` SET `Besitzer`= '%s', `Bizname`= '%s', `Offen`= '%d', `Enter`= '%d', `Prods`= '%d', `PP`= '%d', `Kasse`= '%d', `Payentry`= '%d' WHERE `BizID`='%d'",
biz2[i][bOwner],biz2[i][bName],biz2[i][bOpen],biz2[i][bEnter],biz2[i][bProds],biz2[i][bPP],biz2[i][bKasse],biz2[i][bPayentry],i);
mysql_query(query, (-1), (0), SQL);
}
}
for(new i;i!=MAX_HAUESER;i++)
{
if(strlen(Haus[i][Besitzer]))
{
format(query,sizeof query,"UPDATE `Haus` SET `Besitzer`= '%s',`Gekauft`= '%d',`Abgeschlossen`= '%d',`aX`= '%f',`aY`= '%f',`aZ`= '%f',`iX`= '%f',`iY`= '%f',`iZ`= '%f',`Interior`= '%d',`VW`= '%d',`Preis`= '%d' WHERE `id`='%d'",
Haus[i][Besitzer],Haus[i][Gekauft],Haus[i][Abgeschlossen],Haus[i][Pos][0],Haus[i][Pos][1],Haus[i][Pos][2],Haus[i][Pos][3],Haus[i][Pos][4],Haus[i][Pos][5],Haus[i][Int],Haus[i][VirtualWorld],Haus[i][Preis],i);
mysql_query(query, (-1), (0), SQL);
}
}
gettime(stunde,minute,sekunde);
t2 = sekunde;
format(query,128,"Spiel in %d Sekunden gespeichert.",t2 - t1);
AdminMessage(AC_BOT_NAME,query);
print(query);
}
Ich bin wirklich ratlos und [DT]Sniper. ist es auch daher hoffe ich mal, das einer von euch eine idee dazu hat