Пример #1
0
        public override bool Deserialize(Message_NetworkBehaviour _msg, CSteamID _remoteID)
        {
            if (!mi_loaded)
            {
                return(base.Deserialize(_msg, _remoteID));
            }

            Messages type = _msg.Type;

            if (_msg.Type != Messages.Battery_OnOff)
            {
                return(base.Deserialize(_msg, _remoteID));
            }

            Message_Battery_OnOff msg = _msg as Message_Battery_OnOff;

            if (msg == null)
            {
                return(base.Deserialize(_msg, _remoteID));
            }

            switch ((ELanternRequestType)msg.batteryUsesLeft) //we use the usesleft value as our command type carrier
            {
            case ELanternRequestType.RELEASE_AUTO:
                UserControlsState = false;
                CheckLightState(true);
                return(true);

            case ELanternRequestType.REQUEST_STATE:      //a client block requested this blocks state, send it back
                if (Semih_Network.IsHost)
                {
                    if (!UserControlsState)
                    {
                        return(true);
                    }

                    mi_network.SendP2P(
                        _remoteID,
                        new Message_Battery_OnOff(Messages.Battery_OnOff, mi_network.NetworkIDManager, mi_network.LocalSteamID, this.ObjectIndex, (int)ELanternRequestType.TOGGLE, IsOn),
                        EP2PSend.k_EP2PSendReliable,
                        NetworkChannel.Channel_Game);
                }
                return(true);

            case ELanternRequestType.TOGGLE:
                UserControlsState = true;
                SetLightOn((_msg as Message_Battery_OnOff)?.on ?? true);
                return(true);
            }
            return(true);
        }
Пример #2
0
        public void OnIsRayed()
        {
            if (!mi_loaded)
            {
                return;
            }

            if (!mi_canvas)
            {
                mi_canvas = ComponentManager <CanvasHelper> .Value;
                return;
            }

            if (CanvasHelper.ActiveMenu == MenuType.None &&
                !PlayerItemManager.IsBusy &&
                mi_canvas.CanOpenMenu &&
                Helper.LocalPlayerIsWithinDistance(transform.position, Player.UseDistance + 0.5f))
            {
                mi_canvas.displayTextManager.ShowText(IsOn ? "Extinguish" : "Light", MyInput.Keybinds["Interact"].MainKey, 0, 0, true);
                if (MyInput.GetButtonDown("Interact"))
                {
                    UserControlsState = true;
                    SetLightOn(!IsOn);

                    var netMsg = new Message_Battery_OnOff(
                        Messages.Battery_OnOff,
                        RAPI.GetLocalPlayer().Network.NetworkIDManager,
                        RAPI.GetLocalPlayer().steamID,
                        ObjectIndex,
                        (int)ELanternRequestType.TOGGLE,
                        IsOn);

                    if (Semih_Network.IsHost)
                    {
                        mi_network.RPC(netMsg, Target.Other, EP2PSend.k_EP2PSendReliable, NetworkChannel.Channel_Game);
                        return;
                    }
                    mi_network.SendP2P(mi_network.HostID, netMsg, EP2PSend.k_EP2PSendReliable, NetworkChannel.Channel_Game);
                    return;
                }
                if (UserControlsState && Input.GetKeyDown(KeyCode.F))
                {
                    var notifier     = ComponentManager <HNotify> .Value;
                    var notification = notifier.AddNotification(HNotify.NotificationType.normal, "Automatic light behaviour restored.", 5);
                    notification.Show();
                    UserControlsState = false;
                    CheckLightState(true);

                    var netMsg = new Message_Battery_OnOff(
                        Messages.Battery_OnOff,
                        RAPI.GetLocalPlayer().Network.NetworkIDManager,
                        RAPI.GetLocalPlayer().steamID,
                        ObjectIndex,
                        (int)ELanternRequestType.RELEASE_AUTO, //indicate to receiving side that we want to switch back to auto control
                        IsOn);

                    if (Semih_Network.IsHost)
                    {
                        mi_network.RPC(netMsg, Target.Other, EP2PSend.k_EP2PSendReliable, NetworkChannel.Channel_Game);
                        return;
                    }
                    mi_network.SendP2P(mi_network.HostID, netMsg, EP2PSend.k_EP2PSendReliable, NetworkChannel.Channel_Game);
                }
            }
            else
            {
                mi_canvas.displayTextManager.HideDisplayTexts();
            }
        }