the game where you go into mines and start crafting! but for consoles (forked directly from smartcmd's github)
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}