Portal-Zone Gothic-Zone Gothic II-Zone Gothic 3-Zone Gothic 4-Zone Modifikationen-Zone Download-Zone Foren-Zone RPG-Zone Almanach-Zone Spirit of Gothic

 

Ergebnis 1 bis 11 von 11
  1. Homepage besuchen Beiträge anzeigen #1 Zitieren
    Clockwork Origins Avatar von Bonne6
    Registriert seit
    Jun 2004
    Ort
    Erlangen
    Beiträge
    11.826
     
    Bonne6 ist offline

    Savegames importieren

    Ich arbeite zur Zeit an einer Möglichkeit Savegames zu importieren bzw. gezielt Variablen aus einem Savegame auszulesen. Die Funktionen in Gothic dazu sind soweit alle fertig, allerdings habe ich noch ein Problem beim Durchsuchen der SAVEDAT.SAV. Mittlerweile komme ich so weit, dass ich schon mal die Variable finde, die gesucht wird, aber ich weiß nicht, wie deren Wert codiert ist.

    Das ist der aktuelle C++-Code:

    Code:
    int ImportSavegame(const char *modname, const char *variable)
    {
    	char *ordner = new char[1024];
    	
    	strcpy(ordner, ".\\saves_");
    	••••••(ordner, modname);
    	••••••(ordner, "\\Import\\SAVEDAT.SAV");
    
    	fstream f(ordner, ios::binary|ios::in);
    
    	if (!f.good())
    	{
    		return -1;
    	}
    
    	int size = 10240000;;
        char* memblock = new char[size];
        f.seekg (0, ios::beg);
        f.read (memblock, size);
        f.close();
    
    	int pos = 0;
    
    	string s = variable;
    	int result = -1;
    
    	for (int i = 0; i < size; i++)
    	{
    		if ((pos < strlen(variable)) && (memblock[i] == s[pos]))
    		{
    			pos++;
    			
    			if (pos == strlen(variable))
    			{
    				// hier haben wir unsere Variable gefunden, d.h. einer der nächsten Werte sollte der Value sein
    			}
    		}
    		else if (pos == strlen(variable))
    		{
    			cout << memblock[i] << endl;
    		}
    		else
    		{
    			pos = 0;
    		}
    	}
    
        delete[] memblock;
    	delete[] ordner;
    
    	return result;
    }
    Ich hab mir testweise die einzelnen Zeichen ausgeben lassen, sobald ich meine Variable gefunden habe, aber das bringt mir nichts. Was ich überlegt habe, ist, dass die einzelnen Elemente in memblock 1 Byte groß sind und Integer ja 4 Byte hat, ich also vllt. 4 memblock-Elemente zusammennehmen muss, aber kein Plan, ob das stimmt und wenn ja, welche der Elemente ich brauche

    Falls sich jemand damit auskennt wäre mir Hilfe sehr willkommen, fertige dll und Gothic-Code kommen dann auch ins Forum, falls das jemand nutzen will

  2. Beiträge anzeigen #2 Zitieren
    Deus Avatar von Milgo
    Registriert seit
    Jul 2002
    Beiträge
    15.571
     
    Milgo ist offline
    Ich hoffe mal, ich darf so unverschämt sein und fragen, warum du nicht den GVE benutzt?

  3. Homepage besuchen Beiträge anzeigen #3 Zitieren
    Clockwork Origins Avatar von Bonne6
    Registriert seit
    Jun 2004
    Ort
    Erlangen
    Beiträge
    11.826
     
    Bonne6 ist offline
    Ich will mir zur Laufzeit automatisch aus dem Savegame Variablen einlesen, wenn eines im Import-Ordner ist, da bringt mir der GVE gar nichts.

    Mit dem Source-Code kann ich auch wenig anfangen, weil das alles in C# ist und das nicht so einfach in C++ zu laufen scheint.

  4. Homepage besuchen Beiträge anzeigen #4 Zitieren
    Clockwork Origins Avatar von Bonne6
    Registriert seit
    Jun 2004
    Ort
    Erlangen
    Beiträge
    11.826
     
    Bonne6 ist offline
    Durch tatkräftige Unterstützung von Sumpfkrautjunkie hab ich jetzt eine funktionstüchtige Version, muss noch ein wenig mehr testen, ob auch wirklich alles klappt, aber es lassen sich wohl jetzt G1 und G2 Saves importieren und die Werte für Variablen und Dialoge ermitteln.

    Hat denn überhaupt irgendjemand daran Interesse oder mach ich das nur für mich?

    Wo ich mir das vorstellen könnte sind Modiifkationen, die auf einem der Hauptspiele oder auf einer anderen Mod aufbauen, z.b. Erweiterungsmods zu G2, die ja nach G1 spielen. Da kann man dann ein paar Entscheidungen aus dem Vorgänger aufgreifen und entsprechend reagieren. Bei G1 gab's jetzt nicht so viel, aber man kann was finden, wenn man sucht.
    Weitere Möglichkeit wäre bei Mods wie eXodus oder Orkkrieg, wo es einen Vorgänger gibt (bzw. Demo), die im Hauptspiel nicht mehr drin ist. Weiß nicht mehr, ob es da irgendwelche Entscheidungsmöglichkeiten gab, aber so könnte man die Importieren und dann so weiterspielen, wie man die Demo beendet hat.

    Naja, wenn jemand Interesse hat einfach melden, vllt. hat ja auch noch jemand eine Idee dazu?

  5. Homepage besuchen Beiträge anzeigen #5 Zitieren
    Held Avatar von Shadowblade
    Registriert seit
    Aug 2006
    Beiträge
    5.353
     
    Shadowblade ist offline
    Hmm, ich hätte schon Verwendung dafür, bzw. für eine etwas abgewandelte Form. Wenn du schon Daten auslesen kannst, kannst du dann auch Daten schreiben?
    Das heißt, könntest du ein Savegame aus dem Spiel heraus modifizieren, oder fehlen dazu Schreibrechte oder so?
    Ansonsten wäre aber auch das reine Einlesen an sich schon ziemlich praktisch. Also ich hätte schon einen Zweck dafür

    Alle fragen sich wie kann ich noch schöner werden,
    aber keiner fragt sich für wen.

  6. Homepage besuchen Beiträge anzeigen #6 Zitieren
    Clockwork Origins Avatar von Bonne6
    Registriert seit
    Jun 2004
    Ort
    Erlangen
    Beiträge
    11.826
     
    Bonne6 ist offline
    Was willst du denn reinschreiben? Muss da halt darauf achten, dass ich nichts wichtiges ueberschreibe Aber prinzipiell kann ich das einrichten. Strings lassen sich uebrigens nicht aus dem Savegame auslesen zur Zeit, brauchst du das? String-Variablen werden ja eh nicht gespeichert

  7. Homepage besuchen Beiträge anzeigen #7 Zitieren
    Held Avatar von Shadowblade
    Registriert seit
    Aug 2006
    Beiträge
    5.353
     
    Shadowblade ist offline
    Naja, ich möchte eigentlich nur Variablen lesen und im Idealfall auch setzen können.

    Also (nur mal als Beispiel) eine Variable im Spiel gibt an, ob das entsprechende Savegame bereits importiert wurde.

    Ich starte die andere Mod, in die das Savegame importiert werden soll, frage nach dieser Variable und wenn sie 0 ergibt, importiere ich das Savegame und gebe der Variable den Wert 1.

    Ist jetzt vielleicht ein blödes Beispiel, weil man es auch in der zweiten Mod als globale Variable machen könnte, aber ich hoffe du verstehst, was ich meine.

    Alternatives Beispiel: zu einer großen Mod liefere ich eine kleine Mod nach, die eine kurze Zwischenhandlung einschiebt. Zu Beginn der Mod importiere ich das Savegame der großen Mod in die kleine und jetzt will ich nur, dass am Ende einige wenige Variablen aus der kleinen Mod in das Savegame der großen Mod geschrieben werden, sodass man in der großen Mod quasi nur z.B. ein Bonusfeature erhält oder so.

    Dabei will ich aber nicht, dass völlig neue Variablen ins Savegame geschrieben werden, sondern nur, dass Variablen, die bereits in der großen Mod initialisiert wurden, von der kleinen Mod eine Zuweisung erhalten.

    Puuh, ich hoffe, du verstehst, was ich meine.

    Alle fragen sich wie kann ich noch schöner werden,
    aber keiner fragt sich für wen.

  8. Homepage besuchen Beiträge anzeigen #8 Zitieren
    Clockwork Origins Avatar von Bonne6
    Registriert seit
    Jun 2004
    Ort
    Erlangen
    Beiträge
    11.826
     
    Bonne6 ist offline
    Vorhandene Variablen mit einem Wert füllen ist kein Ding, nachdem ich jetzt weiß, an welcher Stelle der Wert steht, das kann ich also einbauen. Du willst dann wahrscheinlich auch eine ziemlich freie Ordner-Wahl, oder?

    Momentan ist das System so, dass man den Modname (also den Namen des Saves-Ordners, z.b. bei uns Xeres) angibt und dann aus dem Ordner saves_Xeres\Import\ die SAVEDAT.SAV eingelesen wird. Ich kann auch eine Möglichkeit einbauen direkt die Datei anzugeben, macht das ganze dann flexibler.

    Wenn du alles aus der großen Mod in die kleine Importieren willst, dann auch Inventar und Attribute? Die werden nämlich anders gespeichert, bräuchten dann also nochmal extra Arbeit.

  9. Homepage besuchen Beiträge anzeigen #9 Zitieren
    Held Avatar von Shadowblade
    Registriert seit
    Aug 2006
    Beiträge
    5.353
     
    Shadowblade ist offline
    Zitat Zitat von Bonne6 Beitrag anzeigen
    Vorhandene Variablen mit einem Wert füllen ist kein Ding, nachdem ich jetzt weiß, an welcher Stelle der Wert steht, das kann ich also einbauen. Du willst dann wahrscheinlich auch eine ziemlich freie Ordner-Wahl, oder?

    Momentan ist das System so, dass man den Modname (also den Namen des Saves-Ordners, z.b. bei uns Xeres) angibt und dann aus dem Ordner saves_Xeres\Import\ die SAVEDAT.SAV eingelesen wird. Ich kann auch eine Möglichkeit einbauen direkt die Datei anzugeben, macht das ganze dann flexibler.

    Wenn du alles aus der großen Mod in die kleine Importieren willst, dann auch Inventar und Attribute? Die werden nämlich anders gespeichert, bräuchten dann also nochmal extra Arbeit.
    Hmm, nee, bloß keine Arbeit.
    Wenn dann wäre es sowieso so, dass man in der 'kleinen Mod' entweder einen anderen Charakter bzw. denselben Charakter nur jünger spielt, von daher muss das alles nicht übertragen werden.
    (Für einzelne Werte/Gilde/spezielle Gegenstände kann ich dann ja auch Variablen benutzen.)

    Ja, cool wäre vielleicht Dateiangabe relativ zum Gothicpfad.
    Vielen Dank für die Mühe.

    Ich hatte eigentlich überlegt, dafür was mit Ikarus zu basteln, und nur in Textdateien zu schreiben. Wollte aber eigentlich vermeiden, dass der Spieler davon was mitbekommt, damit er nichts an den Dateien ändert - wenn das ganze aber natürlich ein 'offizieller' Savegame-Import ist, dann ist das gar kein Problem

    Alle fragen sich wie kann ich noch schöner werden,
    aber keiner fragt sich für wen.
    Geändert von Shadowblade (23.05.2011 um 21:37 Uhr)

  10. Homepage besuchen Beiträge anzeigen #10 Zitieren
    Clockwork Origins Avatar von Bonne6
    Registriert seit
    Jun 2004
    Ort
    Erlangen
    Beiträge
    11.826
     
    Bonne6 ist offline
    Der Pfad geht vom Gothic-Ordner aus, also der, wo der _work- und System-Ordner und die ganzen Saves-Ordner und noch andere drin sind.

  11. Homepage besuchen Beiträge anzeigen #11 Zitieren
    Held Avatar von Shadowblade
    Registriert seit
    Aug 2006
    Beiträge
    5.353
     
    Shadowblade ist offline
    Ah, okay. Ich hab mir jetzt den Code oben nochmal angeguckt und verstanden, was du meinst. Ich dachte, dass System wäre nur auf Xeres beschränkt, aber so reicht mir das eigentlich schon.

    Alle fragen sich wie kann ich noch schöner werden,
    aber keiner fragt sich für wen.

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
Impressum | Link Us | intern
World of Gothic © by World of Gothic Team
Gothic, Gothic 2 & Gothic 3 are © by Piranha Bytes & Egmont Interactive & JoWooD Productions AG, all rights reserved worldwide