private void MsgHandler_RequestMetafile(Client client, ClientPacket msg) { if (!msg.ReadBoolean()) { string fileName = msg.ReadString(msg.ReadByte()); if (GameServer.MetafileDatabase.ContainsKey(fileName)) { var p = new ServerPacket(0x6F); p.WriteByte(0); p.WriteString8(fileName); p.WriteUInt32(GameServer.MetafileDatabase[fileName].Checksum); p.WriteUInt16((ushort)GameServer.MetafileDatabase[fileName].RawData.Length); p.Write(GameServer.MetafileDatabase[fileName].RawData); client.Enqueue(p); } } else { var p = new ServerPacket(0x6F); p.WriteByte(1); p.WriteUInt16((ushort)GameServer.MetafileDatabase.Count); foreach (var kvp in GameServer.MetafileDatabase) { p.WriteString8(kvp.Value.Name); p.WriteUInt32(kvp.Value.Checksum); } client.Enqueue(p); } }
private void MsgHandler_ServerTable(Client client, ClientPacket msg) { bool mismatch = msg.ReadBoolean(); int serverId = msg.ReadByte(); if (mismatch) { var p = new ServerPacket(0x56); p.WriteUInt16((ushort)Program.RawData.Length); p.Write(Program.RawData); client.Enqueue(p); } else { Redirection r = new Redirection(); r.DestinationServer = Program.GameServers[serverId].LoginServer; r.EncryptionParameters = client.EncryptionParams; r.Name = String.Format(String.Empty, r.ID); r.SourceServer = this; client.Redirect(r); } }