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.
47 kB · 1481 lines
C++
at main
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481#include "stdafx.h"#include "UI.h"#include "UIScene_PauseMenu.h"#include "..\..\MinecraftServer.h"#include "..\..\MultiplayerLocalPlayer.h"#include "..\..\TexturePackRepository.h"#include "..\..\TexturePack.h"#include "..\..\DLCTexturePack.h"#include "..\..\..\Minecraft.World\StringHelpers.h"#ifdef __ORBIS__#include <error_dialog.h>#endif
#ifdef _DURANGO#include "..\..\Durango\Leaderboards\DurangoStatsDebugger.h"#endif
#ifdef __PSVITA__#include "PSVita\Network\SonyCommerce_Vita.h"#endif
#if defined __PS3__ || defined __ORBIS__#define USE_SONY_REMOTE_STORAGE#endif
UIScene_PauseMenu::UIScene_PauseMenu(int iPad, void *initData, UILayer *parentLayer) : UIScene(iPad, parentLayer){ // Setup all the Iggy references we need for this scene initialiseMovie(); m_bIgnoreInput=false; m_eAction=eAction_None;
m_buttons[BUTTON_PAUSE_RESUMEGAME].init(app.GetString(IDS_RESUME_GAME),BUTTON_PAUSE_RESUMEGAME); m_buttons[BUTTON_PAUSE_HELPANDOPTIONS].init(app.GetString(IDS_HELP_AND_OPTIONS),BUTTON_PAUSE_HELPANDOPTIONS); m_buttons[BUTTON_PAUSE_LEADERBOARDS].init(app.GetString(IDS_LEADERBOARDS),BUTTON_PAUSE_LEADERBOARDS);#ifdef _DURANGO m_buttons[BUTTON_PAUSE_XBOXHELP].init(app.GetString(IDS_XBOX_HELP_APP), BUTTON_PAUSE_XBOXHELP);#else m_buttons[BUTTON_PAUSE_ACHIEVEMENTS].init(app.GetString(IDS_ACHIEVEMENTS),BUTTON_PAUSE_ACHIEVEMENTS);#endif#if defined(_XBOX_ONE) || defined(__ORBIS__) m_bTrialTexturePack = false; if(!Minecraft::GetInstance()->skins->isUsingDefaultSkin()) { TexturePack *tPack = Minecraft::GetInstance()->skins->getSelected(); DLCTexturePack *pDLCTexPack=(DLCTexturePack *)tPack;
m_pDLCPack=pDLCTexPack->getDLCInfoParentPack();//tPack->getDLCPack();
if(!m_pDLCPack->hasPurchasedFile( DLCManager::e_DLCType_Texture, L"" )) { m_bTrialTexturePack = true; } }
// 4J-TomK - check for all possible labels being fed into BUTTON_PAUSE_SAVEGAME (Bug 163775) // this has to be done before button initialisation! wchar_t saveButtonLabels[2][256]; swprintf( saveButtonLabels[0], 256, L"%ls", app.GetString( IDS_SAVE_GAME )); swprintf( saveButtonLabels[1], 256, L"%ls", app.GetString( IDS_DISABLE_AUTOSAVE )); m_buttons[BUTTON_PAUSE_SAVEGAME].setAllPossibleLabels(2,saveButtonLabels);
if(app.GetGameHostOption(eGameHostOption_DisableSaving) || m_bTrialTexturePack) { m_savesDisabled = true; m_buttons[BUTTON_PAUSE_SAVEGAME].init(app.GetString(IDS_SAVE_GAME),BUTTON_PAUSE_SAVEGAME); } else { m_savesDisabled = false; m_buttons[BUTTON_PAUSE_SAVEGAME].init(app.GetString(IDS_DISABLE_AUTOSAVE),BUTTON_PAUSE_SAVEGAME); }#else m_buttons[BUTTON_PAUSE_SAVEGAME].init(app.GetString(IDS_SAVE_GAME),BUTTON_PAUSE_SAVEGAME);#endif m_buttons[BUTTON_PAUSE_EXITGAME].init(app.GetString(IDS_EXIT_GAME),BUTTON_PAUSE_EXITGAME);
if(!ProfileManager.IsFullVersion()) { // hide the trial timer ui.ShowTrialTimer(false); }
updateControlsVisibility();
doHorizontalResizeCheck();
// get rid of the quadrant display if it's on ui.HidePressStart();
#if TO_BE_IMPLEMENTED XuiSetTimer(m_hObj,IGNORE_KEYPRESS_TIMERID,IGNORE_KEYPRESS_TIME);#endif
if( g_NetworkManager.IsLocalGame() && g_NetworkManager.GetPlayerCount() == 1 ) { app.SetXuiServerAction(ProfileManager.GetPrimaryPad(),eXuiServerAction_PauseServer,(void *)TRUE); }
TelemetryManager->RecordMenuShown(m_iPad, eUIScene_PauseMenu, 0); TelemetryManager->RecordPauseOrInactive(m_iPad);
Minecraft *pMinecraft = Minecraft::GetInstance(); if(pMinecraft != NULL && pMinecraft->localgameModes[iPad] != NULL ) { TutorialMode *gameMode = (TutorialMode *)pMinecraft->localgameModes[iPad];
// This just allows it to be shown gameMode->getTutorial()->showTutorialPopup(false); } m_bErrorDialogRunning = false;}
UIScene_PauseMenu::~UIScene_PauseMenu(){ Minecraft *pMinecraft = Minecraft::GetInstance(); if(pMinecraft != NULL && pMinecraft->localgameModes[m_iPad] != NULL ) { TutorialMode *gameMode = (TutorialMode *)pMinecraft->localgameModes[m_iPad];
// This just allows it to be shown gameMode->getTutorial()->showTutorialPopup(true); }
m_parentLayer->showComponent(m_iPad,eUIComponent_Panorama,false); m_parentLayer->showComponent(m_iPad,eUIComponent_MenuBackground,false); m_parentLayer->showComponent(m_iPad,eUIComponent_Logo,false);}
wstring UIScene_PauseMenu::getMoviePath(){ if(app.GetLocalPlayerCount() > 1) { return L"PauseMenuSplit"; } else { return L"PauseMenu"; }}
void UIScene_PauseMenu::tick(){ UIScene::tick();
#ifdef __PSVITA__ // 4J-MGH - Need to check for installed DLC here, as we delay the installation of the key file on Vita if(!app.DLCInstallProcessCompleted()) app.StartInstallDLCProcess(0);#endif
#if defined _XBOX_ONE || defined __ORBIS__ if(!m_bTrialTexturePack && m_savesDisabled != (app.GetGameHostOption(eGameHostOption_DisableSaving) != 0) && ProfileManager.GetPrimaryPad() == m_iPad ) { // We show the save button if saves are disabled as this lets us show a prompt to enable them (via purchasing a texture pack) if( app.GetGameHostOption(eGameHostOption_DisableSaving) ) { m_savesDisabled = true; m_buttons[BUTTON_PAUSE_SAVEGAME].setLabel( app.GetString(IDS_SAVE_GAME) ); } else { m_savesDisabled = false; m_buttons[BUTTON_PAUSE_SAVEGAME].setLabel( app.GetString(IDS_DISABLE_AUTOSAVE) ); } }#endif
#ifdef __ORBIS__ // Process the error dialog (for a patch being available) if(m_bErrorDialogRunning) { SceErrorDialogStatus stat = sceErrorDialogUpdateStatus(); if( stat == SCE_ERROR_DIALOG_STATUS_FINISHED ) { sceErrorDialogTerminate(); m_bErrorDialogRunning=false; } }#endif}
void UIScene_PauseMenu::updateTooltips(){ bool bUserisClientSide = ProfileManager.IsSignedInLive(m_iPad); bool bIsisPrimaryHost=g_NetworkManager.IsHost() && (ProfileManager.GetPrimaryPad()==m_iPad);
#ifdef _XBOX_ONE bool bDisplayBanTip = !g_NetworkManager.IsLocalGame() && !bIsisPrimaryHost && !ProfileManager.IsGuest(m_iPad);#endif
int iY = -1;#if defined __PS3__ || defined __ORBIS__ if(m_iPad == ProfileManager.GetPrimaryPad() ) iY = IDS_TOOLTIPS_GAME_INVITES;#endif int iRB = -1; int iX = -1;
if(ProfileManager.IsFullVersion()) { if(StorageManager.GetSaveDisabled()) { iX = bIsisPrimaryHost?IDS_TOOLTIPS_SELECTDEVICE:-1;#ifdef _XBOX_ONE iRB = bDisplayBanTip?IDS_TOOLTIPS_BANLEVEL:-1;#endif if( CSocialManager::Instance()->IsTitleAllowedToPostImages() && CSocialManager::Instance()->AreAllUsersAllowedToPostImages() && bUserisClientSide ) {#ifndef __PS3__ iY = IDS_TOOLTIPS_SHARE;#endif } } else { iX = bIsisPrimaryHost?IDS_TOOLTIPS_CHANGEDEVICE:-1;#ifdef _XBOX_ONE iRB = bDisplayBanTip?IDS_TOOLTIPS_BANLEVEL:-1;#endif if( CSocialManager::Instance()->IsTitleAllowedToPostImages() && CSocialManager::Instance()->AreAllUsersAllowedToPostImages() && bUserisClientSide) {#ifndef __PS3__ iY = IDS_TOOLTIPS_SHARE;#endif } } } ui.SetTooltips( m_iPad, IDS_TOOLTIPS_SELECT,IDS_TOOLTIPS_BACK,iX,iY, -1,-1,-1,iRB);}
void UIScene_PauseMenu::updateComponents(){ m_parentLayer->showComponent(m_iPad,eUIComponent_Panorama,false); m_parentLayer->showComponent(m_iPad,eUIComponent_MenuBackground,true);
if( app.GetLocalPlayerCount() == 1 ) m_parentLayer->showComponent(m_iPad,eUIComponent_Logo,true); else m_parentLayer->showComponent(m_iPad,eUIComponent_Logo,false);}
void UIScene_PauseMenu::handlePreReload(){#if defined _XBOX_ONE || defined __ORBIS__ if(ProfileManager.GetPrimaryPad() == m_iPad) { // 4J-TomK - check for all possible labels being fed into BUTTON_PAUSE_SAVEGAME (Bug 163775) // this has to be done before button initialisation! wchar_t saveButtonLabels[2][256]; swprintf( saveButtonLabels[0], 256, L"%ls", app.GetString( IDS_SAVE_GAME )); swprintf( saveButtonLabels[1], 256, L"%ls", app.GetString( IDS_DISABLE_AUTOSAVE )); m_buttons[BUTTON_PAUSE_SAVEGAME].setAllPossibleLabels(2,saveButtonLabels); }#endif}
void UIScene_PauseMenu::handleReload(){ updateTooltips(); updateControlsVisibility();
#if defined _XBOX_ONE || defined __ORBIS__ if(ProfileManager.GetPrimaryPad() == m_iPad) { // We show the save button if saves are disabled as this lets us show a prompt to enable them (via purchasing a texture pack) if( app.GetGameHostOption(eGameHostOption_DisableSaving) || m_bTrialTexturePack ) { m_savesDisabled = true; m_buttons[BUTTON_PAUSE_SAVEGAME].setLabel( app.GetString(IDS_SAVE_GAME) ); } else { m_savesDisabled = false; m_buttons[BUTTON_PAUSE_SAVEGAME].setLabel( app.GetString(IDS_DISABLE_AUTOSAVE) ); } }#endif
doHorizontalResizeCheck();}
void UIScene_PauseMenu::updateControlsVisibility(){ // are we the primary player? // 4J-PB - fix for 7844 & 7845 - // TCR # 128: XLA Pause Menu: When in a multiplayer game as a client the Pause Menu does not have a Leaderboards option. // TCR # 128: XLA Pause Menu: When in a multiplayer game as a client the Pause Menu does not have an Achievements option. if(ProfileManager.GetPrimaryPad()==m_iPad) // && g_NetworkManager.IsHost()) { // are we in splitscreen? // how many local players do we have? if( app.GetLocalPlayerCount()>1 ) { // Hide the BUTTON_PAUSE_LEADERBOARDS and BUTTON_PAUSE_ACHIEVEMENTS removeControl( &m_buttons[BUTTON_PAUSE_LEADERBOARDS], false );#ifndef _XBOX_ONE removeControl( &m_buttons[BUTTON_PAUSE_ACHIEVEMENTS], false );#endif }#ifdef __PSVITA__ // MGH added - remove leaderboards in adhoc if(CGameNetworkManager::usingAdhocMode()) { removeControl( &m_buttons[BUTTON_PAUSE_LEADERBOARDS], false ); }#endif
if( !g_NetworkManager.IsHost() ) { // Hide the BUTTON_PAUSE_SAVEGAME removeControl( &m_buttons[BUTTON_PAUSE_SAVEGAME], false ); } } else { // Hide the BUTTON_PAUSE_LEADERBOARDS, BUTTON_PAUSE_ACHIEVEMENTS and BUTTON_PAUSE_SAVEGAME removeControl( &m_buttons[BUTTON_PAUSE_LEADERBOARDS], false );#ifndef _XBOX_ONE removeControl( &m_buttons[BUTTON_PAUSE_ACHIEVEMENTS], false );#endif removeControl( &m_buttons[BUTTON_PAUSE_SAVEGAME], false ); }
// is saving disabled? if(StorageManager.GetSaveDisabled()) {#ifdef _XBOX // disable save button m_buttons[BUTTON_PAUSE_SAVEGAME].setEnable(false);#endif }
#if defined(__PS3__) || defined (__PSVITA__) || defined(__ORBIS__) // We don't have a way to display trophies/achievements, so remove the button, and we're allowed to not have it on Xbox One removeControl( &m_buttons[BUTTON_PAUSE_ACHIEVEMENTS], false );#endif
}
void UIScene_PauseMenu::handleInput(int iPad, int key, bool repeat, bool pressed, bool released, bool &handled){ if(m_bIgnoreInput) { return; }
//app.DebugPrintf("UIScene_DebugOverlay handling input for pad %d, key %d, down- %s, pressed- %s, released- %s\n", iPad, key, down?"TRUE":"FALSE", pressed?"TRUE":"FALSE", released?"TRUE":"FALSE"); ui.AnimateKeyPress(iPad, key, repeat, pressed, released);
#ifdef _XBOX_ONE bool bIsisPrimaryHost=g_NetworkManager.IsHost() && (ProfileManager.GetPrimaryPad()==iPad); bool bDisplayBanTip = !g_NetworkManager.IsLocalGame() && !bIsisPrimaryHost && !ProfileManager.IsGuest(iPad);#endif
switch(key) {#ifdef _DURANGO case ACTION_MENU_GTC_RESUME:#endif#if defined(__PS3__) // not for Orbis - we want to use the pause menu (touchpad press) to select a menu item case ACTION_MENU_PAUSEMENU:#endif case ACTION_MENU_CANCEL: if(pressed) {#ifdef _DURANGO //DurangoStatsDebugger::PrintStats(iPad);#endif
if( iPad == ProfileManager.GetPrimaryPad() && g_NetworkManager.IsLocalGame() ) { app.SetXuiServerAction(ProfileManager.GetPrimaryPad(),eXuiServerAction_PauseServer,(void *)FALSE); }
ui.PlayUISFX(eSFX_Back); navigateBack(); if(!ProfileManager.IsFullVersion()) { ui.ShowTrialTimer(true); } } break; case ACTION_MENU_OK:#ifdef __ORBIS__ case ACTION_MENU_TOUCHPAD_PRESS:#endif case ACTION_MENU_UP: case ACTION_MENU_DOWN: if(pressed) { sendInputToMovie(key, repeat, pressed, released); } break;
#if TO_BE_IMPLEMENTED case VK_PAD_X: // Change device if(bIsisPrimaryHost) { // we need a function to deal with the return from this - if it changes, we need to update the pause menu and tooltips // Fix for #12531 - TCR 001: BAS Game Stability: When a player selects to change a storage // device, and repeatedly backs out of the SD screen, disconnects from LIVE, and then selects a SD, the title crashes. m_bIgnoreInput=true;
StorageManager.SetSaveDevice(&UIScene_PauseMenu::DeviceSelectReturned,this,true); } rfHandled = TRUE; break;#endif
case ACTION_MENU_Y: { #if defined(__PS3__) || defined(__ORBIS__) if(pressed && iPad == ProfileManager.GetPrimaryPad()) {#ifdef __ORBIS__ // If a patch is available, can't view invites if (CheckForPatch()) break;#endif
// Are we offline? if(!ProfileManager.IsSignedInLive(iPad)) { m_eAction=eAction_ViewInvitesPSN;#ifdef __ORBIS__ int npAvailability = ProfileManager.getNPAvailability(iPad); if (npAvailability == SCE_NP_ERROR_AGE_RESTRICTION) { // 4J Stu - This is a bit messy and is due to the library incorrectly returning false for IsSignedInLive is the npAvailability isn't SCE_OK UINT uiIDA[1]; uiIDA[0]=IDS_OK; ui.RequestErrorMessage(IDS_ONLINE_SERVICE_TITLE, IDS_CONTENT_RESTRICTION, uiIDA, 1, iPad); } else // Determine why they're not "signed in live" if (ProfileManager.isSignedInPSN(iPad)) { // Signed in to PSN but not connected (no internet access) assert(!ProfileManager.isConnectedToPSN(iPad));
UINT uiIDA[1]; uiIDA[0] = IDS_OK; ui.RequestErrorMessage( IDS_ERROR_NETWORK_TITLE, IDS_ERROR_NETWORK, uiIDA, 1, iPad); } else { // Not signed in to PSN UINT uiIDA[1]; uiIDA[0] = IDS_PRO_NOTONLINE_ACCEPT; ui.RequestAlertMessage( IDS_PRO_NOTONLINE_TITLE, IDS_PRO_NOTONLINE_TEXT, uiIDA, 1, iPad, &UIScene_PauseMenu::MustSignInReturnedPSN, (LPVOID)GetCallbackUniqueId() ); } #else // __PS3__ // get them to sign in to online UINT uiIDA[1]; uiIDA[0]=IDS_PRO_NOTONLINE_ACCEPT; ui.RequestAlertMessage(IDS_PRO_NOTONLINE_TITLE, IDS_PRO_NOTONLINE_TEXT, uiIDA, 1, iPad, &UIScene_PauseMenu::MustSignInReturnedPSN, (LPVOID)GetCallbackUniqueId() );#endif } else {#ifdef __ORBIS__ SQRNetworkManager_Orbis::RecvInviteGUI();#else // __PS3__ int ret = sceNpBasicRecvMessageCustom(SCE_NP_BASIC_MESSAGE_MAIN_TYPE_INVITE, SCE_NP_BASIC_RECV_MESSAGE_OPTIONS_INCLUDE_BOOTABLE, SYS_MEMORY_CONTAINER_ID_INVALID); app.DebugPrintf("sceNpBasicRecvMessageCustom return %d ( %08x )\n", ret, ret);#endif } }#else#if TO_BE_IMPLEMENTED if(bUserisClientSide) { // 4J Stu - Added check in 1.8.2 bug fix (TU6) to stop repeat key presses bool bCanScreenshot = true; for(int j=0; j < XUSER_MAX_COUNT;++j) { if(app.GetXuiAction(j) == eAppAction_SocialPostScreenshot) { bCanScreenshot = false; break; } } if(bCanScreenshot) app.SetAction(pInputData->UserIndex,eAppAction_SocialPost); } rfHandled = TRUE;#endif#endif // __PS3__ } break;#ifdef _XBOX_ONE case ACTION_MENU_RIGHT_SCROLL: if( bDisplayBanTip ) { UINT uiIDA[2]; uiIDA[0]=IDS_CONFIRM_CANCEL; uiIDA[1]=IDS_CONFIRM_OK; ui.RequestAlertMessage(IDS_ACTION_BAN_LEVEL_TITLE, IDS_ACTION_BAN_LEVEL_DESCRIPTION, uiIDA, 2, iPad,&UIScene_PauseMenu::BanGameDialogReturned,(LPVOID)GetCallbackUniqueId() );
//rfHandled = TRUE; } break;#endif }}
void UIScene_PauseMenu::handlePress(F64 controlId, F64 childId){ if(m_bIgnoreInput) return;
switch((int)controlId) { case BUTTON_PAUSE_RESUMEGAME: if( m_iPad == ProfileManager.GetPrimaryPad() && g_NetworkManager.IsLocalGame() ) { app.SetXuiServerAction(ProfileManager.GetPrimaryPad(),eXuiServerAction_PauseServer,(void *)FALSE); } navigateBack(); break; case BUTTON_PAUSE_LEADERBOARDS: { UINT uiIDA[1]; uiIDA[0]=IDS_OK;
//4J Gordon: Being used for the leaderboards proper now // guests can't look at leaderboards if(ProfileManager.IsGuest(m_iPad)) { ui.RequestAlertMessage(IDS_PRO_GUESTPROFILE_TITLE, IDS_PRO_GUESTPROFILE_TEXT, uiIDA, 1, ProfileManager.GetPrimaryPad()); } else if(!ProfileManager.IsSignedInLive(m_iPad)) {#ifdef __ORBIS__ // If a patch is available, can't show leaderboard if (CheckForPatch()) break;
// Check for content restricted user // Update error code int errorCode = ProfileManager.getNPAvailability(m_iPad);
// Check if PSN is unavailable because of age restriction if (errorCode == SCE_NP_ERROR_AGE_RESTRICTION) { UINT uiIDA[1]; uiIDA[0] = IDS_CONFIRM_OK; ui.RequestErrorMessage(IDS_ONLINE_SERVICE_TITLE, IDS_CONTENT_RESTRICTION, uiIDA, 1, m_iPad);
break;; }
#endif
#if defined __PS3__ || __PSVITA__ // get them to sign in to online m_eAction=eAction_ViewLeaderboardsPSN; UINT uiIDA[1]; uiIDA[0]=IDS_PRO_NOTONLINE_ACCEPT; ui.RequestAlertMessage(IDS_PRO_NOTONLINE_TITLE, IDS_PRO_XBOXLIVE_NOTIFICATION, uiIDA, 1, ProfileManager.GetPrimaryPad(),&UIScene_PauseMenu::MustSignInReturnedPSN,(LPVOID)GetCallbackUniqueId() );#elif defined(__ORBIS__) m_eAction=eAction_ViewLeaderboardsPSN; int npAvailability = ProfileManager.getNPAvailability(m_iPad); if (npAvailability == SCE_NP_ERROR_AGE_RESTRICTION) { // 4J Stu - This is a bit messy and is due to the library incorrectly returning false for IsSignedInLive is the npAvailability isn't SCE_OK UINT uiIDA[1]; uiIDA[0]=IDS_OK; ui.RequestErrorMessage(IDS_ONLINE_SERVICE_TITLE, IDS_CONTENT_RESTRICTION, uiIDA, 1, m_iPad); } else // Determine why they're not "signed in live" if (ProfileManager.isSignedInPSN(m_iPad)) { // Signed in to PSN but not connected (no internet access)
// Id assert(!ProfileManager.isConnectedToPSN(m_iPad));
UINT uiIDA[1]; uiIDA[0] = IDS_OK; ui.RequestErrorMessage( IDS_ERROR_NETWORK_TITLE, IDS_ERROR_NETWORK, uiIDA, 1, m_iPad); } else { // Not signed in to PSN UINT uiIDA[1]; uiIDA[0] = IDS_PRO_NOTONLINE_ACCEPT; ui.RequestAlertMessage( IDS_PRO_NOTONLINE_TITLE, IDS_PRO_NOTONLINE_TEXT, uiIDA, 1, m_iPad, &UIScene_PauseMenu::MustSignInReturnedPSN, (LPVOID)GetCallbackUniqueId() ); }#else UINT uiIDA[1] = { IDS_OK }; ui.RequestErrorMessage(IDS_PRO_NOTONLINE_TITLE, IDS_PRO_XBOXLIVE_NOTIFICATION, uiIDA, 1, m_iPad);#endif } else { bool bContentRestricted=false;#if defined(__PS3__) || defined(__PSVITA__) ProfileManager.GetChatAndContentRestrictions(m_iPad,true,NULL,&bContentRestricted,NULL);#endif if(bContentRestricted) {#if !(defined(_XBOX) || defined(_WINDOWS64) || defined(_XBOX_ONE)) // 4J Stu - Temp to get the win build running, but so we check this for other platforms // you can't see leaderboards UINT uiIDA[1]; uiIDA[0]=IDS_CONFIRM_OK; ui.RequestAlertMessage(IDS_ONLINE_SERVICE_TITLE, IDS_CONTENT_RESTRICTION, uiIDA, 1, m_iPad);#endif } else { ui.NavigateToScene(m_iPad, eUIScene_LeaderboardsMenu); } } } break;#ifdef _DURANGO case BUTTON_PAUSE_XBOXHELP: { // 4J: Launch the crummy xbox help application. WXS::User^ user = ProfileManager.GetUser(m_iPad); Windows::Xbox::ApplicationModel::Help::Show(user); } break;#elif TO_BE_IMPLEMENTED case BUTTON_PAUSE_ACHIEVEMENTS:
// guests can't look at achievements if(ProfileManager.IsGuest(pNotifyPressData->UserIndex)) { UINT uiIDA[1]; uiIDA[0]=IDS_OK; ui.RequestAlertMessage(IDS_PRO_GUESTPROFILE_TITLE, IDS_PRO_GUESTPROFILE_TEXT, uiIDA, 1, ProfileManager.GetPrimaryPad()); } else { XShowAchievementsUI( pNotifyPressData->UserIndex ); } break;#endif
case BUTTON_PAUSE_HELPANDOPTIONS: ui.NavigateToScene(m_iPad,eUIScene_HelpAndOptionsMenu); break; case BUTTON_PAUSE_SAVEGAME: PerformActionSaveGame(); break; case BUTTON_PAUSE_EXITGAME: { Minecraft *pMinecraft = Minecraft::GetInstance(); // Check if it's the trial version if(ProfileManager.IsFullVersion()) { UINT uiIDA[3];
// is it the primary player exiting? if(m_iPad==ProfileManager.GetPrimaryPad()) { int playTime = -1; if( pMinecraft->localplayers[m_iPad] != NULL ) { playTime = (int)pMinecraft->localplayers[m_iPad]->getSessionTimer(); }
#if defined(_XBOX_ONE) || defined(__ORBIS__) uiIDA[0]=IDS_CONFIRM_CANCEL; uiIDA[1]=IDS_CONFIRM_OK;
if(g_NetworkManager.IsHost() && StorageManager.GetSaveDisabled()) { uiIDA[0]=IDS_CONFIRM_CANCEL; uiIDA[1]=IDS_EXIT_GAME_SAVE; uiIDA[2]=IDS_EXIT_GAME_NO_SAVE;
if(g_NetworkManager.GetPlayerCount()>1) { ui.RequestAlertMessage(IDS_EXIT_GAME, IDS_CONFIRM_EXIT_GAME_CONFIRM_DISCONNECT_SAVE, uiIDA, 3, m_iPad,&UIScene_PauseMenu::ExitGameSaveDialogReturned, (LPVOID)GetCallbackUniqueId()); } else { ui.RequestAlertMessage(IDS_EXIT_GAME, IDS_CONFIRM_EXIT_GAME, uiIDA, 3, m_iPad,&UIScene_PauseMenu::ExitGameSaveDialogReturned, (LPVOID)GetCallbackUniqueId()); } } else if(g_NetworkManager.IsHost() && g_NetworkManager.GetPlayerCount()>1) { ui.RequestAlertMessage(IDS_EXIT_GAME, IDS_CONFIRM_EXIT_GAME_CONFIRM_DISCONNECT, uiIDA, 2, m_iPad,&IUIScene_PauseMenu::ExitGameDialogReturned, (LPVOID)GetCallbackUniqueId()); } else { ui.RequestAlertMessage(IDS_EXIT_GAME, IDS_CONFIRM_EXIT_GAME, uiIDA, 2, m_iPad,&IUIScene_PauseMenu::ExitGameDialogReturned, (LPVOID)GetCallbackUniqueId()); }#else if(StorageManager.GetSaveDisabled()) { uiIDA[0]=IDS_CONFIRM_CANCEL; uiIDA[1]=IDS_CONFIRM_OK; ui.RequestAlertMessage(IDS_EXIT_GAME, IDS_CONFIRM_EXIT_GAME_PROGRESS_LOST, uiIDA, 2, m_iPad,&IUIScene_PauseMenu::ExitGameDialogReturned, (LPVOID)GetCallbackUniqueId()); } else { if( g_NetworkManager.IsHost() ) { uiIDA[0]=IDS_CONFIRM_CANCEL; uiIDA[1]=IDS_EXIT_GAME_SAVE; uiIDA[2]=IDS_EXIT_GAME_NO_SAVE;
if(g_NetworkManager.GetPlayerCount()>1) { ui.RequestAlertMessage(IDS_EXIT_GAME, IDS_CONFIRM_EXIT_GAME_CONFIRM_DISCONNECT_SAVE, uiIDA, 3, m_iPad,&UIScene_PauseMenu::ExitGameSaveDialogReturned, (LPVOID)GetCallbackUniqueId()); } else { ui.RequestAlertMessage(IDS_EXIT_GAME, IDS_CONFIRM_EXIT_GAME, uiIDA, 3, m_iPad,&UIScene_PauseMenu::ExitGameSaveDialogReturned, (LPVOID)GetCallbackUniqueId()); } } else { uiIDA[0]=IDS_CONFIRM_CANCEL; uiIDA[1]=IDS_CONFIRM_OK;
ui.RequestAlertMessage(IDS_EXIT_GAME, IDS_CONFIRM_EXIT_GAME, uiIDA, 2, m_iPad,&IUIScene_PauseMenu::ExitGameDialogReturned, (LPVOID)GetCallbackUniqueId()); } }#endif } else { int playTime = -1; if( pMinecraft->localplayers[m_iPad] != NULL ) { playTime = (int)pMinecraft->localplayers[m_iPad]->getSessionTimer(); }
TelemetryManager->RecordLevelExit(m_iPad, eSen_LevelExitStatus_Exited);
// just exit the player app.SetAction(m_iPad,eAppAction_ExitPlayer); } } else { // is it the primary player exiting? if(m_iPad==ProfileManager.GetPrimaryPad()) { int playTime = -1; if( pMinecraft->localplayers[m_iPad] != NULL ) { playTime = (int)pMinecraft->localplayers[m_iPad]->getSessionTimer(); }
// adjust the trial time played ui.ReduceTrialTimerValue();
// exit the level UINT uiIDA[2]; uiIDA[0]=IDS_CONFIRM_CANCEL; uiIDA[1]=IDS_CONFIRM_OK; ui.RequestAlertMessage(IDS_EXIT_GAME, IDS_CONFIRM_EXIT_GAME_PROGRESS_LOST, uiIDA, 2, m_iPad,&IUIScene_PauseMenu::ExitGameDialogReturned, (LPVOID)GetCallbackUniqueId());
} else { int playTime = -1; if( pMinecraft->localplayers[m_iPad] != NULL ) { playTime = (int)pMinecraft->localplayers[m_iPad]->getSessionTimer(); }
TelemetryManager->RecordLevelExit(m_iPad, eSen_LevelExitStatus_Exited);
// just exit the player app.SetAction(m_iPad,eAppAction_ExitPlayer); } } } break; }}
void UIScene_PauseMenu::PerformActionSaveGame(){ // is the player trying to save in the trial version? if(!ProfileManager.IsFullVersion()) {#ifdef __ORBIS__ // If a patch is available, can't buy full game if (CheckForPatch()) return;#endif
// Unlock the full version? if(!ProfileManager.IsSignedInLive(m_iPad)) {#if defined(__PS3__) || defined (__PSVITA__) m_eAction=eAction_SaveGamePSN; UINT uiIDA[2]; uiIDA[0]=IDS_PRO_NOTONLINE_ACCEPT; uiIDA[1]=IDS_PRO_NOTONLINE_DECLINE; ui.RequestAlertMessage(IDS_PRO_NOTONLINE_TITLE, IDS_PRO_XBOXLIVE_NOTIFICATION, uiIDA, 2, ProfileManager.GetPrimaryPad(),&UIScene_PauseMenu::MustSignInReturnedPSN,(LPVOID)GetCallbackUniqueId());#elif defined(__ORBIS__) m_eAction=eAction_SaveGamePSN; int npAvailability = ProfileManager.getNPAvailability(m_iPad); if (npAvailability == SCE_NP_ERROR_AGE_RESTRICTION) { // 4J Stu - This is a bit messy and is due to the library incorrectly returning false for IsSignedInLive is the npAvailability isn't SCE_OK UINT uiIDA[1]; uiIDA[0]=IDS_OK; ui.RequestErrorMessage(IDS_ONLINE_SERVICE_TITLE, IDS_CONTENT_RESTRICTION, uiIDA, 1, m_iPad); } else // Determine why they're not "signed in live" if (ProfileManager.isSignedInPSN(m_iPad)) { // Signed in to PSN but not connected (no internet access) assert(!ProfileManager.isConnectedToPSN(m_iPad));
UINT uiIDA[1]; uiIDA[0] = IDS_OK; ui.RequestErrorMessage( IDS_ERROR_NETWORK_TITLE, IDS_ERROR_NETWORK, uiIDA, 1, m_iPad); } else { // Not signed in to PSN UINT uiIDA[1]; uiIDA[0] = IDS_PRO_NOTONLINE_ACCEPT; ui.RequestAlertMessage( IDS_PRO_NOTONLINE_TITLE, IDS_PRO_NOTONLINE_TEXT, uiIDA, 1, m_iPad, &UIScene_PauseMenu::MustSignInReturnedPSN, (LPVOID)GetCallbackUniqueId()); }#endif } else { UINT uiIDA[2]; uiIDA[0]=IDS_CONFIRM_OK; uiIDA[1]=IDS_CONFIRM_CANCEL; ui.RequestAlertMessage(IDS_UNLOCK_TITLE, IDS_UNLOCK_TOSAVE_TEXT, uiIDA, 2,m_iPad,&UIScene_PauseMenu::UnlockFullSaveReturned,(LPVOID)GetCallbackUniqueId()); }
return; }
// 4J-PB - Is the player trying to save but they are using a trial texturepack ? if(!Minecraft::GetInstance()->skins->isUsingDefaultSkin()) { TexturePack *tPack = Minecraft::GetInstance()->skins->getSelected(); DLCTexturePack *pDLCTexPack=(DLCTexturePack *)tPack;
m_pDLCPack=pDLCTexPack->getDLCInfoParentPack();//tPack->getDLCPack();
if(!m_pDLCPack->hasPurchasedFile( DLCManager::e_DLCType_Texture, L"" )) { // upsell#ifdef _XBOX ULONGLONG ullOfferID_Full; // get the dlc texture pack DLCTexturePack *pDLCTexPack=(DLCTexturePack *)tPack;
app.GetDLCFullOfferIDForPackID(pDLCTexPack->getDLCParentPackId(),&ullOfferID_Full);
// tell sentient about the upsell of the full version of the texture pack TelemetryManager->RecordUpsellPresented(m_iPad, eSet_UpsellID_Texture_DLC, ullOfferID_Full & 0xFFFFFFFF);#endif UINT uiIDA[2]; uiIDA[0]=IDS_CONFIRM_OK; uiIDA[1]=IDS_CONFIRM_CANCEL;
// Give the player a warning about the trial version of the texture pack#ifdef __PSVITA__ if(app.DLCInstallProcessCompleted() && !SonyCommerce_Vita::getDLCUpgradePending()) // MGH - devtrack #5861 On vita it can take a bit after the install has finished to register the purchase, so make sure we don't end up asking to purchase again#endif { ui.RequestAlertMessage(IDS_WARNING_DLC_TRIALTEXTUREPACK_TITLE, IDS_WARNING_DLC_TRIALTEXTUREPACK_TEXT, uiIDA, 2, m_iPad,&UIScene_PauseMenu::WarningTrialTexturePackReturned,(LPVOID)GetCallbackUniqueId()); }
return; } else { m_bTrialTexturePack = false; } }
// does the save exist? bool bSaveExists; C4JStorage::ESaveGameState result=StorageManager.DoesSaveExist(&bSaveExists);
#ifdef _XBOX if(result == C4JStorage::ELoadGame_DeviceRemoved) { // this will be a tester trying to be clever UINT uiIDA[2]; uiIDA[0]=IDS_SELECTANEWDEVICE; uiIDA[1]=IDS_NODEVICE_DECLINE;
ui.RequestAlertMessage(IDS_STORAGEDEVICEPROBLEM_TITLE, IDS_FAILED_TO_LOADSAVE_TEXT, uiIDA, 2, m_iPad,&IUIScene_PauseMenu::DeviceRemovedDialogReturned,(LPVOID)GetCallbackUniqueId()); } else#endif {#if defined(_XBOX_ONE) || defined(__ORBIS__) if(!m_savesDisabled) { UINT uiIDA[2]; uiIDA[0]=IDS_CANCEL; uiIDA[1]=IDS_CONFIRM_OK; ui.RequestAlertMessage(IDS_TITLE_DISABLE_AUTOSAVE, IDS_CONFIRM_DISABLE_AUTOSAVE, uiIDA, 2, m_iPad,&IUIScene_PauseMenu::DisableAutosaveDialogReturned,(LPVOID)GetCallbackUniqueId()); } else#endif // we need to ask if they are sure they want to overwrite the existing game if(bSaveExists) { UINT uiIDA[2]; uiIDA[0]=IDS_CONFIRM_CANCEL; uiIDA[1]=IDS_CONFIRM_OK; ui.RequestAlertMessage(IDS_TITLE_SAVE_GAME, IDS_CONFIRM_SAVE_GAME, uiIDA, 2, m_iPad,&IUIScene_PauseMenu::SaveGameDialogReturned,(LPVOID)GetCallbackUniqueId()); } else {#if defined(_XBOX_ONE) || defined(__ORBIS__) UINT uiIDA[2]; uiIDA[0]=IDS_CONFIRM_CANCEL; uiIDA[1]=IDS_CONFIRM_OK; ui.RequestAlertMessage(IDS_TITLE_ENABLE_AUTOSAVE, IDS_CONFIRM_ENABLE_AUTOSAVE, uiIDA, 2, m_iPad,&IUIScene_PauseMenu::EnableAutosaveDialogReturned,(LPVOID)GetCallbackUniqueId());#else // flag a app action of save game app.SetAction(m_iPad,eAppAction_SaveGame);#endif } }}
void UIScene_PauseMenu::ShowScene(bool show){ app.DebugPrintf("UIScene_PauseMenu::ShowScene is not implemented\n");}
void UIScene_PauseMenu::HandleDLCInstalled(){ // mounted DLC may have changed if(app.StartInstallDLCProcess(m_iPad)==false) { // not doing a mount, so re-enable input //m_bIgnoreInput=false; app.DebugPrintf("UIScene_PauseMenu::HandleDLCInstalled - m_bIgnoreInput false\n"); } else { // 4J-PB - Somehow, on th edisc build, we get in here, but don't call HandleDLCMountingComplete, so input locks up //m_bIgnoreInput=true; app.DebugPrintf("UIScene_PauseMenu::HandleDLCInstalled - m_bIgnoreInput true\n"); } // this will send a CustomMessage_DLCMountingComplete when done}
void UIScene_PauseMenu::HandleDLCMountingComplete(){ // check if we should display the save option
//m_bIgnoreInput=false; app.DebugPrintf("UIScene_PauseMenu::HandleDLCMountingComplete - m_bIgnoreInput false \n");
// if(ProfileManager.IsFullVersion()) // { // bool bIsisPrimaryHost=g_NetworkManager.IsHost() && (ProfileManager.GetPrimaryPad()==m_iPad); // // if(bIsisPrimaryHost) // { // m_buttons[BUTTON_PAUSE_SAVEGAME].setEnable(true); // } // }}
int UIScene_PauseMenu::UnlockFullSaveReturned(void *pParam,int iPad,C4JStorage::EMessageResult result){ Minecraft *pMinecraft=Minecraft::GetInstance();
if(result==C4JStorage::EMessage_ResultAccept) { if(ProfileManager.IsSignedInLive(pMinecraft->player->GetXboxPad())) { // 4J-PB - need to check this user can access the store#if defined(__PS3__) || defined(__PSVITA__) bool bContentRestricted; ProfileManager.GetChatAndContentRestrictions(ProfileManager.GetPrimaryPad(),true,NULL,&bContentRestricted,NULL); if(bContentRestricted) { UINT uiIDA[1]; uiIDA[0]=IDS_CONFIRM_OK; ui.RequestAlertMessage(IDS_ONLINE_SERVICE_TITLE, IDS_CONTENT_RESTRICTION, uiIDA, 1, ProfileManager.GetPrimaryPad()); } else#endif { ProfileManager.DisplayFullVersionPurchase(false,pMinecraft->player->GetXboxPad(),eSen_UpsellID_Full_Version_Of_Game); } } } else { //SentientManager.RecordUpsellResponded(iPad, eSen_UpsellID_Full_Version_Of_Game, app.m_dwOfferID, eSen_UpsellOutcome_Declined); }
return 0;}
int UIScene_PauseMenu::SaveGame_SignInReturned(void *pParam,bool bContinue, int iPad){ UIScene_PauseMenu* pClass = (UIScene_PauseMenu*)ui.GetSceneFromCallbackId((size_t)pParam); if(pClass) pClass->SetIgnoreInput(false);
if(bContinue==true) { if(pClass) pClass->PerformActionSaveGame(); }
return 0;}
#ifdef _XBOX_ONEint UIScene_PauseMenu::BanGameDialogReturned(void *pParam,int iPad,C4JStorage::EMessageResult result){ // results switched for this dialog if(result==C4JStorage::EMessage_ResultDecline) { app.SetAction(iPad,eAppAction_BanLevel); } return 0;}#endif
#if defined(__PS3__) || defined (__PSVITA__) || defined(__ORBIS__)int UIScene_PauseMenu::MustSignInReturnedPSN(void *pParam,int iPad,C4JStorage::EMessageResult result){ UIScene_PauseMenu* pClass = (UIScene_PauseMenu*)ui.GetSceneFromCallbackId((size_t)pParam); if(result==C4JStorage::EMessage_ResultAccept && pClass) {#ifdef __PS3__ switch(pClass->m_eAction) { case eAction_ViewLeaderboardsPSN: SQRNetworkManager_PS3::AttemptPSNSignIn(&UIScene_PauseMenu::ViewLeaderboards_SignInReturned, pParam); break; case eAction_ViewInvitesPSN: SQRNetworkManager_PS3::AttemptPSNSignIn(&UIScene_PauseMenu::ViewInvites_SignInReturned, pParam); break; case eAction_SaveGamePSN: SQRNetworkManager_PS3::AttemptPSNSignIn(&UIScene_PauseMenu::SaveGame_SignInReturned, pParam); break; case eAction_BuyTexturePackPSN: SQRNetworkManager_PS3::AttemptPSNSignIn(&UIScene_PauseMenu::BuyTexturePack_SignInReturned, pParam); break; }#elif defined __PSVITA__ switch(pClass->m_eAction) { case eAction_ViewLeaderboardsPSN: //CD - Must force Ad-Hoc off if they want leaderboard PSN sign-in //Save settings change app.SetGameSettings(0, eGameSetting_PSVita_NetworkModeAdhoc, 0); //Force off CGameNetworkManager::setAdhocMode(false); //Now Sign-in SQRNetworkManager_Vita::AttemptPSNSignIn(&UIScene_PauseMenu::ViewLeaderboards_SignInReturned, pParam); break; case eAction_ViewInvitesPSN: SQRNetworkManager_Vita::AttemptPSNSignIn(&UIScene_PauseMenu::ViewInvites_SignInReturned, pParam); break; case eAction_SaveGamePSN: pClass->SetIgnoreInput(true); SQRNetworkManager_Vita::AttemptPSNSignIn(&UIScene_PauseMenu::SaveGame_SignInReturned, pParam, true); break; case eAction_BuyTexturePackPSN: SQRNetworkManager_Vita::AttemptPSNSignIn(&UIScene_PauseMenu::BuyTexturePack_SignInReturned, pParam); break; }#else switch(pClass->m_eAction) { case eAction_ViewLeaderboardsPSN: SQRNetworkManager_Orbis::AttemptPSNSignIn(&UIScene_PauseMenu::ViewLeaderboards_SignInReturned, pClass, false, iPad); break; case eAction_ViewInvitesPSN: SQRNetworkManager_Orbis::AttemptPSNSignIn(&UIScene_PauseMenu::ViewInvites_SignInReturned, pClass, false, iPad); break; case eAction_SaveGamePSN: SQRNetworkManager_Orbis::AttemptPSNSignIn(&UIScene_PauseMenu::SaveGame_SignInReturned, pClass, false, iPad); break; case eAction_BuyTexturePackPSN: SQRNetworkManager_Orbis::AttemptPSNSignIn(&UIScene_PauseMenu::BuyTexturePack_SignInReturned, pClass, false, iPad); break; }#endif }
return 0;}
int UIScene_PauseMenu::ViewLeaderboards_SignInReturned(void *pParam,bool bContinue, int iPad){ UIScene_PauseMenu* pClass = (UIScene_PauseMenu*)ui.GetSceneFromCallbackId((size_t)pParam); if(!pClass) return 0;
if(bContinue==true) { UINT uiIDA[1]; uiIDA[0]=IDS_CONFIRM_OK;
// guests can't look at leaderboards if(ProfileManager.IsGuest(pClass->m_iPad)) { ui.RequestAlertMessage(IDS_PRO_GUESTPROFILE_TITLE, IDS_PRO_GUESTPROFILE_TEXT, uiIDA, 1, ProfileManager.GetPrimaryPad()); } else if(ProfileManager.IsSignedInLive(iPad)) {#ifndef __ORBIS__ bool bContentRestricted=false; ProfileManager.GetChatAndContentRestrictions(pClass->m_iPad,true,NULL,&bContentRestricted,NULL); if(bContentRestricted) { // you can't see leaderboards ui.RequestAlertMessage(IDS_ONLINE_SERVICE_TITLE, IDS_CONTENT_RESTRICTION, uiIDA, 1, ProfileManager.GetPrimaryPad()); } else#endif { ui.NavigateToScene(pClass->m_iPad, eUIScene_LeaderboardsMenu); } } }
return 0;}
int UIScene_PauseMenu::WarningTrialTexturePackReturned(void *pParam,int iPad,C4JStorage::EMessageResult result){ UIScene_PauseMenu* pClass = (UIScene_PauseMenu*)ui.GetSceneFromCallbackId((size_t)pParam);
#ifdef __ORBIS__ // If a patch is available, can't proceed if (!pClass || pClass->CheckForPatch()) return 0;#endif
#if defined(__PS3__) || defined(__ORBIS__) || defined(__PSVITA__) if(result==C4JStorage::EMessage_ResultAccept) { if(!ProfileManager.IsSignedInLive(iPad)) { if(pClass) pClass->m_eAction=eAction_SaveGamePSN;#ifdef __ORBIS__// Check if PSN is unavailable because of age restriction int npAvailability = ProfileManager.getNPAvailability(iPad); if (npAvailability == SCE_NP_ERROR_AGE_RESTRICTION) { // 4J Stu - This is a bit messy and is due to the library incorrectly returning false for IsSignedInLive is the npAvailability isn't SCE_OK UINT uiIDA[1]; uiIDA[0]=IDS_OK; ui.RequestErrorMessage(IDS_ONLINE_SERVICE_TITLE, IDS_CONTENT_RESTRICTION, uiIDA, 1, iPad); } else // Determine why they're not "signed in live" if (ProfileManager.isSignedInPSN(iPad)) { // Signed in to PSN but not connected (no internet access) assert(!ProfileManager.isConnectedToPSN(iPad));
UINT uiIDA[1]; uiIDA[0] = IDS_OK; ui.RequestErrorMessage( IDS_ERROR_NETWORK_TITLE, IDS_ERROR_NETWORK, uiIDA, 1, iPad); } else { UINT uiIDA[1]; uiIDA[0] = IDS_PRO_NOTONLINE_ACCEPT; ui.RequestAlertMessage( IDS_PRO_NOTONLINE_TITLE, IDS_PRO_NOTONLINE_TEXT, uiIDA, 1, iPad, &UIScene_PauseMenu::MustSignInReturnedPSN, pParam); }#else // __PS3__ // You're not signed in to PSN! UINT uiIDA[2]; uiIDA[0]=IDS_PRO_NOTONLINE_ACCEPT; uiIDA[1]=IDS_PRO_NOTONLINE_DECLINE; ui.RequestAlertMessage(IDS_PRO_NOTONLINE_TITLE, IDS_PRO_XBOXLIVE_NOTIFICATION, uiIDA, 2, iPad,&UIScene_PauseMenu::MustSignInReturnedPSN,pParam);#endif } else {#ifndef __ORBIS__ // 4J-PB - need to check this user can access the store bool bContentRestricted=false; ProfileManager.GetChatAndContentRestrictions(ProfileManager.GetPrimaryPad(),true,NULL,&bContentRestricted,NULL); if(bContentRestricted) { UINT uiIDA[1]; uiIDA[0]=IDS_CONFIRM_OK; ui.RequestAlertMessage(IDS_ONLINE_SERVICE_TITLE, IDS_CONTENT_RESTRICTION, uiIDA, 1, iPad); } else#endif { // need to get info on the pack to see if the user has already downloaded it TexturePack *tPack = Minecraft::GetInstance()->skins->getSelected(); DLCTexturePack *pDLCTexPack=(DLCTexturePack *)tPack;
// retrieve the store name for the skin pack DLCPack *pDLCPack=pDLCTexPack->getDLCInfoParentPack();//tPack->getDLCPack(); const char *pchPackName=wstringtofilename(pDLCPack->getName()); app.DebugPrintf("Texture Pack - %s\n",pchPackName); SONYDLC *pSONYDLCInfo=app.GetSONYDLCInfo((char *)pchPackName);
if(pSONYDLCInfo!=NULL) { char chName[42]; char chKeyName[20]; char chSkuID[SCE_NP_COMMERCE2_SKU_ID_LEN];
memset(chSkuID,0,SCE_NP_COMMERCE2_SKU_ID_LEN); // find the info on the skin pack // we have to retrieve the skuid from the store info, it can't be hardcoded since Sony may change it. // So we assume the first sku for the product is the one we want
// MGH - keyname in the DLC file is 16 chars long, but there's no space for a NULL terminating char memset(chKeyName, 0, sizeof(chKeyName)); strncpy(chKeyName, pSONYDLCInfo->chDLCKeyname, 16);
#ifdef __ORBIS__ strcpy(chName, chKeyName);#else sprintf(chName,"%s-%s",app.GetCommerceCategory(),chKeyName);#endif app.GetDLCSkuIDFromProductList(chName,chSkuID);
// 4J-PB - need to check for an empty store#if defined __ORBIS__ || defined __PSVITA__ || defined __PS3__ if(app.CheckForEmptyStore(iPad)==false)#endif { if(app.DLCAlreadyPurchased(chSkuID)) { app.DownloadAlreadyPurchased(chSkuID); } else { app.Checkout(chSkuID); } } } } } }#endif //
return 0;}
int UIScene_PauseMenu::BuyTexturePack_SignInReturned(void *pParam,bool bContinue, int iPad){ if(bContinue==true) { // Check if we're signed in to LIVE if(ProfileManager.IsSignedInLive(iPad)) {#if defined(__PS3__) || defined(__ORBIS__) || defined(__PSVITA__)
#ifndef __ORBIS__ // 4J-PB - need to check this user can access the store bool bContentRestricted=false; ProfileManager.GetChatAndContentRestrictions(iPad,true,NULL,&bContentRestricted,NULL); if(bContentRestricted) { UINT uiIDA[1]; uiIDA[0]=IDS_CONFIRM_OK; ui.RequestAlertMessage(IDS_ONLINE_SERVICE_TITLE, IDS_CONTENT_RESTRICTION, uiIDA, 1, iPad); } else#endif { // need to get info on the pack to see if the user has already downloaded it TexturePack *tPack = Minecraft::GetInstance()->skins->getSelected(); DLCTexturePack *pDLCTexPack=(DLCTexturePack *)tPack;
// retrieve the store name for the skin pack DLCPack *pDLCPack=pDLCTexPack->getDLCInfoParentPack();//tPack->getDLCPack(); const char *pchPackName=wstringtofilename(pDLCPack->getName()); app.DebugPrintf("Texture Pack - %s\n",pchPackName); SONYDLC *pSONYDLCInfo=app.GetSONYDLCInfo((char *)pchPackName);
if(pSONYDLCInfo!=NULL) { char chName[42]; char chKeyName[20]; char chSkuID[SCE_NP_COMMERCE2_SKU_ID_LEN];
memset(chSkuID,0,SCE_NP_COMMERCE2_SKU_ID_LEN); // find the info on the skin pack // we have to retrieve the skuid from the store info, it can't be hardcoded since Sony may change it. // So we assume the first sku for the product is the one we want
// MGH - keyname in the DLC file is 16 chars long, but there's no space for a NULL terminating char memset(chKeyName, 0, sizeof(chKeyName)); strncpy(chKeyName, pSONYDLCInfo->chDLCKeyname, 16);
#ifdef __ORBIS__ strcpy(chName, chKeyName);#else sprintf(chName,"%s-%s",app.GetCommerceCategory(),chKeyName);#endif app.GetDLCSkuIDFromProductList(chName,chSkuID);
// 4J-PB - need to check for an empty store#if defined __ORBIS__ || defined __PSVITA__ || defined __PS3__ if(app.CheckForEmptyStore(iPad)==false)#endif { if(app.DLCAlreadyPurchased(chSkuID)) { app.DownloadAlreadyPurchased(chSkuID); } else { app.Checkout(chSkuID); } } } }#else // TO BE IMPEMENTED FOR ORBIS#endif } } return 0;}
int UIScene_PauseMenu::ViewInvites_SignInReturned(void *pParam,bool bContinue, int iPad){ if(bContinue==true) { // Check if we're signed in to LIVE if(ProfileManager.IsSignedInLive(iPad)) {#ifdef __ORBIS__ SQRNetworkManager_Orbis::RecvInviteGUI();#elif defined __PS3__ int ret = sceNpBasicRecvMessageCustom(SCE_NP_BASIC_MESSAGE_MAIN_TYPE_INVITE, SCE_NP_BASIC_RECV_MESSAGE_OPTIONS_INCLUDE_BOOTABLE, SYS_MEMORY_CONTAINER_ID_INVALID); app.DebugPrintf("sceNpBasicRecvMessageCustom return %d ( %08x )\n", ret, ret);#else // __PSVITA__ PSVITA_STUBBED;#endif } } return 0;}
int UIScene_PauseMenu::ExitGameSaveDialogReturned(void *pParam,int iPad,C4JStorage::EMessageResult result){ // Exit with or without saving // Decline means save in this dialog if(result==C4JStorage::EMessage_ResultDecline || result==C4JStorage::EMessage_ResultThirdOption) { if( result==C4JStorage::EMessage_ResultDecline ) // Save { // 4J-PB - Is the player trying to save but they are using a trial texturepack ? if(!Minecraft::GetInstance()->skins->isUsingDefaultSkin()) { TexturePack *tPack = Minecraft::GetInstance()->skins->getSelected(); DLCTexturePack *pDLCTexPack=(DLCTexturePack *)tPack;
DLCPack *pDLCPack=pDLCTexPack->getDLCInfoParentPack();//tPack->getDLCPack(); if(!pDLCPack->hasPurchasedFile( DLCManager::e_DLCType_Texture, L"" )) { #ifdef _XBOX // upsell ULONGLONG ullOfferID_Full; // get the dlc texture pack DLCTexturePack *pDLCTexPack=(DLCTexturePack *)tPack;
app.GetDLCFullOfferIDForPackID(pDLCTexPack->getDLCParentPackId(),&ullOfferID_Full);
// tell sentient about the upsell of the full version of the skin pack TelemetryManager->RecordUpsellPresented(iPad, eSet_UpsellID_Texture_DLC, ullOfferID_Full & 0xFFFFFFFF);#endif
UINT uiIDA[2]; uiIDA[0]=IDS_CONFIRM_OK; uiIDA[1]=IDS_CONFIRM_CANCEL;
// Give the player a warning about the trial version of the texture pack ui.RequestAlertMessage(IDS_WARNING_DLC_TRIALTEXTUREPACK_TITLE, IDS_WARNING_DLC_TRIALTEXTUREPACK_TEXT, uiIDA, 2, ProfileManager.GetPrimaryPad() ,&UIScene_PauseMenu::WarningTrialTexturePackReturned, pParam);
return S_OK; } }
// does the save exist? bool bSaveExists; StorageManager.DoesSaveExist(&bSaveExists); // 4J-PB - we check if the save exists inside the libs // we need to ask if they are sure they want to overwrite the existing game if(bSaveExists) { UINT uiIDA[2]; uiIDA[0]=IDS_CONFIRM_CANCEL; uiIDA[1]=IDS_CONFIRM_OK; ui.RequestAlertMessage(IDS_TITLE_SAVE_GAME, IDS_CONFIRM_SAVE_GAME, uiIDA, 2, ProfileManager.GetPrimaryPad(),&IUIScene_PauseMenu::ExitGameAndSaveReturned, pParam); return 0; } else {#if defined(_XBOX_ONE) || defined(__ORBIS__) StorageManager.SetSaveDisabled(false);#endif MinecraftServer::getInstance()->setSaveOnExit( true ); } } else { // been a few requests for a confirm on exit without saving UINT uiIDA[2]; uiIDA[0]=IDS_CONFIRM_CANCEL; uiIDA[1]=IDS_CONFIRM_OK; ui.RequestAlertMessage(IDS_TITLE_DECLINE_SAVE_GAME, IDS_CONFIRM_DECLINE_SAVE_GAME, uiIDA, 2, ProfileManager.GetPrimaryPad(),&IUIScene_PauseMenu::ExitGameDeclineSaveReturned, pParam); return 0; }
app.SetAction(iPad,eAppAction_ExitWorld); } return 0;}
#endif
void UIScene_PauseMenu::SetIgnoreInput(bool ignoreInput){ m_bIgnoreInput = ignoreInput;}
#ifdef _XBOX_ONEvoid UIScene_PauseMenu::HandleDLCLicenseChange(){ }#endif
#ifdef __ORBIS__bool UIScene_PauseMenu::CheckForPatch(){ int npAvailability = ProfileManager.getNPAvailability(ProfileManager.GetPrimaryPad());
bool bPatchAvailable; switch(npAvailability) { case SCE_NP_ERROR_LATEST_PATCH_PKG_EXIST: case SCE_NP_ERROR_LATEST_PATCH_PKG_DOWNLOADED: bPatchAvailable=true; break; default: bPatchAvailable=false; break; }
if(bPatchAvailable) { int32_t ret = sceErrorDialogInitialize(); if ( ret==SCE_OK ) { m_bErrorDialogRunning = true;
SceErrorDialogParam param; sceErrorDialogParamInitialize( ¶m ); // 4J-PB - We want to display the option to get the patch now param.errorCode = SCE_NP_ERROR_LATEST_PATCH_PKG_DOWNLOADED;//pClass->m_errorCode; ret = sceUserServiceGetInitialUser( ¶m.userId ); if ( ret == SCE_OK ) { ret = sceErrorDialogOpen( ¶m ); } else { sceErrorDialogTerminate(); } } }
return bPatchAvailable;}#endif