浏览代码

Fix initialization of hero type in map editor

Ivan Savenko 1 年之前
父节点
当前提交
e221cdccab
共有 2 个文件被更改,包括 17 次插入1 次删除
  1. 5 1
      lib/mapObjects/CGHeroInstance.cpp
  2. 12 0
      mapeditor/inspector/inspector.cpp

+ 5 - 1
lib/mapObjects/CGHeroInstance.cpp

@@ -309,7 +309,11 @@ const CHeroClass * CGHeroInstance::getHeroClass() const
 
 HeroClassID CGHeroInstance::getHeroClassID() const
 {
-	return getHeroType()->heroClass->getId();
+	auto heroType = getHeroTypeID();
+	if (heroType.hasValue())
+		return getHeroType()->heroClass->getId();
+	else
+		return HeroClassID();
 }
 
 const CHero * CGHeroInstance::getHeroType() const

+ 12 - 0
mapeditor/inspector/inspector.cpp

@@ -139,6 +139,18 @@ void Initializer::initialize(CGHeroInstance * o)
 		o->tempOwner = PlayerColor::NEUTRAL;
 	}
 
+	if(o->ID == Obj::HERO)
+	{
+		for(auto const & t : VLC->heroh->objects)
+		{
+			if(t->heroClass->getId() == HeroClassID(o->subID))
+			{
+				o->subID = t->getId();
+				break;
+			}
+		}
+	}
+
 	if(o->getHeroTypeID().hasValue())
 	{
 		o->gender = o->getHeroType()->gender;