diff --git a/common/zone_store.cpp b/common/zone_store.cpp index 0b0690743..23a59c31e 100644 --- a/common/zone_store.cpp +++ b/common/zone_store.cpp @@ -162,6 +162,32 @@ std::string ZoneStore::GetZoneLongName(uint32 zone_id) return {}; } +std::string ZoneStore::GetZoneShortNameByLongName(const std::string& zone_long_name) +{ + for (const auto& z : m_zones) { + if (z.long_name == zone_long_name) { + return z.short_name; + } + } + + LogInfo("Failed to get zone short name by zone_long_name [{}]", zone_long_name); + + return {}; +} + +uint32 ZoneStore::GetZoneIDByLongName(const std::string& zone_long_name) +{ + for (const auto& z : m_zones) { + if (z.long_name == zone_long_name) { + return z.zoneidnumber; + } + } + + LogInfo("Failed to get zone ID by zone_long_name [{}]", zone_long_name); + + return 0; +} + /** * @param zone_id * @param version diff --git a/common/zone_store.h b/common/zone_store.h index fcc94a2d9..b63e807f2 100644 --- a/common/zone_store.h +++ b/common/zone_store.h @@ -42,6 +42,8 @@ public: uint32 GetZoneID(std::string zone_name); std::string GetZoneName(uint32 zone_id); std::string GetZoneLongName(uint32 zone_id); + std::string GetZoneShortNameByLongName(const std::string& zone_long_name); + uint32 GetZoneIDByLongName(const std::string& zone_long_name); const char *GetZoneName(uint32 zone_id, bool error_unknown = false); const char *GetZoneLongName(uint32 zone_id, bool error_unknown = false); ZoneRepository::Zone *GetZoneWithFallback(uint32 zone_id, int version = 0); diff --git a/zone/embparser_api.cpp b/zone/embparser_api.cpp index 1a5ad027d..dc706ac5e 100644 --- a/zone/embparser_api.cpp +++ b/zone/embparser_api.cpp @@ -5865,6 +5865,16 @@ bool Perl__SetAutoLoginCharacterNameByAccountID(uint32 account_id, std::string c return quest_manager.SetAutoLoginCharacterNameByAccountID(account_id, character_name); } +uint32 Perl__GetZoneIDByLongName(std::string zone_long_name) +{ + return zone_store.GetZoneIDByLongName(zone_long_name); +} + +std::string Perl__GetZoneShortNameByLongName(std::string zone_long_name) +{ + return zone_store.GetZoneShortNameByLongName(zone_long_name); +} + void perl_register_quest() { perl::interpreter perl(PERL_GET_THX); @@ -5951,6 +5961,7 @@ void perl_register_quest() package.add("GetZoneInstanceType", (uint8(*)(uint32))&Perl__GetZoneInstanceType); package.add("GetZoneInstanceType", (uint8(*)(uint32, int))&Perl__GetZoneInstanceType); package.add("GetZoneID", &Perl__GetZoneID); + package.add("GetZoneIDByLongName", (uint32(*)(std::string))&Perl__GetZoneIDByLongName); package.add("GetZoneExpansion", (int8(*)(uint32))&Perl__GetZoneExpansion); package.add("GetZoneExpansion", (int8(*)(uint32, int))&Perl__GetZoneExpansion); package.add("GetZoneExperienceMultiplier", (float(*)(uint32))&Perl__GetZoneExperienceMultiplier); @@ -6030,6 +6041,8 @@ void perl_register_quest() package.add("GetZoneSafeZ", (float(*)(uint32, int))&Perl__GetZoneSafeZ); package.add("GetZoneSecondsBeforeIdle", (uint32(*)(uint32))&Perl__GetZoneSecondsBeforeIdle); package.add("GetZoneSecondsBeforeIdle", (uint32(*)(uint32, int))&Perl__GetZoneSecondsBeforeIdle); + package.add("GetZoneShortName", (std::string(*)(uint32))&Perl__GetZoneShortName); + package.add("GetZoneShortNameByLongName", (std::string(*)(std::string))&Perl__GetZoneShortNameByLongName); package.add("GetZoneShutdownDelay", (uint64(*)(uint32))&Perl__GetZoneShutdownDelay); package.add("GetZoneShutdownDelay", (uint64(*)(uint32, int))&Perl__GetZoneShutdownDelay); package.add("GetZoneSky", (uint8(*)(uint32))&Perl__GetZoneSky); @@ -6046,7 +6059,6 @@ void perl_register_quest() package.add("GetZoneSuspendBuffs", (uint8(*)(uint32, int))&Perl__GetZoneSuspendBuffs); package.add("GetZoneZType", (uint8(*)(uint32))&Perl__GetZoneZType); package.add("GetZoneZType", (uint8(*)(uint32, int))&Perl__GetZoneZType); - package.add("GetZoneShortName", &Perl__GetZoneShortName); package.add("GetZoneTimeType", (uint8(*)(uint32))&Perl__GetZoneTimeType); package.add("GetZoneTimeType", (uint8(*)(uint32, int))&Perl__GetZoneTimeType); package.add("GetZoneTimeZone", (int(*)(uint32))&Perl__GetZoneTimeZone); diff --git a/zone/lua_general.cpp b/zone/lua_general.cpp index 09ae74b43..5f1d03d34 100644 --- a/zone/lua_general.cpp +++ b/zone/lua_general.cpp @@ -5496,6 +5496,14 @@ bool lua_set_auto_login_character_name_by_account_id(uint32 account_id, std::str return quest_manager.SetAutoLoginCharacterNameByAccountID(account_id, character_name); } +uint32 lua_get_zone_id_by_long_name(std::string zone_long_name) { + return zone_store.GetZoneIDByLongName(zone_long_name); +} + +std::string lua_get_zone_short_name_by_long_name(std::string zone_long_name) { + return zone_store.GetZoneShortNameByLongName(zone_long_name); +} + #define LuaCreateNPCParse(name, c_type, default_value) do { \ cur = table[#name]; \ if(luabind::type(cur) != LUA_TNIL) { \ @@ -6297,6 +6305,8 @@ luabind::scope lua_register_general() { luabind::def("get_race_bitmask", &lua_get_race_bitmask), luabind::def("get_auto_login_character_name_by_account_id", &lua_get_auto_login_character_name_by_account_id), luabind::def("set_auto_login_character_name_by_account_id", &lua_set_auto_login_character_name_by_account_id), + luabind::def("get_zone_id_by_long_name", &lua_get_zone_id_by_long_name), + luabind::def("get_zone_short_name_by_long_name", &lua_get_zone_short_name_by_long_name), /* Cross Zone */