Hi! Ich möchte wissen, wie man Dateien anlegt, die für z.B. eine Stunde das Geld eines Spielers speichern und danach den Eintrag löschen.
Geld für kurze Zeit speichern
- Sim
- Geschlossen
- Erledigt
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
-
-
Ist es egal,ob der User in der Zwischenzeit off geht?
-
Wenn der online ist, geht sein Geld ja nicht weg, wenn der off ist, schon. Und dann soll das Geld, sobal man off geht, noch eine Stunde gespeichert werden, sodass man, wenn man inerhalb der Stunde wieder online kommt, sein Geld noch hat. Und wenn man dann wieder offline geht, soll wieder eine Stunde countdown beginnen.
EDIT: Ich habe jetzt beim playerdisconnect eine .txt Datei erstellen lassen.
if(dini_Exists("Geld.txt"))
{
dini_IntSet("Geld.txt","Geld",GetPlayerMoney(playerid));
return 1;
}
else
{
dini_Create("Geld.txt");
dini_IntSet("Geld.txt","Geld",GetPlayerMoney(playerid));
return 1;
}Aber jetzt entsteht die Datei "Geld.txt" und wenn man sie öffnet, steht da: Geld="Geldbetrag".
Aber wie macht man das, dass da zB steht: "Spielername"="Geldbetrag"?
-
Ob das mit dini geht,weiß ich nicht.Dini ist vorallem geeignet für Account System,die spezial für einen User sind.
Ich würde es jedoch mit FF machen .Damit kann man meiner Meinung nach soetwas machen.
// Unter OnPlayerDis
new File: lol = fopen("Geld.txt",io_readwrite);
if(lol)
{
new name[MAX_PLAYER_NAME];
new form[100];
GetPlayerName(playerid,name, sizeof name);
format(form,sizeof form,"%s : %d\n\r",name,GetPlayerMoney(playerid));
new string[200];
while(fread(lol, string))
{
if(strcmp(string,name,true,strlen(name))==0)
{
fdeleteline("Geld.txt",string);
fclose(lol);
new File:lol2 = fopen("Geld.txt",io_append);
fwrite(lol2,form);
}
else
{
new File:lol2 = fopen("Geld.txt",io_append);
fwrite(lol2,form);
fclose(lol2);
}
}
}
UNGETESTET; AUS DEM KOPF GESCHRIEBEN -
Danke! Aber ich bekomme den Fehler, dass fdeleteline nicht definiert ist
-
// Ganz Unten
stock fdeleteline(filename[], line[]){
if(fexist(filename)){
new temp[256];
new File:fhandle = fopen(filename,io_read);
fread(fhandle,temp,sizeof(temp),false);
if(strfind(temp,line,true)==-1){return 0;}
else{
fclose(fhandle);
fremove(filename);
for(new i=0;i<strlen(temp);i++){
new templine[256];
strmid(templine,temp,i,i+strlen(line));
if(equal(templine,line,true)){
strdel(temp,i,i+strlen(line));
fcreate(filename);
fhandle = fopen(filename,io_write);
fwrite(fhandle,temp);
fclose(fhandle);
return 1;
}
}
}
}
return 0;
} -
Braucht man dafür ne INC oder so? Weil ich bekomm schon wieder undefierte Befehle: fcreate und eqaul
-
stock fcreate(filename[])
{
if (fexist(filename)){return false;}
new File:fhandle = fopen(filename,io_write);
fclose(fhandle);
return true;
}
Bei mir geht es.. wahrscheinlich brauchst noch eine include. -
jetzt nur noch equal^^
Oder wenn du eine include hast, kannst du die hochladen?
-
Ich habe es aus dem Kopf geschrieben,denn bei mir geht es auch nicht , doch bei einem Kollegen funktioniert es einbandfrei !!!
Liegt wahrscheinlich an einer include,die ich (wir) nicht haben. Doch es geht theoretisch (bzw. praktisch mit der Include) zumindest -
Mist dann stehe ich ja wieder am Anfang Ich hab grade gegoogelt und SaveIt x gefunden, dass soll sowas alles können, allerdings finde ich keinen Downloadlink kennt das zufällig jemand?
EDIT:
Ich hab das jetzt nochma mit dini gemacht und es wird auch eine Datei angelget. Nur bekomm ich das nicht hin, die auszwertennew SpielerGeld[128];
format(SpielerGeld,sizeof(SpielerGeld), "%s ", dini_Get("Geld.txt","Geld"));
GivePlayerMoney(playerid, SpielerGeld);error 035: argument type mismatch (argument 2)
Wenn ich anstatt GivePlayerMoney, SendClientMessage benutze, bekomme ich im Chat auch die gespeicherte Zahl angezeit, also speichern und laden scheint zu funktionieren. Nur wie bekomm ich das jetzt mit dem Geld auszahlen hin?
-
Du verwendest "dini_Get" und "dini_Set" wobei Geld eine Zahl ist ( z.B.: 1000$ ) ,also ein Integerwert, und nicht wie du angegeben hast ein String,das einmal bei GivePlayerMoney falsch ist ( "Spielergeld" ) und höchstwahrscheinlich beim Speichern und Aufrufen.
dini_IntSet("Geld.txt","Geld",GetPlayerMoney(playerid));
// Speichern
GivePlayerMoney(playerid,dini_Int("Geld.txt","Geld"));
// Laden und gleichzeitig Geld geben
Edit: Dies wird so nicht so sein wie du möchtest.Wenn du das beispielsweise unter OnPlayerSpawn machst, wird zwar das Geld gespeichert über "Geld=..." , doch für alle User.D.h. spawnt einer mit 4000 steht da "Geld=4000", spawnt 2 Sekunden danach wieder jemand mit -300 , steht da:"Geld=-300", usw. !
new name[100];
new form[100];
GetPlayerName(playerid,name,sizeof name);
format(form,sizeof form,"%s.ini",name); // Eine Variable für den Namen
if(!dini_Exists(form))
{
dini_Create(form);
}
dini_IntSet(form,"Geld",GetPlayerMoney(playerid));
Versuch dies mal -
Danke! Jetzt funktionierts! Kann man denn einen Ordner anlegen, in den die Konfigurationsdateien gepeichert werden? Denn das werden mit der Zeit ja ganz schön viele.
-
breadfish.de
Hat das Thema geschlossen.