Beispiel #1
0
        private void HandleRpc(Client client, RpcPacket packet)
        {
            Console.WriteLine($"Received RPC of type {packet.FunctionId}");
            switch (packet.FunctionId)
            {
            case RpcFunctions.PLAYER_INGAME_NOTICE:
                client.SendPacket(new JoinedGamePacket(
                                      client.Id,
                                      server.ElementRepository.Count + 1,
                                      this.server.Root.Id,
                                      HttpDownloadType.HTTP_DOWNLOAD_ENABLED_PORT,
                                      80,
                                      "",
                                      5,
                                      1
                                      ));

                var existingPlayersListPacket = PlayerPacketFactory.CreatePlayerListPacket(
                    this.server.ElementRepository.GetByType <Client>(ElementType.Player).ToArray(),
                    true
                    );
                client.SendPacket(existingPlayersListPacket);

                var newPlayerListPacket = PlayerPacketFactory.CreatePlayerListPacket(new Client[] { client }, false);
                foreach (var player in this.server.ElementRepository.GetByType <Client>(ElementType.Player))
                {
                    player.SendPacket(newPlayerListPacket);
                }

                this.server.ElementRepository.Add(client);
                client.HandleJoin();

                break;
            }
        }
Beispiel #2
0
        private void HandleRpc(Client client, RpcPacket packet)
        {
            Debug.WriteLine($"Received RPC of type {packet.FunctionId}");
            switch (packet.FunctionId)
            {
            case RpcFunctions.PLAYER_INGAME_NOTICE:
                client.SendPacket(new JoinedGamePacket(
                                      client.Player.Id,
                                      this.elementRepository.Count + 1,
                                      this.root.Id,
                                      configuration.HttpUrl != null ? HttpDownloadType.HTTP_DOWNLOAD_ENABLED_URL : HttpDownloadType.HTTP_DOWNLOAD_ENABLED_PORT,
                                      configuration.HttpPort,
                                      configuration.HttpUrl ?? "",
                                      configuration.HttpConnectionsPerClient,
                                      1
                                      ));

                var otherPlayers = this.elementRepository
                                   .GetByType <Player>(ElementType.Player)
                                   .Except(new Player[] { client.Player })
                                   .ToArray();

                var existingPlayersListPacket = PlayerPacketFactory.CreatePlayerListPacket(otherPlayers, true);
                client.SendPacket(existingPlayersListPacket);

                var newPlayerListPacket = PlayerPacketFactory.CreatePlayerListPacket(new Player[] { client.Player }, false);
                newPlayerListPacket.SendTo(otherPlayers);

                this.server.HandlePlayerJoin(client.Player);

                break;
            }
        }
        private void HandleClientQuit(Client client, QuitReason reason)
        {
            var packet = PlayerPacketFactory.CreateQuitPacket(client.Player, reason);

            this.server.BroadcastPacket(packet);

            client.Player.Destroy();
        }
Beispiel #4
0
    public void HandlePacket(IClient client, PlayerTimeoutPacket packet)
    {
        var returnPacket = PlayerPacketFactory.CreateQuitPacket(client.Player, QuitReason.Timeout);

        returnPacket.SendTo(this.elementCollection.GetByType <Elements.Player>(ElementType.Player).Except(new Elements.Player[] { client.Player }));

        client.Player.Destroy();
    }
Beispiel #5
0
 private void RelayedNameChanged(object sender, ElementChangedEventArgs <string> args)
 {
     if (!args.IsSync)
     {
         var packet = PlayerPacketFactory.CreateNicknameChangePacket((Player)args.Source);
         this.server.BroadcastPacket(packet);
     }
 }
        private void SetupTestLogic()
        {
            this.server.PlayerJoined += (player) =>
            {
                var client = player.Client;
                System.Console.WriteLine($"{player.Name} ({client.Version}) ({client.Serial}) has joined the server!");
                client.SendPacket(new SetCameraTargetPacket(player.Id));
                client.SendPacket(new SpawnPlayerPacket(
                                      player.Id,
                                      flags: 0,
                                      position: new Vector3(0, 0, 3),
                                      rotation: 0,
                                      skin: 7,
                                      teamId: 0,
                                      interior: 0,
                                      dimension: 0,
                                      timeContext: 0
                                      ));
                client.SendPacket(new FadeCameraPacket(CameraFade.In));
                client.SendPacket(new ChatEchoPacket(this.root.Id, "Hello World", Color.White));
                client.SendPacket(new ClearChatPacket());
                client.SendPacket(new ChatEchoPacket(this.root.Id, "Hello World Again", Color.White));
                client.SendPacket(new ConsoleEchoPacket("Hello Console World"));

                client.SendPacket(ElementPacketFactory.CreateSetHealthPacket(player, 50));
                client.SendPacket(ElementPacketFactory.CreateSetAlphaPacket(player, 100));

                client.SendPacket(PlayerPacketFactory.CreateShowHudComponentPacket(HudComponent.Money, false));
                client.SendPacket(PlayerPacketFactory.CreateSetFPSLimitPacket(100));
                client.SendPacket(PlayerPacketFactory.CreatePlaySoundPacket(1));
                client.SendPacket(PlayerPacketFactory.CreateSetWantedLevelPacket(4));
                client.SendPacket(PlayerPacketFactory.CreateToggleDebuggerPacket(true));
                client.SendPacket(PlayerPacketFactory.CreateDebugEchoPacket("Object reference not set to an instance of an object", 0, Color.Red));
                client.SendPacket(PlayerPacketFactory.CreateDebugEchoPacket("You successfully got banned", 3));
                //client.SendPacket(PlayerPacketFactory.CreateForcePlayerMapPacket(true));
                //client.SendPacket(PlayerPacketFactory.CreateToggleAllControlsPacket(false));

                TestPacketScopes(client);
                TestClientResource(client);
                TestPureSync(client);
                _ = TestEventTrigger(client);
                SetupTestElements(client);
            };
        }
        private void OnPlayerJoin(Player player)
        {
            var client = player.Client;

            System.Console.WriteLine($"{player.Name} ({client.Version}) ({client.Serial}) has joined the server!");
            client.SendPacket(new SetCameraTargetPacket(player.Id));
            client.SendPacket(new SpawnPlayerPacket(
                                  player.Id,
                                  flags: 0,
                                  position: new Vector3(0, 0, 3),
                                  rotation: 0,
                                  skin: 7,
                                  teamId: 0,
                                  interior: 0,
                                  dimension: 0,
                                  timeContext: 0
                                  ));
            client.SendPacket(new FadeCameraPacket(CameraFade.In));
            client.SendPacket(new ChatEchoPacket(this.root.Id, "Hello World", Color.White));
            client.SendPacket(new ClearChatPacket());
            client.SendPacket(new ChatEchoPacket(this.root.Id, "Hello World Again", Color.White));
            client.SendPacket(new ConsoleEchoPacket("Hello Console World"));

            client.SendPacket(ElementPacketFactory.CreateSetHealthPacket(player, 50));
            client.SendPacket(ElementPacketFactory.CreateSetAlphaPacket(player, 100));

            client.SendPacket(PlayerPacketFactory.CreateShowHudComponentPacket(HudComponent.Money, false));
            client.SendPacket(PlayerPacketFactory.CreateSetFPSLimitPacket(100));
            client.SendPacket(PlayerPacketFactory.CreatePlaySoundPacket(1));
            client.SendPacket(PlayerPacketFactory.CreateSetWantedLevelPacket(4));
            client.SendPacket(PlayerPacketFactory.CreateToggleDebuggerPacket(true));
            client.SendPacket(PlayerPacketFactory.CreateDebugEchoPacket("Test debug message", DebugLevel.Custom, Color.Red));
            client.SendPacket(PlayerPacketFactory.CreateDebugEchoPacket("Test debug message 2", DebugLevel.Information));
            //client.SendPacket(PlayerPacketFactory.CreateForcePlayerMapPacket(true));
            //client.SendPacket(PlayerPacketFactory.CreateToggleAllControlsPacket(false));

            TestPacketScopes(client);
            TestClientResource(client);
            TestPureSync(client);
            _ = TestEventTrigger(client);
        }
Beispiel #8
0
 public void SetVisibleTo(Player player, bool isVisible)
 {
     player.Client.SendPacket(PlayerPacketFactory.CreateToggleDebuggerPacket(isVisible));
 }
Beispiel #9
0
 public void SetVisible(bool isVisible)
 {
     this.server.BroadcastPacket(PlayerPacketFactory.CreateToggleDebuggerPacket(isVisible));
 }
Beispiel #10
0
 public void OutputTo(Player player, string message, DebugLevel level = DebugLevel.Information, Color?color = null)
 {
     player.Client.SendPacket(PlayerPacketFactory.CreateDebugEchoPacket(message, level, color ?? Color.White));
 }
Beispiel #11
0
 public void Output(string message, DebugLevel level = DebugLevel.Information, Color?color = null)
 {
     this.server.BroadcastPacket(PlayerPacketFactory.CreateDebugEchoPacket(message, level, color ?? Color.White));
 }
Beispiel #12
0
    private void RelayMoneyChanged(object sender, PlayerMoneyChangedEventArgs args)
    {
        var packet = PlayerPacketFactory.CreateSetMoneyPacket(args.Money, args.Instant);

        args.Source.Client.SendPacket(packet);
    }
Beispiel #13
0
    private void WantedLevelChanged(object sender, ElementChangedEventArgs <Player, byte> args)
    {
        var packet = PlayerPacketFactory.CreateSetWantedLevelPacket(args.NewValue);

        args.Source.Client.SendPacket(packet);
    }
Beispiel #14
0
    private void RelayPlayerSpawn(object sender, PlayerSpawnedEventArgs args)
    {
        var packet = PlayerPacketFactory.CreateSpawnPacket(args.Source);

        this.server.BroadcastPacket(packet);
    }
    private void HandleIngameNotice(IClient client)
    {
        var players = this.elementCollection.GetByType <Elements.Player>(ElementType.Player);

        var isVersionValid = Version.TryParse(string.Join(".", client.Version !.Replace("-", ".").Split(".").Take(4)), out Version? result);

        if (!isVersionValid)
        {
            client.Player.Kick(PlayerDisconnectType.BAD_VERSION);
            return;
        }

        if (result < this.configuration.MinVersion)
        {
            client.SendPacket(PlayerPacketFactory.CreateUpdateInfoPacket(this.configuration.MinVersion));
            client.Player.Kick($"Disconnected: Minimum mta version required: {this.configuration.MinVersion}");
            return;
        }

        client.SendPacket(new JoinedGamePacket(
                              client.Player.Id,
                              players.Count() + 1,
                              this.root.Id,
                              this.configuration.HttpUrl != null ? HttpDownloadType.HTTP_DOWNLOAD_ENABLED_URL : HttpDownloadType.HTTP_DOWNLOAD_ENABLED_PORT,
                              this.configuration.HttpPort,
                              this.configuration.HttpUrl ?? "",
                              this.configuration.HttpConnectionsPerClient,
                              1,
                              isVoiceEnabled: this.configuration.IsVoiceEnabled
                              ));

        var otherPlayers = players
                           .Except(new Elements.Player[] { client.Player })
                           .ToArray();

        var existingPlayersListPacket = PlayerPacketFactory.CreatePlayerListPacket(otherPlayers, true);

        client.SendPacket(existingPlayersListPacket);

        var newPlayerListPacket = PlayerPacketFactory.CreatePlayerListPacket(new Elements.Player[] { client.Player }, false);

        newPlayerListPacket.SendTo(otherPlayers);

        SyncPacketFactory.CreateSyncSettingsPacket(this.configuration).SendTo(client.Player);
        SyncPacketFactory.CreateSyncIntervalPacket(this.configuration).SendTo(client.Player);

        foreach (var player in otherPlayers)
        {
            if (player.GetAllStats().Count > 0)
            {
                PedPacketFactory.CreatePlayerStatsPacket(player).SendTo(client.Player);
            }

            if (player.GetAllStats().Count > 0)
            {
                PedPacketFactory.CreateFullClothesPacket(player).SendTo(client.Player);
            }
        }

        this.server.HandlePlayerJoin(client.Player);
    }