diff --git a/common/database.h b/common/database.h index 068b0414e..8a5a9abf1 100644 --- a/common/database.h +++ b/common/database.h @@ -249,7 +249,7 @@ public: bool LoadPTimers(uint32 charid, PTimerList &into); bool LoadZoneNames(); - const char* GetZoneName(uint32 zoneID, bool ErrorUnknown = false); + const char* GetZoneName(uint32 zone_id, bool ErrorUnknown = false); uint32 GetZoneGraveyardID(uint32 zone_id, uint32 version); uint32 GetZoneID(const char* zonename); diff --git a/common/repositories/base/base_zone_repository.h b/common/repositories/base/base_zone_repository.h index 41f44f22b..3729021f3 100644 --- a/common/repositories/base/base_zone_repository.h +++ b/common/repositories/base/base_zone_repository.h @@ -44,10 +44,10 @@ public: float safe_y; float safe_z; float graveyard_id; - int8 min_level; - int8 min_status; + int min_level; + int min_status; int zoneidnumber; - int8 version; + int version; int timezone; int maxclients; int ruleset; @@ -57,46 +57,46 @@ public: float maxclip; float fog_minclip; float fog_maxclip; - int8 fog_blue; - int8 fog_red; - int8 fog_green; - int8 sky; - int8 ztype; + int fog_blue; + int fog_red; + int fog_green; + int sky; + int ztype; float zone_exp_multiplier; float walkspeed; - int8 time_type; - int8 fog_red1; - int8 fog_green1; - int8 fog_blue1; + int time_type; + int fog_red1; + int fog_green1; + int fog_blue1; float fog_minclip1; float fog_maxclip1; - int8 fog_red2; - int8 fog_green2; - int8 fog_blue2; + int fog_red2; + int fog_green2; + int fog_blue2; float fog_minclip2; float fog_maxclip2; - int8 fog_red3; - int8 fog_green3; - int8 fog_blue3; + int fog_red3; + int fog_green3; + int fog_blue3; float fog_minclip3; float fog_maxclip3; - int8 fog_red4; - int8 fog_green4; - int8 fog_blue4; + int fog_red4; + int fog_green4; + int fog_blue4; float fog_minclip4; float fog_maxclip4; float fog_density; std::string flag_needed; - int8 canbind; - int8 cancombat; - int8 canlevitate; - int8 castoutdoor; - int8 hotzone; - int8 insttype; + int canbind; + int cancombat; + int canlevitate; + int castoutdoor; + int hotzone; + int insttype; int shutdowndelay; - int8 peqzone; - int8 expansion; - int8 suspendbuffs; + int peqzone; + int expansion; + int suspendbuffs; int rain_chance1; int rain_chance2; int rain_chance3; @@ -115,7 +115,7 @@ public: int snow_duration4; float gravity; int type; - int8 skylock; + int skylock; int fast_regen_hp; int fast_regen_mana; int fast_regen_endurance; diff --git a/common/shareddb.h b/common/shareddb.h index 8deb65126..500da7284 100644 --- a/common/shareddb.h +++ b/common/shareddb.h @@ -1,25 +1,27 @@ -/* EQEMu: Everquest Server Emulator - Copyright (C) 2001-2016 EQEMu Development Team (http://eqemulator.org) - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY except by those people which sell it, which - are required to give you total support for your newly bought product; - without even the implied warranty of MERCHANTABILITY or FITNESS FOR - A PARTICULAR PURPOSE. See the GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -*/ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ #ifndef SHAREDDB_H_ #define SHAREDDB_H_ -#define MAX_ITEM_ID 200000 +#define MAX_ITEM_ID 200000 #include "database.h" #include "skills.h" @@ -41,8 +43,7 @@ struct NPCFactionList; struct LootTable_Struct; struct LootDrop_Struct; -namespace EQEmu -{ +namespace EQEmu { struct ItemData; class ItemInstance; class InventoryProfile; @@ -54,114 +55,149 @@ namespace EQEmu and is mainly here to facilitate shared memory, and other things which only world and zone need. */ -class SharedDatabase : public Database -{ - public: - SharedDatabase(); - SharedDatabase(const char* host, const char* user, const char* passwd, const char* database, uint32 port); - virtual ~SharedDatabase(); +class SharedDatabase : public Database { +public: + SharedDatabase(); + SharedDatabase(const char *host, const char *user, const char *passwd, const char *database, uint32 port); + virtual ~SharedDatabase(); - /* - General Character Related Stuff - */ - bool SetGMSpeed(uint32 account_id, uint8 gmspeed); - uint8 GetGMSpeed(uint32 account_id); - bool SetHideMe(uint32 account_id, uint8 hideme); - int32 DeleteStalePlayerCorpses(); - void LoadCharacterInspectMessage(uint32 character_id, InspectMessage_Struct* message); - void SaveCharacterInspectMessage(uint32 character_id, const InspectMessage_Struct* message); - bool GetCommandSettings(std::map>> &command_settings); - bool UpdateInjectedCommandSettings(const std::vector> &injected); - bool UpdateOrphanedCommandSettings(const std::vector &orphaned); - uint32 GetTotalTimeEntitledOnAccount(uint32 AccountID); - void SetMailKey(int CharID, int IPAddress, int MailKey); - std::string GetMailKey(int CharID, bool key_only = false); + /** + * Character + */ + bool SetGMSpeed(uint32 account_id, uint8 gmspeed); + uint8 GetGMSpeed(uint32 account_id); + bool SetHideMe(uint32 account_id, uint8 hideme); + int32 DeleteStalePlayerCorpses(); + void LoadCharacterInspectMessage(uint32 character_id, InspectMessage_Struct *message); + void SaveCharacterInspectMessage(uint32 character_id, const InspectMessage_Struct *message); + bool GetCommandSettings(std::map>> &command_settings); + bool UpdateInjectedCommandSettings(const std::vector> &injected); + bool UpdateOrphanedCommandSettings(const std::vector &orphaned); + uint32 GetTotalTimeEntitledOnAccount(uint32 AccountID); + void SetMailKey(int CharID, int IPAddress, int MailKey); + std::string GetMailKey(int CharID, bool key_only = false); + bool SaveCursor( + uint32 char_id, + std::list::const_iterator &start, + std::list::const_iterator &end + ); + bool SaveInventory(uint32 char_id, const EQEmu::ItemInstance *inst, int16 slot_id); + bool DeleteSharedBankSlot(uint32 char_id, int16 slot_id); + bool DeleteInventorySlot(uint32 char_id, int16 slot_id); + bool UpdateInventorySlot(uint32 char_id, const EQEmu::ItemInstance *inst, int16 slot_id); + bool UpdateSharedBankSlot(uint32 char_id, const EQEmu::ItemInstance *inst, int16 slot_id); + bool VerifyInventory(uint32 account_id, int16 slot_id, const EQEmu::ItemInstance *inst); + bool GetSharedBank(uint32 id, EQEmu::InventoryProfile *inv, bool is_charid); + int32 GetSharedPlatinum(uint32 account_id); + bool SetSharedPlatinum(uint32 account_id, int32 amount_to_add); + bool GetInventory(uint32 char_id, EQEmu::InventoryProfile *inv); + bool GetInventory(uint32 account_id, char *name, EQEmu::InventoryProfile *inv); // deprecated + std::map GetItemRecastTimestamps(uint32 char_id); + uint32 GetItemRecastTimestamp(uint32 char_id, uint32 recast_type); + void ClearOldRecastTimestamps(uint32 char_id); + bool SetStartingItems( + PlayerProfile_Struct *pp, + EQEmu::InventoryProfile *inv, + uint32 si_race, + uint32 si_class, + uint32 si_deity, + uint32 si_current_zone, + char *si_name, + int admin + ); - /* - Character InventoryProfile - */ - bool SaveCursor(uint32 char_id, std::list::const_iterator &start, std::list::const_iterator &end); - bool SaveInventory(uint32 char_id, const EQEmu::ItemInstance* inst, int16 slot_id); - bool DeleteSharedBankSlot(uint32 char_id, int16 slot_id); - bool DeleteInventorySlot(uint32 char_id, int16 slot_id); - bool UpdateInventorySlot(uint32 char_id, const EQEmu::ItemInstance* inst, int16 slot_id); - bool UpdateSharedBankSlot(uint32 char_id, const EQEmu::ItemInstance* inst, int16 slot_id); - bool VerifyInventory(uint32 account_id, int16 slot_id, const EQEmu::ItemInstance* inst); - bool GetSharedBank(uint32 id, EQEmu::InventoryProfile* inv, bool is_charid); - int32 GetSharedPlatinum(uint32 account_id); - bool SetSharedPlatinum(uint32 account_id, int32 amount_to_add); - bool GetInventory(uint32 char_id, EQEmu::InventoryProfile* inv); - bool GetInventory(uint32 account_id, char* name, EQEmu::InventoryProfile* inv); // deprecated - std::map GetItemRecastTimestamps(uint32 char_id); - uint32 GetItemRecastTimestamp(uint32 char_id, uint32 recast_type); - void ClearOldRecastTimestamps(uint32 char_id); - bool SetStartingItems(PlayerProfile_Struct* pp, EQEmu::InventoryProfile* inv, uint32 si_race, uint32 si_class, uint32 si_deity, uint32 si_current_zone, char* si_name, int admin); + std::string GetBook(const char *txtfile, int16 *language); + /** + * items + */ + EQEmu::ItemInstance *CreateItem( + uint32 item_id, + int16 charges = 0, + uint32 aug1 = 0, + uint32 aug2 = 0, + uint32 aug3 = 0, + uint32 aug4 = 0, + uint32 aug5 = 0, + uint32 aug6 = 0, + uint8 attuned = 0 + ); + EQEmu::ItemInstance *CreateItem( + const EQEmu::ItemData *item, + int16 charges = 0, + uint32 aug1 = 0, + uint32 aug2 = 0, + uint32 aug3 = 0, + uint32 aug4 = 0, + uint32 aug5 = 0, + uint32 aug6 = 0, + uint8 attuned = 0 + ); + EQEmu::ItemInstance *CreateBaseItem(const EQEmu::ItemData *item, int16 charges = 0); - std::string GetBook(const char *txtfile, int16 *language); + void GetItemsCount(int32 &item_count, uint32 &max_id); + void LoadItems(void *data, uint32 size, int32 items, uint32 max_item_id); + bool LoadItems(const std::string &prefix); + const EQEmu::ItemData *IterateItems(uint32 *id); + const EQEmu::ItemData *GetItem(uint32 id); + const EvolveInfo *GetEvolveInfo(uint32 loregroup); - /* - Item Methods - */ - EQEmu::ItemInstance* CreateItem(uint32 item_id, int16 charges = 0, uint32 aug1 = 0, uint32 aug2 = 0, uint32 aug3 = 0, uint32 aug4 = 0, uint32 aug5 = 0, uint32 aug6 = 0, uint8 attuned = 0); - EQEmu::ItemInstance* CreateItem(const EQEmu::ItemData* item, int16 charges = 0, uint32 aug1 = 0, uint32 aug2 = 0, uint32 aug3 = 0, uint32 aug4 = 0, uint32 aug5 = 0, uint32 aug6 = 0, uint8 attuned = 0); - EQEmu::ItemInstance* CreateBaseItem(const EQEmu::ItemData* item, int16 charges = 0); + /** + * faction + */ + void GetFactionListInfo(uint32 &list_count, uint32 &max_lists); + const NPCFactionList *GetNPCFactionEntry(uint32 id); + void LoadNPCFactionLists(void *data, uint32 size, uint32 list_count, uint32 max_lists); + bool LoadNPCFactionLists(const std::string &prefix); - /* - Shared Memory crap - */ + /** + * loot + */ + void GetLootTableInfo(uint32 &loot_table_count, uint32 &max_loot_table, uint32 &loot_table_entries); + void GetLootDropInfo(uint32 &loot_drop_count, uint32 &max_loot_drop, uint32 &loot_drop_entries); + void LoadLootTables(void *data, uint32 size); + void LoadLootDrops(void *data, uint32 size); + bool LoadLoot(const std::string &prefix); + const LootTable_Struct *GetLootTable(uint32 loottable_id); + const LootDrop_Struct *GetLootDrop(uint32 lootdrop_id); - //items - void GetItemsCount(int32 &item_count, uint32 &max_id); - void LoadItems(void *data, uint32 size, int32 items, uint32 max_item_id); - bool LoadItems(const std::string &prefix); - const EQEmu::ItemData* IterateItems(uint32* id); - const EQEmu::ItemData* GetItem(uint32 id); - const EvolveInfo* GetEvolveInfo(uint32 loregroup); + /** + * skills + */ + void LoadSkillCaps(void *data); + bool LoadSkillCaps(const std::string &prefix); + uint16 GetSkillCap(uint8 Class_, EQEmu::skills::SkillType Skill, uint8 Level); + uint8 GetTrainLevel(uint8 Class_, EQEmu::skills::SkillType Skill, uint8 Level); - //faction lists - void GetFactionListInfo(uint32 &list_count, uint32 &max_lists); - const NPCFactionList* GetNPCFactionEntry(uint32 id); - void LoadNPCFactionLists(void *data, uint32 size, uint32 list_count, uint32 max_lists); - bool LoadNPCFactionLists(const std::string &prefix); + /** + * spells + */ + int GetMaxSpellID(); + bool LoadSpells(const std::string &prefix, int32 *records, const SPDat_Spell_Struct **sp); + void LoadSpells(void *data, int max_spells); + void LoadDamageShieldTypes(SPDat_Spell_Struct *sp, int32 iMaxSpellID); - //loot - void GetLootTableInfo(uint32 &loot_table_count, uint32 &max_loot_table, uint32 &loot_table_entries); - void GetLootDropInfo(uint32 &loot_drop_count, uint32 &max_loot_drop, uint32 &loot_drop_entries); - void LoadLootTables(void *data, uint32 size); - void LoadLootDrops(void *data, uint32 size); - bool LoadLoot(const std::string &prefix); - const LootTable_Struct* GetLootTable(uint32 loottable_id); - const LootDrop_Struct* GetLootDrop(uint32 lootdrop_id); + /** + * basedata + */ + int GetMaxBaseDataLevel(); + bool LoadBaseData(const std::string &prefix); + void LoadBaseData(void *data, int max_level); + const BaseDataStruct *GetBaseData(int lvl, int cl); - void LoadSkillCaps(void *data); - bool LoadSkillCaps(const std::string &prefix); - uint16 GetSkillCap(uint8 Class_, EQEmu::skills::SkillType Skill, uint8 Level); - uint8 GetTrainLevel(uint8 Class_, EQEmu::skills::SkillType Skill, uint8 Level); +protected: - int GetMaxSpellID(); - bool LoadSpells(const std::string &prefix, int32 *records, const SPDat_Spell_Struct **sp); - void LoadSpells(void *data, int max_spells); - void LoadDamageShieldTypes(SPDat_Spell_Struct* sp, int32 iMaxSpellID); - - int GetMaxBaseDataLevel(); - bool LoadBaseData(const std::string &prefix); - void LoadBaseData(void *data, int max_level); - const BaseDataStruct* GetBaseData(int lvl, int cl); - - protected: - - std::unique_ptr skill_caps_mmf; - std::unique_ptr items_mmf; - std::unique_ptr> items_hash; - std::unique_ptr faction_mmf; - std::unique_ptr> faction_hash; - std::unique_ptr loot_table_mmf; - std::unique_ptr> loot_table_hash; - std::unique_ptr loot_drop_mmf; - std::unique_ptr> loot_drop_hash; - std::unique_ptr base_data_mmf; - std::unique_ptr spells_mmf; + std::unique_ptr skill_caps_mmf; + std::unique_ptr items_mmf; + std::unique_ptr> items_hash; + std::unique_ptr faction_mmf; + std::unique_ptr> faction_hash; + std::unique_ptr loot_table_mmf; + std::unique_ptr> loot_table_hash; + std::unique_ptr loot_drop_mmf; + std::unique_ptr> loot_drop_hash; + std::unique_ptr base_data_mmf; + std::unique_ptr spells_mmf; }; #endif /*SHAREDDB_H_*/ diff --git a/utils/scripts/generators/repository-generator.pl b/utils/scripts/generators/repository-generator.pl index 55af7ee9e..93084d7a0 100644 --- a/utils/scripts/generators/repository-generator.pl +++ b/utils/scripts/generators/repository-generator.pl @@ -457,10 +457,10 @@ sub translate_mysql_data_type_to_c { my $struct_data_type = "std::string"; if ($mysql_data_type =~ /tinyint/) { - $struct_data_type = 'int8'; + $struct_data_type = 'int'; } elsif ($mysql_data_type =~ /smallint/) { - $struct_data_type = 'int16'; + $struct_data_type = 'int'; } elsif ($mysql_data_type =~ /bigint/) { $struct_data_type = 'int'; diff --git a/zone/CMakeLists.txt b/zone/CMakeLists.txt index 80415f6ff..beacca565 100644 --- a/zone/CMakeLists.txt +++ b/zone/CMakeLists.txt @@ -142,6 +142,7 @@ SET(zone_sources zone_config.cpp zonedb.cpp zone_reload.cpp + zone_store.cpp zoning.cpp ) @@ -249,7 +250,9 @@ SET(zone_headers zone_config.h zonedb.h zonedump.h - zone_reload.h ) + zone_reload.h + zone_store.h +) ADD_EXECUTABLE(zone ${zone_sources} ${zone_headers}) diff --git a/zone/main.cpp b/zone/main.cpp index aacf01430..b44ee3421 100644 --- a/zone/main.cpp +++ b/zone/main.cpp @@ -1,20 +1,22 @@ -/* EQEMu: Everquest Server Emulator -Copyright (C) 2001-2016 EQEMu Development Team (http://eqemu.org) - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; version 2 of the License. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY except by those people which sell it, which -are required to give you total support for your newly bought product; -without even the implied warranty of MERCHANTABILITY or FITNESS FOR -A PARTICULAR PURPOSE. See the GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -*/ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ #define DONT_SHARED_OPCODES #define PLATFORM_ZONE 1 @@ -93,6 +95,7 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #else #include #include "../common/unix.h" +#include "zone_store.h" #endif @@ -101,6 +104,7 @@ extern volatile bool is_zone_loaded; EntityList entity_list; WorldServer worldserver; +ZoneStore zone_store; uint32 numclients = 0; char errorname[32]; extern Zone* zone; @@ -318,6 +322,8 @@ int main(int argc, char** argv) { content_db.LoadZoneNames(); database.zonename_array = content_db.zonename_array; + zone_store.LoadZonesStore(); + LogInfo("Loading items"); if (!database.LoadItems(hotfix_name)) { LogError("Loading items failed!"); @@ -373,7 +379,7 @@ int main(int argc, char** argv) { LogInfo("Loading commands"); int retval = command_init(); - if (retval<0) + if (retval < 0) LogError("Command loading failed"); else LogInfo("{} commands loaded", retval); @@ -466,7 +472,7 @@ int main(int argc, char** argv) { if (!strlen(zone_name) || !strcmp(zone_name, ".")) { LogInfo("Entering sleep mode"); } - else if (!Zone::Bootup(content_db.GetZoneID(zone_name), instance_id, true)) { + else if (!Zone::Bootup(ZoneID(zone_name), instance_id, true)) { LogError("Zone Bootup failed :: Zone::Bootup"); zone = 0; } diff --git a/zone/zone.h b/zone/zone.h index 728b19e3e..5249ff994 100755 --- a/zone/zone.h +++ b/zone/zone.h @@ -335,7 +335,6 @@ public: double GetMaxMovementUpdateRange() const { return max_movement_update_range; } - /** * Modding hooks */ diff --git a/zone/zone_store.cpp b/zone/zone_store.cpp new file mode 100644 index 000000000..37f50181b --- /dev/null +++ b/zone/zone_store.cpp @@ -0,0 +1,77 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#include "zone_store.h" + +ZoneStore::ZoneStore() = default; +ZoneStore::~ZoneStore() = default; + +void ZoneStore::LoadZonesStore() +{ + zones = ZoneRepository::All(); +} + +uint32 ZoneStore::GetZoneID(const char *in_zone_name) +{ + if (in_zone_name == nullptr) { + return 0; + } + + std::string zone_name = in_zone_name; + + return GetZoneID(zone_name); +} + +uint32 ZoneStore::GetZoneID(std::string zone_name) +{ + for (auto &z: zones) { + if (z.short_name == zone_name) { + return z.zoneidnumber; + } + } + + return 0; +} + +const char *ZoneStore::GetZoneName(uint32 zone_id, bool error_unknown) +{ + for (auto &z: zones) { + if (z.zoneidnumber == zone_id) { + return z.short_name.c_str(); + } + } + + if (error_unknown) { + return "UNKNOWN"; + } + + return nullptr; +} + +std::string ZoneStore::GetZoneName(uint32 zone_id) +{ + for (auto &z: zones) { + if (z.zoneidnumber == zone_id) { + return z.short_name; + } + } + + return std::string(); +} diff --git a/zone/zone_store.h b/zone/zone_store.h new file mode 100644 index 000000000..6721a3d0c --- /dev/null +++ b/zone/zone_store.h @@ -0,0 +1,59 @@ +/** + * EQEmulator: Everquest Server Emulator + * Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY except by those people which sell it, which + * are required to give you total support for your newly bought product; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef EQEMU_ZONE_STORE_H +#define EQEMU_ZONE_STORE_H + +#include "zonedb.h" +#include "../common/repositories/zone_repository.h" + +class ZoneStore { +public: + ZoneStore(); + virtual ~ZoneStore(); + + std::vector zones; + + void LoadZonesStore(); + + uint32 GetZoneID(const char *in_zone_name); + uint32 GetZoneID(std::string zone_name); + std::string GetZoneName(uint32 zone_id); + const char *GetZoneName(uint32 zone_id, bool error_unknown); +}; + +extern ZoneStore zone_store; + +/** + * Global helpers + */ +inline uint32 ZoneID(const char *in_zone_name) { return zone_store.GetZoneID(in_zone_name); } +inline uint32 ZoneID(std::string zone_name) { return zone_store.GetZoneID(zone_name); } +inline std::string ZoneName(uint32 zone_id) { return zone_store.GetZoneName(zone_id); } +inline const char *ZoneName(uint32 zone_id, bool error_unknown) +{ + return zone_store.GetZoneName( + zone_id, + error_unknown + ); +} + + +#endif //EQEMU_ZONE_STORE_H