Skip to content

Commit

Permalink
Travel: Bots now look at the quests of all party member bots to pick …
Browse files Browse the repository at this point in the history
…a good destination
  • Loading branch information
mostlikely4r committed Feb 14, 2025
1 parent ec4e1b1 commit c26defb
Showing 1 changed file with 43 additions and 31 deletions.
74 changes: 43 additions & 31 deletions playerbot/strategy/actions/ChooseTravelTargetAction.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1113,55 +1113,67 @@ bool RequestQuestTravelTargetAction::Execute(Event& event)

ai->TellDebug(ai->GetMaster(), "Getting new destination ranges for travel quest", "debug travel");

QuestStatusMap& questMap = bot->getQuestStatusMap();

std::vector<std::tuple<uint32, int32, float>> destinationFetches = { {(uint32)TravelDestinationPurpose::QuestGiver, 0, 400 + bot->GetLevel() * 10} };

bool onlyClassQuest = !urand(0, 10);

uint32 questObjectiveFlag = (uint32)TravelDestinationPurpose::QuestObjective1 | (uint32)TravelDestinationPurpose::QuestObjective2 | (uint32)TravelDestinationPurpose::QuestObjective3 | (uint32)TravelDestinationPurpose::QuestObjective4;

//Find destinations related to the active quests.
for (auto& [questId, questStatus] : questMap)
for (ObjectGuid guid : AI_VALUE(std::list<ObjectGuid>, "group members"))
{
uint32 flag = 0;
if (questStatus.m_rewarded)
Player* player = sObjectMgr.GetPlayer(guid);

if (!player)
continue;

Quest const* questTemplate = sObjectMgr.GetQuestTemplate(questId);
if (player->GetMapId() != bot->GetMapId())
continue;

if (!questTemplate)
if (!player->GetPlayerbotAI())
continue;

if (bot->CanRewardQuest(questTemplate, false))
flag = (uint32)TravelDestinationPurpose::QuestTaker;
else
QuestStatusMap& questMap = player->getQuestStatusMap();

bool onlyClassQuest = bot == player && !urand(0, 10);

//Find destinations related to the active quests.
for (auto& [questId, questStatus] : questMap)
{
for (uint32 objective = 0; objective < 4; objective++)
uint32 flag = 0;
if (questStatus.m_rewarded)
continue;

Quest const* questTemplate = sObjectMgr.GetQuestTemplate(questId);

if (!questTemplate)
continue;

if (player->CanRewardQuest(questTemplate, false))
flag = (uint32)TravelDestinationPurpose::QuestTaker;
else
{
TravelDestinationPurpose purposeFlag = (TravelDestinationPurpose)(1 << (objective + 1));
for (uint32 objective = 0; objective < 4; objective++)
{
TravelDestinationPurpose purposeFlag = (TravelDestinationPurpose)(1 << (objective + 1));

std::vector<std::string> qualifier = { std::to_string(questId), std::to_string(objective) };
std::vector<std::string> qualifier = { std::to_string(questId), std::to_string(objective) };

if (AI_VALUE2(bool, "group or", "following party,near leader,need quest objective::" + Qualified::MultiQualify(qualifier, ","))) //Noone needs the quest objective.
flag = flag | (uint32)purposeFlag;
if (AI_VALUE2(bool, "group or", "following party,near leader,need quest objective::" + Qualified::MultiQualify(qualifier, ","))) //Noone needs the quest objective.
flag = flag | (uint32)purposeFlag;
}
}
}

if (!flag)
continue;
if (!flag)
continue;

destinationFetches.push_back({ flag, questId,0 });
destinationFetches.push_back({ flag, questId,0 });

if (onlyClassQuest && destinationFetches.size() > 1) //Only do class quests if we have any.
{
Quest const* firstQuest = sObjectMgr.GetQuestTemplate(std::get<1>(destinationFetches[1]));
if (onlyClassQuest && destinationFetches.size() > 1) //Only do class quests if we have any.
{
Quest const* firstQuest = sObjectMgr.GetQuestTemplate(std::get<1>(destinationFetches[1]));

if (firstQuest->GetRequiredClasses() && !questTemplate->GetRequiredClasses())
continue;
if (firstQuest->GetRequiredClasses() && !questTemplate->GetRequiredClasses())
continue;

if (!firstQuest->GetRequiredClasses() && questTemplate->GetRequiredClasses())
destinationFetches = { destinationFetches.front() };
if (!firstQuest->GetRequiredClasses() && questTemplate->GetRequiredClasses())
destinationFetches = { destinationFetches.front() };
}
}
}

Expand Down

0 comments on commit c26defb

Please sign in to comment.