Beispiel #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);
        }
Beispiel #2
0
    public static void SailsOpen()
    {
        Semih_Network value    = ComponentManager <Semih_Network> .Value;
        List <Sail>   allSails = Sail.AllSails;

        for (int i = 0; i < allSails.Count; i++)
        {
            Sail sail = allSails[i];
            Message_NetworkBehaviour message_NetworkBehaviour = new Message_NetworkBehaviour((!sail.open) ? Messages.Sail_Open : Messages.Sail_Close, sail);
            if (Semih_Network.IsHost)
            {
                sail.Open();
                value.RPC(message_NetworkBehaviour, Target.All, Steamworks.EP2PSend.k_EP2PSendReliableWithBuffering, 0);
            }
            else
            {
                value.SendP2P(value.HostID, message_NetworkBehaviour, Steamworks.EP2PSend.k_EP2PSendReliableWithBuffering, 0);
            }
        }
    }
    public static void SailsClose()
    {
        if (network == null)
        {
            network = ComponentManager <Semih_Network> .Value;
        }
        List <Sail> allSails = Sail.AllSails;

        for (int i = 0; i < allSails.Count; i++)
        {
            Sail sail = allSails[i];
            Message_NetworkBehaviour message = new Message_NetworkBehaviour(Messages.Sail_Close, sail);
            if (Semih_Network.IsHost)
            {
                AccessTools.Method("Sail:Close", null, null).Invoke(sail, null);
                network.RPC(message, Target.Other, EP2PSend.k_EP2PSendReliable, NetworkChannel.Channel_Game);
                continue;
            }
            network.SendP2P(network.HostID, message, EP2PSend.k_EP2PSendReliable, NetworkChannel.Channel_Game);
        }
    }
Beispiel #4
0
    public static void SailsClose()
    {
        Semih_Network value    = ComponentManager <Semih_Network> .Value;
        List <Sail>   allSails = Sail.AllSails;

        object[] parameters = new object[0];
        for (int i = 0; i < allSails.Count; i++)
        {
            Sail sail = allSails[i];
            Message_NetworkBehaviour message_NetworkBehaviour = new Message_NetworkBehaviour((!sail.open) ? Messages.Sail_Open : Messages.Sail_Close, sail);
            if (Semih_Network.IsHost)
            {
                AccessTools.Method("Sail:Close", null, null).Invoke(sail, parameters);
                value.RPC(message_NetworkBehaviour, Target.All, Steamworks.EP2PSend.k_EP2PSendReliableWithBuffering, 0);
            }
            else
            {
                value.SendP2P(value.HostID, message_NetworkBehaviour, Steamworks.EP2PSend.k_EP2PSendReliableWithBuffering, 0);
            }
        }
    }
    private static bool Prefix
    (
        Sail __instance,
        ref bool ___blockPlaced,
        ref Network_Player ___localPlayer,
        ref CanvasHelper ___canvas,
        ref bool ___isRotating,
        ref GameObject ___paintCollider,
        ref Semih_Network ___network
    )
    {
        if (!___blockPlaced)
        {
            return(false);
        }
        if (___canvas == null || ___canvas.displayTextManager == null || ___localPlayer == null)
        {
            return(false);
        }
        if (Helper.LocalPlayerIsWithinDistance(__instance.transform.position, Player.UseDistance) && CanvasHelper.ActiveMenu == MenuType.None)
        {
            bool mod = MyInput.GetButton("Sprint");
            if (!__instance.open)
            {
                if (mod)
                {
                    ___canvas.displayTextManager.ShowText("Open Sails", MyInput.Keybinds["Interact"].MainKey, 1, "Rotate Sails", MyInput.Keybinds["Rotate"].MainKey, 2);
                }
                else
                {
                    ___canvas.displayTextManager.ShowText("Hold for more options", MyInput.Keybinds["Sprint"].MainKey, 1, "Open", MyInput.Keybinds["Interact"].MainKey, 2, 0, true);
                    ___canvas.displayTextManager.ShowText("Rotate", MyInput.Keybinds["Rotate"].MainKey, 3, 0, false);
                }
            }
            else
            {
                if (mod)
                {
                    ___canvas.displayTextManager.ShowText("Close Sails", MyInput.Keybinds["Interact"].MainKey, 1, "Rotate Sails", MyInput.Keybinds["Rotate"].MainKey, 2);
                }
                else
                {
                    ___canvas.displayTextManager.ShowText("Hold for more options", MyInput.Keybinds["Sprint"].MainKey, 1, "Close", MyInput.Keybinds["Interact"].MainKey, 2, 0, true);
                    ___canvas.displayTextManager.ShowText("Rotate", MyInput.Keybinds["Rotate"].MainKey, 3, 0, false);
                }
            }

            if (MyInput.GetButtonDown("Interact"))
            {
                Message_NetworkBehaviour message = new Message_NetworkBehaviour(__instance.open ? Messages.Sail_Close : Messages.Sail_Open, __instance);
                if (Semih_Network.IsHost)
                {
                    if (__instance.open)
                    {
                        if (mod)
                        {
                            MoreSailsMoreSpeed.SailsClose();
                        }
                        else
                        {
                            AccessTools.Method("Sail:Close").Invoke(__instance, null);
                        }
                    }
                    else
                    {
                        if (mod)
                        {
                            MoreSailsMoreSpeed.SailsOpen();
                        }
                        else
                        {
                            AccessTools.Method("Sail:Open").Invoke(__instance, null);
                        }
                    }
                    ___network.RPC(message, Target.Other, EP2PSend.k_EP2PSendReliable, NetworkChannel.Channel_Game);
                }
                else
                {
                    ___network.SendP2P(___network.HostID, message, EP2PSend.k_EP2PSendReliable, NetworkChannel.Channel_Game);
                }
            }

            if (MyInput.GetButton("Rotate"))
            {
                ___localPlayer.PlayerScript.SetMouseLookScripts(false);
                ___isRotating = true;
            }
            else if (MyInput.GetButtonUp("Rotate"))
            {
                if (mod)
                {
                    MoreSailsMoreSpeed.RotateSailsTo(__instance);
                }
                ___localPlayer.PlayerScript.SetMouseLookScripts(true);
                ___isRotating = false;
            }
            if (MyInput.GetButtonUp("Sprint") && ___isRotating)
            {
                MoreSailsMoreSpeed.RotateSailsTo(__instance);
                ___localPlayer.PlayerScript.SetMouseLookScripts(true);
                ___isRotating = false;
                return(false);
            }

            bool button = MyInput.GetButton("Rotate");
            if (button)
            {
                float axis = Input.GetAxis("Mouse X");
                if (Semih_Network.IsHost)
                {
                    AccessTools.Method("Sail:Rotate").Invoke(__instance, new object[] { axis });
                }
                else
                {
                    Message_Sail_Rotate message2 = new Message_Sail_Rotate(Messages.Sail_Rotate, __instance, axis);
                    ___network.SendP2P(___network.HostID, message2, EP2PSend.k_EP2PSendReliable, NetworkChannel.Channel_Game);
                }
            }
            ___paintCollider.SetActiveSafe(!button);
            return(false);
        }
        if (___isRotating)
        {
            ___isRotating = false;
            ___localPlayer.PlayerScript.SetMouseLookScripts(true);
        }
        ___canvas.displayTextManager.HideDisplayTexts();
        return(false);
    }