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); }
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(); } }