Browse Source

Modding-related bugfixes:
- hero classes will be loaded correctly
- objects without index will have correctly assigned ID's

Ivan Savenko 11 years ago
parent
commit
db221829aa
3 changed files with 6 additions and 4 deletions
  1. 1 1
      lib/CHeroHandler.cpp
  2. 1 0
      lib/CModHandler.cpp
  3. 4 3
      lib/mapObjects/CObjectClassesHandler.cpp

+ 1 - 1
lib/CHeroHandler.cpp

@@ -199,7 +199,7 @@ void CHeroClassHandler::loadObject(std::string scope, std::string name, const Js
 
 	VLC->modh->identifiers.requestIdentifier(scope, "object", "hero", [=](si32 index)
 	{
-		JsonNode classConf;
+		JsonNode classConf = data["mapObject"];
 		classConf["heroClass"].String() = name;
 		classConf.setMeta(scope);
 		VLC->objtypeh->loadSubObject(name, classConf, index, object->id);

+ 1 - 0
lib/CModHandler.cpp

@@ -310,6 +310,7 @@ bool CContentHandler::ContentTypeHandler::preloadModData(std::string modName, st
 			if (remoteName == modName)
 				logGlobal->warnStream() << "Redundant namespace definition for " << objectName;
 
+			logGlobal->traceStream() << "Patching object " << objectName << " (" << remoteName << ") from " << modName;
 			JsonNode & remoteConf = modData[remoteName].patches[objectName];
 
 			JsonUtils::merge(remoteConf, entry.second);

+ 4 - 3
lib/mapObjects/CObjectClassesHandler.cpp

@@ -140,7 +140,7 @@ si32 selectNextID(const JsonNode & fixedID, const Map & map, si32 defaultID)
 
 	if (map.empty())
 		return defaultID; // no objects loaded, keep gap for H3M objects
-	if (map.rbegin()->first > defaultID)
+	if (map.rbegin()->first >= defaultID)
 		return map.rbegin()->first + 1; // some modded objects loaded, return next available
 
 	return defaultID; // some H3M objects loaded, first modded found
@@ -172,9 +172,10 @@ void CObjectClassesHandler::loadObjectEntry(const JsonNode & entry, ObjectContai
 		}
 		legacyTemplates.erase(range.first, range.second);
 	}
-	
-	obj->objects[id] = handler;
+
 	logGlobal->debugStream() << "Loaded object " << obj->id << ":" << id;
+	assert(!obj->objects.count(id)); // DO NOT override
+	obj->objects[id] = handler;
 }
 
 CObjectClassesHandler::ObjectContainter * CObjectClassesHandler::loadFromJson(const JsonNode & json)