diff --git a/rpcs3/Emu/SysCalls/Modules/sceNpClans.cpp b/rpcs3/Emu/SysCalls/Modules/sceNpClans.cpp index 0494fb9d37..b6712524bd 100644 --- a/rpcs3/Emu/SysCalls/Modules/sceNpClans.cpp +++ b/rpcs3/Emu/SysCalls/Modules/sceNpClans.cpp @@ -8,243 +8,446 @@ Module *sceNpClans = nullptr; -int sceNpClansInit() +struct sceNpClansInternal { - UNIMPLEMENTED_FUNC(sceNpClans); + bool m_bSceNpClansInitialized; + + sceNpClansInternal() + : m_bSceNpClansInitialized(false) + { + } +}; + +sceNpClansInternal sceNpClansInstance; + +int sceNpClansInit(vm::ptr commId, vm::ptr passphrase, vm::ptr pool, vm::ptr poolSize, u32 flags) +{ + sceNpClans->Warning("sceNpClansInit(commId_addr=0x%x, passphrase_addr=0x%x, pool_addr=0x%x,poolSize_addr=0x%x, flags=%d)", commId.addr(), passphrase.addr(), pool.addr(), poolSize.addr(), flags); + + if (sceNpClansInstance.m_bSceNpClansInitialized) + return SCE_NP_CLANS_ERROR_ALREADY_INITIALIZED; + + if (flags != 0) + return SCE_NP_CLANS_ERROR_NOT_SUPPORTED; + + sceNpClansInstance.m_bSceNpClansInitialized = true; + return CELL_OK; } int sceNpClansTerm() { - UNIMPLEMENTED_FUNC(sceNpClans); + sceNpClans->Warning("sceNpClansTerm()"); + + if (!sceNpClansInstance.m_bSceNpClansInitialized) + return SCE_NP_CLANS_ERROR_NOT_INITIALIZED; + + sceNpClansInstance.m_bSceNpClansInitialized = false; + return CELL_OK; } -int sceNpClansCreateRequest() +int sceNpClansCreateRequest(vm::ptr handle,u64 flags) { - UNIMPLEMENTED_FUNC(sceNpClans); + sceNpClans->Todo("sceNpClansInit(handle_addr=0x%x, flags=%d)", handle.addr(), flags); + + if (!sceNpClansInstance.m_bSceNpClansInitialized) + return SCE_NP_CLANS_ERROR_NOT_INITIALIZED; + + if (flags != 0) + return SCE_NP_CLANS_ERROR_NOT_SUPPORTED; + return CELL_OK; } -int sceNpClansDestroyRequest() +int sceNpClansDestroyRequest(vm::ptr handle) { UNIMPLEMENTED_FUNC(sceNpClans); + + if (!sceNpClansInstance.m_bSceNpClansInitialized) + return SCE_NP_CLANS_ERROR_NOT_INITIALIZED; + return CELL_OK; } -int sceNpClansAbortRequest() +int sceNpClansAbortRequest(vm::ptr handle) { UNIMPLEMENTED_FUNC(sceNpClans); + + if (!sceNpClansInstance.m_bSceNpClansInitialized) + return SCE_NP_CLANS_ERROR_NOT_INITIALIZED; + return CELL_OK; } -int sceNpClansCreateClan() +int sceNpClansCreateClan(vm::ptr handle, vm::ptr name, vm::ptr tag, vm::ptr clanId) { UNIMPLEMENTED_FUNC(sceNpClans); + + if (!sceNpClansInstance.m_bSceNpClansInitialized) + return SCE_NP_CLANS_ERROR_NOT_INITIALIZED; + + if ((*name > SCE_NP_CLANS_CLAN_NAME_MAX_LENGTH) || (*tag > SCE_NP_CLANS_CLAN_TAG_MAX_LENGTH)) + return SCE_NP_CLANS_ERROR_EXCEEDS_MAX; + return CELL_OK; } -int sceNpClansDisbandClan() +int sceNpClansDisbandClan(vm::ptr handle, u32 clanId) { UNIMPLEMENTED_FUNC(sceNpClans); + + if (!sceNpClansInstance.m_bSceNpClansInitialized) + return SCE_NP_CLANS_ERROR_NOT_INITIALIZED; + return CELL_OK; } -int sceNpClansGetClanList() +int sceNpClansGetClanList(vm::ptr handle, vm::ptr paging, vm::ptr clanList, vm::ptr pageResult) { UNIMPLEMENTED_FUNC(sceNpClans); + + if (!sceNpClansInstance.m_bSceNpClansInitialized) + return SCE_NP_CLANS_ERROR_NOT_INITIALIZED; + return CELL_OK; } int sceNpClansGetClanListByNpId() { UNIMPLEMENTED_FUNC(sceNpClans); + + if (!sceNpClansInstance.m_bSceNpClansInitialized) + return SCE_NP_CLANS_ERROR_NOT_INITIALIZED; + return CELL_OK; } int sceNpClansSearchByProfile() { UNIMPLEMENTED_FUNC(sceNpClans); + + if (!sceNpClansInstance.m_bSceNpClansInitialized) + return SCE_NP_CLANS_ERROR_NOT_INITIALIZED; + return CELL_OK; } int sceNpClansSearchByName() { UNIMPLEMENTED_FUNC(sceNpClans); + + if (!sceNpClansInstance.m_bSceNpClansInitialized) + return SCE_NP_CLANS_ERROR_NOT_INITIALIZED; + return CELL_OK; } int sceNpClansGetClanInfo() { UNIMPLEMENTED_FUNC(sceNpClans); + + if (!sceNpClansInstance.m_bSceNpClansInitialized) + return SCE_NP_CLANS_ERROR_NOT_INITIALIZED; + return CELL_OK; } int sceNpClansUpdateClanInfo() { UNIMPLEMENTED_FUNC(sceNpClans); + + if (!sceNpClansInstance.m_bSceNpClansInitialized) + return SCE_NP_CLANS_ERROR_NOT_INITIALIZED; + return CELL_OK; } int sceNpClansGetMemberList() { UNIMPLEMENTED_FUNC(sceNpClans); + + if (!sceNpClansInstance.m_bSceNpClansInitialized) + return SCE_NP_CLANS_ERROR_NOT_INITIALIZED; + return CELL_OK; } int sceNpClansGetMemberInfo() { UNIMPLEMENTED_FUNC(sceNpClans); + + if (!sceNpClansInstance.m_bSceNpClansInitialized) + return SCE_NP_CLANS_ERROR_NOT_INITIALIZED; + return CELL_OK; } int sceNpClansUpdateMemberInfo() { UNIMPLEMENTED_FUNC(sceNpClans); + + if (!sceNpClansInstance.m_bSceNpClansInitialized) + return SCE_NP_CLANS_ERROR_NOT_INITIALIZED; + return CELL_OK; } int sceNpClansChangeMemberRole() { UNIMPLEMENTED_FUNC(sceNpClans); + + if (!sceNpClansInstance.m_bSceNpClansInitialized) + return SCE_NP_CLANS_ERROR_NOT_INITIALIZED; + return CELL_OK; } int sceNpClansGetAutoAcceptStatus() { UNIMPLEMENTED_FUNC(sceNpClans); + + if (!sceNpClansInstance.m_bSceNpClansInitialized) + return SCE_NP_CLANS_ERROR_NOT_INITIALIZED; + return CELL_OK; } int sceNpClansUpdateAutoAcceptStatus() { UNIMPLEMENTED_FUNC(sceNpClans); + + if (!sceNpClansInstance.m_bSceNpClansInitialized) + return SCE_NP_CLANS_ERROR_NOT_INITIALIZED; + return CELL_OK; } int sceNpClansJoinClan() { UNIMPLEMENTED_FUNC(sceNpClans); + + if (!sceNpClansInstance.m_bSceNpClansInitialized) + return SCE_NP_CLANS_ERROR_NOT_INITIALIZED; + return CELL_OK; } int sceNpClansLeaveClan() { UNIMPLEMENTED_FUNC(sceNpClans); + + if (!sceNpClansInstance.m_bSceNpClansInitialized) + return SCE_NP_CLANS_ERROR_NOT_INITIALIZED; + return CELL_OK; } -int sceNpClansKickMember() +int sceNpClansKickMember(vm::ptr handle, u32 clanId,vm::ptr npid, vm::ptr message) { UNIMPLEMENTED_FUNC(sceNpClans); + + if (!sceNpClansInstance.m_bSceNpClansInitialized) + return SCE_NP_CLANS_ERROR_NOT_INITIALIZED; + + if (message > SCE_NP_CLANS_MESSAGE_BODY_MAX_LENGTH) + return SCE_NP_CLANS_ERROR_EXCEEDS_MAX; + return CELL_OK; } -int sceNpClansSendInvitation() +int sceNpClansSendInvitation(vm::ptr handle, u32 clanId, vm::ptr npid, vm::ptr message) { UNIMPLEMENTED_FUNC(sceNpClans); + + if (!sceNpClansInstance.m_bSceNpClansInitialized) + return SCE_NP_CLANS_ERROR_NOT_INITIALIZED; + + if (message > SCE_NP_CLANS_MESSAGE_BODY_MAX_LENGTH) + return SCE_NP_CLANS_ERROR_EXCEEDS_MAX; + return CELL_OK; } int sceNpClansCancelInvitation() { UNIMPLEMENTED_FUNC(sceNpClans); + + if (!sceNpClansInstance.m_bSceNpClansInitialized) + return SCE_NP_CLANS_ERROR_NOT_INITIALIZED; + return CELL_OK; } -int sceNpClansSendInvitationResponse() +int sceNpClansSendInvitationResponse(vm::ptr handle, u32 clanId, vm::ptr message, bool accept) { UNIMPLEMENTED_FUNC(sceNpClans); + + if (!sceNpClansInstance.m_bSceNpClansInitialized) + return SCE_NP_CLANS_ERROR_NOT_INITIALIZED; + + if (message > SCE_NP_CLANS_MESSAGE_BODY_MAX_LENGTH) + return SCE_NP_CLANS_ERROR_EXCEEDS_MAX; + return CELL_OK; } -int sceNpClansSendMembershipRequest() +int sceNpClansSendMembershipRequest(vm::ptr handle, u32 clanId, vm::ptr message) { UNIMPLEMENTED_FUNC(sceNpClans); + + if (!sceNpClansInstance.m_bSceNpClansInitialized) + return SCE_NP_CLANS_ERROR_NOT_INITIALIZED; + + if (message > SCE_NP_CLANS_MESSAGE_BODY_MAX_LENGTH) + return SCE_NP_CLANS_ERROR_EXCEEDS_MAX; + return CELL_OK; } int sceNpClansCancelMembershipRequest() { UNIMPLEMENTED_FUNC(sceNpClans); + + if (!sceNpClansInstance.m_bSceNpClansInitialized) + return SCE_NP_CLANS_ERROR_NOT_INITIALIZED; + return CELL_OK; } int sceNpClansSendMembershipResponse() { UNIMPLEMENTED_FUNC(sceNpClans); + + if (!sceNpClansInstance.m_bSceNpClansInitialized) + return SCE_NP_CLANS_ERROR_NOT_INITIALIZED; + return CELL_OK; } int sceNpClansGetBlacklist() { UNIMPLEMENTED_FUNC(sceNpClans); + + if (!sceNpClansInstance.m_bSceNpClansInitialized) + return SCE_NP_CLANS_ERROR_NOT_INITIALIZED; + return CELL_OK; } int sceNpClansAddBlacklistEntry() { UNIMPLEMENTED_FUNC(sceNpClans); + + if (!sceNpClansInstance.m_bSceNpClansInitialized) + return SCE_NP_CLANS_ERROR_NOT_INITIALIZED; + return CELL_OK; } int sceNpClansRemoveBlacklistEntry() { UNIMPLEMENTED_FUNC(sceNpClans); + + if (!sceNpClansInstance.m_bSceNpClansInitialized) + return SCE_NP_CLANS_ERROR_NOT_INITIALIZED; + return CELL_OK; } int sceNpClansRetrieveAnnouncements() { UNIMPLEMENTED_FUNC(sceNpClans); + + if (!sceNpClansInstance.m_bSceNpClansInitialized) + return SCE_NP_CLANS_ERROR_NOT_INITIALIZED; + return CELL_OK; } int sceNpClansPostAnnouncement() { UNIMPLEMENTED_FUNC(sceNpClans); + + if (!sceNpClansInstance.m_bSceNpClansInitialized) + return SCE_NP_CLANS_ERROR_NOT_INITIALIZED; + return CELL_OK; } int sceNpClansRemoveAnnouncement() { UNIMPLEMENTED_FUNC(sceNpClans); + + if (!sceNpClansInstance.m_bSceNpClansInitialized) + return SCE_NP_CLANS_ERROR_NOT_INITIALIZED; + return CELL_OK; } -int sceNpClansPostChallenge() +int sceNpClansPostChallenge(vm::ptr handle, u32 clanId, u32 targetClan, vm::ptr message, vm::ptr data, u32 duration, vm::ptr mId) { UNIMPLEMENTED_FUNC(sceNpClans); + + if (!sceNpClansInstance.m_bSceNpClansInitialized) + return SCE_NP_CLANS_ERROR_NOT_INITIALIZED; + + if (data != 0) + return SCE_NP_CLANS_ERROR_NOT_SUPPORTED; + + if (message > SCE_NP_CLANS_MESSAGE_BODY_MAX_LENGTH) + return SCE_NP_CLANS_ERROR_EXCEEDS_MAX; + + //todo + return CELL_OK; } int sceNpClansRetrievePostedChallenges() { UNIMPLEMENTED_FUNC(sceNpClans); + + if (!sceNpClansInstance.m_bSceNpClansInitialized) + return SCE_NP_CLANS_ERROR_NOT_INITIALIZED; + + //todo + return CELL_OK; } int sceNpClansRemovePostedChallenge() { UNIMPLEMENTED_FUNC(sceNpClans); + + if (!sceNpClansInstance.m_bSceNpClansInitialized) + return SCE_NP_CLANS_ERROR_NOT_INITIALIZED; + return CELL_OK; } int sceNpClansRetrieveChallenges() { UNIMPLEMENTED_FUNC(sceNpClans); + + if (!sceNpClansInstance.m_bSceNpClansInitialized) + return SCE_NP_CLANS_ERROR_NOT_INITIALIZED; + return CELL_OK; } int sceNpClansRemoveChallenge() { UNIMPLEMENTED_FUNC(sceNpClans); + + if (!sceNpClansInstance.m_bSceNpClansInitialized) + return SCE_NP_CLANS_ERROR_NOT_INITIALIZED; + return CELL_OK; } void sceNpClans_unload() { - // TODO: Unload Clans module + sceNpClansInstance.m_bSceNpClansInitialized = false; } void sceNpClans_init(Module *pxThis)