private void OnDestroyRemotableActor(ref DestroyRemotableActor p)
        {
            int index = p.Index;

            lock (sync) {
                Player player;
                if (!players.TryGetValue(p.SenderConnection, out player))
                {
                    return;
                }

                if (player.Index != (index & 0xff))
                {
                    return;
                }

                if (!remotableActors.Remove(index))
                {
                    return;
                }
            }

            Send(new DestroyRemoteObject {
                Index = index
            }, 5, playerConnections, NetDeliveryMethod.ReliableUnordered, PacketChannels.Main);
        }
Exemple #2
0
        public override void RemoveActor(ActorBase actor)
        {
            base.RemoveActor(actor);

            IRemotableActor remotableActor = actor as IRemotableActor;

            if (remotableActor == null)
            {
                return;
            }

            int actorIndex = remotableActor.Index;

            if (!localRemotableActors.Remove(actorIndex))
            {
                return;
            }

            DestroyRemotableActor p = new DestroyRemotableActor();

            p.Index = actorIndex;
            net.Send(p, 5, NetDeliveryMethod.ReliableUnordered, PacketChannels.Main);
        }