Wo Spielstände und Einstellungen speichern?

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
Lebostein
Beiträge: 674
Registriert: 13.09.2004 11:31
Wohnort: Erzgebirge

Wo Spielstände und Einstellungen speichern?

Beitrag 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?
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Wo Spielstände und Einstellungen speichern?

Beitrag von RSBasic »

Unter Windows: AppData:

Code: Alles auswählen

GetEnvironmentVariable("appdata") + "\Name des Entwicklers\Name des Programms\"
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Re: Wo Spielstände und Einstellungen speichern?

Beitrag von edel »

Spielstaende in Appdata? Hab ich noch nie gesehen. GetHomeDirectory ist da wohl die bessere Wahl.
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7039
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Wo Spielstände und Einstellungen speichern?

Beitrag 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.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Wo Spielstände und Einstellungen speichern?

Beitrag 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\"
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
_JON_
Beiträge: 389
Registriert: 30.03.2010 15:24

Re: Wo Spielstände und Einstellungen speichern?

Beitrag 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"
PureBasic 5.46 LTS (Windows x86/x64) | windows 10 x64 Oktober failure
Benutzeravatar
HeX0R
Beiträge: 3070
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3
Kontaktdaten:

Re: Wo Spielstände und Einstellungen speichern?

Beitrag 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
Benutzeravatar
_JON_
Beiträge: 389
Registriert: 30.03.2010 15:24

Re: Wo Spielstände und Einstellungen speichern?

Beitrag 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?
PureBasic 5.46 LTS (Windows x86/x64) | windows 10 x64 Oktober failure
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Wo Spielstände und Einstellungen speichern?

Beitrag 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.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
HeX0R
Beiträge: 3070
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3
Kontaktdaten:

Re: Wo Spielstände und Einstellungen speichern?

Beitrag 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...
Antworten