Seite 1 von 2

Wo Spielstände und Einstellungen speichern?

Verfasst: 17.07.2013 15:41
von Lebostein
Hallo,

welche Pfade darf (sollte) man zum Speichern von Spielständen und Einstellungsdateien verwenden? Unter MacOS ist das ja in der Regel dieser Pfad hier:

GetHomeDirectory() + "Library/Application Support/Name des Entwicklers/Name des Programms/"

Wie sieht es mit Windows (XP, Vista, 7 und 8 ) aus? Wo sollte ich da entsprechende Pfade anlegen?

Re: Wo Spielstände und Einstellungen speichern?

Verfasst: 17.07.2013 16:58
von RSBasic
Unter Windows: AppData:

Code: Alles auswählen

GetEnvironmentVariable("appdata") + "\Name des Entwicklers\Name des Programms\"

Re: Wo Spielstände und Einstellungen speichern?

Verfasst: 17.07.2013 17:48
von edel
Spielstaende in Appdata? Hab ich noch nie gesehen. GetHomeDirectory ist da wohl die bessere Wahl.

Re: Wo Spielstände und Einstellungen speichern?

Verfasst: 17.07.2013 18:28
von STARGÅTE
Einstellungen würde ich (und mach ich auch) (egal ob Spiel oder Anwendung) unter
"%APPDATA%\Firma\Titel\" speichern.

Spielständen hingegen würde ich ehr (wenn die Nutzungsrechte da sind) im Ort der Anwendung/Spiel speichern oder gar nach einem Ort beim ersten Speichern fragen.
Spielstände sind ja hin und wieder zimlich "wichtig", sodass man diese ungern auf der Windows-HDD ablegen will.

Re: Wo Spielstände und Einstellungen speichern?

Verfasst: 17.07.2013 18:59
von RSBasic
@edel
Dann kennst du nicht Minecraft. :lol:

Was ich aber meine, sind die Programmeinstellungen, die man im AppData-Verzeichnis abspeichern kann.
Spielstände können im "Eigene Dokumente"-Verzeichnis gespeichert werden:

Code: Alles auswählen

EnableExplicit

Procedure.s GetSpecialFolder(CSIDL.l)
  Protected *itemid.ITEMIDLIST
  Protected location.s = Space(#MAX_PATH)

  If SHGetSpecialFolderLocation_ (0, CSIDL, @*itemid) = #NOERROR
    If SHGetPathFromIDList_(*itemid, @location)
      CoTaskMemFree_(*itemid)
      If Right(location, 1) <> "\" : location + "\" : EndIf
      ProcedureReturn location
    EndIf
  EndIf
EndProcedure

Debug GetSpecialFolder(#CSIDL_PERSONAL) + "Name des Entwicklers\Name des Programms\"

Re: Wo Spielstände und Einstellungen speichern?

Verfasst: 17.07.2013 19:18
von _JON_
Das speichert wohl jeder woanders.

Persönlich mag ich AppData bei Spielen nicht, mal ein System Image wiederhergestellt und der Spielstand ist weg :angry:
Ich würde prüfen ob Schreibrechte im Spielverzeichnis vorhanden sind und wenn möglich ein "savegame" Ordner neben der game.exe nutzen.

Falls nicht dann halt in "Eigene Dokumente"

Re: Wo Spielstände und Einstellungen speichern?

Verfasst: 17.07.2013 21:45
von HeX0R
Im Spielordner hat das mal so gar nix zu suchen.
Was immer alle vergessen zu scheinen:
Nur weil Ihr Euren Rechner zuhause alleine benutzt, ist das in sehr vielen Haushalten eben nicht so.
Und wieso soll User 2 mit den Spielständen von User 1 leben müssen?

HomeDirectory oder APPDATA unter Windows.
Allerdings mag ich persönlich es überhaupt nicht, wenn Spiele unter meinem HomeDir einfach irgendwelche Ordner ablegen, es gibt doch meine ich (ab Vista?) einen speziellen Ordner für Spielstände, oder?
(Den allerdings keine Sau benutzt)

[Edit]
O.k. gefunden!
Hab mal was gebastelt:

Code: Alles auswählen

Prototype SHGetKnownFolderPath__(rfid, dwFlags.l, hToken, *ppszPath)

Procedure.s GetPathToSavedGames()
	Protected DLL, i, Result.s, *UnicodeBuffer, kfFlag.l, SHGetKnownFolderPath.SHGetKnownFolderPath__
	
	CompilerSelect #PB_Compiler_OS
		CompilerCase #PB_OS_Windows
			DLL = OpenLibrary(#PB_Any, "Shell32.dll")
			If DLL
				SHGetKnownFolderPath = GetFunction(DLL, "SHGetKnownFolderPath")
				If SHGetKnownFolderPath
					If SHGetKnownFolderPath(?FOLDERID_SavedGames, kfFlag, #Null, @*UnicodeBuffer) = #S_OK And *UnicodeBuffer
						Result = PeekS(*UnicodeBuffer, -1, #PB_Unicode) + "\"
						CoTaskMemFree_(*UnicodeBuffer)
					EndIf
				EndIf
				CloseLibrary(DLL)
			EndIf
		CompilerCase #PB_OS_MacOS
			;something similar on MacOS?
		CompilerCase #PB_OS_Linux
			;something similar on linux?
	CompilerEndSelect
	
	If Result = ""
		Result = GetHomeDirectory()
	EndIf

	ProcedureReturn Result
EndProcedure

Debug GetPathToSavedGames()

DataSection
	FOLDERID_SavedGames:
	Data.l $4C5C32FF ;{4C5C32FF-BB9D-43b0-B5B4-2D72E54EAAA4}
	Data.w $BB9D, $43b0
	Data.b $B5, $B4, $2D, $72, $E5, $4E, $AA, $A4
EndDataSection

Re: Wo Spielstände und Einstellungen speichern?

Verfasst: 17.07.2013 22:54
von _JON_
HeX0R hat geschrieben:Im Spielordner hat das mal so gar nix zu suchen.
Was immer alle vergessen zu scheinen:
Nur weil Ihr Euren Rechner zuhause alleine benutzt, ist das in sehr vielen Haushalten eben nicht so.
Und wieso soll User 2 mit den Spielständen von User 1 leben müssen?
Ahm, wo ist denn bitte das Problem?
Im Safegame Ordner sind halt Unterordner für jeden Spieler.

Was hast Du den vor WinXP gemacht, wo "MultiUser" noch ein Fremdwort war?

Re: Wo Spielstände und Einstellungen speichern?

Verfasst: 17.07.2013 23:29
von RSBasic
_JON_ hat geschrieben:Persönlich mag ich AppData bei Spielen nicht, mal ein System Image wiederhergestellt und der Spielstand ist weg :angry:
Naja, ist eigentlich logisch, wenn man das System neu aufsetzt oder ein Abbild wiederherstellt, dass da Dateien verloren gehen. Deshalb muss man ja auch vorher wichtige Dateien (Programmeinstellungen, Spielstände, eigene Dateien wie PB-Projekte etc.) sichern. ;)
Ich mach es immer so, dass ich den kompletten AppData-Ordner auf meine externe Festplatte rüberkopiere, wenn ich mein System neu aufsetze. Dann habe ich wenigstens alle Programmeinstellungen, die ich dann nach dem Aufsetzen problemlos wiederherstellen kann. Ebenso wie "Eigene Dokumente" u.ä.
Ansonsten gäbe es auch für dich die Möglichkeit, bestimmte Systemverzeichnisse wie AppData einfach auszulagern oder umzuleiten. Dann brauchst du nichts mehr machen, wenn du ein Abbild von C:\ wiederherstellt.
_JON_ hat geschrieben:Ich würde prüfen ob Schreibrechte im Spielverzeichnis vorhanden sind und wenn möglich ein "savegame" Ordner neben der game.exe nutzen.
Ich bin zwar kein regelmäßiger Computerspieler, aber mich würds nerven, wenn ich in jedem einzelnen Ordner eines Spiels reingehen muss, um dort die Spielstände einzeln zu sichern. Da kopiere ich doch lieber einen separaten, zentralen Ordner für alle Spielstände, beispielsweise "Eigene Dokumente" oder "Gespeicherte Spiele".
_JON_ hat geschrieben:Was hast Du den vor WinXP gemacht, wo "MultiUser" noch ein Fremdwort war?
Es geht aber nicht darum, dass man heute genauso machen kann, wie vor 15 Jahren. Es gibt von Windows bestimmte Verzeichnisse, die bereitgestellt werden, um dort bestimmte Dateien abzulegen. Und wenn mehrere Benutzerprofile vorhanden sind, dann müssen die jeweiligen Dateien getrennt werden. Ordnung muss schon sein. Und außerdem möchte vielleicht ein Benutzer nicht, dass ein anderer Benutzer auf seine Dateien zugreift, egal ob es nur Spielstände sind.
Das ist so wie in PB. Du definierst doch auch nicht nur globale Variablen (hoffe ich mal^^), sondern jede Prozedur hat ihre eigenen Variablen, die i.d.R. nicht von außen zugreifbar sind.

Re: Wo Spielstände und Einstellungen speichern?

Verfasst: 17.07.2013 23:56
von HeX0R
_JON_ hat geschrieben:Was hast Du den vor WinXP gemacht, wo "MultiUser" noch ein Fremdwort war?
Ich habe mich immer gefragt was es mit dieser irre großen Anzahl an Programmen auf sich hat, die plötzlich unter Windows 7 nicht mehr funktionierten.
Selbst meine allerersten Programme funktionieren einwandfrei unter Win7.
Wieso?
Naja, ich habe mich immer schon an die Empfehlungen von Microsoft gehalten.
Nur weil vor Win Vista nur "empfohlen" wurde, bestimmte Ordner zu benutzen, haben es Besserwisser jahrelang ignoriert.
Nachdem Microsoft dann ab Vista gesagt hat "Ihr könnt uns alle mal, wir machen es ab jetzt zur Pflicht",
kam das große Gejammer, dass "die irre hochgezüchtete Software ABC wegen den abartigen völlig unerwarteten Änderungen von Microsoft nicht mehr funktioniert"...

Lächerlich eigentlich, ... ein Zustand, der quasi Jahre, fast schon jahrzenhntelang im voraus angekündigt war.
Der heldenhafte ignorante Entwickler ist aber natürlich völlig unschuldig... schimpfen wir lieber ein wenig auf Microsoft.

Übrigens gibt es den Multiuser schon wesentlich länger als seit Windows XP...