Beispiel #1
0
            private static bool Prefix(StoreGui __instance)
            {
                string name = Traverse.Create(__instance).Field <Trader>("m_trader").Value.m_name;

                if (OdinPlus.traderNameList.Contains(name))
                {
                    var m_selectedItem = Traverse.Create(__instance).Field <Trader.TradeItem>("m_selectedItem").Value;
                    int stack          = Mathf.Min(m_selectedItem.m_stack, m_selectedItem.m_prefab.m_itemData.m_shared.m_maxStackSize);
                    if (m_selectedItem == null || (m_selectedItem.m_price * stack - OdinData.Credits > 0))
                    {
                        return(false);
                    }
                    int quality = m_selectedItem.m_prefab.m_itemData.m_quality;
                    int variant = m_selectedItem.m_prefab.m_itemData.m_variant;
                    if (Player.m_localPlayer.GetInventory().AddItem(m_selectedItem.m_prefab.name, stack, quality, variant, 0L, "") != null)
                    {
                        OdinData.RemoveCredits(m_selectedItem.m_price * stack);                        //?
                        __instance.m_buyEffects.Create(__instance.gameObject.transform.position, Quaternion.identity, null, 1f);
                        Player.m_localPlayer.ShowPickupMessage(m_selectedItem.m_prefab.m_itemData, m_selectedItem.m_prefab.m_itemData.m_stack);
                        Traverse.Create(__instance).Method("FillList").GetValue();
                        Gogan.LogEvent("Game", "BoughtItem", m_selectedItem.m_prefab.name, 0L);
                    }
                    return(false);
                }
                return(true);
            }
Beispiel #2
0
 // Token: 0x06000FB3 RID: 4019 RVA: 0x0006EB08 File Offset: 0x0006CD08
 private void RandomTalk()
 {
     if (this.m_animator.GetBool("Stand") && !StoreGui.IsVisible() && Player.IsPlayerInRange(base.transform.position, this.m_greetRange))
     {
         this.Say(this.m_randomTalk, "Talk");
         this.m_randomTalkFX.Create(base.transform.position, Quaternion.identity, null, 1f);
     }
 }
Beispiel #3
0
 private static void Postfix(StoreGui __instance, Trader trader)
 {
     if (OdinPlus.traderNameList.Contains(trader.m_name))
     {
         OdinTrader.TweakGui(__instance, true);
         return;
     }
     return;
 }
Beispiel #4
0
        public static void Hide(StoreGui __instance)
        {
            if (MerchantPanel == null)
            {
                return;
            }

            MerchantPanel.SetActive(false);
        }
Beispiel #5
0
        public static void TweakGui(StoreGui __instance, bool set)
        {
            var go   = __instance.gameObject;
            var sell = __instance.m_sellButton.transform.parent.gameObject;
            var icon = __instance.m_coinText.transform.parent.GetChild(0).GetComponent <Image>();

            sell.gameObject.SetActive(!set);
            icon.sprite = !set ? OdinPlus.CoinsIcon : OdinPlus.OdinCreditIcon;
            GameObject.Find("/_GameMain/GUI/PixelFix/IngameGui(Clone)/Store_Screen/Store/topic").GetComponent <Text>().text = Localization.instance.Localize(set ? "OdinStore" : @"$store_topic");
        }
Beispiel #6
0
 // Token: 0x06000628 RID: 1576 RVA: 0x000349A7 File Offset: 0x00032BA7
 public void Show(Trader trader)
 {
     if (this.m_trader == trader && StoreGui.IsVisible())
     {
         return;
     }
     this.m_trader = trader;
     this.m_rootPanel.SetActive(true);
     this.FillList();
 }
Beispiel #7
0
 private bool CheckInput()
 {
     return((!Chat.instance || !Chat.instance.HasFocus()) &&
            !Console.IsVisible() &&
            !InventoryGui.IsVisible() &&
            !StoreGui.IsVisible() &&
            !Menu.IsVisible() &&
            !Minimap.IsOpen() &&
            !Player.m_localPlayer.InCutscene());
 }
Beispiel #8
0
 // Some logic from GameCamera class
 private bool canAdjustCameraDistance()
 {
     return((!Chat.instance || !Chat.instance.HasFocus()) &&
            !Console.IsVisible() &&
            !InventoryGui.IsVisible() &&
            !StoreGui.IsVisible() &&
            !Menu.IsVisible() &&
            !Minimap.IsOpen() &&
            attachedToPlayer &&
            !getPlayerCharacter().InCutscene() ? !getPlayerCharacter().InPlaceMode() : false);
 }
Beispiel #9
0
            private static void Prefix(StoreGui __instance)
            {
                var trader = Traverse.Create(__instance).Field <Trader>("m_trader").Value;

                if (OdinPlus.traderNameList.Contains(trader.m_name))
                {
                    OdinTrader.TweakGui(__instance, false);
                    return;
                }
                return;
            }
            static void Prefix(Player __instance, float ___m_lastToolUseTime, ref float ___m_placePressedTime)
            {
                __instance.m_placeDelay = placeDelay;

                if (!modEnabled.Value)
                {
                    return;
                }

                string rightItem = __instance.GetRightItem()?.m_shared.m_name;

                if (rightItem == "$item_hammer")
                {
                    if (!repeatBuildPlace.Value)
                    {
                        return;
                    }
                    __instance.m_placeDelay = repeatBuildPlaceDelay.Value;
                }
                else if (rightItem == "$item_hoe")
                {
                    if (!repeatTerrainMod.Value)
                    {
                        return;
                    }
                    __instance.m_placeDelay = repeatTerrainModDelay.Value;
                }
                else if (rightItem == "$item_cultivator")
                {
                    if (!repeatPlanting.Value)
                    {
                        return;
                    }
                    __instance.m_placeDelay = repeatPlantingDelay.Value;
                }

                if (!wasSelecting && (ZInput.GetButton("Attack") || ZInput.GetButton("JoyPlace")) && Time.time - ___m_lastToolUseTime > __instance.m_placeDelay)
                {
                    if (InventoryGui.IsVisible() || Minimap.IsOpen() || StoreGui.IsVisible() || Hud.IsPieceSelectionVisible())
                    {
                        wasSelecting = true;
                    }
                    else
                    {
                        ___m_placePressedTime = Time.time;
                    }
                }
                else if (wasSelecting && !ZInput.GetButton("Attack") && !ZInput.GetButton("JoyPlace"))
                {
                    wasSelecting = false;
                }
            }
Beispiel #11
0
 private bool shouldUpdateRayVectors()
 {
     if ((Chat.instance != null && Chat.instance.HasFocus()) || Console.IsVisible() || TextInput.IsVisible())
     {
         return(false);
     }
     return(inPlaceMode &&
            !StoreGui.IsVisible() &&
            !InventoryGui.IsVisible() &&
            !Menu.IsVisible() &&
            !(TextViewer.instance && TextViewer.instance.IsVisible()) &&
            !Minimap.IsOpen() &&
            !Hud.IsPieceSelectionVisible());
 }
Beispiel #12
0
        public static void Show_Postfix(StoreGui __instance)
        {
            if (__instance.transform.Find(nameof(MerchantPanel)) == null)
            {
                if (MerchantPanel != null)
                {
                    Object.Destroy(MerchantPanel);
                }

                MerchantPanel = Object.Instantiate(EpicLoot.Assets.MerchantPanel, __instance.transform, false);
                MerchantPanel.AddComponent <MerchantPanel>();
            }

            MerchantPanel.gameObject.SetActive(true);
        }
Beispiel #13
0
    public void freeGemsTabJoy()
    {
        if (PopUpMessage.PopupVisible)
        {
            return;
        }

        GameObject windowShop = GameObject.Find("windowShop");

        if (windowShop != null)
        {
            GameObject.Destroy(windowShop);
        }

        StoreGui.ShopFree();
    }
Beispiel #14
0
            private static void Postfix(StoreGui __instance, ref int __result)
            {
                var t = Traverse.Create(__instance).Field <Trader>("m_trader").Value;

                if (t == null)
                {
                    return;
                }
                string name = t.m_name;

                if (OdinPlus.traderNameList.Contains(name))
                {
                    __result = OdinData.Credits;
                    return;
                }
            }
Beispiel #15
0
        private static int ItemValueDetour(ItemDrop.ItemData item, StoreGui store)
        {
            if (Buying is null)
            {
                Buying = ConfigurationManager.TraderBuyConfig.ToDictionary(x => x.ItemName.Value.Trim().ToUpperInvariant());
            }

            string name = item.m_dropPrefab.name;

            string cleanedName = name.Trim().ToUpperInvariant();

            if (Buying.TryGetValue(cleanedName, out TraderBuyingConfig config))
            {
                Log.LogTrace($"Setting value for sold item '{name}:{config.Price.Value}'");

                return(config.Price.Value);
            }
            else if (item.m_shared.m_value == 0)
            {
                Log.LogTrace($"Unable to find value for sold item '{name}'");
            }

            return(item.m_shared.m_value);
        }
Beispiel #16
0
 public static bool IgnoreKeyPresses(bool extra = false)
 {
     return(ZNetScene.instance == null || Player.m_localPlayer == null || Minimap.IsOpen() || Console.IsVisible() || TextInput.IsVisible() || ZNet.instance.InPasswordDialog() || Chat.instance?.HasFocus() == true || StoreGui.IsVisible() || InventoryGui.IsVisible() || Menu.IsVisible() || TextViewer.instance?.IsVisible() == true);
 }
Beispiel #17
0
 public static void OnDestroy(StoreGui __instance)
 {
     MerchantPanel = null;
 }
Beispiel #18
0
            private static void Prefix()
            {
                if (CheckPlayerNull() || Player.m_localPlayer.IsTeleporting() || global::Console.instance.m_chatWindow.gameObject.activeInHierarchy || Chat.instance.m_chatWindow.gameObject.activeInHierarchy || Player.m_localPlayer.InPlaceMode() || TextInput.IsVisible() || StoreGui.IsVisible() || InventoryGui.IsVisible() || Menu.IsVisible())
                {
                    return;
                }
                Vector3 dir  = Traverse.Create(Player.m_localPlayer).Field <Vector3>("m_lookDir").Value;
                Vector3 rdir = Traverse.Create(Player.m_localPlayer).Field <Vector3>("m_moveDir").Value;

                dir.y  = 0;
                rdir.y = 0;
                rdir   = rdir.normalized;
                dir    = dir.normalized;
                if (Input.GetKeyDown(KS_Dodge.Value.MainKey))
                {
                    Dodge(rdir);
                    return;
                }
                if (KS_Dodge_Forward.Value.IsDown())
                {
                    Dodge(dir);
                }
                if (KS_Dodge_Backward.Value.IsDown())
                {
                    Dodge(dir * -1);
                }
                if (KS_Dodge_Right.Value.IsDown())
                {
                    Dodge(Quaternion.Euler(0, 90, 0) * dir);
                }
                if (KS_Dodge_Left.Value.IsDown())
                {
                    Dodge(Quaternion.Euler(0, 90, 0) * dir * -1);
                }
            }
Beispiel #19
0
 public static bool Prefix(GameCamera __instance, ref bool ___m_mouseCapture)
 {
     if (Input.GetKey(KeyCode.LeftControl) && Input.GetKeyDown(KeyCode.F1))
     {
         ___m_mouseCapture = !___m_mouseCapture;
     }
     if (___m_mouseCapture && !InventoryGui.IsVisible() && !Menu.IsVisible() && !Minimap.IsOpen() && !StoreGui.IsVisible() && !Hud.IsPieceSelectionVisible() && !Manager.MenuOpen)
     {
         Cursor.lockState = CursorLockMode.Locked;
         Cursor.visible   = false;
         return(false);
     }
     Cursor.lockState = CursorLockMode.None;
     Cursor.visible   = ZInput.IsMouseActive();
     return(false);
 }
Beispiel #20
0
 // Token: 0x06000582 RID: 1410 RVA: 0x0002F520 File Offset: 0x0002D720
 private void Update()
 {
     if (Game.instance.IsShuttingDown())
     {
         this.m_root.gameObject.SetActive(false);
         return;
     }
     if (this.m_root.gameObject.activeSelf)
     {
         this.m_hiddenFrames = 0;
         if ((Input.GetKeyDown(KeyCode.Escape) || ZInput.GetButtonDown("JoyMenu")) && !this.m_settingsInstance && !Feedback.IsVisible())
         {
             if (this.m_quitDialog.gameObject.activeSelf)
             {
                 this.OnQuitNo();
                 return;
             }
             if (this.m_logoutDialog.gameObject.activeSelf)
             {
                 this.OnLogoutNo();
                 return;
             }
             this.m_root.gameObject.SetActive(false);
             return;
         }
     }
     else
     {
         this.m_hiddenFrames++;
         bool flag = !InventoryGui.IsVisible() && !Minimap.IsOpen() && !global::Console.IsVisible() && !TextInput.IsVisible() && !ZNet.instance.InPasswordDialog() && !StoreGui.IsVisible() && !Hud.IsPieceSelectionVisible();
         if ((Input.GetKeyDown(KeyCode.Escape) || ZInput.GetButtonDown("JoyMenu")) && flag)
         {
             Gogan.LogEvent("Screen", "Enter", "Menu", 0L);
             this.m_root.gameObject.SetActive(true);
             this.m_menuDialog.gameObject.SetActive(true);
             this.m_logoutDialog.gameObject.SetActive(false);
             this.m_quitDialog.gameObject.SetActive(false);
         }
     }
 }
Beispiel #21
0
 // Token: 0x0600024D RID: 589 RVA: 0x00012BD3 File Offset: 0x00010DD3
 private bool InInventoryEtc()
 {
     return(InventoryGui.IsVisible() || Minimap.IsOpen() || StoreGui.IsVisible() || Hud.IsPieceSelectionVisible());
 }
Beispiel #22
0
 // Token: 0x0600024C RID: 588 RVA: 0x00012B4C File Offset: 0x00010D4C
 private bool TakeInput()
 {
     return(!GameCamera.InFreeFly() && ((!Chat.instance || !Chat.instance.HasFocus()) && !Menu.IsVisible() && !global::Console.IsVisible() && !TextInput.IsVisible() && !Minimap.InTextInput() && (!ZInput.IsGamepadActive() || !Minimap.IsOpen()) && (!ZInput.IsGamepadActive() || !InventoryGui.IsVisible()) && (!ZInput.IsGamepadActive() || !StoreGui.IsVisible())) && (!ZInput.IsGamepadActive() || !Hud.IsPieceSelectionVisible()));
 }
Beispiel #23
0
 private static void Postfix(ref GameCamera __instance, float dt)
 {
     if (Configuration.Current.FirstPerson.IsEnabled)
     {
         // This is from game code, not sure if need it though
         if (__instance.m_freeFly)
         {
             __instance.UpdateFreeFly(dt);
             __instance.UpdateCameraShake(dt);
             return;
         }
         Player localPlayer = Player.m_localPlayer;
         if (Input.GetKeyDown(Configuration.Current.FirstPerson.hotkey))
         {
             DynamicPerson.isFirstPerson = !DynamicPerson.isFirstPerson;
             if (DynamicPerson.isFirstPerson)
             {
                 SetupFP(ref __instance, ref localPlayer);
             }
             else
             {
                 // We are not in First Person any more, reload old values
                 __instance.m_3rdOffset = DynamicPerson.noVPFP_3rdOffset;
                 __instance.m_fpsOffset = DynamicPerson.noVPFP_fpsOffset;
                 // Set the camera stuff to our constant stored values
                 __instance.m_minDistance = CameraConstants.minDistance;
                 __instance.m_maxDistance = CameraConstants.maxDistance;
                 __instance.m_zoomSens    = CameraConstants.zoomSens;
                 // Default Field Of View value
                 __instance.m_fov = 65f;
                 // Make head stuff be normal again
                 localPlayer.m_head.localScale = Vector3.one;
                 localPlayer.m_eye.localScale  = Vector3.one;
             }
         }
         // FOV of cameras needs to be reset too
         __instance.m_camera.fieldOfView    = __instance.m_fov;
         __instance.m_skyCamera.fieldOfView = __instance.m_fov;
         if (localPlayer)
         {
             // Same game check
             if ((!Chat.instance || !Chat.instance.HasFocus()) &&
                 !Console.IsVisible() && !InventoryGui.IsVisible() &&
                 !StoreGui.IsVisible() && !Menu.IsVisible() &&
                 !Minimap.IsOpen() && !localPlayer.InCutscene() &&
                 !localPlayer.InPlaceMode())
             {
                 if (DynamicPerson.isFirstPerson)
                 {
                     // I dont think either of these two ifs needs explain....
                     if (Input.GetKeyDown(Configuration.Current.FirstPerson.raiseFOVHotkey))
                     {
                         __instance.m_fov += 1f;
                         Console.instance.AddString($"Changed fov to: {__instance.m_fov}");
                     }
                     else if (Input.GetKeyDown(Configuration.Current.FirstPerson.lowerFOVHotkey))
                     {
                         __instance.m_fov -= 1f;
                         Console.instance.AddString($"Changed fov to: {__instance.m_fov}");
                     }
                 }
                 else
                 {
                     // Not first camera, just do main game thing
                     float minDistance = __instance.m_minDistance;
                     float axis        = Input.GetAxis("Mouse ScrollWheel");
                     __instance.m_distance -= axis * __instance.m_zoomSens;
                     float max = (localPlayer.GetControlledShip() != null) ? __instance.m_maxDistanceBoat : __instance.m_maxDistance;
                     __instance.m_distance = Mathf.Clamp(__instance.m_distance, 0f, max);
                 }
             }
             if (localPlayer.IsDead() && localPlayer.GetRagdoll())
             {
                 // THe weird death cam actually:
                 //  - Breaks body into ragdoll
                 //  - Gives momentum to pieces
                 //  - Then finds the average point of them all to make camera look at
                 __instance.transform.LookAt(localPlayer.GetRagdoll().GetAverageBodyPosition());
             }
             else if (DynamicPerson.isFirstPerson)
             {
                 // Place camera at head level, plus a tiny bit more
                 __instance.transform.position = localPlayer.m_head.position + new Vector3(0, 0.2f, 0);
             }
             else
             {
                 // Not even sure why we need to reset the base transform
                 // But game does it so...
                 // ¯\_(ツ)_/¯
                 Vector3    position;
                 Quaternion rotation;
                 __instance.GetCameraPosition(dt, out position, out rotation);
                 __instance.transform.position = position;
                 __instance.transform.rotation = rotation;
             }
             __instance.UpdateCameraShake(dt);
         }
     }
 }
Beispiel #24
0
 // Token: 0x06000ADF RID: 2783 RVA: 0x0004DFF4 File Offset: 0x0004C1F4
 private void UpdateMouseCapture()
 {
     if (Input.GetKey(KeyCode.LeftControl) && Input.GetKeyDown(KeyCode.F1))
     {
         this.m_mouseCapture = !this.m_mouseCapture;
     }
     if (this.m_mouseCapture && !InventoryGui.IsVisible() && !Menu.IsVisible() && !Minimap.IsOpen() && !StoreGui.IsVisible() && !Hud.IsPieceSelectionVisible())
     {
         Cursor.lockState = CursorLockMode.Locked;
         Cursor.visible   = false;
         return;
     }
     Cursor.lockState = CursorLockMode.None;
     Cursor.visible   = ZInput.IsMouseActive();
 }
        public static void Postfix(GameCamera __instance, ref float ___m_distance, ref float ___m_zoomSens)
        {
            if (!isEnabled.Value || GameCamera.InFreeFly())
            {
                return;
            }

            Player localPlayer = Player.m_localPlayer;

            if (!localPlayer)
            {
                return;
            }

            checkInteriorChange(localPlayer);
            ___m_zoomSens = cameraZoomSensitivity.Value;

            // Separate camera distances for different scenarios.
            if (canChangeCameraDistance)
            {
                if (cameraDistanceInteriorsEnabled.Value && playerInInterior)
                {
                    targetDistance = cameraDistanceInteriors.Value;
                }
                else if (cameraDistanceShelterEnabled.Value && playerInShelter)
                {
                    targetDistance = cameraDistanceShelter.Value;
                }
                else if (cameraDistanceBoatEnabled.Value && characterControlledShip)
                {
                    targetDistance = cameraDistanceBoat.Value;
                }
                else if (cameraDistanceBoatEnabled.Value && characterStoppedShipControl)
                {
                    targetDistance = cameraDistance.Value;
                }
                else if (cameraDistanceExteriorsEnabled.Value && (!playerInShelter && !playerInInterior))
                {
                    targetDistance = cameraDistance.Value;
                }

                canChangeCameraDistance = false;
            }

            if (smoothZoomEnabled.Value)
            {
                // Disable the games default zooming in and out. Otherwise, the distance will flicker.
                ___m_zoomSens = 0;

                if ((Chat.instance && Chat.instance.HasFocus() || (Console.IsVisible() || InventoryGui.IsVisible()) || (StoreGui.IsVisible() || Menu.IsVisible() || (Minimap.IsOpen() || localPlayer.InCutscene())) ? 0 : (!localPlayer.InPlaceMode() ? 1 : 0)) != 0)
                {
                    float minDistance = __instance.m_minDistance;
                    float maxDistance = localPlayer.GetControlledShip() != null ? cameraMaxDistanceBoat.Value : cameraMaxDistance.Value;

                    float prevTargetDistance = targetDistance;
                    targetDistance -= Input.GetAxis("Mouse ScrollWheel") * cameraZoomSensitivity.Value;
                    targetDistance  = Mathf.Clamp(targetDistance, minDistance, maxDistance);

                    // Reset time when player changes zoom distance (scrollwheel)
                    if (prevTargetDistance != targetDistance)
                    {
                        timePos = 0;
                    }
                }

                targetDistanceHasBeenReached = checkLerpDuration(timePos);

                if (!targetDistanceHasBeenReached)
                {
                    timePos += Time.deltaTime;
                    moveToNewCameraDistance(timePos / timeDuration, ref ___m_distance);
                }
            }
        }
        private static void SellableItemsDetour(Inventory inventory, List <ItemDrop.ItemData> sellableItems, StoreGui storeGui)
        {
            if (Buying is null)
            {
                Buying = ConfigurationManager.TraderBuyConfig.ToDictionary(x => x.ItemName.Value.Trim().ToUpperInvariant());

                foreach (var key in Buying.Keys)
                {
                    Log.LogTrace($"Enabling selling of: {key}");
                }
            }

            //Future importance.
            //var trader = (Trader)AccessTools.Field(typeof(StoreGui), "m_trader").GetValue(storeGui);

            foreach (var item in inventory.GetAllItems())
            {
                string name = item.m_dropPrefab.name;

                try
                {
                    string cleanedName = name.Trim().ToUpperInvariant();

                    if (Buying.TryGetValue(cleanedName, out TraderBuyingConfig config) && config.Price.Value > 0)
                    {
                        sellableItems.Add(item);
                    }
                    else if (item.m_shared.m_value > 0)
                    {
                        sellableItems.Add(item);
                    }
                }
                catch (Exception e)
                {
                    Log.LogError("Error while checking modded buyers list.", e);
                }
            }
        }
Beispiel #27
0
    // Token: 0x06000AE2 RID: 2786 RVA: 0x0004E194 File Offset: 0x0004C394
    private void UpdateCamera(float dt)
    {
        if (this.m_freeFly)
        {
            this.UpdateFreeFly(dt);
            this.UpdateCameraShake(dt);
            return;
        }
        this.m_camera.fieldOfView    = this.m_fov;
        this.m_skyCamera.fieldOfView = this.m_fov;
        Player localPlayer = Player.m_localPlayer;

        if (localPlayer)
        {
            if ((!Chat.instance || !Chat.instance.HasFocus()) && !global::Console.IsVisible() && !InventoryGui.IsVisible() && !StoreGui.IsVisible() && !Menu.IsVisible() && !Minimap.IsOpen() && !localPlayer.InCutscene() && !localPlayer.InPlaceMode())
            {
                float minDistance = this.m_minDistance;
                float axis        = Input.GetAxis("Mouse ScrollWheel");
                this.m_distance -= axis * this.m_zoomSens;
                float max = (localPlayer.GetControlledShip() != null) ? this.m_maxDistanceBoat : this.m_maxDistance;
                this.m_distance = Mathf.Clamp(this.m_distance, minDistance, max);
            }
            if (localPlayer.IsDead() && localPlayer.GetRagdoll())
            {
                Vector3 averageBodyPosition = localPlayer.GetRagdoll().GetAverageBodyPosition();
                base.transform.LookAt(averageBodyPosition);
            }
            else
            {
                Vector3    position;
                Quaternion rotation;
                this.GetCameraPosition(dt, out position, out rotation);
                base.transform.position = position;
                base.transform.rotation = rotation;
            }
            this.UpdateCameraShake(dt);
        }
    }
Beispiel #28
0
 public static bool Update(ref Menu __instance)
 {
     if (Game.instance.IsShuttingDown())
     {
         __instance.m_root.gameObject.SetActive(false);
         return(false);
     }
     if (__instance.m_root.gameObject.activeSelf)
     {
         AccessTools.Field(typeof(Menu), "m_hiddenFrames").SetValue(__instance, 0);
         if ((Input.GetKeyDown(KeyCode.Escape) || ZInput.GetButtonDown("JoyMenu")) && !(GameObject)AccessTools.Field(typeof(Menu), "m_settingsInstance").GetValue(__instance) && !Feedback.IsVisible())
         {
             if (__instance.m_quitDialog.gameObject.activeSelf)
             {
                 __instance.OnQuitNo();
                 return(false);
             }
             if (__instance.m_logoutDialog.gameObject.activeSelf)
             {
                 __instance.OnLogoutNo();
                 return(false);
             }
             StartTime();
             __instance.m_root.gameObject.SetActive(false);
             return(false);
         }
     }
     else
     {
         int m_hiddenFrames = (int)AccessTools.Field(typeof(Menu), "m_hiddenFrames").GetValue(__instance);
         m_hiddenFrames++;
         AccessTools.Field(typeof(Menu), "m_hiddenFrames").SetValue(__instance, m_hiddenFrames);
         bool flag = !InventoryGui.IsVisible() && !Minimap.IsOpen() && !global::Console.IsVisible() && !TextInput.IsVisible() && !ZNet.instance.InPasswordDialog() && !StoreGui.IsVisible() && !Hud.IsPieceSelectionVisible();
         if (((Input.GetKeyDown(KeyCode.Escape) || ZInput.GetButtonDown("JoyMenu")) || (!Application.isFocused && focusPause.Value && ZNet.instance.IsServer())) && flag)
         {
             __instance.m_root.gameObject.SetActive(true);
             __instance.m_menuDialog.gameObject.SetActive(true);
             if (ZNet.instance.IsServer())
             {
                 StopTime();
                 __instance.m_root.Find("OLD_menu").gameObject.SetActive(true);
                 __instance.m_root.Find("Menu").gameObject.SetActive(false);
             }
             Gogan.LogEvent("Screen", "Enter", "Menu", 0L);
             __instance.m_logoutDialog.gameObject.SetActive(false);
             __instance.m_quitDialog.gameObject.SetActive(false);
         }
     }
     return(false);
 }