From b763982f455554ce72b30a6e52b5d1348cb7820c Mon Sep 17 00:00:00 2001 From: Sven Eberhardt Date: Sun, 28 Aug 2016 00:56:15 -0400 Subject: [PATCH] Fix scenario saving as network client to not delete saved scenario after game end (#1814) --- planet/System.ocg/LanguageDE.txt | 1 + planet/System.ocg/LanguageUS.txt | 1 + src/editor/C4Console.cpp | 13 +++++++++++-- src/game/C4Game.cpp | 9 +++------ src/game/C4Game.h | 2 +- 5 files changed, 17 insertions(+), 9 deletions(-) diff --git a/planet/System.ocg/LanguageDE.txt b/planet/System.ocg/LanguageDE.txt index af612a1f7..4977e58a0 100644 --- a/planet/System.ocg/LanguageDE.txt +++ b/planet/System.ocg/LanguageDE.txt @@ -73,6 +73,7 @@ IDS_CNS_NOCHILDSAVE=%s befindet sich in einem Rundenordner. Szenarien können ni IDS_CNS_NOFULLSCREENPLRS=Im Vollbildmodus kann nur gestartet werden, wenn Spieler am Spiel teilnehmen. IDS_CNS_NOMATDEF=Zeichnen nicht möglich, da die angegebene Material-Textur-Kombination '%s-%s' nicht in der geladenen Texturtabelle definiert ist. IDS_CNS_NONETEDIT=Bei Wiedergabe einer Aufnahme kann nicht editiert werden. +IDS_CNS_NONETREFSAVE=Kann nicht ueber temporaere Netzwerkreferenz speichern. Bitte 'Speichern unter...' benutzen. IDS_CNS_NOOBJECT=Kein Objekt ausgewählt. IDS_CNS_NOTHING=Nichts IDS_CNS_OBJECT=Objekt diff --git a/planet/System.ocg/LanguageUS.txt b/planet/System.ocg/LanguageUS.txt index 3d9d97f4c..a06d34e16 100644 --- a/planet/System.ocg/LanguageUS.txt +++ b/planet/System.ocg/LanguageUS.txt @@ -73,6 +73,7 @@ IDS_CNS_NOCHILDSAVE=%s is located in a group folder. Scenarios cannot be saved i IDS_CNS_NOFULLSCREENPLRS=Fullscreen mode requires at least one participating player. IDS_CNS_NOMATDEF=Cannot draw because selected material-texture combination '%s-%s' is not defined in the texture table. IDS_CNS_NONETEDIT=No editing while replaying. +IDS_CNS_NONETREFSAVE=Cannot save over temporary network reference file. Please use 'Save as...' to save to a new filename. IDS_CNS_NOOBJECT=No selected objects. IDS_CNS_NOTHING=Nothing IDS_CNS_OBJECT=Object diff --git a/src/editor/C4Console.cpp b/src/editor/C4Console.cpp index 9f8c3f891..f4f0fb406 100644 --- a/src/editor/C4Console.cpp +++ b/src/editor/C4Console.cpp @@ -164,11 +164,20 @@ bool C4Console::SaveScenario(const char * path) Message(FormatString(LoadResStr("IDS_CNS_SAVEASERROR"),path).getData()); return false; } - SCopy(path, Game.ScenarioFilename); + SCopy(path, Game.ScenarioFilename, MAX_PATH); SetCaptionToFilename(Game.ScenarioFilename); if (!Game.ScenarioFile.Open(Game.ScenarioFilename)) { - Message(FormatString(LoadResStr("IDS_CNS_SAVEASERROR"),Game.ScenarioFilename).getData()); + Message(FormatString(LoadResStr("IDS_CNS_SAVEASERROR"), Game.ScenarioFilename).getData()); + return false; + } + } + else + { + // Do not save to temp network file + if (Game.TempScenarioFile && ItemIdentical(Game.TempScenarioFile.getData(), Game.ScenarioFilename)) + { + Message(LoadResStr("IDS_CNS_NONETREFSAVE")); return false; } } diff --git a/src/game/C4Game.cpp b/src/game/C4Game.cpp index 5139b9d65..a9b35ef3f 100644 --- a/src/game/C4Game.cpp +++ b/src/game/C4Game.cpp @@ -264,9 +264,6 @@ bool C4Game::OpenScenario() void C4Game::CloseScenario() { - // safe scenario file name - char szSzenarioFile[_MAX_PATH + 1]; - SCopy(ScenarioFile.GetFullName().getData(), szSzenarioFile, _MAX_PATH); // close scenario ScenarioFile.Close(); GroupSet.CloseFolders(); @@ -274,8 +271,8 @@ void C4Game::CloseScenario() // remove if temporary if (TempScenarioFile) { - EraseItem(szSzenarioFile); - TempScenarioFile = false; + EraseItem(TempScenarioFile.getData()); + TempScenarioFile.Clear(); } // clear scenario section // this removes any temp files, which may yet need to be used by any future features @@ -414,7 +411,7 @@ bool C4Game::Init() // open new scenario SCopy(szScenario, ScenarioFilename, _MAX_PATH); if (!OpenScenario()) return false; - TempScenarioFile = true; + TempScenarioFile.Copy(ScenarioFilename); // get everything else if (!Parameters.GameRes.RetrieveFiles()) return false; diff --git a/src/game/C4Game.h b/src/game/C4Game.h index 72658c17b..477b2bd7e 100644 --- a/src/game/C4Game.h +++ b/src/game/C4Game.h @@ -117,7 +117,7 @@ public: bool Record; StdStrBuf RecordDumpFile; StdStrBuf RecordStream; - bool TempScenarioFile; + StdStrBuf TempScenarioFile; bool fPreinited; // set after PreInit has been called; unset by Clear and Default int32_t FrameCounter; int32_t iTick2,iTick3,iTick5,iTick10,iTick35,iTick255,iTick1000;