bool GetPacketSize(List<byte> input, out Int32 output)
{
byte identifier = input[0];
Int32 size = input.Count;
switch(identifier)
{
case 0x26:
if (GetChatPacketSize(input,out output))
return true;
break;
case 0x5b:
if(size >= 3)
{
output = BitConverter.ToInt16(input.ToArray(), 1);
return true;
}
break;
case 0x94:
if(size >= 2)
{
output = input[1] * 3 + 6;
return true;
}
break;
case 0xa8:
case 0xaa:
if(size >= 7)
{
output = (byte)input[6];
return true;
}
break;
case 0xac:
if(size >= 13)
{
output = (byte)input[12];
return true;
}
break;
case 0xae:
if(size >= 3)
{
output = 3 + BitConverter.ToInt16(input.ToArray(), 1);
return true;
}
break;
case 0x9c:
if(size >= 3)
{
output = input[2];
return true;
}
break;
case 0x9d:
if(size >= 3)
{
output = input[2];
return true;
}
break;
default:
if(identifier < packetSizes.Length)
{
output = packetSizes[identifier];
return output != 0;
}
break;
}
output = 0;
return false;
}