public void ProcessPacket(ClientConnection client, BasePacket packet) { if ((packet.header.packetSize == 0x288) && (packet.data[0x34] == 'T')) //Test Ticket Data { packet.DebugPrintPacket(); //Crypto handshake ProcessStartSession(client, packet); return; } BasePacket.DecryptPacket(client.blowfish, ref packet); packet.DebugPrintPacket(); List <SubPacket> subPackets = packet.GetSubpackets(); foreach (SubPacket subpacket in subPackets) { subpacket.DebugPrintSubPacket(); if (subpacket.header.type == 3) { switch (subpacket.gameMessage.opcode) { case 0x03: ProcessGetCharacters(client, subpacket); break; case 0x04: ProcessSelectCharacter(client, subpacket); break; case 0x05: ProcessSessionAcknowledgement(client, subpacket); break; case 0x0B: ProcessModifyCharacter(client, subpacket); break; case 0x0F: //Mod Retainers default: Program.Log.Debug("Unknown command 0x{0:X} received.", subpacket.gameMessage.opcode); break; } } } }