mirror of
https://github.com/4jcraft/4jcraft.git
synced 2026-04-25 12:53:36 +00:00
1589 lines
63 KiB
C++
1589 lines
63 KiB
C++
#include "../../Minecraft.World/Platform/stdafx.h"
|
|
#include "UI.h"
|
|
#include "UIScene_PauseMenu.h"
|
|
#include "../../Minecraft.Client/MinecraftServer.h"
|
|
#include "../../Minecraft.Client/Player/MultiPlayerLocalPlayer.h"
|
|
#include "../../Minecraft.Client/Textures/Packs/TexturePackRepository.h"
|
|
#include "../../Minecraft.Client/Textures/Packs/TexturePack.h"
|
|
#include "../../Minecraft.Client/Textures/Packs/DLCTexturePack.h"
|
|
#include "../../Minecraft.World/Util/StringHelpers.h"
|
|
#ifdef __ORBIS__
|
|
#include <error_dialog.h>
|
|
#endif
|
|
|
|
#ifdef _DURANGO
|
|
#include "../../Minecraft.Client/Platform/Durango/Leaderboards/DurangoStatsDebugger.h"
|
|
#endif
|
|
|
|
#ifdef __PSVITA__
|
|
#include "../../Minecraft.Client/Platform/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
|
|
|
|
// TODO: proper fix for pausing
|
|
// 4jcraft: replace IsLocalGame() with GetPlayerCount() == 1 due to
|
|
// IsLocalGame() issues on Iggy
|
|
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);
|
|
}
|
|
|
|
std::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
|
|
// TODO: proper fix for pausing
|
|
// 4jcraft: replace IsLocalGame() with GetPlayerCount() == 1 due
|
|
// to IsLocalGame() issues on Iggy
|
|
if (iPad == ProfileManager.GetPrimaryPad() &&
|
|
/*g_NetworkManager.IsLocalGame()*/ g_NetworkManager
|
|
.GetPlayerCount() == 1) {
|
|
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
|
|
unsigned int 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));
|
|
|
|
unsigned int uiIDA[1];
|
|
uiIDA[0] = IDS_OK;
|
|
ui.RequestErrorMessage(IDS_ERROR_NETWORK_TITLE,
|
|
IDS_ERROR_NETWORK, uiIDA, 1,
|
|
iPad);
|
|
} else {
|
|
// Not signed in to PSN
|
|
unsigned int 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
|
|
unsigned int 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) {
|
|
unsigned int 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:
|
|
// TODO: proper fix for pausing
|
|
// 4jcraft: replace IsLocalGame() with GetPlayerCount() == 1 due to
|
|
// IsLocalGame() issues on Iggy
|
|
if (m_iPad == ProfileManager.GetPrimaryPad() &&
|
|
/*g_NetworkManager.IsLocalGame()*/ g_NetworkManager
|
|
.GetPlayerCount() == 1) {
|
|
app.SetXuiServerAction(ProfileManager.GetPrimaryPad(),
|
|
eXuiServerAction_PauseServer,
|
|
(void*)FALSE);
|
|
}
|
|
navigateBack();
|
|
break;
|
|
case BUTTON_PAUSE_LEADERBOARDS: {
|
|
unsigned int 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) {
|
|
unsigned int 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;
|
|
unsigned int 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
|
|
unsigned int 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));
|
|
|
|
unsigned int 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
|
|
unsigned int 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
|
|
unsigned int 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
|
|
unsigned int 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)) {
|
|
unsigned int 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()) {
|
|
unsigned int 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
|
|
unsigned int 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;
|
|
unsigned int 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
|
|
unsigned int 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));
|
|
|
|
unsigned int 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
|
|
unsigned int 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 {
|
|
unsigned int 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
|
|
unsigned int 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
|
|
unsigned int 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) {
|
|
unsigned int 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) {
|
|
unsigned int 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__)
|
|
unsigned int 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) {
|
|
unsigned int 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_ONE
|
|
int 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:
|
|
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) {
|
|
unsigned int 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
|
|
unsigned int 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));
|
|
|
|
unsigned int uiIDA[1];
|
|
uiIDA[0] = IDS_OK;
|
|
ui.RequestErrorMessage(IDS_ERROR_NETWORK_TITLE,
|
|
IDS_ERROR_NETWORK, uiIDA, 1, iPad);
|
|
} else {
|
|
unsigned int 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!
|
|
unsigned int 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) {
|
|
unsigned int 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) {
|
|
unsigned int 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
|
|
|
|
unsigned int 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) {
|
|
unsigned int 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
|
|
unsigned int 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_ONE
|
|
void 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 |