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 "XUI_MultiGameCreate.h"
3#include "XUI_InGamePlayerOptions.h"
4#include "..\..\Minecraft.h"
5#include "..\..\MultiPlayerLocalPlayer.h"
6#include "..\..\ClientConnection.h"
7#include "..\..\..\Minecraft.World\net.minecraft.network.h"
8#include "..\..\..\Minecraft.World\net.minecraft.network.packet.h"
9#include "..\..\..\Minecraft.World\net.minecraft.world.entity.player.h"
10#include "XUI_InGameInfo.h"
11
12
13
14//----------------------------------------------------------------------------------
15// Performs initialization tasks - retrieves controls.
16//----------------------------------------------------------------------------------
17HRESULT CScene_InGamePlayerOptions::OnInit( XUIMessageInit* pInitData, BOOL& bHandled )
18{
19 m_iPad = *(int *)pInitData->pvInitData;
20
21 InGamePlayerOptionsInitData *initData = (InGamePlayerOptionsInitData *)pInitData->pvInitData;
22 m_iPad = initData->iPad;
23 m_networkSmallId = initData->networkSmallId;
24 m_playerPrivileges = initData->playerPrivileges;
25
26 MapChildControls();
27
28 m_focusElement = m_checkboxes[eControl_BuildAndMine].m_hObj;
29
30 m_TeleportGroup.SetShow(false);
31
32 INetworkPlayer *localPlayer = g_NetworkManager.GetLocalPlayerByUserIndex( m_iPad );
33 INetworkPlayer *editingPlayer = g_NetworkManager.GetPlayerBySmallId(m_networkSmallId);
34
35 if(editingPlayer != NULL)
36 {
37 m_Gamertag.SetText(editingPlayer->GetOnlineName());
38 }
39
40 bool trustPlayers = app.GetGameHostOption(eGameHostOption_TrustPlayers) != 0;
41 bool cheats = app.GetGameHostOption(eGameHostOption_CheatsEnabled) != 0;
42 m_editingSelf = (localPlayer != NULL && localPlayer == editingPlayer);
43
44 if( m_editingSelf || trustPlayers || editingPlayer->IsHost())
45 {
46 removeControl( m_checkboxes[eControl_BuildAndMine], true );
47 removeControl( m_checkboxes[eControl_UseDoorsAndSwitches], true );
48 removeControl( m_checkboxes[eControl_UseContainers], true );
49 removeControl( m_checkboxes[eControl_AttackPlayers], true );
50 removeControl( m_checkboxes[eControl_AttackAnimals], true );
51 }
52 else
53 {
54 bool checked = (Player::getPlayerGamePrivilege(m_playerPrivileges, Player::ePlayerGamePrivilege_CannotMine)==0 && Player::getPlayerGamePrivilege(m_playerPrivileges, Player::ePlayerGamePrivilege_CannotBuild)==0);
55 m_checkboxes[eControl_BuildAndMine].SetText( app.GetString(IDS_CAN_BUILD_AND_MINE) );
56 m_checkboxes[eControl_BuildAndMine].SetCheck(checked);
57
58 checked = (Player::getPlayerGamePrivilege(m_playerPrivileges, Player::ePlayerGamePrivilege_CanUseDoorsAndSwitches)!=0);
59 m_checkboxes[eControl_UseDoorsAndSwitches].SetText( app.GetString(IDS_CAN_USE_DOORS_AND_SWITCHES) );
60 m_checkboxes[eControl_UseDoorsAndSwitches].SetCheck(checked);
61
62 checked = (Player::getPlayerGamePrivilege(m_playerPrivileges, Player::ePlayerGamePrivilege_CanUseContainers)!=0);
63 m_checkboxes[eControl_UseContainers].SetText( app.GetString(IDS_CAN_OPEN_CONTAINERS) );
64 m_checkboxes[eControl_UseContainers].SetCheck(checked);
65
66 checked = Player::getPlayerGamePrivilege(m_playerPrivileges, Player::ePlayerGamePrivilege_CannotAttackPlayers)==0;
67 m_checkboxes[eControl_AttackPlayers].SetText( app.GetString(IDS_CAN_ATTACK_PLAYERS) );
68 m_checkboxes[eControl_AttackPlayers].SetCheck(checked);
69
70 checked = Player::getPlayerGamePrivilege(m_playerPrivileges, Player::ePlayerGamePrivilege_CannotAttackAnimals)==0;
71 m_checkboxes[eControl_AttackAnimals].SetText( app.GetString(IDS_CAN_ATTACK_ANIMALS) );
72 m_checkboxes[eControl_AttackAnimals].SetCheck(checked);
73 }
74
75 if(m_editingSelf)
76 {
77#if (defined(_CONTENT_PACKAGE) || defined(_FINAL_BUILD) && !defined(_DEBUG_MENUS_ENABLED))
78 removeControl( m_checkboxes[eControl_Op], true );
79#else
80 m_checkboxes[eControl_Op].SetText(L"DEBUG: Creative");
81 m_checkboxes[eControl_Op].SetCheck(Player::getPlayerGamePrivilege(m_playerPrivileges,Player::ePlayerGamePrivilege_CreativeMode));
82#endif
83
84 removeControl( m_buttonKick, true );
85 removeControl( m_checkboxes[eControl_CheatTeleport], true );
86
87 if(cheats)
88 {
89 bool canBeInvisible = Player::getPlayerGamePrivilege(m_playerPrivileges, Player::ePlayerGamePrivilege_CanToggleInvisible) != 0;
90 m_checkboxes[eControl_HostInvisible].SetEnable(canBeInvisible);
91 bool checked = canBeInvisible && (Player::getPlayerGamePrivilege(m_playerPrivileges, Player::ePlayerGamePrivilege_Invisible)!=0 && Player::getPlayerGamePrivilege(m_playerPrivileges, Player::ePlayerGamePrivilege_Invulnerable)!=0);
92 m_checkboxes[eControl_HostInvisible].SetText( app.GetString(IDS_INVISIBLE) );
93 m_checkboxes[eControl_HostInvisible].SetCheck(checked);
94
95 bool inCreativeMode = Player::getPlayerGamePrivilege(m_playerPrivileges,Player::ePlayerGamePrivilege_CreativeMode) != 0;
96 if(inCreativeMode)
97 {
98 removeControl( m_checkboxes[eControl_HostFly], true );
99 removeControl( m_checkboxes[eControl_HostHunger], true );
100 }
101 else
102 {
103 bool canFly = Player::getPlayerGamePrivilege(m_playerPrivileges,Player::ePlayerGamePrivilege_CanToggleFly);
104 bool canChangeHunger = Player::getPlayerGamePrivilege(m_playerPrivileges,Player::ePlayerGamePrivilege_CanToggleClassicHunger);
105
106 m_checkboxes[eControl_HostFly].SetEnable(canFly);
107 checked = canFly && Player::getPlayerGamePrivilege(m_playerPrivileges, Player::ePlayerGamePrivilege_CanFly)!=0;
108 m_checkboxes[eControl_HostFly].SetText( app.GetString(IDS_CAN_FLY) );
109 m_checkboxes[eControl_HostFly].SetCheck(checked);
110
111 m_checkboxes[eControl_HostHunger].SetEnable(canChangeHunger);
112 checked = canChangeHunger && Player::getPlayerGamePrivilege(m_playerPrivileges, Player::ePlayerGamePrivilege_ClassicHunger)!=0;
113 m_checkboxes[eControl_HostHunger].SetText( app.GetString(IDS_DISABLE_EXHAUSTION) );
114 m_checkboxes[eControl_HostHunger].SetCheck(checked);
115 }
116 }
117 else
118 {
119 removeControl( m_checkboxes[eControl_HostInvisible], true );
120 removeControl( m_checkboxes[eControl_HostFly], true );
121 removeControl( m_checkboxes[eControl_HostHunger], true );
122 }
123 }
124 else
125 {
126 if(localPlayer->IsHost())
127 {
128 // Only host can make people moderators, or enable teleporting for them
129 m_checkboxes[eControl_Op].SetText( app.GetString(IDS_MODERATOR) );
130 m_checkboxes[eControl_Op].SetCheck(Player::getPlayerGamePrivilege(m_playerPrivileges, Player::ePlayerGamePrivilege_Op)!=0);
131 }
132 else
133 {
134 removeControl( m_checkboxes[eControl_Op], true );
135 }
136
137 if(localPlayer->IsHost() && cheats)
138 {
139 m_checkboxes[eControl_HostInvisible].SetEnable(true);
140 bool checked = Player::getPlayerGamePrivilege(m_playerPrivileges, Player::ePlayerGamePrivilege_CanToggleInvisible)!=0;
141 m_checkboxes[eControl_HostInvisible].SetText( app.GetString(IDS_CAN_INVISIBLE) );
142 m_checkboxes[eControl_HostInvisible].SetCheck(checked);
143
144
145 bool inCreativeMode = Player::getPlayerGamePrivilege(m_playerPrivileges,Player::ePlayerGamePrivilege_CreativeMode) != 0;
146 if(inCreativeMode)
147 {
148 removeControl( m_checkboxes[eControl_HostFly], true );
149 removeControl( m_checkboxes[eControl_HostHunger], true );
150 }
151 else
152 {
153 m_checkboxes[eControl_HostFly].SetEnable(true);
154 checked = Player::getPlayerGamePrivilege(m_playerPrivileges, Player::ePlayerGamePrivilege_CanToggleFly)!=0;
155 m_checkboxes[eControl_HostFly].SetText( app.GetString(IDS_CAN_FLY) );
156 m_checkboxes[eControl_HostFly].SetCheck(checked);
157
158 m_checkboxes[eControl_HostHunger].SetEnable(true);
159 checked = Player::getPlayerGamePrivilege(m_playerPrivileges, Player::ePlayerGamePrivilege_CanToggleClassicHunger)!=0;
160 m_checkboxes[eControl_HostHunger].SetText( app.GetString(IDS_CAN_DISABLE_EXHAUSTION) );
161 m_checkboxes[eControl_HostHunger].SetCheck(checked);
162 }
163
164 checked = Player::getPlayerGamePrivilege(m_playerPrivileges, Player::ePlayerGamePrivilege_CanTeleport)!=0;
165 m_checkboxes[eControl_CheatTeleport].SetText(app.GetString(IDS_ENABLE_TELEPORT));
166 m_checkboxes[eControl_CheatTeleport].SetCheck(checked);
167 }
168 else
169 {
170 removeControl( m_checkboxes[eControl_HostInvisible], true );
171 removeControl( m_checkboxes[eControl_HostFly], true );
172 removeControl( m_checkboxes[eControl_HostHunger], true );
173 removeControl( m_checkboxes[eControl_CheatTeleport], true );
174 }
175
176 // Can only kick people if they are not local, and not local to the host
177 if(editingPlayer->IsLocal() != TRUE && editingPlayer->IsSameSystem(g_NetworkManager.GetHostPlayer()) != TRUE)
178 {
179 m_buttonKick.SetText( app.GetString(IDS_KICK_PLAYER));
180 }
181 else
182 {
183 removeControl( m_buttonKick, true );
184 }
185 }
186
187 if(app.GetLocalPlayerCount()>1)
188 {
189 app.AdjustSplitscreenScene(m_hObj,&m_OriginalPosition,m_iPad);
190 }
191
192 ui.SetTooltips( m_iPad, IDS_TOOLTIPS_SELECT,IDS_TOOLTIPS_BACK);
193
194 CXuiSceneBase::ShowLogo( m_iPad, FALSE );
195
196 g_NetworkManager.RegisterPlayerChangedCallback(m_iPad, &CScene_InGamePlayerOptions::OnPlayerChanged, this);
197
198 //SentientManager.RecordMenuShown(m_iPad, eUIScene_CreateWorldMenu, 0);
199
200 resetCheatCheckboxes();
201
202 return S_OK;
203}
204
205HRESULT CScene_InGamePlayerOptions::OnDestroy()
206{
207 g_NetworkManager.UnRegisterPlayerChangedCallback(m_iPad, &CScene_InGameInfo::OnPlayerChanged, this);
208 return S_OK;
209}
210
211
212HRESULT CScene_InGamePlayerOptions::OnKeyDown(XUIMessageInput* pInputData, BOOL& rfHandled)
213{
214 ui.AnimateKeyPress(pInputData->UserIndex, pInputData->dwKeyCode);
215
216 // Explicitly handle B button presses
217 switch(pInputData->dwKeyCode)
218 {
219 case VK_PAD_B:
220 case VK_ESCAPE:
221 {
222 bool trustPlayers = app.GetGameHostOption(eGameHostOption_TrustPlayers) != 0;
223 bool cheats = app.GetGameHostOption(eGameHostOption_CheatsEnabled) != 0;
224 if(m_editingSelf)
225 {
226#if (defined(_CONTENT_PACKAGE) || defined(_FINAL_BUILD) && !defined(_DEBUG_MENUS_ENABLED))
227#else
228 Player::setPlayerGamePrivilege(m_playerPrivileges,Player::ePlayerGamePrivilege_CreativeMode,m_checkboxes[eControl_Op].IsChecked());
229#endif
230 if(cheats)
231 {
232 bool canBeInvisible = Player::getPlayerGamePrivilege(m_playerPrivileges, Player::ePlayerGamePrivilege_CanToggleInvisible) != 0;
233 if(canBeInvisible) Player::setPlayerGamePrivilege(m_playerPrivileges,Player::ePlayerGamePrivilege_Invisible,m_checkboxes[eControl_HostInvisible].IsChecked());
234 if(canBeInvisible) Player::setPlayerGamePrivilege(m_playerPrivileges,Player::ePlayerGamePrivilege_Invulnerable,m_checkboxes[eControl_HostInvisible].IsChecked());
235
236 bool inCreativeMode = Player::getPlayerGamePrivilege(m_playerPrivileges,Player::ePlayerGamePrivilege_CreativeMode) != 0;
237 if(!inCreativeMode)
238 {
239 bool canFly = Player::getPlayerGamePrivilege(m_playerPrivileges,Player::ePlayerGamePrivilege_CanToggleFly);
240 bool canChangeHunger = Player::getPlayerGamePrivilege(m_playerPrivileges,Player::ePlayerGamePrivilege_CanToggleClassicHunger);
241
242 if(canFly) Player::setPlayerGamePrivilege(m_playerPrivileges,Player::ePlayerGamePrivilege_CanFly,m_checkboxes[eControl_HostFly].IsChecked());
243 if(canChangeHunger) Player::setPlayerGamePrivilege(m_playerPrivileges,Player::ePlayerGamePrivilege_ClassicHunger,m_checkboxes[eControl_HostHunger].IsChecked());
244 }
245 }
246 }
247 else
248 {
249 INetworkPlayer *editingPlayer = g_NetworkManager.GetPlayerBySmallId(m_networkSmallId);
250 if(!trustPlayers && (editingPlayer != NULL && !editingPlayer->IsHost() ) )
251 {
252 Player::setPlayerGamePrivilege(m_playerPrivileges,Player::ePlayerGamePrivilege_CannotMine,!m_checkboxes[eControl_BuildAndMine].IsChecked());
253 Player::setPlayerGamePrivilege(m_playerPrivileges,Player::ePlayerGamePrivilege_CannotBuild,!m_checkboxes[eControl_BuildAndMine].IsChecked());
254 Player::setPlayerGamePrivilege(m_playerPrivileges,Player::ePlayerGamePrivilege_CannotAttackPlayers,!m_checkboxes[eControl_AttackPlayers].IsChecked());
255 Player::setPlayerGamePrivilege(m_playerPrivileges,Player::ePlayerGamePrivilege_CannotAttackAnimals, !m_checkboxes[eControl_AttackAnimals].IsChecked());
256 Player::setPlayerGamePrivilege(m_playerPrivileges,Player::ePlayerGamePrivilege_CanUseDoorsAndSwitches, m_checkboxes[eControl_UseDoorsAndSwitches].IsChecked());
257 Player::setPlayerGamePrivilege(m_playerPrivileges,Player::ePlayerGamePrivilege_CanUseContainers, m_checkboxes[eControl_UseContainers].IsChecked());
258 }
259
260 INetworkPlayer *localPlayer = g_NetworkManager.GetLocalPlayerByUserIndex( m_iPad );
261
262 if(localPlayer->IsHost())
263 {
264 if(cheats)
265 {
266 Player::setPlayerGamePrivilege(m_playerPrivileges,Player::ePlayerGamePrivilege_CanToggleInvisible,m_checkboxes[eControl_HostInvisible].IsChecked());
267 Player::setPlayerGamePrivilege(m_playerPrivileges,Player::ePlayerGamePrivilege_CanToggleFly,m_checkboxes[eControl_HostFly].IsChecked());
268 Player::setPlayerGamePrivilege(m_playerPrivileges,Player::ePlayerGamePrivilege_CanToggleClassicHunger,m_checkboxes[eControl_HostHunger].IsChecked());
269 Player::setPlayerGamePrivilege(m_playerPrivileges,Player::ePlayerGamePrivilege_CanTeleport,m_checkboxes[eControl_CheatTeleport].IsChecked());
270 }
271
272 Player::setPlayerGamePrivilege(m_playerPrivileges,Player::ePlayerGamePrivilege_Op,m_checkboxes[eControl_Op].IsChecked());
273 }
274 }
275 unsigned int originalPrivileges = app.GetPlayerPrivileges(m_networkSmallId);
276 if(originalPrivileges != m_playerPrivileges)
277 {
278 // Send update settings packet to server
279 Minecraft *pMinecraft = Minecraft::GetInstance();
280 shared_ptr<MultiplayerLocalPlayer> player = pMinecraft->localplayers[m_iPad];
281 if(player != NULL && player->connection)
282 {
283 player->connection->send( shared_ptr<PlayerInfoPacket>( new PlayerInfoPacket( m_networkSmallId, -1, m_playerPrivileges) ) );
284 }
285 }
286
287 app.NavigateBack(pInputData->UserIndex);
288 rfHandled = TRUE;
289 }
290 break;
291 }
292 return S_OK;
293}
294
295HRESULT CScene_InGamePlayerOptions::OnNotifyPressEx(HXUIOBJ hObjPressed, XUINotifyPress* pNotifyPressData, BOOL& rfHandled)
296{
297 //HRESULT hr = S_OK;
298 // This assumes all buttons can only be pressed with the A button
299 ui.AnimateKeyPress(pNotifyPressData->UserIndex, VK_PAD_A);
300
301 if( hObjPressed == m_buttonKick )
302 {
303 BYTE *smallId = new BYTE();
304 *smallId = m_networkSmallId;
305 UINT uiIDA[2];
306 uiIDA[0]=IDS_CONFIRM_OK;
307 uiIDA[1]=IDS_CONFIRM_CANCEL;
308
309 StorageManager.RequestMessageBox(IDS_UNLOCK_KICK_PLAYER_TITLE, IDS_UNLOCK_KICK_PLAYER, uiIDA, 2, m_iPad,&CScene_InGamePlayerOptions::KickPlayerReturned,smallId,app.GetStringTable());
310 }
311 else if (hObjPressed == m_checkboxes[eControl_Op] )
312 {
313 resetCheatCheckboxes();
314 }
315
316 return S_OK;
317}
318
319HRESULT CScene_InGamePlayerOptions::OnControlNavigate(XUIMessageControlNavigate *pControlNavigateData, BOOL& bHandled)
320{
321 pControlNavigateData->hObjDest=XuiControlGetNavigation(pControlNavigateData->hObjSource,pControlNavigateData->nControlNavigate,TRUE,TRUE);
322
323 if(pControlNavigateData->hObjDest!=NULL)
324 {
325 bHandled=TRUE;
326 }
327
328 return S_OK;
329}
330
331int CScene_InGamePlayerOptions::KickPlayerReturned(void *pParam,int iPad,C4JStorage::EMessageResult result)
332{
333 BYTE smallId = *(BYTE *)pParam;
334 delete pParam;
335
336 if(result==C4JStorage::EMessage_ResultAccept)
337 {
338 Minecraft *pMinecraft = Minecraft::GetInstance();
339 shared_ptr<MultiplayerLocalPlayer> localPlayer = pMinecraft->localplayers[iPad];
340 if(localPlayer != NULL && localPlayer->connection)
341 {
342 localPlayer->connection->send( shared_ptr<KickPlayerPacket>( new KickPlayerPacket(smallId) ) );
343 }
344
345 // Fix for #61494 - [CRASH]: TU7: Code: Multiplayer: Title may crash while kicking a player from an online game.
346 // 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
347 // with the XUI render and causes a crash. The OnPlayerChanged event should perform the navigate back on the main thread
348 //app.NavigateBack(iPad);
349 }
350
351 return 0;
352}
353
354void CScene_InGamePlayerOptions::OnPlayerChanged(void *callbackParam, INetworkPlayer *pPlayer, bool leaving)
355{
356 CScene_InGamePlayerOptions *scene = (CScene_InGamePlayerOptions *)callbackParam;
357
358 HXUIOBJ hBackScene = scene->GetBackScene();
359 CScene_InGameInfo* infoScene;
360 VOID *pObj;
361 XuiObjectFromHandle( hBackScene, &pObj );
362 infoScene = (CScene_InGameInfo *)pObj;
363 if(infoScene != NULL) CScene_InGameInfo::OnPlayerChanged(infoScene,pPlayer,leaving);
364
365 if(leaving && pPlayer != NULL && pPlayer->GetSmallId() == scene->m_networkSmallId)
366 {
367 app.NavigateBack(scene->m_iPad);
368 }
369}
370
371HRESULT CScene_InGamePlayerOptions::OnTransitionStart( XUIMessageTransition *pTransition, BOOL& bHandled )
372{
373 if(pTransition->dwTransType == XUI_TRANSITION_TO || pTransition->dwTransType == XUI_TRANSITION_BACKTO)
374 {
375 INetworkPlayer *editingPlayer = g_NetworkManager.GetPlayerBySmallId(m_networkSmallId);
376 if(editingPlayer != NULL)
377 {
378 short colourIndex = app.GetPlayerColour( m_networkSmallId );
379 switch(colourIndex)
380 {
381 case 1:
382 m_Icon.PlayVisualRange(L"P1",NULL,L"P1");
383 break;
384 case 2:
385 m_Icon.PlayVisualRange(L"P2",NULL,L"P2");
386 break;
387 case 3:
388 m_Icon.PlayVisualRange(L"P3",NULL,L"P3");
389 break;
390 case 4:
391 m_Icon.PlayVisualRange(L"P4",NULL,L"P4");
392 break;
393 case 5:
394 m_Icon.PlayVisualRange(L"P5",NULL,L"P5");
395 break;
396 case 6:
397 m_Icon.PlayVisualRange(L"P6",NULL,L"P6");
398 break;
399 case 7:
400 m_Icon.PlayVisualRange(L"P7",NULL,L"P7");
401 break;
402 case 8:
403 m_Icon.PlayVisualRange(L"P8",NULL,L"P8");
404 break;
405 case 9:
406 m_Icon.PlayVisualRange(L"P9",NULL,L"P9");
407 break;
408 case 10:
409 m_Icon.PlayVisualRange(L"P10",NULL,L"P10");
410 break;
411 case 11:
412 m_Icon.PlayVisualRange(L"P11",NULL,L"P11");
413 break;
414 case 12:
415 m_Icon.PlayVisualRange(L"P12",NULL,L"P12");
416 break;
417 case 13:
418 m_Icon.PlayVisualRange(L"P13",NULL,L"P13");
419 break;
420 case 14:
421 m_Icon.PlayVisualRange(L"P14",NULL,L"P14");
422 break;
423 case 15:
424 m_Icon.PlayVisualRange(L"P15",NULL,L"P15");
425 break;
426 case 0:
427 default:
428 m_Icon.PlayVisualRange(L"P0",NULL,L"P0");
429 break;
430 };
431 }
432 }
433 return S_OK;
434}
435
436void CScene_InGamePlayerOptions::removeControl(HXUIOBJ hObjToRemove, bool center)
437{
438 D3DXVECTOR3 pos;
439 float fControlHeight, fTempHeight, fWidth;
440
441 bool changeFocus = m_focusElement == hObjToRemove;
442
443 XuiElementGetBounds(hObjToRemove,&fWidth,&fControlHeight);
444
445 // Hide this control
446 XuiControlSetEnable(hObjToRemove, FALSE);
447 XuiElementSetShow(hObjToRemove, FALSE);
448
449 // Move future downwards nav up
450 HXUIOBJ controlToMove = hObjToRemove;
451 while(controlToMove = XuiControlGetNavigation(controlToMove, XUI_CONTROL_NAVIGATE_DOWN, FALSE, TRUE) )
452 {
453 if(changeFocus && XuiElementIsShown(controlToMove))
454 {
455 m_focusElement = controlToMove;
456 XuiElementSetUserFocus( controlToMove, m_iPad );
457 changeFocus = FALSE;
458 }
459 XuiElementGetPosition(controlToMove, &pos);
460 pos.y -= fControlHeight;
461 XuiElementSetPosition(controlToMove, &pos);
462 }
463
464 // Resize and move scene
465 GetBounds(&fWidth, &fTempHeight);
466 SetBounds(fWidth, fTempHeight - fControlHeight);
467
468 GetPosition(&pos);
469 pos.y += fControlHeight/2;
470 SetPosition(&pos);
471}
472
473void CScene_InGamePlayerOptions::resetCheatCheckboxes()
474{
475 bool isModerator = m_checkboxes[eControl_Op].IsChecked();
476 //bool cheatsEnabled = app.GetGameHostOption(eGameHostOption_CheatsEnabled) != 0;
477
478 if (!m_editingSelf)
479 {
480 m_checkboxes[eControl_HostInvisible].SetEnable(isModerator);
481 m_checkboxes[eControl_HostInvisible].SetCheck( isModerator
482 && (Player::getPlayerGamePrivilege(m_playerPrivileges, Player::ePlayerGamePrivilege_CanToggleInvisible) != 0) );
483
484 // NOT CREATIVE MODE.
485 {
486 m_checkboxes[eControl_HostFly].SetEnable(isModerator);
487 m_checkboxes[eControl_HostFly].SetCheck( isModerator
488 && (Player::getPlayerGamePrivilege(m_playerPrivileges, Player::ePlayerGamePrivilege_CanToggleFly) != 0) );
489
490 m_checkboxes[eControl_HostHunger].SetEnable(isModerator);
491 m_checkboxes[eControl_HostHunger].SetCheck( isModerator
492 && (Player::getPlayerGamePrivilege(m_playerPrivileges, Player::ePlayerGamePrivilege_CanToggleClassicHunger) != 0) );
493 }
494
495 m_checkboxes[eControl_CheatTeleport].SetEnable(isModerator);
496 m_checkboxes[eControl_CheatTeleport].SetCheck( isModerator
497 && (Player::getPlayerGamePrivilege(m_playerPrivileges, Player::ePlayerGamePrivilege_CanTeleport) != 0) );
498 }
499}