diff --git a/lib/rmg/CRmgTemplate.cpp b/lib/rmg/CRmgTemplate.cpp index 8dbfef155..f42367dbe 100644 --- a/lib/rmg/CRmgTemplate.cpp +++ b/lib/rmg/CRmgTemplate.cpp @@ -728,8 +728,6 @@ void CRmgTemplate::serializeJson(JsonSerializeFormat & handler) } } } - if(!handler.saving) - afterLoad(); } std::set CRmgTemplate::inheritTerrainType(std::shared_ptr zone, uint32_t iteration /* = 0 */) diff --git a/lib/rmg/CRmgTemplate.h b/lib/rmg/CRmgTemplate.h index 4b179d119..bc25263d0 100644 --- a/lib/rmg/CRmgTemplate.h +++ b/lib/rmg/CRmgTemplate.h @@ -245,6 +245,7 @@ public: void validate() const; /// Tests template on validity and throws exception on failure void serializeJson(JsonSerializeFormat & handler); + void afterLoad(); private: std::string id; @@ -255,7 +256,6 @@ private: std::vector connectedZoneIds; std::set allowedWaterContent; - void afterLoad(); std::set inheritTerrainType(std::shared_ptr zone, uint32_t iteration = 0); std::map inheritMineTypes(std::shared_ptr zone, uint32_t iteration = 0); std::vector inheritTreasureInfo(std::shared_ptr zone, uint32_t iteration = 0); diff --git a/lib/rmg/CRmgTemplateStorage.cpp b/lib/rmg/CRmgTemplateStorage.cpp index 1998c6da6..9947782bf 100644 --- a/lib/rmg/CRmgTemplateStorage.cpp +++ b/lib/rmg/CRmgTemplateStorage.cpp @@ -26,6 +26,14 @@ void CRmgTemplateStorage::loadObject(std::string scope, std::string name, const loadObject(scope, name, data); } +void CRmgTemplateStorage::afterLoadFinalization() +{ + for (auto& temp : templates) + { + temp.second.afterLoad(); + } +} + void CRmgTemplateStorage::loadObject(std::string scope, std::string name, const JsonNode & data) { try diff --git a/lib/rmg/CRmgTemplateStorage.h b/lib/rmg/CRmgTemplateStorage.h index 64c2e2f17..2837fc262 100644 --- a/lib/rmg/CRmgTemplateStorage.h +++ b/lib/rmg/CRmgTemplateStorage.h @@ -30,6 +30,8 @@ public: /// loads single object into game. Scope is namespace of this object, same as name of source mod virtual void loadObject(std::string scope, std::string name, const JsonNode & data) override; virtual void loadObject(std::string scope, std::string name, const JsonNode & data, size_t index) override; + + void afterLoadFinalization() override; const CRmgTemplate* getTemplate(const std::string & templateName) const; std::vector getTemplates() const; diff --git a/lib/rmg/modificators/TerrainPainter.cpp b/lib/rmg/modificators/TerrainPainter.cpp index b38a9dc33..9ea5db38d 100644 --- a/lib/rmg/modificators/TerrainPainter.cpp +++ b/lib/rmg/modificators/TerrainPainter.cpp @@ -79,8 +79,8 @@ void TerrainPainter::initTerrainType() { if (terrain->isLand() && terrain->isPassable()) { - if (terrain->isSurface() && !zone.isUnderground() || - terrain->isUnderground() && zone.isUnderground()) + if ((terrain->isSurface() && !zone.isUnderground()) || + (terrain->isUnderground() && zone.isUnderground())) { terrainTypes.insert(terrain->getId()); }