Something went wrong. Try again.
the game where you go into mines and start crafting! but for consoles (forked directly from smartcmd's github)
Something went wrong. Try again.
17 kB · 490 lines
C++
at master
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490#include "stdafx.h"
#include "Orbis_NPToolkit.h"#include "Orbis\ps4__np_conf.h"#include "Orbis/Network/SonyCommerce_Orbis.h"
// #define NP_TITLE_ID "CUSA00265_00"// #define NP_TITLE_SECRET_HEX "c37e30fa1f7fd29e3534834d62781143ae29aa7b51d02320e7aa0b45116ad600e4d309e8431bc37977d98b8db480e721876e7d736e11fd906778c0033bbb6370903477b1dc1e65106afc62007a5feee3158844d721b88c3f4bff2e56417b6910cedfdec78b130d2e0dd35a35a9e2ae31d5889f9398c1d62b52a3630bb03faa5b"// #define CLIENT_ID_FOR_SAMPLE "c8c483e7-f0b4-420b-877b-307fcb4c3cdc"
//#define _USE_STANDARD_ALLOC
// SingletonOrbisNPToolkit NPToolkit;sce::Toolkit::NP::Utilities::Future< sce::Toolkit::NP::NpSessionInformation > OrbisNPToolkit::sm_createJoinFuture;sce::Toolkit::NP::NpSessionInformation OrbisNPToolkit::m_currentSessionInfo;sce::Toolkit::NP::Utilities::Future<sce::Toolkit::NP::MessageAttachment> OrbisNPToolkit::m_messageData;
void OrbisNPToolkit::presenceCallback( const sce::Toolkit::NP::Event& event ){ switch(event.event) { case sce::Toolkit::NP::Event::presenceSet: app.DebugPrintf("presenceSet Successfully\n"); break; case sce::Toolkit::NP::Event::presenceSetFailed: app.DebugPrintf("presenceSetFailed event received = 0x%x\n", event.returnCode); SQRNetworkManager_Orbis::SetPresenceFailedCallback(); break; default: break; }}
void OrbisNPToolkit::coreCallback( const sce::Toolkit::NP::Event& event ){ switch (event.event) { case sce::Toolkit::NP::Event::enetDown: app.DebugPrintf("Online: Received core callback: Network down \n"); ProfileManager.SetNetworkStatus(false); break; case sce::Toolkit::NP::Event::enetUp: app.DebugPrintf("Online: Received core callback: Network up \n"); ProfileManager.SetNetworkStatus(true); break; case sce::Toolkit::NP::Event::loggedIn: app.DebugPrintf("Online: Received core callback: PSN sign in \n"); assert(event.userInformation.state == SCE_NP_STATE_SIGNED_IN); ProfileManager.SignedInPSNStateCallback(event.userInformation.userId, event.userInformation.state, &event.userInformation.npId); break; case sce::Toolkit::NP::Event::loggedOut: app.DebugPrintf("Online: Received core callback: PSN sign out \n"); assert(event.userInformation.state == SCE_NP_STATE_SIGNED_OUT); ProfileManager.SignedInPSNStateCallback(event.userInformation.userId, event.userInformation.state, &event.userInformation.npId); break; default: app.DebugPrintf("Online: Received core callback: event Num: %d \n", event.event); break; }}
void OrbisNPToolkit::sceNpToolkitCallback( const sce::Toolkit::NP::Event& event){ switch(event.service) { case sce::Toolkit::NP::ServiceType::core: coreCallback(event); break;// case sce::Toolkit::NP::ServiceType::netInfo:// Menu::NetInfo::sceNpToolkitCallback(event);// break; case sce::Toolkit::NP::ServiceType::sessions: sessionsCallback(event); break;// case sce::Toolkit::NP::ServiceType::tss:// Menu::Tss::sceNpToolkitCallback(event);// break;// case sce::Toolkit::NP::ServiceType::ranking:// Menu::Ranking::sceNpToolkitCallback(event);// break;// case sce::Toolkit::NP::ServiceType::tus:// Menu::Tus::sceNpToolkitCallback(event);// break;// case sce::Toolkit::NP::ServiceType::profile:// Menu::Profile::sceNpToolkitCallback(event);// break;// case sce::Toolkit::NP::ServiceType::friends:// Menu::Friends::sceNpToolkitCallback(event);// break;// case sce::Toolkit::NP::ServiceType::auth:// Menu::Auth::sceNpToolkitCallback(event);// break; case sce::Toolkit::NP::ServiceType::trophy: ProfileManager.trophySystemCallback(event); break; case sce::Toolkit::NP::ServiceType::messaging: messagingCallback(event); break;// case sce::Toolkit::NP::ServiceType::inGameMessage:// Menu::Messaging::sceNpToolkitCallback(event);// break;
case sce::Toolkit::NP::ServiceType::commerce: SonyCommerce_Orbis::commerce2Handler(event); break; case sce::Toolkit::NP::ServiceType::presence: presenceCallback(event); break;// case sce::Toolkit::NP::ServiceType::wordFilter:// Menu::WordFilter::sceNpToolkitCallback(event);// break;// case sce::Toolkit::NP::ServiceType::sns:// Menu::Sns::sceNpToolkitCallback(event);// break;
case sce::Toolkit::NP::ServiceType::gameCustomData: gameCustomDataCallback(event); default: break; }}
void OrbisNPToolkit::sessionsCallback( const sce::Toolkit::NP::Event& event){ switch(event.event) { case sce::Toolkit::NP::Event::npSessionCreateResult: ///< An event generated when the %Np session creation process has been completed. app.DebugPrintf("npSessionCreateResult"); if(sm_createJoinFuture.hasResult()) { app.DebugPrintf("Session Created Successfully\n"); m_currentSessionInfo = *sm_createJoinFuture.get(); } else { app.DebugPrintf("Session Creation Failed 0x%x\n",sm_createJoinFuture.getError()); } sm_createJoinFuture.reset(); break; case sce::Toolkit::NP::Event::npSessionJoinResult: ///< An event generated when the join %Np session process has been completed. app.DebugPrintf("npSessionJoinResult"); if(sm_createJoinFuture.hasResult()) { app.DebugPrintf("Session joined successfully\n"); m_currentSessionInfo = *sm_createJoinFuture.get(); } else { app.DebugPrintf("Session join Failed 0x%x\n",sm_createJoinFuture.getError()); } sm_createJoinFuture.reset(); break; case sce::Toolkit::NP::Event::npSessionError: ///< An event generated when there was error performing the current %Np session process. app.DebugPrintf("npSessionError"); break; case sce::Toolkit::NP::Event::npSessionLeaveResult: ///< An event generated when the user has left the current %Np session. app.DebugPrintf("npSessionLeaveResult"); break; case sce::Toolkit::NP::Event::npSessionModified: ///< An event generated when the %Np session has been modified. app.DebugPrintf("npSessionModified"); break; case sce::Toolkit::NP::Event::npSessionUpdateResult: ///< An event generated when the %Np session has been updated. app.DebugPrintf("npSessionUpdateResult"); break; case sce::Toolkit::NP::Event::npSessionGetInfoResult: ///< An event generated when the %Np session info has been retrieved. app.DebugPrintf("npSessionGetInfoResult"); break; case sce::Toolkit::NP::Event::npSessionGetInfoListResult: ///< An event generated when the %Np session info has been retrieved. app.DebugPrintf("npSessionGetInfoListResult"); break; case sce::Toolkit::NP::Event::npSessionGetSessionDataResult: ///< An event generated when the %Np session data has been retrieved. app.DebugPrintf("npSessionGetSessionDataResult"); break; case sce::Toolkit::NP::Event::npSessionSearchResult: ///< An event generated when the %Np session search request has been completed. app.DebugPrintf("npSessionSearchResult"); break; case sce::Toolkit::NP::Event::npSessionInviteNotification: ///< An event generated when the %Np session push notification is received. app.DebugPrintf("npSessionInviteNotification"); break; case sce::Toolkit::NP::Event::npSessionInviteGetInfoResult: ///< An event generated when the %Np session info has been retrieved. app.DebugPrintf("npSessionInviteGetInfoResult"); break; case sce::Toolkit::NP::Event::npSessionInviteGetInfoListResult: ///< An event generated when the %Np session info has been retrieved. app.DebugPrintf("npSessionInviteGetInfoListResult"); break; case sce::Toolkit::NP::Event::npSessionInviteGetDataResult: ///< An event generated when the %Np session data has been retrieved. app.DebugPrintf("npSessionInviteGetDataResult"); break; default: assert(0); break; }
}
void OrbisNPToolkit::gameCustomDataCallback( const sce::Toolkit::NP::Event& event){ switch(event.event) {
case sce::Toolkit::NP::Event::gameCustomDataItemListResult: app.DebugPrintf("gameCustomDataItemListResult"); break; case sce::Toolkit::NP::Event::gameCustomDataGameDataResult: app.DebugPrintf("gameCustomDataGameDataResult"); if(m_messageData.hasResult()) { SQRNetworkManager_Orbis::GetInviteDataAndProcess(m_messageData.get()); } else { app.DebugPrintf("gameCustomDataMessageResult error 0x%08x\n", m_messageData.getError());
UINT uiIDA[1] = { IDS_OK };
switch(m_messageData.getError()) { case SCE_NP_ERROR_LATEST_PATCH_PKG_EXIST: case SCE_NP_ERROR_LATEST_PATCH_PKG_DOWNLOADED: app.ShowPatchAvailableError(); break; case SCE_NP_ERROR_AGE_RESTRICTION: default: ui.RequestMessageBox(IDS_ONLINE_SERVICE_TITLE, IDS_CONTENT_RESTRICTION, uiIDA, 1); break; } } break; case sce::Toolkit::NP::Event::gameCustomDataMessageResult: app.DebugPrintf("gameCustomDataMessageResult"); break; case sce::Toolkit::NP::Event::gameCustomDataSetUseFlagResult: app.DebugPrintf("gameCustomDataSetUseFlagResult"); break; case sce::Toolkit::NP::Event::gameCustomDataGameThumbnailResult: app.DebugPrintf("gameCustomDataGameThumbnailResult"); break; case sce::Toolkit::NP::Event::messageError: app.DebugPrintf("messageError : 0x%08x\n", event.returnCode); assert(0); break; default: assert(0); break; }}
void OrbisNPToolkit::messagingCallback( const sce::Toolkit::NP::Event& event){ switch(event.event) { case sce::Toolkit::NP::Event::messageSent: ///< An event generated when a message has been sent. app.DebugPrintf("sce::Toolkit::NP::Event::messageSent\n"); SQRNetworkManager_Orbis::s_bInviteDialogRunning = false; break; case sce::Toolkit::NP::Event::messageError: ///< An event generated when a message failed to be received or sent. app.DebugPrintf("sce::Toolkit::NP::Event::messageError\n"); SQRNetworkManager_Orbis::s_bInviteDialogRunning = false; break; case sce::Toolkit::NP::Event::messageDialogTerminated: ///< An event generated when a message dialog box is terminated. app.DebugPrintf("sce::Toolkit::NP::Event::messageDialogTerminated\n"); SQRNetworkManager_Orbis::s_bInviteDialogRunning = false; break; //case sce::Toolkit::NP::Event::messageRetrieved: ///< An event generated when a message attachment has been retrieved. //case sce::Toolkit::NP::Event::messageInGameDataReceived: ///< An event generated when in-game data is received. //case sce::Toolkit::NP::Event::messageInGameDataRetrievalDone: ///< An event generated when in-game data retrieval is complete.
// case sce::Toolkit::NP::Event::messageAttachmentReceived: ///< An event generated when a message with a data attachment has been received. // case sce::Toolkit::NP::Event::messageAttachmentOpened: ///< An event generated when a message with a data attachment has been opened (and the sysutil GUI is closed). // case sce::Toolkit::NP::Event::messageInviteReceived: ///< An event generated when a message with an invite has been received. // case sce::Toolkit::NP::Event::messageInviteAccepted: ///< An event generated when a message with an invite has been accepted via ToolkitNp (and the sysutil GUI is closed). }}
static uint8_t hexCharToUint(char ch){ uint8_t val = 0;
if ( isdigit(ch) ){ val = (ch - '0'); } else if ( isupper(ch) ){ val = (ch - 'A' + 10); } else{ val = (ch - 'a' + 10); }
return val;}
void hexStrToBin( const char *pHexStr, uint8_t *pBinBuf, size_t binBufSize ){ uint8_t val = 0; int hexStrLen = strlen(pHexStr);
int binOffset = 0; for (int i = 0; i < hexStrLen; i++) { val |= hexCharToUint(*(pHexStr + i)); if (i % 2 == 0) { val <<= 4; } else { if (pBinBuf != NULL && binOffset < binBufSize) { memcpy(pBinBuf + binOffset, &val, 1); val = 0; } binOffset++; } }
if (val != 0 && pBinBuf != NULL && binOffset < binBufSize) { memcpy(pBinBuf + binOffset, &val, 1); }
return;}
void OrbisNPToolkit::init(){// MenuApp menuApp;
sce::Toolkit::NP::NpTitleId nptTitleId; nptTitleId.setTitleSecret(*SQRNetworkManager_Orbis::GetSceNpTitleId(), *SQRNetworkManager_Orbis::GetSceNpTitleSecret()); sce::Toolkit::NP::CommunicationId commsIds(s_npCommunicationId, s_npCommunicationPassphrase, s_npCommunicationSignature); sce::Toolkit::NP::Parameters params(sceNpToolkitCallback,nptTitleId);
int ret = sce::Toolkit::NP::Interface::init(params); if (ret != SCE_OK) { app.DebugPrintf("Failed to initialize NP Toolkit Library : 0x%x\n", ret); assert(0); }
ret = sce::Toolkit::NP::Interface::registerNpCommsId(commsIds, sce::Toolkit::NP::matching); if (ret < 0) { app.DebugPrintf("Failed to register TSS Comms ID : 0x%x\n", ret); assert(0); }
// Get network status and inform library sce::Toolkit::NP::Utilities::Future<sce::Toolkit::NP::NetStateBasic> netStateFuture = sce::Toolkit::NP::Utilities::Future<sce::Toolkit::NP::NetStateBasic>(); sce::Toolkit::NP::NetInfo::Interface::getNetInfo(&netStateFuture);
// Wait for the net state (< 5ms) while (netStateFuture.isBusy()) { Sleep(1); }
if (netStateFuture.hasResult()) { sce::Toolkit::NP::NetStateBasic *netState = netStateFuture.get(); ProfileManager.SetNetworkStatus(netState->connectionStatus == SCE_NET_CTL_STATE_IPOBTAINED); } else { // Error message means we're disconnected ProfileManager.SetNetworkStatus(false); }
// // Register Client ID for Auth// ret = sce::Toolkit::NP::Interface::registerClientId(CLIENT_ID_FOR_SAMPLE);// if (ret < 0) // {// app.DebugPrintf("Failed to register Auth Client ID : 0x%x\n", ret);// assert(0);// }
}
void OrbisNPToolkit::createNPSession(){#define CURRENT_SESSION_ATTR_NUMS 5#define SESSION_IMAGE_PATH "/app0/orbis/session_image.png"#define SESSION_STATUS "Minecraft online game (this text needs defined and localised)"#define SESSION_NAME "Minecraft(this text needs defined and localised)"
static const int maxSlots = 8;
SceUserServiceUserId userId = SCE_USER_SERVICE_USER_ID_INVALID; int ret = sceUserServiceGetInitialUser(&userId); if( ret < 0 ) { app.DebugPrintf("Couldn't retrieve user ID 0x%x ...\n",ret); }
sce::Toolkit::NP::CreateNpSessionRequest createSessionRequest; memset(&createSessionRequest,0,sizeof(createSessionRequest)); strncpy(createSessionRequest.sessionName,SESSION_NAME,strlen(SESSION_NAME)); createSessionRequest.sessionTypeFlag = SCE_TOOLKIT_NP_CREATE_SESSION_TYPE_PUBLIC; createSessionRequest.maxSlots = maxSlots; strncpy(createSessionRequest.sessionImgPath,SESSION_IMAGE_PATH,strlen(SESSION_IMAGE_PATH)); strncpy(createSessionRequest.sessionStatus,SESSION_STATUS,strlen(SESSION_STATUS)); createSessionRequest.userInfo.userId = userId; char test[3] = {'R','K','B'}; createSessionRequest.sessionData= test; createSessionRequest.sessionDataSize = 3; ret = sce::Toolkit::NP::Sessions::Interface::create(&createSessionRequest,&sm_createJoinFuture);}
void OrbisNPToolkit::joinNPSession(){ SceUserServiceUserId userId = SCE_USER_SERVICE_USER_ID_INVALID; int ret = sceUserServiceGetInitialUser(&userId); if( ret < 0 ) { app.DebugPrintf("Couldn't retrieve user ID 0x%x ...\n",ret); }
sce::Toolkit::NP::JoinNpSessionRequest joinSessionRequest; memset(&joinSessionRequest,0,sizeof(joinSessionRequest)); // still to sort this out ORBIS_STUBBED;}
void OrbisNPToolkit::leaveNPSession(){
}
void OrbisNPToolkit::getMessageData(SceNpGameCustomDataEventParam* paramData){
sce::Toolkit::NP::GameCustomDataGameDataRequest req; SceUserServiceUserId userId = SCE_USER_SERVICE_USER_ID_INVALID; int ret = sceUserServiceGetInitialUser(&userId); if( ret < 0 ) { //Error handling }
req.itemId = paramData->itemId; req.userInfo.userId = userId; ret = sce::Toolkit::NP::GameCustomData::Interface::getGameData(&req, &m_messageData); if( ret < 0 ) { //Error handling } else { //Error handling }
// // // sce::Toolkit::NP::GameDataRequest req; // SceUserServiceUserId userId = SCE_USER_SERVICE_USER_ID_INVALID;// int ret = sceUserServiceGetInitialUser(&userId); // if( ret < 0 ) {// //Error handling // }// // req.itemId = ItemID ;// req.userInfo.userId = userId;// sce::Toolkit::NP::Utilities::Future<sce::Toolkit::NP::MessageAttachment> actualMessage;// ret = sce::Toolkit::NP::GameCustomData::Interface::getGameData(&req,&actualMessage,false);// if( ret < 0 ) {// //Error handling// } else {// //Error handling// }// // // // // // // // // app.DebugPrintf("Session Invitation \n");// sce::Toolkit::NP::ReceiveMessageRequest request; // request.eventParamData = paramData;// request.msgType = SCE_TOOLKIT_NP_MESSAGE_TYPE_CUSTOM_DATA;// sceUserServiceGetInitialUser(&request.userInfo.userId);// sce::Toolkit::NP::Messaging::Interface::retrieveMessageAttachmentFromEvent(&request,&m_messageData);}