Hy leute,
kann mir einfach einer erklären wie ich dini speichere? Habe mir schon vieles durchgelesen usw.
und brauchen jetzt ein Harmloses beispiel angenommen Geld speichern.
Wie muss man das jetzt machen? ( Ohne Register/Login System )
Danke
Hy leute,
kann mir einfach einer erklären wie ich dini speichere? Habe mir schon vieles durchgelesen usw.
und brauchen jetzt ein Harmloses beispiel angenommen Geld speichern.
Wie muss man das jetzt machen? ( Ohne Register/Login System )
Danke
Eigentlich ganz einfach:
Wenn noch nicht getan, Dini oben im Script inkludieren
Danach kannst du alle Funktionen aus dini.inc verwenden. Es gibt für jeden Datentyp (Int,Float,String) zwei Funktionen, eine zum Speichern eines Wertes und eine zum Laden eines Wertes. Die Funktionen brauchen den Dateinamen (z.B. "Userfiles/Spieler.txt"), den Namen der Zeile in der der Wert gespeichert werden soll (z.B. "Geld") und eventl. den Wert den sie entsprechend speichern sollen.
Wenn du z.B. mit
den Wert 150 in der Zeile "Geld" in der Datei "Spieler.txt" gesetzt hast, kannst du diesen mit
wieder abrufen.
Die wichtigsten Funktionen aus Dini:
Also wie ich das jetzt so ungefär verstanden habe :
1. Ich muss dini speichern also bei Onplayerdisconnect
2. Ich muss es wieder laden also onplayerconnect
3. Das mit 150 verstehe ich nicht hab doch kein bock für jeden spieler dann 150 einzuschreiben
Also das hier zum speichern bei Onplayerdisconnect
dini_IntSet("Userfiles/Spieler.txt","Geld",GetPlayerMoney(playerid));
und das hier bei Onplayerconnect
new geld=dini_Int("Userfiles/Spieler.txt","Geld");
Nein. Das da oben waren nur Beispiele, so einfach wird das nicht funktionieren.
Für 150 musst du natürlich das aktuelle Geld des Spielers einsetzen und am besten änderst du auch den Dateipfad, wenn du die Daten für alle Spieler in einer Datei in einer Zeile speicherst wird sich wahrscheinlich irgendwann jemand beschweren...
Am wahrscheinlich "einfachsten" ist es für denen Spieler eine eigene Datei zu erstellen, obwohl es auch in einer einzelnen Datei gehen würde.
Wichtig ist außerdem, Spielern die noch keine eigene Datei haben erstmal eine zu erstellen.
public OnPlayerConnect(playerid)
{
new name[MAX_PLAYER_NAME]; GetPlayerName(playerid,name,sizeof(name));
new file[64]; format(file,sizeof(file),"Users/%s.txt",name);
if(dini_Exists(file))
SetPlayerMoney(playerid,dini_Int(fs,"Geld"));
else
dini_Create(fs);
return 1;
}
public OnPlayerDisconnect(playerid)
{
new name[MAX_PLAYER_NAME]; GetPlayerName(playerid,name,sizeof(name));
new file[64]; format(file,sizeof(file),"Users/%s.txt",name);
dini_IntSet(file,"Geld",GetPlayerMoney(playerid));
return 1;
}
Der Code sollte verständlich sein, wenn er zu kompakt ist frag einfach nach.
Ok..
also
1. ich bekomme undefined "fs" als error und das SetPlayerMoney = Ist das nicht schon in der dini include definiert (sauer Setplayermoney) ??
2. Und wenn ich dann für jeden eine Datei .txt erstellt habe kann ich es so machen wie ich es oben geschrieben habe oder muss ich noch was beachten ??
Achja...... Danke das du mir Hilft
Ahh, das mit dem fs Error war mein Fehler, bin dran gewöhnt diese Strings fs zu nennen. Außerdem hab ich mich noch in OnPlayerConnect vertan, es gibt kein SetPlayerMoney, habe ich mir scheinbar eingebildet...
So ist es richtig:
public OnPlayerConnect(playerid)
{
new name[MAX_PLAYER_NAME]; GetPlayerName(playerid,name,sizeof(name));
new file[64]; format(file,sizeof(file),"/Users/%s.txt",name);
if(dini_Exists(file))
GivePlayerMoney(playerid,dini_Int(file,"Geld"));
else
dini_Create(file);
return 1;
}
public OnPlayerDisconnect(playerid)
{
new name[MAX_PLAYER_NAME]; GetPlayerName(playerid,name,sizeof(name));
new file[64]; format(file,sizeof(file),"/Users/%s.txt",name);
dini_IntSet(file,"Geld",GetPlayerMoney(playerid));
return 1;
}
Du musst keine Dateien manuell erstellen, das macht das Script selbst, schau dir den Code unter OnPlayerConnect nochmal genauer an, vorallem den Teil mit dini_Create()
Also nur das hier eingeben :
public OnPlayerConnect(playerid)
{
new name[MAX_PLAYER_NAME]; GetPlayerName(playerid,name,sizeof(name));
new file[64]; format(file,sizeof(file),"Users/%s.txt",name);
if(dini_Exists(file))
GivePlayerMoney(playerid,dini_Int(file,"Geld"));
else
dini_Create(file);
return 1;
}
public OnPlayerDisconnect(playerid)
{
new name[MAX_PLAYER_NAME]; GetPlayerName(playerid,name,sizeof(name));
new file[64]; format(file,sizeof(file),"Users/%s.txt",name);
dini_IntSet(file,"Geld",GetPlayerMoney(playerid));
return 1;
}
Falls ja wird es trotzdem nicht erstellt im Scriptfile Ordner...
Sorry wegen die Dummen fragen aber ich will es unbedingt lernen "ist sehr wichtig"!
dini_Create(file); = erstellt eine Neue datei...<- macht es aber nicht
Du hast den Ordner aber erstellt? Also Scriptfiles/Users?
Hast du jetzt deine eigenen Callbacks einfach mit den beiden die ich gepostet habe ersetzt?
In meinen ist aber sowieso noch ein kleiner Fehler, werd' wohl langsam müde: Vor die Dateinamen (die ja mit Ordnern beginnen) sollte noch ein "/", also
public OnPlayerConnect(playerid)
{
new name[MAX_PLAYER_NAME]; GetPlayerName(playerid,name,sizeof(name));
new file[64]; format(file,sizeof(file),"/Users/%s.txt",name);
if(dini_Exists(file))
GivePlayerMoney(playerid,dini_Int(file,"Geld"));
else
dini_Create(file);
return 1;
}
public OnPlayerDisconnect(playerid)
{
new name[MAX_PLAYER_NAME]; GetPlayerName(playerid,name,sizeof(name));
new file[64]; format(file,sizeof(file),"/Users/%s.txt",name);
dini_IntSet(file,"Geld",GetPlayerMoney(playerid));
return 1;
}.
Hab jetzt genau so gemacht wie bei dir geht trotzdem nicht
Was passiert denn? Einfach garnichts? Startet der Server, crasht er wenn jemand connected, usw...
Wie gehst du genau vor?
Nein, also wir wollten ja das es erstmal eine datei für denn spieler im Scriptfile ordner erstellt oder? (%s.txt)
Und das geht nicht. Die Datei wird nicht erstellt. Der Server funktioniert 1A und so ..
Das heißt wenn du als Spieler connectest wird keine Datei erstellt? Das ist seltsam, jetzt muss ich es wohl selbst mal testen, moment...
ok
Okay... sorry dass das so lange gedauert hat, musste noch 0.3 auf meine Root installieren.
Für mich funktioniert der Code oben perfekt, der Fehler scheint bei dir zu liegen. Wenn du willst kannst du mir einen größeren Teil deines Scripts schicken/posten, am besten die kompletten OnPlayerConnect und OnPlayerDisconnect Callbacks...
Habs raus man muss es nur so machen %s.txt // und nichts vor %s hinschreiben, für was bringt es eigentlich??
So gehts auch, aber so speicherst du direkt in Scriptfiles und nicht in Scriptfiles/Users
Das %s ist eine Art Platzhalter im String.
format fügt in diesem Fall einige Variablen in den String ein, setzt also in unserem Fall mehrere Strings zusammen, nämlich "/Users/", den Spielernamen und ".txt".
Für mehr Informationen dazu: http://wiki.sa-mp.com/wiki/Format
Jo gut das ham a jetzt schon bleibt nur noch das es speichert wie gehts nun weiter????? Achja könnte ich auch noch pBank dazu einfügen? ( <- weiß nicht genau wie das beispiel ausschauen würde )
Danke
Du kannst den Code oben eigentlich für alle weiteren Werte die du speichern willst kopieren, musst halt nur eventuell die Funktionen auf den jeweiligen Datentyp abändern. Speichern und Laden tut das da oben.
Ist es so nicht richtig??
public OnPlayerConnect(playerid)
{
new name[MAX_PLAYER_NAME]; GetPlayerName(playerid,name,sizeof(name));
new file[64]; format(file,sizeof(file),"%s.txt",name);
if(dini_Exists(file)) // Die datei ist im Ordner vorhanden
{
GivePlayerMoney(playerid,dini_Int(file,"Geld"));
PlayerInfo[playerid][pBank] = dini_Int(file,"Bank");
}
else
{
dini_Create(file); // Die datei gibt es nicht und wird deswegen jetzt erstellt
GivePlayerMoney(playerid,dini_Int(file,"Geld"));
PlayerInfo[playerid][pBank] = dini_Int(file,"Bank");
}
return 1;
}
public OnPlayerDisconnect(playerid, reason)
{
new name[MAX_PLAYER_NAME]; GetPlayerName(playerid,name,sizeof(name));
new file[64]; format(file,sizeof(file),"%s.txt",name);
dini_IntSet(file,"Geld",GetPlayerMoney(playerid));
dini_IntSet(file,"Bank",PlayerInfo[playerid][pBank]);
return 1;
}
Speichert aber nicht und die liste die erstellt wurde bleibt leer...
Inwiefern leer?
Soweit ich das jetzt sehe sollte das da oben funktionieren, du solltest aber wenn die Datei nicht erstellt wird
GivePlayerMoney(playerid,dini_Int(file,"Geld"));
PlayerInfo[playerid][pBank] = dini_Int(file,"Bank");
weglassen, da es die Einträge "Geld" und "Bank" ja noch garnicht gibt, sie werden wenn eine neue Datei erstellt wurde erst beim ersten Ausloggen mit den Set Funktionen erstellt.