From 056828822a8c6d0ff4025411f4a544164ccf84fc Mon Sep 17 00:00:00 2001 From: EnderdracheLP Date: Mon, 17 Feb 2025 21:08:49 +0100 Subject: [PATCH 01/13] Added PlatformAuthenticationTokenProvider from BeatTogether, added entitlement check as extra if auth token fails --- CMakeLists.txt | 3 + ...atformAuthenticationTokenProviderHooks.cpp | 118 ++++++++++++++++++ 2 files changed, 121 insertions(+) create mode 100644 src/Hooks/PlatformAuthenticationTokenProviderHooks.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 75c3997..be1c4fa 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,6 +1,9 @@ # include some defines automatically made by qpm include(qpm_defines.cmake) +# Bump Android sdk version +set(ANDROID_PLATFORM 29) + # Enable link time optimization # In my experience, this can be highly unstable but it nets a huge size optimization and likely performance # However, the instability was seen using Android.mk/ndk-build builds. With Ninja + CMake, this problem seems to have been solved. diff --git a/src/Hooks/PlatformAuthenticationTokenProviderHooks.cpp b/src/Hooks/PlatformAuthenticationTokenProviderHooks.cpp new file mode 100644 index 0000000..528aead --- /dev/null +++ b/src/Hooks/PlatformAuthenticationTokenProviderHooks.cpp @@ -0,0 +1,118 @@ +#include "hooking.hpp" +#include "logging.hpp" +#include "tasks.hpp" + +#include "System/Threading/Tasks/Task_1.hpp" +#include "GlobalNamespace/NetworkUtility.hpp" +#include "GlobalNamespace/AuthenticationToken.hpp" +#include "GlobalNamespace/PlatformAuthenticationTokenProvider.hpp" + +#include "GlobalNamespace/OculusPlatformUserModel.hpp" +#include "GlobalNamespace/UserInfo.hpp" + +#include "Oculus/Platform/Request.hpp" +#include "Oculus/Platform/Message.hpp" +#include "Oculus/Platform/Callback.hpp" +#include "Oculus/Platform/Entitlements.hpp" +#include "Oculus/Platform/Models/Error.hpp" +#include "Oculus/Platform/CAPI.hpp" + +#include "custom-types/shared/delegate.hpp" + +#include + +static ConstString dummy_auth("who_is_rem_?"); + +static std::string PicoBrand = "PICO"; +static bool isPico = false; +static bool checkedForPico = false; + +MAKE_AUTO_HOOK_ORIG_MATCH(PlatformAuthenticationTokenProvider_GetAuthenticationToken, &GlobalNamespace::PlatformAuthenticationTokenProvider::GetAuthenticationToken, +System::Threading::Tasks::Task_1*, GlobalNamespace::PlatformAuthenticationTokenProvider* self) { + if (isPico) self->_platform = GlobalNamespace::AuthenticationToken::Platform(20); // Set platform to 20 for Pico + + auto t = PlatformAuthenticationTokenProvider_GetAuthenticationToken(self); + return MultiplayerCore::StartTask([=](){ + using namespace std::chrono_literals; + while (!(t->IsCompleted || t->IsCanceled)) std::this_thread::sleep_for(50ms); + GlobalNamespace::AuthenticationToken token = t->ResultOnSuccess; + bool hasToken = !System::String::IsNullOrEmpty(token.sessionToken); + if (token && hasToken) { + INFO("Successfully got auth token, returning it!"); + if (token.platform == GlobalNamespace::AuthenticationToken::Platform::Oculus) + token.platform = GlobalNamespace::AuthenticationToken::Platform::OculusQuest; // Makes sure platform is set to OculusQuest + return token; + } + else if (!hasToken && self->_platform.value__ != 20) ERROR("Session token is null or empty!!! Either they don't own the game or modded games no longer have access to tokens"); + WARNING("Failed to get auth token, returning custom authentication token!"); + + // Check users entitlement to the app + bool userEntitled = true; + if (self->_platform.value__ != 20) + { + bool entitltiementCheckRan = false; + INFO("Checking entitlement to the app"); + // auto request = Oculus::Platform::Entitlements::IsUserEntitledToApplication(); + auto request = Oculus::Platform::Request::New_ctor( + Oculus::Platform::CAPI::ovr_Entitlement_GetIsViewerEntitled()); + request->OnComplete(custom_types::MakeDelegate( + std::function([&](Oculus::Platform::Message* msg) { + if (msg->IsError) { + ERROR("User is not entitled to the app: {}", msg->GetError()->Message); + userEntitled = false; + } + else { + INFO("User is entitled to the app, returning custom authentication token!"); + // userEntitled = true; + } + entitltiementCheckRan = true; + } + ))); + + while (!entitltiementCheckRan) std::this_thread::sleep_for(50ms); + } + + return GlobalNamespace::AuthenticationToken( + self->_platform == GlobalNamespace::AuthenticationToken::Platform::Oculus ? GlobalNamespace::AuthenticationToken::Platform::OculusQuest : self->_platform, + self->_userId, // Important for server and client to keep track of players, should not be messed with if possible + self->_userName, + userEntitled ? dummy_auth : nullptr + ); + }); +} + + + + +MAKE_AUTO_HOOK_ORIG_MATCH(OculusPlatformUserModel_GetUserInfo, &GlobalNamespace::OculusPlatformUserModel::GetUserInfo, System::Threading::Tasks::Task_1*, GlobalNamespace::OculusPlatformUserModel* self, System::Threading::CancellationToken ctx) {; + if (!checkedForPico) { + auto prop = __system_property_find("ro.product.brand"); + if (prop) + __system_property_read_callback(prop, [](void* cookie, const char* name, const char* value, uint32_t serial) { + std::string brand(value); + INFO("Device brand: {}", brand); + isPico = std::search(brand.begin(), brand.end(), PicoBrand.begin(), PicoBrand.end(), [](char a, char b){ + return std::tolower(static_cast(a)) == std::tolower(static_cast(b)); + }) != brand.end(); + checkedForPico = true; + }, nullptr); + } + + auto t = OculusPlatformUserModel_GetUserInfo(self, ctx); + return MultiplayerCore::StartTask([=](){ + using namespace std::chrono_literals; + while (!(t->IsCompleted || t->IsCanceled)) std::this_thread::sleep_for(50ms); + GlobalNamespace::UserInfo* info = t->ResultOnSuccess; + if (info) { + INFO("Successfully got user info, returning it!"); + if (isPico) + { + INFO("User is on Pico, changing platform to 20"); + info->platform = GlobalNamespace::UserInfo::Platform(20); + } + } + return info; + }); +} + + From 859ce652f0ab009fa0f8a0a2ad3f1315ad216343 Mon Sep 17 00:00:00 2001 From: EnderdracheLP Date: Mon, 17 Feb 2025 21:09:24 +0100 Subject: [PATCH 02/13] Update how inline-hook is added in CMakeList --- CMakeLists.txt | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index be1c4fa..3f9b655 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -38,18 +38,12 @@ add_compile_definitions(CORDL_RUNTIME_FIELD_NULL_CHECKS) file(GLOB_RECURSE cpp_file_list ${SOURCE_DIR}/*.cpp) file(GLOB_RECURSE c_file_list ${SOURCE_DIR}/*.c) -file(GLOB_RECURSE inline_hook_c ${EXTERN_DIR}/includes/beatsaber-hook/shared/inline-hook/*.c) -file(GLOB_RECURSE inline_hook_cpp ${EXTERN_DIR}/includes/beatsaber-hook/shared/inline-hook/*.cpp) - # add all src files to compile add_library( ${COMPILE_ID} SHARED ${cpp_file_list} - ${c_file_list} - ${inline_hook_c} - ${inline_hook_cpp} -) + ${c_file_list}) target_include_directories(${COMPILE_ID} PRIVATE .) @@ -65,6 +59,13 @@ target_link_libraries(${COMPILE_ID} PRIVATE -llog ${COMPILE_ID}-assets) # add extern stuff like libs and other includes include(extern.cmake) +# beatsaber hook inline hook +RECURSE_FILES(src_inline_hook_beatsaber_hook_local_extra_c ${EXTERN_DIR}/includes/beatsaber-hook/shared/inline-hook/*.c) +RECURSE_FILES(src_inline_hook_beatsaber_hook_local_extra_cpp ${EXTERN_DIR}/includes/beatsaber-hook/shared/inline-hook/*.cpp) +target_sources(${COMPILE_ID} PRIVATE ${src_inline_hook_beatsaber_hook_local_extra_c}) +target_sources(${COMPILE_ID} PRIVATE ${src_inline_hook_beatsaber_hook_local_extra_cpp}) + + add_custom_command(TARGET ${COMPILE_ID} POST_BUILD COMMAND ${CMAKE_STRIP} -d --strip-all "lib${COMPILE_ID}.so" -o "stripped_lib${COMPILE_ID}.so" From 56efa2966d95216e8fdbfa1445f66d32e325dc72 Mon Sep 17 00:00:00 2001 From: EnderdracheLP Date: Sun, 9 Mar 2025 14:36:54 +0100 Subject: [PATCH 03/13] Initial Update for 1.40.3 --- include/Installers/MpAppInstaller.hpp | 4 +- include/Installers/MpMenuInstaller.hpp | 4 +- .../MpNodePoseSyncStateManager.hpp | 4 +- .../MpNodePoseSyncStatePacket.hpp | 4 +- include/Objects/BGNetDebugLogger.hpp | 5 +- include/Objects/MpPlayersDataModel.hpp | 4 +- .../Patchers/BeatmapSelectionViewPatcher.hpp | 4 +- include/Patchers/ModeSelectionPatcher.hpp | 4 +- include/Patchers/PlayerCountPatcher.hpp | 4 +- .../MpScoreSyncStateManager.hpp | 4 +- .../ScoreSyncState/MpScoreSyncStatePacket.hpp | 4 +- include/UI/CustomBeatmapSelectionView.hpp | 4 +- .../UI/CustomEditableBeatmapSelectionView.hpp | 4 +- .../GameServerPlayerTableCellCustomData.hpp | 14 +- include/UI/MpColorsUI.hpp | 4 +- include/UI/MpLoadingIndicator.hpp | 5 +- include/UI/MpPerPlayerUI.hpp | 5 +- include/UI/MpRequirementsUI.hpp | 6 +- include/Utilities.hpp | 3 +- include/logging.hpp | 16 +- mod.template.json | 2 +- qpm.json | 26 +-- qpm.shared.json | 177 +++++++++--------- .../Beatmaps/Abstractions/MpBeatmapLevel.hpp | 4 +- shared/Beatmaps/BeatSaverBeatmapLevel.hpp | 4 +- shared/Beatmaps/BeatSaverPreviewMediaData.hpp | 4 +- shared/Beatmaps/LocalBeatmapLevel.hpp | 4 +- shared/Beatmaps/NetworkBeatmapLevel.hpp | 4 +- shared/Beatmaps/NoInfoBeatmapLevel.hpp | 4 +- shared/Beatmaps/Packets/MpBeatmapPacket.hpp | 4 +- .../Providers/MpBeatmapLevelProvider.hpp | 28 +-- shared/Models/MpStatusData.hpp | 4 +- shared/Networking/Abstractions/MpPacket.hpp | 5 +- shared/Networking/MpPacketSerializer.hpp | 7 +- shared/Objects/MpEntitlementChecker.hpp | 4 +- shared/Objects/MpLevelDownloader.hpp | 4 +- shared/Objects/MpLevelLoader.hpp | 4 +- shared/Players/MpPlayerData.hpp | 4 +- shared/Players/MpPlayerManager.hpp | 4 +- .../Players/Packets/GetMpPerPlayerPacket.hpp | 7 +- shared/Players/Packets/MpPerPlayerPacket.hpp | 4 +- shared/Repositories/MpStatusRepository.hpp | 4 +- src/Beatmaps/BeatSaverPreviewMediaData.cpp | 2 +- src/Beatmaps/LocalBeatmapLevel.cpp | 2 +- src/Beatmaps/NoInfoBeatmapLevel.cpp | 2 +- .../Providers/MpBeatmapLevelProvider.cpp | 6 +- src/Hooks/ProvideBeatsaverLevelHooks.cpp | 76 ++++---- src/UI/MpPerPlayerUI.cpp | 8 +- 48 files changed, 264 insertions(+), 250 deletions(-) diff --git a/include/Installers/MpAppInstaller.hpp b/include/Installers/MpAppInstaller.hpp index e672e84..29afb93 100644 --- a/include/Installers/MpAppInstaller.hpp +++ b/include/Installers/MpAppInstaller.hpp @@ -3,7 +3,7 @@ #include "custom-types/shared/macros.hpp" #include "Zenject/Installer.hpp" -DECLARE_CLASS_CODEGEN(MultiplayerCore::Installers, MpAppInstaller, Zenject::Installer, +DECLARE_CLASS_CODEGEN(MultiplayerCore::Installers, MpAppInstaller, ::Zenject::Installer) { DECLARE_OVERRIDE_METHOD_MATCH(void, InstallBindings, &::Zenject::Installer::InstallBindings); DECLARE_DEFAULT_CTOR(); -) +}; diff --git a/include/Installers/MpMenuInstaller.hpp b/include/Installers/MpMenuInstaller.hpp index 0f0991d..efed1ea 100644 --- a/include/Installers/MpMenuInstaller.hpp +++ b/include/Installers/MpMenuInstaller.hpp @@ -3,7 +3,7 @@ #include "custom-types/shared/macros.hpp" #include "Zenject/Installer.hpp" -DECLARE_CLASS_CODEGEN(MultiplayerCore::Installers, MpMenuInstaller, Zenject::Installer, +DECLARE_CLASS_CODEGEN(MultiplayerCore::Installers, MpMenuInstaller, ::Zenject::Installer) { DECLARE_OVERRIDE_METHOD_MATCH(void, InstallBindings, &::Zenject::Installer::InstallBindings); DECLARE_DEFAULT_CTOR(); -) +}; diff --git a/include/NodePoseSyncState/MpNodePoseSyncStateManager.hpp b/include/NodePoseSyncState/MpNodePoseSyncStateManager.hpp index b0dc7aa..5b528a1 100644 --- a/include/NodePoseSyncState/MpNodePoseSyncStateManager.hpp +++ b/include/NodePoseSyncState/MpNodePoseSyncStateManager.hpp @@ -9,7 +9,7 @@ #include "System/IDisposable.hpp" #include "Zenject/IInitializable.hpp" -DECLARE_CLASS_CODEGEN_INTERFACES(MultiplayerCore::NodePoseSyncState, MpNodePoseSyncStateManager, GlobalNamespace::NodePoseSyncStateManager, std::vector({classof(Zenject::IInitializable*), classof(System::IDisposable*)}), +DECLARE_CLASS_CODEGEN_INTERFACES(MultiplayerCore::NodePoseSyncState, MpNodePoseSyncStateManager, GlobalNamespace::NodePoseSyncStateManager, ::Zenject::IInitializable*, System::IDisposable*) { DECLARE_INSTANCE_FIELD_PRIVATE(Networking::MpPacketSerializer*, _packetSerializer); DECLARE_INSTANCE_FIELD_PRIVATE(long, deltaUpdateFrequencyMs); DECLARE_INSTANCE_FIELD_PRIVATE(long, fullStateUpdateFrequencyMs); @@ -26,4 +26,4 @@ DECLARE_CLASS_CODEGEN_INTERFACES(MultiplayerCore::NodePoseSyncState, MpNodePoseS public: void HandleNodePoseSyncUpdateReceived(MpNodePoseSyncStatePacket* data, GlobalNamespace::IConnectedPlayer* player); -) +}; \ No newline at end of file diff --git a/include/NodePoseSyncState/MpNodePoseSyncStatePacket.hpp b/include/NodePoseSyncState/MpNodePoseSyncStatePacket.hpp index e1b3682..1362cab 100644 --- a/include/NodePoseSyncState/MpNodePoseSyncStatePacket.hpp +++ b/include/NodePoseSyncState/MpNodePoseSyncStatePacket.hpp @@ -2,7 +2,7 @@ #include "Networking/Abstractions/MpPacket.hpp" -DECLARE_CLASS_CUSTOM(MultiplayerCore::NodePoseSyncState, MpNodePoseSyncStatePacket, MultiplayerCore::Networking::Abstractions::MpPacket, +DECLARE_CLASS_CUSTOM(MultiplayerCore::NodePoseSyncState, MpNodePoseSyncStatePacket, MultiplayerCore::Networking::Abstractions::MpPacket) { DECLARE_INSTANCE_FIELD(long, deltaUpdateFrequencyMs); DECLARE_INSTANCE_FIELD(long, fullStateUpdateFrequencyMs); @@ -10,4 +10,4 @@ DECLARE_CLASS_CUSTOM(MultiplayerCore::NodePoseSyncState, MpNodePoseSyncStatePack DECLARE_OVERRIDE_METHOD_MATCH(void, Deserialize, &LiteNetLib::Utils::INetSerializable::Deserialize, LiteNetLib::Utils::NetDataReader* reader); DECLARE_CTOR(ctor); -) +}; diff --git a/include/Objects/BGNetDebugLogger.hpp b/include/Objects/BGNetDebugLogger.hpp index 6b667b5..f7ed9d8 100644 --- a/include/Objects/BGNetDebugLogger.hpp +++ b/include/Objects/BGNetDebugLogger.hpp @@ -3,7 +3,8 @@ #include "custom-types/shared/macros.hpp" #include "BGNet/Logging/Debug.hpp" -DECLARE_CLASS_CODEGEN_INTERFACES(MultiplayerCore::Objects, BGNetDebugLogger, System::Object, classof(BGNet::Logging::Debug::ILogger*), +// TODO: This doesn't work replace with Hooks!!! +DECLARE_CLASS_CODEGEN_INTERFACES(MultiplayerCore::Objects, BGNetDebugLogger, System::Object, BGNet::Logging::Debug::ILogger*) { DECLARE_OVERRIDE_METHOD_MATCH(void, LogInfo, &::BGNet::Logging::Debug::ILogger::LogInfo, ::StringW message); DECLARE_OVERRIDE_METHOD_MATCH(void, LogError, &::BGNet::Logging::Debug::ILogger::LogError, ::StringW message); DECLARE_OVERRIDE_METHOD_MATCH(void, LogException, &::BGNet::Logging::Debug::ILogger::LogException, ::System::Exception* exception, ::StringW message); @@ -12,4 +13,4 @@ DECLARE_CLASS_CODEGEN_INTERFACES(MultiplayerCore::Objects, BGNetDebugLogger, Sys public: BGNet::Logging::Debug::ILogger* i_ILogger() { return reinterpret_cast(this); } -) +}; \ No newline at end of file diff --git a/include/Objects/MpPlayersDataModel.hpp b/include/Objects/MpPlayersDataModel.hpp index b46bc5a..bff747c 100644 --- a/include/Objects/MpPlayersDataModel.hpp +++ b/include/Objects/MpPlayersDataModel.hpp @@ -9,7 +9,7 @@ #include "Beatmaps/Providers/MpBeatmapLevelProvider.hpp" #include "Beatmaps/Packets/MpBeatmapPacket.hpp" -DECLARE_CLASS_CODEGEN(MultiplayerCore::Objects, MpPlayersDataModel, GlobalNamespace::LobbyPlayersDataModel, +DECLARE_CLASS_CODEGEN(MultiplayerCore::Objects, MpPlayersDataModel, GlobalNamespace::LobbyPlayersDataModel) { DECLARE_INSTANCE_FIELD_PRIVATE(Networking::MpPacketSerializer*, _packetSerializer); DECLARE_INSTANCE_FIELD(Beatmaps::Providers::MpBeatmapLevelProvider*, _beatmapLevelProvider); using PacketDict = System::Collections::Generic::Dictionary_2; @@ -35,4 +35,4 @@ DECLARE_CLASS_CODEGEN(MultiplayerCore::Objects, MpPlayersDataModel, GlobalNamesp void SendMpBeatmapPacket(GlobalNamespace::BeatmapKey beatmapKey, GlobalNamespace::IConnectedPlayer* player = nullptr); private: void PutPlayerPacket(StringW playerId, Beatmaps::Packets::MpBeatmapPacket* packet); -) +}; diff --git a/include/Patchers/BeatmapSelectionViewPatcher.hpp b/include/Patchers/BeatmapSelectionViewPatcher.hpp index a63af99..642941c 100644 --- a/include/Patchers/BeatmapSelectionViewPatcher.hpp +++ b/include/Patchers/BeatmapSelectionViewPatcher.hpp @@ -8,7 +8,7 @@ #include "GlobalNamespace/EditableBeatmapSelectionView.hpp" #include "Zenject/DiContainer.hpp" -DECLARE_CLASS_CODEGEN_INTERFACES(MultiplayerCore::Patchers, BeatmapSelectionViewPatcher, System::Object, std::vector({classof(Zenject::IInitializable*), classof(System::IDisposable*)}), +DECLARE_CLASS_CODEGEN_INTERFACES(MultiplayerCore::Patchers, BeatmapSelectionViewPatcher, System::Object, Zenject::IInitializable*, System::IDisposable*) { DECLARE_INSTANCE_FIELD_PRIVATE(GlobalNamespace::LobbySetupViewController*, _lobbySetupViewController); DECLARE_INSTANCE_FIELD_PRIVATE( GlobalNamespace::CenterStageScreenController*, _centerStageScreenController); DECLARE_INSTANCE_FIELD_PRIVATE(Zenject::DiContainer*, _container); @@ -21,4 +21,4 @@ DECLARE_CLASS_CODEGEN_INTERFACES(MultiplayerCore::Patchers, BeatmapSelectionView DECLARE_OVERRIDE_METHOD_MATCH(void, Dispose, &::System::IDisposable::Dispose); DECLARE_OVERRIDE_METHOD_MATCH(void, Initialize, &::Zenject::IInitializable::Initialize); DECLARE_CTOR(ctor, GlobalNamespace::LobbySetupViewController* lobbySetupViewController, GlobalNamespace::CenterStageScreenController* centerStageScreenController, Zenject::DiContainer* container); -) +}; \ No newline at end of file diff --git a/include/Patchers/ModeSelectionPatcher.hpp b/include/Patchers/ModeSelectionPatcher.hpp index 0fa9ad8..f254bfb 100644 --- a/include/Patchers/ModeSelectionPatcher.hpp +++ b/include/Patchers/ModeSelectionPatcher.hpp @@ -4,7 +4,7 @@ #include "GlobalNamespace/INetworkConfig.hpp" #include "System/IDisposable.hpp" -DECLARE_CLASS_CODEGEN_INTERFACES(MultiplayerCore::Patchers, ModeSelectionPatcher, System::Object, classof(System::IDisposable*), +DECLARE_CLASS_CODEGEN_INTERFACES(MultiplayerCore::Patchers, ModeSelectionPatcher, System::Object, System::IDisposable*) { DECLARE_INSTANCE_FIELD_PRIVATE(GlobalNamespace::INetworkConfig*, _networkConfig); DECLARE_INSTANCE_FIELD_PRIVATE(StringW, lastStatusUrl); @@ -18,4 +18,4 @@ DECLARE_CLASS_CODEGEN_INTERFACES(MultiplayerCore::Patchers, ModeSelectionPatcher static ModeSelectionPatcher* get_instance(); private: static ModeSelectionPatcher* instance; -) +}; \ No newline at end of file diff --git a/include/Patchers/PlayerCountPatcher.hpp b/include/Patchers/PlayerCountPatcher.hpp index f2ab569..d9a8a7b 100644 --- a/include/Patchers/PlayerCountPatcher.hpp +++ b/include/Patchers/PlayerCountPatcher.hpp @@ -4,7 +4,7 @@ #include "GlobalNamespace/INetworkConfig.hpp" #include "System/IDisposable.hpp" -DECLARE_CLASS_CODEGEN_INTERFACES(MultiplayerCore::Patchers, PlayerCountPatcher, System::Object, classof(System::IDisposable*), +DECLARE_CLASS_CODEGEN_INTERFACES(MultiplayerCore::Patchers, PlayerCountPatcher, System::Object, System::IDisposable*) { DECLARE_INSTANCE_FIELD_PRIVATE(GlobalNamespace::INetworkConfig*, _networkConfig); DECLARE_OVERRIDE_METHOD_MATCH(void, Dispose, &::System::IDisposable::Dispose); @@ -24,4 +24,4 @@ DECLARE_CLASS_CODEGEN_INTERFACES(MultiplayerCore::Patchers, PlayerCountPatcher, static PlayerCountPatcher* get_instance(); private: static PlayerCountPatcher* instance; -) +}; \ No newline at end of file diff --git a/include/ScoreSyncState/MpScoreSyncStateManager.hpp b/include/ScoreSyncState/MpScoreSyncStateManager.hpp index 091223b..7515a2c 100644 --- a/include/ScoreSyncState/MpScoreSyncStateManager.hpp +++ b/include/ScoreSyncState/MpScoreSyncStateManager.hpp @@ -9,7 +9,7 @@ #include "System/IDisposable.hpp" #include "Zenject/IInitializable.hpp" -DECLARE_CLASS_CODEGEN_INTERFACES(MultiplayerCore::ScoreSyncState, MpScoreSyncStateManager, GlobalNamespace::ScoreSyncStateManager, std::vector({classof(Zenject::IInitializable*), classof(System::IDisposable*)}), +DECLARE_CLASS_CODEGEN_INTERFACES(MultiplayerCore::ScoreSyncState, MpScoreSyncStateManager, GlobalNamespace::ScoreSyncStateManager, Zenject::IInitializable*, System::IDisposable*) { DECLARE_INSTANCE_FIELD_PRIVATE(Networking::MpPacketSerializer*, _packetSerializer); DECLARE_INSTANCE_FIELD_PRIVATE(long, deltaUpdateFrequencyMs); DECLARE_INSTANCE_FIELD_PRIVATE(long, fullStateUpdateFrequencyMs); @@ -26,4 +26,4 @@ DECLARE_CLASS_CODEGEN_INTERFACES(MultiplayerCore::ScoreSyncState, MpScoreSyncSta public: void HandleScoreSyncUpdateReceived(MpScoreSyncStatePacket* data, GlobalNamespace::IConnectedPlayer* player); -) +}; diff --git a/include/ScoreSyncState/MpScoreSyncStatePacket.hpp b/include/ScoreSyncState/MpScoreSyncStatePacket.hpp index 5dc2487..c13ed91 100644 --- a/include/ScoreSyncState/MpScoreSyncStatePacket.hpp +++ b/include/ScoreSyncState/MpScoreSyncStatePacket.hpp @@ -2,7 +2,7 @@ #include "Networking/Abstractions/MpPacket.hpp" -DECLARE_CLASS_CUSTOM(MultiplayerCore::ScoreSyncState, MpScoreSyncStatePacket, MultiplayerCore::Networking::Abstractions::MpPacket, +DECLARE_CLASS_CUSTOM(MultiplayerCore::ScoreSyncState, MpScoreSyncStatePacket, MultiplayerCore::Networking::Abstractions::MpPacket) { DECLARE_INSTANCE_FIELD(long, deltaUpdateFrequencyMs); DECLARE_INSTANCE_FIELD(long, fullStateUpdateFrequencyMs); @@ -10,4 +10,4 @@ DECLARE_CLASS_CUSTOM(MultiplayerCore::ScoreSyncState, MpScoreSyncStatePacket, Mu DECLARE_OVERRIDE_METHOD_MATCH(void, Deserialize, &LiteNetLib::Utils::INetSerializable::Deserialize, LiteNetLib::Utils::NetDataReader* reader); DECLARE_CTOR(ctor); -) +}; \ No newline at end of file diff --git a/include/UI/CustomBeatmapSelectionView.hpp b/include/UI/CustomBeatmapSelectionView.hpp index c4e6966..93d5395 100644 --- a/include/UI/CustomBeatmapSelectionView.hpp +++ b/include/UI/CustomBeatmapSelectionView.hpp @@ -9,7 +9,7 @@ #include "Beatmaps/Providers/MpBeatmapLevelProvider.hpp" #include "GlobalNamespace/EditableBeatmapSelectionView.hpp" -DECLARE_CLASS_CODEGEN(MultiplayerCore::UI, CustomBeatmapSelectionView, GlobalNamespace::BeatmapSelectionView, +DECLARE_CLASS_CODEGEN(MultiplayerCore::UI, CustomBeatmapSelectionView, GlobalNamespace::BeatmapSelectionView) { DECLARE_INSTANCE_FIELD_PRIVATE(Objects::MpPlayersDataModel*, _mpPlayersDataModel); DECLARE_INSTANCE_FIELD_PRIVATE(Beatmaps::Providers::MpBeatmapLevelProvider*, _mpBeatmapLevelProvider); @@ -19,4 +19,4 @@ DECLARE_CLASS_CODEGEN(MultiplayerCore::UI, CustomBeatmapSelectionView, GlobalNam public: custom_types::Helpers::Coroutine SetBeatmapCoroutine(GlobalNamespace::BeatmapKey beatmapKey, std::string levelHash); -) +}; \ No newline at end of file diff --git a/include/UI/CustomEditableBeatmapSelectionView.hpp b/include/UI/CustomEditableBeatmapSelectionView.hpp index aad31b6..44347a3 100644 --- a/include/UI/CustomEditableBeatmapSelectionView.hpp +++ b/include/UI/CustomEditableBeatmapSelectionView.hpp @@ -9,7 +9,7 @@ #include "Beatmaps/Providers/MpBeatmapLevelProvider.hpp" #include "GlobalNamespace/EditableBeatmapSelectionView.hpp" -DECLARE_CLASS_CODEGEN(MultiplayerCore::UI, CustomEditableBeatmapSelectionView, GlobalNamespace::EditableBeatmapSelectionView, +DECLARE_CLASS_CODEGEN(MultiplayerCore::UI, CustomEditableBeatmapSelectionView, GlobalNamespace::EditableBeatmapSelectionView) { DECLARE_INSTANCE_FIELD_PRIVATE(Objects::MpPlayersDataModel*, _mpPlayersDataModel); DECLARE_INSTANCE_FIELD_PRIVATE(Beatmaps::Providers::MpBeatmapLevelProvider*, _mpBeatmapLevelProvider); @@ -19,4 +19,4 @@ DECLARE_CLASS_CODEGEN(MultiplayerCore::UI, CustomEditableBeatmapSelectionView, G public: custom_types::Helpers::Coroutine SetBeatmapCoroutine(GlobalNamespace::BeatmapKey beatmapKey, std::string levelHash); -) +}; \ No newline at end of file diff --git a/include/UI/GameServerPlayerTableCellCustomData.hpp b/include/UI/GameServerPlayerTableCellCustomData.hpp index af370ca..5b9948d 100644 --- a/include/UI/GameServerPlayerTableCellCustomData.hpp +++ b/include/UI/GameServerPlayerTableCellCustomData.hpp @@ -10,16 +10,16 @@ #include "GlobalNamespace/IConnectedPlayer.hpp" #include "GlobalNamespace/ILobbyPlayerData.hpp" -DECLARE_CLASS_CODEGEN(MultiplayerCore::UI, GameServerPlayerTableCellCustomData, UnityEngine::MonoBehaviour, - DECLARE_INJECT_METHOD(void, Inject, MultiplayerCore::Objects::MpPlayersDataModel* mpPlayersDataModel, MultiplayerCore::Beatmaps::Providers::MpBeatmapLevelProvider* beatmapLevelProvider); - DECLARE_INSTANCE_FIELD_PRIVATE(MultiplayerCore::Objects::MpPlayersDataModel*, _mpPlayersDataModel); - DECLARE_INSTANCE_FIELD(MultiplayerCore::Beatmaps::Providers::MpBeatmapLevelProvider*, _mpBeatmapLevelProvider); - DECLARE_INSTANCE_FIELD(GlobalNamespace::GameServerPlayerTableCell*, _gameServerPlayerTableCell); +DECLARE_CLASS_CODEGEN(MultiplayerCore::UI, GameServerPlayerTableCellCustomData, UnityEngine::MonoBehaviour) { + DECLARE_INJECT_METHOD(void, Inject, MultiplayerCore::Objects::MpPlayersDataModel* mpPlayersDataModel, MultiplayerCore::Beatmaps::Providers::MpBeatmapLevelProvider* beatmapLevelProvider); + DECLARE_INSTANCE_FIELD_PRIVATE(MultiplayerCore::Objects::MpPlayersDataModel*, _mpPlayersDataModel); + DECLARE_INSTANCE_FIELD(MultiplayerCore::Beatmaps::Providers::MpBeatmapLevelProvider*, _mpBeatmapLevelProvider); + DECLARE_INSTANCE_FIELD(GlobalNamespace::GameServerPlayerTableCell*, _gameServerPlayerTableCell); - DECLARE_INSTANCE_METHOD(void, Awake); + DECLARE_INSTANCE_METHOD(void, Awake); public: void SetData(GlobalNamespace::IConnectedPlayer* connectedPlayer, GlobalNamespace::ILobbyPlayerData* playerData, bool hasKickPermissions, bool allowSelection, System::Threading::Tasks::Task_1* getLevelEntitlementTask); custom_types::Helpers::Coroutine SetDataCoroutine(GlobalNamespace::IConnectedPlayer* connectedPlayer, GlobalNamespace::ILobbyPlayerData* playerData, bool hasKickPermissions, bool allowSelection, System::Threading::Tasks::Task_1* getLevelEntitlementTask); private: void SetLevelFoundValues(bool displayLevelText); -) +}; \ No newline at end of file diff --git a/include/UI/MpColorsUI.hpp b/include/UI/MpColorsUI.hpp index 61a1d15..2e0fabc 100644 --- a/include/UI/MpColorsUI.hpp +++ b/include/UI/MpColorsUI.hpp @@ -11,7 +11,7 @@ #include "UnityEngine/RectTransform.hpp" #include "UnityEngine/Vector3.hpp" -DECLARE_CLASS_CODEGEN(MultiplayerCore::UI, MpColorsUI, System::Object, +DECLARE_CLASS_CODEGEN(MultiplayerCore::UI, MpColorsUI, System::Object) { DECLARE_INSTANCE_FIELD_PRIVATE(GlobalNamespace::LobbySetupViewController*, _lobbySetupViewController); DECLARE_INSTANCE_FIELD_PRIVATE(GlobalNamespace::ColorSchemeView*, _colorSchemeView); @@ -32,4 +32,4 @@ DECLARE_CLASS_CODEGEN(MultiplayerCore::UI, MpColorsUI, System::Object, void AcceptColors(Beatmaps::Abstractions::DifficultyColors const& colors); void AcceptColors(SongCore::CustomJSONData::CustomSaveDataInfo::BasicCustomDifficultyBeatmapDetails::CustomColors const& colors); -) +}; diff --git a/include/UI/MpLoadingIndicator.hpp b/include/UI/MpLoadingIndicator.hpp index 865595e..7c61579 100644 --- a/include/UI/MpLoadingIndicator.hpp +++ b/include/UI/MpLoadingIndicator.hpp @@ -17,8 +17,7 @@ #include "Zenject/ITickable.hpp" #include "UnityEngine/GameObject.hpp" -DECLARE_CLASS_CODEGEN_INTERFACES(MultiplayerCore::UI, MpLoadingIndicator, System::Object, - std::vector({classof(::System::IDisposable*), classof(::Zenject::IInitializable*), classof(::Zenject::ITickable*)}), +DECLARE_CLASS_CODEGEN_INTERFACES(MultiplayerCore::UI, MpLoadingIndicator, System::Object, ::System::IDisposable*, ::Zenject::IInitializable*, ::Zenject::ITickable*) { DECLARE_INSTANCE_FIELD_PRIVATE(double, _downloadProgress); DECLARE_INSTANCE_FIELD_PRIVATE(bool, _isDownloading); @@ -47,4 +46,4 @@ DECLARE_CLASS_CODEGEN_INTERFACES(MultiplayerCore::UI, MpLoadingIndicator, System public: std::pair OkAndTotalPlayerCountNoRequest(); -) +}; \ No newline at end of file diff --git a/include/UI/MpPerPlayerUI.hpp b/include/UI/MpPerPlayerUI.hpp index 3b29c06..dbc256e 100644 --- a/include/UI/MpPerPlayerUI.hpp +++ b/include/UI/MpPerPlayerUI.hpp @@ -27,8 +27,7 @@ #include "Players/Packets/MpPerPlayerPacket.hpp" #include "Players/Packets/GetMpPerPlayerPacket.hpp" -DECLARE_CLASS_CODEGEN_INTERFACES(MultiplayerCore::UI, MpPerPlayerUI, System::Object, std::vector({ classof(::Zenject::IInitializable*), classof(::System::IDisposable*)}), - +DECLARE_CLASS_CODEGEN_INTERFACES(MultiplayerCore::UI, MpPerPlayerUI, System::Object, ::Zenject::IInitializable*, ::System::IDisposable*) { DECLARE_INSTANCE_FIELD(GlobalNamespace::GameServerLobbyFlowCoordinator*, _gameServerLobbyFlowCoordinator); DECLARE_INSTANCE_FIELD(GlobalNamespace::LobbySetupViewController*, _lobbyViewController); DECLARE_INSTANCE_FIELD(GlobalNamespace::ILobbyGameStateController*, _gameStateController); @@ -92,4 +91,4 @@ DECLARE_CLASS_CODEGEN_INTERFACES(MultiplayerCore::UI, MpPerPlayerUI, System::Obj DECLARE_INSTANCE_FIELD(System::Action_1*, updateDifficultyListDelegate); DECLARE_INSTANCE_FIELD(System::Action*, clearLocalSelectedBeatmapDelegate); DECLARE_INSTANCE_FIELD(System::Action*, updateButtonsEnabledDelegate); -) \ No newline at end of file +}; \ No newline at end of file diff --git a/include/UI/MpRequirementsUI.hpp b/include/UI/MpRequirementsUI.hpp index 1d840dc..bd36b8d 100644 --- a/include/UI/MpRequirementsUI.hpp +++ b/include/UI/MpRequirementsUI.hpp @@ -21,8 +21,8 @@ #include "bsml/shared/BSML/Components/CustomListTableData.hpp" #include "bsml/shared/BSML/Components/ModalView.hpp" -DECLARE_CLASS_CODEGEN_INTERFACES(MultiplayerCore::UI, MpRequirementsUI, System::Object, std::vector({classof(::System::IDisposable*), classof(::Zenject::IInitializable*)}), - +DECLARE_CLASS_CODEGEN_INTERFACES(MultiplayerCore::UI, MpRequirementsUI, System::Object, ::System::IDisposable*, ::Zenject::IInitializable*) { + DECLARE_INSTANCE_FIELD_PRIVATE(SongCore::SongLoader::RuntimeSongLoader*, _runtimeSongLoader); DECLARE_INSTANCE_FIELD_PRIVATE(SongCore::Capabilities*, _capabilities); DECLARE_INSTANCE_FIELD_PRIVATE(SongCore::PlayButtonInteractable*, _playButtonInteractable); @@ -99,4 +99,4 @@ DECLARE_CLASS_CODEGEN_INTERFACES(MultiplayerCore::UI, MpRequirementsUI, System:: void PlayButtonDisablingModsChanged(std::span disablingModsInfos); void SetDisablingModInfoCells(std::span disablingModsInfos); -) +}; \ No newline at end of file diff --git a/include/Utilities.hpp b/include/Utilities.hpp index e39890c..866bad2 100644 --- a/include/Utilities.hpp +++ b/include/Utilities.hpp @@ -1,7 +1,8 @@ #pragma once +#include #include -#include "paper/shared/utfcpp/source/utf8.h" +#include "paper2_scotland2/shared/utfcpp/source/utf8.h" #include "beatsaber-hook/shared/utils/typedefs-string.hpp" namespace MultiplayerCore { diff --git a/include/logging.hpp b/include/logging.hpp index 653e816..18e56c7 100644 --- a/include/logging.hpp +++ b/include/logging.hpp @@ -3,15 +3,15 @@ #include "beatsaber-hook/shared/utils/typedefs.h" #include -#include "paper/shared/logger.hpp" +#include "paper2_scotland2/shared/logger.hpp" -template <> struct fmt::formatter<::StringW> : formatter { - // parse is inherited from formatter. - template - auto format(StringW s, FormatContext& ctx) { - return formatter::format(s ? static_cast(s) : "NULL", ctx); - } -}; +// template <> struct fmt::formatter<::StringW> : formatter { +// // parse is inherited from formatter. +// template +// auto format(StringW s, FormatContext& ctx) { +// return formatter::format(s ? static_cast(s) : "NULL", ctx); +// } +// }; #define INFO(str, ...) Paper::Logger::fmtLogTag(str, MOD_ID __VA_OPT__(, __VA_ARGS__)) #define ERROR(str, ...) Paper::Logger::fmtLogTag(str, MOD_ID __VA_OPT__(, __VA_ARGS__)) diff --git a/mod.template.json b/mod.template.json index dc0b985..b9c95d3 100644 --- a/mod.template.json +++ b/mod.template.json @@ -6,7 +6,7 @@ "porter": "EnderdracheLP, cubic, RedBrumbler", "version": "${version}", "packageId": "com.beatgames.beatsaber", - "packageVersion": "1.37.0_9064817954", + "packageVersion": "1.40.3_4614", "description": "Adds custom songs to Beat Saber Multiplayer.", "coverImage": "Cover.png", "dependencies": [], diff --git a/qpm.json b/qpm.json index 8b17f55..46ce22d 100644 --- a/qpm.json +++ b/qpm.json @@ -5,7 +5,7 @@ "info": { "name": "MultiplayerCore", "id": "multiplayer-core", - "version": "1.6.0", + "version": "1.6.0+Dev", "url": "https://github.com/EnderdracheLP/MultiplayerCore.Quest", "additionalData": { "soLink": "https://github.com/EnderdracheLP/MultiplayerCore.Quest/releases/download/1.6.0/libMultiplayerCore.so", @@ -26,50 +26,50 @@ "dependencies": [ { "id": "libil2cpp", - "versionRange": "^0.3.0", + "versionRange": "^0.4.0", "additionalData": {} }, { "id": "beatsaber-hook", - "versionRange": "^5.1.9", + "versionRange": "^6.4.1", "additionalData": {} }, { "id": "bs-cordl", - "versionRange": "^3700.0.0", + "versionRange": "^4030.0.0", "additionalData": {} }, { "id": "custom-types", - "versionRange": "^0.17.10", + "versionRange": "^0.18.2", "additionalData": {} }, { "id": "songcore", - "versionRange": "^1.1.13", + "versionRange": "^1.1.19", "additionalData": {} }, { "id": "scotland2", - "versionRange": "^0.1.4", + "versionRange": "^0.1.6", "additionalData": { "includeQmod": false, "private": true } }, { - "id": "paper", - "versionRange": "^3.6.3", + "id": "paper2_scotland2", + "versionRange": "^4.6.1", "additionalData": {} }, { "id": "lapiz", - "versionRange": "^0.2.12", + "versionRange": "^0.2.17", "additionalData": {} }, { "id": "bsml", - "versionRange": "^0.4.43", + "versionRange": "^0.4.50", "additionalData": { "private": true } @@ -93,12 +93,12 @@ }, { "id": "beatsaverplusplus", - "versionRange": "^0.1.5", + "versionRange": "^0.2.1", "additionalData": {} }, { "id": "web-utils", - "versionRange": "^0.6.6", + "versionRange": "^0.6.7", "additionalData": {} } ] diff --git a/qpm.shared.json b/qpm.shared.json index 9358a49..9d49c37 100644 --- a/qpm.shared.json +++ b/qpm.shared.json @@ -6,7 +6,7 @@ "info": { "name": "MultiplayerCore", "id": "multiplayer-core", - "version": "1.6.0", + "version": "1.6.0+Dev", "url": "https://github.com/EnderdracheLP/MultiplayerCore.Quest", "additionalData": { "soLink": "https://github.com/EnderdracheLP/MultiplayerCore.Quest/releases/download/1.6.0/libMultiplayerCore.so", @@ -27,50 +27,50 @@ "dependencies": [ { "id": "libil2cpp", - "versionRange": "^0.3.0", + "versionRange": "^0.4.0", "additionalData": {} }, { "id": "beatsaber-hook", - "versionRange": "^5.1.9", + "versionRange": "^6.4.1", "additionalData": {} }, { "id": "bs-cordl", - "versionRange": "^3700.0.0", + "versionRange": "^4030.0.0", "additionalData": {} }, { "id": "custom-types", - "versionRange": "^0.17.10", + "versionRange": "^0.18.2", "additionalData": {} }, { "id": "songcore", - "versionRange": "^1.1.13", + "versionRange": "^1.1.19", "additionalData": {} }, { "id": "scotland2", - "versionRange": "^0.1.4", + "versionRange": "^0.1.6", "additionalData": { "includeQmod": false, "private": true } }, { - "id": "paper", - "versionRange": "^3.6.3", + "id": "paper2_scotland2", + "versionRange": "^4.6.1", "additionalData": {} }, { "id": "lapiz", - "versionRange": "^0.2.12", + "versionRange": "^0.2.17", "additionalData": {} }, { "id": "bsml", - "versionRange": "^0.4.43", + "versionRange": "^0.4.50", "additionalData": { "private": true } @@ -94,12 +94,12 @@ }, { "id": "beatsaverplusplus", - "versionRange": "^0.1.5", + "versionRange": "^0.2.1", "additionalData": {} }, { "id": "web-utils", - "versionRange": "^0.6.6", + "versionRange": "^0.6.7", "additionalData": {} } ] @@ -108,54 +108,59 @@ { "dependency": { "id": "web-utils", - "versionRange": "=0.6.6", + "versionRange": "=0.6.7", "additionalData": { - "soLink": "https://github.com/RedBrumbler/WebUtils/releases/download/v0.6.6/libweb-utils.so", - "debugSoLink": "https://github.com/RedBrumbler/WebUtils/releases/download/v0.6.6/debug_libweb-utils.so", + "soLink": "https://github.com/RedBrumbler/WebUtils/releases/download/v0.6.7/libweb-utils.so", + "debugSoLink": "https://github.com/RedBrumbler/WebUtils/releases/download/v0.6.7/debug_libweb-utils.so", "overrideSoName": "libweb-utils.so", - "modLink": "https://github.com/RedBrumbler/WebUtils/releases/download/v0.6.6/WebUtils.qmod", - "branchName": "version/v0_6_6", + "modLink": "https://github.com/RedBrumbler/WebUtils/releases/download/v0.6.7/WebUtils.qmod", + "branchName": "version/v0_6_7", "cmake": false } }, - "version": "0.6.6" + "version": "0.6.7" }, { "dependency": { - "id": "bsml", - "versionRange": "=0.4.43", + "id": "libil2cpp", + "versionRange": "=0.4.0", "additionalData": { - "soLink": "https://github.com/RedBrumbler/Quest-BSML/releases/download/v0.4.43/libbsml.so", - "debugSoLink": "https://github.com/RedBrumbler/Quest-BSML/releases/download/v0.4.43/debug_libbsml.so", - "overrideSoName": "libbsml.so", - "modLink": "https://github.com/RedBrumbler/Quest-BSML/releases/download/v0.4.43/BSML.qmod", - "branchName": "version/v0_4_43", - "cmake": true + "headersOnly": true, + "compileOptions": { + "systemIncludes": [ + "il2cpp/external/baselib/Include", + "il2cpp/external/baselib/Platforms/Android/Include" + ] + } } }, - "version": "0.4.43" + "version": "0.4.0" }, { "dependency": { - "id": "libil2cpp", - "versionRange": "=0.3.2", + "id": "bsml", + "versionRange": "=0.4.50", "additionalData": { - "headersOnly": true, - "cmake": false + "soLink": "https://github.com/bsq-ports/Quest-BSML/releases/download/v0.4.50/libbsml.so", + "debugSoLink": "https://github.com/bsq-ports/Quest-BSML/releases/download/v0.4.50/debug_libbsml.so", + "overrideSoName": "libbsml.so", + "modLink": "https://github.com/bsq-ports/Quest-BSML/releases/download/v0.4.50/BSML.qmod", + "branchName": "version/v0_4_50", + "cmake": true } }, - "version": "0.3.2" + "version": "0.4.50" }, { "dependency": { "id": "sombrero", - "versionRange": "=0.1.42", + "versionRange": "=0.1.43", "additionalData": { "headersOnly": true, - "branchName": "version/v0_1_42" + "branchName": "version/v0_1_43" } }, - "version": "0.1.42" + "version": "0.1.43" }, { "dependency": { @@ -172,17 +177,17 @@ { "dependency": { "id": "songcore", - "versionRange": "=1.1.14", + "versionRange": "=1.1.19", "additionalData": { - "soLink": "https://github.com/raineio/Quest-SongCore/releases/download/v1.1.14/libsongcore.so", - "debugSoLink": "https://github.com/raineio/Quest-SongCore/releases/download/v1.1.14/debug_libsongcore.so", + "soLink": "https://github.com/raineaeternal/Quest-SongCore/releases/download/v1.1.19/libsongcore.so", + "debugSoLink": "https://github.com/raineaeternal/Quest-SongCore/releases/download/v1.1.19/debug_libsongcore.so", "overrideSoName": "libsongcore.so", - "modLink": "https://github.com/raineio/Quest-SongCore/releases/download/v1.1.14/SongCore.qmod", - "branchName": "version/v1_1_14", + "modLink": "https://github.com/raineaeternal/Quest-SongCore/releases/download/v1.1.19/SongCore.qmod", + "branchName": "version/v1_1_19", "cmake": true } }, - "version": "1.1.14" + "version": "1.1.19" }, { "dependency": { @@ -218,14 +223,13 @@ }, { "dependency": { - "id": "paper", - "versionRange": "=3.6.4", + "id": "paper2_scotland2", + "versionRange": "=4.6.1", "additionalData": { - "soLink": "https://github.com/Fernthedev/paperlog/releases/download/v3.6.4/libpaperlog.so", - "debugSoLink": "https://github.com/Fernthedev/paperlog/releases/download/v3.6.4/debug_libpaperlog.so", - "overrideSoName": "libpaperlog.so", - "modLink": "https://github.com/Fernthedev/paperlog/releases/download/v3.6.4/paperlog.qmod", - "branchName": "version/v3_6_4", + "soLink": "https://github.com/Fernthedev/paperlog/releases/download/v4.6.1/libpaper2_scotland2.so", + "overrideSoName": "libpaper2_scotland2.so", + "modLink": "https://github.com/Fernthedev/paperlog/releases/download/v4.6.1/paper2_scotland2.qmod", + "branchName": "version/v4_6_1", "compileOptions": { "systemIncludes": [ "shared/utfcpp/source" @@ -234,18 +238,18 @@ "cmake": false } }, - "version": "3.6.4" + "version": "4.6.1" }, { "dependency": { "id": "custom-types", - "versionRange": "=0.17.10", + "versionRange": "=0.18.2", "additionalData": { - "soLink": "https://github.com/QuestPackageManager/Il2CppQuestTypePatching/releases/download/v0.17.10/libcustom-types.so", - "debugSoLink": "https://github.com/QuestPackageManager/Il2CppQuestTypePatching/releases/download/v0.17.10/debug_libcustom-types.so", + "soLink": "https://github.com/QuestPackageManager/Il2CppQuestTypePatching/releases/download/v0.18.2/libcustom-types.so", + "debugSoLink": "https://github.com/QuestPackageManager/Il2CppQuestTypePatching/releases/download/v0.18.2/debug_libcustom-types.so", "overrideSoName": "libcustom-types.so", - "modLink": "https://github.com/QuestPackageManager/Il2CppQuestTypePatching/releases/download/v0.17.10/CustomTypes.qmod", - "branchName": "version/v0_17_10", + "modLink": "https://github.com/QuestPackageManager/Il2CppQuestTypePatching/releases/download/v0.18.2/CustomTypes.qmod", + "branchName": "version/v0_18_2", "compileOptions": { "cppFlags": [ "-Wno-invalid-offsetof" @@ -254,15 +258,15 @@ "cmake": true } }, - "version": "0.17.10" + "version": "0.18.2" }, { "dependency": { "id": "bs-cordl", - "versionRange": "=3700.0.0", + "versionRange": "=4030.0.0", "additionalData": { "headersOnly": true, - "branchName": "version/v3700_0_0", + "branchName": "version/v4030_0_0", "compileOptions": { "includePaths": [ "include" @@ -272,12 +276,13 @@ "-DNEED_UNSAFE_CSHARP", "-fdeclspec", "-DUNITY_2021", - "-DHAS_CODEGEN" + "-DHAS_CODEGEN", + "-Wno-invalid-offsetof" ] } } }, - "version": "3700.0.0" + "version": "4030.0.0" }, { "dependency": { @@ -293,66 +298,68 @@ { "dependency": { "id": "beatsaber-hook", - "versionRange": "=5.1.9", + "versionRange": "=6.4.1", "additionalData": { - "soLink": "https://github.com/QuestPackageManager/beatsaber-hook/releases/download/v5.1.9/libbeatsaber-hook_5_1_9.so", - "debugSoLink": "https://github.com/QuestPackageManager/beatsaber-hook/releases/download/v5.1.9/debug_libbeatsaber-hook_5_1_9.so", - "branchName": "version/v5_1_9", + "soLink": "https://github.com/QuestPackageManager/beatsaber-hook/releases/download/v6.4.1/libbeatsaber-hook.so", + "debugSoLink": "https://github.com/QuestPackageManager/beatsaber-hook/releases/download/v6.4.1/debug_libbeatsaber-hook.so", + "overrideSoName": "libbeatsaber-hook.so", + "modLink": "https://github.com/QuestPackageManager/beatsaber-hook/releases/download/v6.4.1/beatsaber-hook.qmod", + "branchName": "version/v6_4_1", "cmake": true } }, - "version": "5.1.9" + "version": "6.4.1" }, { "dependency": { "id": "lapiz", - "versionRange": "=0.2.12", + "versionRange": "=0.2.17", "additionalData": { - "soLink": "https://github.com/raineio/Lapiz/releases/download/v0.2.12/liblapiz.so", - "debugSoLink": "https://github.com/raineio/Lapiz/releases/download/v0.2.12/debug_liblapiz.so", + "soLink": "https://github.com/raineaeternal/Lapiz/releases/download/v0.2.17/liblapiz.so", + "debugSoLink": "https://github.com/raineaeternal/Lapiz/releases/download/v0.2.17/debug_liblapiz.so", "overrideSoName": "liblapiz.so", - "modLink": "https://github.com/raineio/Lapiz/releases/download/v0.2.12/Lapiz.qmod", - "branchName": "version/v0_2_12", + "modLink": "https://github.com/raineaeternal/Lapiz/releases/download/v0.2.17/Lapiz.qmod", + "branchName": "version/v0_2_17", "cmake": true } }, - "version": "0.2.12" + "version": "0.2.17" }, { "dependency": { "id": "scotland2", - "versionRange": "=0.1.4", + "versionRange": "=0.1.6", "additionalData": { - "soLink": "https://github.com/sc2ad/scotland2/releases/download/v0.1.4/libsl2.so", - "debugSoLink": "https://github.com/sc2ad/scotland2/releases/download/v0.1.4/debug_libsl2.so", + "soLink": "https://github.com/sc2ad/scotland2/releases/download/v0.1.6/libsl2.so", + "debugSoLink": "https://github.com/sc2ad/scotland2/releases/download/v0.1.6/debug_libsl2.so", "overrideSoName": "libsl2.so", - "branchName": "version/v0_1_4" + "branchName": "version/v0_1_6" } }, - "version": "0.1.4" + "version": "0.1.6" }, { "dependency": { "id": "beatsaverplusplus", - "versionRange": "=0.1.5", + "versionRange": "=0.2.1", "additionalData": { - "soLink": "https://github.com/RedBrumbler/BeatSaverPlusPlus/releases/download/v0.1.5/libbeatsaverplusplus.so", - "debugSoLink": "https://github.com/RedBrumbler/BeatSaverPlusPlus/releases/download/v0.1.5/debug_libbeatsaverplusplus.so", + "soLink": "https://github.com/bsq-ports/BeatSaverPlusPlus/releases/download/v0.2.1/libbeatsaverplusplus.so", + "debugSoLink": "https://github.com/bsq-ports/BeatSaverPlusPlus/releases/download/v0.2.1/debug_libbeatsaverplusplus.so", "overrideSoName": "libbeatsaverplusplus.so", - "modLink": "https://github.com/RedBrumbler/BeatSaverPlusPlus/releases/download/v0.1.5/BeatSaverPlusPlus.qmod", - "branchName": "version/v0_1_5", + "modLink": "https://github.com/bsq-ports/BeatSaverPlusPlus/releases/download/v0.2.1/BeatSaverPlusPlus.qmod", + "branchName": "version/v0_2_1", "cmake": false } }, - "version": "0.1.5" + "version": "0.2.1" }, { "dependency": { "id": "fmt", - "versionRange": "=10.0.0", + "versionRange": "=11.0.2", "additionalData": { "headersOnly": true, - "branchName": "version/v10_0_0", + "branchName": "version/v11_0_2", "compileOptions": { "systemIncludes": [ "fmt/include/" @@ -363,7 +370,7 @@ } } }, - "version": "10.0.0" + "version": "11.0.2" } ] } \ No newline at end of file diff --git a/shared/Beatmaps/Abstractions/MpBeatmapLevel.hpp b/shared/Beatmaps/Abstractions/MpBeatmapLevel.hpp index 200c24d..2b1fd3f 100644 --- a/shared/Beatmaps/Abstractions/MpBeatmapLevel.hpp +++ b/shared/Beatmaps/Abstractions/MpBeatmapLevel.hpp @@ -10,7 +10,7 @@ #include "System/Threading/Tasks/Task_1.hpp" #include "System/Threading/CancellationToken.hpp" -DECLARE_CLASS_CODEGEN(MultiplayerCore::Beatmaps::Abstractions, MpBeatmapLevel, GlobalNamespace::BeatmapLevel, +DECLARE_CLASS_CODEGEN(MultiplayerCore::Beatmaps::Abstractions, MpBeatmapLevel, GlobalNamespace::BeatmapLevel) { DECLARE_INSTANCE_FIELD_PRIVATE(StringW, levelHash); public: std::string_view get_levelHash() const { return _levelHash; } @@ -23,4 +23,4 @@ DECLARE_CLASS_CODEGEN(MultiplayerCore::Beatmaps::Abstractions, MpBeatmapLevel, G protected: std::string _levelHash; void set_levelHash(std::string_view levelHash) { _levelHash = levelHash; } -) +}; diff --git a/shared/Beatmaps/BeatSaverBeatmapLevel.hpp b/shared/Beatmaps/BeatSaverBeatmapLevel.hpp index d67e0ec..3539bfe 100644 --- a/shared/Beatmaps/BeatSaverBeatmapLevel.hpp +++ b/shared/Beatmaps/BeatSaverBeatmapLevel.hpp @@ -3,10 +3,10 @@ #include "Abstractions/MpBeatmapLevel.hpp" #include "beatsaverplusplus/shared/Models/Beatmap.hpp" -DECLARE_CLASS_CUSTOM(MultiplayerCore::Beatmaps, BeatSaverBeatmapLevel, Abstractions::MpBeatmapLevel, +DECLARE_CLASS_CUSTOM(MultiplayerCore::Beatmaps, BeatSaverBeatmapLevel, Abstractions::MpBeatmapLevel) { DECLARE_CTOR(ctor_1, StringW hash); public: static BeatSaverBeatmapLevel* Make(const std::string& hash, const BeatSaver::Models::Beatmap& beatmap); protected: BeatSaver::Models::Beatmap beatmap; -) +}; diff --git a/shared/Beatmaps/BeatSaverPreviewMediaData.hpp b/shared/Beatmaps/BeatSaverPreviewMediaData.hpp index 6c10f17..b3e028d 100644 --- a/shared/Beatmaps/BeatSaverPreviewMediaData.hpp +++ b/shared/Beatmaps/BeatSaverPreviewMediaData.hpp @@ -8,7 +8,7 @@ #include "UnityEngine/AudioClip.hpp" #include "Packets/MpBeatmapPacket.hpp" -DECLARE_CLASS_CODEGEN_INTERFACES(MultiplayerCore::Beatmaps, BeatSaverPreviewMediaData, System::Object, classof(GlobalNamespace::IPreviewMediaData*), +DECLARE_CLASS_CODEGEN_INTERFACES(MultiplayerCore::Beatmaps, BeatSaverPreviewMediaData, System::Object, GlobalNamespace::IPreviewMediaData*) { DECLARE_CTOR(ctor, StringW levelHash); DECLARE_INSTANCE_FIELD_PRIVATE(UnityEngine::Sprite*, _cachedCoverImage); @@ -25,4 +25,4 @@ DECLARE_CLASS_CODEGEN_INTERFACES(MultiplayerCore::Beatmaps, BeatSaverPreviewMedi GlobalNamespace::IPreviewMediaData* i_IPreviewMediaData() noexcept { return reinterpret_cast(this); } private: std::string _levelHash; -) +}; diff --git a/shared/Beatmaps/LocalBeatmapLevel.hpp b/shared/Beatmaps/LocalBeatmapLevel.hpp index 0d4866a..d454a99 100644 --- a/shared/Beatmaps/LocalBeatmapLevel.hpp +++ b/shared/Beatmaps/LocalBeatmapLevel.hpp @@ -2,8 +2,8 @@ #include "Abstractions/MpBeatmapLevel.hpp" -DECLARE_CLASS_CUSTOM(MultiplayerCore::Beatmaps, LocalBeatmapLevel, Abstractions::MpBeatmapLevel, +DECLARE_CLASS_CUSTOM(MultiplayerCore::Beatmaps, LocalBeatmapLevel, Abstractions::MpBeatmapLevel) { DECLARE_INSTANCE_FIELD_PRIVATE(GlobalNamespace::BeatmapLevel*, _localLevel); DECLARE_CTOR(ctor_2, StringW hash, GlobalNamespace::BeatmapLevel* localLevel); -) +}; diff --git a/shared/Beatmaps/NetworkBeatmapLevel.hpp b/shared/Beatmaps/NetworkBeatmapLevel.hpp index 457d97a..74dbf11 100644 --- a/shared/Beatmaps/NetworkBeatmapLevel.hpp +++ b/shared/Beatmaps/NetworkBeatmapLevel.hpp @@ -4,7 +4,7 @@ #include "Packets/MpBeatmapPacket.hpp" #include "beatsaverplusplus/shared/Models/Beatmap.hpp" -DECLARE_CLASS_CUSTOM(MultiplayerCore::Beatmaps, NetworkBeatmapLevel, Abstractions::MpBeatmapLevel, +DECLARE_CLASS_CUSTOM(MultiplayerCore::Beatmaps, NetworkBeatmapLevel, Abstractions::MpBeatmapLevel) { DECLARE_INSTANCE_FIELD_PRIVATE(Packets::MpBeatmapPacket*, _packet); DECLARE_CTOR(ctor_1, Packets::MpBeatmapPacket*); @@ -13,6 +13,6 @@ DECLARE_CLASS_CUSTOM(MultiplayerCore::Beatmaps, NetworkBeatmapLevel, Abstraction const std::unordered_map>& get_requirements() { return _packet->requirements; }; const std::unordered_map& get_mapColors() { return _packet->mapColors; }; const std::vector& get_contributors() { return _packet->contributors; }; -) +}; #undef SONGDOWNLOADER_INCLUDED diff --git a/shared/Beatmaps/NoInfoBeatmapLevel.hpp b/shared/Beatmaps/NoInfoBeatmapLevel.hpp index 9daf45c..fdbdbbb 100644 --- a/shared/Beatmaps/NoInfoBeatmapLevel.hpp +++ b/shared/Beatmaps/NoInfoBeatmapLevel.hpp @@ -2,6 +2,6 @@ #include "Abstractions/MpBeatmapLevel.hpp" -DECLARE_CLASS_CUSTOM(MultiplayerCore::Beatmaps, NoInfoBeatmapLevel, Abstractions::MpBeatmapLevel, +DECLARE_CLASS_CUSTOM(MultiplayerCore::Beatmaps, NoInfoBeatmapLevel, Abstractions::MpBeatmapLevel) { DECLARE_CTOR(ctor_1, StringW hash); -) +}; diff --git a/shared/Beatmaps/Packets/MpBeatmapPacket.hpp b/shared/Beatmaps/Packets/MpBeatmapPacket.hpp index 10e3ed2..785e0a6 100644 --- a/shared/Beatmaps/Packets/MpBeatmapPacket.hpp +++ b/shared/Beatmaps/Packets/MpBeatmapPacket.hpp @@ -9,7 +9,7 @@ #include "GlobalNamespace/BeatmapKey.hpp" #include -DECLARE_CLASS_CUSTOM(MultiplayerCore::Beatmaps::Packets, MpBeatmapPacket, MultiplayerCore::Networking::Abstractions::MpPacket, +DECLARE_CLASS_CUSTOM(MultiplayerCore::Beatmaps::Packets, MpBeatmapPacket, MultiplayerCore::Networking::Abstractions::MpPacket) { DECLARE_INSTANCE_FIELD(StringW, levelHash); DECLARE_INSTANCE_FIELD(StringW, songName); DECLARE_INSTANCE_FIELD(StringW, songSubName); @@ -30,4 +30,4 @@ DECLARE_CLASS_CUSTOM(MultiplayerCore::Beatmaps::Packets, MpBeatmapPacket, Multip std::unordered_map> requirements; std::unordered_map mapColors; std::vector contributors; -) +}; diff --git a/shared/Beatmaps/Providers/MpBeatmapLevelProvider.hpp b/shared/Beatmaps/Providers/MpBeatmapLevelProvider.hpp index 5e8f8bf..4e4a518 100644 --- a/shared/Beatmaps/Providers/MpBeatmapLevelProvider.hpp +++ b/shared/Beatmaps/Providers/MpBeatmapLevelProvider.hpp @@ -9,21 +9,21 @@ #include "../Packets/MpBeatmapPacket.hpp" #include -DECLARE_CLASS_CODEGEN(MultiplayerCore::Beatmaps::Providers, MpBeatmapLevelProvider, System::Object, - using HashToLevelDict = System::Collections::Generic::Dictionary_2; - DECLARE_INSTANCE_FIELD_PRIVATE(HashToLevelDict*, _hashToNetworkLevels); - DECLARE_INSTANCE_FIELD_PRIVATE(HashToLevelDict*, _hashToBeatsaverLevels); - DECLARE_CTOR(ctor); +DECLARE_CLASS_CODEGEN(MultiplayerCore::Beatmaps::Providers, MpBeatmapLevelProvider, System::Object) { + using HashToLevelDict = System::Collections::Generic::Dictionary_2; + DECLARE_INSTANCE_FIELD_PRIVATE(HashToLevelDict*, _hashToNetworkLevels); + DECLARE_INSTANCE_FIELD_PRIVATE(HashToLevelDict*, _hashToBeatsaverLevels); + DECLARE_CTOR(ctor); - public: - std::future GetBeatmapAsync(const std::string& levelHash); - std::future GetBeatmapFromBeatSaverAsync(const std::string& levelHash); +public: + std::future GetBeatmapAsync(const std::string& levelHash); + std::future GetBeatmapFromBeatSaverAsync(const std::string& levelHash); - GlobalNamespace::BeatmapLevel* GetBeatmapFromLocalBeatmaps(const std::string& levelHash); - GlobalNamespace::BeatmapLevel* GetBeatmapFromPacket(Packets::MpBeatmapPacket* packet); - GlobalNamespace::BeatmapLevel* GetBeatmapFromBeatSaver(std::string levelHash); + GlobalNamespace::BeatmapLevel* GetBeatmapFromLocalBeatmaps(const std::string& levelHash); + GlobalNamespace::BeatmapLevel* GetBeatmapFromPacket(Packets::MpBeatmapPacket* packet); + GlobalNamespace::BeatmapLevel* GetBeatmapFromBeatSaver(std::string levelHash); - GlobalNamespace::BeatmapLevel* TryGetBeatmapFromPacketHash(std::string levelHash); + GlobalNamespace::BeatmapLevel* TryGetBeatmapFromPacketHash(std::string levelHash); - GlobalNamespace::BeatmapLevel* AddBasicBeatmapDataToLevel(GlobalNamespace::BeatmapLevel* level, GlobalNamespace::BeatmapKey& beatmapKey, Packets::MpBeatmapPacket* packet = nullptr); -) + GlobalNamespace::BeatmapLevel* AddBasicBeatmapDataToLevel(GlobalNamespace::BeatmapLevel* level, GlobalNamespace::BeatmapKey& beatmapKey, Packets::MpBeatmapPacket* packet = nullptr); +}; diff --git a/shared/Models/MpStatusData.hpp b/shared/Models/MpStatusData.hpp index 75262da..71d3344 100644 --- a/shared/Models/MpStatusData.hpp +++ b/shared/Models/MpStatusData.hpp @@ -3,7 +3,7 @@ #include "custom-types/shared/macros.hpp" #include "GlobalNamespace/MultiplayerStatusData.hpp" -DECLARE_CLASS_CODEGEN(MultiplayerCore::Models, MpStatusData, GlobalNamespace::MultiplayerStatusData, +DECLARE_CLASS_CODEGEN(MultiplayerCore::Models, MpStatusData, GlobalNamespace::MultiplayerStatusData) { DECLARE_CTOR(New, StringW json); DECLARE_INSTANCE_FIELD(StringW, maximumAppVersion); public: @@ -49,4 +49,4 @@ DECLARE_CLASS_CODEGEN(MultiplayerCore::Models, MpStatusData, GlobalNamespace::Mu bool _supportsPPModifiers; bool _supportsPPDifficulties; bool _supportsPPMaps; -) +}; diff --git a/shared/Networking/Abstractions/MpPacket.hpp b/shared/Networking/Abstractions/MpPacket.hpp index e426ae9..e322bd8 100644 --- a/shared/Networking/Abstractions/MpPacket.hpp +++ b/shared/Networking/Abstractions/MpPacket.hpp @@ -5,15 +5,14 @@ #include "LiteNetLib/Utils/NetDataWriter.hpp" #include "LiteNetLib/Utils/INetSerializable.hpp" -DECLARE_CLASS_CODEGEN_INTERFACES(MultiplayerCore::Networking::Abstractions, MpPacket, System::Object, classof(LiteNetLib::Utils::INetSerializable*), - +DECLARE_CLASS_CODEGEN_INTERFACES(MultiplayerCore::Networking::Abstractions, MpPacket, System::Object, LiteNetLib::Utils::INetSerializable*) { DECLARE_OVERRIDE_METHOD_MATCH(void, Serialize, &LiteNetLib::Utils::INetSerializable::Serialize, LiteNetLib::Utils::NetDataWriter* writer); DECLARE_OVERRIDE_METHOD_MATCH(void, Deserialize, &LiteNetLib::Utils::INetSerializable::Deserialize, LiteNetLib::Utils::NetDataReader* reader); DECLARE_DEFAULT_CTOR(); public: [[nodiscard]] LiteNetLib::Utils::INetSerializable* i_INetSerializable() { return reinterpret_cast(this); } -) +}; #include "beatsaber-hook/shared/utils/il2cpp-utils-methods.hpp" template<> diff --git a/shared/Networking/MpPacketSerializer.hpp b/shared/Networking/MpPacketSerializer.hpp index fa591f9..5dd2cdf 100644 --- a/shared/Networking/MpPacketSerializer.hpp +++ b/shared/Networking/MpPacketSerializer.hpp @@ -71,8 +71,8 @@ struct ::il2cpp_utils::il2cpp_type_check::MetadataGetter({classof(GlobalNamespace::INetworkPacketSubSerializer_1*), classof(::Zenject::IInitializable*), classof(System::IDisposable*)}), - + GlobalNamespace::INetworkPacketSubSerializer_1*, ::Zenject::IInitializable*, System::IDisposable*) { + DECLARE_OVERRIDE_METHOD_MATCH(void, Initialize, &::Zenject::IInitializable::Initialize); DECLARE_OVERRIDE_METHOD_MATCH(void, Dispose, &::System::IDisposable::Dispose); DECLARE_OVERRIDE_METHOD_MATCH(void, Serialize, &GlobalNamespace::INetworkPacketSubSerializer_1::Serialize, LiteNetLib::Utils::NetDataWriter* writer, LiteNetLib::Utils::INetSerializable* packet); @@ -202,4 +202,5 @@ DECLARE_CLASS_CODEGEN_INTERFACES(MultiplayerCore::Networking, MpPacketSerializer private: std::list registeredTypes; std::map packetHandlers; -) + +}; diff --git a/shared/Objects/MpEntitlementChecker.hpp b/shared/Objects/MpEntitlementChecker.hpp index 8e39488..0f6bdec 100644 --- a/shared/Objects/MpEntitlementChecker.hpp +++ b/shared/Objects/MpEntitlementChecker.hpp @@ -15,7 +15,7 @@ using EntitlementsStatusTask = ::System::Threading::Tasks::Task_1<::GlobalNamespace::EntitlementsStatus>; -DECLARE_CLASS_CODEGEN(MultiplayerCore::Objects, MpEntitlementChecker, GlobalNamespace::NetworkPlayerEntitlementChecker, +DECLARE_CLASS_CODEGEN(MultiplayerCore::Objects, MpEntitlementChecker, GlobalNamespace::NetworkPlayerEntitlementChecker) { DECLARE_INSTANCE_FIELD_PRIVATE(GlobalNamespace::IMultiplayerSessionManager*, _sessionManager); DECLARE_INJECT_METHOD(void, Inject, GlobalNamespace::IMultiplayerSessionManager* sessionManager); @@ -36,4 +36,4 @@ DECLARE_CLASS_CODEGEN(MultiplayerCore::Objects, MpEntitlementChecker, GlobalName GlobalNamespace::EntitlementsStatus GetEntitlementStatus(std::string_view levelHash); std::unordered_map> _entitlementsDictionary; std::unordered_map> _entitlementsTasks; -) +}; diff --git a/shared/Objects/MpLevelDownloader.hpp b/shared/Objects/MpLevelDownloader.hpp index 7163954..9a8f443 100644 --- a/shared/Objects/MpLevelDownloader.hpp +++ b/shared/Objects/MpLevelDownloader.hpp @@ -6,11 +6,11 @@ #include #include -DECLARE_CLASS_CODEGEN(MultiplayerCore::Objects, MpLevelDownloader, System::Object, +DECLARE_CLASS_CODEGEN(MultiplayerCore::Objects, MpLevelDownloader, System::Object) { DECLARE_CTOR(ctor); public: std::shared_future TryDownloadLevelAsync(std::string levelId, std::function progress = nullptr); private: std::unordered_map> downloads; bool TryDownloadLevelInternal(std::string levelId, std::function progress = nullptr); -) +}; diff --git a/shared/Objects/MpLevelLoader.hpp b/shared/Objects/MpLevelLoader.hpp index 0ea149c..4b91741 100644 --- a/shared/Objects/MpLevelLoader.hpp +++ b/shared/Objects/MpLevelLoader.hpp @@ -17,7 +17,7 @@ #include "Zenject/ITickable.hpp" #include -DECLARE_CLASS_CODEGEN(MultiplayerCore::Objects, MpLevelLoader, GlobalNamespace::MultiplayerLevelLoader, +DECLARE_CLASS_CODEGEN(MultiplayerCore::Objects, MpLevelLoader, GlobalNamespace::MultiplayerLevelLoader) { DECLARE_INSTANCE_FIELD_PRIVATE(SongCore::SongLoader::RuntimeSongLoader*, _runtimeSongLoader); DECLARE_INSTANCE_FIELD_PRIVATE(SongCore::Capabilities*, _capabilities); DECLARE_INSTANCE_FIELD_PRIVATE(GlobalNamespace::IMultiplayerSessionManager*, _sessionManager); @@ -35,4 +35,4 @@ DECLARE_CLASS_CODEGEN(MultiplayerCore::Objects, MpLevelLoader, GlobalNamespace:: private: void UnloadLevelIfRequirementsNotMet(); void Report(double progress); -) +}; diff --git a/shared/Players/MpPlayerData.hpp b/shared/Players/MpPlayerData.hpp index 9d0aed8..0319308 100644 --- a/shared/Players/MpPlayerData.hpp +++ b/shared/Players/MpPlayerData.hpp @@ -28,7 +28,7 @@ struct ::il2cpp_utils::il2cpp_type_check::il2cpp_no_arg_class; -DECLARE_CLASS_CODEGEN_INTERFACES(MultiplayerCore::Players, MpPlayerManager, System::Object, std::vector({classof(::Zenject::IInitializable*), classof(::System::IDisposable*)}), +DECLARE_CLASS_CODEGEN_INTERFACES(MultiplayerCore::Players, MpPlayerManager, System::Object, ::Zenject::IInitializable*, ::System::IDisposable*) { DECLARE_INSTANCE_FIELD_PRIVATE(MultiplayerCore::Networking::MpPacketSerializer*, _packetSerializer); DECLARE_INSTANCE_FIELD_PRIVATE(GlobalNamespace::IPlatformUserModel*, _platformUserModel); DECLARE_INSTANCE_FIELD_PRIVATE(GlobalNamespace::IMultiplayerSessionManager*, _sessionManager); @@ -35,4 +35,4 @@ DECLARE_CLASS_CODEGEN_INTERFACES(MultiplayerCore::Players, MpPlayerManager, Syst UnorderedEventCallback PlayerConnectedEvent; custom_types::Helpers::Coroutine AwaitUser(); -) +}; \ No newline at end of file diff --git a/shared/Players/Packets/GetMpPerPlayerPacket.hpp b/shared/Players/Packets/GetMpPerPlayerPacket.hpp index ce28bab..7416fdf 100644 --- a/shared/Players/Packets/GetMpPerPlayerPacket.hpp +++ b/shared/Players/Packets/GetMpPerPlayerPacket.hpp @@ -2,6 +2,7 @@ #include "custom-types/shared/macros.hpp" -DECLARE_CLASS_CUSTOM(MultiplayerCore::Players::Packets, GetMpPerPlayerPacket, MultiplayerCore::Networking::Abstractions::MpPacket, - DECLARE_DEFAULT_CTOR(); -) +DECLARE_CLASS_CUSTOM(MultiplayerCore::Players::Packets, GetMpPerPlayerPacket, MultiplayerCore::Networking::Abstractions::MpPacket) { + public: + DECLARE_DEFAULT_CTOR(); +}; diff --git a/shared/Players/Packets/MpPerPlayerPacket.hpp b/shared/Players/Packets/MpPerPlayerPacket.hpp index a349fb8..bb0cc86 100644 --- a/shared/Players/Packets/MpPerPlayerPacket.hpp +++ b/shared/Players/Packets/MpPerPlayerPacket.hpp @@ -2,7 +2,7 @@ #include "custom-types/shared/macros.hpp" -DECLARE_CLASS_CUSTOM(MultiplayerCore::Players::Packets, MpPerPlayerPacket, MultiplayerCore::Networking::Abstractions::MpPacket, +DECLARE_CLASS_CUSTOM(MultiplayerCore::Players::Packets, MpPerPlayerPacket, MultiplayerCore::Networking::Abstractions::MpPacket) { DECLARE_INSTANCE_FIELD(bool, PPDEnabled); DECLARE_INSTANCE_FIELD(bool, PPMEnabled); @@ -10,4 +10,4 @@ DECLARE_CLASS_CUSTOM(MultiplayerCore::Players::Packets, MpPerPlayerPacket, Multi DECLARE_OVERRIDE_METHOD_MATCH(void, Deserialize, &LiteNetLib::Utils::INetSerializable::Deserialize, LiteNetLib::Utils::NetDataReader* reader); public: DECLARE_DEFAULT_CTOR(); -) +}; diff --git a/shared/Repositories/MpStatusRepository.hpp b/shared/Repositories/MpStatusRepository.hpp index 8c5b6dd..343a394 100644 --- a/shared/Repositories/MpStatusRepository.hpp +++ b/shared/Repositories/MpStatusRepository.hpp @@ -10,7 +10,7 @@ using MpStatusDictionary = System::Collections::Generic::Dictionary_2; -DECLARE_CLASS_CODEGEN(MultiplayerCore::Repositories, MpStatusRepository, Il2CppObject, +DECLARE_CLASS_CODEGEN(MultiplayerCore::Repositories, MpStatusRepository, System::Object) { DECLARE_CTOR(New, GlobalNamespace::INetworkConfig* networkConfig); DECLARE_INSTANCE_FIELD(MpStatusDictionary*, _statusByUrl); @@ -29,4 +29,4 @@ DECLARE_CLASS_CODEGEN(MultiplayerCore::Repositories, MpStatusRepository, Il2CppO private: static MpStatusRepository* _instance; -) \ No newline at end of file +}; \ No newline at end of file diff --git a/src/Beatmaps/BeatSaverPreviewMediaData.cpp b/src/Beatmaps/BeatSaverPreviewMediaData.cpp index f0c9341..baca741 100644 --- a/src/Beatmaps/BeatSaverPreviewMediaData.cpp +++ b/src/Beatmaps/BeatSaverPreviewMediaData.cpp @@ -44,7 +44,7 @@ namespace MultiplayerCore::Beatmaps { auto coverOpt = v->GetCoverImage(); if (coverOpt.has_value()) { - auto coverBytes = il2cpp_utils::vectorToArray(coverOpt.value()); + auto coverBytes = ArrayW(coverOpt.value()); std::atomic result = nullptr; BSML::MainThreadScheduler::Schedule([coverBytes, &result](){ diff --git a/src/Beatmaps/LocalBeatmapLevel.cpp b/src/Beatmaps/LocalBeatmapLevel.cpp index 606f246..8eb2386 100644 --- a/src/Beatmaps/LocalBeatmapLevel.cpp +++ b/src/Beatmaps/LocalBeatmapLevel.cpp @@ -30,7 +30,7 @@ namespace MultiplayerCore::Beatmaps { localLevel->songDuration, localLevel->contentRating, localLevel->previewMediaData, - localLevel->beatmapBasicData + localLevel->____beatmapBasicDatas // Use private field to avoid conversion problems ); _localLevel = localLevel; diff --git a/src/Beatmaps/NoInfoBeatmapLevel.cpp b/src/Beatmaps/NoInfoBeatmapLevel.cpp index f77163e..6698998 100644 --- a/src/Beatmaps/NoInfoBeatmapLevel.cpp +++ b/src/Beatmaps/NoInfoBeatmapLevel.cpp @@ -30,7 +30,7 @@ namespace MultiplayerCore::Beatmaps { 0, GlobalNamespace::PlayerSensitivityFlag::Safe, BeatSaverPreviewMediaData::New_ctor(hash)->i_IPreviewMediaData(), - System::Collections::Generic::Dictionary_2, GlobalNamespace::BeatmapDifficulty>, GlobalNamespace::BeatmapBasicData*>::New_ctor()->i___System__Collections__Generic__IReadOnlyDictionary_2_TKey_TValue_() + System::Collections::Generic::Dictionary_2, GlobalNamespace::BeatmapDifficulty>, GlobalNamespace::BeatmapBasicData*>::New_ctor() ); } } diff --git a/src/Beatmaps/Providers/MpBeatmapLevelProvider.cpp b/src/Beatmaps/Providers/MpBeatmapLevelProvider.cpp index 180d9b7..1584e4e 100644 --- a/src/Beatmaps/Providers/MpBeatmapLevelProvider.cpp +++ b/src/Beatmaps/Providers/MpBeatmapLevelProvider.cpp @@ -102,7 +102,7 @@ namespace MultiplayerCore::Beatmaps::Providers { if (!dict) { dict = BasicDataDict::New_ctor(); - level->beatmapBasicData = dict->i___System__Collections__Generic__IReadOnlyDictionary_2_TKey_TValue_(); + level->____beatmapBasicDatas = dict; } auto key = System::ValueTuple_2, GlobalNamespace::BeatmapDifficulty>( @@ -116,14 +116,14 @@ namespace MultiplayerCore::Beatmaps::Providers { key, GlobalNamespace::BeatmapBasicData::New_ctor( 0, 0, GlobalNamespace::EnvironmentName::getStaticF_Empty(), - nullptr, 0, 0, 0, + nullptr, 0, 0, 0, 0, (level->allMappers.size() > 0 ? level->allMappers : std::initializer_list{packet ? packet->levelAuthorName : ""}), level->allLighters ) ); } - level->beatmapBasicData = dict->i___System__Collections__Generic__IReadOnlyDictionary_2_TKey_TValue_(); + level->____beatmapBasicDatas = dict; return level; } } diff --git a/src/Hooks/ProvideBeatsaverLevelHooks.cpp b/src/Hooks/ProvideBeatsaverLevelHooks.cpp index b8b2319..35b526e 100644 --- a/src/Hooks/ProvideBeatsaverLevelHooks.cpp +++ b/src/Hooks/ProvideBeatsaverLevelHooks.cpp @@ -9,41 +9,47 @@ #include "GlobalNamespace/BeatmapLevelsModel.hpp" #include "GlobalNamespace/LoadBeatmapLevelDataResult.hpp" -MAKE_AUTO_HOOK_MATCH(BeatmapLevelsModel_CheckBeatmapLevelDataExistsAsync, &GlobalNamespace::BeatmapLevelsModel::CheckBeatmapLevelDataExistsAsync, System::Threading::Tasks::Task_1*, GlobalNamespace::BeatmapLevelsModel* self, StringW levelID, System::Threading::CancellationToken cancelToken) { - auto t = BeatmapLevelsModel_CheckBeatmapLevelDataExistsAsync(self, levelID, cancelToken); - // check for levelhash -> no hash means base game, return orig - auto levelHash = MultiplayerCore::HashFromLevelID(levelID); - if (levelHash.empty()) return t; - - // check if locally available, if so return orig - if (SongCore::API::Loading::GetLevelByHash(levelHash)) return t; - - // custom level, not locally available, get on beatsaver - return MultiplayerCore::StartTask([=](){ - using namespace std::chrono_literals; - while (!(t->IsCompleted || t->IsCanceled)) std::this_thread::sleep_for(50ms); - // if orig says it's available, cool beans - if (t->Result) return true; - - // check if map is on beatsaver - auto beatmapRes = BeatSaver::API::GetBeatmapByHash(levelHash); - if (beatmapRes.DataParsedSuccessful()) { - for (auto& v : beatmapRes.responseData->GetVersions()) { - if (v.GetHash() == levelHash) { - bool downloaded = false; - v.DownloadBeatmapAsync(*beatmapRes.responseData, [&downloaded](bool v){ - downloaded = true; - }); - while (!downloaded) std::this_thread::sleep_for(50ms); - - SongCore::API::Loading::RefreshSongs().wait(); - - auto level = SongCore::API::Loading::GetLevelByHash(levelHash); - if (level) return true; - break; +MAKE_AUTO_HOOK_MATCH(BeatmapLevelsModel_CheckBeatmapLevelDataExistsAsync, &GlobalNamespace::BeatmapLevelsModel::CheckBeatmapLevelDataExistsAsync, + System::Threading::Tasks::Task_1*, + GlobalNamespace::BeatmapLevelsModel* self, + ::StringW levelID, + ::GlobalNamespace::BeatmapLevelDataVersion beatmapLevelDataVersion, + ::System::Threading::CancellationToken cancelToken) { + + auto t = BeatmapLevelsModel_CheckBeatmapLevelDataExistsAsync(self, levelID, beatmapLevelDataVersion, cancelToken); + // check for levelhash -> no hash means base game, return orig + auto levelHash = MultiplayerCore::HashFromLevelID(levelID); + if (levelHash.empty()) return t; + + // check if locally available, if so return orig + if (SongCore::API::Loading::GetLevelByHash(levelHash)) return t; + + // custom level, not locally available, get on beatsaver + return MultiplayerCore::StartTask([=](){ + using namespace std::chrono_literals; + while (!(t->IsCompleted || t->IsCanceled)) std::this_thread::sleep_for(50ms); + // if orig says it's available, cool beans + if (t->Result) return true; + + // check if map is on beatsaver + auto beatmapRes = BeatSaver::API::GetBeatmapByHash(levelHash); + if (beatmapRes.DataParsedSuccessful()) { + for (auto& v : beatmapRes.responseData->GetVersions()) { + if (v.GetHash() == levelHash) { + bool downloaded = false; + v.DownloadBeatmapAsync(*beatmapRes.responseData, [&downloaded](bool v){ + downloaded = true; + }); + while (!downloaded) std::this_thread::sleep_for(50ms); + + SongCore::API::Loading::RefreshSongs().wait(); + + auto level = SongCore::API::Loading::GetLevelByHash(levelHash); + if (level) return true; + break; + } } } - } - return false; - }); + return false; + }); } diff --git a/src/UI/MpPerPlayerUI.cpp b/src/UI/MpPerPlayerUI.cpp index 49b2e55..a36ae55 100644 --- a/src/UI/MpPerPlayerUI.cpp +++ b/src/UI/MpPerPlayerUI.cpp @@ -239,12 +239,12 @@ namespace MultiplayerCore::UI { // Can't just set the field, as it checks if the instance changed // modifierController->_gameplayModifiers->_songSpeed = GlobalNamespace::GameplayModifiers::SongSpeed::Normal; modifierController->_gameplayModifiers = modifierController->gameplayModifiers->CopyWith( - ::System::Nullable_1<::GlobalNamespace::__GameplayModifiers__EnergyType>(), ::System::Nullable_1(), + ::System::Nullable_1<::GlobalNamespace::GameplayModifiers::EnergyType>(), ::System::Nullable_1(), ::System::Nullable_1(), ::System::Nullable_1(), - ::System::Nullable_1<::GlobalNamespace::__GameplayModifiers__EnabledObstacleType>(), ::System::Nullable_1(), + ::System::Nullable_1<::GlobalNamespace::GameplayModifiers::EnabledObstacleType>(), ::System::Nullable_1(), ::System::Nullable_1(), ::System::Nullable_1(), ::System::Nullable_1(), // SongSpeed is set to Normal - ::System::Nullable_1<::GlobalNamespace::__GameplayModifiers__SongSpeed>(true, GlobalNamespace::GameplayModifiers::SongSpeed::Normal), + ::System::Nullable_1<::GlobalNamespace::GameplayModifiers::SongSpeed>(true, GlobalNamespace::GameplayModifiers::SongSpeed::Normal), ::System::Nullable_1(), ::System::Nullable_1(), ::System::Nullable_1(), ::System::Nullable_1(), ::System::Nullable_1()); _gameServerLobbyFlowCoordinator->_lobbyPlayersDataModel->SetLocalPlayerGameplayModifiers( @@ -435,7 +435,7 @@ namespace MultiplayerCore::UI { BSML::MainThreadScheduler::Schedule([this](){ if (_allowedDifficulties->Count > 1) { segmentVert->gameObject->SetActive(true); - difficultyControl->SetTexts(_allowedDifficulties->i___System__Collections__Generic__IReadOnlyList_1_T_()); + difficultyControl->SetTexts(_allowedDifficulties->i___System__Collections__Generic__IReadOnlyList_1_T_(), nullptr); int index = _allowedDifficulties->IndexOf(Utils::EnumUtils::GetEnumName(_currentBeatmapKey.difficulty)->Replace("ExpertPlus", "Expert+")); if (index >= 0) { difficultyControl->SelectCellWithNumber(index); From c3990a06e04c6f9c50c7225ed0296eddc8763220 Mon Sep 17 00:00:00 2001 From: EnderdracheLP Date: Sun, 9 Mar 2025 15:13:54 +0100 Subject: [PATCH 04/13] Bump mod version to 1.6.1 --- qpm.json | 10 +++++----- qpm.shared.json | 10 +++++----- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/qpm.json b/qpm.json index 46ce22d..d6cb182 100644 --- a/qpm.json +++ b/qpm.json @@ -5,14 +5,14 @@ "info": { "name": "MultiplayerCore", "id": "multiplayer-core", - "version": "1.6.0+Dev", + "version": "1.6.1", "url": "https://github.com/EnderdracheLP/MultiplayerCore.Quest", "additionalData": { - "soLink": "https://github.com/EnderdracheLP/MultiplayerCore.Quest/releases/download/1.6.0/libMultiplayerCore.so", - "debugSoLink": "https://github.com/EnderdracheLP/MultiplayerCore.Quest/releases/download/1.6.0/debug_libMultiplayerCore.so", + "soLink": "https://github.com/EnderdracheLP/MultiplayerCore.Quest/releases/download/1.6.1/libMultiplayerCore.so", + "debugSoLink": "https://github.com/EnderdracheLP/MultiplayerCore.Quest/releases/download/1.6.1/debug_libMultiplayerCore.so", "overrideSoName": "libMultiplayerCore.so", - "modLink": "https://github.com/EnderdracheLP/MultiplayerCore.Quest/releases/download/1.6.0/MultiplayerCore_1.6.0.qmod", - "branchName": "version/1.6.0", + "modLink": "https://github.com/EnderdracheLP/MultiplayerCore.Quest/releases/download/1.6.1/MultiplayerCore_1.6.1.qmod", + "branchName": "version/1.6.1", "cmake": true } }, diff --git a/qpm.shared.json b/qpm.shared.json index 9d49c37..b8dc564 100644 --- a/qpm.shared.json +++ b/qpm.shared.json @@ -6,14 +6,14 @@ "info": { "name": "MultiplayerCore", "id": "multiplayer-core", - "version": "1.6.0+Dev", + "version": "1.6.1", "url": "https://github.com/EnderdracheLP/MultiplayerCore.Quest", "additionalData": { - "soLink": "https://github.com/EnderdracheLP/MultiplayerCore.Quest/releases/download/1.6.0/libMultiplayerCore.so", - "debugSoLink": "https://github.com/EnderdracheLP/MultiplayerCore.Quest/releases/download/1.6.0/debug_libMultiplayerCore.so", + "soLink": "https://github.com/EnderdracheLP/MultiplayerCore.Quest/releases/download/1.6.1/libMultiplayerCore.so", + "debugSoLink": "https://github.com/EnderdracheLP/MultiplayerCore.Quest/releases/download/1.6.1/debug_libMultiplayerCore.so", "overrideSoName": "libMultiplayerCore.so", - "modLink": "https://github.com/EnderdracheLP/MultiplayerCore.Quest/releases/download/1.6.0/MultiplayerCore_1.6.0.qmod", - "branchName": "version/1.6.0", + "modLink": "https://github.com/EnderdracheLP/MultiplayerCore.Quest/releases/download/1.6.1/MultiplayerCore_1.6.1.qmod", + "branchName": "version/1.6.1", "cmake": true } }, From 7c3ceae5b87255afdb8473a518729333548e1838 Mon Sep 17 00:00:00 2001 From: EnderdracheLP Date: Sun, 9 Mar 2025 17:30:14 +0100 Subject: [PATCH 05/13] Bump lapiz --- qpm.json | 190 ++++++++++++++++++++++++------------------------ qpm.shared.json | 14 ++-- 2 files changed, 102 insertions(+), 102 deletions(-) diff --git a/qpm.json b/qpm.json index d6cb182..0fa126a 100644 --- a/qpm.json +++ b/qpm.json @@ -3,103 +3,103 @@ "sharedDir": "shared", "dependenciesDir": "extern", "info": { - "name": "MultiplayerCore", - "id": "multiplayer-core", - "version": "1.6.1", - "url": "https://github.com/EnderdracheLP/MultiplayerCore.Quest", - "additionalData": { - "soLink": "https://github.com/EnderdracheLP/MultiplayerCore.Quest/releases/download/1.6.1/libMultiplayerCore.so", - "debugSoLink": "https://github.com/EnderdracheLP/MultiplayerCore.Quest/releases/download/1.6.1/debug_libMultiplayerCore.so", - "overrideSoName": "libMultiplayerCore.so", - "modLink": "https://github.com/EnderdracheLP/MultiplayerCore.Quest/releases/download/1.6.1/MultiplayerCore_1.6.1.qmod", - "branchName": "version/1.6.1", - "cmake": true - } + "name": "MultiplayerCore", + "id": "multiplayer-core", + "version": "1.6.1", + "url": "https://github.com/EnderdracheLP/MultiplayerCore.Quest", + "additionalData": { + "soLink": "https://github.com/EnderdracheLP/MultiplayerCore.Quest/releases/download/1.6.1/libMultiplayerCore.so", + "debugSoLink": "https://github.com/EnderdracheLP/MultiplayerCore.Quest/releases/download/1.6.1/debug_libMultiplayerCore.so", + "overrideSoName": "libMultiplayerCore.so", + "modLink": "https://github.com/EnderdracheLP/MultiplayerCore.Quest/releases/download/1.6.1/MultiplayerCore_1.6.1.qmod", + "branchName": "version/1.6.1", + "cmake": true + } }, "workspace": { - "scripts": {}, - "ndk": "^27.2.12479018", - "qmodIncludeDirs": [], - "qmodIncludeFiles": [], - "qmodOutput": null + "scripts": {}, + "ndk": "^27.2.12479018", + "qmodIncludeDirs": [], + "qmodIncludeFiles": [], + "qmodOutput": null }, "dependencies": [ - { - "id": "libil2cpp", - "versionRange": "^0.4.0", - "additionalData": {} - }, - { - "id": "beatsaber-hook", - "versionRange": "^6.4.1", - "additionalData": {} - }, - { - "id": "bs-cordl", - "versionRange": "^4030.0.0", - "additionalData": {} - }, - { - "id": "custom-types", - "versionRange": "^0.18.2", - "additionalData": {} - }, - { - "id": "songcore", - "versionRange": "^1.1.19", - "additionalData": {} - }, - { - "id": "scotland2", - "versionRange": "^0.1.6", - "additionalData": { - "includeQmod": false, - "private": true - } - }, - { - "id": "paper2_scotland2", - "versionRange": "^4.6.1", - "additionalData": {} - }, - { - "id": "lapiz", - "versionRange": "^0.2.17", - "additionalData": {} - }, - { - "id": "bsml", - "versionRange": "^0.4.50", - "additionalData": { - "private": true - } - }, - { - "id": "cpp-semver", - "versionRange": "^0.1.2", - "additionalData": { - "private": true - } - }, - { - "id": "capstone", - "versionRange": "^0.1.0", - "additionalData": {} - }, - { - "id": "kaleb", - "versionRange": "^0.1.9", - "additionalData": {} - }, - { - "id": "beatsaverplusplus", - "versionRange": "^0.2.1", - "additionalData": {} - }, - { - "id": "web-utils", - "versionRange": "^0.6.7", - "additionalData": {} - } + { + "id": "libil2cpp", + "versionRange": "^0.4.0", + "additionalData": {} + }, + { + "id": "beatsaber-hook", + "versionRange": "^6.4.1", + "additionalData": {} + }, + { + "id": "bs-cordl", + "versionRange": "^4030.0.0", + "additionalData": {} + }, + { + "id": "custom-types", + "versionRange": "^0.18.2", + "additionalData": {} + }, + { + "id": "songcore", + "versionRange": "^1.1.19", + "additionalData": {} + }, + { + "id": "scotland2", + "versionRange": "^0.1.6", + "additionalData": { + "includeQmod": false, + "private": true + } + }, + { + "id": "paper2_scotland2", + "versionRange": "^4.6.1", + "additionalData": {} + }, + { + "id": "lapiz", + "versionRange": "^0.2.18", + "additionalData": {} + }, + { + "id": "bsml", + "versionRange": "^0.4.50", + "additionalData": { + "private": true + } + }, + { + "id": "cpp-semver", + "versionRange": "^0.1.2", + "additionalData": { + "private": true + } + }, + { + "id": "capstone", + "versionRange": "^0.1.0", + "additionalData": {} + }, + { + "id": "kaleb", + "versionRange": "^0.1.9", + "additionalData": {} + }, + { + "id": "beatsaverplusplus", + "versionRange": "^0.2.1", + "additionalData": {} + }, + { + "id": "web-utils", + "versionRange": "^0.6.7", + "additionalData": {} + } ] -} \ No newline at end of file +} diff --git a/qpm.shared.json b/qpm.shared.json index b8dc564..d1b4829 100644 --- a/qpm.shared.json +++ b/qpm.shared.json @@ -65,7 +65,7 @@ }, { "id": "lapiz", - "versionRange": "^0.2.17", + "versionRange": "^0.2.18", "additionalData": {} }, { @@ -313,17 +313,17 @@ { "dependency": { "id": "lapiz", - "versionRange": "=0.2.17", + "versionRange": "=0.2.18", "additionalData": { - "soLink": "https://github.com/raineaeternal/Lapiz/releases/download/v0.2.17/liblapiz.so", - "debugSoLink": "https://github.com/raineaeternal/Lapiz/releases/download/v0.2.17/debug_liblapiz.so", + "soLink": "https://github.com/raineaeternal/Lapiz/releases/download/v0.2.18/liblapiz.so", + "debugSoLink": "https://github.com/raineaeternal/Lapiz/releases/download/v0.2.18/debug_liblapiz.so", "overrideSoName": "liblapiz.so", - "modLink": "https://github.com/raineaeternal/Lapiz/releases/download/v0.2.17/Lapiz.qmod", - "branchName": "version/v0_2_17", + "modLink": "https://github.com/raineaeternal/Lapiz/releases/download/v0.2.18/Lapiz.qmod", + "branchName": "version/v0_2_18", "cmake": true } }, - "version": "0.2.17" + "version": "0.2.18" }, { "dependency": { From 437b1649d81c6c5f0f039bdbb599cb1f17144600 Mon Sep 17 00:00:00 2001 From: EnderdracheLP Date: Sun, 9 Mar 2025 17:30:35 +0100 Subject: [PATCH 06/13] Bump buildModPR workflow --- .github/workflows/buildModPR.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/buildModPR.yml b/.github/workflows/buildModPR.yml index ae33063..d52176f 100644 --- a/.github/workflows/buildModPR.yml +++ b/.github/workflows/buildModPR.yml @@ -13,7 +13,7 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 name: Checkout with: submodules: true @@ -25,7 +25,7 @@ jobs: $branchParts = '${{ github.ref_name }}'.Split('/'); $branchMain = $branchParts[0]; if ($branchParts[0] -match "^\d+$") { $branchMain = 'pr'; $branchSub = "$($branchParts[0])." } elseif ($branchParts.Length -eq 2) { $branchSub = "$($branchParts[1].Replace('.', '-'))." }; echo "version=$((Get-Content ./qpm.shared.json -Raw | ConvertFrom-Json).config.info.version.Split('-')[0])-$($branchMain).${{ github.run_number }}+$($branchSub)ra${{ github.run_attempt }}.$($env:GITHUB_SHA.Substring(0, 7))" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append $branchParts = '${{ github.ref_name }}'.Split('/'); $branchMain = $branchParts[0]; if ($branchParts[0] -match "^\d+$") { $branchMain = 'pr'; $branchSub = "$($branchParts[0])." } elseif ($branchParts.Length -eq 2) { $branchSub = "$($branchParts[1].Replace('.', '-'))." }; echo "qmodversion=$((Get-Content ./qpm.shared.json -Raw | ConvertFrom-Json).config.info.version.Split('-')[0])+$($branchMain).$($branchSub)r${{ github.run_number }}a${{ github.run_attempt }}.$($env:GITHUB_SHA.Substring(0, 7))" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append - - uses: seanmiddleditch/gha-setup-ninja@v3 + - uses: seanmiddleditch/gha-setup-ninja@v5 - name: Get QPM uses: Fernthedev/qpm-action@v1 @@ -77,7 +77,7 @@ jobs: - name: Upload non-debug artifact - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: ${{ steps.libname.outputs.NAME }} path: ./build/${{ steps.libname.outputs.NAME }} @@ -85,7 +85,7 @@ jobs: - name: Upload debug artifact - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: debug_${{ steps.libname.outputs.NAME }} path: ./build/debug/${{ steps.libname.outputs.NAME }} From 6fbb9cbaf95b1fb41ccf322b42a80bda3bb715b2 Mon Sep 17 00:00:00 2001 From: EnderdracheLP Date: Sun, 9 Mar 2025 17:30:58 +0100 Subject: [PATCH 07/13] Tweak/Fix includes --- shared/MultiplayerCore.hpp | 2 +- shared/Objects/MpLevelLoader.hpp | 1 - shared/Repositories/MpStatusRepository.hpp | 2 +- src/MultiplayerCore.cpp | 1 + 4 files changed, 3 insertions(+), 3 deletions(-) diff --git a/shared/MultiplayerCore.hpp b/shared/MultiplayerCore.hpp index 72e1e21..13cd1be 100644 --- a/shared/MultiplayerCore.hpp +++ b/shared/MultiplayerCore.hpp @@ -2,7 +2,7 @@ #include "./_config.h" #include "ServerConfig.hpp" -#include "Repositories/MpStatusRepository.hpp" +#include "Models/MpStatusData.hpp" namespace MultiplayerCore { struct MPCORE_EXPORT API { diff --git a/shared/Objects/MpLevelLoader.hpp b/shared/Objects/MpLevelLoader.hpp index 4b91741..222f6d6 100644 --- a/shared/Objects/MpLevelLoader.hpp +++ b/shared/Objects/MpLevelLoader.hpp @@ -14,7 +14,6 @@ #include "System/Threading/Tasks/Task_1.hpp" #include "System/Threading/CancellationToken.hpp" -#include "Zenject/ITickable.hpp" #include DECLARE_CLASS_CODEGEN(MultiplayerCore::Objects, MpLevelLoader, GlobalNamespace::MultiplayerLevelLoader) { diff --git a/shared/Repositories/MpStatusRepository.hpp b/shared/Repositories/MpStatusRepository.hpp index 343a394..2725609 100644 --- a/shared/Repositories/MpStatusRepository.hpp +++ b/shared/Repositories/MpStatusRepository.hpp @@ -1,7 +1,7 @@ #pragma once #include "custom-types/shared/macros.hpp" -#include "Models/MpStatusData.hpp" +#include "../Models/MpStatusData.hpp" #include "System/Collections/Generic/Dictionary_2.hpp" diff --git a/src/MultiplayerCore.cpp b/src/MultiplayerCore.cpp index 0f188bb..6f17192 100644 --- a/src/MultiplayerCore.cpp +++ b/src/MultiplayerCore.cpp @@ -1,5 +1,6 @@ #include "MultiplayerCore.hpp" #include "Hooks/NetworkConfigHooks.hpp" +#include "Repositories/MpStatusRepository.hpp" namespace MultiplayerCore { void API::UseOfficialServer() { From a5b0428a7c966771bb640cb11f7a07f2a26348f6 Mon Sep 17 00:00:00 2001 From: EnderdracheLP Date: Sun, 9 Mar 2025 18:46:08 +0100 Subject: [PATCH 08/13] Fix BeatSaverPreviewMediaData implementation --- shared/Beatmaps/BeatSaverPreviewMediaData.hpp | 4 ++-- src/Beatmaps/BeatSaverPreviewMediaData.cpp | 14 ++++++-------- 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/shared/Beatmaps/BeatSaverPreviewMediaData.hpp b/shared/Beatmaps/BeatSaverPreviewMediaData.hpp index b3e028d..2938952 100644 --- a/shared/Beatmaps/BeatSaverPreviewMediaData.hpp +++ b/shared/Beatmaps/BeatSaverPreviewMediaData.hpp @@ -17,8 +17,8 @@ DECLARE_CLASS_CODEGEN_INTERFACES(MultiplayerCore::Beatmaps, BeatSaverPreviewMedi DECLARE_INSTANCE_FIELD_PRIVATE(System::Threading::Tasks::Task_1*, _coverImageTask); DECLARE_INSTANCE_FIELD_PRIVATE(System::Threading::Tasks::Task_1*, _audioClipTask); - DECLARE_OVERRIDE_METHOD_MATCH(System::Threading::Tasks::Task_1*, GetCoverSpriteAsync, &GlobalNamespace::IPreviewMediaData::GetCoverSpriteAsync, System::Threading::CancellationToken cancellationToken); - DECLARE_OVERRIDE_METHOD_MATCH(System::Threading::Tasks::Task_1*, GetPreviewAudioClip, &GlobalNamespace::IPreviewMediaData::GetPreviewAudioClip, System::Threading::CancellationToken cancellationToken); + DECLARE_OVERRIDE_METHOD_MATCH(System::Threading::Tasks::Task_1*, GetCoverSpriteAsync, &GlobalNamespace::IPreviewMediaData::GetCoverSpriteAsync); + DECLARE_OVERRIDE_METHOD_MATCH(System::Threading::Tasks::Task_1*, GetPreviewAudioClip, &GlobalNamespace::IPreviewMediaData::GetPreviewAudioClip); DECLARE_OVERRIDE_METHOD_MATCH(void, UnloadPreviewAudioClip, &GlobalNamespace::IPreviewMediaData::UnloadPreviewAudioClip); public: diff --git a/src/Beatmaps/BeatSaverPreviewMediaData.cpp b/src/Beatmaps/BeatSaverPreviewMediaData.cpp index baca741..431d336 100644 --- a/src/Beatmaps/BeatSaverPreviewMediaData.cpp +++ b/src/Beatmaps/BeatSaverPreviewMediaData.cpp @@ -21,7 +21,7 @@ namespace MultiplayerCore::Beatmaps { _levelHash = static_cast(levelHash); } - Task_1* BeatSaverPreviewMediaData::GetCoverSpriteAsync(CancellationToken cancellationToken) { + Task_1* BeatSaverPreviewMediaData::GetCoverSpriteAsync() { if (_cachedCoverImage && !_cachedCoverImage->m_CachedPtr.IsNull()) { return Task_1::FromResult(_cachedCoverImage); } else { @@ -29,7 +29,7 @@ namespace MultiplayerCore::Beatmaps { } if (!_coverImageTask || _coverImageTask->IsCancellationRequested) { - _coverImageTask = StartTask([this](CancellationToken token) -> UnityEngine::Sprite* { + _coverImageTask = StartTask([this]() -> UnityEngine::Sprite* { auto beatmapRes = BeatSaver::API::GetBeatmapByHash(_levelHash); if (beatmapRes.DataParsedSuccessful()) { auto versions = beatmapRes.responseData->GetVersions(); @@ -56,12 +56,12 @@ namespace MultiplayerCore::Beatmaps { } } return (UnityEngine::Sprite*)nullptr; - }, std::forward(cancellationToken)); + }); } return _coverImageTask; } - Task_1* BeatSaverPreviewMediaData::GetPreviewAudioClip(CancellationToken cancellationToken) { + Task_1* BeatSaverPreviewMediaData::GetPreviewAudioClip() { if (_cachedAudioClip && !_cachedAudioClip->m_CachedPtr.IsNull()) { return Task_1::New_ctor(_cachedAudioClip); } else { @@ -69,9 +69,8 @@ namespace MultiplayerCore::Beatmaps { } if (!_audioClipTask || _audioClipTask->IsCancellationRequested) { - _audioClipTask = StartTask([this](CancellationToken cancelToken) -> UnityEngine::AudioClip* { + _audioClipTask = StartTask([this]() -> UnityEngine::AudioClip* { auto beatmapRes = BeatSaver::API::GetBeatmapByHash(_levelHash); - if (cancelToken.IsCancellationRequested) return (UnityEngine::AudioClip*)nullptr; if (beatmapRes.DataParsedSuccessful()) { const auto& versions = beatmapRes.responseData->GetVersions(); @@ -87,7 +86,6 @@ namespace MultiplayerCore::Beatmaps { auto webRequest = UnityEngine::Networking::UnityWebRequestMultimedia::GetAudioClip(v->GetPreviewURL(), UnityEngine::AudioType::MPEG); auto www = webRequest->SendWebRequest(); while (!www->get_isDone()) std::this_thread::sleep_for(std::chrono::milliseconds(100)); - if (cancelToken.IsCancellationRequested) return (UnityEngine::AudioClip*)nullptr; std::atomic result = nullptr; BSML::MainThreadScheduler::Schedule([webRequest, &result](){ @@ -98,7 +96,7 @@ namespace MultiplayerCore::Beatmaps { } return nullptr; - }, std::forward(cancellationToken)); + }); } return _audioClipTask; From 5b62addadea5daced1cc433c495e5bd5a04485ad Mon Sep 17 00:00:00 2001 From: EnderdracheLP Date: Sun, 9 Mar 2025 19:15:38 +0100 Subject: [PATCH 09/13] Fix versioning in PR workflow --- .github/workflows/buildModPR.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/buildModPR.yml b/.github/workflows/buildModPR.yml index d52176f..ee69334 100644 --- a/.github/workflows/buildModPR.yml +++ b/.github/workflows/buildModPR.yml @@ -22,8 +22,8 @@ jobs: - name: Get Version shell: pwsh run: | - $branchParts = '${{ github.ref_name }}'.Split('/'); $branchMain = $branchParts[0]; if ($branchParts[0] -match "^\d+$") { $branchMain = 'pr'; $branchSub = "$($branchParts[0])." } elseif ($branchParts.Length -eq 2) { $branchSub = "$($branchParts[1].Replace('.', '-'))." }; echo "version=$((Get-Content ./qpm.shared.json -Raw | ConvertFrom-Json).config.info.version.Split('-')[0])-$($branchMain).${{ github.run_number }}+$($branchSub)ra${{ github.run_attempt }}.$($env:GITHUB_SHA.Substring(0, 7))" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append - $branchParts = '${{ github.ref_name }}'.Split('/'); $branchMain = $branchParts[0]; if ($branchParts[0] -match "^\d+$") { $branchMain = 'pr'; $branchSub = "$($branchParts[0])." } elseif ($branchParts.Length -eq 2) { $branchSub = "$($branchParts[1].Replace('.', '-'))." }; echo "qmodversion=$((Get-Content ./qpm.shared.json -Raw | ConvertFrom-Json).config.info.version.Split('-')[0])+$($branchMain).$($branchSub)r${{ github.run_number }}a${{ github.run_attempt }}.$($env:GITHUB_SHA.Substring(0, 7))" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append + $branchParts = '${{ github.ref_name }}'.Split('/'); $branchMain = $branchParts[0]; if ($branchParts[0] -match "^\d+$") { $branchMain = 'pr'; $branchSub = "$($branchParts[0])." } elseif ($branchParts.Length -eq 2) { $branchSub = "$($branchParts[1].Replace('.', '-'))." }; echo "version=$((Get-Content ./qpm.shared.json -Raw | ConvertFrom-Json).config.info.version.Replace('+', '-').Split('-')[0])-$($branchMain).${{ github.run_number }}+$($branchSub)ra${{ github.run_attempt }}.$($env:GITHUB_SHA.Substring(0, 7))" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append + $branchParts = '${{ github.ref_name }}'.Split('/'); $branchMain = $branchParts[0]; if ($branchParts[0] -match "^\d+$") { $branchMain = 'pr'; $branchSub = "$($branchParts[0])." } elseif ($branchParts.Length -eq 2) { $branchSub = "$($branchParts[1].Replace('.', '-'))." }; echo "qmodversion=$((Get-Content ./qpm.shared.json -Raw | ConvertFrom-Json).config.info.version.Replace('+', '-').Split('-')[0])+$($branchMain).$($branchSub)r${{ github.run_number }}a${{ github.run_attempt }}.$($env:GITHUB_SHA.Substring(0, 7))" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append - uses: seanmiddleditch/gha-setup-ninja@v5 From e2c0d0647b62446ddf6d28e652050e9d66d289d2 Mon Sep 17 00:00:00 2001 From: EnderdracheLP Date: Sun, 16 Mar 2025 18:49:39 +0100 Subject: [PATCH 10/13] Add CoverSprite Unloading --- shared/Beatmaps/BeatSaverPreviewMediaData.hpp | 1 + src/Beatmaps/BeatSaverPreviewMediaData.cpp | 11 +++++++++++ 2 files changed, 12 insertions(+) diff --git a/shared/Beatmaps/BeatSaverPreviewMediaData.hpp b/shared/Beatmaps/BeatSaverPreviewMediaData.hpp index 2938952..fa402ef 100644 --- a/shared/Beatmaps/BeatSaverPreviewMediaData.hpp +++ b/shared/Beatmaps/BeatSaverPreviewMediaData.hpp @@ -19,6 +19,7 @@ DECLARE_CLASS_CODEGEN_INTERFACES(MultiplayerCore::Beatmaps, BeatSaverPreviewMedi DECLARE_OVERRIDE_METHOD_MATCH(System::Threading::Tasks::Task_1*, GetCoverSpriteAsync, &GlobalNamespace::IPreviewMediaData::GetCoverSpriteAsync); DECLARE_OVERRIDE_METHOD_MATCH(System::Threading::Tasks::Task_1*, GetPreviewAudioClip, &GlobalNamespace::IPreviewMediaData::GetPreviewAudioClip); + DECLARE_OVERRIDE_METHOD_MATCH(void, UnloadCoverSprite, &GlobalNamespace::IPreviewMediaData::UnloadCoverSprite); DECLARE_OVERRIDE_METHOD_MATCH(void, UnloadPreviewAudioClip, &GlobalNamespace::IPreviewMediaData::UnloadPreviewAudioClip); public: diff --git a/src/Beatmaps/BeatSaverPreviewMediaData.cpp b/src/Beatmaps/BeatSaverPreviewMediaData.cpp index 431d336..d1e68da 100644 --- a/src/Beatmaps/BeatSaverPreviewMediaData.cpp +++ b/src/Beatmaps/BeatSaverPreviewMediaData.cpp @@ -10,6 +10,7 @@ #include "bsml/shared/BSML/MainThreadScheduler.hpp" #include "beatsaverplusplus/shared/BeatSaver.hpp" #include +#include DEFINE_TYPE(MultiplayerCore::Beatmaps, BeatSaverPreviewMediaData); @@ -109,4 +110,14 @@ namespace MultiplayerCore::Beatmaps { _cachedAudioClip = nullptr; _audioClipTask = nullptr; } + + void BeatSaverPreviewMediaData::UnloadCoverSprite() { + if (_cachedCoverImage && !_cachedCoverImage->m_CachedPtr.IsNull()) { + if (_cachedCoverImage->texture && !_cachedCoverImage->texture->m_CachedPtr.IsNull()) + UnityEngine::Object::Destroy(_cachedCoverImage->texture); + UnityEngine::Object::Destroy(_cachedCoverImage); + } + _cachedCoverImage = nullptr; + _coverImageTask = nullptr; + } } From 64813764d8c50833df1582ca132bcf870bfaeccd Mon Sep 17 00:00:00 2001 From: EnderdracheLP Date: Sun, 16 Mar 2025 19:26:52 +0100 Subject: [PATCH 11/13] Reorder UnloadCoverSprite function definition above AudioClip UnloadPreviewAudioClip --- src/Beatmaps/BeatSaverPreviewMediaData.cpp | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/Beatmaps/BeatSaverPreviewMediaData.cpp b/src/Beatmaps/BeatSaverPreviewMediaData.cpp index d1e68da..69a74db 100644 --- a/src/Beatmaps/BeatSaverPreviewMediaData.cpp +++ b/src/Beatmaps/BeatSaverPreviewMediaData.cpp @@ -103,14 +103,6 @@ namespace MultiplayerCore::Beatmaps { return _audioClipTask; } - void BeatSaverPreviewMediaData::UnloadPreviewAudioClip() { - if (_cachedAudioClip && !_cachedAudioClip->m_CachedPtr.IsNull()) { - UnityEngine::Object::Destroy(_cachedAudioClip); - } - _cachedAudioClip = nullptr; - _audioClipTask = nullptr; - } - void BeatSaverPreviewMediaData::UnloadCoverSprite() { if (_cachedCoverImage && !_cachedCoverImage->m_CachedPtr.IsNull()) { if (_cachedCoverImage->texture && !_cachedCoverImage->texture->m_CachedPtr.IsNull()) @@ -120,4 +112,12 @@ namespace MultiplayerCore::Beatmaps { _cachedCoverImage = nullptr; _coverImageTask = nullptr; } + + void BeatSaverPreviewMediaData::UnloadPreviewAudioClip() { + if (_cachedAudioClip && !_cachedAudioClip->m_CachedPtr.IsNull()) { + UnityEngine::Object::Destroy(_cachedAudioClip); + } + _cachedAudioClip = nullptr; + _audioClipTask = nullptr; + } } From ad004fe97d070bceef96554b3e5ecb0a9fd997d0 Mon Sep 17 00:00:00 2001 From: EnderdracheLP Date: Sat, 26 Apr 2025 11:59:18 +0200 Subject: [PATCH 12/13] Bump to 1.40.4_5283 --- mod.template.json | 2 +- qpm.json | 8 ++++---- qpm.shared.json | 50 +++++++++++++++++++++++------------------------ rl-notes.md | 3 +-- 4 files changed, 31 insertions(+), 32 deletions(-) diff --git a/mod.template.json b/mod.template.json index b9c95d3..242d360 100644 --- a/mod.template.json +++ b/mod.template.json @@ -6,7 +6,7 @@ "porter": "EnderdracheLP, cubic, RedBrumbler", "version": "${version}", "packageId": "com.beatgames.beatsaber", - "packageVersion": "1.40.3_4614", + "packageVersion": "1.40.4_5283", "description": "Adds custom songs to Beat Saber Multiplayer.", "coverImage": "Cover.png", "dependencies": [], diff --git a/qpm.json b/qpm.json index 0fa126a..63d5aa9 100644 --- a/qpm.json +++ b/qpm.json @@ -36,7 +36,7 @@ }, { "id": "bs-cordl", - "versionRange": "^4030.0.0", + "versionRange": "4004.*", "additionalData": {} }, { @@ -46,7 +46,7 @@ }, { "id": "songcore", - "versionRange": "^1.1.19", + "versionRange": "^1.1.20", "additionalData": {} }, { @@ -64,12 +64,12 @@ }, { "id": "lapiz", - "versionRange": "^0.2.18", + "versionRange": "^0.2.19", "additionalData": {} }, { "id": "bsml", - "versionRange": "^0.4.50", + "versionRange": "^0.4.51", "additionalData": { "private": true } diff --git a/qpm.shared.json b/qpm.shared.json index d1b4829..ec7b93f 100644 --- a/qpm.shared.json +++ b/qpm.shared.json @@ -37,7 +37,7 @@ }, { "id": "bs-cordl", - "versionRange": "^4030.0.0", + "versionRange": "4004.*", "additionalData": {} }, { @@ -47,7 +47,7 @@ }, { "id": "songcore", - "versionRange": "^1.1.19", + "versionRange": "^1.1.20", "additionalData": {} }, { @@ -65,12 +65,12 @@ }, { "id": "lapiz", - "versionRange": "^0.2.18", + "versionRange": "^0.2.19", "additionalData": {} }, { "id": "bsml", - "versionRange": "^0.4.50", + "versionRange": "^0.4.51", "additionalData": { "private": true } @@ -139,17 +139,17 @@ { "dependency": { "id": "bsml", - "versionRange": "=0.4.50", + "versionRange": "=0.4.51", "additionalData": { - "soLink": "https://github.com/bsq-ports/Quest-BSML/releases/download/v0.4.50/libbsml.so", - "debugSoLink": "https://github.com/bsq-ports/Quest-BSML/releases/download/v0.4.50/debug_libbsml.so", + "soLink": "https://github.com/bsq-ports/Quest-BSML/releases/download/v0.4.51/libbsml.so", + "debugSoLink": "https://github.com/bsq-ports/Quest-BSML/releases/download/v0.4.51/debug_libbsml.so", "overrideSoName": "libbsml.so", - "modLink": "https://github.com/bsq-ports/Quest-BSML/releases/download/v0.4.50/BSML.qmod", - "branchName": "version/v0_4_50", + "modLink": "https://github.com/bsq-ports/Quest-BSML/releases/download/v0.4.51/BSML.qmod", + "branchName": "version/v0_4_51", "cmake": true } }, - "version": "0.4.50" + "version": "0.4.51" }, { "dependency": { @@ -177,17 +177,17 @@ { "dependency": { "id": "songcore", - "versionRange": "=1.1.19", + "versionRange": "=1.1.20", "additionalData": { - "soLink": "https://github.com/raineaeternal/Quest-SongCore/releases/download/v1.1.19/libsongcore.so", - "debugSoLink": "https://github.com/raineaeternal/Quest-SongCore/releases/download/v1.1.19/debug_libsongcore.so", + "soLink": "https://github.com/raineaeternal/Quest-SongCore/releases/download/v1.1.20/libsongcore.so", + "debugSoLink": "https://github.com/raineaeternal/Quest-SongCore/releases/download/v1.1.20/debug_libsongcore.so", "overrideSoName": "libsongcore.so", - "modLink": "https://github.com/raineaeternal/Quest-SongCore/releases/download/v1.1.19/SongCore.qmod", - "branchName": "version/v1_1_19", + "modLink": "https://github.com/raineaeternal/Quest-SongCore/releases/download/v1.1.20/SongCore.qmod", + "branchName": "version/v1_1_20", "cmake": true } }, - "version": "1.1.19" + "version": "1.1.20" }, { "dependency": { @@ -263,10 +263,10 @@ { "dependency": { "id": "bs-cordl", - "versionRange": "=4030.0.0", + "versionRange": "=4004.0.0", "additionalData": { "headersOnly": true, - "branchName": "version/v4030_0_0", + "branchName": "version/v4004_0_0", "compileOptions": { "includePaths": [ "include" @@ -282,7 +282,7 @@ } } }, - "version": "4030.0.0" + "version": "4004.0.0" }, { "dependency": { @@ -313,17 +313,17 @@ { "dependency": { "id": "lapiz", - "versionRange": "=0.2.18", + "versionRange": "=0.2.19", "additionalData": { - "soLink": "https://github.com/raineaeternal/Lapiz/releases/download/v0.2.18/liblapiz.so", - "debugSoLink": "https://github.com/raineaeternal/Lapiz/releases/download/v0.2.18/debug_liblapiz.so", + "soLink": "https://github.com/raineaeternal/Lapiz/releases/download/v0.2.19/liblapiz.so", + "debugSoLink": "https://github.com/raineaeternal/Lapiz/releases/download/v0.2.19/debug_liblapiz.so", "overrideSoName": "liblapiz.so", - "modLink": "https://github.com/raineaeternal/Lapiz/releases/download/v0.2.18/Lapiz.qmod", - "branchName": "version/v0_2_18", + "modLink": "https://github.com/raineaeternal/Lapiz/releases/download/v0.2.19/Lapiz.qmod", + "branchName": "version/v0_2_19", "cmake": true } }, - "version": "0.2.18" + "version": "0.2.19" }, { "dependency": { diff --git a/rl-notes.md b/rl-notes.md index 1d604a5..3ae0f25 100644 --- a/rl-notes.md +++ b/rl-notes.md @@ -1,3 +1,2 @@ ## Changelog -* Bump 1.28.0_4124311467 -* Added Server Switching functioniality to the mod, will be used by BeatTogether.Quest and ServerBrowserQuest \ No newline at end of file +* Bump 1.40.4_5283 \ No newline at end of file From 76b6cc26eab4cc6296ad6f8434522b9303f907db Mon Sep 17 00:00:00 2001 From: EnderdracheLP Date: Sat, 26 Apr 2025 12:20:38 +0200 Subject: [PATCH 13/13] Fix format on qpm.json --- qpm.json | 190 +++++++++++++++++++++++++++---------------------------- 1 file changed, 95 insertions(+), 95 deletions(-) diff --git a/qpm.json b/qpm.json index 63d5aa9..7f79779 100644 --- a/qpm.json +++ b/qpm.json @@ -3,103 +3,103 @@ "sharedDir": "shared", "dependenciesDir": "extern", "info": { - "name": "MultiplayerCore", - "id": "multiplayer-core", - "version": "1.6.1", - "url": "https://github.com/EnderdracheLP/MultiplayerCore.Quest", - "additionalData": { - "soLink": "https://github.com/EnderdracheLP/MultiplayerCore.Quest/releases/download/1.6.1/libMultiplayerCore.so", - "debugSoLink": "https://github.com/EnderdracheLP/MultiplayerCore.Quest/releases/download/1.6.1/debug_libMultiplayerCore.so", - "overrideSoName": "libMultiplayerCore.so", - "modLink": "https://github.com/EnderdracheLP/MultiplayerCore.Quest/releases/download/1.6.1/MultiplayerCore_1.6.1.qmod", - "branchName": "version/1.6.1", - "cmake": true - } + "name": "MultiplayerCore", + "id": "multiplayer-core", + "version": "1.6.1", + "url": "https://github.com/EnderdracheLP/MultiplayerCore.Quest", + "additionalData": { + "soLink": "https://github.com/EnderdracheLP/MultiplayerCore.Quest/releases/download/1.6.1/libMultiplayerCore.so", + "debugSoLink": "https://github.com/EnderdracheLP/MultiplayerCore.Quest/releases/download/1.6.1/debug_libMultiplayerCore.so", + "overrideSoName": "libMultiplayerCore.so", + "modLink": "https://github.com/EnderdracheLP/MultiplayerCore.Quest/releases/download/1.6.1/MultiplayerCore_1.6.1.qmod", + "branchName": "version/1.6.1", + "cmake": true + } }, "workspace": { - "scripts": {}, - "ndk": "^27.2.12479018", - "qmodIncludeDirs": [], - "qmodIncludeFiles": [], - "qmodOutput": null + "scripts": {}, + "ndk": "^27.2.12479018", + "qmodIncludeDirs": [], + "qmodIncludeFiles": [], + "qmodOutput": null }, "dependencies": [ - { - "id": "libil2cpp", - "versionRange": "^0.4.0", - "additionalData": {} - }, - { - "id": "beatsaber-hook", - "versionRange": "^6.4.1", - "additionalData": {} - }, - { - "id": "bs-cordl", - "versionRange": "4004.*", - "additionalData": {} - }, - { - "id": "custom-types", - "versionRange": "^0.18.2", - "additionalData": {} - }, - { - "id": "songcore", - "versionRange": "^1.1.20", - "additionalData": {} - }, - { - "id": "scotland2", - "versionRange": "^0.1.6", - "additionalData": { - "includeQmod": false, - "private": true - } - }, - { - "id": "paper2_scotland2", - "versionRange": "^4.6.1", - "additionalData": {} - }, - { - "id": "lapiz", - "versionRange": "^0.2.19", - "additionalData": {} - }, - { - "id": "bsml", - "versionRange": "^0.4.51", - "additionalData": { - "private": true - } - }, - { - "id": "cpp-semver", - "versionRange": "^0.1.2", - "additionalData": { - "private": true - } - }, - { - "id": "capstone", - "versionRange": "^0.1.0", - "additionalData": {} - }, - { - "id": "kaleb", - "versionRange": "^0.1.9", - "additionalData": {} - }, - { - "id": "beatsaverplusplus", - "versionRange": "^0.2.1", - "additionalData": {} - }, - { - "id": "web-utils", - "versionRange": "^0.6.7", - "additionalData": {} - } + { + "id": "libil2cpp", + "versionRange": "^0.4.0", + "additionalData": {} + }, + { + "id": "beatsaber-hook", + "versionRange": "^6.4.1", + "additionalData": {} + }, + { + "id": "bs-cordl", + "versionRange": "4004.*", + "additionalData": {} + }, + { + "id": "custom-types", + "versionRange": "^0.18.2", + "additionalData": {} + }, + { + "id": "songcore", + "versionRange": "^1.1.20", + "additionalData": {} + }, + { + "id": "scotland2", + "versionRange": "^0.1.6", + "additionalData": { + "includeQmod": false, + "private": true + } + }, + { + "id": "paper2_scotland2", + "versionRange": "^4.6.1", + "additionalData": {} + }, + { + "id": "lapiz", + "versionRange": "^0.2.19", + "additionalData": {} + }, + { + "id": "bsml", + "versionRange": "^0.4.51", + "additionalData": { + "private": true + } + }, + { + "id": "cpp-semver", + "versionRange": "^0.1.2", + "additionalData": { + "private": true + } + }, + { + "id": "capstone", + "versionRange": "^0.1.0", + "additionalData": {} + }, + { + "id": "kaleb", + "versionRange": "^0.1.9", + "additionalData": {} + }, + { + "id": "beatsaverplusplus", + "versionRange": "^0.2.1", + "additionalData": {} + }, + { + "id": "web-utils", + "versionRange": "^0.6.7", + "additionalData": {} + } ] -} +} \ No newline at end of file