aboutsummaryrefslogtreecommitdiff
path: root/Minecraft.Client/Common/UI/UIScene_SkinSelectMenu.cpp
diff options
context:
space:
mode:
authorLoki Rautio <lokirautio@gmail.com>2026-03-04 03:56:03 -0600
committerLoki Rautio <lokirautio@gmail.com>2026-03-04 03:56:03 -0600
commit42aec6dac53dffa6afe072560a7e1d4986112538 (patch)
tree0836426857391df1b6a83f6368a183f83ec9b104 /Minecraft.Client/Common/UI/UIScene_SkinSelectMenu.cpp
parentc9d58eeac7c72f0b3038e084667b4d89a6249fce (diff)
parentef9b6fd500dfabd9463267b0dd9e29577eea8a2b (diff)
Merge branch 'main' into pr/win64-world-saves
# Conflicts: # Minecraft.Client/MinecraftServer.cpp # README.md
Diffstat (limited to 'Minecraft.Client/Common/UI/UIScene_SkinSelectMenu.cpp')
-rw-r--r--Minecraft.Client/Common/UI/UIScene_SkinSelectMenu.cpp274
1 files changed, 99 insertions, 175 deletions
diff --git a/Minecraft.Client/Common/UI/UIScene_SkinSelectMenu.cpp b/Minecraft.Client/Common/UI/UIScene_SkinSelectMenu.cpp
index 33f41994..d4f26ae7 100644
--- a/Minecraft.Client/Common/UI/UIScene_SkinSelectMenu.cpp
+++ b/Minecraft.Client/Common/UI/UIScene_SkinSelectMenu.cpp
@@ -222,170 +222,7 @@ void UIScene_SkinSelectMenu::handleInput(int iPad, int key, bool repeat, bool pr
#endif
if(pressed)
{
- ui.AnimateKeyPress(iPad, key, repeat, pressed, released);
- // if the profile data has been changed, then force a profile write
- // It seems we're allowed to break the 5 minute rule if it's the result of a user action
- switch(m_packIndex)
- {
- case SKIN_SELECT_PACK_DEFAULT:
- app.SetPlayerSkin(iPad, m_skinIndex);
- app.SetPlayerCape(iPad, 0);
- m_currentSkinPath = app.GetPlayerSkinName(iPad);
- m_originalSkinId = app.GetPlayerSkinId(iPad);
- setCharacterSelected(true);
- ui.PlayUISFX(eSFX_Press);
- break;
- case SKIN_SELECT_PACK_FAVORITES:
- if(app.GetPlayerFavoriteSkinsCount(iPad)>0)
- {
- // get the pack number from the skin id
- wchar_t chars[256];
- swprintf(chars, 256, L"dlcskin%08d.png", app.GetPlayerFavoriteSkin(iPad,m_skinIndex));
-
- DLCPack *Pack=app.m_dlcManager.getPackContainingSkin(chars);
-
- if(Pack)
- {
- DLCSkinFile *skinFile = Pack->getSkinFile(chars);
- app.SetPlayerSkin(iPad, skinFile->getPath());
- app.SetPlayerCape(iPad, skinFile->getParameterAsString(DLCManager::e_DLCParamType_Cape));
- setCharacterSelected(true);
- m_currentSkinPath = app.GetPlayerSkinName(iPad);
- m_originalSkinId = app.GetPlayerSkinId(iPad);
- app.SetPlayerFavoriteSkinsPos(iPad,m_skinIndex);
- }
- }
- break;
- default:
- if( m_currentPack != NULL )
- {
- DLCSkinFile *skinFile = m_currentPack->getSkinFile(m_skinIndex);
-
- if ( !skinFile->getParameterAsBool( DLCManager::e_DLCParamType_Free ) // Is this a free skin?
- && !m_currentPack->hasPurchasedFile( DLCManager::e_DLCType_Skin, skinFile->getPath() ) // do we have a license?
- )
- {
- // 4J-PB - check for a patch
-#ifdef __ORBIS__
- // 4J-PB - Check if there is a patch for the game
- int errorCode = ProfileManager.getNPAvailability(ProfileManager.GetPrimaryPad());
-
- bool bPatchAvailable;
- switch(errorCode)
- {
- 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();
- m_bErrorDialogRunning=true;
- if ( ret==SCE_OK )
- {
- SceErrorDialogParam param;
- sceErrorDialogParamInitialize( &param );
- // 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( &param.userId );
- if ( ret == SCE_OK )
- {
- ret=sceErrorDialogOpen( &param );
- break;
- }
- }
- }
-#endif
-
- // no
- UINT uiIDA[1] = { IDS_OK };
-#ifdef __ORBIS__
- // Check if PSN is unavailable because of age restriction
- int npAvailability = ProfileManager.getNPAvailability(iPad);
- if (npAvailability == SCE_NP_ERROR_AGE_RESTRICTION)
- {
- ui.RequestMessageBox(IDS_ONLINE_SERVICE_TITLE, IDS_CONTENT_RESTRICTION, uiIDA, 1, iPad, NULL, NULL, app.GetStringTable());
- }
- else
-#endif
- // We need to upsell the full version
- if(ProfileManager.IsGuest(iPad))
- {
- // can't buy
- ui.RequestMessageBox(IDS_PRO_GUESTPROFILE_TITLE, IDS_PRO_GUESTPROFILE_TEXT, uiIDA, 1,iPad,NULL,NULL,app.GetStringTable(),NULL,0,false);
- }
- // are we online?
- else if(!ProfileManager.IsSignedInLive(iPad))
- {
- showNotOnlineDialog(iPad);
- }
- else
- {
- // upsell
-#ifdef _XBOX
- DLC_INFO *pDLCInfo = app.GetDLCInfoForTrialOfferID(m_currentPack->getPurchaseOfferId());
- ULONGLONG ullOfferID_Full;
-
- if(pDLCInfo!=NULL)
- {
- ullOfferID_Full=pDLCInfo->ullOfferID_Full;
- }
- else
- {
- ullOfferID_Full=m_currentPack->getPurchaseOfferId();
- }
-
- // tell sentient about the upsell of the full version of the skin pack
- TelemetryManager->RecordUpsellPresented(iPad, eSet_UpsellID_Skin_DLC, ullOfferID_Full & 0xFFFFFFFF);
-#endif
- bool bContentRestricted=false;
-#if defined(__PS3__) || defined(__PSVITA__)
- ProfileManager.GetChatAndContentRestrictions(m_iPad,true,NULL,&bContentRestricted,NULL);
-#endif
- if(bContentRestricted)
- {
-#if !(defined(_XBOX) || defined(_WIN64)) // 4J Stu - Temp to get the win build running, but so we check this for other platforms
- // you can't see the store
- UINT uiIDA[1] = { IDS_CONFIRM_OK };
- ui.RequestMessageBox(IDS_ONLINE_SERVICE_TITLE, IDS_CONTENT_RESTRICTION, uiIDA, 1, iPad,NULL,this, app.GetStringTable(),NULL,0,false);
-#endif
- }
- else
- {
- // 4J-PB - need to check for an empty store
-#if defined __ORBIS__ || defined __PSVITA__ || defined __PS3__
- if(app.CheckForEmptyStore(iPad)==false)
-#endif
- {
- this->m_bIgnoreInput = true;
-
- UINT uiIDA[2] = { IDS_CONFIRM_OK, IDS_CONFIRM_CANCEL };
- ui.RequestMessageBox(IDS_UNLOCK_DLC_TITLE, IDS_UNLOCK_DLC_SKIN, uiIDA, 2, iPad,&UIScene_SkinSelectMenu::UnlockSkinReturned,this,app.GetStringTable(),NULL,0,false);
- }
- }
- }
- }
- else
- {
- app.SetPlayerSkin(iPad, skinFile->getPath());
- app.SetPlayerCape(iPad, skinFile->getParameterAsString(DLCManager::e_DLCParamType_Cape));
- setCharacterSelected(true);
- m_currentSkinPath = app.GetPlayerSkinName(iPad);
- m_originalSkinId = app.GetPlayerSkinId(iPad);
-
- // push this onto the favorite list
- AddFavoriteSkin(iPad,GET_DLC_SKIN_ID_FROM_BITMASK(m_originalSkinId));
- }
- }
-
- ui.PlayUISFX(eSFX_Press);
- break;
- }
+ InputActionOK(iPad);
}
break;
case ACTION_MENU_UP:
@@ -614,17 +451,62 @@ void UIScene_SkinSelectMenu::InputActionOK(unsigned int iPad)
//if(true)
if(!m_currentPack->hasPurchasedFile( DLCManager::e_DLCType_Skin, skinFile->getPath() ))
{
+#ifdef __ORBIS__
+ // 4J-PB - Check if there is a patch for the game
+ int errorCode = ProfileManager.getNPAvailability(ProfileManager.GetPrimaryPad());
+
+ bool bPatchAvailable;
+ switch(errorCode)
+ {
+ 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();
+ m_bErrorDialogRunning=true;
+ if ( ret==SCE_OK )
+ {
+ SceErrorDialogParam param;
+ sceErrorDialogParamInitialize( &param );
+ // 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( &param.userId );
+ if ( ret == SCE_OK )
+ {
+ ret=sceErrorDialogOpen( &param );
+ break;
+ }
+ }
+ }
+#endif
+
// no
UINT uiIDA[1];
uiIDA[0]=IDS_OK;
+#ifdef __ORBIS__
+ // Check if PSN is unavailable because of age restriction
+ int npAvailability = ProfileManager.getNPAvailability(iPad);
+ if (npAvailability == SCE_NP_ERROR_AGE_RESTRICTION)
+ {
+ ui.RequestErrorMessage(IDS_ONLINE_SERVICE_TITLE, IDS_CONTENT_RESTRICTION, uiIDA, 1, iPad);
+ }
+ else
+#endif
// We need to upsell the full version
if(ProfileManager.IsGuest(iPad))
{
// can't buy
- ui.RequestMessageBox(IDS_PRO_GUESTPROFILE_TITLE, IDS_PRO_GUESTPROFILE_TEXT, uiIDA, 1,iPad,NULL,NULL,app.GetStringTable(),NULL,0,false);
+ ui.RequestAlertMessage(IDS_PRO_GUESTPROFILE_TITLE, IDS_PRO_GUESTPROFILE_TEXT, uiIDA, 1,iPad);
}
-#if defined(__PS3__) || defined(__ORBIS__)
+#if defined(__PS3__) || defined(__ORBIS__) || defined __PSVITA__
// are we online?
else if(!ProfileManager.IsSignedInLive(iPad))
{
@@ -656,11 +538,11 @@ void UIScene_SkinSelectMenu::InputActionOK(unsigned int iPad)
#endif
if(bContentRestricted)
{
-#if !(defined(_XBOX) || defined(_WIN64)) // 4J Stu - Temp to get the win build running, but so we check this for other platforms
+#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 the store
UINT uiIDA[1];
uiIDA[0]=IDS_CONFIRM_OK;
- ui.RequestMessageBox(IDS_ONLINE_SERVICE_TITLE, IDS_CONTENT_RESTRICTION, uiIDA, 1, ProfileManager.GetPrimaryPad(),NULL,this, app.GetStringTable(),NULL,0,false);
+ ui.RequestAlertMessage(IDS_ONLINE_SERVICE_TITLE, IDS_CONTENT_RESTRICTION, uiIDA, 1, iPad);
#endif
}
else
@@ -674,7 +556,7 @@ void UIScene_SkinSelectMenu::InputActionOK(unsigned int iPad)
renableInputAfterOperation = false;
UINT uiIDA[2] = { IDS_CONFIRM_OK, IDS_CONFIRM_CANCEL };
- ui.RequestMessageBox(IDS_UNLOCK_DLC_TITLE, IDS_UNLOCK_DLC_SKIN, uiIDA, 2, iPad,&UIScene_SkinSelectMenu::UnlockSkinReturned,this,app.GetStringTable(),NULL,0,false);
+ ui.RequestAlertMessage(IDS_UNLOCK_DLC_TITLE, IDS_UNLOCK_DLC_SKIN, uiIDA, 2, iPad,&UIScene_SkinSelectMenu::UnlockSkinReturned,this);
}
}
}
@@ -703,7 +585,10 @@ void UIScene_SkinSelectMenu::InputActionOK(unsigned int iPad)
AddFavoriteSkin(iPad,GET_DLC_SKIN_ID_FROM_BITMASK(m_originalSkinId));
}
- if (renableInputAfterOperation) m_bIgnoreInput = false;
+ if (renableInputAfterOperation)
+ {
+ m_bIgnoreInput = false;
+ }
}
ui.PlayUISFX(eSFX_Press);
@@ -1652,7 +1537,18 @@ void UIScene_SkinSelectMenu::showNotOnlineDialog(int iPad)
SQRNetworkManager_PS3::AttemptPSNSignIn(NULL, this);
#elif defined(__PSVITA__)
- SQRNetworkManager_Vita::AttemptPSNSignIn(NULL, this);
+ if(CGameNetworkManager::usingAdhocMode() && SQRNetworkManager_AdHoc_Vita::GetAdhocStatus())
+ {
+ // we're in adhoc mode, we really need to ask before disconnecting
+ UINT uiIDA[2];
+ uiIDA[0]=IDS_PRO_NOTONLINE_ACCEPT;
+ uiIDA[1]=IDS_CANCEL;
+ ui.RequestErrorMessage(IDS_PRO_NOTONLINE_TITLE, IDS_PRO_NOTONLINE_TEXT, uiIDA, 2, ProfileManager.GetPrimaryPad(),&UIScene_SkinSelectMenu::MustSignInReturned,NULL);
+ }
+ else
+ {
+ SQRNetworkManager_Vita::AttemptPSNSignIn(NULL, this);
+ }
#elif defined(__ORBIS__)
SQRNetworkManager_Orbis::AttemptPSNSignIn(NULL, this, false, iPad);
@@ -1660,7 +1556,7 @@ void UIScene_SkinSelectMenu::showNotOnlineDialog(int iPad)
#elif defined(_DURANGO)
UINT uiIDA[1] = { IDS_CONFIRM_OK };
- ui.RequestMessageBox(IDS_PRO_NOTONLINE_TITLE, IDS_PRO_XBOXLIVE_NOTIFICATION, uiIDA, 1, iPad, NULL, NULL, app.GetStringTable() );
+ ui.RequestErrorMessage(IDS_PRO_NOTONLINE_TITLE, IDS_PRO_XBOXLIVE_NOTIFICATION, uiIDA, 1, iPad );
#endif
}
@@ -1723,9 +1619,9 @@ int UIScene_SkinSelectMenu::UnlockSkinReturned(void *pParam,int iPad,C4JStorage:
app.Checkout(chSkuID);
}
}
- // need to re-enable input because the user can back out of the store purchase, and we'll be stuck
- pScene->m_bIgnoreInput = false;
}
+ // need to re-enable input because the user can back out of the store purchase, and we'll be stuck
+ pScene->m_bIgnoreInput = false; // MGH - moved this to outside the pSONYDLCInfo, so we don't get stuck
#elif defined _XBOX_ONE
StorageManager.InstallOffer(1,(WCHAR *)(pScene->m_currentPack->getPurchaseOfferId().c_str()), &RenableInput, pScene, NULL);
#endif
@@ -1810,4 +1706,32 @@ void UIScene_SkinSelectMenu::HandleDLCLicenseChange()
// update the lock flag
handleSkinIndexChanged();
}
-#endif \ No newline at end of file
+#endif
+
+
+
+
+#ifdef __PSVITA__
+int UIScene_SkinSelectMenu::MustSignInReturned(void *pParam,int iPad,C4JStorage::EMessageResult result)
+{
+ if(result==C4JStorage::EMessage_ResultAccept)
+ {
+#ifdef __PS3__
+ SQRNetworkManager_PS3::AttemptPSNSignIn(&UIScene_SkinSelectMenu::PSNSignInReturned, pParam,true);
+#elif defined __PSVITA__
+ SQRNetworkManager_Vita::AttemptPSNSignIn(&UIScene_SkinSelectMenu::PSNSignInReturned, pParam,true);
+#elif defined __ORBIS__
+ SQRNetworkManager_Orbis::AttemptPSNSignIn(&UIScene_SkinSelectMenu::PSNSignInReturned, pParam,true);
+#endif
+ }
+ return 0;
+}
+
+int UIScene_SkinSelectMenu::PSNSignInReturned(void* pParam, bool bContinue, int iPad)
+{
+ if( bContinue )
+ {
+ }
+ return 0;
+}
+#endif // __PSVITA__ \ No newline at end of file