void CGSeerHut::finishQuest(const CGHeroInstance * h, ui32 accept) const { if (accept) { switch (quest->missionType) { case CQuest::MISSION_ART: for (auto & elem : quest->m5arts) { cb->removeArtifact(ArtifactLocation(h, h->getArtPos(elem, false))); } break; case CQuest::MISSION_ARMY: cb->takeCreatures(h->id, quest->m6creatures); break; case CQuest::MISSION_RESOURCES: for (int i = 0; i < 7; ++i) { cb->giveResource(h->getOwner(), static_cast<Res::ERes>(i), -quest->m7resources[i]); } break; default: break; } cb->setObjProperty (id, 10, CQuest::COMPLETE); //mission complete completeQuest(h); //make sure to remove QuestGuard at the very end } }
void CGSeerHut::finishQuest(const CGHeroInstance * h, ui32 accept) const { if (accept) { switch (quest->missionType) { case CQuest::MISSION_ART: for (auto & elem : quest->m5arts) { if(!h->hasArt(elem)) { // first we need to disassemble this backpack artifact auto assembly = h->getAssemblyByConstituent(elem); assert(assembly); for(auto & ci : assembly->constituentsInfo) { cb->giveHeroNewArtifact(h, ci.art->artType, ArtifactPosition::PRE_FIRST); } // remove the assembly cb->removeArtifact(ArtifactLocation(h, h->getArtPos(assembly))); } cb->removeArtifact(ArtifactLocation(h, h->getArtPos(elem, false))); } break; case CQuest::MISSION_ARMY: cb->takeCreatures(h->id, quest->m6creatures); break; case CQuest::MISSION_RESOURCES: for (int i = 0; i < 7; ++i) { cb->giveResource(h->getOwner(), static_cast<Res::ERes>(i), -quest->m7resources[i]); } break; default: break; } cb->setObjProperty (id, CGSeerHut::OBJPROP_VISITED, CQuest::COMPLETE); //mission complete completeQuest(h); //make sure to remove QuestGuard at the very end } }