Beispiel #1
0
        public void BroadcastVehicleUndocking(VehicleDockingBay dockingBay, Vehicle vehicle, bool undockingStart)
        {
            NitroxId dockId;

            if (dockingBay.GetSubRoot() is BaseRoot)
            {
                dockId = NitroxEntity.GetId(dockingBay.GetComponentInParent <BaseRoot>().gameObject);
            }
            else if (dockingBay.GetSubRoot() is SubRoot)
            {
                dockId = NitroxEntity.GetId(dockingBay.GetSubRoot().gameObject);
            }
            else
            {
                dockId = NitroxEntity.GetId(dockingBay.GetComponentInParent <ConstructableBase>().gameObject);
            }

            NitroxId vehicleId = NitroxEntity.GetId(vehicle.gameObject);
            ushort   playerId  = multiplayerSession.Reservation.PlayerId;

            PacketSuppressor <Movement>        movementSuppressor        = packetSender.Suppress <Movement>();
            PacketSuppressor <VehicleMovement> vehicleMovementSuppressor = packetSender.Suppress <VehicleMovement>();

            if (!undockingStart)
            {
                movementSuppressor.Dispose();
                vehicleMovementSuppressor.Dispose();
            }

            VehicleUndocking packet = new VehicleUndocking(vehicleId, dockId, playerId, undockingStart);

            packetSender.Send(packet);
        }
Beispiel #2
0
        public void BroadcastVehicleDocking(VehicleDockingBay dockingBay, Vehicle vehicle)
        {
            NitroxId dockId;

            if (dockingBay.GetSubRoot() is BaseRoot)
            {
                dockId = NitroxEntity.GetId(dockingBay.GetComponentInParent <BaseRoot>().gameObject);
            }
            else if (dockingBay.GetSubRoot() is SubRoot)
            {
                dockId = NitroxEntity.GetId(dockingBay.GetSubRoot().gameObject);
            }
            else
            {
                dockId = NitroxEntity.GetId(dockingBay.GetComponentInParent <ConstructableBase>().gameObject);
            }

            NitroxId vehicleId = NitroxEntity.GetId(vehicle.gameObject);
            ushort   playerId  = multiplayerSession.Reservation.PlayerId;

            VehicleDocking packet = new VehicleDocking(vehicleId, dockId, playerId);

            packetSender.Send(packet);

            PacketSuppressor <Movement> movementSuppressor = packetSender.Suppress <Movement>();

            vehicle.StartCoroutine(AllowMovementPacketsAfterDockingAnimation(movementSuppressor));
        }
Beispiel #3
0
            public static bool Prefix(VehicleDockingBay __instance, GameObject nearby)
            {
                SubRoot cyclops = UWE.Utils.GetComponentInHierarchy <SubRoot>(nearby.gameObject);

                if (cyclops != null && !InceptionManager.DockedCyclopses.Contains(cyclops))
                {
                    if ((bool)__instance.GetInstanceField("powered"))
                    {
                        SubRoot main = __instance.GetSubRoot();
                        main.BroadcastMessage("OnLaunchBayOpening", SendMessageOptions.DontRequireReceiver);
                        main.BroadcastMessage("LockDoors", SendMessageOptions.DontRequireReceiver);
                        if ((bool)__instance.GetInstanceField("soundReset"))
                        {
                            if (__instance.bayDoorsOpenSFX != null)
                            {
                                __instance.bayDoorsOpenSFX.Play();
                            }
                            __instance.SetInstanceField("soundReset", false);
                            __instance.Invoke("SoundReset", 1f);
                        }
                    }
                    __instance.SetInstanceField("nearbyVehicle", null);
                    return(false);
                }
                return(true);
            }
Beispiel #4
0
            public static bool Prefix(VehicleDockingBay __instance, Collider other)
            {
                SubRoot cyclops = UWE.Utils.GetComponentInHierarchy <SubRoot>(other.gameObject);

                if (cyclops == null || InceptionManager.DockedCyclopses.ContainsKey(cyclops) || InceptionManager.GetRecentlyUndocked(cyclops) || __instance.GetDockedVehicle() || (GameModeUtils.RequiresPower() && !(bool)__instance.GetInstanceField("powered")) || (Vehicle)__instance.GetInstanceField("interpolatingVehicle") != null)
                {
                    return(true);
                }
                InceptionManager.DockedCyclopses.Add(cyclops, __instance.GetSubRoot());
                return(false);
            }
Beispiel #5
0
        public void BroadcastVehicleUndocking(VehicleDockingBay dockingBay, Vehicle vehicle)
        {
            NitroxId dockId;

            if (dockingBay.GetSubRoot() is BaseRoot)
            {
                dockId = NitroxIdentifier.GetId(dockingBay.GetComponentInParent<BaseRoot>().gameObject);
            }
            else if (dockingBay.GetSubRoot() is SubRoot)
            {
                dockId = NitroxIdentifier.GetId(dockingBay.GetSubRoot().gameObject);
            }
            else
            {
                dockId = NitroxIdentifier.GetId(dockingBay.GetComponentInParent<ConstructableBase>().gameObject);
            }

            NitroxId vehicleId = NitroxIdentifier.GetId(vehicle.gameObject);
            ushort playerId = multiplayerSession.Reservation.PlayerId;

            VehicleUndocking packet = new VehicleUndocking(vehicleId, dockId, playerId);
            packetSender.Send(packet);
        }
Beispiel #6
0
        public void BroadcastVehicleUndocking(VehicleDockingBay dockingBay, Vehicle vehicle)
        {
            string dockGuid = string.Empty;

            if (dockingBay.GetSubRoot() is BaseRoot)
            {
                dockGuid = GuidHelper.GetGuid(dockingBay.GetComponentInParent <BaseRoot>().gameObject);
            }
            else if (dockingBay.GetSubRoot() is SubRoot)
            {
                dockGuid = GuidHelper.GetGuid(dockingBay.GetSubRoot().gameObject);
            }
            else
            {
                dockGuid = GuidHelper.GetGuid(dockingBay.GetComponentInParent <ConstructableBase>().gameObject);
            }

            string vehicleGuid = GuidHelper.GetGuid(vehicle.gameObject);
            ushort playerId    = multiplayerSession.Reservation.PlayerId;

            VehicleUndocking packet = new VehicleUndocking(vehicleGuid, dockGuid, playerId);

            packetSender.Send(packet);
        }
Beispiel #7
0
            public static bool Prefix(VehicleDockingBay __instance, GameObject nearby)
            {
                SubRoot subRoot = UWE.Utils.GetComponentInHierarchy <SubRoot>(nearby.gameObject);

                if (subRoot != null)
                {
                    __instance.GetSubRoot().BroadcastMessage("UnlockDoors", SendMessageOptions.DontRequireReceiver);
                    if ((bool)__instance.GetInstanceField("soundReset"))
                    {
                        if (__instance.bayDoorsCloseSFX != null)
                        {
                            __instance.bayDoorsCloseSFX.Play();
                        }
                        __instance.SetInstanceField("soundReset", false);
                        __instance.Invoke("SoundReset", 1f);
                    }
                    return(false);
                }
                return(true);
            }
Beispiel #8
0
        private void FinishVehicleUndocking(VehicleUndocking packet, Vehicle vehicle, VehicleDockingBay vehicleDockingBay)
        {
            if (vehicleDockingBay.GetSubRoot().isCyclops)
            {
                vehicleDockingBay.SetVehicleUndocked();
            }
            vehicleDockingBay._dockedVehicle = null;
            vehicleDockingBay.CancelInvoke("RepairVehicle");
            vehicle.docked = false;
            Optional <RemotePlayer> player = remotePlayerManager.Find(packet.PlayerId);

            if (player.HasValue)
            {
                // Sometimes the player is not set accordingly which stretches the player's model instead of putting them in place
                // after undocking. This fixes it (the player rigid body seems to not be set right sometimes)
                player.Value.SetSubRoot(null);
                player.Value.SetVehicle(null);
                player.Value.SetVehicle(vehicle);
            }
            vehicles.SetOnPilotMode(packet.VehicleId, packet.PlayerId, true);
            Log.Debug($"Set vehicle undocking complete");
        }
Beispiel #9
0
        public void BroadcastVehicleDocking(VehicleDockingBay dockingBay, Vehicle vehicle)
        {
            string dockGuid = string.Empty;

            if (dockingBay.GetSubRoot() is BaseRoot)
            {
                dockGuid = GuidHelper.GetGuid(dockingBay.GetComponentInParent <BaseRoot>().gameObject);
            }
            else
            {
                dockGuid = GuidHelper.GetGuid(dockingBay.GetComponentInParent <ConstructableBase>().gameObject);
            }

            string vehicleGuid = GuidHelper.GetGuid(vehicle.gameObject);
            ushort playerId    = multiplayerSession.Reservation.PlayerId;

            VehicleDocking packet = new VehicleDocking(vehicleGuid, dockGuid, playerId);

            packetSender.Send(packet);

            PacketSuppressor <Movement> movementSuppressor = packetSender.Suppress <Movement>();

            vehicle.StartCoroutine(AllowMovementPacketsAfterDockingAnimation(movementSuppressor));
        }