mirror of
https://github.com/EQEmu/Server.git
synced 2025-12-11 12:41:30 +00:00
Compare commits
6 Commits
612a248612
...
04d947a40e
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
04d947a40e | ||
|
|
1db4882cda | ||
|
|
ccb3cef3d7 | ||
|
|
1f37254f1a | ||
|
|
32e04ea74c | ||
|
|
6027c56d9e |
141
CMakeLists.txt
141
CMakeLists.txt
@ -37,21 +37,10 @@ set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||
set(CMAKE_CXX_EXTENSIONS OFF)
|
||||
|
||||
option(EQEMU_BUILD_PCH "Build with precompiled headers (Windows)" ON)
|
||||
option(EQEMU_ADD_PROFILER "Link with Google perftools profiler" OFF)
|
||||
option(USE_MAP_MMFS "Use memory-mapped files for maps" OFF)
|
||||
|
||||
# Requires libgoogle-perftools-dev google-perftools packages for linux (debian)
|
||||
if(EQEMU_ADD_PROFILER)
|
||||
set(CMAKE_EXE_LINKER_FLAGS "-Wl,--no-as-needed,-lprofiler,--as-needed")
|
||||
endif()
|
||||
|
||||
if(USE_MAP_MMFS)
|
||||
add_definitions(-DUSE_MAP_MMFS)
|
||||
endif()
|
||||
|
||||
if(MSVC)
|
||||
add_compile_options(/bigobj)
|
||||
add_definitions(-D_CRT_SECURE_NO_WARNINGS -DNOMINMAX -DCRASH_LOGGING -D_HAS_AUTO_PTR_ETC)
|
||||
add_compile_definitions(_CRT_SECURE_NO_WARNINGS NOMINMAX CRASH_LOGGING _HAS_AUTO_PTR_ETC)
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP")
|
||||
|
||||
option(EQEMU_DISABLE_MSVC_WARNINGS "Disable MSVC compile warnings." ON)
|
||||
@ -59,26 +48,22 @@ if(MSVC)
|
||||
add_compile_options(/W0 /wd4005 /wd4996 /nologo /Os)
|
||||
endif()
|
||||
else()
|
||||
add_definitions(-DHAS_UNION_SEMUN)
|
||||
add_compile_definitions(HAS_UNION_SEMUN)
|
||||
endif()
|
||||
|
||||
#FreeBSD support
|
||||
if(UNIX)
|
||||
if(CMAKE_SYSTEM_NAME MATCHES "FreeBSD")
|
||||
add_definitions(-DFREEBSD)
|
||||
add_definitions(-D_GLIBCXX_USE_C99)
|
||||
add_compile_definitions(FREEBSD)
|
||||
add_compile_definitions(_GLIBCXX_USE_C99)
|
||||
set(FREEBSD TRUE)
|
||||
endif()
|
||||
if(CMAKE_SYSTEM_NAME MATCHES "Darwin")
|
||||
add_definitions(-DDARWIN)
|
||||
add_compile_definitions(DARWIN)
|
||||
set(DARWIN TRUE)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
add_definitions(-DGLM_FORCE_RADIANS)
|
||||
add_definitions(-DGLM_FORCE_CTOR_INIT)
|
||||
add_definitions(-DGLM_ENABLE_EXPERIMENTAL)
|
||||
|
||||
find_package(Boost REQUIRED COMPONENTS dynamic_bitset foreach tuple)
|
||||
find_package(cereal CONFIG REQUIRED)
|
||||
find_package(fmt CONFIG REQUIRED)
|
||||
@ -133,75 +118,22 @@ message(STATUS "PERL_LIBRARIES: ${PERL_LIBRARIES}")
|
||||
message(STATUS "PERL_VERSION: ${PERL_VERSION}")
|
||||
message(STATUS "**************************************************")
|
||||
|
||||
include_directories(SYSTEM "${CMAKE_CURRENT_SOURCE_DIR}/submodules/websocketpp")
|
||||
|
||||
add_definitions(-DBOOST_BIND_GLOBAL_PLACEHOLDERS)
|
||||
|
||||
#options
|
||||
option(EQEMU_COMMANDS_LOGGING "Enable GM Command logs" ON)
|
||||
option(EQEMU_BUILD_SERVER "Build the game server." ON)
|
||||
option(EQEMU_BUILD_LOGIN "Build the login server." ON)
|
||||
option(EQEMU_BUILD_TESTS "Build utility tests." OFF)
|
||||
option(EQEMU_BUILD_CLIENT_FILES "Build Client Import/Export Data Programs." ON)
|
||||
option(EQEMU_PREFER_LUA "Build with normal Lua even if LuaJIT is found." OFF)
|
||||
|
||||
#PRNG options
|
||||
option(EQEMU_ADDITIVE_LFIB_PRNG "Use Additive LFib for PRNG." OFF)
|
||||
mark_as_advanced(EQEMU_ADDITIVE_LFIB_PRNG)
|
||||
option(EQEMU_BIASED_INT_DIST "Use biased int dist instead of uniform." OFF)
|
||||
mark_as_advanced(EQEMU_BIASED_INT_DIST)
|
||||
set(EQEMU_CUSTOM_PRNG_ENGINE "" CACHE STRING "Custom random engine. (ex. std::default_random_engine)")
|
||||
mark_as_advanced(EQEMU_CUSTOM_PRNG_ENGINE)
|
||||
|
||||
if(CMAKE_COMPILER_IS_GNUCXX)
|
||||
option(EQEMU_SFMT19937 "Use GCC's extention for SIMD Fast MT19937." OFF)
|
||||
mark_as_advanced(EQEMU_SFMT19937)
|
||||
endif()
|
||||
|
||||
if(EQEMU_ADDITIVE_LFIB_PRNG)
|
||||
add_definitions(-DUSE_ADDITIVE_LFIB_PRNG)
|
||||
if(EQEMU_SFMT19937)
|
||||
message(STATUS "SFMT19937 and ADDITITVE_LFIB_PRNG both set, SFMT19937 ignored.")
|
||||
set(EQEMU_SFMT19937 OFF)
|
||||
endif()
|
||||
if(NOT EQEMU_CUSTOM_PRNG_ENGINE STREQUAL "")
|
||||
message(STATUS "CUSTOM_PRNG_ENGINE and ADDITITVE_LFIB_PRNG both set, CUSTOM_PRNG_ENGINE ignored.")
|
||||
set(EQEMU_CUSTOM_PRNG_ENGINE "")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(EQEMU_SFMT19937)
|
||||
add_definitions(-DUSE_SFMT19937)
|
||||
if(NOT EQEMU_CUSTOM_PRNG_ENGINE STREQUAL "")
|
||||
message(STATUS "CUSTOM_PRNG_ENGINE and SFMT19937 both set, CUSTOM_PRNG_ENGINE ignored.")
|
||||
set(EQEMU_CUSTOM_PRNG_ENGINE "")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(NOT EQEMU_CUSTOM_PRNG_ENGINE STREQUAL "")
|
||||
add_definitions(-DUSE_CUSTOM_PRNG_ENGINE=${EQEMU_CUSTOM_PRNG_ENGINE})
|
||||
endif()
|
||||
|
||||
if(EQEMU_BIASED_INT_DIST)
|
||||
add_definitions(-DBIASED_INT_DIST)
|
||||
endif()
|
||||
|
||||
if(EQEMU_COMMANDS_LOGGING)
|
||||
add_definitions(-DCOMMANDS_LOGGING)
|
||||
endif()
|
||||
|
||||
if(${OPENSSL_VERSION} VERSION_GREATER_EQUAL "1.1.1")
|
||||
add_compile_definitions(CPPHTTPLIB_OPENSSL_SUPPORT)
|
||||
endif()
|
||||
|
||||
if(PerlLibs_FOUND)
|
||||
set(PERL_LIBRARY_TYPE " Perl")
|
||||
set(PERL_LIBRARY_ENABLED ON)
|
||||
set(PERL_LIBRARY_LIBS ${PERL_LIBRARY})
|
||||
set(PERL_LIBRARY_INCLUDE ${PERL_INCLUDE_PATH})
|
||||
option(EQEMU_BUILD_PERL "Build Perl parser." ON)
|
||||
|
||||
if(EQEMU_BUILD_PERL)
|
||||
set(PERL_LIBRARY_TYPE " Perl")
|
||||
else()
|
||||
set(PERL_LIBRARY_TYPE " Missing")
|
||||
endif()
|
||||
else()
|
||||
set(PERL_LIBRARY_TYPE "Disabled")
|
||||
set(PERL_LIBRARY_ENABLED OFF)
|
||||
endif()
|
||||
|
||||
message(STATUS "")
|
||||
@ -215,55 +147,14 @@ message(STATUS "* Perl: ${PERL_LIBRARY_TYPE} *")
|
||||
message(STATUS "* zlib: ZLIB *")
|
||||
message(STATUS "**************************************************")
|
||||
|
||||
|
||||
option(EQEMU_BUILD_LUA "Build Lua parser." ON)
|
||||
|
||||
if(EQEMU_BUILD_LUA)
|
||||
add_definitions(-DLUA_EQEMU)
|
||||
|
||||
include_directories(SYSTEM "${LUAJIT_INCLUDE_DIR}" "${CMAKE_CURRENT_SOURCE_DIR}/libs/luabind")
|
||||
|
||||
option(EQEMU_SANITIZE_LUA_LIBS "Sanitize Lua Libraries (Remove OS and IO standard libraries from being able to run)." ON)
|
||||
if(EQEMU_SANITIZE_LUA_LIBS)
|
||||
add_definitions(-DSANITIZE_LUA_LIBS)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
set(SERVER_LIBS common)
|
||||
|
||||
if(PERL_LIBRARY_ENABLED)
|
||||
option(EQEMU_BUILD_PERL "Build Perl parser." ON)
|
||||
if(EQEMU_BUILD_PERL)
|
||||
set(SERVER_LIBS ${SERVER_LIBS} ${PERL_LIBRARY_LIBS} perlbind)
|
||||
INCLUDE_DIRECTORIES(SYSTEM "${PERL_LIBRARY_INCLUDE}" "${CMAKE_CURRENT_SOURCE_DIR}/libs/perlbind/include")
|
||||
add_definitions(-DEMBPERL)
|
||||
add_definitions(-DEMBPERL_PLUGIN)
|
||||
add_definitions(-DPERLBIND_NO_STRICT_SCALAR_TYPES)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# silence obnoxious deprecation message
|
||||
add_definitions(-DBOOST_BIND_GLOBAL_PLACEHOLDERS)
|
||||
|
||||
if(WIN32)
|
||||
set(SERVER_LIBS ${SERVER_LIBS} "ws2_32" "psapi" "iphlpapi" "userenv")
|
||||
endif()
|
||||
|
||||
if(UNIX)
|
||||
set(SERVER_LIBS ${SERVER_LIBS} ${CMAKE_DL_LIBS} "z" "m" "pthread")
|
||||
if(NOT DARWIN)
|
||||
set(SERVER_LIBS ${SERVER_LIBS} "rt")
|
||||
endif()
|
||||
# Freebsd provides uuids in the C library
|
||||
if(NOT ${CMAKE_SYSTEM_NAME} STREQUAL "FreeBSD")
|
||||
set(SERVER_LIBS ${SERVER_LIBS} "uuid")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
set(ZONE_LIBS ${ZONE_LIBS} ${SERVER_LIBS})
|
||||
|
||||
if(EQEMU_BUILD_SERVER OR EQEMU_BUILD_LOGIN OR EQEMU_BUILD_TESTS)
|
||||
if(EQEMU_BUILD_SERVER OR EQEMU_BUILD_LOGIN OR EQEMU_BUILD_TESTS OR EQEMU_BUILD_CLIENT_FILES)
|
||||
add_subdirectory(common)
|
||||
add_subdirectory(libs)
|
||||
else()
|
||||
message(FATAL_ERROR "No targets were selected to build, we must build at least one target.")
|
||||
endif()
|
||||
|
||||
if(EQEMU_BUILD_SERVER)
|
||||
|
||||
@ -11,6 +11,6 @@ add_executable(export_client_files ${export_sources} ${export_headers})
|
||||
|
||||
install(TARGETS export_client_files RUNTIME DESTINATION ${CMAKE_INSTALL_PREFIX}/bin)
|
||||
|
||||
target_link_libraries(export_client_files ${SERVER_LIBS})
|
||||
target_link_libraries(export_client_files common)
|
||||
|
||||
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)
|
||||
|
||||
@ -11,6 +11,6 @@ add_executable(import_client_files ${import_sources} ${import_headers})
|
||||
|
||||
install(TARGETS import_client_files RUNTIME DESTINATION ${CMAKE_INSTALL_PREFIX}/bin)
|
||||
|
||||
target_link_libraries(import_client_files ${SERVER_LIBS})
|
||||
target_link_libraries(import_client_files common)
|
||||
|
||||
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)
|
||||
|
||||
@ -20,6 +20,7 @@ set(common_sources
|
||||
database/database_update_manifest_custom.cpp
|
||||
database/database_update_manifest_bots.cpp
|
||||
database/database_update.cpp
|
||||
data_bucket.cpp
|
||||
dbcore.cpp
|
||||
deity.cpp
|
||||
dynamic_zone_base.cpp
|
||||
@ -554,6 +555,7 @@ set(common_headers
|
||||
database.h
|
||||
database_schema.h
|
||||
database/database_update.h
|
||||
data_bucket.cpp
|
||||
dbcore.h
|
||||
deity.h
|
||||
discord/discord.h
|
||||
@ -817,6 +819,407 @@ source_group(Patches FILES
|
||||
patches/uf_limits.cpp
|
||||
)
|
||||
|
||||
source_group(Repositories FILES
|
||||
|
||||
# Criteria
|
||||
repositories/criteria/content_filter_criteria.h
|
||||
|
||||
repositories/base/base_grid_repository.h
|
||||
repositories/base/base_grid_entries_repository.h
|
||||
|
||||
# Base Repositories
|
||||
repositories/base/base_aa_ability_repository.h
|
||||
repositories/base/base_aa_ranks_repository.h
|
||||
repositories/base/base_aa_rank_effects_repository.h
|
||||
repositories/base/base_aa_rank_prereqs_repository.h
|
||||
repositories/base/base_account_repository.h
|
||||
repositories/base/base_account_flags_repository.h
|
||||
repositories/base/base_account_ip_repository.h
|
||||
repositories/base/base_account_rewards_repository.h
|
||||
repositories/base/base_adventure_details_repository.h
|
||||
repositories/base/base_adventure_members_repository.h
|
||||
repositories/base/base_adventure_stats_repository.h
|
||||
repositories/base/base_adventure_template_repository.h
|
||||
repositories/base/base_adventure_template_entry_repository.h
|
||||
repositories/base/base_adventure_template_entry_flavor_repository.h
|
||||
repositories/base/base_alternate_currency_repository.h
|
||||
repositories/base/base_auras_repository.h
|
||||
repositories/base/base_base_data_repository.h
|
||||
repositories/base/base_blocked_spells_repository.h
|
||||
repositories/base/base_books_repository.h
|
||||
repositories/base/base_bugs_repository.h
|
||||
repositories/base/base_bug_reports_repository.h
|
||||
repositories/base/base_buyer_repository.h
|
||||
repositories/base/base_buyer_trade_items_repository.h
|
||||
repositories/base/base_character_activities_repository.h
|
||||
repositories/base/base_character_alternate_abilities_repository.h
|
||||
repositories/base/base_character_alt_currency_repository.h
|
||||
repositories/base/base_character_auras_repository.h
|
||||
repositories/base/base_character_bandolier_repository.h
|
||||
repositories/base/base_character_bind_repository.h
|
||||
repositories/base/base_character_buffs_repository.h
|
||||
repositories/base/base_character_corpses_repository.h
|
||||
repositories/base/base_character_corpse_items_repository.h
|
||||
repositories/base/base_character_currency_repository.h
|
||||
repositories/base/base_character_data_repository.h
|
||||
repositories/base/base_character_disciplines_repository.h
|
||||
repositories/base/base_character_evolving_items_repository.h
|
||||
repositories/base/base_character_expedition_lockouts_repository.h
|
||||
repositories/base/base_character_exp_modifiers_repository.h
|
||||
repositories/base/base_character_inspect_messages_repository.h
|
||||
repositories/base/base_character_instance_safereturns_repository.h
|
||||
repositories/base/base_character_item_recast_repository.h
|
||||
repositories/base/base_character_languages_repository.h
|
||||
repositories/base/base_character_leadership_abilities_repository.h
|
||||
repositories/base/base_character_material_repository.h
|
||||
repositories/base/base_character_memmed_spells_repository.h
|
||||
repositories/base/base_character_parcels_repository.h
|
||||
repositories/base/base_character_parcels_containers_repository.h
|
||||
repositories/base/base_character_peqzone_flags_repository.h
|
||||
repositories/base/base_character_pet_buffs_repository.h
|
||||
repositories/base/base_character_pet_info_repository.h
|
||||
repositories/base/base_character_pet_inventory_repository.h
|
||||
repositories/base/base_character_potionbelt_repository.h
|
||||
repositories/base/base_character_skills_repository.h
|
||||
repositories/base/base_character_spells_repository.h
|
||||
repositories/base/base_character_tasks_repository.h
|
||||
repositories/base/base_character_task_timers_repository.h
|
||||
repositories/base/base_char_create_combinations_repository.h
|
||||
repositories/base/base_char_create_point_allocations_repository.h
|
||||
repositories/base/base_char_recipe_list_repository.h
|
||||
repositories/base/base_chatchannels_repository.h
|
||||
repositories/base/base_chatchannel_reserved_names_repository.h
|
||||
repositories/base/base_completed_shared_tasks_repository.h
|
||||
repositories/base/base_completed_shared_task_activity_state_repository.h
|
||||
repositories/base/base_completed_shared_task_members_repository.h
|
||||
repositories/base/base_completed_tasks_repository.h
|
||||
repositories/base/base_content_flags_repository.h
|
||||
repositories/base/base_damageshieldtypes_repository.h
|
||||
repositories/base/base_data_buckets_repository.h
|
||||
repositories/base/base_db_str_repository.h
|
||||
repositories/base/base_discord_webhooks_repository.h
|
||||
repositories/base/base_discovered_items_repository.h
|
||||
repositories/base/base_doors_repository.h
|
||||
repositories/base/base_dynamic_zones_repository.h
|
||||
repositories/base/base_dynamic_zone_lockouts_repository.h
|
||||
repositories/base/base_dynamic_zone_members_repository.h
|
||||
repositories/base/base_dynamic_zone_templates_repository.h
|
||||
repositories/base/base_faction_association_repository.h
|
||||
repositories/base/base_faction_base_data_repository.h
|
||||
repositories/base/base_faction_list_repository.h
|
||||
repositories/base/base_faction_list_mod_repository.h
|
||||
repositories/base/base_faction_values_repository.h
|
||||
repositories/base/base_fishing_repository.h
|
||||
repositories/base/base_forage_repository.h
|
||||
repositories/base/base_friends_repository.h
|
||||
repositories/base/base_global_loot_repository.h
|
||||
repositories/base/base_gm_ips_repository.h
|
||||
repositories/base/base_graveyard_repository.h
|
||||
repositories/base/base_ground_spawns_repository.h
|
||||
repositories/base/base_group_id_repository.h
|
||||
repositories/base/base_group_leaders_repository.h
|
||||
repositories/base/base_guilds_repository.h
|
||||
repositories/base/base_guild_ranks_repository.h
|
||||
repositories/base/base_guild_permissions_repository.h
|
||||
repositories/base/base_guild_members_repository.h
|
||||
repositories/base/base_guild_bank_repository.h
|
||||
repositories/base/base_guild_relations_repository.h
|
||||
repositories/base/base_horses_repository.h
|
||||
repositories/base/base_instance_list_repository.h
|
||||
repositories/base/base_instance_list_player_repository.h
|
||||
repositories/base/base_inventory_repository.h
|
||||
repositories/base/base_inventory_snapshots_repository.h
|
||||
repositories/base/base_ip_exemptions_repository.h
|
||||
repositories/base/base_items_repository.h
|
||||
repositories/base/base_items_evolving_details_repository.h
|
||||
repositories/base/base_ldon_trap_entries_repository.h
|
||||
repositories/base/base_ldon_trap_templates_repository.h
|
||||
repositories/base/base_level_exp_mods_repository.h
|
||||
repositories/base/base_lfguild_repository.h
|
||||
repositories/base/base_login_accounts_repository.h
|
||||
repositories/base/base_login_api_tokens_repository.h
|
||||
repositories/base/base_login_server_admins_repository.h
|
||||
repositories/base/base_login_server_list_types_repository.h
|
||||
repositories/base/base_login_world_servers_repository.h
|
||||
repositories/base/base_logsys_categories_repository.h
|
||||
repositories/base/base_lootdrop_repository.h
|
||||
repositories/base/base_lootdrop_entries_repository.h
|
||||
repositories/base/base_loottable_repository.h
|
||||
repositories/base/base_loottable_entries_repository.h
|
||||
repositories/base/base_mail_repository.h
|
||||
repositories/base/base_merchantlist_repository.h
|
||||
repositories/base/base_merchantlist_temp_repository.h
|
||||
repositories/base/base_name_filter_repository.h
|
||||
repositories/base/base_npc_emotes_repository.h
|
||||
repositories/base/base_npc_faction_repository.h
|
||||
repositories/base/base_npc_faction_entries_repository.h
|
||||
repositories/base/base_npc_scale_global_base_repository.h
|
||||
repositories/base/base_npc_spells_repository.h
|
||||
repositories/base/base_npc_spells_effects_repository.h
|
||||
repositories/base/base_npc_spells_effects_entries_repository.h
|
||||
repositories/base/base_npc_spells_entries_repository.h
|
||||
repositories/base/base_npc_types_repository.h
|
||||
repositories/base/base_npc_types_tint_repository.h
|
||||
repositories/base/base_object_repository.h
|
||||
repositories/base/base_object_contents_repository.h
|
||||
repositories/base/base_perl_event_export_settings_repository.h
|
||||
repositories/base/base_petitions_repository.h
|
||||
repositories/base/base_pets_repository.h
|
||||
repositories/base/base_pets_beastlord_data_repository.h
|
||||
repositories/base/base_pets_equipmentset_repository.h
|
||||
repositories/base/base_pets_equipmentset_entries_repository.h
|
||||
repositories/base/base_player_titlesets_repository.h
|
||||
repositories/base/base_player_event_aa_purchase_repository.h
|
||||
repositories/base/base_player_event_killed_npc_repository.h
|
||||
repositories/base/base_player_event_killed_named_npc_repository.h
|
||||
repositories/base/base_player_event_killed_raid_npc_repository.h
|
||||
repositories/base/base_player_event_log_settings_repository.h
|
||||
repositories/base/base_player_event_logs_repository.h
|
||||
repositories/base/base_player_event_loot_items_repository.h
|
||||
repositories/base/base_player_event_merchant_purchase_repository.h
|
||||
repositories/base/base_player_event_merchant_sell_repository.h
|
||||
repositories/base/base_player_event_npc_handin_repository.h
|
||||
repositories/base/base_player_event_npc_handin_entries_repository.h
|
||||
repositories/base/base_player_event_speech_repository.h
|
||||
repositories/base/base_player_event_trade_repository.h
|
||||
repositories/base/base_player_event_trade_entries_repository.h
|
||||
repositories/base/base_quest_globals_repository.h
|
||||
repositories/base/base_raid_details_repository.h
|
||||
repositories/base/base_raid_members_repository.h
|
||||
repositories/base/base_reports_repository.h
|
||||
repositories/base/base_respawn_times_repository.h
|
||||
repositories/base/base_rule_sets_repository.h
|
||||
repositories/base/base_rule_values_repository.h
|
||||
repositories/base/base_saylink_repository.h
|
||||
repositories/base/base_server_scheduled_events_repository.h
|
||||
repositories/base/base_shared_tasks_repository.h
|
||||
repositories/base/base_shared_task_activity_state_repository.h
|
||||
repositories/base/base_shared_task_dynamic_zones_repository.h
|
||||
repositories/base/base_shared_task_members_repository.h
|
||||
repositories/base/base_skill_caps_repository.h
|
||||
repositories/base/base_spawn2_repository.h
|
||||
repositories/base/base_spawnentry_repository.h
|
||||
repositories/base/base_spawngroup_repository.h
|
||||
repositories/base/base_spawn_conditions_repository.h
|
||||
repositories/base/base_spawn_condition_values_repository.h
|
||||
repositories/base/base_spawn_events_repository.h
|
||||
repositories/base/base_spells_new_repository.h
|
||||
repositories/base/base_spell_buckets_repository.h
|
||||
repositories/base/base_spell_globals_repository.h
|
||||
repositories/base/base_starting_items_repository.h
|
||||
repositories/base/base_start_zones_repository.h
|
||||
repositories/base/base_tasks_repository.h
|
||||
repositories/base/base_tasksets_repository.h
|
||||
repositories/base/base_task_activities_repository.h
|
||||
repositories/base/base_timers_repository.h
|
||||
repositories/base/base_titles_repository.h
|
||||
repositories/base/base_trader_repository.h
|
||||
repositories/base/base_tradeskill_recipe_repository.h
|
||||
repositories/base/base_tradeskill_recipe_entries_repository.h
|
||||
repositories/base/base_traps_repository.h
|
||||
repositories/base/base_tributes_repository.h
|
||||
repositories/base/base_tribute_levels_repository.h
|
||||
repositories/base/base_veteran_reward_templates_repository.h
|
||||
repositories/base/base_zone_repository.h
|
||||
repositories/base/base_zone_points_repository.h
|
||||
|
||||
# Extended Repositories
|
||||
repositories/aa_ability_repository.h
|
||||
repositories/aa_ranks_repository.h
|
||||
repositories/aa_rank_effects_repository.h
|
||||
repositories/aa_rank_prereqs_repository.h
|
||||
repositories/account_repository.h
|
||||
repositories/account_flags_repository.h
|
||||
repositories/account_ip_repository.h
|
||||
repositories/account_rewards_repository.h
|
||||
repositories/adventure_details_repository.h
|
||||
repositories/adventure_members_repository.h
|
||||
repositories/adventure_stats_repository.h
|
||||
repositories/adventure_template_repository.h
|
||||
repositories/adventure_template_entry_repository.h
|
||||
repositories/adventure_template_entry_flavor_repository.h
|
||||
repositories/alternate_currency_repository.h
|
||||
repositories/auras_repository.h
|
||||
repositories/base_data_repository.h
|
||||
repositories/blocked_spells_repository.h
|
||||
repositories/books_repository.h
|
||||
repositories/bugs_repository.h
|
||||
repositories/bug_reports_repository.h
|
||||
repositories/buyer_buy_lines_repository.h
|
||||
repositories/buyer_trade_items_repository.h
|
||||
repositories/character_activities_repository.h
|
||||
repositories/character_alternate_abilities_repository.h
|
||||
repositories/character_alt_currency_repository.h
|
||||
repositories/character_auras_repository.h
|
||||
repositories/character_bandolier_repository.h
|
||||
repositories/character_bind_repository.h
|
||||
repositories/character_buffs_repository.h
|
||||
repositories/character_corpses_repository.h
|
||||
repositories/character_corpse_items_repository.h
|
||||
repositories/character_currency_repository.h
|
||||
repositories/character_data_repository.h
|
||||
repositories/character_disciplines_repository.h
|
||||
repositories/character_evolving_items_repository.h
|
||||
repositories/character_expedition_lockouts_repository.h
|
||||
repositories/character_exp_modifiers_repository.h
|
||||
repositories/character_inspect_messages_repository.h
|
||||
repositories/character_instance_safereturns_repository.h
|
||||
repositories/character_item_recast_repository.h
|
||||
repositories/character_languages_repository.h
|
||||
repositories/character_leadership_abilities_repository.h
|
||||
repositories/character_material_repository.h
|
||||
repositories/character_memmed_spells_repository.h
|
||||
repositories/character_parcels_repository.h
|
||||
repositories/character_parcels_containers_repository.h
|
||||
repositories/character_peqzone_flags_repository.h
|
||||
repositories/character_pet_buffs_repository.h
|
||||
repositories/character_pet_info_repository.h
|
||||
repositories/character_pet_inventory_repository.h
|
||||
repositories/character_potionbelt_repository.h
|
||||
repositories/character_skills_repository.h
|
||||
repositories/character_spells_repository.h
|
||||
repositories/character_tasks_repository.h
|
||||
repositories/character_task_timers_repository.h
|
||||
repositories/char_create_combinations_repository.h
|
||||
repositories/char_create_point_allocations_repository.h
|
||||
repositories/char_recipe_list_repository.h
|
||||
repositories/chatchannels_repository.h
|
||||
repositories/chatchannel_reserved_names_repository.h
|
||||
repositories/completed_shared_tasks_repository.h
|
||||
repositories/completed_shared_task_activity_state_repository.h
|
||||
repositories/completed_shared_task_members_repository.h
|
||||
repositories/completed_tasks_repository.h
|
||||
repositories/content_flags_repository.h
|
||||
repositories/damageshieldtypes_repository.h
|
||||
repositories/data_buckets_repository.h
|
||||
repositories/db_str_repository.h
|
||||
repositories/discord_webhooks_repository.h
|
||||
repositories/discovered_items_repository.h
|
||||
repositories/doors_repository.h
|
||||
repositories/dynamic_zones_repository.h
|
||||
repositories/dynamic_zone_lockouts_repository.h
|
||||
repositories/dynamic_zone_members_repository.h
|
||||
repositories/dynamic_zone_templates_repository.h
|
||||
repositories/faction_association_repository.h
|
||||
repositories/faction_base_data_repository.h
|
||||
repositories/faction_list_repository.h
|
||||
repositories/faction_list_mod_repository.h
|
||||
repositories/faction_values_repository.h
|
||||
repositories/fishing_repository.h
|
||||
repositories/forage_repository.h
|
||||
repositories/friends_repository.h
|
||||
repositories/global_loot_repository.h
|
||||
repositories/gm_ips_repository.h
|
||||
repositories/graveyard_repository.h
|
||||
repositories/ground_spawns_repository.h
|
||||
repositories/group_id_repository.h
|
||||
repositories/group_leaders_repository.h
|
||||
repositories/guilds_repository.h
|
||||
repositories/guild_ranks_repository.h
|
||||
repositories/guild_permissions_repository.h
|
||||
repositories/guild_members_repository.h
|
||||
repositories/guild_bank_repository.h
|
||||
repositories/guild_relations_repository.h
|
||||
repositories/horses_repository.h
|
||||
repositories/instance_list_repository.h
|
||||
repositories/instance_list_player_repository.h
|
||||
repositories/inventory_repository.h
|
||||
repositories/inventory_snapshots_repository.h
|
||||
repositories/ip_exemptions_repository.h
|
||||
repositories/items_repository.h
|
||||
repositories/items_evolving_details_repository.h
|
||||
repositories/ldon_trap_entries_repository.h
|
||||
repositories/ldon_trap_templates_repository.h
|
||||
repositories/level_exp_mods_repository.h
|
||||
repositories/lfguild_repository.h
|
||||
repositories/login_accounts_repository.h
|
||||
repositories/login_api_tokens_repository.h
|
||||
repositories/login_server_admins_repository.h
|
||||
repositories/login_server_list_types_repository.h
|
||||
repositories/login_world_servers_repository.h
|
||||
repositories/logsys_categories_repository.h
|
||||
repositories/lootdrop_repository.h
|
||||
repositories/lootdrop_entries_repository.h
|
||||
repositories/loottable_repository.h
|
||||
repositories/loottable_entries_repository.h
|
||||
repositories/mail_repository.h
|
||||
repositories/merchantlist_repository.h
|
||||
repositories/merchantlist_temp_repository.h
|
||||
repositories/name_filter_repository.h
|
||||
repositories/npc_emotes_repository.h
|
||||
repositories/npc_faction_repository.h
|
||||
repositories/npc_faction_entries_repository.h
|
||||
repositories/npc_scale_global_base_repository.h
|
||||
repositories/npc_spells_repository.h
|
||||
repositories/npc_spells_effects_repository.h
|
||||
repositories/npc_spells_effects_entries_repository.h
|
||||
repositories/npc_spells_entries_repository.h
|
||||
repositories/npc_types_repository.h
|
||||
repositories/npc_types_tint_repository.h
|
||||
repositories/object_repository.h
|
||||
repositories/object_contents_repository.h
|
||||
repositories/perl_event_export_settings_repository.h
|
||||
repositories/petitions_repository.h
|
||||
repositories/pets_repository.h
|
||||
repositories/pets_beastlord_data_repository.h
|
||||
repositories/pets_equipmentset_repository.h
|
||||
repositories/pets_equipmentset_entries_repository.h
|
||||
repositories/player_titlesets_repository.h
|
||||
repositories/player_event_aa_purchase_repository.h
|
||||
repositories/player_event_killed_npc_repository.h
|
||||
repositories/player_event_killed_named_npc_repository.h
|
||||
repositories/player_event_killed_raid_npc_repository.h
|
||||
repositories/player_event_log_settings_repository.h
|
||||
repositories/player_event_logs_repository.h
|
||||
repositories/player_event_loot_items_repository.h
|
||||
repositories/player_event_merchant_purchase_repository.h
|
||||
repositories/player_event_merchant_sell_repository.h
|
||||
repositories/player_event_npc_handin_repository.h
|
||||
repositories/player_event_npc_handin_entries_repository.h
|
||||
repositories/player_event_speech_repository.h
|
||||
repositories/player_event_trade_repository.h
|
||||
repositories/player_event_trade_entries_repository.h
|
||||
repositories/quest_globals_repository.h
|
||||
repositories/raid_details_repository.h
|
||||
repositories/raid_members_repository.h
|
||||
repositories/reports_repository.h
|
||||
repositories/respawn_times_repository.h
|
||||
repositories/rule_sets_repository.h
|
||||
repositories/rule_values_repository.h
|
||||
repositories/saylink_repository.h
|
||||
repositories/server_scheduled_events_repository.h
|
||||
repositories/shared_tasks_repository.h
|
||||
repositories/shared_task_activity_state_repository.h
|
||||
repositories/shared_task_dynamic_zones_repository.h
|
||||
repositories/shared_task_members_repository.h
|
||||
repositories/skill_caps_repository.h
|
||||
repositories/spawn2_repository.h
|
||||
repositories/spawnentry_repository.h
|
||||
repositories/spawngroup_repository.h
|
||||
repositories/spawn_conditions_repository.h
|
||||
repositories/spawn_condition_values_repository.h
|
||||
repositories/spawn_events_repository.h
|
||||
repositories/spells_new_repository.h
|
||||
repositories/spell_buckets_repository.h
|
||||
repositories/spell_globals_repository.h
|
||||
repositories/starting_items_repository.h
|
||||
repositories/start_zones_repository.h
|
||||
repositories/tasks_repository.h
|
||||
repositories/tasksets_repository.h
|
||||
repositories/task_activities_repository.h
|
||||
repositories/timers_repository.h
|
||||
repositories/titles_repository.h
|
||||
repositories/trader_repository.h
|
||||
repositories/tradeskill_recipe_repository.h
|
||||
repositories/tradeskill_recipe_entries_repository.h
|
||||
repositories/traps_repository.h
|
||||
repositories/tributes_repository.h
|
||||
repositories/tribute_levels_repository.h
|
||||
repositories/veteran_reward_templates_repository.h
|
||||
repositories/zone_repository.h
|
||||
repositories/zone_points_repository.h
|
||||
)
|
||||
|
||||
source_group(StackWalker FILES
|
||||
StackWalker/StackWalker.h
|
||||
StackWalker/StackWalker.cpp
|
||||
@ -830,12 +1233,65 @@ source_group(Util FILES
|
||||
util/uuid.h
|
||||
)
|
||||
|
||||
option(EQEMU_ADD_PROFILER "Link with Google perftools profiler" OFF)
|
||||
#PRNG options
|
||||
option(EQEMU_ADDITIVE_LFIB_PRNG "Use Additive LFib for PRNG." OFF)
|
||||
mark_as_advanced(EQEMU_ADDITIVE_LFIB_PRNG)
|
||||
option(EQEMU_BIASED_INT_DIST "Use biased int dist instead of uniform." OFF)
|
||||
mark_as_advanced(EQEMU_BIASED_INT_DIST)
|
||||
set(EQEMU_CUSTOM_PRNG_ENGINE "" CACHE STRING "Custom random engine. (ex. std::default_random_engine)")
|
||||
mark_as_advanced(EQEMU_CUSTOM_PRNG_ENGINE)
|
||||
|
||||
if(CMAKE_COMPILER_IS_GNUCXX)
|
||||
option(EQEMU_SFMT19937 "Use GCC's extention for SIMD Fast MT19937." OFF)
|
||||
mark_as_advanced(EQEMU_SFMT19937)
|
||||
endif()
|
||||
|
||||
include_directories(Patches SocketLib StackWalker)
|
||||
|
||||
add_library(common ${common_sources} ${common_headers} ${repositories})
|
||||
|
||||
target_compile_definitions(common PUBLIC BOOST_BIND_GLOBAL_PLACEHOLDERS GLM_FORCE_RADIANS GLM_FORCE_CTOR_INIT GLM_ENABLE_EXPERIMENTAL)
|
||||
target_include_directories(common PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/../submodules/websocketpp")
|
||||
target_link_libraries(common PUBLIC cereal::cereal fmt::fmt unofficial::libmariadb $<IF:$<TARGET_EXISTS:libuv::uv_a>,libuv::uv_a,libuv::uv> OpenSSL::SSL OpenSSL::Crypto ZLIB::ZLIB)
|
||||
|
||||
# Requires libgoogle-perftools-dev google-perftools packages for linux (debian)
|
||||
if(EQEMU_ADD_PROFILER)
|
||||
set(CMAKE_EXE_LINKER_FLAGS "-Wl,--no-as-needed,-lprofiler,--as-needed")
|
||||
endif()
|
||||
|
||||
if(EQEMU_ADDITIVE_LFIB_PRNG)
|
||||
target_compile_definitions(common PUBLIC USE_ADDITIVE_LFIB_PRNG)
|
||||
if(EQEMU_SFMT19937)
|
||||
message(STATUS "SFMT19937 and ADDITITVE_LFIB_PRNG both set, SFMT19937 ignored.")
|
||||
set(EQEMU_SFMT19937 OFF)
|
||||
endif()
|
||||
if(NOT EQEMU_CUSTOM_PRNG_ENGINE STREQUAL "")
|
||||
message(STATUS "CUSTOM_PRNG_ENGINE and ADDITITVE_LFIB_PRNG both set, CUSTOM_PRNG_ENGINE ignored.")
|
||||
set(EQEMU_CUSTOM_PRNG_ENGINE "")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(EQEMU_SFMT19937)
|
||||
target_compile_definitions(common PUBLIC USE_SFMT19937)
|
||||
if(NOT EQEMU_CUSTOM_PRNG_ENGINE STREQUAL "")
|
||||
message(STATUS "CUSTOM_PRNG_ENGINE and SFMT19937 both set, CUSTOM_PRNG_ENGINE ignored.")
|
||||
set(EQEMU_CUSTOM_PRNG_ENGINE "")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(NOT EQEMU_CUSTOM_PRNG_ENGINE STREQUAL "")
|
||||
target_compile_definitions(common PUBLIC USE_CUSTOM_PRNG_ENGINE=${EQEMU_CUSTOM_PRNG_ENGINE})
|
||||
endif()
|
||||
|
||||
if(EQEMU_BIASED_INT_DIST)
|
||||
target_compile_definitions(common PUBLIC BIASED_INT_DIST)
|
||||
endif()
|
||||
|
||||
if(${OPENSSL_VERSION} VERSION_GREATER_EQUAL "1.1.1")
|
||||
target_compile_definitions(common PUBLIC CPPHTTPLIB_OPENSSL_SUPPORT)
|
||||
endif()
|
||||
|
||||
if(UNIX)
|
||||
set_source_files_properties("SocketLib/Mime.cpp" PROPERTY COMPILE_FLAGS -Wno-unused-result)
|
||||
set_source_files_properties("patches/sod.cpp" "patches/sof.cpp" "patches/rof.cpp" "patches/rof2.cpp" "patches/uf.cpp" PROPERTIES COMPILE_FLAGS -O0)
|
||||
|
||||
@ -9,17 +9,7 @@ using json = nlohmann::json;
|
||||
const std::string NESTED_KEY_DELIMITER = ".";
|
||||
std::vector<DataBucketsRepository::DataBuckets> g_data_bucket_cache = {};
|
||||
|
||||
#if defined(ZONE)
|
||||
#include "../zone/zonedb.h"
|
||||
extern ZoneDatabase database;
|
||||
#elif defined(WORLD)
|
||||
#include "../world/worlddb.h"
|
||||
extern WorldDatabase database;
|
||||
#else
|
||||
#error "You must define either ZONE or WORLD"
|
||||
#endif
|
||||
|
||||
void DataBucket::SetData(const std::string &bucket_key, const std::string &bucket_value, std::string expires_time)
|
||||
void DataBucket::SetData(SharedDatabase* database, const std::string &bucket_key, const std::string &bucket_value, std::string expires_time)
|
||||
{
|
||||
auto k = DataBucketKey{
|
||||
.key = bucket_key,
|
||||
@ -27,10 +17,10 @@ void DataBucket::SetData(const std::string &bucket_key, const std::string &bucke
|
||||
.expires = expires_time,
|
||||
};
|
||||
|
||||
DataBucket::SetData(k);
|
||||
DataBucket::SetData(database, k);
|
||||
}
|
||||
|
||||
void DataBucket::SetData(const DataBucketKey &k_)
|
||||
void DataBucket::SetData(SharedDatabase *database, const DataBucketKey &k_)
|
||||
{
|
||||
DataBucketKey k = k_; // copy the key so we can modify it
|
||||
bool is_nested = k.key.find(NESTED_KEY_DELIMITER) != std::string::npos;
|
||||
@ -39,7 +29,7 @@ void DataBucket::SetData(const DataBucketKey &k_)
|
||||
}
|
||||
|
||||
auto b = DataBucketsRepository::NewEntity();
|
||||
auto r = GetData(k, true);
|
||||
auto r = GetData(database, k, true);
|
||||
// if we have an entry, use it
|
||||
if (r.id > 0) {
|
||||
b = r;
|
||||
@ -149,10 +139,10 @@ void DataBucket::SetData(const DataBucketKey &k_)
|
||||
}
|
||||
}
|
||||
|
||||
DataBucketsRepository::UpdateOne(database, b);
|
||||
DataBucketsRepository::UpdateOne(*database, b);
|
||||
}
|
||||
else {
|
||||
b = DataBucketsRepository::InsertOne(database, b);
|
||||
b = DataBucketsRepository::InsertOne(*database, b);
|
||||
|
||||
// add to cache if it doesn't exist
|
||||
if (CanCache(k) && !ExistsInCache(b)) {
|
||||
@ -162,9 +152,9 @@ void DataBucket::SetData(const DataBucketKey &k_)
|
||||
}
|
||||
}
|
||||
|
||||
std::string DataBucket::GetData(const std::string &bucket_key)
|
||||
std::string DataBucket::GetData(SharedDatabase* database, const std::string &bucket_key)
|
||||
{
|
||||
return GetData(DataBucketKey{.key = bucket_key}).value;
|
||||
return GetData(database, DataBucketKey{.key = bucket_key}).value;
|
||||
}
|
||||
|
||||
DataBucketsRepository::DataBuckets DataBucket::ExtractNestedValue(
|
||||
@ -214,7 +204,7 @@ DataBucketsRepository::DataBuckets DataBucket::ExtractNestedValue(
|
||||
// if the bucket doesn't exist, it will be added to the cache as a miss
|
||||
// if ignore_misses_cache is true, the bucket will not be added to the cache as a miss
|
||||
// the only place we should be ignoring the misses cache is on the initial read during SetData
|
||||
DataBucketsRepository::DataBuckets DataBucket::GetData(const DataBucketKey &k_, bool ignore_misses_cache)
|
||||
DataBucketsRepository::DataBuckets DataBucket::GetData(SharedDatabase* database, const DataBucketKey &k_, bool ignore_misses_cache)
|
||||
{
|
||||
DataBucketKey k = k_; // Copy the key so we can modify it
|
||||
|
||||
@ -244,7 +234,7 @@ DataBucketsRepository::DataBuckets DataBucket::GetData(const DataBucketKey &k_,
|
||||
if (CheckBucketMatch(e, k)) {
|
||||
if (e.expires > 0 && e.expires < std::time(nullptr)) {
|
||||
LogDataBuckets("Attempted to read expired key [{}] removing from cache", e.key_);
|
||||
DeleteData(k);
|
||||
DeleteData(database, k);
|
||||
return DataBucketsRepository::NewEntity();
|
||||
}
|
||||
|
||||
@ -261,7 +251,7 @@ DataBucketsRepository::DataBuckets DataBucket::GetData(const DataBucketKey &k_,
|
||||
|
||||
// Fetch the value from the database
|
||||
auto r = DataBucketsRepository::GetWhere(
|
||||
database,
|
||||
*database,
|
||||
fmt::format(
|
||||
" {} `key` = '{}' LIMIT 1",
|
||||
DataBucket::GetScopedDbFilters(k),
|
||||
@ -310,7 +300,7 @@ DataBucketsRepository::DataBuckets DataBucket::GetData(const DataBucketKey &k_,
|
||||
|
||||
// If the entry has expired, delete it
|
||||
if (bucket.expires > 0 && bucket.expires < static_cast<long long>(std::time(nullptr))) {
|
||||
DeleteData(k);
|
||||
DeleteData(database, k);
|
||||
return DataBucketsRepository::NewEntity();
|
||||
}
|
||||
|
||||
@ -337,22 +327,22 @@ DataBucketsRepository::DataBuckets DataBucket::GetData(const DataBucketKey &k_,
|
||||
return bucket;
|
||||
}
|
||||
|
||||
std::string DataBucket::GetDataExpires(const std::string &bucket_key)
|
||||
std::string DataBucket::GetDataExpires(SharedDatabase* database, const std::string &bucket_key)
|
||||
{
|
||||
return GetDataExpires(DataBucketKey{.key = bucket_key});
|
||||
return GetDataExpires(database, DataBucketKey{.key = bucket_key});
|
||||
}
|
||||
|
||||
std::string DataBucket::GetDataRemaining(const std::string &bucket_key)
|
||||
std::string DataBucket::GetDataRemaining(SharedDatabase* database, const std::string &bucket_key)
|
||||
{
|
||||
return GetDataRemaining(DataBucketKey{.key = bucket_key});
|
||||
return GetDataRemaining(database, DataBucketKey{.key = bucket_key});
|
||||
}
|
||||
|
||||
bool DataBucket::DeleteData(const std::string &bucket_key)
|
||||
bool DataBucket::DeleteData(SharedDatabase* database, const std::string &bucket_key)
|
||||
{
|
||||
return DeleteData(DataBucketKey{.key = bucket_key});
|
||||
return DeleteData(database, DataBucketKey{.key = bucket_key});
|
||||
}
|
||||
|
||||
bool DataBucket::DeleteData(const DataBucketKey &k)
|
||||
bool DataBucket::DeleteData(SharedDatabase* database, const DataBucketKey &k)
|
||||
{
|
||||
bool is_nested_key = k.key.find(NESTED_KEY_DELIMITER) != std::string::npos;
|
||||
|
||||
@ -374,7 +364,7 @@ bool DataBucket::DeleteData(const DataBucketKey &k)
|
||||
|
||||
// Regular key deletion, no nesting involved
|
||||
return DataBucketsRepository::DeleteWhere(
|
||||
database,
|
||||
*database,
|
||||
fmt::format("{} `key` = '{}'", DataBucket::GetScopedDbFilters(k), k.key)
|
||||
);
|
||||
}
|
||||
@ -384,7 +374,7 @@ bool DataBucket::DeleteData(const DataBucketKey &k)
|
||||
DataBucketKey top_level_k = k;
|
||||
top_level_k.key = top_level_key;
|
||||
|
||||
auto r = GetData(top_level_k);
|
||||
auto r = GetData(database, top_level_k);
|
||||
if (r.id == 0 || r.value.empty() || !Strings::IsValidJson(r.value)) {
|
||||
LogDataBuckets("Attempted to delete nested key [{}] but parent key [{}] does not exist or is invalid JSON", k.key, top_level_key);
|
||||
return false;
|
||||
@ -444,14 +434,14 @@ bool DataBucket::DeleteData(const DataBucketKey &k)
|
||||
}
|
||||
|
||||
return DataBucketsRepository::DeleteWhere(
|
||||
database,
|
||||
*database,
|
||||
fmt::format("{} `key` = '{}'", DataBucket::GetScopedDbFilters(k), top_level_key)
|
||||
);
|
||||
}
|
||||
|
||||
// Otherwise, update the existing JSON without the deleted key
|
||||
r.value = json_value.dump();
|
||||
DataBucketsRepository::UpdateOne(database, r);
|
||||
DataBucketsRepository::UpdateOne(*database, r);
|
||||
|
||||
// Update cache
|
||||
if (CanCache(k)) {
|
||||
@ -466,7 +456,7 @@ bool DataBucket::DeleteData(const DataBucketKey &k)
|
||||
return true;
|
||||
}
|
||||
|
||||
std::string DataBucket::GetDataExpires(const DataBucketKey &k)
|
||||
std::string DataBucket::GetDataExpires(SharedDatabase* database, const DataBucketKey &k)
|
||||
{
|
||||
LogDataBuckets(
|
||||
"Getting bucket expiration key [{}] bot_id [{}] account_id [{}] character_id [{}] npc_id [{}]",
|
||||
@ -477,7 +467,7 @@ std::string DataBucket::GetDataExpires(const DataBucketKey &k)
|
||||
k.npc_id
|
||||
);
|
||||
|
||||
auto r = GetData(k);
|
||||
auto r = GetData(database, k);
|
||||
if (r.id == 0) {
|
||||
return {};
|
||||
}
|
||||
@ -485,7 +475,7 @@ std::string DataBucket::GetDataExpires(const DataBucketKey &k)
|
||||
return std::to_string(r.expires);
|
||||
}
|
||||
|
||||
std::string DataBucket::GetDataRemaining(const DataBucketKey &k)
|
||||
std::string DataBucket::GetDataRemaining(SharedDatabase* database, const DataBucketKey &k)
|
||||
{
|
||||
LogDataBuckets(
|
||||
"Getting bucket remaining key [{}] bot_id [{}] account_id [{}] character_id [{}] npc_id [{}] bot_id [{}] zone_id [{}] instance_id [{}]",
|
||||
@ -499,7 +489,7 @@ std::string DataBucket::GetDataRemaining(const DataBucketKey &k)
|
||||
k.instance_id
|
||||
);
|
||||
|
||||
auto r = GetData(k);
|
||||
auto r = GetData(database, k);
|
||||
if (r.id == 0) {
|
||||
return "0";
|
||||
}
|
||||
@ -565,10 +555,10 @@ bool DataBucket::CheckBucketMatch(const DataBucketsRepository::DataBuckets &dbe,
|
||||
);
|
||||
}
|
||||
|
||||
void DataBucket::LoadZoneCache(uint16 zone_id, uint16 instance_id)
|
||||
void DataBucket::LoadZoneCache(SharedDatabase* database, uint16 zone_id, uint16 instance_id)
|
||||
{
|
||||
const auto &l = DataBucketsRepository::GetWhere(
|
||||
database,
|
||||
*database,
|
||||
fmt::format(
|
||||
"zone_id = {} AND instance_id = {} AND (`expires` > {} OR `expires` = 0)",
|
||||
zone_id,
|
||||
@ -608,7 +598,7 @@ void DataBucket::LoadZoneCache(uint16 zone_id, uint16 instance_id)
|
||||
);
|
||||
}
|
||||
|
||||
void DataBucket::BulkLoadEntitiesToCache(DataBucketLoadType::Type t, std::vector<uint32> ids)
|
||||
void DataBucket::BulkLoadEntitiesToCache(SharedDatabase* database, DataBucketLoadType::Type t, std::vector<uint32> ids)
|
||||
{
|
||||
if (ids.empty()) {
|
||||
return;
|
||||
@ -653,7 +643,7 @@ void DataBucket::BulkLoadEntitiesToCache(DataBucketLoadType::Type t, std::vector
|
||||
}
|
||||
|
||||
const auto &l = DataBucketsRepository::GetWhere(
|
||||
database,
|
||||
*database,
|
||||
fmt::format(
|
||||
"{} IN ({}) AND (`expires` > {} OR `expires` = 0)",
|
||||
column,
|
||||
@ -843,4 +833,4 @@ bool DataBucket::CanCache(const DataBucketKey &key)
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@ -5,6 +5,7 @@
|
||||
#include "types.h"
|
||||
#include "repositories/data_buckets_repository.h"
|
||||
#include "json/json_archive_single_line.h"
|
||||
#include "shareddb.h"
|
||||
|
||||
struct DataBucketKey {
|
||||
std::string key;
|
||||
@ -38,26 +39,26 @@ namespace DataBucketLoadType {
|
||||
class DataBucket {
|
||||
public:
|
||||
// non-scoped bucket methods (for global buckets)
|
||||
static void SetData(const std::string &bucket_key, const std::string &bucket_value, std::string expires_time = "");
|
||||
static bool DeleteData(const std::string &bucket_key);
|
||||
static std::string GetData(const std::string &bucket_key);
|
||||
static std::string GetDataExpires(const std::string &bucket_key);
|
||||
static std::string GetDataRemaining(const std::string &bucket_key);
|
||||
static void SetData(SharedDatabase *database, const std::string &bucket_key, const std::string &bucket_value, std::string expires_time = "");
|
||||
static bool DeleteData(SharedDatabase *database, const std::string &bucket_key);
|
||||
static std::string GetData(SharedDatabase *database, const std::string &bucket_key);
|
||||
static std::string GetDataExpires(SharedDatabase *database, const std::string &bucket_key);
|
||||
static std::string GetDataRemaining(SharedDatabase *database, const std::string &bucket_key);
|
||||
|
||||
// scoped bucket methods
|
||||
static void SetData(const DataBucketKey &k_);
|
||||
static bool DeleteData(const DataBucketKey &k);
|
||||
static DataBucketsRepository::DataBuckets GetData(const DataBucketKey &k_, bool ignore_misses_cache = false);
|
||||
static std::string GetDataExpires(const DataBucketKey &k);
|
||||
static std::string GetDataRemaining(const DataBucketKey &k);
|
||||
static void SetData(SharedDatabase *database, const DataBucketKey &k_);
|
||||
static bool DeleteData(SharedDatabase *database, const DataBucketKey &k);
|
||||
static DataBucketsRepository::DataBuckets GetData(SharedDatabase *database, const DataBucketKey &k_, bool ignore_misses_cache = false);
|
||||
static std::string GetDataExpires(SharedDatabase *database, const DataBucketKey &k);
|
||||
static std::string GetDataRemaining(SharedDatabase *database, const DataBucketKey &k);
|
||||
static std::string GetScopedDbFilters(const DataBucketKey &k);
|
||||
|
||||
// bucket repository versus key matching
|
||||
static bool CheckBucketMatch(const DataBucketsRepository::DataBuckets &dbe, const DataBucketKey &k);
|
||||
static bool ExistsInCache(const DataBucketsRepository::DataBuckets &entry);
|
||||
|
||||
static void LoadZoneCache(uint16 zone_id, uint16 instance_id);
|
||||
static void BulkLoadEntitiesToCache(DataBucketLoadType::Type t, std::vector<uint32> ids);
|
||||
static void LoadZoneCache(SharedDatabase* database, uint16 zone_id, uint16 instance_id);
|
||||
static void BulkLoadEntitiesToCache(SharedDatabase* database, DataBucketLoadType::Type t, std::vector<uint32> ids);
|
||||
static void DeleteCachedBuckets(DataBucketLoadType::Type type, uint32 id, uint32 secondary_id = 0);
|
||||
|
||||
static void DeleteFromMissesCache(DataBucketsRepository::DataBuckets e);
|
||||
|
||||
@ -258,9 +258,17 @@ bool DBcore::Open(uint32 *errnum, char *errbuf)
|
||||
if (pCompress) {
|
||||
flags |= CLIENT_COMPRESS;
|
||||
}
|
||||
|
||||
//todo: we need to revisit this ssl handling later
|
||||
//the whole connect code is ancient and tls is starting to come as a default requirement for many db setups
|
||||
if (pSSL) {
|
||||
flags |= CLIENT_SSL;
|
||||
}
|
||||
else {
|
||||
int off = 0;
|
||||
mysql_options(mysql, MYSQL_OPT_SSL_ENFORCE, &off);
|
||||
mysql_options(mysql, MYSQL_OPT_SSL_VERIFY_SERVER_CERT, &off);
|
||||
}
|
||||
if (mysql_real_connect(mysql, pHost, pUser, pPassword, pDatabase, pPort, 0, flags)) {
|
||||
pStatus = Connected;
|
||||
|
||||
|
||||
@ -15,6 +15,6 @@ add_executable(eqlaunch ${eqlaunch_sources} ${eqlaunch_headers})
|
||||
|
||||
install(TARGETS eqlaunch RUNTIME DESTINATION ${CMAKE_INSTALL_PREFIX}/bin)
|
||||
|
||||
target_link_libraries(eqlaunch ${SERVER_LIBS})
|
||||
target_link_libraries(eqlaunch common)
|
||||
|
||||
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)
|
||||
|
||||
@ -20,12 +20,9 @@ set(lb_sources
|
||||
src/wrapper_base.cpp
|
||||
)
|
||||
|
||||
set(lb_headers
|
||||
|
||||
)
|
||||
|
||||
add_library(luabind ${lb_sources} ${lb_headers})
|
||||
target_link_libraries(luabind PRIVATE Boost::dynamic_bitset Boost::tuple Boost::foreach ${LUAJIT_LIBRARY})
|
||||
add_library(luabind ${lb_sources})
|
||||
target_include_directories(luabind PUBLIC ${CMAKE_CURRENT_SOURCE_DIR} ${LUAJIT_INCLUDE_DIR})
|
||||
target_link_libraries(luabind PUBLIC Boost::dynamic_bitset Boost::tuple Boost::foreach ${LUAJIT_LIBRARY})
|
||||
|
||||
if(UNIX)
|
||||
set_source_files_properties(${lb_sources} PROPERTY COMPILE_FLAGS -Wno-deprecated-declarations)
|
||||
|
||||
@ -2,10 +2,6 @@ cmake_minimum_required(VERSION 3.20.0)
|
||||
|
||||
project(perlbind LANGUAGES CXX)
|
||||
|
||||
set(CMAKE_FIND_LIBRARY_SUFFIXES ".lib" ".so" ".a")
|
||||
|
||||
find_package(PerlLibs)
|
||||
|
||||
set(PERLBIND_HEADERS
|
||||
include/perlbind/array.h
|
||||
include/perlbind/forward.h
|
||||
@ -45,6 +41,8 @@ target_include_directories(perlbind PUBLIC
|
||||
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
|
||||
$<INSTALL_INTERFACE:include>)
|
||||
|
||||
target_compile_definitions(perlbind PUBLIC EMBPERL EMBPERL_PLUGIN PERLBIND_NO_STRICT_SCALAR_TYPES)
|
||||
|
||||
option(PERLBIND_BUILD_TESTS "Build tests" OFF)
|
||||
option(PERLBIND_ENABLE_ASAN "Build with address sanitizer" OFF)
|
||||
|
||||
|
||||
@ -26,10 +26,12 @@ set(eqlogin_headers
|
||||
world_server.h
|
||||
)
|
||||
|
||||
add_compile_definitions(EQEMU_USE_OPENSSL)
|
||||
|
||||
add_executable(loginserver ${eqlogin_sources} ${eqlogin_headers})
|
||||
|
||||
install(TARGETS loginserver RUNTIME DESTINATION ${CMAKE_INSTALL_PREFIX}/bin)
|
||||
|
||||
target_link_libraries(loginserver ${SERVER_LIBS})
|
||||
target_link_libraries(loginserver common)
|
||||
|
||||
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)
|
||||
|
||||
@ -25,6 +25,6 @@ install(TARGETS queryserv RUNTIME DESTINATION ${CMAKE_INSTALL_PREFIX}/bin)
|
||||
|
||||
add_definitions(-DQSERV)
|
||||
|
||||
target_link_libraries(queryserv ${SERVER_LIBS})
|
||||
target_link_libraries(queryserv common)
|
||||
|
||||
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)
|
||||
|
||||
@ -15,6 +15,6 @@ add_executable(shared_memory ${shared_memory_sources} ${shared_memory_headers})
|
||||
|
||||
install(TARGETS shared_memory RUNTIME DESTINATION ${CMAKE_INSTALL_PREFIX}/bin)
|
||||
|
||||
target_link_libraries(shared_memory ${SERVER_LIBS})
|
||||
target_link_libraries(shared_memory common)
|
||||
|
||||
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)
|
||||
|
||||
@ -21,7 +21,7 @@ set(tests_headers
|
||||
|
||||
add_executable(tests ${tests_sources} ${tests_headers})
|
||||
|
||||
target_link_libraries(tests common cppunit ${SERVER_LIBS})
|
||||
target_link_libraries(tests common cppunit)
|
||||
|
||||
install(TARGETS tests RUNTIME DESTINATION ${CMAKE_INSTALL_PREFIX}/bin)
|
||||
|
||||
|
||||
@ -23,6 +23,6 @@ install(TARGETS ucs RUNTIME DESTINATION ${CMAKE_INSTALL_PREFIX}/bin)
|
||||
|
||||
add_definitions(-DUCS)
|
||||
|
||||
target_link_libraries(ucs ${SERVER_LIBS})
|
||||
target_link_libraries(ucs common)
|
||||
|
||||
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)
|
||||
|
||||
@ -7,7 +7,6 @@ set(world_sources
|
||||
cliententry.cpp
|
||||
clientlist.cpp
|
||||
console.cpp
|
||||
../common/data_bucket.cpp
|
||||
dynamic_zone.cpp
|
||||
dynamic_zone_manager.cpp
|
||||
eql_config.cpp
|
||||
@ -43,7 +42,6 @@ set(world_headers
|
||||
cliententry.h
|
||||
clientlist.h
|
||||
console.h
|
||||
../common/data_bucket.h
|
||||
dynamic_zone.h
|
||||
dynamic_zone_manager.h
|
||||
eql_config.h
|
||||
@ -82,6 +80,6 @@ endif()
|
||||
|
||||
add_definitions(-DWORLD)
|
||||
|
||||
target_link_libraries(world ${SERVER_LIBS})
|
||||
target_link_libraries(world common)
|
||||
|
||||
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)
|
||||
|
||||
@ -2530,9 +2530,9 @@ void Client::SendUnsupportedClientPacket(const std::string& message)
|
||||
|
||||
void Client::LoadDataBucketsCache()
|
||||
{
|
||||
DataBucket::BulkLoadEntitiesToCache(DataBucketLoadType::Account, {GetAccountID()});
|
||||
DataBucket::BulkLoadEntitiesToCache(&database, DataBucketLoadType::Account, {GetAccountID()});
|
||||
const auto ids = CharacterDataRepository::GetCharacterIDsByAccountID(database, GetAccountID());
|
||||
DataBucket::BulkLoadEntitiesToCache(DataBucketLoadType::Client, ids);
|
||||
DataBucket::BulkLoadEntitiesToCache(&database, DataBucketLoadType::Client, ids);
|
||||
}
|
||||
|
||||
void Client::ClearDataBucketsCache()
|
||||
|
||||
@ -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)
|
||||
|
||||
|
||||
@ -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)) {
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
@ -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<double> 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<double> 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<double> delete_time = delete_end - delete_start;
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
@ -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<uint8>(Strings::ToUnsignedInt(b.value));
|
||||
|
||||
@ -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,
|
||||
|
||||
@ -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)
|
||||
);
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
#include "../../groups.h"
|
||||
#include "../../raids.h"
|
||||
#include "../../raids.h"
|
||||
#include "../../common/repositories/account_repository.h"
|
||||
#include "../../../common/repositories/account_repository.h"
|
||||
|
||||
void SetAutoLogin(Client* c, const Seperator* sep)
|
||||
{
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
#include "../../client.h"
|
||||
#include "../../common/repositories/account_repository.h"
|
||||
#include "../../../common/repositories/account_repository.h"
|
||||
|
||||
void ShowAutoLogin(Client* c, const Seperator* sep)
|
||||
{
|
||||
|
||||
@ -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) {
|
||||
|
||||
@ -434,7 +434,6 @@ LuaParser::LuaParser() {
|
||||
ZoneArgumentDispatch[EVENT_TIMER_RESUME] = handle_zone_timer_pause_resume_start;
|
||||
ZoneArgumentDispatch[EVENT_TIMER_START] = handle_zone_timer_pause_resume_start;
|
||||
ZoneArgumentDispatch[EVENT_TIMER_STOP] = handle_zone_timer_stop;
|
||||
#endif
|
||||
|
||||
L = nullptr;
|
||||
}
|
||||
@ -2295,3 +2294,5 @@ void LuaParser::LoadZoneScript(std::string filename) {
|
||||
void LuaParser::LoadGlobalZoneScript(std::string filename) {
|
||||
LoadScript(filename, "global_zone");
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
16
zone/mob.cpp
16
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;
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
@ -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()
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user