private byte[] loadBackgroundInfo(int charID) { MarginCharacter marginCharacter = Store.dbManager.MarginDbHandler.getCharInfo(charID); PacketContent pak = new PacketContent(); if (!isNewCreatedChar) { pak.addByteArray(StringUtils.hexStringToBytes("01000000640000007B0000006500000000000000000000006C000000000000002B010000")); } pak.addStringWithFixedSized(marginCharacter.firstname, 32); pak.addStringWithFixedSized(marginCharacter.lastname, 32); pak.addStringWithFixedSized(marginCharacter.background, 1024); // ToDo: Analyse it and (Rep zion => 82, Rep Machine 2, RepMero 81 //pak.addHexBytes("000000000000000000178604E40008AF2F0175020000A39F714A81FF81FF81FF670067006700000003000301310000B402320000B403380000B4044E0000000200510000001600520000001900540000001300"); pak.addUint32(marginCharacter.exp, 1); pak.addUint32(marginCharacter.cash, 1); pak.addUintShort(0x01); // Flag - always 1 pak.addUint32(200, 1); // CQ Points pak.addByteArray(TimeUtils.getCurrentTime()); //pak.addByteArray(StringUtils.hexStringToBytes("875D714A")); // Last Changed Timestamp - current its static - needs to be dynamic // Rputation Bytes (int16[7]) pak.addInt16(-116, 1); pak.addInt16(-117, 1); pak.addInt16(-20, 1); pak.addInt16(-59, 1); pak.addInt16(-58, 1); pak.addInt16(-57, 1); pak.addInt16(2, 1); pak.addByte(0x03); // 01 = onWorld , 00 = LA . In World you have to take care to not spawn the Character in LA State if (marginCharacter.districtId != 0) { pak.addByte(0x01); } else { pak.addByte(0x00); } pak.addHexBytes("0301310000b402320000b403380000b403510000000400520000000b00540000000100"); // The Last Part #if DEBUG if (isNewCreatedChar == true) { Output.WriteLine("Load Background Reply for Created Char:\n" + pak.returnFinalPacket()); } #endif return(pak.returnFinalPacket()); }
public byte[] encrypt(byte[] plainData, int length, ushort pss, ushort cseq, ushort sseq) { UInt32 seqValue = (uint)pss << 24 | (uint)cseq << 12 | (uint)sseq; byte[] sequences = BitConverter.GetBytes(seqValue); Array.Reverse(sequences); // Create the packet that needs to be CRC32 checksummed PacketContent packet = new PacketContent(); packet.addUint16((UInt16)(plainData.Length + 4), 1); packet.addByteArray(TimeUtils.getCurrentTime()); packet.addByteArray(sequences); packet.addByteArray(plainData); byte[] paddingBytes = getPaddedBytes(packet.returnFinalPacket()); // Final Packet which needs to be encrypted PacketContent packetWithCrc = new PacketContent(); packetWithCrc.addByteArray(crc32.checksumB(packet.returnFinalPacket(), 1)); packetWithCrc.addByteArray(packet.returnFinalPacket()); packetWithCrc.addByteArray(paddingBytes); string hexPackCrcedPlain = StringUtils.bytesToString(packetWithCrc.returnFinalPacket()); string paddingBytesHex = StringUtils.bytesToString(paddingBytes); innerBuffer = new byte[packetWithCrc.returnFinalPacket().Length]; tf.encrypt(packetWithCrc.returnFinalPacket(), innerBuffer); PacketContent encryptedPacket = new PacketContent(); encryptedPacket.addByte(0x01); encryptedPacket.addByteArray(IV); encryptedPacket.addByteArray(innerBuffer); innerBuffer = new byte [2048]; string hexPackEncrypt = StringUtils.bytesToString(encryptedPacket.returnFinalPacket()); return(encryptedPacket.returnFinalPacket()); }