Ejemplo n.º 1
0
        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());
        }
Ejemplo n.º 2
0
        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());
        }