Пример #1
0
 public static void Login(Client client, PacketIn packet)
 {
     string user = packet.ReadString();
     string pass = packet.ReadString();
     ServerConsole.WriteLine("Login request from {0} on ip {1}.", MessageLevel.Message, user, client.IP.ToString());
     client.UserLogin(user, pass);
 }
        public void Handle_CreatureQuery(PacketIn packet)
        {
            Entry entry = new Entry();

            entry.entry   = packet.ReadUInt32();
            entry.name    = packet.ReadString();
            entry.blarg   = packet.ReadBytes(3);
            entry.subname = packet.ReadString();
            entry.flags   = packet.ReadUInt32();
            entry.subtype = packet.ReadUInt32();
            entry.family  = packet.ReadUInt32();
            entry.rank    = packet.ReadUInt32();

            foreach (Object obj in objectMgr.getObjectArray())
            {
                if (obj.Fields != null)
                {
                    if (obj.Fields[(int)UpdateFields.OBJECT_FIELD_ENTRY] == entry.entry)
                    {
                        obj.Name = entry.name;
                        objectMgr.updateObject(obj);
                    }
                }
            }
        }
Пример #3
0
 public ChatMessage(PacketIn p)
 {
     szName    = p.ReadString(21);
     nSize     = p.ReadInt16();
     nType     = (byte)p.ReadByte();
     szMessage = p.ReadString(nSize);
 }
Пример #4
0
        public static void Login(Client client, PacketIn packet)
        {
            string user = packet.ReadString();
            string pass = packet.ReadString();

            ServerConsole.WriteLine("Login request from {0} on ip {1}.", user, client.IP.ToString());
            client.UserLogin(user, pass);
        }
Пример #5
0
        public static void CreateCharacter(Client client, PacketIn packet)
        {
            string name         = packet.ReadString();
            byte   type         = packet.ReadByte();
            byte   strength     = packet.ReadByte();
            byte   health       = packet.ReadByte();
            byte   intelligence = packet.ReadByte();
            byte   wisdom       = packet.ReadByte();
            byte   agility      = packet.ReadByte();
            byte   face         = packet.ReadByte();
            byte   hair         = packet.ReadByte();

            if ((strength + health + intelligence + wisdom + agility) != 5)
            {
                ServerConsole.WriteLine(System.Drawing.Color.Red,
                                        "Invalid character creation request from {0}.",
                                        client.User.Username
                                        );
                return;
            }

            int playerId = client.CreateCharacter(name, type, strength, health, intelligence, wisdom, agility, face, hair);

            client.SendPlayerList();
        }
        public void Handle_NameQuery(PacketIn packet)
        {
            WoWGuid guid = new WoWGuid(packet.ReadUInt64());
            string  name = packet.ReadString();

            packet.ReadByte();
            Race      Race   = (Race)packet.ReadUInt32();
            Gender    Gender = (Gender)packet.ReadUInt32();
            Classname Class  = (Classname)packet.ReadUInt32();


            if (objectMgr.objectExists(guid))        // Update existing Object
            {
                Object obj = objectMgr.getObject(guid);
                obj.Name = name;
                objectMgr.updateObject(obj);
            }
            else                    // Create new Object        -- FIXME: Add to new 'names only' list?
            {
                Object obj = new Object(guid);
                obj.Name = name;
                objectMgr.addObject(obj);

                /* Process chat message if we looked them up now */
                for (int i = 0; i < ChatQueued.Count; i++)
                {
                    ChatQueue message = (ChatQueue)ChatQueued[i];
                    if (message.GUID.GetOldGuid() == guid.GetOldGuid())
                    {
                        Log.WriteLine(LogType.Chat, "[{1}] {0}", message.Message, name);
                        ChatQueued.Remove(message);
                    }
                }
            }
        }
Пример #7
0
 public CList(PacketIn packet)
 {
     packet.Seek(4, System.IO.SeekOrigin.Current);
     nRace = packet.ReadInt32();
     packet.Seek(161, System.IO.SeekOrigin.Current);
     szName = packet.ReadString(19);
     packet.Seek(376, System.IO.SeekOrigin.Current);
 }
Пример #8
0
 public SERVER_LIST(PacketIn p)
 {
     last_login_idx = p.ReadUInt16();
     count          = p.ReadUInt16();
     list           = new SERVER_INFO[count];
     for (int i = 0; i < count; i++)
     {
         list[i] = new SERVER_INFO(p.ReadUInt16(), p.ReadString(21), p.ReadByte() == 1 ? true : false, p.ReadString(256), p.ReadString(16), p.ReadInt32(), p.ReadUInt16());
     }
 }
Пример #9
0
        public void HandleRealmlist(PacketIn packetIn)
        {
            //packetIn.ReadByte();
            UInt16 Length      = packetIn.ReadUInt16();
            UInt32 Request     = packetIn.ReadUInt32();
            int    realmscount = packetIn.ReadInt16();

            //Console.Write(packetIn.ToHex());

            Log.WriteLine(LogType.Success, "Got information about {0} realms.", realmscount);
            Realm[] realms = new Realm[realmscount];
            try
            {
                for (int i = 0; i < realmscount; i++)
                {
                    realms[i].Type  = packetIn.ReadByte();
                    realms[i].Color = packetIn.ReadByte();
                    packetIn.ReadByte(); // unk
                    realms[i].Name       = packetIn.ReadString();
                    realms[i].Address    = packetIn.ReadString();
                    realms[i].Population = packetIn.ReadFloat();
                    realms[i].NumChars   = packetIn.ReadByte();
                    realms[i].Language   = packetIn.ReadByte();
                    packetIn.ReadByte();
                }

                Realmlist = realms;
                mCore.Event(new Event(EventType.EVENT_REALMLIST, "", new object[] { Realmlist }));
            }
            catch (Exception ex)
            {
                Log.WriteLine(LogType.Error, "Exception Occured");
                Log.WriteLine(LogType.Error, "Message: {0}", ex.Message);
                Log.WriteLine(LogType.Error, "Stacktrace: {0}", ex.StackTrace);
                Disconnect();
            }
        }
Пример #10
0
        public static void CreatePlayer(Client client, PacketIn packet)
        {
            string name         = packet.ReadString();
            byte   type         = packet.ReadByte();
            byte   strength     = packet.ReadByte();
            byte   health       = packet.ReadByte();
            byte   intelligence = packet.ReadByte();
            byte   wisdom       = packet.ReadByte();
            byte   agility      = packet.ReadByte();
            byte   face         = packet.ReadByte();
            byte   hair         = packet.ReadByte();

            if ((strength + health + intelligence + wisdom + agility) != 5)
            {
                client.Send(new Packets.CharacterCreationError(Packets.CHARACTER_CREATION_ERROR.SHARING_POINTS_ERROR));
                Hackshield.AddOffense(client, OffenseSeverity.IncorrectPacketDetails);
                return;
            }

            //check if name is valid
            if (!Utilities.IsAlnum(name))
            {
                client.Send(new Packets.CharacterError(Packets.CHARACTER_ERROR.INVALID_CHARS));
                return;
            }

            //check if player name is taken
            if (Player.GetPlayer(name) != null)
            {
                client.Send(new Packets.CharacterCreationError(Packets.CHARACTER_CREATION_ERROR.NAME_TAKEN));
                return;
            }

            int playerId = client.CreatePlayer(name, type, strength, health, intelligence, wisdom, agility, face, hair);

            client.SendPlayerList();
        }
Пример #11
0
        public void HandleCharEnum(PacketIn packet)
        {
            byte count = packet.ReadByte();

            Character[] characterList = new Character[count];
            for (int i = 0; i < count; i++)
            {
                characterList[i].GUID  = packet.ReadUInt64();
                characterList[i].Name  = packet.ReadString();
                characterList[i].Race  = packet.ReadByte();
                characterList[i].Class = packet.ReadByte();
                packet.ReadByte();
                packet.ReadUInt32();
                packet.ReadByte();
                packet.ReadByte();
                packet.ReadUInt32();
                characterList[i].MapID = packet.ReadUInt32();
                packet.ReadFloat();
                packet.ReadFloat();
                packet.ReadFloat();
                packet.ReadUInt32();
                packet.ReadUInt32();
                packet.ReadByte();

                packet.ReadUInt32();
                packet.ReadUInt32();
                packet.ReadUInt32();
                packet.ReadBytes(9 * 20);
            }

            Log.WriteLine(LogType.Success, "Received info about {0} characters", count);

            Charlist = characterList;
            mCore.Event(new Event(EventType.EVENT_CHARLIST, "", new object[] { Charlist }));
            PingLoop();
        }
Пример #12
0
        public static void CreatePlayer(Client client, PacketIn packet)
        {
            string name       = packet.ReadString();
            byte type         = packet.ReadByte();
            byte strength     = packet.ReadByte();
            byte health       = packet.ReadByte();
            byte intelligence = packet.ReadByte();
            byte wisdom       = packet.ReadByte();
            byte agility      = packet.ReadByte();
            byte face         = packet.ReadByte();
            byte hair         = packet.ReadByte();

            if((strength + health + intelligence + wisdom + agility) != 5)
            {
                client.Send(new Packets.CharacterCreationError(Packets.CHARACTER_CREATION_ERROR.SHARING_POINTS_ERROR));
                Hackshield.AddOffense(client, OffenseSeverity.IncorrectPacketDetails);
                return;
            }

            //check if name is valid
            if (!Utilities.IsAlnum(name))
            {
                client.Send(new Packets.CharacterError(Packets.CHARACTER_ERROR.INVALID_CHARS));
                return;
            }

            //check if player name is taken
            if (Player.GetPlayer(name) != null)
            {
                client.Send(new Packets.CharacterCreationError(Packets.CHARACTER_CREATION_ERROR.NAME_TAKEN));
                return;
            }

            int playerId = client.CreatePlayer(name, type, strength, health, intelligence, wisdom, agility, face, hair);
            client.SendPlayerList();
        }
Пример #13
0
 public static void PlayerChat(Client Client, PacketIn packet)
 {
     string message = packet.ReadString();
     ChatManager.Chat(Client.Character, message);
 }
Пример #14
0
 public static void PlayerChat(Client client, PacketIn packet)
 {
     string message = packet.ReadString();
     client.Send(new Packets.Chat(client.Character.Player.Name,message));
 }
Пример #15
0
        /// <summary>
        /// The function which is used to proceed an incoming packet to the active TCPConnection
        /// </summary>
        /// <param name="con">The connection which received the packet</param>
        /// <param name="buf">byte[] array containing the raw content of the received packet</param>
        /// <param name="start">Start of the content in buf, usually 0</param>
        /// <param name="size">Size of the packet (minus start)</param>
        /// <returns>PacketIn -> Converted raw package to MemoryStream based PacketIn</returns>
        public PacketIn ProcessPacket(TCPConnection con, byte[] buf, int start, int size)
        {
            PacketIn packet = new PacketIn(buf, start, size);

            switch (packet.ID)
            {
            case 0:     // ResultMsg
                var res = new AUTH_PACKETS.RESULT(packet.ReadUInt16(), packet.ReadUInt16(), packet.ReadInt32());
                if (res.nRequestPacket == 2005)
                {
                    if (res.nResult == 0)
                    {
                        con.SendTCP(CreateReportPacket());
                        con.SendTCP(CreateCharacterListPacket());
                    }
                    else
                    {
                        con.Disconnect();
                        XLog.Log("Can't connect to game server. Result: {0} - disconnecting...", res.nResult);
                    }
                }
                break;

            case 2004:     // CharacterList
                m_iGameCharacterList = new GAME_PACKETS.CharacterList(packet);
                XLog.Log("Character selection. Please use /use ID to select a character.");
                for (int i = 0; i < m_iGameCharacterList.nCount; i++)
                {
                    XLog.Log("-> Character {0}: {1}", i + 1, m_iGameCharacterList.nList[i].szName);
                }
                break;

            case 21:     // ChatLocal
                var    tmp      = packet.ReadInt32();
                string szSource = m_dHandles.ContainsKey(tmp) ? m_dHandles[tmp] : "INVALID-HANDLE:" + tmp;
                int    nLen     = packet.ReadByte();
                int    nType    = packet.ReadByte();
                XLog.AddMessage(szSource, packet.ReadString(nLen), nType);
                break;

            case 22:     // ChatMsg
                var pMessage = new GAME_PACKETS.ChatMessage(packet);
                XLog.AddMessage(pMessage.szName, pMessage.szMessage, pMessage.nType);
                break;

            case 3:     // Enter: Handle -> Name, small hack so we don't have to read the full packet (which is f*****g large)
                if (packet.ReadByte() == 0)
                {
                    int key = packet.ReadInt32();
                    if (m_dHandles.ContainsKey(key))
                    {
                        m_dHandles.Remove(key);
                    }
                    packet.Seek(77, System.IO.SeekOrigin.Current);
                    string value = packet.ReadString(19);
                    m_dHandles.Add(key, value);
                }
                break;

            case 507:     // Property: Own Name -> Handle
                if (m_dHandles.ContainsKey(0) && m_tPingThread == null)
                {
                    var szName = m_dHandles[0];
                    m_dHandles.Remove(0);
                    m_dHandles.Add(packet.ReadInt32(), szName);
                    m_tPingThread = new System.Threading.Thread(new System.Threading.ThreadStart(SendPingPacket));
                    m_tPingThread.IsBackground = true;
                    m_tPingThread.Start();
                }
                break;

            default:
                break;
            }
            return(packet);
        }
Пример #16
0
        public static void PlayerChat(Client client, PacketIn packet)
        {
            string message = packet.ReadString();

            client.Send(new Packets.Chat(client.Character.Player.Name, message));
        }
Пример #17
0
        public static void PlayerChat(Client Client, PacketIn packet)
        {
            string message = packet.ReadString();

            ChatManager.Chat(Client.Character, message);
        }
Пример #18
0
        public void HandleChat(PacketIn packet)
        {
            try
            {
                string  channel = null;
                UInt64  guid = 0;
                WoWGuid fguid = null, fguid2 = null;
                string  username = null;

                byte   Type     = packet.ReadByte();
                UInt32 Language = packet.ReadUInt32();

                guid  = packet.ReadUInt64();
                fguid = new WoWGuid(guid);
                packet.ReadInt32();

                if ((ChatMsg)Type == ChatMsg.Channel)
                {
                    channel = packet.ReadString();
                }

                if (Type == 47)
                {
                    return;
                }
                fguid2 = new WoWGuid(packet.ReadUInt64());

                UInt32 Length  = packet.ReadUInt32();
                string Message = Encoding.Default.GetString(packet.ReadBytes((int)Length));

                //Message = Regex.Replace(Message, @"\|H[a-zA-z0-9:].|h", ""); // Why do i should need spells and quest linked? ;>
                Message = Regex.Replace(Message, @"\|[rc]{1}[a-zA-z0-9]{0,8}", ""); // Colorfull chat message also isn't the most important thing.

                byte afk = 0;

                if (fguid.GetOldGuid() == 0)
                {
                    username = "******";
                }
                else
                {
                    if (objectMgr.objectExists(fguid))
                    {
                        username = objectMgr.getObject(fguid).Name;
                    }
                }

                if (username == null)
                {
                    ChatQueue que = new ChatQueue();
                    que.GUID     = fguid;
                    que.Type     = Type;
                    que.Language = Language;
                    if ((ChatMsg)Type == ChatMsg.Channel)
                    {
                        que.Channel = channel;
                    }
                    que.Length  = Length;
                    que.Message = Message;
                    que.AFK     = afk;
                    ChatQueued.Add(que);
                    QueryName(guid);
                    return;
                }

                object[] param = new object[] { (ChatMsg)Type, channel, username, Message };
                mCore.Event(new Event(EventType.EVENT_CHAT_MSG, "0", param));
                //Log.WriteLine(LogType.Chat, "[{1}] {0}", Message, username);
            }
            catch (Exception ex)
            {
                Log.WriteLine(LogType.Error, "Exception Occured");
                Log.WriteLine(LogType.Error, "Message: {0}", ex.Message);
                Log.WriteLine(LogType.Error, "Stacktrace: {0}", ex.StackTrace);
            }
        }