예제 #1
0
        public static DeadBody Create(Transform ragdollTransform, Ped ped)
        {
            NetStatus.ThrowIfNotOnServer();

            GameObject ragdollGameObject = Object.Instantiate(PedManager.Instance.ragdollPrefab);
            DeadBody   deadBody          = ragdollGameObject.GetComponentOrThrow <DeadBody>();

            Object.Destroy(ragdollGameObject, PedManager.Instance.ragdollLifetime * Random.Range(0.85f, 1.15f));

            ragdollGameObject.name = "dead body " + ped.name;

            ragdollTransform.SetParent(ragdollGameObject.transform);

            deadBody.m_framesDict = ragdollTransform.GetComponentsInChildren <Frame>()
                                    .ToDictionary(f => f.BoneId, f => new BoneInfo(f.transform));

            foreach (var pair in deadBody.m_framesDict)
            {
                var rb = pair.Value.Rigidbody;
                if (rb != null)
                {
                    deadBody.m_rigidBodiesDict.Add(pair.Key, new BoneInfo(rb.transform));
                }
            }

            deadBody.InitSyncVarsOnServer(ped);

            NetManager.Spawn(ragdollGameObject);

            return(deadBody);
        }
예제 #2
0
        public static Projectile Create(
            GameObject prefab,
            Vector3 position,
            Quaternion rotation,
            Ped shooterPed)
        {
            NetStatus.ThrowIfNotOnServer();

            var go = Instantiate(prefab, position, rotation);

            var projectile = go.GetComponentOrThrow <Projectile>();

            if (shooterPed != null)
            {
                var projectileCollider = projectile.GetComponentOrThrow <Collider>();
                var pedColliders       = shooterPed.GetComponentsInChildren <Collider>();
                foreach (var pedCollider in pedColliders)
                {
                    Physics.IgnoreCollision(pedCollider, projectileCollider);
                }
            }

            NetManager.Spawn(go);

            return(projectile);
        }
예제 #3
0
        private static void    SendChatMessageToPlayerAsServer(Player player, string msg, string sender)
        {
            NetStatus.ThrowIfNotOnServer();

            var chatSync = player.GetComponent <ChatSync> ();

            if (chatSync != null)
            {
                chatSync.SendChatMsgToClient(player.connectionToClient, msg, sender);
            }
        }
예제 #4
0
        public static void    SendChatMessageToPlayerAsServer(Player player, string msg, bool useServerNick)
        {
            NetStatus.ThrowIfNotOnServer();

            msg = ChatManager.ProcessChatMessage(msg, true);
            if (string.IsNullOrEmpty(msg))
            {
                return;
            }

            SendChatMessageToPlayerAsServer(player, msg, useServerNick ? singleton.serverChatNick : "");
        }
예제 #5
0
        public static void    SendChatMessageToAllPlayersAsServer(string msg, string sender)
        {
            NetStatus.ThrowIfNotOnServer();

            msg = ChatManager.ProcessChatMessage(msg, true);
            if (string.IsNullOrEmpty(msg))
            {
                return;
            }

            foreach (var player in Player.AllPlayers)
            {
                SendChatMessageToPlayerAsServer(player, msg, sender);
            }

            if (!NetStatus.IsHost())
            {
                // running as dedicated server
                // we should invoke the event here, because there is no local player to receive the chat message
                F.InvokeEventExceptionSafe(onChatMessage, new ChatMessage(msg, sender));
            }
        }
예제 #6
0
 public void ExitVehicle(bool immediate = false)
 {
     NetStatus.ThrowIfNotOnServer();
     this.GetStateOrLogError <VehicleExitingState> ().ExitVehicle(immediate);
 }
예제 #7
0
 public void EnterVehicle(Vehicle vehicle, Vehicle.SeatAlignment seatAlignment, bool immediate = false)
 {
     NetStatus.ThrowIfNotOnServer();
     // find state script, and call it's method
     this.GetStateOrLogError <VehicleEnteringState>().TryEnterVehicle(vehicle, seatAlignment, immediate);
 }
예제 #8
0
        internal void    SendChatMsgToClient(NetworkConnection conn, string msg, string sender)
        {
            NetStatus.ThrowIfNotOnServer();

            this.TargetChatMsg(conn, msg, sender);
        }
예제 #9
0
        public static void    SendChatMessageToAllPlayersAsServer(string msg)
        {
            NetStatus.ThrowIfNotOnServer();

            SendChatMessageToAllPlayersAsServer(msg, singleton.serverChatNick);
        }