mirror of
https://github.com/EQEmu/Server.git
synced 2026-05-17 03:08:26 +00:00
[Shared Tasks] Cleanup shared task request and remove (#2341)
Functionally nothing should change in this patch. This refactors a lot of formatting and code duplication in requests and member removals. The long SharedTaskMessage namespace and its constants were contributing to a lot of formatting that was difficult to read. These were shortened since they're not all shared task specific anyway (though they should probably just be moved to string_ids.h with other eqstrs now) Shared task requests were refactored a little to remove an unnecessary function that filled potential members. The separate functions used for /taskquit and /taskremove were also combined into a single function to remove a member while preserving live message differences.
This commit is contained in:
+21
-8
@@ -52,21 +52,22 @@ void SharedTask::SetDbSharedTask(const SharedTasksRepository::SharedTasks &m_db_
|
||||
SharedTask::m_db_shared_task = m_db_shared_task;
|
||||
}
|
||||
|
||||
SharedTaskRequestCharacters SharedTask::GetRequestCharacters(Database &db, uint32_t requested_character_id)
|
||||
SharedTaskRequest SharedTask::GetRequestCharacters(Database &db, uint32_t requested_character_id)
|
||||
{
|
||||
SharedTaskRequestCharacters request{};
|
||||
// todo: group/raid refactors to check online members without querying
|
||||
SharedTaskRequest request{};
|
||||
|
||||
request.group_type = SharedTaskRequestGroupType::Group;
|
||||
request.characters = CharacterDataRepository::GetWhere(
|
||||
auto characters = CharacterDataRepository::GetWhere(
|
||||
db, fmt::format(
|
||||
"id IN (select charid from group_id where groupid = (select groupid from group_id where charid = {}))",
|
||||
requested_character_id
|
||||
)
|
||||
);
|
||||
|
||||
if (request.characters.empty()) {
|
||||
if (characters.empty()) {
|
||||
request.group_type = SharedTaskRequestGroupType::Raid;
|
||||
request.characters = CharacterDataRepository::GetWhere(
|
||||
characters = CharacterDataRepository::GetWhere(
|
||||
db, fmt::format(
|
||||
"id IN (select charid from raid_members where raidid = (select raidid from raid_members where charid = {}))",
|
||||
requested_character_id
|
||||
@@ -74,10 +75,10 @@ SharedTaskRequestCharacters SharedTask::GetRequestCharacters(Database &db, uint3
|
||||
);
|
||||
}
|
||||
|
||||
if (request.characters.empty()) // solo request
|
||||
if (characters.empty()) // solo request
|
||||
{
|
||||
request.group_type = SharedTaskRequestGroupType::Solo;
|
||||
request.characters = CharacterDataRepository::GetWhere(
|
||||
characters = CharacterDataRepository::GetWhere(
|
||||
db, fmt::format(
|
||||
"id = {} LIMIT 1",
|
||||
requested_character_id
|
||||
@@ -85,12 +86,24 @@ SharedTaskRequestCharacters SharedTask::GetRequestCharacters(Database &db, uint3
|
||||
);
|
||||
}
|
||||
|
||||
request.leader_id = requested_character_id;
|
||||
request.lowest_level = std::numeric_limits<uint8_t>::max();
|
||||
request.highest_level = 0;
|
||||
for (const auto &character: request.characters) {
|
||||
request.members.reserve(characters.size());
|
||||
for (const auto& character: characters)
|
||||
{
|
||||
request.lowest_level = std::min(request.lowest_level, character.level);
|
||||
request.highest_level = std::max(request.highest_level, character.level);
|
||||
request.character_ids.emplace_back(character.id); // convenience
|
||||
|
||||
SharedTaskMember member = {};
|
||||
member.character_id = character.id;
|
||||
member.character_name = character.name;
|
||||
if (character.id == requested_character_id)
|
||||
{
|
||||
member.is_leader = true;
|
||||
}
|
||||
request.members.emplace_back(member);
|
||||
}
|
||||
|
||||
return request;
|
||||
|
||||
Reference in New Issue
Block a user