Exemplo n.º 1
0
        public override void RunCommand(string[] args, Optional <Player> sender)
        {
            try
            {
                Player playerToKick = playerManager.GetConnectedPlayers().Single(t => t.Name == args[0]);

                playerToKick.SendPacket(new PlayerKicked("You were kicked from the server!"));
                playerManager.PlayerDisconnected(playerToKick.connection);
                List <SimulatedEntity> revokedEntities = entitySimulation.CalculateSimulationChangesFromPlayerDisconnect(playerToKick);

                if (revokedEntities.Count > 0)
                {
                    SimulationOwnershipChange ownershipChange = new SimulationOwnershipChange(revokedEntities);
                    playerManager.SendPacketToAllPlayers(ownershipChange);
                }

                playerManager.SendPacketToOtherPlayers(new Disconnect(playerToKick.Id), playerToKick);
                Notify(sender, $"The player {args[0]} has been disconnected");
            }
            catch (InvalidOperationException)
            {
                Notify(sender, $"Error attempting to kick: {args[0]}, Player is not found");
            }
            catch (Exception ex)
            {
                Log.Error($"Error attempting to kick: {args[0]}", ex);
            }
        }
Exemplo n.º 2
0
        private void ConnectionStatusChanged(NetConnectionStatus status, NetConnection networkConnection)
        {
            if (status == NetConnectionStatus.Connected)
            {
                Connection connection = new Connection(server, networkConnection);

                lock (connectionsByRemoteIdentifier)
                {
                    connectionsByRemoteIdentifier[networkConnection.RemoteUniqueIdentifier] = connection;
                }
            }
            else if (status == NetConnectionStatus.Disconnected)
            {
                Connection connection = GetConnection(networkConnection.RemoteUniqueIdentifier);
                Player     player     = playerManager.GetPlayer(connection);

                if (player != null)
                {
                    playerManager.PlayerDisconnected(connection);

                    Disconnect disconnect = new Disconnect(player.Id);
                    playerManager.SendPacketToAllPlayers(disconnect);

                    List <SimulatedEntity> revokedGuids = entitySimulation.CalculateSimulationChangesFromPlayerDisconnect(player);

                    if (revokedGuids.Count > 0)
                    {
                        SimulationOwnershipChange ownershipChange = new SimulationOwnershipChange(revokedGuids);
                        playerManager.SendPacketToAllPlayers(ownershipChange);
                    }
                }
            }
        }
 private void BroadcastSimulationChanges(List <SimulatedEntity> ownershipChanges)
 {
     if (ownershipChanges.Count > 0)
     {
         // TODO: This should be moved to `SimulationOwnership`
         SimulationOwnershipChange ownershipChange = new SimulationOwnershipChange(ownershipChanges);
         playerManager.SendPacketToAllPlayers(ownershipChange);
     }
 }
Exemplo n.º 4
0
        public override void Process(SimulationOwnershipRequest ownershipRequest, Player player)
        {
            Console.WriteLine(ownershipRequest);

            if (simulationOwnership.TryToAquireOwnership(ownershipRequest.Guid, player))
            {
                SimulationOwnershipChange simulationOwnershipChange = new SimulationOwnershipChange(ownershipRequest.Guid, player.Id);
                tcpServer.SendPacketToAllPlayers(simulationOwnershipChange);
                Console.WriteLine("Sending: " + simulationOwnershipChange);
            }
        }
Exemplo n.º 5
0
        public override void Process(PickupItem packet, Player player)
        {
            if (simulationOwnershipData.RevokeOwnerOfGuid(packet.Guid))
            {
                ushort serverId = ushort.MaxValue;
                SimulationOwnershipChange simulationOwnershipChange = new SimulationOwnershipChange(packet.Guid, serverId, NitroxModel.DataStructures.SimulationLockType.TRANSIENT);
                playerManager.SendPacketToAllPlayers(simulationOwnershipChange);
            }

            entityManager.PickUpEntity(packet.Guid);
            playerManager.SendPacketToOtherPlayers(packet, player);
        }
        public override void Process(SimulationOwnershipRequest ownershipRequest, Player player)
        {
            Log.Debug(ownershipRequest);

            if (simulationOwnership.TryToAcquire(ownershipRequest.Guid, player))
            {
                // TODO: Distribute ownership in the `SimulationOwnership` class.
                SimulationOwnershipChange simulationOwnershipChange = new SimulationOwnershipChange(ownershipRequest.Guid, player.Id);
                playerManager.SendPacketToAllPlayers(simulationOwnershipChange);
                Log.Debug("Sending: " + simulationOwnershipChange);
            }
        }
Exemplo n.º 7
0
        public override void Process(SimulationOwnershipRequest ownershipRequest, Player player)
        {
            bool aquiredLock = simulationOwnershipData.TryToAcquire(ownershipRequest.Id, player, ownershipRequest.LockType);

            if (aquiredLock)
            {
                SimulationOwnershipChange simulationOwnershipChange = new SimulationOwnershipChange(ownershipRequest.Id, player.Id, ownershipRequest.LockType);
                playerManager.SendPacketToOtherPlayers(simulationOwnershipChange, player);
            }

            SimulationOwnershipResponse responseToPlayer = new SimulationOwnershipResponse(ownershipRequest.Id, aquiredLock, ownershipRequest.LockType);

            player.SendPacket(responseToPlayer);
        }
Exemplo n.º 8
0
        private void DisconnectPlayer(string[] args)
        {
            Player player = playerManager.GetConnectedPlayers().Single(t => t.Name == args[0]);

            args = args.Skip(1).ToArray();

            player.SendPacket(new PlayerKicked("You were kicked from the server! \n Reason: " + string.Join(" ", args)));     // Notify player was kicked
            playerManager.PlayerDisconnected(player.connection);                                                              // Remove kicked player from the playerManager and
            List <SimulatedEntity> revokedEntities = entitySimulation.CalculateSimulationChangesFromPlayerDisconnect(player); // Calculate Sim Changes

            if (revokedEntities.Count > 0)
            {
                SimulationOwnershipChange ownershipChange = new SimulationOwnershipChange(revokedEntities);
                playerManager.SendPacketToAllPlayers(ownershipChange);
            }

            playerManager.SendPacketToOtherPlayers(new Disconnect(player.Id), player);
        }
Exemplo n.º 9
0
        protected override void Execute(CallArgs args)
        {
            Player playerToKick = args.Get <Player>(0);

            playerToKick.SendPacket(new PlayerKicked($"You were kicked from the server ! \n Reason : {args.GetTillEnd(1)}"));
            playerManager.PlayerDisconnected(playerToKick.connection);

            List <SimulatedEntity> revokedEntities = entitySimulation.CalculateSimulationChangesFromPlayerDisconnect(playerToKick);

            if (revokedEntities.Count > 0)
            {
                SimulationOwnershipChange ownershipChange = new SimulationOwnershipChange(revokedEntities);
                playerManager.SendPacketToAllPlayers(ownershipChange);
            }

            playerManager.SendPacketToOtherPlayers(new Disconnect(playerToKick.Id), playerToKick);
            SendMessage(args.Sender, $"The player {playerToKick.Name} has been disconnected");
        }
Exemplo n.º 10
0
        protected override void Execute(CallArgs args)
        {
            System.Net.IPAddress temp;
            if (!System.Net.IPAddress.TryParse(args.Get(0), out temp))
            {
                Player playerToBan = args.Get <Player>(0);
                playerToBan.SendPacket(new PlayerKicked(args.GetTillEnd(1)));
                playerManager.PlayerDisconnected(playerToBan.connection);

                List <SimulatedEntity> revokedEntities = entitySimulation.CalculateSimulationChangesFromPlayerDisconnect(playerToBan);
                if (revokedEntities.Count > 0)
                {
                    SimulationOwnershipChange ownershipChange = new SimulationOwnershipChange(revokedEntities);
                    playerManager.SendPacketToAllPlayers(ownershipChange);
                }

                Banning.IpBanning.AddNewBan(playerToBan.connection.Endpoint.Address.ToString());
                playerManager.SendPacketToOtherPlayers(new Disconnect(playerToBan.Id), playerToBan);
                SendMessage(args.Sender, $"The player {playerToBan.Name} has been banned");
            }
            else
            {
                foreach (Player playerToBan in playerManager.GetAllPlayers())
                {
                    if (playerToBan.connection.Endpoint.Address.ToString() == temp.ToString())
                    {
                        playerToBan.SendPacket(new PlayerKicked(args.GetTillEnd(1)));
                        playerManager.PlayerDisconnected(playerToBan.connection);

                        List <SimulatedEntity> revokedEntities = entitySimulation.CalculateSimulationChangesFromPlayerDisconnect(playerToBan);
                        if (revokedEntities.Count > 0)
                        {
                            SimulationOwnershipChange ownershipChange = new SimulationOwnershipChange(revokedEntities);
                            playerManager.SendPacketToAllPlayers(ownershipChange);
                        }

                        Banning.IpBanning.AddNewBan(playerToBan.connection.Endpoint.Address.ToString());
                        playerManager.SendPacketToOtherPlayers(new Disconnect(playerToBan.Id), playerToBan);
                    }
                }

                Banning.IpBanning.AddNewBan(temp.ToString());
            }
        }
Exemplo n.º 11
0
        protected void ClientDisconnected(NitroxConnection connection)
        {
            Player player = playerManager.GetPlayer(connection);

            if (player != null)
            {
                playerManager.PlayerDisconnected(connection);

                Disconnect disconnect = new Disconnect(player.Id);
                playerManager.SendPacketToAllPlayers(disconnect);

                List <SimulatedEntity> ownershipChanges = entitySimulation.CalculateSimulationChangesFromPlayerDisconnect(player);

                if (ownershipChanges.Count > 0)
                {
                    SimulationOwnershipChange ownershipChange = new SimulationOwnershipChange(ownershipChanges);
                    playerManager.SendPacketToAllPlayers(ownershipChange);
                }
            }
        }
Exemplo n.º 12
0
        public override void Process(PickupItem packet, Player player)
        {
            if (simulationOwnershipData.RevokeOwnerOfId(packet.Id))
            {
                ushort serverId = ushort.MaxValue;
                SimulationOwnershipChange simulationOwnershipChange = new SimulationOwnershipChange(packet.Id, serverId, NitroxModel.DataStructures.SimulationLockType.TRANSIENT);
                playerManager.SendPacketToAllPlayers(simulationOwnershipChange);
            }

            // Need to remove the cached progress entry if the object is fully scanned
            if (pdaStateData.CachedProgress.TryGetValue(packet.TechType, out PDAProgressEntry pdaProgressEntry) && pdaProgressEntry.Entries.ContainsKey(packet.Id))
            {
                pdaProgressEntry.Entries.Remove(packet.Id);
                if (pdaProgressEntry.Entries.Count == 0)
                {
                    pdaStateData.CachedProgress.Remove(packet.TechType);
                }
            }

            entityManager.PickUpEntity(packet.Id);
            playerManager.SendPacketToOtherPlayers(packet, player);
        }
Exemplo n.º 13
0
        public override void Process(EntitySpawnedByClient packet, Player playerWhoSpawned)
        {
            Entity entity = packet.Entity;

            entityManager.RegisterNewEntity(entity);

            SimulatedEntity simulatedEntity = entitySimulation.AssignNewEntityToPlayer(entity, playerWhoSpawned);

            SimulationOwnershipChange ownershipChangePacket = new SimulationOwnershipChange(simulatedEntity);

            playerManager.SendPacketToAllPlayers(ownershipChangePacket);

            foreach (Player player in playerManager.GetConnectedPlayers())
            {
                bool isOtherPlayer = player != playerWhoSpawned;
                if (isOtherPlayer && player.CanSee(entity))
                {
                    CellEntities cellEntities = new CellEntities(entity);
                    player.SendPacket(cellEntities);
                }
            }
        }
Exemplo n.º 14
0
        public override void Process(DroppedItem packet, Player droppingPlayer)
        {
            bool   existsInGlobalRoot = map.GlobalRootTechTypes.Contains(packet.TechType);
            Entity entity             = new Entity(packet.ItemPosition, packet.ItemRotation, NitroxVector3.One, packet.TechType, 0, null, true, packet.WaterParkId.OrElse(null), packet.Bytes, existsInGlobalRoot, packet.Id);

            entityManager.RegisterNewEntity(entity);

            SimulatedEntity simulatedEntity = entitySimulation.AssignNewEntityToPlayer(entity, droppingPlayer);

            SimulationOwnershipChange ownershipChangePacket = new SimulationOwnershipChange(simulatedEntity);

            playerManager.SendPacketToAllPlayers(ownershipChangePacket);

            foreach (Player player in playerManager.GetConnectedPlayers())
            {
                bool isOtherPlayer = player != droppingPlayer;
                if (isOtherPlayer && player.CanSee(entity))
                {
                    CellEntities cellEntities = new CellEntities(entity);
                    player.SendPacket(cellEntities);
                }
            }
        }
Exemplo n.º 15
0
        public override void Process(DroppedItem packet, Player droppingPlayer)
        {
            bool   existsInGlobalRoot = Map.GLOBAL_ROOT_TECH_TYPES.Contains(packet.TechType);
            Entity entity             = new Entity(packet.ItemPosition, packet.ItemRotation, new UnityEngine.Vector3(1, 1, 1), packet.TechType, 0, null, true, packet.WaterParkGuid.OrElse(null), packet.Bytes, existsInGlobalRoot, packet.Guid);

            entityManager.RegisterNewEntity(entity);

            SimulatedEntity simulatedEntity = entitySimulation.AssignNewEntityToPlayer(entity, droppingPlayer);

            SimulationOwnershipChange ownershipChangePacket = new SimulationOwnershipChange(simulatedEntity);

            playerManager.SendPacketToAllPlayers(ownershipChangePacket);

            foreach (Player player in playerManager.GetPlayers())
            {
                bool isOtherPlayer = (player != droppingPlayer);

                if (isOtherPlayer && player.CanSee(entity))
                {
                    CellEntities cellEntities = new CellEntities(entity);
                    player.SendPacket(cellEntities);
                }
            }
        }