PSO2SERVER/Server/Packets/PSOPackets/QuestDifficultyPacket.cs
2024-09-11 17:13:00 +08:00

92 lines
3.0 KiB
C#

using System;
using System.Runtime.InteropServices;
using PSO2SERVER.Models;
namespace PSO2SERVER.Packets.PSOPackets
{
class QuestDifficultyPacket : Packet
{
private QuestDifficulty[] questdiffs;
public QuestDifficultyPacket(QuestDifficulty[] questdiffs)
{
// Setup dummy difficulty entries
for (int i = 0; i < questdiffs.Length; i++)
{
QuestDifficultyEntry difficulty = new QuestDifficultyEntry
{
unknown1 = 0x0101,
monster1 = 0xFFFFFFFF,
monster2 = 0xFFFFFFFF,
monster3 = 0xFFFFFFFF
};
questdiffs[i].difficulty1 = difficulty;
questdiffs[i].difficulty2 = difficulty;
questdiffs[i].difficulty3 = difficulty;
questdiffs[i].difficulty4 = difficulty;
questdiffs[i].difficulty5 = difficulty;
questdiffs[i].difficulty6 = difficulty;
questdiffs[i].difficulty7 = difficulty;
questdiffs[i].difficulty8 = difficulty;
}
this.questdiffs = questdiffs;
}
public override byte[] Build()
{
PacketWriter writer = new PacketWriter();
writer.WriteMagic((uint)questdiffs.Length, 0x292C, 0x5B);
foreach (QuestDifficulty d in questdiffs)
{
writer.WriteStruct(d);
}
return writer.ToArray();
}
public override PacketHeader GetHeader()
{
return new PacketHeader(0xB, 0x1A, 0x4);
}
//Size: 308 bytes, confirmed in unpacker
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]
public unsafe struct QuestDifficulty
{
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 24)]
public string dateOrSomething;
public int field_24;
public int field_28;
public int something;
public int field_30;
public int something2;
public int questNameString;
public int something3;
public QuestDifficultyEntry difficulty1;
public QuestDifficultyEntry difficulty2;
public QuestDifficultyEntry difficulty3;
public QuestDifficultyEntry difficulty4;
public QuestDifficultyEntry difficulty5;
public QuestDifficultyEntry difficulty6;
public QuestDifficultyEntry difficulty7;
public QuestDifficultyEntry difficulty8;
}
//Size: 32, confirmed in ctor TODO
public struct QuestDifficultyEntry
{
public uint unknown1;
public uint unknown2;
public uint monster1;
public uint monster1flags;
public uint monster2;
public uint monster2flags;
public uint monster3;
public uint monster3flags;
}
}
}