rendered paste bodyusing 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;
}
}
}
}