1
0
mirror of https://github.com/vcmi/vcmi.git synced 2025-11-25 22:42:04 +02:00

Fix initialization order of Seer Huts and Creatures - Seer Hut might be

initialized before creature that its quest is linked to
This commit is contained in:
Ivan Savenko
2023-11-12 19:18:00 +02:00
parent 071fb97b33
commit 1d430d0328
2 changed files with 8 additions and 9 deletions

View File

@@ -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))