diff --git a/data/uking_functions.csv b/data/uking_functions.csv index 84f10258..b66aa1ee 100644 --- a/data/uking_functions.csv +++ b/data/uking_functions.csv @@ -71165,14 +71165,14 @@ 0x0000007100d0d730,sub_7100D0D730,8, 0x0000007100d0d738,_ZN2nn3nex20PseudoGlobalVariableINS0_38SecureConnectionServiceDDLDeclarationsEE13ResetContextsEv,140, 0x0000007100d0d7c4,sub_7100D0D7C4,196, -0x0000007100d0d888,sub_7100D0D888,100, -0x0000007100d0d8ec,sub_7100D0D8EC,108, -0x0000007100d0d958,Account::createInstance,156, -0x0000007100d0d9f4,sub_7100D0D9F4,80, -0x0000007100d0da44,sub_7100D0DA44,68, -0x0000007100d0da88,Account::init,96, -0x0000007100d0dae8,Account::__auto0,8, -0x0000007100d0daf0,Account::getUserId,28, +0x0000007100d0d888,sub_7100D0D888,100,_ZN4ksys7Account18SingletonDisposer_D2Ev +0x0000007100d0d8ec,sub_7100D0D8EC,108,_ZN4ksys7Account18SingletonDisposer_D0Ev +0x0000007100d0d958,Account::createInstance,156,_ZN4ksys7Account14createInstanceEPN4sead4HeapE +0x0000007100d0d9f4,sub_7100D0D9F4,80,_ZN4ksys7AccountD1Ev +0x0000007100d0da44,sub_7100D0DA44,68,_ZN4ksys7AccountD0Ev +0x0000007100d0da88,Account::init,96,_ZN4ksys7Account4initEPN4sead4HeapE +0x0000007100d0dae8,Account::__auto0,8,_ZNK4ksys7Account13getUserHandleEv +0x0000007100d0daf0,Account::getUserId,28,_ZNK4ksys7Account9getUserIdEPN2nn7account3UidE 0x0000007100d0db0c,ActorAccessor::ctorCopy,144,_ZN4ksys3act20ActorConstDataAccess12acquireActorERKNS0_24ActorLinkConstDataAccessE 0x0000007100d0db9c,ActorAccessor::hasActor,16,_ZNK4ksys3act20ActorConstDataAccess7hasProcEPNS0_8BaseProcE 0x0000007100d0dbac,act::fieldx8IsEqualToActorFieldx60,144,_ZNK4ksys3act20ActorConstDataAccess7hasProcERKNS0_12BaseProcLinkE diff --git a/lib/NintendoSDK b/lib/NintendoSDK index 33613dbd..3765a6af 160000 --- a/lib/NintendoSDK +++ b/lib/NintendoSDK @@ -1 +1 @@ -Subproject commit 33613dbdf486d04637351600cfe9eeb434b364a8 +Subproject commit 3765a6afa665dc9e787a50e46e70614a0b88ff4f diff --git a/src/KingSystem/System/Account.cpp b/src/KingSystem/System/Account.cpp new file mode 100644 index 00000000..540914b8 --- /dev/null +++ b/src/KingSystem/System/Account.cpp @@ -0,0 +1,43 @@ +#include "KingSystem/System/Account.h" +#include + +namespace ksys { + +SEAD_SINGLETON_DISPOSER_IMPL(Account) + +Account::~Account() { + if (mFlags.isOn(Flag::HasUserHandle)) { + if (mUserHandle) { + delete mUserHandle; + mUserHandle = nullptr; + } + mFlags.reset(Flag::HasUserHandle); + } +} + +void Account::init(sead::Heap* heap) { + mUserHandle = new (heap) nn::account::UserHandle{}; + + nn::account::Initialize(); + + if (mFlags.isOff(Flag::HasOpenedUserSuccessfully)) { + const auto result = nn::account::OpenPreselectedUser(mUserHandle); + if (result.IsSuccess()) + mFlags.set(Flag::HasOpenedUserSuccessfully); + } + + mFlags.set(Flag::HasUserHandle); +} + +nn::account::UserHandle* Account::getUserHandle() const { + return mUserHandle; +} + +void Account::getUserId(nn::account::Uid* uid) const { + if (mUserHandle) + nn::account::GetUserId(uid, *mUserHandle); + else + *uid = {}; +} + +} // namespace ksys diff --git a/src/KingSystem/System/Account.h b/src/KingSystem/System/Account.h new file mode 100644 index 00000000..cf6ee121 --- /dev/null +++ b/src/KingSystem/System/Account.h @@ -0,0 +1,37 @@ +#pragma once + +#include +#include +#include "KingSystem/Utils/Types.h" + +namespace nn::account { +class Uid; +class UserHandle; +} // namespace nn::account + +namespace ksys { + +class Account { + SEAD_SINGLETON_DISPOSER(Account) + Account() = default; + virtual ~Account(); + +public: + void init(sead::Heap* heap); + + nn::account::UserHandle* getUserHandle() const; + void getUserId(nn::account::Uid* uid) const; + +private: + enum class Flag : u8 { + HasUserHandle = 0x1, + HasOpenedUserSuccessfully = 0x2, + }; + + void* _28 = nullptr; + sead::TypedBitFlag mFlags; + nn::account::UserHandle* mUserHandle = nullptr; +}; +KSYS_CHECK_SIZE_NX150(Account, 0x40); + +} // namespace ksys diff --git a/src/KingSystem/System/CMakeLists.txt b/src/KingSystem/System/CMakeLists.txt index f2a045ba..51b8a1af 100644 --- a/src/KingSystem/System/CMakeLists.txt +++ b/src/KingSystem/System/CMakeLists.txt @@ -1,4 +1,6 @@ target_sources(uking PRIVATE + Account.cpp + Account.h OverlayArena.cpp OverlayArena.h OverlayArenaSystem.cpp