[Expeditions] Store members on dynamic zone (#1358)

This moves members from expeditions so other systems can use them

Replace expedition_members table with dynamic_zone_members

Move 'EnableInDynamicZoneStatus' rule to DynamicZone namespace

Modify #dz list to show dz members (not instance players) and type name

Move various queries to repository methods
This commit is contained in:
hg
2021-05-24 22:14:32 -04:00
committed by GitHub
parent e8b94a11f1
commit 15328196e2
31 changed files with 683 additions and 585 deletions
+35 -4
View File
@@ -184,11 +184,11 @@ public:
character_data.name,
MAX(expeditions.id)
FROM character_data
LEFT JOIN expedition_members
ON character_data.id = expedition_members.character_id
AND expedition_members.is_current_member = TRUE
LEFT JOIN dynamic_zone_members
ON character_data.id = dynamic_zone_members.character_id
AND dynamic_zone_members.is_current_member = TRUE
LEFT JOIN expeditions
ON expedition_members.expedition_id = expeditions.id
ON dynamic_zone_members.dynamic_zone_id = expeditions.dynamic_zone_id
WHERE character_data.name IN ({})
GROUP BY character_data.id
ORDER BY FIELD(character_data.name, {})
@@ -214,6 +214,37 @@ public:
return entries;
}
static uint32_t GetIDByMemberID(Database& db, uint32_t character_id)
{
if (character_id == 0)
{
return 0;
}
uint32_t expedition_id = 0;
auto results = db.QueryDatabase(fmt::format(SQL(
SELECT
expeditions.id
FROM expeditions
INNER JOIN dynamic_zone_members
ON expeditions.dynamic_zone_id = dynamic_zone_members.dynamic_zone_id
WHERE
dynamic_zone_members.character_id = {}
AND dynamic_zone_members.is_current_member = TRUE;
),
character_id
));
if (results.Success() && results.RowCount() > 0)
{
auto row = results.begin();
expedition_id = std::strtoul(row[0], nullptr, 10);
}
return expedition_id;
}
};
#endif //EQEMU_EXPEDITIONS_REPOSITORY_H