[Blockierte Grafik: http://www.abload.de/img/tutorial15wqub.png]
Tutorial von Vincent P. für easy-scripting.net & sa-mp.de
Nummer 2 - Speichern & Laden
Tutorial von Vincent P. für easy-scripting.net & sa-mp.de
Nummer 2 - Speichern & Laden
Hallo,
im heutigen Tutorial, sprich Tutorial Nummer 2, nach diesem hier: forum.sa-mp.de/san-andreas-mul…system-mit-textdraw-s-co/ bzw. easy-scripting.net/index.php?page=Thread&threadID=194 möchte ich euch heute zeigen, wie es möglich ist das ganze zu speichern im DINI-Format.
Step 1 - was brauchen wir?
Wir möchten den Punktestand des Gangfightsystem von Tutorial Nummero 1 speichern und dementsprechend auch die GangZone's anzeigen lassen sowie die Textdraws.
Step 3 - Der Scriptstart, das Enum
Um uns die Speicherung zu ermöglichen benötigen wir ein Enum in welchem wir die Sachen, die gespeichert werden sollen sprich z.B. "Geld" ect. speichern, in unserem Fall:
[pwn]enum Gangfightspeicherung {
PunkteTeamEins,
PunkteTeamZwei
}[/pwn]
Und das ganze um es auch anwenden zu können müssen wir den Enum definieren, was eine Definierung ist, sollten wir wissen, darauf gehe ich nicht weiter ein:
[pwn]new Gangfight[Gangfightspeicherung];[/pwn]
Wir könnten nun also z.B.:
[pwn]Gangfight[PunteTeamEins][/pwn]
erhöhen, setzen, runterschrauben, abfragen - alles. :)
Step 4 - Stock schreiben zum laden
Ein Stock ist: "stock is used to declare variables and functions which may not be used but which you don't want to generate unused warnings for. With variables stock is like const in that it is a modifier, not a full declaration", nachzulesen: wiki.sa-mp.com/wiki/Stock#stock
Also ein Stock, ich beschreibe es mal mit eigenen Worten, ist eine Art "Funktion" welche man überall einsetzen bzw. aufrufen kann. Sprich man bastelt sich z.B. ein zweites OnPlayerDisconnect mit einem Stock und führt/ruft den Stock dann bei OnPlayerDisconnect auf, wie es auch bei vielen GF's der Fall ist.
[pwn]stock GangfightLoad()
{
new filename[100];
format(filename, sizeof filename, "Gangfights.ini");
if(dini_Exists(filename))
{
//something here
}
return 1;
}[/pwn]
Bis hierher. Bisher machen wir nicht viel. Wir legen den Namen der Gangfightdatei, aus der wir lesen wollen, fest und fragen ab mit "dini_Exists" ob die Datei überhaupt vorhanden ist, wenn ja, würde bisher nichts passieren. Doch kommen wir nun zu dem, was passieren soll.
Wir nutzen in diesem Fall die, im Enum verwendeten Begriffe, sprich: "PunkteTeamEins", "PunkteTeamZwei" und entfernen dafür die Variablen "CopCount" und "GangsterCount" und nennen alles was so lautet in:
"Gangfightspeicherung[PunkteTeamEins" für Cops
und:
"Gangfightspeicherung[PunkteTeamEins" für Gangster
ein.
[pwn]stock GangfightLoad()
{
new filename[100];
format(filename, sizeof filename, "Gangfights.ini");
if(dini_Exists(filename))
{
Gangfightspeicherung[PunkteTeamEins] = dini_Int(filename, "PunkteTeamEins");
Gangfightspeicherung[PunkteTeamZwei] = dini_Int(filename, "PunkteTeamZwei");
}
return 1;
}[/pwn]
Wir haben jetzt den Inhalt, sprich den Spielstand aus der Datei geholt und diesen an die Variablen übergeben, auch das sollte klar sein.
Es gibt im übrigen noch anderes als "dini_Int", wie z.B. "dini_Get", aber das ist ein anderes Thema - weiter geht's!
[pwn]stock GangfightLoad()
{
new filename[100];
format(filename, sizeof filename, "Gangfights.ini");
if(dini_Exists(filename))
{
new str[10];
Gangfightspeicherung[PunkteTeamEins] = dini_Int(filename, "PunkteTeamEins");
Gangfightspeicherung[PunkteTeamZwei] = dini_Int(filename, "PunkteTeamZwei");
format(str,sizeof(str), "~b~%d", CopCount);//Textdraw formatieren
TextDrawSetString(Cops[1], str);//Textdraw updaten
format(str,sizeof(str), "~b~%d", GangsterCount);//Textdraw formatieren
TextDrawSetString(Gangster[1], str);//Textdraw updaten
}
else
{
printf("%s exisitert nicht!", filename);
}
return 1;
}[/pwn]
Wir sagen ihm also direkt er soll den Textdraw(s) updaten und wenn die Datei NICHT vorhanden ist soll er in den Chatlog schreiben, das es diese nicht gibt, fertig. Wir können ja beim laden schlecht eine erstellen, bringt ja nichts... ;)
Step 5 - Stock schreiben zum Speichern
Relativ das gleiche machen wir auch jetzt, ich nehme mir einfach mal den Code, da ich ihn oben schon erklärt habe und erkläre nur wenig:
[pwn]stock GangfightSave()
{
new filename[100];
format(filename, sizeof filename, "Gangfights.ini");
if(dini_Exists(filename))
{
dini_IntSet(filename, "PunkteTeamEins", Gangfightspeicherung[PunkteTeamEins]);
dini_IntSet(filename, "PunkteTeamZwei", Gangfightspeicherung[PunkteTeamZwei]);
}
else
{
dini_Create(filename);
dini_IntSet(filename, "PunkteTeamEins", Gangfightspeicherung[PunkteTeamEins]);
dini_IntSet(filename, "PunkteTeamZwei", Gangfightspeicherung[PunkteTeamZwei] );
printf("%s wurde erstellt & gespeichert!", filename);
}
return 1;
}[/pwn]
Diesmal speichere ich das ganze nur mit dem Command "dini_IntSet", sollte keine GangfightDatei vorhanden so wird eine erstellt & dann gespeichert. Fertig währen wir, das war's - NEIN natürlich nicht! Scherzchen beim scripten muss immer sein. :P
Step 6 - Stock's anwenden
Wir gehen nun unter die Callback's, am besten eines nach dem anderen & nicht gleichzeitig: OnGameModeInit & OnGameModeExit.
Wir fügen nun beim "OnGameModeInit" folgendes ein:
GangfightSave();
Und beim "OnGameModeExit":
GangfightLoad();
Und wenn man mitgemacht hätte, würde man sehen das es falsch ist, nämlich genau andersrum, aber das lass ich mal stehen, man soll ja schließlich nicht nur C&P'n.
Step 7 - See the result
Herzlichen Glückwunsch, ihr habt es geschafft, bei erfolgreichem "gescripte" sollte folgendes in der .ini-Datei erscheinen:
Die Zahlen sind nur ausgedacht, je nach Spielstand.
Das Tutorial wurde im Forum verfasst, daher gibt's keine Einrückungen. Ich hoffe trotzdem ich habe euch geholfen!
MfG.
Vincent.
im heutigen Tutorial, sprich Tutorial Nummer 2, nach diesem hier: forum.sa-mp.de/san-andreas-mul…system-mit-textdraw-s-co/ bzw. easy-scripting.net/index.php?page=Thread&threadID=194 möchte ich euch heute zeigen, wie es möglich ist das ganze zu speichern im DINI-Format.
Step 1 - was brauchen wir?
- Zeit, Geduld, Lust, Spaß, gute Laune
- Das Tutorial Nummero 1 eventuell auch
Wir möchten den Punktestand des Gangfightsystem von Tutorial Nummero 1 speichern und dementsprechend auch die GangZone's anzeigen lassen sowie die Textdraws.
Step 3 - Der Scriptstart, das Enum
Um uns die Speicherung zu ermöglichen benötigen wir ein Enum in welchem wir die Sachen, die gespeichert werden sollen sprich z.B. "Geld" ect. speichern, in unserem Fall:
- PunkteTeamEins
- PunkteTeamZwei
[pwn]enum Gangfightspeicherung {
PunkteTeamEins,
PunkteTeamZwei
}[/pwn]
Und das ganze um es auch anwenden zu können müssen wir den Enum definieren, was eine Definierung ist, sollten wir wissen, darauf gehe ich nicht weiter ein:
[pwn]new Gangfight[Gangfightspeicherung];[/pwn]
Wir könnten nun also z.B.:
[pwn]Gangfight[PunteTeamEins][/pwn]
erhöhen, setzen, runterschrauben, abfragen - alles. :)
Step 4 - Stock schreiben zum laden
Ein Stock ist: "stock is used to declare variables and functions which may not be used but which you don't want to generate unused warnings for. With variables stock is like const in that it is a modifier, not a full declaration", nachzulesen: wiki.sa-mp.com/wiki/Stock#stock
Also ein Stock, ich beschreibe es mal mit eigenen Worten, ist eine Art "Funktion" welche man überall einsetzen bzw. aufrufen kann. Sprich man bastelt sich z.B. ein zweites OnPlayerDisconnect mit einem Stock und führt/ruft den Stock dann bei OnPlayerDisconnect auf, wie es auch bei vielen GF's der Fall ist.
[pwn]stock GangfightLoad()
{
new filename[100];
format(filename, sizeof filename, "Gangfights.ini");
if(dini_Exists(filename))
{
//something here
}
return 1;
}[/pwn]
Bis hierher. Bisher machen wir nicht viel. Wir legen den Namen der Gangfightdatei, aus der wir lesen wollen, fest und fragen ab mit "dini_Exists" ob die Datei überhaupt vorhanden ist, wenn ja, würde bisher nichts passieren. Doch kommen wir nun zu dem, was passieren soll.
Wir nutzen in diesem Fall die, im Enum verwendeten Begriffe, sprich: "PunkteTeamEins", "PunkteTeamZwei" und entfernen dafür die Variablen "CopCount" und "GangsterCount" und nennen alles was so lautet in:
"Gangfightspeicherung[PunkteTeamEins" für Cops
und:
"Gangfightspeicherung[PunkteTeamEins" für Gangster
ein.
[pwn]stock GangfightLoad()
{
new filename[100];
format(filename, sizeof filename, "Gangfights.ini");
if(dini_Exists(filename))
{
Gangfightspeicherung[PunkteTeamEins] = dini_Int(filename, "PunkteTeamEins");
Gangfightspeicherung[PunkteTeamZwei] = dini_Int(filename, "PunkteTeamZwei");
}
return 1;
}[/pwn]
Wir haben jetzt den Inhalt, sprich den Spielstand aus der Datei geholt und diesen an die Variablen übergeben, auch das sollte klar sein.
Es gibt im übrigen noch anderes als "dini_Int", wie z.B. "dini_Get", aber das ist ein anderes Thema - weiter geht's!
[pwn]stock GangfightLoad()
{
new filename[100];
format(filename, sizeof filename, "Gangfights.ini");
if(dini_Exists(filename))
{
new str[10];
Gangfightspeicherung[PunkteTeamEins] = dini_Int(filename, "PunkteTeamEins");
Gangfightspeicherung[PunkteTeamZwei] = dini_Int(filename, "PunkteTeamZwei");
format(str,sizeof(str), "~b~%d", CopCount);//Textdraw formatieren
TextDrawSetString(Cops[1], str);//Textdraw updaten
format(str,sizeof(str), "~b~%d", GangsterCount);//Textdraw formatieren
TextDrawSetString(Gangster[1], str);//Textdraw updaten
}
else
{
printf("%s exisitert nicht!", filename);
}
return 1;
}[/pwn]
Wir sagen ihm also direkt er soll den Textdraw(s) updaten und wenn die Datei NICHT vorhanden ist soll er in den Chatlog schreiben, das es diese nicht gibt, fertig. Wir können ja beim laden schlecht eine erstellen, bringt ja nichts... ;)
Step 5 - Stock schreiben zum Speichern
Relativ das gleiche machen wir auch jetzt, ich nehme mir einfach mal den Code, da ich ihn oben schon erklärt habe und erkläre nur wenig:
[pwn]stock GangfightSave()
{
new filename[100];
format(filename, sizeof filename, "Gangfights.ini");
if(dini_Exists(filename))
{
dini_IntSet(filename, "PunkteTeamEins", Gangfightspeicherung[PunkteTeamEins]);
dini_IntSet(filename, "PunkteTeamZwei", Gangfightspeicherung[PunkteTeamZwei]);
}
else
{
dini_Create(filename);
dini_IntSet(filename, "PunkteTeamEins", Gangfightspeicherung[PunkteTeamEins]);
dini_IntSet(filename, "PunkteTeamZwei", Gangfightspeicherung[PunkteTeamZwei] );
printf("%s wurde erstellt & gespeichert!", filename);
}
return 1;
}[/pwn]
Diesmal speichere ich das ganze nur mit dem Command "dini_IntSet", sollte keine GangfightDatei vorhanden so wird eine erstellt & dann gespeichert. Fertig währen wir, das war's - NEIN natürlich nicht! Scherzchen beim scripten muss immer sein. :P
Step 6 - Stock's anwenden
Wir gehen nun unter die Callback's, am besten eines nach dem anderen & nicht gleichzeitig: OnGameModeInit & OnGameModeExit.
Wir fügen nun beim "OnGameModeInit" folgendes ein:
GangfightSave();
Und beim "OnGameModeExit":
GangfightLoad();
Und wenn man mitgemacht hätte, würde man sehen das es falsch ist, nämlich genau andersrum, aber das lass ich mal stehen, man soll ja schließlich nicht nur C&P'n.
Step 7 - See the result
Herzlichen Glückwunsch, ihr habt es geschafft, bei erfolgreichem "gescripte" sollte folgendes in der .ini-Datei erscheinen:
Die Zahlen sind nur ausgedacht, je nach Spielstand.
==================================================================================================================================
Das Tutorial wurde im Forum verfasst, daher gibt's keine Einrückungen. Ich hoffe trotzdem ich habe euch geholfen!
MfG.
Vincent.
"Das müsste jetzt funktionieren..."
---
Mit freundlichen Grüßen,
Vincent Petritz
---
Mit freundlichen Grüßen,
Vincent Petritz