Пример #1
0
        private void ParseGameData(GameDataPacket packet)
        {
            if (packet.DataItems != null)
            {
                var strArray = packet.DataItems.ToArray();
                if (strArray.Length >= 14)
                {
                    for (var index = 0; index < strArray.Length; index++)
                    {
                        var dataItem = strArray[index];

                        if (string.IsNullOrEmpty(dataItem))
                            continue;

                        switch (index)
                        {
                            case 0:
                                GameMode = packet.GameMode;
                                break;

                            case 1:
                                IsGameJoltPlayer = packet.IsGameJoltPlayer;
                                break;

                            case 2:
                                GameJoltId = packet.GameJoltId;
                                break;

                            case 3:
                                DecimalSeparator = packet.DecimalSeparator;
                                break;

                            case 4:
                                Nickname = packet.Name;
                                break;

                            case 5:
                                LevelFile = packet.LevelFile;
                                break;

                            case 6:
                                Position = packet.GetPosition(DecimalSeparator);
                                //if (packet.GetPokemonPosition(DecimalSeparator) != Vector3.Zero)
                                //{
                                //    LastPosition = Position;
                                //
                                //    Position = packet.GetPosition(DecimalSeparator);
                                //
                                //    IsMoving = LastPosition != Position;
                                //}
                                break;

                            case 7:
                                Facing = packet.Facing;
                                break;

                            case 8:
                                Moving = packet.Moving;
                                break;

                            case 9:
                                Skin = packet.Skin;
                                break;

                            case 10:
                                BusyType = packet.BusyType;
                                //Basic.ServersManager.UpdatePlayerList();
                                break;

                            case 11:
                                PokemonVisible = packet.PokemonVisible;
                                break;

                            case 12:
                                if (packet.GetPokemonPosition(DecimalSeparator) != Vector3.Zero)
                                    PokemonPosition = packet.GetPokemonPosition(DecimalSeparator);
                                break;

                            case 13:
                                PokemonSkin = packet.PokemonSkin;
                                break;

                            case 14:
                                PokemonFacing = packet.PokemonFacing;
                                break;
                        }
                    }
                }
                else
                    Logger.Log(LogType.Error, $"P3D Reading Error: ParseGameData DataItems < 14. Packet DataItems {packet.DataItems}.");
            }
            else
                Logger.Log(LogType.Error, $"P3D Reading Error: ParseGameData DataItems is null.");
        }
Пример #2
0
        private void HandleGameData(GameDataPacket packet)
        {
            ParseGameData(packet);
            Module.SendPosition(this);

            if(IsInitialized)
                Module.ClientUpdate(this);

            if (!Moving)
                Module.SendPacketToAll(packet);

            var dataPacket = GetDataPacket();
            dataPacket.Origin = Id;
            SendPacket(dataPacket);


            // We assume that if we get a GameData, it's a client that wanna play
            if (FirstGameData)
                return;
            FirstGameData = true;

            if (!Module.SetClientId(this))
                return;

            SendPacket(new IdPacket { Origin = -1, PlayerId = Id });
            SendPacket(new WorldDataPacket { Origin = -1, DataItems = Module.World.GenerateDataItems() });

            if (!IsGameJoltPlayer)
            {
                SendServerMessage("Please use /login %PASSWORD% for logging in or registering");
                SendServerMessage("Please note that chat data  isn't sended secure to server");
                SendServerMessage("So it can be seen via traffic sniffing");
                SendServerMessage("Don't use your regular passwords");
                SendServerMessage("On server it's stored fully secure via SHA-512");
            }
            else
                Initialize();
        }