New quests work

This commit is contained in:
nordsoft committed 2023-10-10 23:44:29 +02:00
1 parent 63bdfb8ff6
commit bb238f9b72
13 files changed
+294 -523

No files matched your search

+13 -20
View File
@@ -37,39 +37,32 @@ TGoalVec CompleteQuest::decompose() const
}
logAi->debug("Trying to realize quest: %s", questToString());
switch(q.quest->missionType)
{
case CQuest::MISSION_ART:
if(!q.quest->artifacts.empty())
return missionArt();
case CQuest::MISSION_HERO:
if(!q.quest->heroes.empty())
return missionHero();
case CQuest::MISSION_ARMY:
if(!q.quest->creatures.empty())
return missionArmy();
case CQuest::MISSION_RESOURCES:
if(q.quest->resources.nonZero())
return missionResources();
case CQuest::MISSION_KILL_HERO:
case CQuest::MISSION_KILL_CREATURE:
if(q.quest->killTarget >= 0)
return missionDestroyObj();
case CQuest::MISSION_PRIMARY_STAT:
return missionIncreasePrimaryStat();
for(auto & s : q.quest->primary)
if(s)
return missionIncreasePrimaryStat();
case CQuest::MISSION_LEVEL:
if(q.quest->heroLevel > 0)
return missionLevel();
case CQuest::MISSION_PLAYER:
break;
case CQuest::MISSION_KEYMASTER:
if(q.quest->questName == CQuest::missionName(10))
return missionKeymaster();
} //end of switch
return TGoalVec();
}
@@ -104,7 +97,7 @@ std::string CompleteQuest::questToString() const
return "find " + VLC->generaltexth->tentColors[q.obj->subID] + " keymaster tent";
}
if(q.quest->missionType == CQuest::MISSION_NONE)
if(q.quest->questName == CQuest::missionName(0))
return "inactive quest";
MetaString ms;
@@ -130,7 +130,7 @@ namespace AIPathfinding
auto questInfo = QuestInfo(questObj->quest, destination.nodeObject, destination.coord);
QuestAction questAction(questInfo);
if(destination.nodeObject->ID == Obj::QUEST_GUARD && questObj->quest->missionType == CQuest::MISSION_NONE)
if(destination.nodeObject->ID == Obj::QUEST_GUARD && questObj->quest->questName == CQuest::missionName(0))
{
return false;
}
+13 -20
View File
@@ -25,41 +25,34 @@ TGoalVec CompleteQuest::getAllPossibleSubgoals()
{
TGoalVec solutions;
if(q.quest->missionType && q.quest->progress != CQuest::COMPLETE)
if(q.quest->progress != CQuest::COMPLETE)
{
logAi->debug("Trying to realize quest: %s", questToString());
switch(q.quest->missionType)
{
case CQuest::MISSION_ART:
if(!q.quest->artifacts.empty())
return missionArt();
case CQuest::MISSION_HERO:
if(!q.quest->heroes.empty())
return missionHero();
case CQuest::MISSION_ARMY:
if(!q.quest->creatures.empty())
return missionArmy();
case CQuest::MISSION_RESOURCES:
if(q.quest->resources.nonZero())
return missionResources();
case CQuest::MISSION_KILL_HERO:
case CQuest::MISSION_KILL_CREATURE:
if(q.quest->killTarget >= 0)
return missionDestroyObj();
case CQuest::MISSION_PRIMARY_STAT:
return missionIncreasePrimaryStat();
for(auto & s : q.quest->primary)
if(s)
return missionIncreasePrimaryStat();
case CQuest::MISSION_LEVEL:
if(q.quest->heroLevel > 0)
return missionLevel();
case CQuest::MISSION_PLAYER:
break;
case CQuest::MISSION_KEYMASTER:
if(q.quest->questName == CQuest::missionName(10))
return missionKeymaster();
} //end of switch
}
return TGoalVec();
@@ -67,7 +60,7 @@ TGoalVec CompleteQuest::getAllPossibleSubgoals()
TSubgoal CompleteQuest::whatToDoToAchieve()
{
if(q.quest->missionType == CQuest::MISSION_NONE)
if(q.quest->questName == CQuest::missionName(0))
{
throw cannotFulfillGoalException("Can not complete inactive quest");
}
@@ -101,7 +94,7 @@ std::string CompleteQuest::completeMessage() const
std::string CompleteQuest::questToString() const
{
if(q.quest->missionType == CQuest::MISSION_NONE)
if(q.quest->questName == CQuest::missionName(0))
return "inactive quest";
MetaString ms;