/// <summary>
 /// Handles packets sent from the game server
 /// </summary>
 /// <param name="packet">The packet.</param>
 public void OnPacket(GameServerPacket packet)
 {
     switch (packet.Id)
     {
         case GameServerInPacketType.GameMessage:
             OnGameMessage(packet);
             break;
         case GameServerInPacketType.InformationMessage:
             OnInformationMessage(packet);
             break;
         case GameServerInPacketType.WorldItemAction:
             OnWorldItemAction(packet);
             break;
         case GameServerInPacketType.PlayerInGame:
             OnPlayerInGame(packet);
             break;
         case GameServerInPacketType.LoadAct:
             OnLoadAct(packet);
             break;
         case GameServerInPacketType.AssignPlayer:
             OnAssignPlayer(packet);
             break;
         case GameServerInPacketType.PlayerMove:
             OnPlayerMove(packet);
             break;
         case GameServerInPacketType.PlayerReassign:
             OnPlayerReassign(packet);
             break;
         default:
             break;
     }
 }
Exemplo n.º 2
0
        /// <summary>
        /// Game server has completed our request to join the game. We request to enter the
        /// game along with starting the ping thread.
        /// </summary>
        /// <param name="packet">The packet.</param>
        private void OnGameLogonSuccess(GameServerPacket packet)
        {
            SendPacket(new EnterGameOut());

            // Ping thread used to keep our connection to the server alive
            pingThread = new Thread(() =>
            {
                LogServer("Ping thread started");
                while (client.Connected)
                {
                    Thread.Sleep(7000);
                    SendPing();
                }
                LogServer("Ping thread ended");
            });

            pingThread.Name         = "PING:" + characterName;
            pingThread.IsBackground = true;

            pingThread.Start();

            AntiIdleCounter = 0;
            AntiIdleTimer   = new Timer(
                n =>
            {
                SayOverhead(characterName + " Anti-Idle " + (AntiIdleCounter++));
            },
                null,
                0,
                300000
                );

            IsInGame = true;
            FireOnEnterGameEvent();
        }
Exemplo n.º 3
0
        /// <summary>
        /// Handles WorldItemAction (0x9c) packets. Keeps track of items in player's main inventory.
        /// </summary>
        /// <param name="packet">The packet.</param>
        private void OnWorldItemAction(GameServerPacket packet)
        {
            WorldItemEventIn fromServer;

            try
            {
                fromServer = new WorldItemEventIn(packet);
            }
            catch (Exception)
            {
                LogError("Failed to parse item: " + Util.GetPacketDump(packet.Data, true));
            }

            //StringBuilder sb = new StringBuilder();
            //
            //sb.AppendLine("Item: " + fromServer.item);
            //foreach (var item in fromServer.item.Properties)
            //{
            //	sb.AppendLine("  " + item);
            //}
            //sb.AppendLine("  " );
            //LogDebug(sb);

            //if (fromServer.item.Location == Item.ItemLocation.Stored && fromServer.item.StorageId == Item.StorageType.Inventory)
            //{
            //	items.Add(fromServer.item);
            //}
        }
Exemplo n.º 4
0
        private void OnLoadAct(GameServerPacket packet)
        {
            LoadActIn fromServer = new LoadActIn(packet);

            CurrentAct = fromServer.Act + 1;

            Log("Entering act " + CurrentAct);
        }
Exemplo n.º 5
0
        public LoadActIn(GameServerPacket packet)
        {
            BinaryReader br = new BinaryReader(new MemoryStream(packet.Data));

            Act    = br.ReadByte();
            Seed1  = br.ReadUInt32();
            AreaId = br.ReadUInt16();
            Seed2  = br.ReadUInt32();
        }
Exemplo n.º 6
0
        public PlayerReassignIn(GameServerPacket packet)
        {
            BinaryReader br = new BinaryReader(new MemoryStream(packet.Data));

            EntityType  = br.ReadByte();
            ID          = br.ReadUInt32();
            X           = br.ReadUInt16();
            Y           = br.ReadUInt16();
            UnknownFlag = br.ReadByte();
        }
Exemplo n.º 7
0
        public AssignPlayerIn(GameServerPacket packet)
        {
            BinaryReader br = new BinaryReader(new MemoryStream(packet.Data));

            ID    = br.ReadUInt32();
            Class = br.ReadByte();
            Name  = Util.ReadSpecialString(br);
            br.ReadBytes(15 - Name.Length);
            X = br.ReadUInt16();
            Y = br.ReadUInt16();
        }
Exemplo n.º 8
0
        public PlayerMoveIn(GameServerPacket packet)
        {
            BinaryReader br = new BinaryReader(new MemoryStream(packet.Data));

            ID           = br.ReadUInt32();
            MovementType = br.ReadByte();
            DestX        = br.ReadUInt16();
            DestY        = br.ReadUInt16();
            Unknown      = br.ReadByte();
            SourceX      = br.ReadUInt16();
            SourceY      = br.ReadUInt16();
        }
Exemplo n.º 9
0
        public PlayerInGameIn(GameServerPacket packet)
        {
            BinaryReader br            = new BinaryReader(new MemoryStream(packet.Data));
            ushort       messageLength = br.ReadUInt16();

            PlayerID    = br.ReadUInt32();
            PlayerClass = br.ReadByte();
            PlayerName  = Util.ReadSpecialString(br);
            br.ReadBytes(15 - PlayerName.Length);
            PlayerLevel   = br.ReadUInt16();
            PlayerPartyID = br.ReadUInt16();
        }
Exemplo n.º 10
0
        public InformationMessageIn(GameServerPacket packet)
        {
            BinaryReader br = new BinaryReader(new MemoryStream(packet.Data));

            Event      = (InformationEvents)br.ReadByte();
            Action     = br.ReadByte();
            EntityID   = br.ReadUInt32();
            EntityType = br.ReadByte();

            First  = Util.ReadAndUnpadString(br, 16);
            Second = Util.ReadAndUnpadString(br, 16);
        }
Exemplo n.º 11
0
        /// <summary>
        /// Handles the GameLogonRequestIn packet. This packet is sent to us when we first connect
        /// to the game server. We reply with a logon request and a ping
        /// </summary>
        /// <param name="packet">The packet.</param>
        private void OnRequestLogonInfo(GameServerPacket packet)
        {
            GameLogonRequestOut toServer = new GameLogonRequestOut(
                gameServerArgs.GameHash,
                gameServerArgs.GameToken,
                settings.ClientVersion,
                (byte)gameServerArgs.CharacterClass,
                gameServerArgs.CharacterName
                );

            SendPacket(toServer);
            SendPing();
        }
Exemplo n.º 12
0
        public GameMessageIn(GameServerPacket packet)
        {
            BinaryReader br = new BinaryReader(new MemoryStream(packet.Data));

            ChatType      = (ChatTypes)br.ReadByte();
            UnknownA      = br.ReadByte();
            EntityType    = br.ReadByte();
            EntityID      = br.ReadUInt32();
            UnknownB      = br.ReadByte();
            UnknownC      = br.ReadByte();
            CharacterName = Util.ReadSpecialString(br);
            Message       = Util.ReadSpecialString(br);;
        }
Exemplo n.º 13
0
        private void OnPlayerReassign(GameServerPacket packet)
        {
            PlayerReassignIn fromServer = new PlayerReassignIn(packet);

            if (fromServer.ID != clientPlayerId)
            {
                Log("Reassign from other client");
                return;
            }

            PositionX = fromServer.X;
            PositionY = fromServer.Y;
            Log(string.Format("Reassigned player to {0}, {1}", PositionX, PositionY));

            if (AlreadyDispersed)
            {
                return;
            }

            AlreadyDispersed = true;

            ushort moveToX = PositionX;
            ushort moveToY = PositionY;

            switch (CurrentAct)
            {
            case 1:
                moveToY -= 20;
                break;

            case 2:
                moveToY += 20;
                break;

            case 3:
                moveToX += 20;
                moveToY += 20;
                break;

            case 4:
                moveToX -= 40;
                moveToY += 20;
                break;

            case 5:
                moveToX += 20;
                break;
            }

            SendPacket(new RunToLocationOut(moveToX, moveToY));
        }
Exemplo n.º 14
0
        private void OnAssignPlayer(GameServerPacket packet)
        {
            AssignPlayerIn fromServer = new AssignPlayerIn(packet);

            if (fromServer.X == 0 && fromServer.Y == 0 && String.Compare(fromServer.Name, characterName, StringComparison.OrdinalIgnoreCase) == 0)
            {
                // This bot
                clientPlayerId = fromServer.ID;
            }
            else
            {
                // Other players
            }
        }
Exemplo n.º 15
0
        /// <summary>
        /// Handles inviting all players already in a game
        /// </summary>
        /// <param name="packet">The packet.</param>
        private void OnPlayerInGame(GameServerPacket packet)
        {
            PlayerInGameIn fromServer = new PlayerInGameIn(packet);

            if (fromServer.IsPlayerInParty)
            {
                return;
            }

            if (String.Compare(characterName, fromServer.PlayerName, System.StringComparison.OrdinalIgnoreCase) != 0)
            {
                // invite player...
                Log(string.Format("Inviting player: {0}", fromServer.PlayerName));
                SendPacket(new PartyRequestOut(PartyRequestOut.RequestType.Invite, fromServer.PlayerID));
            }
        }
Exemplo n.º 16
0
        /// <summary>
        /// Handles InformationMessageIn packets. Keeps track of total number of players
        /// in game.
        /// </summary>
        /// <param name="packet">The packet.</param>
        private void OnInformationMessage(GameServerPacket packet)
        {
            InformationMessageIn fromServer = new InformationMessageIn(packet);

            Log(fromServer);

            switch (fromServer.Event)
            {
            case InformationMessageIn.InformationEvents.PlayerTimeout:
            case InformationMessageIn.InformationEvents.PlayerDropped:
            case InformationMessageIn.InformationEvents.PlayerQuit:
            {
                bool isBot = settings.BotNames.Contains(fromServer.First.ToLower());

                PlayerNames.Remove(fromServer.First);
                Log(String.Format("{0}/{1} players remaining", PlayerNames.Count, MaxPlayers));

                FireOnPlayerCountEvent(new PlayerCountArgs(PlayerNames.Count, MaxPlayers, fromServer.First, false, isBot));

                break;
            }

            case InformationMessageIn.InformationEvents.PlayerJoined:
            {
                bool isBot = settings.BotNames.Contains(fromServer.First.ToLower());

                PlayerNames.Add(fromServer.First);
                Log(String.Format("{0}/{1} players total", PlayerNames.Count, MaxPlayers));

                FireOnPlayerCountEvent(new PlayerCountArgs(PlayerNames.Count, MaxPlayers, fromServer.First, true, isBot));
            }
            break;

            case InformationMessageIn.InformationEvents.PlayerRelation:
                // Accept any party requests
                if (fromServer.Action == 0x02 && fromServer.EntityType == 0x05)
                {
                    SendPacket(new PartyRequestOut(PartyRequestOut.RequestType.Accept, fromServer.EntityID));
                }
                break;

            default:
                break;
            }
        }
Exemplo n.º 17
0
        /// <summary>
        /// Handles chat messages from other players and objects in game
        /// </summary>
        /// <param name="packet">The packet.</param>
        private void OnGameMessage(GameServerPacket packet)
        {
            GameMessageIn fromServer = new GameMessageIn(packet);

            Log(fromServer);

            if (fromServer.ChatType == GameMessageIn.ChatTypes.ChatMessage)
            {
                if (String.CompareOrdinal(fromServer.CharacterName, settings.MasterName) == 0)
                {
                    switch (fromServer.Message.Trim().ToLower())
                    {
                    case "#exit":
                        Say("Bye");
                        FireOnShutdownEvent();
                        LeaveGame();
                        return;
                    }
                }
            }
        }
Exemplo n.º 18
0
        /// <summary>
        /// Handles packets sent from the game server
        /// </summary>
        /// <param name="packet">The packet.</param>
        public void OnPacket(GameServerPacket packet)
        {
            switch (packet.Id)
            {
            case GameServerInPacketType.GameMessage:
                OnGameMessage(packet);
                break;

            case GameServerInPacketType.InformationMessage:
                OnInformationMessage(packet);
                break;

            case GameServerInPacketType.WorldItemAction:
                OnWorldItemAction(packet);
                break;

            case GameServerInPacketType.PlayerInGame:
                OnPlayerInGame(packet);
                break;

            case GameServerInPacketType.LoadAct:
                OnLoadAct(packet);
                break;

            case GameServerInPacketType.AssignPlayer:
                OnAssignPlayer(packet);
                break;

            case GameServerInPacketType.PlayerMove:
                OnPlayerMove(packet);
                break;

            case GameServerInPacketType.PlayerReassign:
                OnPlayerReassign(packet);
                break;

            default:
                break;
            }
        }
Exemplo n.º 19
0
        /// <summary>
        /// Gets the next decompressed packet from byte array. Processed data will be removed from
        /// input array.
        /// </summary>
        /// <exception cref="ApplicationException">Thrown when encountering an unhandled packet with no size.</exception>
        /// <param name="decompressedData">[in,out] Byte array containing decompressed data.</param>
        /// <returns>The next decompressed packet.</returns>
        private GameServerPacket GetNextDecompressedPacket(ref byte[] decompressedData)
        {
            GameServerPacket packet    = new GameServerPacket();
            int decompressedPacketSize = Compression.GetDecompressedPacketSize(decompressedData);

            if (decompressedPacketSize == 0xFF)
            {
                Fail(FailureArgs.FailureTypes.UnknownPacketSize, String.Format("Unhandled special packet {0:X2}", decompressedData[0]));
                throw new ApplicationException("Bad packet data encountered (No size)");
            }

            packet.Id   = (GameServerInPacketType)decompressedData[0];
            packet.Data = new byte[decompressedPacketSize - 1];

            if (packet.Data.Length > 0)
            {
                Array.Copy(decompressedData, 1, packet.Data, 0, packet.Data.Length);
            }

            Util.RemoveBeginningBytes(ref decompressedData, decompressedPacketSize);

            return(packet);
        }
Exemplo n.º 20
0
        public UpdateItemUIIn(GameServerPacket packet)
        {
            BinaryReader br = new BinaryReader(new MemoryStream(packet.Data));

            Id = (IdTypes)br.ReadByte();
        }
Exemplo n.º 21
0
        private void OnAssignPlayer(GameServerPacket packet)
        {
            AssignPlayerIn fromServer = new AssignPlayerIn(packet);

            if (fromServer.X == 0 && fromServer.Y == 0 && String.Compare(fromServer.Name, characterName, StringComparison.OrdinalIgnoreCase) == 0)
            {
                // This bot
                clientPlayerId = fromServer.ID;
            }
            else
            {
                // Other players
            }
        }
Exemplo n.º 22
0
        /// <summary>
        /// Handles WorldItemAction (0x9c) packets. Keeps track of items in player's main inventory.
        /// </summary>
        /// <param name="packet">The packet.</param>
        private void OnWorldItemAction(GameServerPacket packet)
        {
            WorldItemEventIn fromServer;

            try
            {
                fromServer = new WorldItemEventIn(packet);
            }
            catch (Exception)
            {
                LogError("Failed to parse item: " + Util.GetPacketDump(packet.Data, true));
            }

            //StringBuilder sb = new StringBuilder();
            //
            //sb.AppendLine("Item: " + fromServer.item);
            //foreach (var item in fromServer.item.Properties)
            //{
            //	sb.AppendLine("  " + item);
            //}
            //sb.AppendLine("  " );
            //LogDebug(sb);

            //if (fromServer.item.Location == Item.ItemLocation.Stored && fromServer.item.StorageId == Item.StorageType.Inventory)
            //{
            //	items.Add(fromServer.item);
            //}
        }
Exemplo n.º 23
0
        /// <summary>
        /// Gets the next decompressed packet from byte array. Processed data will be removed from
        /// input array.
        /// </summary>
        /// <exception cref="ApplicationException">Thrown when encountering an unhandled packet with no size.</exception>
        /// <param name="decompressedData">[in,out] Byte array containing decompressed data.</param>
        /// <returns>The next decompressed packet.</returns>
        private GameServerPacket GetNextDecompressedPacket(ref byte[] decompressedData)
        {
            GameServerPacket packet = new GameServerPacket();
            int decompressedPacketSize = Compression.GetDecompressedPacketSize(decompressedData);

            if (decompressedPacketSize == 0xFF)
            {
                Fail(FailureArgs.FailureTypes.UnknownPacketSize, String.Format("Unhandled special packet {0:X2}", decompressedData[0]));
                throw new ApplicationException("Bad packet data encountered (No size)");
            }

            packet.Id = (GameServerInPacketType)decompressedData[0];
            packet.Data = new byte[decompressedPacketSize - 1];

            if (packet.Data.Length > 0)
            {
                Array.Copy(decompressedData, 1, packet.Data, 0, packet.Data.Length);
            }

            Util.RemoveBeginningBytes(ref decompressedData, decompressedPacketSize);

            return packet;
        }
Exemplo n.º 24
0
 public AssignPlayerIn(GameServerPacket packet)
 {
     BinaryReader br = new BinaryReader(new MemoryStream(packet.Data));
     ID = br.ReadUInt32();
     Class = br.ReadByte();
     Name = Util.ReadSpecialString(br);
     br.ReadBytes(15 - Name.Length);
     X = br.ReadUInt16();
     Y = br.ReadUInt16();
 }
Exemplo n.º 25
0
 private void OnPlayerMove(GameServerPacket packet)
 {
     PlayerMoveIn fromServer = new PlayerMoveIn(packet);
 }
Exemplo n.º 26
0
 public PlayerReassignIn(GameServerPacket packet)
 {
     BinaryReader br = new BinaryReader(new MemoryStream(packet.Data));
     EntityType = br.ReadByte();
     ID = br.ReadUInt32();
     X = br.ReadUInt16();
     Y = br.ReadUInt16();
     UnknownFlag = br.ReadByte();
 }
Exemplo n.º 27
0
        public InformationMessageIn(GameServerPacket packet)
        {
            BinaryReader br = new BinaryReader(new MemoryStream(packet.Data));
            Event = (InformationEvents)br.ReadByte();
            Action = br.ReadByte();
            EntityID = br.ReadUInt32();
            EntityType = br.ReadByte();

            First = Util.ReadAndUnpadString(br, 16);
            Second = Util.ReadAndUnpadString(br, 16);
        }
Exemplo n.º 28
0
        /// <summary>
        /// Game server has completed our request to join the game. We request to enter the
        /// game along with starting the ping thread.
        /// </summary>
        /// <param name="packet">The packet.</param>
        private void OnGameLogonSuccess(GameServerPacket packet)
        {
            SendPacket(new EnterGameOut());

            // Ping thread used to keep our connection to the server alive
            pingThread = new Thread(() =>
            {
                LogServer("Ping thread started");
                while (client.Connected)
                {
                    Thread.Sleep(7000);
                    SendPing();
                }
                LogServer("Ping thread ended");
            });

            pingThread.Name = "PING:" + characterName;
            pingThread.IsBackground = true;

            pingThread.Start();

            AntiIdleCounter = 0;
            AntiIdleTimer = new Timer(
                n =>
                {
                    SayOverhead(characterName + " Anti-Idle " + (AntiIdleCounter++));
                },
                null,
                0,
                300000
            );

            IsInGame = true;
            FireOnEnterGameEvent();
        }
Exemplo n.º 29
0
        private void OnLoadAct(GameServerPacket packet)
        {
            LoadActIn fromServer = new LoadActIn(packet);

            CurrentAct = fromServer.Act + 1;

            Log("Entering act " + CurrentAct);
        }
Exemplo n.º 30
0
        /// <summary>
        /// Handles inviting all players already in a game
        /// </summary>
        /// <param name="packet">The packet.</param>
        private void OnPlayerInGame(GameServerPacket packet)
        {
            PlayerInGameIn fromServer = new PlayerInGameIn(packet);

            if (fromServer.IsPlayerInParty)
            {
                return;
            }

            if (String.Compare(characterName, fromServer.PlayerName, System.StringComparison.OrdinalIgnoreCase) != 0)
            {
                // invite player...
                Log(string.Format("Inviting player: {0}", fromServer.PlayerName));
                SendPacket(new PartyRequestOut(PartyRequestOut.RequestType.Invite, fromServer.PlayerID));
            }
        }
Exemplo n.º 31
0
 public WorldItemEventIn(GameServerPacket packet)
 {
     item = new Item(packet.GetBytes());
 }
Exemplo n.º 32
0
 public PlayerInGameIn(GameServerPacket packet)
 {
     BinaryReader br = new BinaryReader(new MemoryStream(packet.Data));
     ushort messageLength = br.ReadUInt16();
     PlayerID = br.ReadUInt32();
     PlayerClass = br.ReadByte();
     PlayerName = Util.ReadSpecialString(br);
     br.ReadBytes(15 - PlayerName.Length);
     PlayerLevel = br.ReadUInt16();
     PlayerPartyID = br.ReadUInt16();
 }
Exemplo n.º 33
0
 public WorldItemEventIn(GameServerPacket packet)
 {
     item = new Item(packet.GetBytes());
 }
Exemplo n.º 34
0
 private void OnPlayerMove(GameServerPacket packet)
 {
     PlayerMoveIn fromServer = new PlayerMoveIn(packet);
 }
Exemplo n.º 35
0
 public PlayerMoveIn(GameServerPacket packet)
 {
     BinaryReader br = new BinaryReader(new MemoryStream(packet.Data));
     ID = br.ReadUInt32();
     MovementType = br.ReadByte();
     DestX = br.ReadUInt16();
     DestY = br.ReadUInt16();
     Unknown = br.ReadByte();
     SourceX = br.ReadUInt16();
     SourceY = br.ReadUInt16();
 }
Exemplo n.º 36
0
        /// <summary>
        /// Handles InformationMessageIn packets. Keeps track of total number of players
        /// in game.
        /// </summary>
        /// <param name="packet">The packet.</param>
        private void OnInformationMessage(GameServerPacket packet)
        {
            InformationMessageIn fromServer = new InformationMessageIn(packet);
            Log(fromServer);

            switch (fromServer.Event)
            {
                case InformationMessageIn.InformationEvents.PlayerTimeout:
                case InformationMessageIn.InformationEvents.PlayerDropped:
                case InformationMessageIn.InformationEvents.PlayerQuit:
                    {
                        bool isBot = settings.BotNames.Contains(fromServer.First.ToLower());

                        PlayerNames.Remove(fromServer.First);
                        Log(String.Format("{0}/{1} players remaining", PlayerNames.Count, MaxPlayers));

                        FireOnPlayerCountEvent(new PlayerCountArgs(PlayerNames.Count, MaxPlayers, fromServer.First, false, isBot));

                        break;
                    }
                case InformationMessageIn.InformationEvents.PlayerJoined:
                    {
                        bool isBot = settings.BotNames.Contains(fromServer.First.ToLower());

                        PlayerNames.Add(fromServer.First);
                        Log(String.Format("{0}/{1} players total", PlayerNames.Count, MaxPlayers));

                        FireOnPlayerCountEvent(new PlayerCountArgs(PlayerNames.Count, MaxPlayers, fromServer.First, true, isBot));
                    }
                    break;
                case InformationMessageIn.InformationEvents.PlayerRelation:
                    // Accept any party requests
                    if (fromServer.Action == 0x02 && fromServer.EntityType == 0x05)
                    {
                        SendPacket(new PartyRequestOut(PartyRequestOut.RequestType.Accept, fromServer.EntityID));
                    }
                    break;
                default:
                    break;
            }
        }
Exemplo n.º 37
0
 public LoadActIn(GameServerPacket packet)
 {
     BinaryReader br = new BinaryReader(new MemoryStream(packet.Data));
     Act = br.ReadByte();
     Seed1 = br.ReadUInt32();
     AreaId = br.ReadUInt16();
     Seed2 = br.ReadUInt32();
 }
Exemplo n.º 38
0
        /// <summary>
        /// Handles chat messages from other players and objects in game
        /// </summary>
        /// <param name="packet">The packet.</param>
        private void OnGameMessage(GameServerPacket packet)
        {
            GameMessageIn fromServer = new GameMessageIn(packet);
            Log(fromServer);

            if (fromServer.ChatType == GameMessageIn.ChatTypes.ChatMessage)
            {
                if (String.CompareOrdinal(fromServer.CharacterName, settings.MasterName) == 0)
                {
                    switch (fromServer.Message.Trim().ToLower())
                    {
                        case "#exit":
                            Say("Bye");
                            FireOnShutdownEvent();
                            LeaveGame();
                            return;
                    }
                }
            }
        }
Exemplo n.º 39
0
 public UpdateItemUIIn(GameServerPacket packet)
 {
     BinaryReader br = new BinaryReader(new MemoryStream(packet.Data));
     Id = (IdTypes)br.ReadByte();
 }
Exemplo n.º 40
0
 /// <summary>
 /// Handles the GameLogonReceipt packet. Should contain some game information, but
 /// we queried the game before joining. Just wait for the GameLogonSuccess packet.
 /// </summary>
 /// <param name="packet">The packet.</param>
 private void OnGameLogonReceipt(GameServerPacket packet)
 {
 }
Exemplo n.º 41
0
 /// <summary>
 /// Handles the GameLogonReceipt packet. Should contain some game information, but 
 /// we queried the game before joining. Just wait for the GameLogonSuccess packet.
 /// </summary>
 /// <param name="packet">The packet.</param>
 private void OnGameLogonReceipt(GameServerPacket packet)
 {
 }
Exemplo n.º 42
0
        private void OnPlayerReassign(GameServerPacket packet)
        {
            PlayerReassignIn fromServer = new PlayerReassignIn(packet);
            if (fromServer.ID != clientPlayerId)
            {
                Log("Reassign from other client");
                return;
            }

            PositionX = fromServer.X;
            PositionY = fromServer.Y;
            Log(string.Format("Reassigned player to {0}, {1}", PositionX, PositionY));

            if (AlreadyDispersed)
                return;

            AlreadyDispersed = true;

            ushort moveToX = PositionX;
            ushort moveToY = PositionY;

            switch (CurrentAct)
            {
                case 1:
                    moveToY -= 20;
                    break;
                case 2:
                    moveToY += 20;
                    break;
                case 3:
                    moveToX += 20;
                    moveToY += 20;
                    break;
                case 4:
                    moveToX -= 40;
                    moveToY += 20;
                    break;
                case 5:
                    moveToX += 20;
                    break;
            }

            SendPacket(new RunToLocationOut(moveToX, moveToY));
        }
Exemplo n.º 43
0
        /// <summary>
        /// Handles the GameLogonRequestIn packet. This packet is sent to us when we first connect
        /// to the game server. We reply with a logon request and a ping
        /// </summary>
        /// <param name="packet">The packet.</param>
        private void OnRequestLogonInfo(GameServerPacket packet)
        {
            GameLogonRequestOut toServer = new GameLogonRequestOut(
                gameServerArgs.GameHash,
                gameServerArgs.GameToken,
                settings.ClientVersion,
                (byte)gameServerArgs.CharacterClass,
                gameServerArgs.CharacterName
            );

            SendPacket(toServer);
            SendPing();
        }
Exemplo n.º 44
0
        public byte UnknownC; //(0x05 chat, 0x01 recv-wisp)

        #endregion Fields

        #region Constructors

        public GameMessageIn(GameServerPacket packet)
        {
            BinaryReader br = new BinaryReader(new MemoryStream(packet.Data));
            ChatType = (ChatTypes)br.ReadByte();
            UnknownA = br.ReadByte();
            EntityType = br.ReadByte();
            EntityID = br.ReadUInt32();
            UnknownB = br.ReadByte();
            UnknownC = br.ReadByte();
            CharacterName = Util.ReadSpecialString(br);
            Message = Util.ReadSpecialString(br); ;
        }