the game where you go into mines and start crafting! but for consoles (forked directly from smartcmd's github)
at main 524 lines 21 kB view raw
1#include "stdafx.h" 2#include "UI.h" 3#include "UIScene_InGamePlayerOptionsMenu.h" 4#include "..\..\Minecraft.h" 5#include "..\..\MultiPlayerLocalPlayer.h" 6#include "..\..\ClientConnection.h" 7#include "..\..\..\Minecraft.World\net.minecraft.network.packet.h" 8 9 10#define CHECKBOXES_TIMER_ID 0 11#define CHECKBOXES_TIMER_TIME 100 12 13UIScene_InGamePlayerOptionsMenu::UIScene_InGamePlayerOptionsMenu(int iPad, void *_initData, UILayer *parentLayer) : UIScene(iPad, parentLayer) 14{ 15 // Setup all the Iggy references we need for this scene 16 initialiseMovie(); 17 18 m_bShouldNavBack = false; 19 20 InGamePlayerOptionsInitData *initData = (InGamePlayerOptionsInitData *)_initData; 21 m_networkSmallId = initData->networkSmallId; 22 m_playerPrivileges = initData->playerPrivileges; 23 24 INetworkPlayer *localPlayer = g_NetworkManager.GetLocalPlayerByUserIndex( m_iPad ); 25 INetworkPlayer *editingPlayer = g_NetworkManager.GetPlayerBySmallId(m_networkSmallId); 26 27 if(editingPlayer != NULL) 28 { 29 m_labelGamertag.init(editingPlayer->GetDisplayName()); 30 } 31 32 bool trustPlayers = app.GetGameHostOption(eGameHostOption_TrustPlayers) != 0; 33 bool cheats = app.GetGameHostOption(eGameHostOption_CheatsEnabled) != 0; 34 m_editingSelf = (localPlayer != NULL && localPlayer == editingPlayer); 35 36 if( m_editingSelf || trustPlayers || editingPlayer->IsHost()) 37 { 38 removeControl( &m_checkboxes[eControl_BuildAndMine], true ); 39 removeControl( &m_checkboxes[eControl_UseDoorsAndSwitches], true ); 40 removeControl( &m_checkboxes[eControl_UseContainers], true ); 41 removeControl( &m_checkboxes[eControl_AttackPlayers], true ); 42 removeControl( &m_checkboxes[eControl_AttackAnimals], true ); 43 } 44 else 45 { 46 bool checked = (Player::getPlayerGamePrivilege(m_playerPrivileges, Player::ePlayerGamePrivilege_CannotMine)==0 && Player::getPlayerGamePrivilege(m_playerPrivileges, Player::ePlayerGamePrivilege_CannotBuild)==0); 47 m_checkboxes[eControl_BuildAndMine].init( app.GetString(IDS_CAN_BUILD_AND_MINE), eControl_BuildAndMine, checked); 48 49 checked = (Player::getPlayerGamePrivilege(m_playerPrivileges, Player::ePlayerGamePrivilege_CanUseDoorsAndSwitches)!=0); 50 m_checkboxes[eControl_UseDoorsAndSwitches].init( app.GetString(IDS_CAN_USE_DOORS_AND_SWITCHES), eControl_UseDoorsAndSwitches, checked); 51 52 checked = (Player::getPlayerGamePrivilege(m_playerPrivileges, Player::ePlayerGamePrivilege_CanUseContainers)!=0); 53 m_checkboxes[eControl_UseContainers].init( app.GetString(IDS_CAN_OPEN_CONTAINERS), eControl_UseContainers, checked); 54 55 checked = Player::getPlayerGamePrivilege(m_playerPrivileges, Player::ePlayerGamePrivilege_CannotAttackPlayers)==0; 56 m_checkboxes[eControl_AttackPlayers].init( app.GetString(IDS_CAN_ATTACK_PLAYERS), eControl_AttackPlayers, checked); 57 58 checked = Player::getPlayerGamePrivilege(m_playerPrivileges, Player::ePlayerGamePrivilege_CannotAttackAnimals)==0; 59 m_checkboxes[eControl_AttackAnimals].init( app.GetString(IDS_CAN_ATTACK_ANIMALS), eControl_AttackAnimals, checked); 60 } 61 62 if(m_editingSelf) 63 { 64#if (defined(_CONTENT_PACKAGE) || defined(_FINAL_BUILD) && !defined(_DEBUG_MENUS_ENABLED)) 65 removeControl( &m_checkboxes[eControl_Op], true ); 66#else 67 m_checkboxes[eControl_Op].init(L"DEBUG: Creative",eControl_Op,Player::getPlayerGamePrivilege(m_playerPrivileges,Player::ePlayerGamePrivilege_CreativeMode)); 68#endif 69 70 removeControl( &m_buttonKick, true ); 71 removeControl( &m_checkboxes[eControl_CheatTeleport], true ); 72 73 if(cheats) 74 { 75 bool canBeInvisible = Player::getPlayerGamePrivilege(m_playerPrivileges, Player::ePlayerGamePrivilege_CanToggleInvisible) != 0; 76 m_checkboxes[eControl_HostInvisible].SetEnable(canBeInvisible); 77 bool checked = canBeInvisible && (Player::getPlayerGamePrivilege(m_playerPrivileges, Player::ePlayerGamePrivilege_Invisible)!=0 && Player::getPlayerGamePrivilege(m_playerPrivileges, Player::ePlayerGamePrivilege_Invulnerable)!=0); 78 m_checkboxes[eControl_HostInvisible].init( app.GetString(IDS_INVISIBLE), eControl_HostInvisible, checked); 79 80 bool inCreativeMode = Player::getPlayerGamePrivilege(m_playerPrivileges,Player::ePlayerGamePrivilege_CreativeMode) != 0; 81 if(inCreativeMode) 82 { 83 removeControl( &m_checkboxes[eControl_HostFly], true ); 84 removeControl( &m_checkboxes[eControl_HostHunger], true ); 85 } 86 else 87 { 88 bool canFly = Player::getPlayerGamePrivilege(m_playerPrivileges,Player::ePlayerGamePrivilege_CanToggleFly); 89 bool canChangeHunger = Player::getPlayerGamePrivilege(m_playerPrivileges,Player::ePlayerGamePrivilege_CanToggleClassicHunger); 90 91 m_checkboxes[eControl_HostFly].SetEnable(canFly); 92 checked = canFly && Player::getPlayerGamePrivilege(m_playerPrivileges, Player::ePlayerGamePrivilege_CanFly)!=0; 93 m_checkboxes[eControl_HostFly].init( app.GetString(IDS_CAN_FLY), eControl_HostFly, checked); 94 95 m_checkboxes[eControl_HostHunger].SetEnable(canChangeHunger); 96 checked = canChangeHunger && Player::getPlayerGamePrivilege(m_playerPrivileges, Player::ePlayerGamePrivilege_ClassicHunger)!=0; 97 m_checkboxes[eControl_HostHunger].init( app.GetString(IDS_DISABLE_EXHAUSTION), eControl_HostHunger, checked); 98 } 99 } 100 else 101 { 102 removeControl( &m_checkboxes[eControl_HostInvisible], true ); 103 removeControl( &m_checkboxes[eControl_HostFly], true ); 104 removeControl( &m_checkboxes[eControl_HostHunger], true ); 105 } 106 } 107 else 108 { 109 if(localPlayer->IsHost()) 110 { 111 // Only host can make people moderators, or enable teleporting for them 112 m_checkboxes[eControl_Op].init( app.GetString(IDS_MODERATOR), eControl_Op, Player::getPlayerGamePrivilege(m_playerPrivileges, Player::ePlayerGamePrivilege_Op)!=0); 113 } 114 else 115 { 116 removeControl( &m_checkboxes[eControl_Op], true ); 117 } 118 119 /*if(localPlayer->IsHost() && cheats ) 120 { 121 m_checkboxes[eControl_HostInvisible].SetEnable(true); 122 bool checked = Player::getPlayerGamePrivilege(m_playerPrivileges, Player::ePlayerGamePrivilege_CanToggleInvisible)!=0; 123 m_checkboxes[eControl_HostInvisible].init( app.GetString(IDS_CAN_INVISIBLE), eControl_HostInvisible, checked); 124 125 m_checkboxes[eControl_HostFly].SetEnable(true); 126 checked = Player::getPlayerGamePrivilege(m_playerPrivileges, Player::ePlayerGamePrivilege_CanToggleFly)!=0; 127 m_checkboxes[eControl_HostFly].init( app.GetString(IDS_CAN_FLY), eControl_HostFly, checked); 128 129 m_checkboxes[eControl_HostHunger].SetEnable(true); 130 checked = Player::getPlayerGamePrivilege(m_playerPrivileges, Player::ePlayerGamePrivilege_CanToggleClassicHunger)!=0; 131 m_checkboxes[eControl_HostHunger].init( app.GetString(IDS_CAN_DISABLE_EXHAUSTION), eControl_HostHunger, checked); 132 133 checked = Player::getPlayerGamePrivilege(m_playerPrivileges, Player::ePlayerGamePrivilege_CanTeleport)!=0; 134 m_checkboxes[eControl_CheatTeleport].init(app.GetString(IDS_ENABLE_TELEPORT),eControl_CheatTeleport,checked); 135 } 136 else 137 { 138 removeControl( &m_checkboxes[eControl_HostInvisible], true ); 139 removeControl( &m_checkboxes[eControl_HostFly], true ); 140 removeControl( &m_checkboxes[eControl_HostHunger], true ); 141 removeControl( &m_checkboxes[eControl_CheatTeleport], true ); 142 }*/ 143 144 if(localPlayer->IsHost() && cheats ) 145 { 146 m_checkboxes[eControl_HostInvisible].SetEnable(true); 147 bool checked = Player::getPlayerGamePrivilege(m_playerPrivileges, Player::ePlayerGamePrivilege_CanToggleInvisible)!=0; 148 m_checkboxes[eControl_HostInvisible].init( app.GetString(IDS_CAN_INVISIBLE), eControl_HostInvisible, checked); 149 150 151 bool inCreativeMode = Player::getPlayerGamePrivilege(m_playerPrivileges,Player::ePlayerGamePrivilege_CreativeMode) != 0; 152 if(inCreativeMode) 153 { 154 removeControl( &m_checkboxes[eControl_HostFly], true ); 155 removeControl( &m_checkboxes[eControl_HostHunger], true ); 156 } 157 else 158 { 159 m_checkboxes[eControl_HostFly].SetEnable(true); 160 checked = Player::getPlayerGamePrivilege(m_playerPrivileges, Player::ePlayerGamePrivilege_CanToggleFly)!=0; 161 m_checkboxes[eControl_HostFly].init( app.GetString(IDS_CAN_FLY), eControl_HostFly, checked); 162 163 m_checkboxes[eControl_HostHunger].SetEnable(true); 164 checked = Player::getPlayerGamePrivilege(m_playerPrivileges, Player::ePlayerGamePrivilege_CanToggleClassicHunger)!=0; 165 m_checkboxes[eControl_HostHunger].init( app.GetString(IDS_CAN_DISABLE_EXHAUSTION), eControl_HostHunger, checked); 166 } 167 168 checked = Player::getPlayerGamePrivilege(m_playerPrivileges, Player::ePlayerGamePrivilege_CanTeleport)!=0; 169 m_checkboxes[eControl_CheatTeleport].init(app.GetString(IDS_ENABLE_TELEPORT),eControl_CheatTeleport,checked); 170 } 171 else 172 { 173 removeControl( &m_checkboxes[eControl_HostInvisible], true ); 174 removeControl( &m_checkboxes[eControl_HostFly], true ); 175 removeControl( &m_checkboxes[eControl_HostHunger], true ); 176 removeControl( &m_checkboxes[eControl_CheatTeleport], true ); 177 } 178 179 180 // Can only kick people if they are not local, and not local to the host 181 if(editingPlayer->IsLocal() != TRUE && editingPlayer->IsSameSystem(g_NetworkManager.GetHostPlayer()) != TRUE) 182 { 183 m_buttonKick.init( app.GetString(IDS_KICK_PLAYER), eControl_Kick); 184 } 185 else 186 { 187 removeControl( &m_buttonKick, true ); 188 } 189 } 190 191 short colourIndex = app.GetPlayerColour( m_networkSmallId ); 192 IggyDataValue result; 193 IggyDataValue value[1]; 194 value[0].type = IGGY_DATATYPE_number; 195 value[0].number = colourIndex; 196 IggyResult out = IggyPlayerCallMethodRS ( getMovie() , &result, IggyPlayerRootPath( getMovie() ), m_funcSetPlayerIcon , 1 , value ); 197 198#if TO_BE_IMPLEMENTED 199 if(app.GetLocalPlayerCount()>1) 200 { 201 app.AdjustSplitscreenScene(m_hObj,&m_OriginalPosition,m_iPad); 202 } 203#endif 204 205 m_bModeratorState = m_checkboxes[eControl_Op].IsChecked(); 206 207 resetCheatCheckboxes(); 208 209 addTimer(CHECKBOXES_TIMER_ID,CHECKBOXES_TIMER_TIME); 210 211 g_NetworkManager.RegisterPlayerChangedCallback(m_iPad, &UIScene_InGamePlayerOptionsMenu::OnPlayerChanged, this); 212 213#ifdef __PSVITA__ 214 ui.TouchBoxRebuild(this); 215#endif 216} 217 218wstring UIScene_InGamePlayerOptionsMenu::getMoviePath() 219{ 220 if(app.GetLocalPlayerCount() > 1) 221 { 222 return L"InGamePlayerOptionsSplit"; 223 } 224 else 225 { 226 return L"InGamePlayerOptions"; 227 } 228} 229 230void UIScene_InGamePlayerOptionsMenu::updateTooltips() 231{ 232 ui.SetTooltips( m_iPad, IDS_TOOLTIPS_SELECT,IDS_TOOLTIPS_BACK); 233} 234 235void UIScene_InGamePlayerOptionsMenu::handleReload() 236{ 237 UIScene::handleReload(); 238 239 INetworkPlayer *localPlayer = g_NetworkManager.GetLocalPlayerByUserIndex( m_iPad ); 240 INetworkPlayer *editingPlayer = g_NetworkManager.GetPlayerBySmallId(m_networkSmallId); 241 242 bool trustPlayers = app.GetGameHostOption(eGameHostOption_TrustPlayers) != 0; 243 bool cheats = app.GetGameHostOption(eGameHostOption_CheatsEnabled) != 0; 244 m_editingSelf = (localPlayer != NULL && localPlayer == editingPlayer); 245 246 if( m_editingSelf || trustPlayers || editingPlayer->IsHost()) 247 { 248 removeControl( &m_checkboxes[eControl_BuildAndMine], true ); 249 removeControl( &m_checkboxes[eControl_UseDoorsAndSwitches], true ); 250 removeControl( &m_checkboxes[eControl_UseContainers], true ); 251 removeControl( &m_checkboxes[eControl_AttackPlayers], true ); 252 removeControl( &m_checkboxes[eControl_AttackAnimals], true ); 253 } 254 255 if(m_editingSelf) 256 { 257#if (defined(_CONTENT_PACKAGE) || defined(_FINAL_BUILD) && !defined(_DEBUG_MENUS_ENABLED)) 258 removeControl( &m_checkboxes[eControl_Op], true ); 259#endif 260 261 removeControl( &m_buttonKick, true ); 262 removeControl( &m_checkboxes[eControl_CheatTeleport], true ); 263 264 if(cheats) 265 { 266 bool inCreativeMode = Player::getPlayerGamePrivilege(m_playerPrivileges,Player::ePlayerGamePrivilege_CreativeMode) != 0; 267 if(inCreativeMode) 268 { 269 removeControl( &m_checkboxes[eControl_HostFly], true ); 270 removeControl( &m_checkboxes[eControl_HostHunger], true ); 271 } 272 } 273 else 274 { 275 removeControl( &m_checkboxes[eControl_HostInvisible], true ); 276 removeControl( &m_checkboxes[eControl_HostFly], true ); 277 removeControl( &m_checkboxes[eControl_HostHunger], true ); 278 } 279 } 280 else 281 { 282 if(!localPlayer->IsHost()) 283 { 284 removeControl( &m_checkboxes[eControl_Op], true ); 285 } 286 287 if(localPlayer->IsHost() && cheats ) 288 { 289 290 bool inCreativeMode = Player::getPlayerGamePrivilege(m_playerPrivileges,Player::ePlayerGamePrivilege_CreativeMode) != 0; 291 if(inCreativeMode) 292 { 293 removeControl( &m_checkboxes[eControl_HostFly], true ); 294 removeControl( &m_checkboxes[eControl_HostHunger], true ); 295 } 296 } 297 else 298 { 299 removeControl( &m_checkboxes[eControl_HostInvisible], true ); 300 removeControl( &m_checkboxes[eControl_HostFly], true ); 301 removeControl( &m_checkboxes[eControl_HostHunger], true ); 302 removeControl( &m_checkboxes[eControl_CheatTeleport], true ); 303 } 304 305 306 // Can only kick people if they are not local, and not local to the host 307 if(editingPlayer->IsLocal() == TRUE || editingPlayer->IsSameSystem(g_NetworkManager.GetHostPlayer()) == TRUE) 308 { 309 removeControl( &m_buttonKick, true ); 310 } 311 } 312 313 short colourIndex = app.GetPlayerColour( m_networkSmallId ); 314 IggyDataValue result; 315 IggyDataValue value[1]; 316 value[0].type = IGGY_DATATYPE_number; 317 value[0].number = colourIndex; 318 IggyResult out = IggyPlayerCallMethodRS ( getMovie() , &result, IggyPlayerRootPath( getMovie() ), m_funcSetPlayerIcon , 1 , value ); 319} 320 321void UIScene_InGamePlayerOptionsMenu::tick() 322{ 323 UIScene::tick(); 324 325 if(m_bShouldNavBack) 326 { 327 m_bShouldNavBack = false; 328 ui.NavigateBack(m_iPad); 329 } 330} 331 332void UIScene_InGamePlayerOptionsMenu::handleDestroy() 333{ 334 g_NetworkManager.UnRegisterPlayerChangedCallback(m_iPad, &UIScene_InGamePlayerOptionsMenu::OnPlayerChanged, this); 335} 336 337void UIScene_InGamePlayerOptionsMenu::handleInput(int iPad, int key, bool repeat, bool pressed, bool released, bool &handled) 338{ 339 //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"); 340 341 ui.AnimateKeyPress(iPad, key, repeat, pressed, released); 342 switch(key) 343 { 344 case ACTION_MENU_CANCEL: 345 if(pressed) 346 { 347 bool trustPlayers = app.GetGameHostOption(eGameHostOption_TrustPlayers) != 0; 348 bool cheats = app.GetGameHostOption(eGameHostOption_CheatsEnabled) != 0; 349 if(m_editingSelf) 350 { 351#if (defined(_CONTENT_PACKAGE) || defined(_FINAL_BUILD) && !defined(_DEBUG_MENUS_ENABLED)) 352#else 353 Player::setPlayerGamePrivilege(m_playerPrivileges,Player::ePlayerGamePrivilege_CreativeMode,m_checkboxes[eControl_Op].IsChecked()); 354#endif 355 if(cheats) 356 { 357 bool canBeInvisible = Player::getPlayerGamePrivilege(m_playerPrivileges, Player::ePlayerGamePrivilege_CanToggleInvisible) != 0; 358 if(canBeInvisible) Player::setPlayerGamePrivilege(m_playerPrivileges,Player::ePlayerGamePrivilege_Invisible,m_checkboxes[eControl_HostInvisible].IsChecked()); 359 if(canBeInvisible) Player::setPlayerGamePrivilege(m_playerPrivileges,Player::ePlayerGamePrivilege_Invulnerable,m_checkboxes[eControl_HostInvisible].IsChecked()); 360 361 bool inCreativeMode = Player::getPlayerGamePrivilege(m_playerPrivileges,Player::ePlayerGamePrivilege_CreativeMode) != 0; 362 if(!inCreativeMode) 363 { 364 bool canFly = Player::getPlayerGamePrivilege(m_playerPrivileges,Player::ePlayerGamePrivilege_CanToggleFly); 365 bool canChangeHunger = Player::getPlayerGamePrivilege(m_playerPrivileges,Player::ePlayerGamePrivilege_CanToggleClassicHunger); 366 367 if(canFly) Player::setPlayerGamePrivilege(m_playerPrivileges,Player::ePlayerGamePrivilege_CanFly,m_checkboxes[eControl_HostFly].IsChecked()); 368 if(canChangeHunger) Player::setPlayerGamePrivilege(m_playerPrivileges,Player::ePlayerGamePrivilege_ClassicHunger,m_checkboxes[eControl_HostHunger].IsChecked()); 369 } 370 } 371 } 372 else 373 { 374 INetworkPlayer *editingPlayer = g_NetworkManager.GetPlayerBySmallId(m_networkSmallId); 375 if(!trustPlayers && (editingPlayer != NULL && !editingPlayer->IsHost() ) ) 376 { 377 Player::setPlayerGamePrivilege(m_playerPrivileges,Player::ePlayerGamePrivilege_CannotMine,!m_checkboxes[eControl_BuildAndMine].IsChecked()); 378 Player::setPlayerGamePrivilege(m_playerPrivileges,Player::ePlayerGamePrivilege_CannotBuild,!m_checkboxes[eControl_BuildAndMine].IsChecked()); 379 Player::setPlayerGamePrivilege(m_playerPrivileges,Player::ePlayerGamePrivilege_CannotAttackPlayers,!m_checkboxes[eControl_AttackPlayers].IsChecked()); 380 Player::setPlayerGamePrivilege(m_playerPrivileges,Player::ePlayerGamePrivilege_CannotAttackAnimals, !m_checkboxes[eControl_AttackAnimals].IsChecked()); 381 Player::setPlayerGamePrivilege(m_playerPrivileges,Player::ePlayerGamePrivilege_CanUseDoorsAndSwitches, m_checkboxes[eControl_UseDoorsAndSwitches].IsChecked()); 382 Player::setPlayerGamePrivilege(m_playerPrivileges,Player::ePlayerGamePrivilege_CanUseContainers, m_checkboxes[eControl_UseContainers].IsChecked()); 383 } 384 385 INetworkPlayer *localPlayer = g_NetworkManager.GetLocalPlayerByUserIndex( m_iPad ); 386 387 if(localPlayer->IsHost()) 388 { 389 if(cheats) 390 { 391 Player::setPlayerGamePrivilege(m_playerPrivileges,Player::ePlayerGamePrivilege_CanToggleInvisible,m_checkboxes[eControl_HostInvisible].IsChecked()); 392 Player::setPlayerGamePrivilege(m_playerPrivileges,Player::ePlayerGamePrivilege_CanToggleFly,m_checkboxes[eControl_HostFly].IsChecked()); 393 Player::setPlayerGamePrivilege(m_playerPrivileges,Player::ePlayerGamePrivilege_CanToggleClassicHunger,m_checkboxes[eControl_HostHunger].IsChecked()); 394 Player::setPlayerGamePrivilege(m_playerPrivileges,Player::ePlayerGamePrivilege_CanTeleport,m_checkboxes[eControl_CheatTeleport].IsChecked()); 395 } 396 397 Player::setPlayerGamePrivilege(m_playerPrivileges,Player::ePlayerGamePrivilege_Op,m_checkboxes[eControl_Op].IsChecked()); 398 } 399 } 400 unsigned int originalPrivileges = app.GetPlayerPrivileges(m_networkSmallId); 401 if(originalPrivileges != m_playerPrivileges) 402 { 403 // Send update settings packet to server 404 Minecraft *pMinecraft = Minecraft::GetInstance(); 405 shared_ptr<MultiplayerLocalPlayer> player = pMinecraft->localplayers[m_iPad]; 406 if(player->connection) 407 { 408 player->connection->send( shared_ptr<PlayerInfoPacket>( new PlayerInfoPacket( m_networkSmallId, -1, m_playerPrivileges) ) ); 409 } 410 } 411 navigateBack(); 412 413 handled = true; 414 } 415 break; 416 case ACTION_MENU_OK: 417#ifdef __ORBIS__ 418 case ACTION_MENU_TOUCHPAD_PRESS: 419#endif 420 sendInputToMovie(key, repeat, pressed, released); 421 break; 422 case ACTION_MENU_UP: 423 case ACTION_MENU_DOWN: 424 sendInputToMovie(key, repeat, pressed, released); 425 break; 426 } 427} 428 429void UIScene_InGamePlayerOptionsMenu::handlePress(F64 controlId, F64 childId) 430{ 431 switch((int)controlId) 432 { 433 case eControl_Kick: 434 { 435 BYTE *smallId = new BYTE(); 436 *smallId = m_networkSmallId; 437 UINT uiIDA[2]; 438 uiIDA[0]=IDS_CONFIRM_OK; 439 uiIDA[1]=IDS_CONFIRM_CANCEL; 440 441 ui.RequestAlertMessage(IDS_UNLOCK_KICK_PLAYER_TITLE, IDS_UNLOCK_KICK_PLAYER, uiIDA, 2, m_iPad,&UIScene_InGamePlayerOptionsMenu::KickPlayerReturned,smallId); 442 } 443 break; 444 }; 445} 446 447int UIScene_InGamePlayerOptionsMenu::KickPlayerReturned(void *pParam,int iPad,C4JStorage::EMessageResult result) 448{ 449 BYTE smallId = *(BYTE *)pParam; 450 delete pParam; 451 452 if(result==C4JStorage::EMessage_ResultAccept) 453 { 454 Minecraft *pMinecraft = Minecraft::GetInstance(); 455 shared_ptr<MultiplayerLocalPlayer> localPlayer = pMinecraft->localplayers[iPad]; 456 if(localPlayer->connection) 457 { 458 localPlayer->connection->send( shared_ptr<KickPlayerPacket>( new KickPlayerPacket(smallId) ) ); 459 } 460 461 // Fix for #61494 - [CRASH]: TU7: Code: Multiplayer: Title may crash while kicking a player from an online game. 462 // We cannot do a navigate back here is this actually occurs on a thread other than the main thread. On rare occasions this can clash 463 // with the XUI render and causes a crash. The OnPlayerChanged event should perform the navigate back on the main thread 464 //app.NavigateBack(iPad); 465 } 466 467 return 0; 468} 469 470void UIScene_InGamePlayerOptionsMenu::OnPlayerChanged(void *callbackParam, INetworkPlayer *pPlayer, bool leaving) 471{ 472 app.DebugPrintf("UIScene_InGamePlayerOptionsMenu::OnPlayerChanged"); 473 UIScene_InGamePlayerOptionsMenu *scene = (UIScene_InGamePlayerOptionsMenu *)callbackParam; 474 475 UIScene_InGameInfoMenu *infoScene = (UIScene_InGameInfoMenu *)scene->getBackScene(); 476 if(infoScene != NULL) UIScene_InGameInfoMenu::OnPlayerChanged(infoScene,pPlayer,leaving); 477 478 if(leaving && pPlayer != NULL && pPlayer->GetSmallId() == scene->m_networkSmallId) 479 { 480 scene->m_bShouldNavBack = true; 481 } 482} 483 484void UIScene_InGamePlayerOptionsMenu::resetCheatCheckboxes() 485{ 486 bool isModerator = m_checkboxes[eControl_Op].IsChecked(); 487 //bool cheatsEnabled = app.GetGameHostOption(eGameHostOption_CheatsEnabled) != 0; 488 489 if (!m_editingSelf) 490 { 491 m_checkboxes[eControl_HostInvisible].SetEnable(isModerator); 492 m_checkboxes[eControl_HostFly].SetEnable(isModerator); 493 m_checkboxes[eControl_HostHunger].SetEnable(isModerator); 494 m_checkboxes[eControl_CheatTeleport].SetEnable(isModerator); 495 } 496} 497 498void UIScene_InGamePlayerOptionsMenu::handleCheckboxToggled(F64 controlId, bool selected) 499{ 500 switch((int)controlId) 501 { 502 case eControl_Op: 503 // flag that the moderator state has changed 504 //resetCheatCheckboxes(); 505 break; 506 } 507} 508 509void UIScene_InGamePlayerOptionsMenu::handleTimerComplete(int id) 510{ 511 switch(id) 512 { 513 case CHECKBOXES_TIMER_ID: 514 { 515 bool bIsModerator = m_checkboxes[eControl_Op].IsChecked(); 516 if(m_bModeratorState!=bIsModerator) 517 { 518 m_bModeratorState=bIsModerator; 519 resetCheatCheckboxes(); 520 } 521 } 522 break; 523 } 524}