i think pro4never has done most of it
unknow1 = mission state
2 = avilable
0 = accepted
1 = done.
PHP Code:
using System.Collections.Generic;
using Albetros.Core.Enum;
namespace Albetros.Game.Packet
{
public struct QuestData
{
public const int SIZE = 12;
public uint MissionId;
public uint Unknown1;
public uint Unknown2;
}
public unsafe struct QuestPacket
{
public QuestAction Action;
public ushort Amount;
private List<QuestData> _data;
public QuestData GetData(int index)
{
return _data[index];
}
public void AddData(uint missionId, uint unknown1, uint unknown2)
{
_data.Add(new QuestData { MissionId = missionId, Unknown1 = unknown1, Unknown2 = unknown2 });
Amount++;
}
public static implicit operator QuestPacket(byte* ptr)
{
var packet = new QuestPacket();
packet.Action = *((QuestAction*) (ptr + 4));
packet.Amount = *((ushort*) (ptr + 6));
packet._data = new List<QuestData>();
for (var i = 0; i < packet.Amount; i++)
{
var data = new QuestData();
data.MissionId = *((uint*) (ptr + 8 + i * QuestData.SIZE));
data.Unknown1 = *((uint*) (ptr + 12 + i * QuestData.SIZE));
data.Unknown2 = *((uint*) (ptr + 16 + i * QuestData.SIZE));
packet._data.Add(data);
}
return packet;
}
public static implicit operator byte[](QuestPacket packet)
{
var buffer = new byte[8 + packet.Amount * QuestData.SIZE + 8];
fixed (byte* ptr = buffer)
{
PacketBuilder.AppendHeader(ptr, buffer.Length, 1134);
*((QuestAction*) (ptr + 4)) = packet.Action;
*((ushort*) (ptr + 6)) = packet.Amount;
for (var i = 0; i < packet.Amount; i++)
{
var data = packet.GetData(i);
*((uint*) (ptr + 8 + i * QuestData.SIZE)) = data.MissionId;
*((uint*) (ptr + 12 + i * QuestData.SIZE)) = data.Unknown1;
*((uint*) (ptr + 16 + i * QuestData.SIZE)) = data.Unknown2;
}
}
return buffer;
}
}
}
2 = avilable
0 = accepted
1 = done.