All pastes #749259 Raw Edit

Anonymous

public text v1 · immutable
#749259 ·published 2007-10-25 15:42 UTC
rendered paste body
using System;
using System.Collections.Generic;
using System.Text;

namespace L2_Test
{
    class L2_functions
    {
        public static byte[] key = new byte[16];
        public static int decode = 0;
        public static uint id = 0;
        public static uint cur_hp = 0;
        public static uint max_hp = 0;
        
        public static void ProcessPacket(byte[] rawdata)
        {
            
            int sizeGamePacket = BitConverter.ToInt16(rawdata, 0);

           if (sizeGamePacket == 0x04 && rawdata[2] == 0x00 && decode == 0
               && rawdata.Length >= 8)
            {

                key[0] = rawdata[8];
                key[1] = rawdata[9];
                key[2] = rawdata[10];
                key[3] = rawdata[11];
                key[4] = rawdata[12];
                key[5] = rawdata[13];
                key[6] = rawdata[14];
                key[7] = rawdata[15];
                key[8] = 0xC8; // INTERLUDE
                key[9] = 0x27; // INTERLUDE
                key[10] = 0x93; // INTERLUDE
                key[11] = 0x01; // INTERLUDE
                key[12] = 0xA1; // INTERLUDE
                key[13] = 0x6C; // INTERLUDE
                key[14] = 0x31; // INTERLUDE
                key[15] = 0x97; // INTERLUDE */

                /*
                /* Or this ?!?!
                key[0] = rawdata[4];
                key[1] = rawdata[5];
                key[2] = rawdata[6];
                key[3] = rawdata[7];
                key[4] = 0xA1;
                key[5] = 0x6C;
                key[6] = 0x54;
                key[7] = 0x87;
                key[8] = 0xC8; // INTERLUDE
                key[9] = 0x27; // INTERLUDE
                key[10] = 0x93; // INTERLUDE
                key[11] = 0x01; // INTERLUDE
                key[12] = 0xA1; // INTERLUDE
                key[13] = 0x6C; // INTERLUDE
                key[14] = 0x31; // INTERLUDE
                key[15] = 0x97; // INTERLUDE */
                
                decode = 1;
                return;
            }
            if (sizeGamePacket < 2)
            {
                return;
            }
            
            byte[] gamepacket = new byte[rawdata.Length - 2];
            int length = rawdata.Length -2;
            Array.Copy(rawdata, 2, gamepacket, 0, length);

            Decode(ref gamepacket, gamepacket.Length);
            ProcessGameData(gamepacket);
        }

        public static void Decode(ref byte[] rawdata, int size)
        {
           if (decode == 0)
             return;

            int temp = 0;
            for (int k = 0; k < size; k++)
            {
                int i1 = rawdata[k] & 0xFF;
                rawdata[k] = (byte)(i1 ^ key[k & 8] & 0xFF ^ temp);
                temp = i1;
            }

            long old = key[8] &0xff;
            old |= key[9] << 8 &0xff00;
            old |= key[10] << 0x10 &0xff0000;
            old |= key[11] << 0x18 &0xff000000;

            old += size;

            key[8] = (byte)(old &0xff);
            key[9] = (byte)(old >> 0x08 &0xff);
            key[10] = (byte)(old >> 0x10 &0xff);
            key[11] = (byte)(old >> 0x18 &0xff);
        }

        public static void ProcessGameData(byte[] buffer)
        {
            
            uint temp = 0;
            uint temp2 = 0;

            switch(buffer[0] & 0xFF)
            {
                case 0x0E:
                    id = BitConverter.ToUInt32(buffer, 1);
                    temp = BitConverter.ToUInt32(buffer, 5);

                    Console.WriteLine("You're only here! #1");
                    for(int i=0; i<temp && buffer.Length>=temp ; ++i)
                    {
                        temp2 = BitConverter.ToUInt32(buffer, 9 + (i * 8));
                        if (temp2 == 0x09) // current_hp (CUR_CP = 0x21)
                        {
                            cur_hp = BitConverter.ToUInt32(buffer, 13 + (i * 8));
                        }
                        if (temp2 == 0x0a) // max_hp (MAX_CP = 0x22)
                        {
                            max_hp = BitConverter.ToUInt32(buffer, 13 + (i * 8));
                        }
                    }

                    Console.WriteLine("ID: " + id + ", HP: " + cur_hp + ", MAX_HP: " + max_hp);

                    break;
            
            }
        }

    }
}