diff --git a/GuildWarsPartySearch.Bot/daily_quests.cpp b/GuildWarsPartySearch.Bot/daily_quests.cpp new file mode 100644 index 0000000..e69de29 diff --git a/GuildWarsPartySearch.Bot/daily_quests.h b/GuildWarsPartySearch.Bot/daily_quests.h new file mode 100644 index 0000000..bf40cc4 --- /dev/null +++ b/GuildWarsPartySearch.Bot/daily_quests.h @@ -0,0 +1,432 @@ + +#include "gw_constants.h" + +namespace DailyQuests { + constexpr size_t ZAISHEN_BOUNTY_COUNT = 66; + constexpr size_t ZAISHEN_MISSION_COUNT = 69; + constexpr size_t ZAISHEN_COMBAT_COUNT = 28; + constexpr size_t ZAISHEN_VANQUISH_COUNT = 136; + constexpr int SECONDSINAWEEK = 604800; + + struct DailyQuest { + GW::Constants::MapID map_id; + GW::Constants::MapID nearest_outpost_id = GW::Constants::MapID::None; + DailyQuest(GW::Constants::MapID _map_id, GW::Constants::MapID _nearest_outpost_id = GW::Constants::MapID::None) { + map_id = _map_id; + nearest_outpost_id = _nearest_outpost_id; + if (nearest_outpost_id == GW::Constants::MapID::None) { + nearest_outpost_id = get_nearest_outpost_id(map_id); + } + } + }; + DailyQuest zaishen_bounty_cycles[] = { + { GW::Constants::MapID::Poisoned_Outcrops }, // Droajam, Mage of the Sands + { GW::Constants::MapID::Nahpui_Quarter_explorable }, // Royen Beastkeeper + { GW::Constants::MapID::Bloodstone_Caves_Level_1 }, // Eldritch Ettin + { GW::Constants::MapID::The_Underworld }, // Vengeful Aatxe + { GW::Constants::MapID::Fronis_Irontoes_Lair_mission }, // Fronis Irontoe + { GW::Constants::MapID::Urgozs_Warren }, // Urgoz + { GW::Constants::MapID::Norrhart_Domains }, // Fenrir + { GW::Constants::MapID::Slavers_Exile_Level_1 }, // Selvetarm + { GW::Constants::MapID::Gyala_Hatchery }, // Mohby Windbeak + { GW::Constants::MapID::The_Underworld }, // Charged Blackness + { GW::Constants::MapID::Majestys_Rest }, // Rotscale + { GW::Constants::MapID::Vloxen_Excavations_Level_1 }, // Zoldark the Unholy + { GW::Constants::MapID::Forum_Highlands }, // Korshek the Immolated + { GW::Constants::MapID::Drakkar_Lake }, // Myish, Lady of the Lake + { GW::Constants::MapID::Frostmaws_Burrows_Level_1 }, // Frostmaw the Kinslayer + { GW::Constants::MapID::Unwaking_Waters }, // Kunvie Firewing + { GW::Constants::MapID::Bogroot_Growths_Level_1 }, // Z'him Monns + { GW::Constants::MapID::Domain_of_Anguish }, // The Greater Darkness + { GW::Constants::MapID::Oolas_Lab_Level_1 }, // TPS Regulator Golem + { GW::Constants::MapID::Ravens_Point_Level_1 }, // Plague of Destruction + { GW::Constants::MapID::Tomb_of_the_Primeval_Kings }, // The Darknesses + { GW::Constants::MapID::Jahai_Bluffs }, // Admiral Kantoh + { GW::Constants::MapID::Sacnoth_Valley }, // Borrguus Blisterbark + { GW::Constants::MapID::Slavers_Exile_Level_1 }, // Forgewight + { GW::Constants::MapID::The_Undercity }, // Baubao Wavewrath + { GW::Constants::MapID::Riven_Earth }, // Joffs the Mitigator + { GW::Constants::MapID::Rragars_Menagerie_Level_1 }, // Rragar Maneater + { GW::Constants::MapID::The_Undercity }, // Chung, the Attuned + { GW::Constants::MapID::Domain_of_Anguish }, // Lord Jadoth + { GW::Constants::MapID::Drakkar_Lake }, // Nulfastu, Earthbound + { GW::Constants::MapID::Sorrows_Furnace }, // The Iron Forgeman + { GW::Constants::MapID::Heart_of_the_Shiverpeaks_Level_1 },// Magmus + { GW::Constants::MapID::Sparkfly_Swamp }, // Mobrin, Lord of the Marsh + { GW::Constants::MapID::Vehtendi_Valley }, // Jarimiya the Unmerciful + { GW::Constants::MapID::Slavers_Exile_Level_1 }, // Duncan the Black + { GW::Constants::MapID::Tahnnakai_Temple_explorable }, // Quansong Spiritspeak + { GW::Constants::MapID::Domain_of_Anguish }, // The Stygian Underlords + { GW::Constants::MapID::Sacnoth_Valley }, // Fozzy Yeoryios + { GW::Constants::MapID::Domain_of_Anguish }, // The Black Beast of Arrgh + { GW::Constants::MapID::Arachnis_Haunt_Level_1 }, // Arachni + { GW::Constants::MapID::The_Underworld }, // The Four Horsemen + { GW::Constants::MapID::Sepulchre_of_Dragrimmar_Level_1 }, // Remnant of Antiquities + { GW::Constants::MapID::Morostav_Trail }, // Arbor Earthcal + { GW::Constants::MapID::Ooze_Pit_mission }, // Prismatic Ooze + { GW::Constants::MapID::The_Fissure_of_Woe }, // Lord Khobay + { GW::Constants::MapID::Crystal_Overlook }, // Jedeh the Mighty + { GW::Constants::MapID::Archipelagos }, // Ssuns, Blessed of Dwayna + { GW::Constants::MapID::Slavers_Exile_Level_1 }, // Justiciar Thommis + { GW::Constants::MapID::Perdition_Rock }, // Harn and Maxine Coldstone + { GW::Constants::MapID::Alcazia_Tangle }, // Pywatt the Swift + { GW::Constants::MapID::Shards_of_Orr_Level_1 }, // Fendi Nin + { GW::Constants::MapID::Ferndale }, // Mungri Magicbox + { GW::Constants::MapID::The_Fissure_of_Woe }, // Priest of Menzies + { GW::Constants::MapID::Catacombs_of_Kathandrax_Level_1 }, // Ilsundur, Lord of Fire + { GW::Constants::MapID::Prophets_Path }, // Kepkhet Marrowfeast + { GW::Constants::MapID::Barbarous_Shore }, // Commander Wahli + { GW::Constants::MapID::The_Deep }, // Kanaxai + { GW::Constants::MapID::Bogroot_Growths_Level_1 }, // Khabuus + { GW::Constants::MapID::Dalada_Uplands }, // Molotov Rocktai + { GW::Constants::MapID::Tomb_of_the_Primeval_Kings }, // The Stygian Lords + { GW::Constants::MapID::The_Fissure_of_Woe }, // Dragon Lich + { GW::Constants::MapID::Darkrime_Delves_Level_1 }, // Havok Soulwai + { GW::Constants::MapID::Xaquang_Skyway }, // Ghial the Bone Dancer + { GW::Constants::MapID::Cathedral_of_Flames_Level_1 }, // Murakai, Lady of the Night + { GW::Constants::MapID::Slavers_Exile_Level_1 }, // Rand Stormweaver + { GW::Constants::MapID::Kessex_Peak }, // Verata + }; + static_assert(_countof(zaishen_bounty_cycles) == ZAISHEN_BOUNTY_COUNT); + + DailyQuest zaishen_combat_cycles[] = { + {GW::Constants::MapID::The_Jade_Quarry_mission}, + {GW::Constants::MapID::Codex_Arena_outpost}, + {GW::Constants::MapID::Heroes_Ascent_outpost}, + {GW::Constants::MapID::Isle_of_the_Dead_guild_hall}, + {GW::Constants::MapID::Isle_of_the_Dead_guild_hall}, + {GW::Constants::MapID::Heroes_Ascent_outpost}, + {GW::Constants::MapID::Isle_of_the_Dead_guild_hall}, + {GW::Constants::MapID::Codex_Arena_outpost}, + {GW::Constants::MapID::Fort_Aspenwood_mission}, + {GW::Constants::MapID::The_Jade_Quarry_mission}, + {GW::Constants::MapID::Random_Arenas_outpost}, + {GW::Constants::MapID::Codex_Arena_outpost}, + {GW::Constants::MapID::Isle_of_the_Dead_guild_hall}, + {GW::Constants::MapID::The_Jade_Quarry_mission}, + {GW::Constants::MapID::Isle_of_the_Dead_guild_hall}, + {GW::Constants::MapID::Heroes_Ascent_outpost}, + {GW::Constants::MapID::Random_Arenas_outpost}, + {GW::Constants::MapID::Fort_Aspenwood_mission}, + {GW::Constants::MapID::The_Jade_Quarry_mission}, + {GW::Constants::MapID::Random_Arenas_outpost}, + {GW::Constants::MapID::Fort_Aspenwood_mission}, + {GW::Constants::MapID::Heroes_Ascent_outpost}, + {GW::Constants::MapID::Isle_of_the_Dead_guild_hall}, + {GW::Constants::MapID::Isle_of_the_Dead_guild_hall}, + {GW::Constants::MapID::Codex_Arena_outpost}, + {GW::Constants::MapID::Random_Arenas_outpost}, + {GW::Constants::MapID::Fort_Aspenwood_mission}, + {GW::Constants::MapID::Isle_of_the_Dead_guild_hall} + }; + static_assert(_countof(zaishen_combat_cycles) == ZAISHEN_COMBAT_COUNT); + + DailyQuest zaishen_vanquish_cycles[] = { + {GW::Constants::MapID::Jaya_Bluffs}, + {GW::Constants::MapID::Holdings_of_Chokhin}, + {GW::Constants::MapID::Ice_Cliff_Chasms}, + {GW::Constants::MapID::Griffons_Mouth}, + {GW::Constants::MapID::Kinya_Province}, + {GW::Constants::MapID::Issnur_Isles}, + {GW::Constants::MapID::Jaga_Moraine}, + {GW::Constants::MapID::Ice_Floe}, + {GW::Constants::MapID::Maishang_Hills}, + {GW::Constants::MapID::Jahai_Bluffs}, + {GW::Constants::MapID::Riven_Earth}, + {GW::Constants::MapID::Icedome}, + {GW::Constants::MapID::Minister_Chos_Estate_explorable}, + {GW::Constants::MapID::Mehtani_Keys}, + {GW::Constants::MapID::Sacnoth_Valley}, + {GW::Constants::MapID::Iron_Horse_Mine}, + {GW::Constants::MapID::Morostav_Trail}, + {GW::Constants::MapID::Plains_of_Jarin}, + {GW::Constants::MapID::Sparkfly_Swamp}, + {GW::Constants::MapID::Kessex_Peak}, + {GW::Constants::MapID::Mourning_Veil_Falls}, + {GW::Constants::MapID::The_Alkali_Pan}, + {GW::Constants::MapID::Varajar_Fells}, + {GW::Constants::MapID::Lornars_Pass}, + {GW::Constants::MapID::Pongmei_Valley}, + {GW::Constants::MapID::The_Floodplain_of_Mahnkelon}, + {GW::Constants::MapID::Verdant_Cascades}, + {GW::Constants::MapID::Majestys_Rest}, + {GW::Constants::MapID::Raisu_Palace}, + {GW::Constants::MapID::The_Hidden_City_of_Ahdashim}, + {GW::Constants::MapID::Rheas_Crater}, + {GW::Constants::MapID::Mamnoon_Lagoon}, + {GW::Constants::MapID::Shadows_Passage}, + {GW::Constants::MapID::The_Mirror_of_Lyss}, + {GW::Constants::MapID::Saoshang_Trail}, + {GW::Constants::MapID::Nebo_Terrace}, + {GW::Constants::MapID::Shenzun_Tunnels}, + {GW::Constants::MapID::The_Ruptured_Heart}, + {GW::Constants::MapID::Salt_Flats}, + {GW::Constants::MapID::North_Kryta_Province}, + {GW::Constants::MapID::Silent_Surf}, + {GW::Constants::MapID::The_Shattered_Ravines}, + {GW::Constants::MapID::Scoundrels_Rise}, + {GW::Constants::MapID::Old_Ascalon}, + {GW::Constants::MapID::Sunjiang_District_explorable}, + {GW::Constants::MapID::The_Sulfurous_Wastes}, + {GW::Constants::MapID::Magus_Stones}, + {GW::Constants::MapID::Perdition_Rock}, + {GW::Constants::MapID::Sunqua_Vale}, + {GW::Constants::MapID::Turais_Procession}, + {GW::Constants::MapID::Norrhart_Domains}, + {GW::Constants::MapID::Pockmark_Flats}, + {GW::Constants::MapID::Tahnnakai_Temple_explorable}, + {GW::Constants::MapID::Vehjin_Mines}, + {GW::Constants::MapID::Poisoned_Outcrops}, + {GW::Constants::MapID::Prophets_Path}, + {GW::Constants::MapID::The_Eternal_Grove}, + {GW::Constants::MapID::Tascas_Demise}, + {GW::Constants::MapID::Resplendent_Makuun}, + {GW::Constants::MapID::Reed_Bog}, + {GW::Constants::MapID::Unwaking_Waters}, + {GW::Constants::MapID::Stingray_Strand}, + {GW::Constants::MapID::Sunward_Marches}, + {GW::Constants::MapID::Regent_Valley}, + {GW::Constants::MapID::Wajjun_Bazaar}, + {GW::Constants::MapID::Yatendi_Canyons}, + {GW::Constants::MapID::Twin_Serpent_Lakes}, + {GW::Constants::MapID::Sage_Lands}, + {GW::Constants::MapID::Xaquang_Skyway}, + {GW::Constants::MapID::Zehlon_Reach}, + {GW::Constants::MapID::Tangle_Root}, + {GW::Constants::MapID::Silverwood}, + {GW::Constants::MapID::Zen_Daijun_explorable}, + {GW::Constants::MapID::The_Arid_Sea}, + {GW::Constants::MapID::Nahpui_Quarter_explorable}, + {GW::Constants::MapID::Skyward_Reach}, + {GW::Constants::MapID::The_Scar}, + {GW::Constants::MapID::The_Black_Curtain}, + {GW::Constants::MapID::Panjiang_Peninsula}, + {GW::Constants::MapID::Snake_Dance}, + {GW::Constants::MapID::Travelers_Vale}, + {GW::Constants::MapID::The_Breach}, + {GW::Constants::MapID::Lahtenda_Bog}, + {GW::Constants::MapID::Spearhead_Peak}, + {GW::Constants::MapID::Mount_Qinkai}, + {GW::Constants::MapID::Marga_Coast}, + {GW::Constants::MapID::Melandrus_Hope}, + {GW::Constants::MapID::The_Falls}, + {GW::Constants::MapID::Jokos_Domain}, + {GW::Constants::MapID::Vulture_Drifts}, + {GW::Constants::MapID::Wilderness_of_Bahdza}, + {GW::Constants::MapID::Talmark_Wilderness}, + {GW::Constants::MapID::Vehtendi_Valley}, + {GW::Constants::MapID::Talus_Chute}, + {GW::Constants::MapID::Mineral_Springs}, + {GW::Constants::MapID::Anvil_Rock}, + {GW::Constants::MapID::Arborstone_explorable}, + {GW::Constants::MapID::Witmans_Folly}, + {GW::Constants::MapID::Arkjok_Ward}, + {GW::Constants::MapID::Ascalon_Foothills}, + {GW::Constants::MapID::Bahdok_Caverns}, + {GW::Constants::MapID::Cursed_Lands}, + {GW::Constants::MapID::Alcazia_Tangle}, + {GW::Constants::MapID::Archipelagos}, + {GW::Constants::MapID::Eastern_Frontier}, + {GW::Constants::MapID::Dejarin_Estate}, + {GW::Constants::MapID::Watchtower_Coast}, + {GW::Constants::MapID::Arbor_Bay}, + {GW::Constants::MapID::Barbarous_Shore}, + {GW::Constants::MapID::Deldrimor_Bowl}, + {GW::Constants::MapID::Boreas_Seabed_explorable}, + {GW::Constants::MapID::Cliffs_of_Dohjok}, + {GW::Constants::MapID::Diessa_Lowlands}, + {GW::Constants::MapID::Bukdek_Byway}, + {GW::Constants::MapID::Bjora_Marches}, + {GW::Constants::MapID::Crystal_Overlook}, + {GW::Constants::MapID::Diviners_Ascent}, + {GW::Constants::MapID::Dalada_Uplands}, + {GW::Constants::MapID::Drazach_Thicket}, + {GW::Constants::MapID::Fahranur_The_First_City }, + {GW::Constants::MapID::Dragons_Gullet}, + {GW::Constants::MapID::Ferndale}, + {GW::Constants::MapID::Forum_Highlands}, + {GW::Constants::MapID::Dreadnoughts_Drift}, + {GW::Constants::MapID::Drakkar_Lake}, + {GW::Constants::MapID::Dry_Top}, + {GW::Constants::MapID::Tears_of_the_Fallen}, + {GW::Constants::MapID::Gyala_Hatchery}, + {GW::Constants::MapID::Ettins_Back}, + {GW::Constants::MapID::Gandara_the_Moon_Fortress}, + {GW::Constants::MapID::Grothmar_Wardowns}, + {GW::Constants::MapID::Flame_Temple_Corridor}, + {GW::Constants::MapID::Haiju_Lagoon}, + {GW::Constants::MapID::Frozen_Forest}, + {GW::Constants::MapID::Garden_of_Seborhin}, + {GW::Constants::MapID::Grenths_Footprint} + }; + static_assert(_countof(zaishen_vanquish_cycles) == ZAISHEN_VANQUISH_COUNT); + + DailyQuest zaishen_mission_cycles[] = { + GW::Constants::MapID::Augury_Rock_mission, + GW::Constants::MapID::Grand_Court_of_Sebelkeh, + GW::Constants::MapID::Ice_Caves_of_Sorrow, + GW::Constants::MapID::Raisu_Palace_outpost_mission, + GW::Constants::MapID::Gate_of_Desolation, + GW::Constants::MapID::Thirsty_River, + GW::Constants::MapID::Blacktide_Den, + GW::Constants::MapID::Against_the_Charr_mission, + GW::Constants::MapID::Abaddons_Mouth, + GW::Constants::MapID::Nundu_Bay, + GW::Constants::MapID::Divinity_Coast, + GW::Constants::MapID::Zen_Daijun_outpost_mission, + GW::Constants::MapID::Pogahn_Passage, + GW::Constants::MapID::Tahnnakai_Temple_outpost_mission, + GW::Constants::MapID::The_Great_Northern_Wall, + GW::Constants::MapID::Dasha_Vestibule, + GW::Constants::MapID::The_Wilds, + GW::Constants::MapID::Unwaking_Waters_mission, + GW::Constants::MapID::Chahbek_Village, + GW::Constants::MapID::Aurora_Glade, + GW::Constants::MapID::A_Time_for_Heroes_mission, + GW::Constants::MapID::Consulate_Docks, + GW::Constants::MapID::Ring_of_Fire, + GW::Constants::MapID::Nahpui_Quarter_outpost_mission, + GW::Constants::MapID::The_Dragons_Lair, + GW::Constants::MapID::Dzagonur_Bastion, + GW::Constants::MapID::DAlessio_Seaboard, + GW::Constants::MapID::Assault_on_the_Stronghold_mission, + GW::Constants::MapID::The_Eternal_Grove_outpost_mission, + GW::Constants::MapID::Sanctum_Cay, + GW::Constants::MapID::Rilohn_Refuge, + GW::Constants::MapID::Warband_of_brothers_mission, + GW::Constants::MapID::Borlis_Pass, + GW::Constants::MapID::Imperial_Sanctum_outpost_mission, + GW::Constants::MapID::Moddok_Crevice, + GW::Constants::MapID::Nolani_Academy, + GW::Constants::MapID::Destructions_Depths_mission, + GW::Constants::MapID::Venta_Cemetery, + GW::Constants::MapID::Fort_Ranik, + GW::Constants::MapID::A_Gate_Too_Far_mission, + GW::Constants::MapID::Minister_Chos_Estate_outpost_mission, + GW::Constants::MapID::Thunderhead_Keep, + GW::Constants::MapID::Tihark_Orchard, + GW::Constants::MapID::Finding_the_Bloodstone_mission, + GW::Constants::MapID::Dunes_of_Despair, + GW::Constants::MapID::Vizunah_Square_mission, + GW::Constants::MapID::Jokanur_Diggings, + GW::Constants::MapID::Iron_Mines_of_Moladune, + GW::Constants::MapID::Kodonur_Crossroads, + GW::Constants::MapID::Genius_Operated_Living_Enchanted_Manifestation_mission, + GW::Constants::MapID::Arborstone_outpost_mission, + GW::Constants::MapID::Gates_of_Kryta, + GW::Constants::MapID::Gate_of_Madness, + GW::Constants::MapID::The_Elusive_Golemancer_mission, + GW::Constants::MapID::Riverside_Province, + GW::Constants::MapID::Boreas_Seabed_outpost_mission, + GW::Constants::MapID::Ruins_of_Morah, + GW::Constants::MapID::Hells_Precipice, + GW::Constants::MapID::Ruins_of_Surmia, + GW::Constants::MapID::Curse_of_the_Nornbear_mission, + GW::Constants::MapID::Sunjiang_District_outpost_mission, + GW::Constants::MapID::Elona_Reach, + GW::Constants::MapID::Gate_of_Pain, + GW::Constants::MapID::Blood_Washes_Blood_mission, + GW::Constants::MapID::Bloodstone_Fen, + GW::Constants::MapID::Jennurs_Horde, + GW::Constants::MapID::Gyala_Hatchery_outpost_mission, + GW::Constants::MapID::Abaddons_Gate, + GW::Constants::MapID::The_Frost_Gate + }; + static_assert(_countof(zaishen_mission_cycles) == ZAISHEN_MISSION_COUNT); + + + uint32_t GetZaishenBountyIdx(const time_t* unix) + { + return static_cast((*unix - 1244736000) / 86400 % ZAISHEN_BOUNTY_COUNT); + } + + uint32_t GetZaishenCombatIdx(const time_t* unix) + { + return static_cast((*unix - 1256227200) / 86400 % ZAISHEN_COMBAT_COUNT); + } + + uint32_t GetZaishenMissionIdx(const time_t* unix) + { + return static_cast((*unix - 1299168000) / 86400 % ZAISHEN_MISSION_COUNT); + } + + uint32_t GetZaishenVanquishIdx(const time_t* unix) + { + return static_cast((*unix - 1299168000) / 86400 % ZAISHEN_VANQUISH_COUNT); + } + + time_t GetNextEventTime(const time_t cycle_start_time, const time_t current_time, const int event_index, const int event_count, const int interval_in_seconds) + { + const auto cycle_duration = interval_in_seconds * event_count; + const auto cycles_since_start = (current_time - cycle_start_time) / cycle_duration; + const auto current_cycle_start_time = cycle_start_time + (cycles_since_start * cycle_duration); + const auto time_in_currentCycle = event_index * interval_in_seconds; + auto next_event_time = current_cycle_start_time + time_in_currentCycle; + if (next_event_time < current_time) { + // The event started in the past. We need to check if the event is ongoing or has already finished + if (next_event_time + interval_in_seconds < current_time) { + // The event ended already so we offset the start time with one cycle + next_event_time += cycle_duration; + } + else { + // The event is ongoing so we set the start time as the current time + next_event_time = current_time; + } + + } + + return next_event_time; + } + + DailyQuest* GetZaishenBounty(time_t unix) + { + if (!unix) + unix = time(nullptr); + return &zaishen_bounty_cycles[GetZaishenBountyIdx(&unix)]; + } + + DailyQuest* GetZaishenMission(time_t unix) + { + if (!unix) + unix = time(nullptr); + return &zaishen_mission_cycles[GetZaishenMissionIdx(&unix)]; + } + + DailyQuest* GetZaishenCombat(time_t unix) + { + if (!unix) + unix = time(nullptr); + return &zaishen_combat_cycles[GetZaishenCombatIdx(&unix)]; + } + + DailyQuest* GetZaishenVanquish(time_t unix) + { + if (!unix) + unix = time(nullptr); + return &zaishen_vanquish_cycles[GetZaishenVanquishIdx(&unix)]; + } + + + struct area_info { + uint32_t campaign; + uint32_t continent; + Region region; + RegionType region_type; + uint32_t flags; + uint32_t x; + uint32_t y; + uint32_t start_x; + uint32_t start_y; + uint32_t end_x; + uint32_t end_y; + }; + + const area_info* GetMapInfo(const uint32_t map_id) { + static const struct area_info area_info_table[] = { + #include + }; + if (map_id > ARRAY_SIZE(area_info_table)) + return nullptr; + return &area_info_table[map_id]; + } +} diff --git a/GuildWarsPartySearch.Bot/gw_constants.h b/GuildWarsPartySearch.Bot/gw_constants.h new file mode 100644 index 0000000..7dc535b --- /dev/null +++ b/GuildWarsPartySearch.Bot/gw_constants.h @@ -0,0 +1,773 @@ +namespace GW { + namespace Constants { + enum class MapID : uint32_t { + None = 0, + Gladiators_Arena, + DEV_Test_Arena_1v1, + Test_map, + Warriors_Isle_outpost, + Hunters_Isle_outpost, + Wizards_Isle_outpost, + Warriors_Isle, + Hunters_Isle, + Wizards_Isle, + Bloodstone_Fen, + The_Wilds, + Aurora_Glade, + Diessa_Lowlands, + Gates_of_Kryta, + DAlessio_Seaboard, + Divinity_Coast, + Talmark_Wilderness, + The_Black_Curtain, + Sanctum_Cay, + Droknars_Forge_outpost, + The_Frost_Gate, + Ice_Caves_of_Sorrow, + Thunderhead_Keep, + Iron_Mines_of_Moladune, + Borlis_Pass, + Talus_Chute, + Griffons_Mouth, + The_Great_Northern_Wall, + Fort_Ranik, + Ruins_of_Surmia, + Xaquang_Skyway, + Nolani_Academy, + Old_Ascalon, + The_Fissure_of_Woe, + Ember_Light_Camp_outpost, + Grendich_Courthouse_outpost, + Glints_Challenge_mission, + Augury_Rock_outpost, + Sardelac_Sanitarium_outpost, + Piken_Square_outpost, + Sage_Lands, + Mamnoon_Lagoon, + Silverwood, + Ettins_Back, + Reed_Bog, + The_Falls, + Dry_Top, + Tangle_Root, + Henge_of_Denravi_outpost, + + Senjis_Corner_outpost = 51, + Burning_Isle_outpost, + Tears_of_the_Fallen, + Scoundrels_Rise, + Lions_Arch_outpost, + Cursed_Lands, + Bergen_Hot_Springs_outpost, + North_Kryta_Province, + Nebo_Terrace, + Majestys_Rest, + Twin_Serpent_Lakes, + Watchtower_Coast, + Stingray_Strand, + Kessex_Peak, + DAlessio_Arena_mission, + + Burning_Isle = 67, + Frozen_Isle, + Nomads_Isle, + Druids_Isle, + Isle_of_the_Dead_guild_hall, + The_Underworld, + Riverside_Province, + + The_Hall_of_Heroes_arena_mission = 75, + Broken_Tower_mission, + House_zu_Heltzer_outpost, + The_Courtyard_arena_mission, + Unholy_Temples_mission, + Burial_Mounds_mission, + Ascalon_City_outpost, + Tomb_of_the_Primeval_Kings, + The_Vault_mission, + The_Underworld_arena_mission, + Ascalon_Arena, + Sacred_Temples_mission, + Icedome, + Iron_Horse_Mine, + Anvil_Rock, + Lornars_Pass, + Snake_Dance, + Tascas_Demise, + Spearhead_Peak, + Ice_Floe, + Witmans_Folly, + Mineral_Springs, + Dreadnoughts_Drift, + Frozen_Forest, + Travelers_Vale, + Deldrimor_Bowl, + Regent_Valley, + The_Breach, + Ascalon_Foothills, + Pockmark_Flats, + Dragons_Gullet, + Flame_Temple_Corridor, + Eastern_Frontier, + The_Scar, + The_Amnoon_Oasis_outpost, + Diviners_Ascent, + Vulture_Drifts, + The_Arid_Sea, + Prophets_Path, + Salt_Flats, + Skyward_Reach, + Dunes_of_Despair, + Thirsty_River, + Elona_Reach, + Augury_Rock_mission, + The_Dragons_Lair, + Perdition_Rock, + Ring_of_Fire, + Abaddons_Mouth, + Hells_Precipice, + Titans_Tears, + + Golden_Gates_mission, + Scarred_Earth2, + The_Eternal_Grove, + Lutgardis_Conservatory_outpost, + Vasburg_Armory_outpost, + Serenity_Temple_outpost, + Ice_Tooth_Cave_outpost, + Beacons_Perch_outpost, + Yaks_Bend_outpost, + Frontier_Gate_outpost, + Beetletun_outpost, + Fishermens_Haven_outpost, + Temple_of_the_Ages, + Ventaris_Refuge_outpost, + Druids_Overlook_outpost, + Maguuma_Stade_outpost, + Quarrel_Falls_outpost, + + Gyala_Hatchery = 144, + The_Catacombs, + Lakeside_County, + The_Northlands, + Ascalon_City_pre_searing, // ? + Ascalon_Academy, + Ascalon_Academy_PvP_battle_mission, + Ascalon_Academy_unk, + Heroes_Audience_outpost, + Seekers_Passage_outpost, + Destinys_Gorge_outpost, + Camp_Rankor_outpost, + The_Granite_Citadel_outpost, + Marhans_Grotto_outpost, + Port_Sledge_outpost, + Copperhammer_Mines_outpost, + Green_Hills_County, + Wizards_Folly, + Regent_Valley_pre_Searing, + The_Barradin_Estate_outpost, + Ashford_Abbey_outpost, + Foibles_Fair_outpost, + Fort_Ranik_pre_Searing_outpost, + Burning_Isle_mission, + Druids_Isle_mission, + + Frozen_Isle_mission = 170, + Warriors_Isle_mission, + Hunters_Isle_mission, + Wizards_Isle_mission, + Nomads_Isle_mission, + Isle_of_the_Dead_guild_hall_mission, + Frozen_Isle_outpost, + Nomads_Isle_outpost, + Druids_Isle_outpost, + Isle_of_the_Dead_guild_hall_outpost, + Fort_Koga_mission, + Shiverpeak_Arena, + Amnoon_Arena_mission, + Deldrimor_Arena_mission, + The_Crag_mission, + + Random_Arenas_outpost = 188, + Team_Arenas_outpost, + Sorrows_Furnace, + Grenths_Footprint, + + Cavalon_outpost = 193, + Kaineng_Center_outpost, + Drazach_Thicket, + Jaya_Bluffs, + Shenzun_Tunnels, + Archipelagos, + Maishang_Hills, + Mount_Qinkai, + Melandrus_Hope, + Rheas_Crater, + Silent_Surf, + Unwaking_Waters_mission, + Morostav_Trail, + Deldrimor_War_Camp_outpost, + + Heroes_Crypt_mission = 208, + Mourning_Veil_Falls, + Ferndale, + Pongmei_Valley, + Monastery_Overlook1, + Zen_Daijun_outpost_mission, + Minister_Chos_Estate_outpost_mission, + Vizunah_Square_mission, + Nahpui_Quarter_outpost_mission, + Tahnnakai_Temple_outpost_mission, + Arborstone_outpost_mission, + Boreas_Seabed_outpost_mission, + Sunjiang_District_outpost_mission, + Fort_Aspenwood_mission, + The_Eternal_Grove_outpost_mission, + The_Jade_Quarry_mission, + Gyala_Hatchery_outpost_mission, + Raisu_Palace_outpost_mission, + Imperial_Sanctum_outpost_mission, + Unwaking_Waters, + Grenz_Frontier_mission, + + Amatz_Basin = 230, + + Shadows_Passage = 232, + Raisu_Palace, + The_Aurios_Mines, + Panjiang_Peninsula, + Kinya_Province, + Haiju_Lagoon, + Sunqua_Vale, + Wajjun_Bazaar, + Bukdek_Byway, + The_Undercity, + Shing_Jea_Monastery_outpost, + Shing_Jea_Arena, + Arborstone_explorable, + Minister_Chos_Estate_explorable, + Zen_Daijun_explorable, + Boreas_Seabed_explorable, + Great_Temple_of_Balthazar_outpost, + Tsumei_Village_outpost, + Seitung_Harbor_outpost, + Ran_Musu_Gardens_outpost, + Linnok_Courtyard, + Dwayna_Vs_Grenth, + + Sunjiang_District_explorable = 256, + + Nahpui_Quarter_explorable = 265, + Urgozs_Warren, + + Tahnnakai_Temple_explorable = 269, + + Altrumm_Ruins = 272, + Zos_Shivros_Channel, + Dragons_Throat, + Isle_of_Weeping_Stone_outpost, + Isle_of_Jade_outpost, + Harvest_Temple_outpost, + Breaker_Hollow_outpost, + Leviathan_Pits_outpost, + Isle_of_the_Nameless, + Zaishen_Challenge_outpost, + Zaishen_Elite_outpost, + Maatu_Keep_outpost, + Zin_Ku_Corridor_outpost, + Monastery_Overlook2, + Brauer_Academy_outpost, + Durheim_Archives_outpost, + Bai_Paasu_Reach_outpost, + Seafarers_Rest_outpost, + Bejunkan_Pier, + Vizunah_Square_Local_Quarter_outpost, + Vizunah_Square_Foreign_Quarter_outpost, + Fort_Aspenwood_Luxon_outpost, + Fort_Aspenwood_Kurzick_outpost, + The_Jade_Quarry_Luxon_outpost, + The_Jade_Quarry_Kurzick_outpost, + Unwaking_Waters_Luxon_outpost, + Unwaking_Waters_Kurzick_outpost, + + Etnaran_Keys_mission = 300, + Raisu_Pavilion, + Kaineng_Docks, + The_Marketplace_outpost, + + The_Deep = 307, + Ascalon_Arena_mission, + Annihilation_mission, + Kill_Count_Training_mission, + Priest_Annihilation_Training, + Obelisk_Annihilation_Training_mission, + Saoshang_Trail, + Shiverpeak_Arena_mission, + + DAlessio_Arena_mission3 = 318, + Amnoon_Arena_mission3, + Fort_Koga_mission3, + Heroes_Crypt_mission3, + Shiverpeak_Arena_mission3, + + Saltspray_Beach_Luxon_outpost = 328, + Saltspray_Beach_Kurzick_outpost, + Heroes_Ascent_outpost, + Grenz_Frontier_Luxon_outpost, + Grenz_Frontier_Kurzick_outpost, + The_Ancestral_Lands_Luxon_outpost, + The_Ancestral_Lands_Kurzick_outpost, + Etnaran_Keys_Luxon_outpost, + Etnaran_Keys_Kurzick_outpost, + Kaanai_Canyon_Luxon_outpost, + Kaanai_Canyon_Kurzick_outpost, + DAlessio_Arena_mission2, + Amnoon_Arena_mission2, + Fort_Koga_mission2, + Heroes_Crypt_mission2, + Shiverpeak_Arena_mission2, + The_Hall_of_Heroes, + The_Courtyard, + Scarred_Earth, + The_Underworld_PvP, + Tanglewood_Copse_outpost, + Saint_Anjekas_Shrine_outpost, + Eredon_Terrace_outpost, + Divine_Path, + Brawlers_Pit_mission, + Petrified_Arena_mission, + Seabed_Arena_mission, + Isle_of_Weeping_Stone_mission, + Isle_of_Jade_mission, + Imperial_Isle_mission, + Isle_of_Meditation_mission, + Imperial_Isle_outpost, + Isle_of_Meditation_outpost, + Isle_of_Weeping_Stone, + Isle_of_Jade, + Imperial_Isle, + Isle_of_Meditation, + + Shing_Jea_Arena_mission = 366, + + Dragon_Arena = 368, + Jahai_Bluffs, + Kamadan_mission, + Marga_Coast, + Fahranur_mission, + Sunward_Marches, + + Barbarous_Shore = 375, + Camp_Hojanu_outpost, + Bahdok_Caverns, + Wehhan_Terraces_outpost, + Dejarin_Estate, + Arkjok_Ward, + Yohlon_Haven_outpost, + Gandara_the_Moon_Fortress, + + The_Floodplain_of_Mahnkelon = 384, + Lions_Arch_Sunspears_in_Kryta, + Turais_Procession, + Sunspear_Sanctuary_outpost, + Aspenwood_Gate_Kurzick_outpost, + Aspenwood_Gate_Luxon_outpost, + Jade_Flats_Kurzick_outpost, + Jade_Flats_Luxon_outpost, + Yatendi_Canyons, + Chantry_of_Secrets_outpost, + Garden_of_Seborhin, + Holdings_of_Chokhin, + Mihanu_Township_outpost, + Vehjin_Mines, + Basalt_Grotto_outpost, + Forum_Highlands, + Kaineng_Center_Sunspears_in_Cantha, + + Resplendent_Makuun = 402, + Honur_Hill_outpost, + Wilderness_of_Bahdza, + + Vehtendi_Valley = 406, + Yahnur_Market_outpost, + + The_Hidden_City_of_Ahdashim = 413, + The_Kodash_Bazaar_outpost, + Lions_Gate, + + The_Mirror_of_Lyss = 419, + Secure_the_Refuge, + Venta_Cemetery, + Kamadan_Jewel_of_Istan_explorable, + The_Tribunal, + Kodonur_Crossroads, + Rilohn_Refuge, + Pogahn_Passage, + Moddok_Crevice, + Tihark_Orchard, + Consulate, + Plains_of_Jarin, + Sunspear_Great_Hall_outpost, + Cliffs_of_Dohjok, + Dzagonur_Bastion, + Dasha_Vestibule, + Grand_Court_of_Sebelkeh, + Command_Post, + Jokos_Domain, + Bone_Palace_outpost, + The_Ruptured_Heart, + The_Mouth_of_Torment_outpost, + The_Shattered_Ravines, + Lair_of_the_Forgotten_outpost, + Poisoned_Outcrops, + The_Sulfurous_Wastes, + The_Ebony_Citadel_of_Mallyx_mission, + The_Alkali_Pan, + A_Land_of_Heroes, + Crystal_Overlook, + Kamadan_Jewel_of_Istan_outpost, + Gate_of_Torment_outpost, + + Nightfallen_Garden = 455, + Churrhir_Fields, + Beknur_Harbor_outpost, + + The_Underworld2 = 461, + Heart_of_Abaddon, + The_Underworld3, + Nightfallen_Coast, + Nightfallen_Jahai, + Depths_of_Madness, + Rollerbeetle_Racing, + Domain_of_Fear, + Gate_of_Fear_outpost, + Domain_of_Pain, + Bloodstone_Fen_quest, + Domain_of_Secrets, + Gate_of_Secrets_outpost, + Domain_of_Anguish, + + Ooze_Pit_mission = 475, + Jennurs_Horde, + Nundu_Bay, + Gate_of_Desolation, + Champions_Dawn_outpost, + Ruins_of_Morah, + Fahranur_The_First_City, + Bjora_Marches, + Zehlon_Reach, + Lahtenda_Bog, + Arbor_Bay, + Issnur_Isles, + Beknur_Harbor, + Mehtani_Keys, + Kodlonu_Hamlet_outpost, + Island_of_Shehkah, + Jokanur_Diggings, + Blacktide_Den, + Consulate_Docks, + Gate_of_Pain, + Gate_of_Madness, + Abaddons_Gate, + Sunspear_Arena, + + Ice_Cliff_Chasms = 499, + Bokka_Amphitheatre, + Riven_Earth, + The_Astralarium_outpost, + Throne_of_Secrets, + Churranu_Island_Arena_mission, + Shing_Jea_Monastery_mission, + Haiju_Lagoon_mission, + Jaya_Bluffs_mission, + Seitung_Harbor_mission, + Tsumei_Village_mission, + Seitung_Harbor_mission_2, + Tsumei_Village_mission_2, + + Drakkar_Lake = 513, + + Minister_Chos_Estate_mission_2 = 512, + + Uncharted_Isle_outpost = 529, + Isle_of_Wurms_outpost, + Uncharted_Isle, + Isle_of_Wurms, + Uncharted_Isle_mission, + Isle_of_Wurms_mission, + + Sunspear_Arena_mission = 536, + Corrupted_Isle_outpost, + Isle_of_Solitude_outpost, + Corrupted_Isle, + Isle_of_Solitude, + Corrupted_Isle_mission, + Isle_of_Solitude_mission, + Sun_Docks, + Chahbek_Village, + Remains_of_Sahlahja, + Jaga_Moraine, + Bombardment_mission, + Norrhart_Domains, + Hero_Battles_outpost, + The_Beachhead_mission, + The_Crossing_mission, + Desert_Sands_mission, + Varajar_Fells, + Dajkah_Inlet, + The_Shadow_Nexus, + + Sparkfly_Swamp = 558, + Gate_of_the_Nightfallen_Lands_outpost, + Cathedral_of_Flames_Level_1, + The_Troubled_Keeper, + + Verdant_Cascades = 566, + Cathedral_of_Flames_Level_2, + Cathedral_of_Flames_Level_3, + Magus_Stones, + Catacombs_of_Kathandrax_Level_1, + Catacombs_of_Kathandrax_Level_2, + Alcazia_Tangle, + Rragars_Menagerie_Level_1, + Rragars_Menagerie_Level_2, + Rragars_Menagerie_Level_3, + Ooze_Pit, + Slavers_Exile_Level_1, + Oolas_Lab_Level_1, + Oolas_Lab_Level_2, + Oolas_Lab_Level_3, + Shards_of_Orr_Level_1, + Shards_of_Orr_Level_2, + Shards_of_Orr_Level_3, + Arachnis_Haunt_Level_1, + Arachnis_Haunt_Level_2, + + Fetid_River_mission = 593, + + Forgotten_Shrines_mission = 596, + + Antechamber_mission = 598, + + Vloxen_Excavations_Level_1 = 604, + Vloxen_Excavations_Level_2, + Vloxen_Excavations_Level_3, + Heart_of_the_Shiverpeaks_Level_1, + Heart_of_the_Shiverpeaks_Level_2, + Heart_of_the_Shiverpeaks_Level_3, + + Bloodstone_Caves_Level_1 = 612, + Bloodstone_Caves_Level_2, + Bloodstone_Caves_Level_3, + Bogroot_Growths_Level_1, + Bogroot_Growths_Level_2, + Ravens_Point_Level_1, + Ravens_Point_Level_2, + Ravens_Point_Level_3, + Slavers_Exile_Level_2, + Slavers_Exile_Level_3, + Slavers_Exile_Level_4, + Slavers_Exile_Level_5, + Vloxs_Falls, + Battledepths_Level_1, + Battledepths_Level_2, + Battledepths_Level_3, + Sepulchre_of_Dragrimmar_Level_1, + Sepulchre_of_Dragrimmar_Level_2, + Frostmaws_Burrows_Level_1, + Frostmaws_Burrows_Level_2, + Frostmaws_Burrows_Level_3, + Frostmaws_Burrows_Level_4, + Frostmaws_Burrows_Level_5, + Darkrime_Delves_Level_1, + Darkrime_Delves_Level_2, + Darkrime_Delves_Level_3, + Gadds_Encampment_outpost, + Umbral_Grotto_outpost, + Rata_Sum_outpost, + Tarnished_Haven_outpost, + Eye_of_the_North_outpost, + Sifhalla_outpost, + Gunnars_Hold_outpost, + Olafstead_outpost, + Hall_of_Monuments, + Dalada_Uplands, + Doomlore_Shrine_outpost, + Grothmar_Wardowns, + Longeyes_Ledge_outpost, + Sacnoth_Valley, + Central_Transfer_Chamber_outpost, + Curse_of_the_Nornbear, + Blood_Washes_Blood, + A_Gate_Too_Far_Level_1, + A_Gate_Too_Far_Level_2, + A_Gate_Too_Far_Level_3, + The_Elusive_Golemancer_Level_1, + The_Elusive_Golemancer_Level_2, + The_Elusive_Golemancer_Level_3, + Finding_the_Bloodstone_Level_1, + Finding_the_Bloodstone_Level_2, + Finding_the_Bloodstone_Level_3, + Genius_Operated_Living_Enchanted_Manifestation, + Against_the_Charr, + Warband_of_Brothers_Level_1, + Warband_of_Brothers_Level_2, + Warband_of_Brothers_Level_3, + Assault_on_the_Stronghold, + Destructions_Depths_Level_1, + Destructions_Depths_Level_2, + Destructions_Depths_Level_3, + A_Time_for_Heroes, + Warband_Training, + Boreal_Station_outpost, + Catacombs_of_Kathandrax_Level_3, + + Attack_of_the_Nornbear = 678, + Cinematic_Cave_Norn_Cursed, + Cinematic_Steppe_Interrogation, + Cinematic_Interior_Research, + Cinematic_Eye_Vision_A, + Cinematic_Eye_Vision_B, + Cinematic_Eye_Vision_C, + Cinematic_Eye_Vision_D, + Polymock_Coliseum, + Polymock_Glacier, + Polymock_Crossing, + Cinematic_Mountain_Resolution, + Cold_as_Ice, + Beneath_Lions_Arch, + Tunnels_Below_Cantha, + Caverns_Below_Kamadan, + Cinematic_Mountain_Dwarfs, + Service_In_Defense_of_the_Eye, + Mano_a_Norn_o, + Service_Practice_Dummy, + Hero_Tutorial, + + The_Norn_Fighting_Tournament = 700, + Secret_Lair_of_the_Snowmen, + Norn_Brawling_Championship, + Kilroys_Punchout_Training, + Fronis_Irontoes_Lair_mission, + The_Justiciars_End, + + The_Great_Norn_Alemoot = 707, + Varajar_Fells_unknown, // quest map? cinematic? + + Epilogue = 710, + Insidious_Remnants, + + Attack_on_Jaliss_Camp = 717, + + Costume_Brawl_outpost = 721, + Whitefury_Rapids_mission, + Kysten_Shore_mission, + Deepway_Ruins_mission, + Plikkup_Works_mission, + Kilroys_Punchout_Tournament, + Special_Ops_Flame_Temple_Corridor, + Special_Ops_Dragons_Gullet, + Special_Ops_Grendich_Courthouse, + The_Tengu_Accords, + The_Battle_of_Jahai, + The_Flight_North, + The_Rise_of_the_White_Mantle, + + // "Mission" maps, used for icon status on world map + Finding_the_Bloodstone_mission = 759, + Genius_Operated_Living_Enchanted_Manifestation_mission, + Against_the_Charr_mission, + Warband_of_brothers_mission, + Assault_on_the_Stronghold_mission, + Destructions_Depths_mission, + A_Time_for_Heroes_mission, + Curse_of_the_Nornbear_mission, + Blood_Washes_Blood_mission, + A_Gate_Too_Far_mission, + The_Elusive_Golemancer_mission, + + Secret_Lair_of_the_Snowmen2 = 781, // ? + Secret_Lair_of_the_Snowmen3, // ? + Droknars_Forge_cinematic, // ? + Isle_of_the_Nameless_PvP, + + Temple_of_the_Ages_ROX = 788, + Wajjun_Bazaar_POX, + Bokka_Amphitheatre_NOX, + Secret_Underground_Lair, + Golem_Tutorial_Simulation, + Snowball_Dominance, + Zaishen_Menagerie_Grounds, + Zaishen_Menagerie_outpost, + Codex_Arena_outpost, + The_Underworld_Something_Wicked_This_Way_Comes = 806, + The_Underworld_Dont_Fear_the_Reapers, + Lions_Arch_Halloween_outpost, + Lions_Arch_Wintersday_outpost, + Lions_Arch_Canthan_New_Year_outpost, + Ascalon_City_Wintersday_outpost, + Droknars_Forge_Halloween_outpost, + Droknars_Forge_Wintersday_outpost, + Tomb_of_the_Primeval_Kings_Halloween_outpost, + Shing_Jea_Monastery_Dragon_Festival_outpost, + Shing_Jea_Monastery_Canthan_New_Year_outpost, + Kaineng_Center_Canthan_New_Year_outpost, + Kamadan_Jewel_of_Istan_Halloween_outpost, + Kamadan_Jewel_of_Istan_Wintersday_outpost, + Kamadan_Jewel_of_Istan_Canthan_New_Year_outpost, + Eye_of_the_North_outpost_Wintersday_outpost, + + War_in_Kryta_Talmark_Wilderness = 837, + War_in_Kryta_Trial_of_Zinn, + War_in_Kryta_Divinity_Coast, + War_in_Kryta_Lions_Arch_Keep, + War_in_Kryta_DAlessio_Seaboard, + War_in_Kryta_The_Battle_for_Lions_Arch, + War_in_Kryta_Riverside_Province, // cinematic ? + War_in_Kryta_Lions_Arch, + War_in_Kryta_The_Mausoleum, + War_in_Kryta_Rise, + War_in_Kryta_Shadows_in_the_Jungle, + War_in_Kryta_A_Vengeance_of_Blades, + War_in_Kryta_Auspicious_Beginnings, + + Olafstead_cinematic = 854, + The_Great_Snowball_Fight_of_the_Gods__Operation_Crush_Spirits, + The_Great_Snowball_Fight_of_the_Gods__Fighting_in_a_Winter_Wonderland, + Embark_Beach, + + Dragons_Throat_area__What_Waits_in_Shadow = 860, + Kaineng_Center_Winds_of_Change__A_Chance_Encounter, + The_Marketplace_area__Tracking_the_Corruption, + Bukdek_Byway_Winds_of_Change__Cantha_Courier_Crisis, + Tsumei_Village_Winds_of_Change__A_Treatys_a_Treaty, + Seitung_Harbor_area__Deadly_Cargo, + Tahnnakai_Temple_Winds_of_Change__The_Rescue_Attempt, + Wajjun_Bazaar_Winds_of_Change__Violence_in_the_Streets, + Scarred_Psyche_mission, + Shadows_Passage_Winds_of_Change__Calling_All_Thugs, + Altrumm_Ruins__Finding_Jinnai, + Shing_Jea_Monastery__Raid_on_Shing_Jea_Monastery, + Kaineng_Center_Winds_of_Change__Raid_on_Kaineng_Center, + Wajjun_Bazaar_Winds_of_Change__Ministry_of_Oppression, + The_Final_Confrontation, + Lakeside_County_1070_AE, + Ashford_Catacombs_1070_AE, + + Count, + }; + + bool is_valid_outpost(GW::Constants::MapID map_id) { + // TODO: flags etc + return false; + } + + GW::Constants::MapID get_nearest_outpost_id(GW::Constants::MapID map_id) { + if (is_valid_outpost(map_id)) { + return map_id; + } + // TODO: calc! + return GW::Constants::MapID::None; + } + } +} \ No newline at end of file