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.
12 kB · 392 lines
C++
at main
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393#include "stdafx.h"#include <xuiresource.h>#include <xuiapp.h>#include <assert.h>#include "..\..\..\Minecraft.World\LevelSettings.h"#include "..\..\..\Minecraft.World\StringHelpers.h"#include "XUI_MultiGameInfo.h"#include "XUI_MultiGameJoinLoad.h"#include "..\..\..\Minecraft.World\LevelSettings.h"#include "..\..\..\Minecraft.World\Difficulty.h"
#define UPDATE_PLAYERS_TIMER_ID 0#define UPDATE_PLAYERS_TIMER_TIME 30000
//----------------------------------------------------------------------------------// Performs initialization tasks - retrieves controls.//----------------------------------------------------------------------------------HRESULT CScene_MultiGameInfo::OnInit( XUIMessageInit* pInitData, BOOL& bHandled ){ MapChildControls(); XuiControlSetText(playersList,app.GetString(IDS_PLAYERS)); XuiControlSetText(m_JoinGame,app.GetString(IDS_JOIN_GAME)); XuiControlSetText(m_labelDifficulty,app.GetString(IDS_LABEL_DIFFICULTY)); XuiControlSetText(m_labelGameType,app.GetString(IDS_LABEL_GAME_TYPE)); XuiControlSetText(m_labelGamertagsOn,app.GetString(IDS_LABEL_GAMERTAGS)); XuiControlSetText(m_labelStructuresOn,app.GetString(IDS_LABEL_STRUCTURES)); XuiControlSetText(m_labelLevelType,app.GetString(IDS_LABEL_LEVEL_TYPE)); XuiControlSetText(m_labelPvP,app.GetString(IDS_LABEL_PvP)); XuiControlSetText(m_labelTrust,app.GetString(IDS_LABEL_TRUST)); XuiControlSetText(m_labelTNTOn,app.GetString(IDS_LABEL_TNT)); XuiControlSetText(m_labelFireOn,app.GetString(IDS_LABEL_FIRE_SPREADS));
JoinMenuInitData *initData = (JoinMenuInitData *)pInitData->pvInitData; m_selectedSession = initData->selectedSession; m_iPad = initData->iPad; // 4J-PB - don't delete this - it's part of the joinload structure //delete initData;
for(unsigned int i = 0; i < MINECRAFT_NET_MAX_PLAYERS; ++i) { if( m_selectedSession->data.players[i] != NULL ) { playersList.InsertItems(i,1);#ifndef _CONTENT_PACKAGE if(app.DebugSettingsOn() && (app.GetGameSettingsDebugMask()&(1L<<eDebugSetting_DebugLeaderboards))) { playersList.SetText(i, L"WWWWWWWWWWWWWWWW" ); } else#endif { playersList.SetText(i, convStringToWstring( m_selectedSession->data.szPlayers[i] ).c_str() ); } } else { // Leave the loop when we hit the first NULL player break; } }
unsigned int uiGameHostSettings = m_selectedSession->data.m_uiGameHostSettings; switch(app.GetGameHostOption(uiGameHostSettings,eGameHostOption_Difficulty)) { case Difficulty::EASY: m_difficulty.SetText( app.GetString(IDS_DIFFICULTY_TITLE_EASY) ); break; case Difficulty::NORMAL: m_difficulty.SetText( app.GetString(IDS_DIFFICULTY_TITLE_NORMAL) ); break; case Difficulty::HARD: m_difficulty.SetText( app.GetString(IDS_DIFFICULTY_TITLE_HARD) ); break; case Difficulty::PEACEFUL: default: m_difficulty.SetText( app.GetString(IDS_DIFFICULTY_TITLE_PEACEFUL) ); break; } unsigned int hostOption = app.GetGameHostOption(uiGameHostSettings,eGameHostOption_GameType);
if (hostOption == GameType::CREATIVE->getId()) { m_GameType.SetText( app.GetString(IDS_CREATIVE) ); } else if (hostOption == GameType::SURVIVAL->getId()) { m_GameType.SetText( app.GetString(IDS_SURVIVAL) ); } else { m_GameType.SetText( app.GetString(IDS_SURVIVAL) ); }
if(app.GetGameHostOption(uiGameHostSettings,eGameHostOption_Gamertags)) m_gamertagsOn.SetText( app.GetString(IDS_ON) ); else m_gamertagsOn.SetText( app.GetString(IDS_OFF) );
if(app.GetGameHostOption(uiGameHostSettings,eGameHostOption_Structures)) m_structuresOn.SetText( app.GetString(IDS_ON) ); else m_structuresOn.SetText( app.GetString(IDS_OFF) );
if(app.GetGameHostOption(uiGameHostSettings,eGameHostOption_LevelType)) m_levelType.SetText( app.GetString(IDS_LEVELTYPE_SUPERFLAT) ); else m_levelType.SetText( app.GetString(IDS_LEVELTYPE_NORMAL) );
if(app.GetGameHostOption(uiGameHostSettings,eGameHostOption_PvP)) m_pvpOn.SetText( app.GetString(IDS_ON) ); else m_pvpOn.SetText( app.GetString(IDS_OFF) );
if(app.GetGameHostOption(uiGameHostSettings,eGameHostOption_TrustPlayers)) m_trustPlayers.SetText( app.GetString(IDS_ON) ); else m_trustPlayers.SetText( app.GetString(IDS_OFF) );
if(app.GetGameHostOption(uiGameHostSettings,eGameHostOption_TNT)) m_tntOn.SetText( app.GetString(IDS_ON) ); else m_tntOn.SetText( app.GetString(IDS_OFF) );
if(app.GetGameHostOption(uiGameHostSettings,eGameHostOption_FireSpreads)) m_fireOn.SetText( app.GetString(IDS_ON) ); else m_fireOn.SetText( app.GetString(IDS_OFF) );
m_bIgnoreInput = false; // Alert the app the we want to be informed of ethernet connections app.SetLiveLinkRequired( true ); TelemetryManager->RecordMenuShown(m_iPad, eUIScene_JoinMenu, 0);
ui.SetTooltips( DEFAULT_XUI_MENU_USER, IDS_TOOLTIPS_SELECT, IDS_TOOLTIPS_BACK );
XuiSetTimer(m_hObj,UPDATE_PLAYERS_TIMER_ID,UPDATE_PLAYERS_TIMER_TIME); return S_OK;}
//----------------------------------------------------------------------------------// Handler for the button press message.//----------------------------------------------------------------------------------HRESULT CScene_MultiGameInfo::OnNotifyPressEx(HXUIOBJ hObjPressed, XUINotifyPress* pNotifyPressData, BOOL& rfHandled){ if(m_bIgnoreInput) return S_OK;
// This assumes all buttons can only be pressed with the A button ui.AnimateKeyPress(pNotifyPressData->UserIndex, VK_PAD_A);
if ( hObjPressed == m_JoinGame ) { // check we have the texture pack required for the game
SetShow( FALSE ); m_bIgnoreInput=true;
// 4J Stu - If we only have one controller connected, then don't show the sign-in UI again DWORD connectedControllers = 0; for(unsigned int i = 0; i < XUSER_MAX_COUNT; ++i) { if( InputManager.IsPadConnected(i) || ProfileManager.IsSignedIn(i) ) ++connectedControllers; }
if(connectedControllers == 1 || !RenderManager.IsHiDef()) { JoinGame( this ); } else { ProfileManager.RequestSignInUI(false, false, false, true, false,&CScene_MultiGameInfo::StartGame_SignInReturned, this,ProfileManager.GetPrimaryPad()); } }
return S_OK;}
HRESULT CScene_MultiGameInfo::OnKeyDown(XUIMessageInput* pInputData, BOOL& rfHandled){ if(m_bIgnoreInput) return S_OK;
ui.AnimateKeyPress(pInputData->UserIndex, pInputData->dwKeyCode);
HRESULT hr = S_OK;
// Explicitly handle B button presses switch(pInputData->dwKeyCode) { case VK_PAD_B: case VK_ESCAPE: app.NavigateBack(pInputData->UserIndex); rfHandled = TRUE; break; case VK_PAD_Y: if(m_selectedSession != NULL && playersList.TreeHasFocus() && playersList.GetItemCount() > 0) { PlayerUID xuid = m_selectedSession->data.players[playersList.GetCurSel()]; if( xuid != INVALID_XUID ) hr = XShowGamerCardUI(ProfileManager.GetLockedProfile(), xuid); } break; } return hr;}
HRESULT CScene_MultiGameInfo::OnNavReturn(HXUIOBJ hObj,BOOL& rfHandled){ ui.SetTooltips( DEFAULT_XUI_MENU_USER, IDS_TOOLTIPS_SELECT, IDS_TOOLTIPS_BACK);
return S_OK;}
HRESULT CScene_MultiGameInfo::OnNotifySelChanged(HXUIOBJ hObjSource, XUINotifySelChanged *pNotifySelChangedData, BOOL& bHandled){ if(pNotifySelChangedData->iOldItem!=-1) { CXuiSceneBase::PlayUISFX(eSFX_Focus); } bHandled = TRUE;
return S_OK;}
HRESULT CScene_MultiGameInfo::OnNotifySetFocus(HXUIOBJ hObjSource, XUINotifyFocus *pNotifyFocusData, BOOL& bHandled){ if( playersList.TreeHasFocus() && playersList.GetItemCount() > 0 ) { ui.SetTooltips( DEFAULT_XUI_MENU_USER, -1, IDS_TOOLTIPS_BACK, -1, IDS_TOOLTIPS_VIEW_GAMERCARD ); bHandled = TRUE; } return S_OK;}
HRESULT CScene_MultiGameInfo::OnNotifyKillFocus(HXUIOBJ hObjSource, XUINotifyFocus *pNotifyFocusData, BOOL& bHandled){ if( pNotifyFocusData->hObjOther == m_JoinGame ) { ui.SetTooltips( DEFAULT_XUI_MENU_USER, IDS_TOOLTIPS_SELECT, IDS_TOOLTIPS_BACK ); bHandled = TRUE; } return S_OK;}
int CScene_MultiGameInfo::StartGame_SignInReturned(void *pParam,bool bContinue, int iPad){ CScene_MultiGameInfo* pClass = (CScene_MultiGameInfo*)pParam;
if(bContinue==true) { // It's possible that the player has not signed in - they can back out if(ProfileManager.IsSignedIn(iPad)) { JoinGame(pClass); } } else { pClass->SetShow( TRUE ); pClass->m_bIgnoreInput=false; } return 0;}
// Shared function to join the game that is the same whether we used the sign-in UI or notvoid CScene_MultiGameInfo::JoinGame(CScene_MultiGameInfo* pClass){ DWORD dwLocalUsersMask = 0; bool noPrivileges = false; DWORD dwSignedInUsers = 0;
// if we're in SD mode, then only the primary player gets to play if(RenderManager.IsHiDef()) { for(unsigned int index = 0; index < XUSER_MAX_COUNT; ++index) { if(ProfileManager.IsSignedIn(index) ) { ++dwSignedInUsers; if( !ProfileManager.AllowedToPlayMultiplayer(index) ) noPrivileges = true; dwLocalUsersMask |= CGameNetworkManager::GetLocalPlayerMask(index); } } } else { if(ProfileManager.IsSignedIn(ProfileManager.GetPrimaryPad()) ) { ++dwSignedInUsers; if( !ProfileManager.AllowedToPlayMultiplayer(ProfileManager.GetPrimaryPad()) ) noPrivileges = true; dwLocalUsersMask |= CGameNetworkManager::GetLocalPlayerMask(ProfileManager.GetPrimaryPad()); } }
// Check if user-created content is allowed, as we cannot play multiplayer if it's not bool noUGC = false; BOOL pccAllowed = TRUE; BOOL pccFriendsAllowed = TRUE; ProfileManager.AllowedPlayerCreatedContent(ProfileManager.GetPrimaryPad(),false,&pccAllowed,&pccFriendsAllowed); if(!pccAllowed && !pccFriendsAllowed) noUGC = true;
if(noUGC) { pClass->SetShow( TRUE ); pClass->m_bIgnoreInput=false; UINT uiIDA[1]; uiIDA[0]=IDS_CONFIRM_OK;
int messageText = IDS_NO_USER_CREATED_CONTENT_PRIVILEGE_SINGLE_LOCAL; if(dwSignedInUsers > 1) messageText = IDS_NO_USER_CREATED_CONTENT_PRIVILEGE_ALL_LOCAL;
StorageManager.RequestMessageBox( IDS_CONNECTION_FAILED, messageText, uiIDA,1,ProfileManager.GetPrimaryPad(),NULL,NULL, app.GetStringTable()); } else if(noPrivileges) { pClass->SetShow( TRUE ); pClass->m_bIgnoreInput=false; UINT uiIDA[1]; uiIDA[0]=IDS_CONFIRM_OK; StorageManager.RequestMessageBox( IDS_NO_MULTIPLAYER_PRIVILEGE_TITLE, IDS_NO_MULTIPLAYER_PRIVILEGE_JOIN_TEXT, uiIDA,1,ProfileManager.GetPrimaryPad(),NULL,NULL, app.GetStringTable()); } else { CGameNetworkManager::eJoinGameResult result = g_NetworkManager.JoinGame( pClass->m_selectedSession, dwLocalUsersMask );
// Alert the app the we no longer want to be informed of ethernet connections app.SetLiveLinkRequired( false );
if( result != CGameNetworkManager::JOINGAME_SUCCESS ) { int exitReasonStringId = -1; switch(result) { case CGameNetworkManager::JOINGAME_FAIL_SERVER_FULL: exitReasonStringId = IDS_DISCONNECTED_SERVER_FULL; break; }
if( exitReasonStringId == -1 ) { app.NavigateBack(ProfileManager.GetPrimaryPad()); } else { UINT uiIDA[1]; uiIDA[0]=IDS_CONFIRM_OK; StorageManager.RequestMessageBox( IDS_CONNECTION_FAILED, exitReasonStringId, uiIDA,1,ProfileManager.GetPrimaryPad(),NULL,NULL, app.GetStringTable()); exitReasonStringId = -1;
app.NavigateToHomeMenu(); } } }}
HRESULT CScene_MultiGameInfo::OnTimer( XUIMessageTimer *pTimer, BOOL& bHandled ){ if ( pTimer->nId == UPDATE_PLAYERS_TIMER_ID) { PlayerUID selectedPlayerXUID = m_selectedSession->data.players[playersList.GetCurSel()];
bool success = g_NetworkManager.GetGameSessionInfo(m_iPad, m_selectedSession->sessionId,m_selectedSession);
if( success ) { playersList.DeleteItems(0, playersList.GetItemCount()); int selectedIndex = 0; for(unsigned int i = 0; i < MINECRAFT_NET_MAX_PLAYERS; ++i) { if( m_selectedSession->data.players[i] != NULL ) { if(m_selectedSession->data.players[i] == selectedPlayerXUID) selectedIndex = i; playersList.InsertItems(i,1);#ifndef _CONTENT_PACKAGE if(app.DebugSettingsOn() && (app.GetGameSettingsDebugMask()&(1L<<eDebugSetting_DebugLeaderboards))) { playersList.SetText(i, L"WWWWWWWWWWWWWWWW" ); } else#endif { playersList.SetText(i, convStringToWstring( m_selectedSession->data.szPlayers[i] ).c_str() ); } } else { // Leave the loop when we hit the first NULL player break; } } playersList.SetCurSel(selectedIndex); } }
return S_OK;}