Procházet zdrojové kódy

Fix initialization order of Seer Huts and Creatures - Seer Hut might be
initialized before creature that its quest is linked to

Ivan Savenko před 1 rokem
rodič
revize
1d430d0328
2 změnil soubory, kde provedl 8 přidání a 9 odebrání
  1. 7 8
      lib/mapObjects/CQuest.cpp
  2. 1 1
      lib/mapObjects/CQuest.h

+ 7 - 8
lib/mapObjects/CQuest.cpp

@@ -208,9 +208,9 @@ void CQuest::addTextReplacements(MetaString & text, std::vector<Component> & com
 		addKillTargetReplacements(text);
 	}
 	
-	if(killTarget != ObjectInstanceID::NONE && stackToKill.type)
+	if(killTarget != ObjectInstanceID::NONE && stackToKill != CreatureID::NONE)
 	{
-		components.emplace_back(ComponentType::CREATURE, stackToKill.getId(), stackToKill.getCount());
+		components.emplace_back(ComponentType::CREATURE, stackToKill);
 		addKillTargetReplacements(text);
 	}
 	
@@ -314,7 +314,7 @@ void CQuest::defineQuestName()
 	if(!mission.spells.empty()) questName = CQuest::missionName(2);
 	if(!mission.secondary.empty()) questName = CQuest::missionName(2);
 	if(killTarget != ObjectInstanceID::NONE && !heroName.empty()) questName = CQuest::missionName(3);
-	if(killTarget != ObjectInstanceID::NONE && stackToKill.getType()) questName = CQuest::missionName(4);
+	if(killTarget != ObjectInstanceID::NONE && stackToKill != CreatureID::NONE) questName = CQuest::missionName(4);
 	if(!mission.artifacts.empty()) questName = CQuest::missionName(5);
 	if(!mission.creatures.empty()) questName = CQuest::missionName(6);
 	if(mission.resources.nonZero()) questName = CQuest::missionName(7);
@@ -327,9 +327,9 @@ void CQuest::addKillTargetReplacements(MetaString &out) const
 {
 	if(!heroName.empty())
 		out.replaceTextID(heroName);
-	if(stackToKill.type)
+	if(stackToKill != CreatureID::NONE)
 	{
-		out.replaceName(stackToKill);
+		out.replaceNamePlural(stackToKill);
 		out.replaceRawString(VLC->generaltexth->arraytxt[147+stackDirection]);
 	}
 }
@@ -429,9 +429,8 @@ void CGSeerHut::setObjToKill()
 	
 	if(getCreatureToKill(true))
 	{
-		quest->stackToKill = getCreatureToKill(false)->getStack(SlotID(0)); //FIXME: stacks tend to disappear (desync?) on server :?
-		assert(quest->stackToKill.type);
-		quest->stackToKill.count = 0; //no count in info window
+		quest->stackToKill = getCreatureToKill(false)->getCreature();
+		assert(quest->stackToKill != CreatureID::NONE);
 		quest->stackDirection = checkDirection();
 	}
 	else if(getHeroToKill(true))

+ 1 - 1
lib/mapObjects/CQuest.h

@@ -40,7 +40,7 @@ public:
 	// needed for messages / hover text
 	ui8 textOption;
 	ui8 completedOption;
-	CStackBasicDescriptor stackToKill;
+	CreatureID stackToKill;
 	ui8 stackDirection;
 	std::string heroName; //backup of hero name
 	HeroTypeID heroPortrait;