diff --git a/CMakeLists.txt b/CMakeLists.txt index e044321aa..29327f53c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -160,7 +160,7 @@ endif() if(EQEMU_BUILD_SERVER) add_subdirectory(shared_memory) add_subdirectory(world) - #add_subdirectory(zone) + add_subdirectory(zone) add_subdirectory(ucs) add_subdirectory(queryserv) add_subdirectory(eqlaunch) diff --git a/zone/CMakeLists.txt b/zone/CMakeLists.txt index feac2f134..b2a222dac 100644 --- a/zone/CMakeLists.txt +++ b/zone/CMakeLists.txt @@ -23,7 +23,6 @@ set(zone_sources client_process.cpp combat_record.cpp corpse.cpp - ../common/data_bucket.cpp doors.cpp dialogue_window.cpp dynamic_zone.cpp @@ -139,7 +138,6 @@ set(zone_headers command.h common.h corpse.h - ../common/data_bucket.h doors.h dialogue_window.h dynamic_zone.h @@ -491,23 +489,32 @@ endif() add_definitions(-DZONE) # link lua_zone unity build against luabind -if(MSVC) - target_compile_options(lua_zone PRIVATE /utf-8) -endif() - -target_link_libraries(lua_zone PRIVATE luabind Boost::dynamic_bitset Boost::tuple Boost::foreach unofficial::libmariadb) -if (EQEMU_BUILD_STATIC AND LUA_LIBRARY) - target_link_libraries(zone PRIVATE ${LUA_LIBRARY}) +if(EQEMU_BUILD_LUA) + target_compile_definitions(lua_zone PUBLIC LUA_EQEMU) + target_link_libraries(lua_zone PRIVATE luabind Boost::dynamic_bitset Boost::tuple Boost::foreach common) + if (EQEMU_BUILD_STATIC AND LUA_LIBRARY) + target_link_libraries(zone PRIVATE ${LUA_LIBRARY}) + endif() endif() # perl unity build links against perl_zone -target_link_libraries(perl_zone PRIVATE perlbind fmt::fmt unofficial::libmariadb ${PERL_LIBRARY_LIBS}) -if (EQEMU_BUILD_STATIC AND PERL_LIBRARY) - target_link_libraries(zone PRIVATE ${PERL_LIBRARY}) +if(EQEMU_BUILD_PERL) + target_link_libraries(perl_zone PRIVATE perlbind common ${PERL_LIBRARY_LIBS}) + if (EQEMU_BUILD_STATIC AND PERL_LIBRARY) + target_link_libraries(zone PRIVATE ${PERL_LIBRARY}) + endif() endif() # link zone against common libraries -target_link_libraries(zone PRIVATE lua_zone perl_zone gm_commands_zone ${ZONE_LIBS} RecastNavigation::Detour) +target_link_libraries(zone PRIVATE gm_commands_zone common RecastNavigation::Detour) + +if(EQEMU_BUILD_LUA) + target_link_libraries(zone PRIVATE lua_zone) +endif() + +if(EQEMU_BUILD_PERL) + target_link_libraries(zone PRIVATE perl_zone) +endif() SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin) diff --git a/zone/bonuses.cpp b/zone/bonuses.cpp index 0cc44cac3..c1beab76f 100644 --- a/zone/bonuses.cpp +++ b/zone/bonuses.cpp @@ -5901,7 +5901,7 @@ float Mob::CheckHeroicBonusesDataBuckets(std::string bucket_name) DataBucketKey k = GetScopedBucketKeys(); k.key = bucket_name; if (IsOfClientBot()) { - bucket_value = DataBucket::GetData(k).value; + bucket_value = DataBucket::GetData(&database, k).value; } if (bucket_value.empty() || !Strings::IsNumber(bucket_value)) { diff --git a/zone/bot.cpp b/zone/bot.cpp index 1aeb0c09a..d0d83fbc8 100644 --- a/zone/bot.cpp +++ b/zone/bot.cpp @@ -8224,13 +8224,13 @@ bool Bot::CheckDataBucket(std::string bucket_name, const std::string& bucket_val DataBucketKey k = GetScopedBucketKeys(); k.key = bucket_name; - auto b = DataBucket::GetData(k); + auto b = DataBucket::GetData(&database, k); if (b.value.empty() && GetBotOwner()) { // fetch from owner k = GetBotOwner()->GetScopedBucketKeys(); k.key = bucket_name; - b = DataBucket::GetData(k); + b = DataBucket::GetData(&database, k); if (b.value.empty()) { return false; } diff --git a/zone/cli/benchmark_databuckets.cpp b/zone/cli/benchmark_databuckets.cpp index af0dcb84a..65d6ead0b 100644 --- a/zone/cli/benchmark_databuckets.cpp +++ b/zone/cli/benchmark_databuckets.cpp @@ -116,7 +116,7 @@ void RunBenchmarkCycle(uint64_t target_rows) break; } - DataBucket::SetData(e); + DataBucket::SetData(&database, e); inserted_keys.emplace_back(e); } @@ -129,7 +129,7 @@ void RunBenchmarkCycle(uint64_t target_rows) auto update_start = std::chrono::high_resolution_clock::now(); for (auto &key: inserted_keys) { // 🔍 Retrieve existing bucket using scoped `GetData` - auto e = DataBucket::GetData(key); + auto e = DataBucket::GetData(&database, key); if (e.id > 0) { // create a new key object with the updated values DataBucketKey bucket_entry_key{ @@ -145,7 +145,7 @@ void RunBenchmarkCycle(uint64_t target_rows) }; // 🔄 Update using DataBucket class - DataBucket::SetData(bucket_entry_key); + DataBucket::SetData(&database, bucket_entry_key); } } auto update_end = std::chrono::high_resolution_clock::now(); @@ -188,7 +188,7 @@ void RunBenchmarkCycle(uint64_t target_rows) k.instance_id = entity_choice; } - DataBucket::GetData(key); + DataBucket::GetData(&database, key); } auto read_cached_end = std::chrono::high_resolution_clock::now(); std::chrono::duration read_cached_time = read_cached_end - read_cached_start; @@ -206,7 +206,7 @@ void RunBenchmarkCycle(uint64_t target_rows) .character_id = 999999999, // use scoped value }; - DataBucket::GetData(k); + DataBucket::GetData(&database, k); } auto read_client_cache_miss_end = std::chrono::high_resolution_clock::now(); std::chrono::duration read_client_cache_miss_time = read_client_cache_miss_end - read_client_cache_miss_start; @@ -260,7 +260,7 @@ void RunBenchmarkCycle(uint64_t target_rows) k.instance_id = entity_choice; } - DataBucket::DeleteData(k); + DataBucket::DeleteData(&database, k); } auto delete_end = std::chrono::high_resolution_clock::now(); std::chrono::duration delete_time = delete_end - delete_start; diff --git a/zone/client.cpp b/zone/client.cpp index 5ed9eddec..07fa25ba6 100644 --- a/zone/client.cpp +++ b/zone/client.cpp @@ -4840,7 +4840,7 @@ bool Client::IsNameChangeAllowed() { auto k = GetScopedBucketKeys(); k.key = "name_change_allowed"; - auto b = DataBucket::GetData(k); + auto b = DataBucket::GetData(&database, k); if (!b.value.empty()) { return true; } @@ -4856,7 +4856,7 @@ bool Client::ClearNameChange() { auto k = GetScopedBucketKeys(); k.key = "name_change_allowed"; - DataBucket::DeleteData(k); + DataBucket::DeleteData(&database, k); return true; } @@ -4878,7 +4878,7 @@ void Client::GrantNameChange() { auto k = GetScopedBucketKeys(); k.key = "name_change_allowed"; k.value = "allowed"; // potentially put a timestamp here - DataBucket::SetData(k); + DataBucket::SetData(&database, k); InvokeChangeNameWindow(true); } @@ -4891,7 +4891,7 @@ bool Client::IsPetNameChangeAllowed() { DataBucketKey k = GetScopedBucketKeys(); k.key = "PetNameChangesAllowed"; - auto b = DataBucket::GetData(k); + auto b = DataBucket::GetData(&database, k); if (!b.value.empty()) { return true; } @@ -4915,7 +4915,7 @@ void Client::GrantPetNameChange() { DataBucketKey k = GetScopedBucketKeys(); k.key = "PetNameChangesAllowed"; k.value = "true"; - DataBucket::SetData(k); + DataBucket::SetData(&database, k); InvokeChangePetName(true); } @@ -4924,7 +4924,7 @@ void Client::ClearPetNameChange() { DataBucketKey k = GetScopedBucketKeys(); k.key = "PetNameChangesAllowed"; - DataBucket::DeleteData(k); + DataBucket::DeleteData(&database, k); } bool Client::ChangePetName(std::string new_name) @@ -9671,9 +9671,9 @@ void Client::SetDevToolsEnabled(bool in_dev_tools_enabled) const auto dev_tools_key = fmt::format("{}-dev-tools-disabled", AccountID()); if (in_dev_tools_enabled) { - DataBucket::DeleteData(dev_tools_key); + DataBucket::DeleteData(&database, dev_tools_key); } else { - DataBucket::SetData(dev_tools_key, "true"); + DataBucket::SetData(&database, dev_tools_key, "true"); } Client::dev_tools_enabled = in_dev_tools_enabled; @@ -9846,7 +9846,7 @@ void Client::SendToGuildHall() uint32 expiration_time = (RuleI(Instances, GuildHallExpirationDays) * 86400); uint16 instance_id = 0; std::string guild_hall_instance_key = fmt::format("guild-hall-instance-{}", GuildID()); - std::string instance_data = DataBucket::GetData(guild_hall_instance_key); + std::string instance_data = DataBucket::GetData(&database, guild_hall_instance_key); if (!instance_data.empty() && Strings::ToInt(instance_data) > 0) { instance_id = Strings::ToInt(instance_data); } @@ -9863,6 +9863,7 @@ void Client::SendToGuildHall() } DataBucket::SetData( + &database, guild_hall_instance_key, std::to_string(instance_id), std::to_string(expiration_time) @@ -10915,7 +10916,7 @@ void Client::SendToInstance(std::string instance_type, std::string zone_short_na instance_identifier, zone_short_name ); - std::string current_bucket_value = DataBucket::GetData(full_bucket_name); + std::string current_bucket_value = DataBucket::GetData(&database, full_bucket_name); uint16 instance_id = 0; if (current_bucket_value.length() > 0) { @@ -10931,7 +10932,7 @@ void Client::SendToInstance(std::string instance_type, std::string zone_short_na return; } - DataBucket::SetData(full_bucket_name, itoa(instance_id), itoa(duration)); + DataBucket::SetData(&database, full_bucket_name, itoa(instance_id), itoa(duration)); } AssignToInstance(instance_id); @@ -13149,7 +13150,7 @@ std::string Client::GetAccountBucket(std::string bucket_name) k.account_id = AccountID(); k.key = bucket_name; - return DataBucket::GetData(k).value; + return DataBucket::GetData(&database, k).value; } void Client::SetAccountBucket(std::string bucket_name, std::string bucket_value, std::string expiration) @@ -13160,7 +13161,7 @@ void Client::SetAccountBucket(std::string bucket_name, std::string bucket_value, k.expires = expiration; k.value = bucket_value; - DataBucket::SetData(k); + DataBucket::SetData(&database, k); } void Client::DeleteAccountBucket(std::string bucket_name) @@ -13169,7 +13170,7 @@ void Client::DeleteAccountBucket(std::string bucket_name) k.account_id = AccountID(); k.key = bucket_name; - DataBucket::DeleteData(k); + DataBucket::DeleteData(&database, k); } std::string Client::GetAccountBucketExpires(std::string bucket_name) @@ -13178,7 +13179,7 @@ std::string Client::GetAccountBucketExpires(std::string bucket_name) k.account_id = AccountID(); k.key = bucket_name; - return DataBucket::GetDataExpires(k); + return DataBucket::GetDataExpires(&database, k); } std::string Client::GetAccountBucketRemaining(std::string bucket_name) @@ -13187,7 +13188,7 @@ std::string Client::GetAccountBucketRemaining(std::string bucket_name) k.account_id = AccountID(); k.key = bucket_name; - return DataBucket::GetDataRemaining(k); + return DataBucket::GetDataRemaining(&database, k); } std::string Client::GetBandolierName(uint8 bandolier_slot) diff --git a/zone/client_packet.cpp b/zone/client_packet.cpp index a059bef65..c7bb4a05c 100644 --- a/zone/client_packet.cpp +++ b/zone/client_packet.cpp @@ -1853,7 +1853,7 @@ void Client::Handle_Connect_OP_ZoneEntry(const EQApplicationPacket *app) */ if (Admin() >= EQ::DevTools::GM_ACCOUNT_STATUS_LEVEL) { const auto dev_tools_key = fmt::format("{}-dev-tools-disabled", AccountID()); - if (DataBucket::GetData(dev_tools_key) == "true") { + if (DataBucket::GetData(&database, dev_tools_key) == "true") { dev_tools_enabled = false; } } diff --git a/zone/client_process.cpp b/zone/client_process.cpp index e14985763..19440e3bb 100644 --- a/zone/client_process.cpp +++ b/zone/client_process.cpp @@ -874,7 +874,7 @@ void Client::BulkSendMerchantInventory(int merchant_id, int npcid) { DataBucketKey k = GetScopedBucketKeys(); k.key = bucket_name; - auto b = DataBucket::GetData(k); + auto b = DataBucket::GetData(&database, k); if (b.value.empty()) { continue; } diff --git a/zone/exp.cpp b/zone/exp.cpp index e3016f8b2..1f64d8b71 100644 --- a/zone/exp.cpp +++ b/zone/exp.cpp @@ -1299,7 +1299,7 @@ uint8 Client::GetCharMaxLevelFromBucket() DataBucketKey k = GetScopedBucketKeys(); k.key = "CharMaxLevel"; - auto b = DataBucket::GetData(k); + auto b = DataBucket::GetData(&database, k); if (!b.value.empty()) { if (Strings::IsNumber(b.value)) { return static_cast(Strings::ToUnsignedInt(b.value)); diff --git a/zone/gm_commands/databuckets.cpp b/zone/gm_commands/databuckets.cpp index af78f528e..ca2b17808 100755 --- a/zone/gm_commands/databuckets.cpp +++ b/zone/gm_commands/databuckets.cpp @@ -50,7 +50,7 @@ void command_databuckets(Client *c, const Seperator *sep) !npc_id && !bot_id ) { - if (!DataBucket::DeleteData(key_filter)) { + if (!DataBucket::DeleteData(&database, key_filter)) { c->Message( Chat::White, fmt::format( @@ -76,7 +76,7 @@ void command_databuckets(Client *c, const Seperator *sep) k.npc_id = npc_id; k.bot_id = bot_id; - if (!DataBucket::DeleteData(k)) { + if (!DataBucket::DeleteData(&database, k)) { c->Message( Chat::White, fmt::format( @@ -123,7 +123,7 @@ void command_databuckets(Client *c, const Seperator *sep) const std::string& expires_string = expires == 0 ? "Never" : std::to_string(expires); - DataBucket::SetData(k); + DataBucket::SetData(&database, k); c->Message( Chat::White, diff --git a/zone/gm_commands/gmzone.cpp b/zone/gm_commands/gmzone.cpp index a26a09d05..9aefd58bc 100755 --- a/zone/gm_commands/gmzone.cpp +++ b/zone/gm_commands/gmzone.cpp @@ -58,7 +58,7 @@ void command_gmzone(Client *c, const Seperator *sep) zone_version ); - auto existing_zone_instance = DataBucket::GetData(bucket_key); + auto existing_zone_instance = DataBucket::GetData(&database, bucket_key); uint16 instance_id = 0; uint32 duration = 100000000; @@ -99,6 +99,7 @@ void command_gmzone(Client *c, const Seperator *sep) ); DataBucket::SetData( + &database, bucket_key, std::to_string(instance_id) ); diff --git a/zone/lua_general.cpp b/zone/lua_general.cpp index 1873aec0b..73a1e29ba 100644 --- a/zone/lua_general.cpp +++ b/zone/lua_general.cpp @@ -933,23 +933,23 @@ std::string lua_get_rule(std::string rule_name) { } std::string lua_get_data(std::string bucket_key) { - return DataBucket::GetData(bucket_key); + return DataBucket::GetData(&database, bucket_key); } std::string lua_get_data_expires(std::string bucket_key) { - return DataBucket::GetDataExpires(bucket_key); + return DataBucket::GetDataExpires(&database, bucket_key); } void lua_set_data(std::string bucket_key, std::string bucket_value) { - DataBucket::SetData(bucket_key, bucket_value); + DataBucket::SetData(&database, bucket_key, bucket_value); } void lua_set_data(std::string bucket_key, std::string bucket_value, std::string expires_at) { - DataBucket::SetData(bucket_key, bucket_value, expires_at); + DataBucket::SetData(&database, bucket_key, bucket_value, expires_at); } bool lua_delete_data(std::string bucket_key) { - return DataBucket::DeleteData(bucket_key); + return DataBucket::DeleteData(&database, bucket_key); } std::string lua_get_char_name_by_id(uint32 char_id) { @@ -2030,7 +2030,7 @@ void lua_rename(std::string name) { } std::string lua_get_data_remaining(std::string bucket_name) { - return DataBucket::GetDataRemaining(bucket_name); + return DataBucket::GetDataRemaining(&database, bucket_name); } const int lua_get_item_stat(uint32 item_id, std::string identifier) { diff --git a/zone/mob.cpp b/zone/mob.cpp index 1302246b2..69d1ce826 100644 --- a/zone/mob.cpp +++ b/zone/mob.cpp @@ -8161,7 +8161,7 @@ void Mob::DeleteBucket(std::string bucket_name) DataBucketKey k = GetScopedBucketKeys(); k.key = bucket_name; - DataBucket::DeleteData(k); + DataBucket::DeleteData(&database, k); } std::string Mob::GetBucket(std::string bucket_name) @@ -8169,7 +8169,7 @@ std::string Mob::GetBucket(std::string bucket_name) DataBucketKey k = GetScopedBucketKeys(); k.key = bucket_name; - auto b = DataBucket::GetData(k); + auto b = DataBucket::GetData(&database, k); if (!b.value.empty()) { return b.value; } @@ -8181,7 +8181,7 @@ std::string Mob::GetBucketExpires(std::string bucket_name) DataBucketKey k = GetScopedBucketKeys(); k.key = bucket_name; - std::string bucket_expiration = DataBucket::GetDataExpires(k); + std::string bucket_expiration = DataBucket::GetDataExpires(&database, k); if (!bucket_expiration.empty()) { return bucket_expiration; } @@ -8194,7 +8194,7 @@ std::string Mob::GetBucketRemaining(std::string bucket_name) DataBucketKey k = GetScopedBucketKeys(); k.key = bucket_name; - std::string bucket_remaining = DataBucket::GetDataRemaining(k); + std::string bucket_remaining = DataBucket::GetDataRemaining(&database, k); if (!bucket_remaining.empty() && Strings::ToInt(bucket_remaining) > 0) { return bucket_remaining; } @@ -8212,7 +8212,7 @@ void Mob::SetBucket(std::string bucket_name, std::string bucket_value, std::stri k.expires = expiration; k.value = bucket_value; - DataBucket::SetData(k); + DataBucket::SetData(&database, k); } std::string Mob::GetMobDescription() @@ -8783,12 +8783,12 @@ bool Mob::LoadDataBucketsCache() } if (IsBot()) { - DataBucket::BulkLoadEntitiesToCache(DataBucketLoadType::Bot, {id}); + DataBucket::BulkLoadEntitiesToCache(&database, DataBucketLoadType::Bot, {id}); } else if (IsClient()) { uint32 account_id = CastToClient()->AccountID(); - DataBucket::BulkLoadEntitiesToCache(DataBucketLoadType::Account, {account_id}); - DataBucket::BulkLoadEntitiesToCache(DataBucketLoadType::Client, {id}); + DataBucket::BulkLoadEntitiesToCache(&database, DataBucketLoadType::Account, {account_id}); + DataBucket::BulkLoadEntitiesToCache(&database, DataBucketLoadType::Client, {id}); } return true; diff --git a/zone/spells.cpp b/zone/spells.cpp index c37fa4467..6636a092c 100644 --- a/zone/spells.cpp +++ b/zone/spells.cpp @@ -6275,7 +6275,7 @@ bool Client::SpellBucketCheck(uint16 spell_id, uint32 character_id) k.key = e.bucket_name; - const auto& b = DataBucket::GetData(k); + const auto& b = DataBucket::GetData(&database, k); return zone->CompareDataBucket(e.bucket_comparison, e.bucket_value, b.value); } diff --git a/zone/zone.cpp b/zone/zone.cpp index eea9d8a97..4e4108720 100644 --- a/zone/zone.cpp +++ b/zone/zone.cpp @@ -170,7 +170,7 @@ bool Zone::Bootup(uint32 iZoneID, uint32 iInstanceID, bool is_static) { zone->RequestUCSServerStatus(); zone->StartShutdownTimer(); - DataBucket::LoadZoneCache(iZoneID, iInstanceID); + DataBucket::LoadZoneCache(&database, iZoneID, iInstanceID); /* * Set Logging @@ -3186,7 +3186,7 @@ std::string Zone::GetBucket(const std::string& bucket_name) k.instance_id = instanceid; k.key = bucket_name; - return DataBucket::GetData(k).value; + return DataBucket::GetData(&database, k).value; } void Zone::SetBucket(const std::string& bucket_name, const std::string& bucket_value, const std::string& expiration) @@ -3198,7 +3198,7 @@ void Zone::SetBucket(const std::string& bucket_name, const std::string& bucket_v k.expires = expiration; k.value = bucket_value; - DataBucket::SetData(k); + DataBucket::SetData(&database, k); } void Zone::DeleteBucket(const std::string& bucket_name) @@ -3208,7 +3208,7 @@ void Zone::DeleteBucket(const std::string& bucket_name) k.instance_id = instanceid; k.key = bucket_name; - DataBucket::DeleteData(k); + DataBucket::DeleteData(&database, k); } std::string Zone::GetBucketExpires(const std::string& bucket_name) @@ -3218,7 +3218,7 @@ std::string Zone::GetBucketExpires(const std::string& bucket_name) k.instance_id = instanceid; k.key = bucket_name; - return DataBucket::GetDataExpires(k); + return DataBucket::GetDataExpires(&database, k); } std::string Zone::GetBucketRemaining(const std::string& bucket_name) @@ -3228,7 +3228,7 @@ std::string Zone::GetBucketRemaining(const std::string& bucket_name) k.instance_id = instanceid; k.key = bucket_name; - return DataBucket::GetDataRemaining(k); + return DataBucket::GetDataRemaining(&database, k); } void Zone::DisableRespawnTimers()