Esempio n. 1
0
        public void HandleChat(PacketIn packet)
        {
            try
            {

                string channel = null;
                UInt64 guid = 0;
                GameGuid fguid = null, fguid2 = null;
                string username = null;

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

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

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

                if (Type == 47)
                    return;
                fguid2 = new GameGuid(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 (netLogicCore.ObjectMgr.objectExists(fguid))
                        //username = netLogicCore.ObjectMgr.GetObject(fguid).Name;
                }

                if (username == null)
                {

                    ChatQueue que = new ChatQueue();
                    que.GUID = fguid;
                    que.Type = Type;
                    que.Language = Language;
                    if ((ChatMsg)Type == ChatMsg.CHAT_MSG_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 };
                netInstance.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);
            }
        }
        public void Handle_NameQuery(PacketIn packet)
        {
            byte mask = packet.ReadByte();
            GameGuid guid = new GameGuid(mask, packet.ReadBytes(GameGuid.BitCount8(mask)));

            packet.ReadByte();
            string name = packet.ReadString();
            packet.ReadByte();

            //Races Race = (Races)packet.ReadByte();
            //Gender Gender = (Gender)packet.ReadByte();
            //Classes Class = (Classes)packet.ReadByte();

              /*  if (netLogicCore.ObjectMgr.GetObject(guid) != null)    // Update existing Object
            {
                obj = netLogicCore.ObjectMgr.GetObject(guid);
                obj.Name = name;

               // netLogicCore.ObjectMgr.updateObject(obj);
            }*/
             /*    else                // Create new Object        -- FIXME: Add to new 'names only' list?
             {
                 obj = new MMOObject(guid);
                 obj.Name = name;
                 netLogicCore.ObjectMgr.newObject(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 == guid)
                     {
                         Log.WriteLine(netLogic.Shared.LogType.Chat, "[{1}] {0}", message.Message, name);
                         ChatQueued.Remove(message);
                     }
                 }

             }*/
        }
Esempio n. 3
0
        public void AuthChallangeRequest(PacketIn packetIn)
        {
            packetIn.ReadByte();
            byte error = packetIn.ReadByte();
            if (error != 0x00)
            {
                Log.WriteLine(LogType.Error, "Authentication error: {0}", (AccountStatus)error);
                Disconnect();
                return;
            }

            B = new BigInteger(packetIn.ReadBytes(32));               // Varies
            byte glen = packetIn.ReadByte();                          // Length = 1
            g = packetIn.ReadBytes(glen);                             // g = 7
            byte Nlen = packetIn.ReadByte();                          // Length = 32
            N = packetIn.ReadBytes(Nlen);                             // N = B79B3E2A87823CAB8F5EBFBF8EB10108535006298B5BADBD5B53E1895E644B89
            Salt = new BigInteger(packetIn.ReadBytes(32));            // Salt = 3516482AC96291B3C84B4FC204E65B623EFC2563C8B4E42AA454D93FCD1B56BA
            crcsalt = packetIn.ReadBytes(16);                         // Varies

            BigInteger S;
            srp = new Srp6(new BigInteger(N), new BigInteger(g));

            do
            {
                a = BigInteger.Random(19 * 8);
                A = srp.GetA(a);

                I = Srp6.GetLogonHash(mUsername, mPassword);

                BigInteger x = Srp6.Getx(Salt, I);
                BigInteger u = Srp6.Getu(A, B);
                S = srp.ClientGetS(a, B, x, u);
            }
            while (S < 0);

            mKey = Srp6.ShaInterleave(S);
            M = srp.GetM(mUsername, Salt, A, B, new BigInteger(mKey));

            packetIn.ReadByte();

            Sha1Hash sha;
            byte[] files_crc;

            // Generate CRC/hashes of the Game Files
            if (Config.Retail)
                files_crc = GenerateCrc(crcsalt);
            else
                files_crc = new byte[20];

            // get crc_hash from files_crc
            sha = new Sha1Hash();
            sha.Update(A);
            sha.Update(files_crc);
            byte[] crc_hash = sha.Final();

            PacketOut packet = new PacketOut(LogonServerOpCode.AUTH_LOGON_PROOF);
            packet.Write(A); // 32 bytes
            packet.Write(M); // 20 bytes
            packet.Write(crc_hash); // 20 bytes
            packet.Write((byte)0); // number of keys
            packet.Write((byte)0); // unk (1.11.x)
            Send(packet);
        }
        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 (MMOObject obj in netLogicCore.ObjectMgr.WorldObjects)
            {
                if (obj.Fields != null)
                {
                    if (obj.Fields[(int)UpdateFieldsLoader.GetUpdateField(ObjectTypes.TYPEID_UNIT,"OBJECT_FIELD_ENTRY").Value] == entry.entry)
                    {
                        obj.Name = entry.name;
                        obj.Rank = entry.rank;
                        obj.Family = entry.family;
                        obj.SubType = entry.subtype;
                        //netLogicCore.ObjectMgr.updateObject(obj);
                    }
                }
            }*/
        }