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); } } }*/ }
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); } } }*/ }