diff --git a/.gitignore b/.gitignore index 955c9b55..3e11eb88 100644 --- a/.gitignore +++ b/.gitignore @@ -30,6 +30,7 @@ /Minecraft.World/*ReleaseForArt # PS3 SPU +/Minecraft.Client/PS3/SPU_Tasks/objFiles/ /Minecraft.Client/PS3/SPU_Tasks/Texture_blit/PS3* /Minecraft.Client/PS3/SPU_Tasks/LevelRenderer_FindNearestChunk/PS3* /Minecraft.Client/PS3/SPU_Tasks/LevelRenderer_cull/PS3* diff --git a/Minecraft.Client/Common/Leaderboards/LeaderboardManager.cpp b/Minecraft.Client/Common/Leaderboards/LeaderboardManager.cpp index d7bed46f..f7f1c230 100644 --- a/Minecraft.Client/Common/Leaderboards/LeaderboardManager.cpp +++ b/Minecraft.Client/Common/Leaderboards/LeaderboardManager.cpp @@ -9,7 +9,7 @@ const wstring LeaderboardManager::filterNames[eNumFilterModes] = L"Friends", L"MyScore", L"TopRank" }; -#if !defined(_WINDOWS64) && !defined(_DURANGO) && !defined(__ORBIS__) && !defined(__PS3__) && !defined(__PSVITA__) && !defined(_XBOX) +#if !defined(_DURANGO) && !defined(_WINDOWS64) && !defined(_XBOX) // str1k3r - only needed for sony platforms. LeaderboardManager *LeaderboardManager::m_instance = NULL; #endif diff --git a/Minecraft.Client/PS3/Leaderboards/PS3LeaderboardManager.cpp b/Minecraft.Client/PS3/Leaderboards/PS3LeaderboardManager.cpp index 1a1532fb..4c5dd09d 100644 --- a/Minecraft.Client/PS3/Leaderboards/PS3LeaderboardManager.cpp +++ b/Minecraft.Client/PS3/Leaderboards/PS3LeaderboardManager.cpp @@ -2,11 +2,10 @@ #include "PS3LeaderboardManager.h" -#include "base64.h" - -#include "..\PS3_App.h" -#include "..\..\Common\Consoles_App.h" +#include "PS3\PS3_App.h" +#include "PS3\PS3Extras\ShutdownManager.h" +#include "Common\Consoles_App.h" #include "Common\Network\Sony\SQRNetworkManager.h" #include "..\..\..\Minecraft.World\StringHelpers.h" @@ -14,1035 +13,59 @@ #include #include -#include -#include "PS3\PS3Extras\ShutdownManager.h" - -#ifdef __PS3__ LeaderboardManager *LeaderboardManager::m_instance = new PS3LeaderboardManager(); //Singleton instance of the LeaderboardManager -#endif -PS3LeaderboardManager::PS3LeaderboardManager() +PS3LeaderboardManager::PS3LeaderboardManager() : SonyLeaderboardManager() {} + +HRESULT PS3LeaderboardManager::initialiseScoreUtility() { - m_eStatsState = eStatsState_Idle; - - m_titleContext = -1; - - m_myXUID = INVALID_XUID; - - m_scores = NULL; //m_stats = NULL; - - m_statsType = eStatsType_Kills; - m_difficulty = 0; - - m_transactionCtx = 0; - - m_openSessions = 0; - - InitializeCriticalSection(&m_csViewsLock); - - m_running = false; - m_threadScoreboard = NULL; + return sceNpScoreInit(); } -PS3LeaderboardManager::~PS3LeaderboardManager() -{ - m_running = false; - - // 4J-JEV: Wait for thread to stop and hope it doesn't take too long. - long long startShutdown = System::currentTimeMillis(); - while (m_threadScoreboard->isRunning()) - { - Sleep(1); - assert( (System::currentTimeMillis() - startShutdown) < 16 ); - } - - delete m_threadScoreboard; - - DeleteCriticalSection(&m_csViewsLock); +bool PS3LeaderboardManager::scoreUtilityAlreadyInitialised(HRESULT hr) +{ + return hr == SCE_NP_COMMUNITY_ERROR_ALREADY_INITIALIZED; } -int PS3LeaderboardManager::scoreboardThreadEntry(LPVOID lpParam) -{ - ShutdownManager::HasStarted(ShutdownManager::eLeaderboardThread); - PS3LeaderboardManager *self = reinterpret_cast(lpParam); - - self->m_running = true; - app.DebugPrintf("[LeaderboardManager] Thread started.\n"); - - bool needsWriting = false; - do - { - if (self->m_openSessions > 0 || needsWriting) - { - self->scoreboardThreadInternal(); - } - - EnterCriticalSection(&self->m_csViewsLock); - needsWriting = self->m_views.size() > 0; - LeaveCriticalSection(&self->m_csViewsLock); - - // 4J Stu - We can't write while we aren't signed in to live - if (!ProfileManager.IsSignedInLive(ProfileManager.GetPrimaryPad())) - { - needsWriting = false; - } - - if ( (!needsWriting) && (self->m_eStatsState != eStatsState_Getting) ) - { - Sleep(50); // 4J-JEV: When we're not reading or writing. - } - - } while ( (self->m_running || self->m_eStatsState == eStatsState_Getting || needsWriting) - && ShutdownManager::ShouldRun(ShutdownManager::eLeaderboardThread) - ); - - // 4J-JEV, moved this here so setScore can finish up. - sceNpScoreDestroyTitleCtx(self->m_titleContext); - sceNpScoreTerm(); - app.DebugPrintf("[LeaderboardManager] Thread closed.\n"); - ShutdownManager::HasFinished(ShutdownManager::eLeaderboardThread); - return 0; +HRESULT PS3LeaderboardManager::createTitleContext(const SceNpId &npId) +{ + return sceNpScoreCreateTitleCtx(&s_npCommunicationId, &s_npCommunicationPassphrase, &npId); } -void PS3LeaderboardManager::scoreboardThreadInternal() +HRESULT PS3LeaderboardManager::destroyTitleContext(int titleContext) { - // 4J-JEV: Just initialise the context the once now. - if (m_titleContext == -1) - { - //CD - Init NP Score - int ret = sceNpScoreInit(); - if ( ret < 0 ) - { - if ( ret != SCE_NP_COMMUNITY_ERROR_ALREADY_INITIALIZED ) - { - app.DebugPrintf("[LeaderboardManager] sceNpScoreInit() failed. ret = 0x%x\n", ret); - return; - } - else - { - app.DebugPrintf("[LeaderboardManager] sceNpScoreInit() already initialised, (0x%x)\n", ret); - } - } - - - SceNpId npId; - ret = sceNpManagerGetNpId(&npId); - if (ret < 0) - { - app.DebugPrintf("[LeaderboardManager] OpenSession(): sceNpManagerGetNpId FAILED, ret == %X.\n", ret); - return; - } - - ret = sceNpScoreCreateTitleCtx( &s_npCommunicationId, &s_npCommunicationPassphrase, &npId ); - - if (ret < 0) - { - app.DebugPrintf("[LeaderboardManager] OpenSession(): sceNpScoreCreateTitleCtx FAILED, ret == %X.\n", ret); - return; - } - else - { - m_titleContext = ret; - } - } - else assert( m_titleContext > 0 ); //Paranoia - - - switch (m_eStatsState) - { - case eStatsState_Getting: - switch(m_eFilterMode) - { - case eFM_MyScore: - case eFM_Friends: - getScoreByIds(); - break; - case eFM_TopRank: - getScoreByRange(); - break; - } - break; - - case eStatsState_Canceled: - case eStatsState_Failed: - case eStatsState_Ready: - case eStatsState_Idle: - - // 4J-JEV: Moved this here, I don't want reading and - // writing going on at the same time. - // -- - // 4J-JEV: Writing no longer changes the manager state, - // we'll manage the write queue seperately. - - EnterCriticalSection(&m_csViewsLock); - bool hasWork = !m_views.empty(); - LeaveCriticalSection(&m_csViewsLock); - - if (hasWork) - { - setScore(); - } - - break; - } + return sceNpScoreDestroyTitleCtx(titleContext); } -bool PS3LeaderboardManager::getScoreByIds() +HRESULT PS3LeaderboardManager::createTransactionContext(int titleContext) { - if (m_eStatsState == eStatsState_Canceled) return false; - - // ---------------------------- - CellRtcTick last_sort_date; - SceNpScoreRankNumber mTotalRecord; - - SceNpId *npIds = NULL; - - - int ret; - uint32_t num = 0; - - SceNpScorePlayerRankData *ptr; - SceNpScoreComment *comments; - // ---------------------------- - - // Check for invalid LManager state. - assert( m_eFilterMode == eFM_Friends - || m_eFilterMode == eFM_MyScore); - - SceNpId myNpId; - ret = sceNpManagerGetNpId(&myNpId); - if (ret<0) goto error1; - - // Get queried users. - if (m_eFilterMode == eFM_Friends) - { - // 4J-JEV: Doesn't include the player (its just their friends). - ret = sceNpBasicGetFriendListEntryCount(&num); - num += 1; - - npIds = new SceNpId[num]; - - for (uint32_t i = 0; i < num-1; i++) - { - ret = sceNpBasicGetFriendListEntry(i, npIds+i); - if (ret<0) goto error2; - - } - npIds[num-1] = myNpId; // 4J-JEV: Append player to end of query. - } - else if (m_eFilterMode == eFM_MyScore) - { - num = 1; - npIds = new SceNpId[1]; - npIds[0] = myNpId; - } - - ret = sceNpScoreCreateTransactionCtx(m_titleContext); - if (m_eStatsState == eStatsState_Canceled) - { - // Cancel operation has been called, abort. - app.DebugPrintf("[LeaderboardManager]\tgetScoreByIds() - m_eStatsState == eStatsState_Canceled.\n"); - - sceNpScoreDestroyTransactionCtx(ret); - - if (npIds != NULL) delete [] npIds; - return false; - } - else if (ret < 0) - { - // Error occurred creating a transacion, abort. - app.DebugPrintf("[LeaderboardManager]\tgetScoreByIds() - createTransaction failed, ret=0x%X\n", ret); - - m_eStatsState = eStatsState_Failed; - - if (npIds != NULL) delete [] npIds; - return false; - } - else - { - // Transaction created successfully, continue. - m_transactionCtx = ret; - app.DebugPrintf("[LeaderboardManager] REQUEST ID A = 0x%X\n", m_transactionCtx); - } - - ptr = new SceNpScorePlayerRankData[num]; - comments = new SceNpScoreComment[num]; - - /* app.DebugPrintf("sceNpScoreGetRankingByNpId(\n\t transaction=%i,\n\t boardID=0,\n\t npId=%i,\n\t friendCount*sizeof(SceNpId)=%i*%i=%i,\ - rankData=%i,\n\t friendCount*sizeof(SceNpScorePlayerRankData)=%i,\n\t NULL, 0, NULL, 0,\n\t friendCount=%i,\n...\n", - transaction, npId, friendCount, sizeof(SceNpId), friendCount*sizeof(SceNpId), - rankData, friendCount*sizeof(SceNpScorePlayerRankData), friendCount - ); */ - - int boardId = getBoardId(m_difficulty, m_statsType); - ret = sceNpScoreGetRankingByNpId( - m_transactionCtx, - boardId, // BoardId - - npIds, sizeof(SceNpId) * num, //IN: Player IDs - ptr, sizeof(SceNpScorePlayerRankData) * num, //OUT: Rank Data - - comments, sizeof(SceNpScoreComment) * num, //OUT: Comments - - NULL, 0, // GameData. (unused) - - num, - - &last_sort_date, - &mTotalRecord, - - NULL // Reserved, specify null. - ); - - if (ret == SCE_NP_COMMUNITY_ERROR_ABORTED) - { - app.DebugPrintf("[LeaderboardManager] getScoreByIds(): 'sceNpScoreGetRankingByRange' aborted (0x%X).\n", ret); - - ret = sceNpScoreDestroyTransactionCtx(m_transactionCtx); - m_transactionCtx = 0; - - delete [] ptr; - delete [] comments; - delete [] npIds; - - return false; - } - else if (ret == SCE_NP_COMMUNITY_SERVER_ERROR_GAME_RANKING_NOT_FOUND) - { - app.DebugPrintf("[LeaderboardManager] getScoreByIds(): Game ranking not found.\n"); - - ret = sceNpScoreDestroyTransactionCtx(m_transactionCtx); - m_transactionCtx = 0; - - delete [] ptr; - delete [] comments; - delete [] npIds; - - m_scores = NULL; - m_readCount = 0; - m_maxRank = num; - - m_eStatsState = eStatsState_Ready; - return false; - } - else if (ret<0) goto error3; - - // Return. - sceNpScoreDestroyTransactionCtx(m_transactionCtx); - m_transactionCtx = 0; - - m_readCount = num; - - // Filter scorers and construct output structure. - if (m_scores != NULL) delete [] m_scores; - m_scores = new ReadScore[m_readCount]; - convertToOutput(m_readCount, m_scores, ptr, comments); - m_maxRank = m_readCount; - - app.DebugPrintf( - "[LeaderboardManager] getScoreByIds(), Success!\n" - "\t Board %i\n" - "\t %i of %i results have an entry\n" - "1stScore=%i\n", - boardId, - m_readCount, num, - ptr->rankData.scoreValue - ); - - // Sort scores - std::sort(m_scores, m_scores + m_readCount, SortByRank); - - delete [] ptr; - delete [] comments; - delete [] npIds; - - m_eStatsState = eStatsState_Ready; - return true; - - // Error. -error3: - if (ret!=SCE_NP_COMMUNITY_ERROR_ABORTED) //0x8002a109 - sceNpScoreDestroyTransactionCtx(m_transactionCtx); - m_transactionCtx = 0; - delete [] ptr; - delete [] comments; -error2: - if (npIds != NULL) delete [] npIds; -error1: - if (m_eStatsState != eStatsState_Canceled) m_eStatsState = eStatsState_Failed; - app.DebugPrintf("[LeaderboardManger] getScoreByIds() FAILED, ret=0x%X\n", ret); - return false; + return sceNpLookupCreateTransactionCtx(titleContext); } -bool PS3LeaderboardManager::getScoreByRange() +HRESULT PS3LeaderboardManager::abortTransactionContext(int transactionContext) { - CellRtcTick last_sort_date; - SceNpScoreRankNumber mTotalRecord; - - unsigned int num = m_readCount; - SceNpScoreRankData *ptr; - SceNpScoreComment *comments; - - assert(m_eFilterMode == eFM_TopRank); - - int ret = sceNpScoreCreateTransactionCtx(m_titleContext); - if (m_eStatsState == eStatsState_Canceled) - { - // Cancel operation has been called, abort. - app.DebugPrintf("[LeaderboardManager]\tgetScoreByRange() - m_eStatsState == eStatsState_Canceled.\n"); - sceNpScoreDestroyTransactionCtx(ret); - return false; - } - else if (ret < 0) - { - // Error occurred creating a transacion, abort. - m_eStatsState = eStatsState_Failed; - app.DebugPrintf("[LeaderboardManager]\tgetScoreByRange() - createTransaction failed, ret=0x%X\n", ret); - return false; - } - else - { - // Transaction created successfully, continue. - m_transactionCtx = ret; - app.DebugPrintf("[LeaderboardManager] REQUEST ID B = 0x%X\n", m_transactionCtx ); - } - - ptr = new SceNpScoreRankData[num]; - comments = new SceNpScoreComment[num]; - - int boardId = getBoardId(m_difficulty, m_statsType); - ret = sceNpScoreGetRankingByRange( - m_transactionCtx, - boardId, // BoardId - - m_startIndex, - - ptr, sizeof(SceNpScoreRankData) * num, //OUT: Rank Data - - comments, sizeof(SceNpScoreComment) * num, //OUT: Comment Data - - NULL, 0, // GameData. - - num, - - &last_sort_date, - &m_maxRank, // 'Total number of players registered in the target scoreboard.' - - NULL // Reserved, specify null. - ); - - if (ret == SCE_NP_COMMUNITY_ERROR_ABORTED) - { - app.DebugPrintf("[LeaderboardManager] getScoreByRange(): 'sceNpScoreGetRankingByRange' aborted (0x%X).\n", ret); - - ret = sceNpScoreDestroyTransactionCtx(m_transactionCtx); - m_transactionCtx = 0; - - delete [] ptr; - delete [] comments; - - return false; - } - else if (ret == SCE_NP_COMMUNITY_SERVER_ERROR_GAME_RANKING_NOT_FOUND) - { - app.DebugPrintf("[LeaderboardManager] getScoreByRange(): Game ranking not found."); - - ret = sceNpScoreDestroyTransactionCtx(m_transactionCtx); - m_transactionCtx = 0; - - delete [] ptr; - delete [] comments; - - m_scores = NULL; - m_readCount = 0; - - m_eStatsState = eStatsState_Ready; - return false; - } - else if (ret<0) goto error2; - else - { - app.DebugPrintf("[LeaderboardManager] getScoreByRange(), success, 1stScore=%i.\n", ptr->scoreValue); - } - - // Return. - sceNpScoreDestroyTransactionCtx(m_transactionCtx); - m_transactionCtx = 0; - - //m_stats = ptr; //Maybe: addPadding(num,ptr); - - if (m_scores != NULL) delete [] m_scores; - m_readCount = ret; - m_scores = new ReadScore[m_readCount]; - for (int i=0; i 0) - ret = eStatsReturn_Success; - - if (m_readListener != NULL) - { - app.DebugPrintf("[LeaderboardManager] OnStatsReadComplete(%i, %i, _), m_readCount=%i.\n", ret, m_maxRank, m_readCount); - m_readListener->OnStatsReadComplete(ret, m_maxRank, view); - } - - m_eStatsState = eStatsState_Idle; - - delete [] m_scores; - m_scores = NULL; - } - break; - - case eStatsState_Failed: - { - view.m_numQueries = 0; - view.m_queries = NULL; - - if ( m_readListener != NULL ) - m_readListener->OnStatsReadComplete(eStatsReturn_NetworkError, 0, view); - - m_eStatsState = eStatsState_Idle; - } - break; - - case eStatsState_Canceled: - { - m_eStatsState = eStatsState_Idle; - } - break; - - default: // Getting or Idle. - break; - } +HRESULT PS3LeaderboardManager::getFriendsList(const SceNpId &myNpId, SceNpId* &npIds, uint32_t &len) +{ + EFilterMode filterMode = m_eFilterMode; + m_eFilterMode = eFM_Friends; + + HRESULT ret = fillByIdsQuery(myNpId, npIds, len); + + m_eFilterMode = filterMode; + + return ret; } -bool PS3LeaderboardManager::OpenSession() +char *PS3LeaderboardManager::getComment(SceNpScoreComment *comment) { - if (m_openSessions == 0) - { - if (m_threadScoreboard == NULL) - { - m_threadScoreboard = new C4JThread(&scoreboardThreadEntry, this, "4JScoreboard"); - m_threadScoreboard->SetProcessor(CPU_CORE_LEADERBOARDS); - m_threadScoreboard->SetPriority(THREAD_PRIORITY_BELOW_NORMAL); - m_threadScoreboard->Run(); - } - - app.DebugPrintf("[LeaderboardManager] OpenSession(): Starting sceNpScore utility.\n"); - } - else - { - app.DebugPrintf("[LeaderboardManager] OpenSession(): Another session opened, total=%i\n", m_openSessions+1); - } - - m_openSessions++; - return true; -} - -void PS3LeaderboardManager::CloseSession() -{ - m_openSessions--; - - if (m_openSessions == 0) app.DebugPrintf("[LeaderboardManager] CloseSession(): Quitting sceNpScore utility.\n"); - else app.DebugPrintf("[LeaderboardManager] CloseSession(): %i sessions still open.\n", m_openSessions); -} - -void PS3LeaderboardManager::DeleteSession() {} - -bool PS3LeaderboardManager::WriteStats(unsigned int viewCount, ViewIn views) -{ - // Need to cancel read/write operation first. - //if (m_eStatsState != eStatsState_Idle) return false; - - // Write relevant parameters. - //RegisterScore *regScore = reinterpret_cast(views); - - EnterCriticalSection(&m_csViewsLock); - for (int i=0; idata; - - for (int i = 0; i < SCE_NP_SCORE_COMMENT_MAXLEN; i++) - { - int sByte = (i*5) / 8; - int eByte = (5+(i*5)) / 8; - int dIndex = (i*5) % 8; - - unsigned char fivebits = 0; - - fivebits = *(bytes+sByte) << dIndex; - - if (eByte != sByte) - fivebits = fivebits | *(bytes+eByte) >> (8-dIndex); - - fivebits = (fivebits>>3) & 0x1F; - - if (fivebits < 10) // 0 - 9 - chars[i] = '0' + fivebits; - else if (fivebits < 32) // A - V - chars[i] = 'A' + (fivebits-10); - else - assert(false); - } - - toSymbols(out->data); -} - -void PS3LeaderboardManager::fromBase32(void *out, SceNpScoreComment *in) -{ - PBYTE bytes = (PBYTE) out; - ZeroMemory(bytes, RECORD_SIZE); - - fromSymbols(in->data); - - char ch[2] = { 0, 0 }; - for (int i = 0; i < SCE_NP_SCORE_COMMENT_MAXLEN; i++) - { - ch[0] = in->data[i]; - unsigned char fivebits = strtol(ch, NULL, 32) << 3; - - int sByte = (i*5) / 8; - int eByte = (5+(i*5)) / 8; - int dIndex = (i*5) % 8; - - *(bytes + sByte) = *(bytes+sByte) | (fivebits >> dIndex); - - if (eByte != sByte) - *(bytes + eByte) = fivebits << (8-dIndex); - } -} - -char symbBase32[32] = { - ' ', '!','\"', '#', '$', '%', '&','\'', '(', ')', - '*', '+', '`', '-', '.', '/', ':', ';', '<', '=', - '>', '?', '[','\\', ']', '^', '_', '{', '|', '}', - '~', '@' -}; - -char charBase32[32] = { - '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', - 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', - 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', - 'U', 'V' -}; - -void PS3LeaderboardManager::toSymbols(char *str) -{ - for (int i = 0; i < 63; i++) - { - for (int j=0; j < 32; j++) - { - if (str[i]==charBase32[j]) - str[i] =symbBase32[j]; - } - } -} - -void PS3LeaderboardManager::fromSymbols(char *str) -{ - for (int i = 0; i < 63; i++) - { - for (int j=0; j < 32; j++) - { - if (str[i]==symbBase32[j]) - str[i] =charBase32[j]; - } - } -} - -bool PS3LeaderboardManager::test_string(string testing) -{ -#ifndef _CONTENT_PACKAGE - static SceNpScoreComment comment; - ZeroMemory(&comment, sizeof(SceNpScoreComment)); - memcpy(&comment, testing.c_str(), SCE_NP_SCORE_COMMENT_MAXLEN); - - int ctx = sceNpScoreCreateTransactionCtx(m_titleContext); - if (ctx<0) return false; - - int ret = sceNpScoreCensorComment(ctx, (const void *) &comment, NULL); - - if (ret == SCE_NP_COMMUNITY_SERVER_ERROR_CENSORED) - { - //app.DebugPrintf("\n[TEST_STRING]: REJECTED "); - } - else if (ret < 0) - { - sceNpScoreDestroyTransactionCtx(ctx); - return false; - } - else - { - //app.DebugPrintf("\n[TEST_STRING]: permitted "); - } - - //app.DebugPrintf("'%s'\n", comment.data); - sceNpScoreDestroyTransactionCtx(ctx); - return true; -#else - return true; -#endif -} - -void PS3LeaderboardManager::initReadScoreStruct(ReadScore &out, SceNpScoreRankData &rankData) -{ - ZeroMemory(&out, sizeof(ReadScore)); - - // Init rank and onlineID - out.m_uid.setOnlineID( rankData.npId.handle, true ); - out.m_rank = rankData.rank; - - // Convert to wstring and copy name. - wstring wstrName = convStringToWstring( string(rankData.onlineName.data) ).c_str(); - //memcpy(&out.m_name, wstrName.c_str(), XUSER_NAME_SIZE); - out.m_name=wstrName; -} - -void PS3LeaderboardManager::fillReadScoreStruct(ReadScore &out, SceNpScoreComment &comment) -{ - StatsData statsData; - fromBase32( (void *) &statsData, &comment ); - - switch (statsData.m_statsType) - { - case eStatsType_Farming: - out.m_statsSize = 6; - out.m_statsData[0] = statsData.m_farming.m_eggs; - out.m_statsData[1] = statsData.m_farming.m_wheat; - out.m_statsData[2] = statsData.m_farming.m_mushroom; - out.m_statsData[3] = statsData.m_farming.m_sugarcane; - out.m_statsData[4] = statsData.m_farming.m_milk; - out.m_statsData[5] = statsData.m_farming.m_pumpkin; - break; - case eStatsType_Mining: - out.m_statsSize = 7; - out.m_statsData[0] = statsData.m_mining.m_dirt; - out.m_statsData[1] = statsData.m_mining.m_cobblestone; - out.m_statsData[2] = statsData.m_mining.m_sand; - out.m_statsData[3] = statsData.m_mining.m_stone; - out.m_statsData[4] = statsData.m_mining.m_gravel; - out.m_statsData[5] = statsData.m_mining.m_clay; - out.m_statsData[6] = statsData.m_mining.m_obsidian; - break; - case eStatsType_Kills: - out.m_statsSize = 7; - out.m_statsData[0] = statsData.m_kills.m_zombie; - out.m_statsData[1] = statsData.m_kills.m_skeleton; - out.m_statsData[2] = statsData.m_kills.m_creeper; - out.m_statsData[3] = statsData.m_kills.m_spider; - out.m_statsData[4] = statsData.m_kills.m_spiderJockey; - out.m_statsData[5] = statsData.m_kills.m_zombiePigman; - out.m_statsData[6] = statsData.m_kills.m_slime; - break; - case eStatsType_Travelling: - out.m_statsSize = 4; - out.m_statsData[0] = statsData.m_travelling.m_walked; - out.m_statsData[1] = statsData.m_travelling.m_fallen; - out.m_statsData[2] = statsData.m_travelling.m_minecart; - out.m_statsData[3] = statsData.m_travelling.m_boat; - break; - } -} - -bool PS3LeaderboardManager::SortByRank(const ReadScore &lhs, const ReadScore &rhs) -{ - return lhs.m_rank < rhs.m_rank; + return comment->data; } \ No newline at end of file diff --git a/Minecraft.Client/PS3/Leaderboards/PS3LeaderboardManager.h b/Minecraft.Client/PS3/Leaderboards/PS3LeaderboardManager.h index 3985a4db..dc7ab67c 100644 --- a/Minecraft.Client/PS3/Leaderboards/PS3LeaderboardManager.h +++ b/Minecraft.Client/PS3/Leaderboards/PS3LeaderboardManager.h @@ -1,110 +1,33 @@ #pragma once -#include "..\..\Common\Leaderboards\LeaderboardManager.h" -#include "..\..\..\Minecraft.World\x64headers\extraX64.h" +#include "Common\Leaderboards\SonyLeaderboardManager.h" +#include "Common\Leaderboards\LeaderboardManager.h" #include "PS3\Passphrase\ps3__np_conf.h" -using namespace std; - -class PS3LeaderboardManager : public LeaderboardManager +class PS3LeaderboardManager : public SonyLeaderboardManager { -protected: - enum EStatsState - { - eStatsState_Idle, - eStatsState_Getting, - eStatsState_Failed, - eStatsState_Ready, - eStatsState_Canceled, - //eStatsState_Writing, - eStatsState_Max - }; - public: PS3LeaderboardManager(); - virtual ~PS3LeaderboardManager(); -private: - unsigned short m_openSessions; +protected: - C4JThread *m_threadScoreboard; - bool m_running; + virtual HRESULT initialiseScoreUtility(); - int32_t m_titleContext; - int m_transactionCtx; + virtual bool scoreUtilityAlreadyInitialised(HRESULT hr); - //SceNpId m_myNpId; + virtual HRESULT createTitleContext(const SceNpId &npId); - static int scoreboardThreadEntry(LPVOID lpParam); - void scoreboardThreadInternal(); + virtual HRESULT destroyTitleContext(int titleContext); - bool getScoreByIds(); - bool getScoreByRange(); + virtual HRESULT createTransactionContext(int titleContext); - bool setScore(); - queue m_views; + virtual HRESULT abortTransactionContext(int transactionContext); - CRITICAL_SECTION m_csViewsLock; + virtual HRESULT destroyTransactionContext(int transactionContext); - EStatsState m_eStatsState; //State of the stats read -// EFilterMode m_eFilterMode; + virtual HRESULT getFriendsList(const SceNpId &myNpId, SceNpId* &npIds, uint32_t &len); - ReadScore *m_scores; - unsigned int m_maxRank; - //SceNpScoreRankData *m_stats; - -public: - virtual void Tick(); - - //Open a session - virtual bool OpenSession(); - - //Close a session - virtual void CloseSession(); - - //Delete a session - virtual void DeleteSession(); - - //Write the given stats - //This is called synchronously and will not free any memory allocated for views when it is done - virtual bool WriteStats(unsigned int viewCount, ViewIn views); - - virtual bool ReadStats_Friends(LeaderboardReadListener *listener, int difficulty, EStatsType type, PlayerUID myUID, unsigned int startIndex, unsigned int readCount); - virtual bool ReadStats_MyScore(LeaderboardReadListener *listener, int difficulty, EStatsType type, PlayerUID myUID, unsigned int readCount); - virtual bool ReadStats_TopRank(LeaderboardReadListener *listener, int difficulty, EStatsType type, unsigned int startIndex, unsigned int readCount); - - //Perform a flush of the stats - virtual void FlushStats(); - - //Cancel the current operation - virtual void CancelOperation(); - - //Is the leaderboard manager idle. - virtual bool isIdle(); - -private: - int getBoardId(int difficulty, EStatsType); - - //LeaderboardManager::ReadScore *filterJustScorers(unsigned int &num, LeaderboardManager::ReadScore *friendsData); - - SceNpScorePlayerRankData *addPadding(unsigned int num, SceNpScoreRankData *rankData); - - void convertToOutput(unsigned int &num, ReadScore *out, SceNpScorePlayerRankData *rankData, SceNpScoreComment *comm); - - void toBinary(void *out, SceNpScoreComment *in); - void fromBinary(SceNpScoreComment **out, void *in); - - void toBase32(SceNpScoreComment *out, void *in); - void fromBase32(void *out, SceNpScoreComment *in); - - void toSymbols(char *); - void fromSymbols(char *); - - bool test_string(string); - - void initReadScoreStruct(ReadScore &out, SceNpScoreRankData &); - void fillReadScoreStruct(ReadScore &out, SceNpScoreComment &comment); - - static bool SortByRank(const ReadScore &lhs, const ReadScore &rhs); + virtual char * getComment(SceNpScoreComment *comment); }; + diff --git a/Minecraft.Client/PS3/SPU_Tasks/ObjFiles/ContentPackage/ChunkUpdate.ppu.o b/Minecraft.Client/PS3/SPU_Tasks/ObjFiles/ContentPackage/ChunkUpdate.ppu.o deleted file mode 100644 index 6a5102cd..00000000 Binary files a/Minecraft.Client/PS3/SPU_Tasks/ObjFiles/ContentPackage/ChunkUpdate.ppu.o and /dev/null differ diff --git a/Minecraft.Client/PS3/SPU_Tasks/ObjFiles/ContentPackage/CompressedTile.ppu.o b/Minecraft.Client/PS3/SPU_Tasks/ObjFiles/ContentPackage/CompressedTile.ppu.o deleted file mode 100644 index 232880a8..00000000 Binary files a/Minecraft.Client/PS3/SPU_Tasks/ObjFiles/ContentPackage/CompressedTile.ppu.o and /dev/null differ diff --git a/Minecraft.Client/PS3/SPU_Tasks/ObjFiles/ContentPackage/CompressedTileStorage_compress.ppu.o b/Minecraft.Client/PS3/SPU_Tasks/ObjFiles/ContentPackage/CompressedTileStorage_compress.ppu.o deleted file mode 100644 index cf1b61e0..00000000 Binary files a/Minecraft.Client/PS3/SPU_Tasks/ObjFiles/ContentPackage/CompressedTileStorage_compress.ppu.o and /dev/null differ diff --git a/Minecraft.Client/PS3/SPU_Tasks/ObjFiles/ContentPackage/CompressedTileStorage_getData.ppu.o b/Minecraft.Client/PS3/SPU_Tasks/ObjFiles/ContentPackage/CompressedTileStorage_getData.ppu.o deleted file mode 100644 index fa758a71..00000000 Binary files a/Minecraft.Client/PS3/SPU_Tasks/ObjFiles/ContentPackage/CompressedTileStorage_getData.ppu.o and /dev/null differ diff --git a/Minecraft.Client/PS3/SPU_Tasks/ObjFiles/ContentPackage/LevelRenderer_FindNearestChunk.ppu.o b/Minecraft.Client/PS3/SPU_Tasks/ObjFiles/ContentPackage/LevelRenderer_FindNearestChunk.ppu.o deleted file mode 100644 index 7a8e75e3..00000000 Binary files a/Minecraft.Client/PS3/SPU_Tasks/ObjFiles/ContentPackage/LevelRenderer_FindNearestChunk.ppu.o and /dev/null differ diff --git a/Minecraft.Client/PS3/SPU_Tasks/ObjFiles/ContentPackage/LevelRenderer_cull.ppu.o b/Minecraft.Client/PS3/SPU_Tasks/ObjFiles/ContentPackage/LevelRenderer_cull.ppu.o deleted file mode 100644 index 5e517cfb..00000000 Binary files a/Minecraft.Client/PS3/SPU_Tasks/ObjFiles/ContentPackage/LevelRenderer_cull.ppu.o and /dev/null differ diff --git a/Minecraft.Client/PS3/SPU_Tasks/ObjFiles/ContentPackage/LevelRenderer_zSort.ppu.o b/Minecraft.Client/PS3/SPU_Tasks/ObjFiles/ContentPackage/LevelRenderer_zSort.ppu.o deleted file mode 100644 index 1cf8cff7..00000000 Binary files a/Minecraft.Client/PS3/SPU_Tasks/ObjFiles/ContentPackage/LevelRenderer_zSort.ppu.o and /dev/null differ diff --git a/Minecraft.Client/PS3/SPU_Tasks/ObjFiles/ContentPackage/PerlinNoise.ppu.o b/Minecraft.Client/PS3/SPU_Tasks/ObjFiles/ContentPackage/PerlinNoise.ppu.o deleted file mode 100644 index 61162aaf..00000000 Binary files a/Minecraft.Client/PS3/SPU_Tasks/ObjFiles/ContentPackage/PerlinNoise.ppu.o and /dev/null differ diff --git a/Minecraft.Client/PS3/SPU_Tasks/ObjFiles/ContentPackage/Renderer_TextureUpdate.ppu.o b/Minecraft.Client/PS3/SPU_Tasks/ObjFiles/ContentPackage/Renderer_TextureUpdate.ppu.o deleted file mode 100644 index 0bfa4a82..00000000 Binary files a/Minecraft.Client/PS3/SPU_Tasks/ObjFiles/ContentPackage/Renderer_TextureUpdate.ppu.o and /dev/null differ diff --git a/Minecraft.Client/PS3/SPU_Tasks/ObjFiles/ContentPackage/Texture_blit.ppu.o b/Minecraft.Client/PS3/SPU_Tasks/ObjFiles/ContentPackage/Texture_blit.ppu.o deleted file mode 100644 index aa361c08..00000000 Binary files a/Minecraft.Client/PS3/SPU_Tasks/ObjFiles/ContentPackage/Texture_blit.ppu.o and /dev/null differ diff --git a/Minecraft.Client/PS3/SPU_Tasks/ObjFiles/Debug/ChunkUpdate.ppu.o b/Minecraft.Client/PS3/SPU_Tasks/ObjFiles/Debug/ChunkUpdate.ppu.o deleted file mode 100644 index d5740114..00000000 Binary files a/Minecraft.Client/PS3/SPU_Tasks/ObjFiles/Debug/ChunkUpdate.ppu.o and /dev/null differ diff --git a/Minecraft.Client/PS3/SPU_Tasks/ObjFiles/Debug/CompressedTile.ppu.o b/Minecraft.Client/PS3/SPU_Tasks/ObjFiles/Debug/CompressedTile.ppu.o deleted file mode 100644 index dbbb1549..00000000 Binary files a/Minecraft.Client/PS3/SPU_Tasks/ObjFiles/Debug/CompressedTile.ppu.o and /dev/null differ diff --git a/Minecraft.Client/PS3/SPU_Tasks/ObjFiles/Debug/CompressedTileStorage_compress.ppu.o b/Minecraft.Client/PS3/SPU_Tasks/ObjFiles/Debug/CompressedTileStorage_compress.ppu.o deleted file mode 100644 index d1dbd20a..00000000 Binary files a/Minecraft.Client/PS3/SPU_Tasks/ObjFiles/Debug/CompressedTileStorage_compress.ppu.o and /dev/null differ diff --git a/Minecraft.Client/PS3/SPU_Tasks/ObjFiles/Debug/CompressedTileStorage_getData.ppu.o b/Minecraft.Client/PS3/SPU_Tasks/ObjFiles/Debug/CompressedTileStorage_getData.ppu.o deleted file mode 100644 index 2a5f0a51..00000000 Binary files a/Minecraft.Client/PS3/SPU_Tasks/ObjFiles/Debug/CompressedTileStorage_getData.ppu.o and /dev/null differ diff --git a/Minecraft.Client/PS3/SPU_Tasks/ObjFiles/Debug/LevelRenderer_FindNearestChunk.ppu.o b/Minecraft.Client/PS3/SPU_Tasks/ObjFiles/Debug/LevelRenderer_FindNearestChunk.ppu.o deleted file mode 100644 index 1c41ca4e..00000000 Binary files a/Minecraft.Client/PS3/SPU_Tasks/ObjFiles/Debug/LevelRenderer_FindNearestChunk.ppu.o and /dev/null differ diff --git a/Minecraft.Client/PS3/SPU_Tasks/ObjFiles/Debug/LevelRenderer_cull.ppu.o b/Minecraft.Client/PS3/SPU_Tasks/ObjFiles/Debug/LevelRenderer_cull.ppu.o deleted file mode 100644 index e9f599f4..00000000 Binary files a/Minecraft.Client/PS3/SPU_Tasks/ObjFiles/Debug/LevelRenderer_cull.ppu.o and /dev/null differ diff --git a/Minecraft.Client/PS3/SPU_Tasks/ObjFiles/Debug/LevelRenderer_zSort.ppu.o b/Minecraft.Client/PS3/SPU_Tasks/ObjFiles/Debug/LevelRenderer_zSort.ppu.o deleted file mode 100644 index 726c5e82..00000000 Binary files a/Minecraft.Client/PS3/SPU_Tasks/ObjFiles/Debug/LevelRenderer_zSort.ppu.o and /dev/null differ diff --git a/Minecraft.Client/PS3/SPU_Tasks/ObjFiles/Debug/PerlinNoise.ppu.o b/Minecraft.Client/PS3/SPU_Tasks/ObjFiles/Debug/PerlinNoise.ppu.o deleted file mode 100644 index 6b30d918..00000000 Binary files a/Minecraft.Client/PS3/SPU_Tasks/ObjFiles/Debug/PerlinNoise.ppu.o and /dev/null differ diff --git a/Minecraft.Client/PS3/SPU_Tasks/ObjFiles/Debug/Renderer_TextureUpdate.ppu.o b/Minecraft.Client/PS3/SPU_Tasks/ObjFiles/Debug/Renderer_TextureUpdate.ppu.o deleted file mode 100644 index d94edcbe..00000000 Binary files a/Minecraft.Client/PS3/SPU_Tasks/ObjFiles/Debug/Renderer_TextureUpdate.ppu.o and /dev/null differ diff --git a/Minecraft.Client/PS3/SPU_Tasks/ObjFiles/Debug/Texture_blit.ppu.o b/Minecraft.Client/PS3/SPU_Tasks/ObjFiles/Debug/Texture_blit.ppu.o deleted file mode 100644 index 9a0f0236..00000000 Binary files a/Minecraft.Client/PS3/SPU_Tasks/ObjFiles/Debug/Texture_blit.ppu.o and /dev/null differ diff --git a/Minecraft.Client/PS3/SPU_Tasks/ObjFiles/Release/ChunkUpdate.ppu.o b/Minecraft.Client/PS3/SPU_Tasks/ObjFiles/Release/ChunkUpdate.ppu.o deleted file mode 100644 index 3f0472d6..00000000 Binary files a/Minecraft.Client/PS3/SPU_Tasks/ObjFiles/Release/ChunkUpdate.ppu.o and /dev/null differ diff --git a/Minecraft.Client/PS3/SPU_Tasks/ObjFiles/Release/CompressedTile.ppu.o b/Minecraft.Client/PS3/SPU_Tasks/ObjFiles/Release/CompressedTile.ppu.o deleted file mode 100644 index 7243c387..00000000 Binary files a/Minecraft.Client/PS3/SPU_Tasks/ObjFiles/Release/CompressedTile.ppu.o and /dev/null differ diff --git a/Minecraft.Client/PS3/SPU_Tasks/ObjFiles/Release/CompressedTileStorage_compress.ppu.o b/Minecraft.Client/PS3/SPU_Tasks/ObjFiles/Release/CompressedTileStorage_compress.ppu.o deleted file mode 100644 index 9d8ddec0..00000000 Binary files a/Minecraft.Client/PS3/SPU_Tasks/ObjFiles/Release/CompressedTileStorage_compress.ppu.o and /dev/null differ diff --git a/Minecraft.Client/PS3/SPU_Tasks/ObjFiles/Release/CompressedTileStorage_getData.ppu.o b/Minecraft.Client/PS3/SPU_Tasks/ObjFiles/Release/CompressedTileStorage_getData.ppu.o deleted file mode 100644 index 8b08d147..00000000 Binary files a/Minecraft.Client/PS3/SPU_Tasks/ObjFiles/Release/CompressedTileStorage_getData.ppu.o and /dev/null differ diff --git a/Minecraft.Client/PS3/SPU_Tasks/ObjFiles/Release/LevelRenderer_FindNearestChunk.ppu.o b/Minecraft.Client/PS3/SPU_Tasks/ObjFiles/Release/LevelRenderer_FindNearestChunk.ppu.o deleted file mode 100644 index 0580db15..00000000 Binary files a/Minecraft.Client/PS3/SPU_Tasks/ObjFiles/Release/LevelRenderer_FindNearestChunk.ppu.o and /dev/null differ diff --git a/Minecraft.Client/PS3/SPU_Tasks/ObjFiles/Release/LevelRenderer_cull.ppu.o b/Minecraft.Client/PS3/SPU_Tasks/ObjFiles/Release/LevelRenderer_cull.ppu.o deleted file mode 100644 index 6a64194f..00000000 Binary files a/Minecraft.Client/PS3/SPU_Tasks/ObjFiles/Release/LevelRenderer_cull.ppu.o and /dev/null differ diff --git a/Minecraft.Client/PS3/SPU_Tasks/ObjFiles/Release/LevelRenderer_zSort.ppu.o b/Minecraft.Client/PS3/SPU_Tasks/ObjFiles/Release/LevelRenderer_zSort.ppu.o deleted file mode 100644 index 758b434b..00000000 Binary files a/Minecraft.Client/PS3/SPU_Tasks/ObjFiles/Release/LevelRenderer_zSort.ppu.o and /dev/null differ diff --git a/Minecraft.Client/PS3/SPU_Tasks/ObjFiles/Release/PerlinNoise.ppu.o b/Minecraft.Client/PS3/SPU_Tasks/ObjFiles/Release/PerlinNoise.ppu.o deleted file mode 100644 index 72dba413..00000000 Binary files a/Minecraft.Client/PS3/SPU_Tasks/ObjFiles/Release/PerlinNoise.ppu.o and /dev/null differ diff --git a/Minecraft.Client/PS3/SPU_Tasks/ObjFiles/Release/Renderer_TextureUpdate.ppu.o b/Minecraft.Client/PS3/SPU_Tasks/ObjFiles/Release/Renderer_TextureUpdate.ppu.o deleted file mode 100644 index 334c1358..00000000 Binary files a/Minecraft.Client/PS3/SPU_Tasks/ObjFiles/Release/Renderer_TextureUpdate.ppu.o and /dev/null differ diff --git a/Minecraft.Client/PS3/SPU_Tasks/ObjFiles/Release/Texture_blit.ppu.o b/Minecraft.Client/PS3/SPU_Tasks/ObjFiles/Release/Texture_blit.ppu.o deleted file mode 100644 index 11f2e58b..00000000 Binary files a/Minecraft.Client/PS3/SPU_Tasks/ObjFiles/Release/Texture_blit.ppu.o and /dev/null differ