From fcce51ab6778bf91af8ad6e826833c3bf0f1c183 Mon Sep 17 00:00:00 2001 From: Salatiel Date: Sat, 21 Nov 2020 20:58:44 -0300 Subject: [PATCH 1/4] Add allowsavebasemap var --- src/engine/worldio.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/engine/worldio.cpp b/src/engine/worldio.cpp index fdc71d5..64e527f 100644 --- a/src/engine/worldio.cpp +++ b/src/engine/worldio.cpp @@ -874,13 +874,15 @@ void loadvslots(stream *f, int numvslots) delete[] prev; } +VARP(allowsavebasemap, 0, 0, 1); + bool save_world(const char *mname, bool nolms) { if(!*mname) mname = game::getclientmap(); setmapfilenames(mname); if(savebak) backup(ogzname, bakname); stream *f = opengzfile(ogzname, "wb"); - if(!f) { conoutf(CON_WARN, "could not write map to %s", ogzname); return false; } + if(!f || (!allowsavebasemap && strstr(id->getstr(), mname))) { conoutf(CON_WARN, "could not write map to %s", ogzname); return false; } int numvslots = vslots.length(); if(!nolms && !multiplayer(false)) From 0d58190728a27ae46b12a684109b50af7f304b2f Mon Sep 17 00:00:00 2001 From: Salatiel Date: Sat, 21 Nov 2020 21:17:09 -0300 Subject: [PATCH 2/4] Fix missing readident --- src/engine/worldio.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/engine/worldio.cpp b/src/engine/worldio.cpp index 64e527f..dc3f3f2 100644 --- a/src/engine/worldio.cpp +++ b/src/engine/worldio.cpp @@ -882,6 +882,7 @@ bool save_world(const char *mname, bool nolms) setmapfilenames(mname); if(savebak) backup(ogzname, bakname); stream *f = opengzfile(ogzname, "wb"); + ident *id = readident("allmaps"); if(!f || (!allowsavebasemap && strstr(id->getstr(), mname))) { conoutf(CON_WARN, "could not write map to %s", ogzname); return false; } int numvslots = vslots.length(); From c6f7c344161d68a8f6d0c8a8b06dbdfeb34e2033 Mon Sep 17 00:00:00 2001 From: SalatielSauer Date: Fri, 11 Dec 2020 21:06:14 -0300 Subject: [PATCH 3/4] Use listincludes to check 'allmaps' list --- src/engine/worldio.cpp | 2 +- src/shared/iengine.h | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/engine/worldio.cpp b/src/engine/worldio.cpp index dc3f3f2..56be30f 100644 --- a/src/engine/worldio.cpp +++ b/src/engine/worldio.cpp @@ -883,7 +883,7 @@ bool save_world(const char *mname, bool nolms) if(savebak) backup(ogzname, bakname); stream *f = opengzfile(ogzname, "wb"); ident *id = readident("allmaps"); - if(!f || (!allowsavebasemap && strstr(id->getstr(), mname))) { conoutf(CON_WARN, "could not write map to %s", ogzname); return false; } + if (!f || (!allowsavebasemap && listincludes(id->getstr(), mname, strlen(mname)) != -1)) { conoutf(CON_WARN, "could not write map to %s", ogzname); return false; } int numvslots = vslots.length(); if(!nolms && !multiplayer(false)) diff --git a/src/shared/iengine.h b/src/shared/iengine.h index 167caad..a3d03b5 100644 --- a/src/shared/iengine.h +++ b/src/shared/iengine.h @@ -162,6 +162,7 @@ extern bool validateblock(const char *s); extern void explodelist(const char *s, vector &elems, int limit = -1); extern char *indexlist(const char *s, int pos); extern int listlen(const char *s); +extern int listincludes(const char* list, const char* needle, int needlelen); extern void printvar(ident *id); extern void printvar(ident *id, int i); extern void printfvar(ident *id, float f); From a612cbfad86e85cf9e184e87da1454ae7312300d Mon Sep 17 00:00:00 2001 From: SalatielSauer Date: Sun, 13 Dec 2020 13:09:43 -0300 Subject: [PATCH 4/4] Fix typos --- src/engine/worldio.cpp | 2 +- src/shared/iengine.h | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/engine/worldio.cpp b/src/engine/worldio.cpp index 56be30f..a754ba5 100644 --- a/src/engine/worldio.cpp +++ b/src/engine/worldio.cpp @@ -883,7 +883,7 @@ bool save_world(const char *mname, bool nolms) if(savebak) backup(ogzname, bakname); stream *f = opengzfile(ogzname, "wb"); ident *id = readident("allmaps"); - if (!f || (!allowsavebasemap && listincludes(id->getstr(), mname, strlen(mname)) != -1)) { conoutf(CON_WARN, "could not write map to %s", ogzname); return false; } + if(!f || (!allowsavebasemap && listincludes(id->getstr(), mname, strlen(mname)) != -1)) { conoutf(CON_WARN, "could not write map to %s", ogzname); return false; } int numvslots = vslots.length(); if(!nolms && !multiplayer(false)) diff --git a/src/shared/iengine.h b/src/shared/iengine.h index a3d03b5..19b310e 100644 --- a/src/shared/iengine.h +++ b/src/shared/iengine.h @@ -162,7 +162,7 @@ extern bool validateblock(const char *s); extern void explodelist(const char *s, vector &elems, int limit = -1); extern char *indexlist(const char *s, int pos); extern int listlen(const char *s); -extern int listincludes(const char* list, const char* needle, int needlelen); +extern int listincludes(const char *list, const char *needle, int needlelen); extern void printvar(ident *id); extern void printvar(ident *id, int i); extern void printfvar(ident *id, float f); @@ -227,7 +227,7 @@ static inline bool insideworld(const ivec &o) } // world -extern char* mapid; +extern char *mapid; extern bool emptymap(int factor, bool force, const char *mname = "", bool usecfg = true); extern bool enlargemap(bool force); extern int findentity(int type, int index = 0, int attr1 = -1, int attr2 = -1);