Code:
WriteByte(byte value); WriteUInt32(uint value); //....
Code:
public unsafe class ConquerPacket
{
public ConquerPacket(int Length)
{
if (Length > Kernel.MaxPacketSize)
throw new Exception("Invalid Packet Length.");
m_packet = new byte[Length];
}
public int Length { get { return m_packet.Length; } }
private byte* m_ptr
{
get
{
fixed (byte* ptr = m_packet)
return ptr;
}
}
private byte[] m_packet;
private int m_offset;
/// <summary>
/// Writing a value to the packet.
/// </summary>
/// <param name="Value">The value to write.</param>
/// <param name="DataType">The type of the value.</param>
/// <param name="StringLength">The length of the string, should be 0, if it's not a string.</param>
public void Write(object Value, Enums.DataTypes DataType, int StringLength)
{
switch (DataType)
{
#region Byte
case Enums.DataTypes.Byte:
{
*((byte*)(m_ptr + m_offset)) = (byte)Value;
m_offset++;
break;
}
#endregion
#region Byte
case Enums.DataTypes.Bytes:
{
byte[] value = (byte[])Value;
foreach (byte b in value)
Write(b, Enums.DataTypes.Byte, 0);
break;
}
#endregion
#region UInt16
case Enums.DataTypes.UInt16:
{
*((ushort*)(m_ptr + m_offset)) = (ushort)Value;
m_offset += 2;
break;
}
#endregion
#region UInt32
case Enums.DataTypes.UInt32:
{
*((uint*)(m_ptr + m_offset)) = (uint)Value;
m_offset += 4;
break;
}
#endregion
#region UInt64
case Enums.DataTypes.UInt64:
{
*((uint*)(m_ptr + m_offset)) = (uint)Value;
m_offset += 8;
break;
}
#endregion
#region String
case Enums.DataTypes.String:
{
string value = Value.ToString();
if (value.Length > Length)
{
for (int i = 0; i < Length; i++)
{
*((byte*)(m_ptr + m_offset)) = Convert.ToByte(value[i]);
m_offset++;
}
}
else
{
for (int i = 0; i < value.Length; i++)
{
*((byte*)(m_ptr + m_offset)) = Convert.ToByte(value[i]);
m_offset++;
}
}
break;
}
#endregion
}
}
public void Move(int AddOffset)
{
m_offset += AddOffset;
}
public static implicit operator byte[](ConquerPacket Packet)
{
return Packet.m_packet;
}
}
Code:
ConquerPacket Packet = new ConquerPacket(32);
Packet.Write(Packet.Length, Enums.DataTypes.UInt16, 0);
Packet.Write(0x41f, Enums.DataTypes.UInt16, 0);
Packet.Write(packet.IV, Enums.DataTypes.Bytes, 0);
Packet.Write(Kernel.ServerIP, Enums.DataTypes.String, 0);
Packet.Move(16 - Kernel.ServerIP.Length);
Packet.Write(Kernel.GamePort, Enums.DataTypes.UInt16, 0);






