MCPcopy Create free account
hub / github.com/EQEmu/EQEmu / SharedTaskSelector

Method SharedTaskSelector

zone/task_manager.cpp:691–759  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

689}
690
691void TaskManager::SharedTaskSelector(Client* client, Mob* mob, const std::vector<int>& tasks, bool ignore_cooldown)
692{
693 LogTasks("SharedTaskSelector called with size [{}]", tasks.size());
694
695 if (tasks.empty()) {
696 return;
697 }
698
699 if (!ignore_cooldown && client->HasTaskRequestCooldownTimer()) {
700 client->SendTaskRequestCooldownTimerMessage();
701 return;
702 }
703
704 // check if requester already has a shared task (no need to query group/raid members if so)
705 if (client->GetTaskState()->HasActiveSharedTask()) {
706 client->MessageString(Chat::Red, TaskStr::REQUEST_HAVE);
707 return;
708 }
709
710 // get group/raid member character data from db (need to query for character ids)
711 // todo: group/raids need refactored to avoid queries and ignore offline members (through world)
712 auto request = SharedTask::GetRequestCharacters(database, client->CharacterID());
713
714 // check if any group/raid member already has a shared task (already checked solo character)
715 bool validation_failed = false;
716 if (request.group_type != SharedTaskRequestGroupType::Solo) {
717 auto shared_task_members = SharedTaskMembersRepository::GetWhere(
718 database,
719 fmt::format("character_id IN ({}) LIMIT 1", Strings::Join(request.character_ids, ",")));
720
721 if (!shared_task_members.empty()) {
722 validation_failed = true;
723
724 auto it = std::find_if(request.members.begin(), request.members.end(),
725 [&](const SharedTaskMember& member) {
726 return member.character_id == shared_task_members.front().character_id;
727 });
728
729 if (it != request.members.end()) {
730 if (request.group_type == SharedTaskRequestGroupType::Group) {
731 client->MessageString(Chat::Red, TaskStr::REQUEST_GROUP_HAS, it->character_name.c_str());
732 }
733 else {
734 client->MessageString(Chat::Red, TaskStr::REQUEST_RAID_HAS, it->character_name.c_str());
735 }
736 }
737 }
738 }
739
740 if (!validation_failed) {
741 // run type and level filters on task selections
742 std::vector<int> task_list;
743
744 for (int i = 0; i < tasks.size() && task_list.size() < MAXCHOOSERENTRIES; ++i) {
745 if (CanOfferSharedTask(tasks[i], request))
746 {
747 task_list.push_back(tasks[i]);
748 }

Callers

nothing calls this directly

Calls 12

HasActiveSharedTaskMethod · 0.80
GetTaskStateMethod · 0.80
push_backMethod · 0.80
sizeMethod · 0.45
emptyMethod · 0.45
MessageStringMethod · 0.45
CharacterIDMethod · 0.45
beginMethod · 0.45
endMethod · 0.45
c_strMethod · 0.45

Tested by

no test coverage detected