Added receiving packets for GM stuff. Started implementing the recruitment packets.

This commit is contained in:
Filip Maj 2015-12-06 20:23:34 -05:00
parent de353c9909
commit 4eda13501c
11 changed files with 396 additions and 9 deletions

View file

@ -0,0 +1,49 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace FFXIVClassic_Map_Server.packets.receive.recruitment
{
class RecruitmentSearchRequestPacket
{
public bool invalidPacket = false;
public uint purposeId;
public uint locationId;
public uint discipleId;
public uint classjobId;
public byte unknown1;
public byte unknown2;
public string text;
public RecruitmentSearchRequestPacket(byte[] data)
{
using (MemoryStream mem = new MemoryStream(data))
{
using (BinaryReader binReader = new BinaryReader(mem))
{
try{
purposeId = binReader.ReadUInt32();
locationId = binReader.ReadUInt32();
discipleId = binReader.ReadUInt32();
classjobId = binReader.ReadUInt32();
unknown1 = binReader.ReadByte();
unknown2 = binReader.ReadByte();
text = Encoding.ASCII.GetString(binReader.ReadBytes(0x20));
}
catch (Exception){
invalidPacket = true;
}
}
}
}
}
}

View file

@ -0,0 +1,56 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace FFXIVClassic_Map_Server.packets.receive.recruitment
{
class StartRecruitingRequestPacket
{
public bool invalidPacket = false;
public uint purposeId;
public uint locationId;
public uint subTaskId;
public uint[] discipleId = new uint[4];
public uint[] classjobId = new uint[4];
public byte[] minLvl = new byte[4];
public byte[] maxLvl = new byte[4];
public byte[] num = new byte[4];
public string comment;
public StartRecruitingRequestPacket(byte[] data)
{
using (MemoryStream mem = new MemoryStream(data))
{
using (BinaryReader binReader = new BinaryReader(mem))
{
try{
purposeId = binReader.ReadUInt32();
locationId = binReader.ReadUInt32();
subTaskId = binReader.ReadUInt32();
for (int i = 0; i < 4; i++)
{
discipleId[i] = binReader.ReadUInt32();
classjobId[i] = binReader.ReadUInt32();
minLvl[i] = binReader.ReadByte();
maxLvl[i] = binReader.ReadByte();
num[i] = binReader.ReadByte();
binReader.ReadByte();
}
comment = Encoding.ASCII.GetString(binReader.ReadBytes(0x168));
}
catch (Exception){
invalidPacket = true;
}
}
}
}
}
}

View file

@ -0,0 +1,34 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace FFXIVClassic_Map_Server.packets.receive.supportdesk
{
class FaqBodyRequestPacket
{
public bool invalidPacket = false;
public uint faqIndex;
public uint langCode;
public FaqBodyRequestPacket(byte[] data)
{
using (MemoryStream mem = new MemoryStream(data))
{
using (BinaryReader binReader = new BinaryReader(mem))
{
try
{
faqIndex = binReader.ReadUInt32();
langCode = binReader.ReadUInt32();
}
catch (Exception){
invalidPacket = true;
}
}
}
}
}
}

View file

@ -0,0 +1,33 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace FFXIVClassic_Map_Server.packets.receive.supportdesk
{
class FaqListRequestPacket
{
public bool invalidPacket = false;
public uint langCode;
public uint unknown;
public FaqListRequestPacket(byte[] data)
{
using (MemoryStream mem = new MemoryStream(data))
{
using (BinaryReader binReader = new BinaryReader(mem))
{
try{
langCode = binReader.ReadUInt32();
unknown = binReader.ReadUInt32();
}
catch (Exception){
invalidPacket = true;
}
}
}
}
}
}

View file

@ -0,0 +1,31 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace FFXIVClassic_Map_Server.packets.receive.supportdesk
{
class GMTicketIssuesRequestPacket
{
public bool invalidPacket = false;
public uint langCode;
public GMTicketIssuesRequestPacket(byte[] data)
{
using (MemoryStream mem = new MemoryStream(data))
{
using (BinaryReader binReader = new BinaryReader(mem))
{
try{
langCode = binReader.ReadUInt32();
}
catch (Exception){
invalidPacket = true;
}
}
}
}
}
}

View file

@ -0,0 +1,56 @@
using FFXIVClassic_Lobby_Server.packets;
using FFXIVClassic_Map_Server.dataobjects;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace FFXIVClassic_Map_Server.packets.send.recruitment
{
class CurrentRecruitmentDetailsPacket
{
public const ushort OPCODE = 0x01C8;
public const uint PACKET_SIZE = 0x218;
public static SubPacket buildPacket(uint playerActorID, RecruitmentDetails details)
{
byte[] data = new byte[PACKET_SIZE - 0x20];
using (MemoryStream mem = new MemoryStream(data))
{
using (BinaryWriter binWriter = new BinaryWriter(mem))
{
if (details == null)
{
return new SubPacket(OPCODE, playerActorID, playerActorID, data);
}
binWriter.Write((UInt32)details.purposeId);
binWriter.Write((UInt32)details.locationId);
binWriter.Write((UInt32)details.subTaskId);
binWriter.Write((UInt32)details.timeSinceStart);
for (int i = 0; i < 4; i++)
{
binWriter.Write((UInt32)details.discipleId[i]);
binWriter.Write((UInt32)details.classjobId[i]);
binWriter.Write((byte)details.minLvl[i]);
binWriter.Write((byte)details.maxLvl[i]);
binWriter.Write((byte)details.num[i]);
binWriter.Write((byte)0);
}
binWriter.Write(Encoding.ASCII.GetBytes(details.comment), 0, Encoding.ASCII.GetByteCount(details.comment) >= 0x168 ? 0x168 : Encoding.ASCII.GetByteCount(details.comment));
binWriter.Seek(0x1C0, SeekOrigin.Begin);
binWriter.Write(Encoding.ASCII.GetBytes(details.recruiterName), 0, Encoding.ASCII.GetByteCount(details.recruiterName) >= 0x20 ? 0x20 : Encoding.ASCII.GetByteCount(details.recruiterName));
binWriter.Seek(0x1E0, SeekOrigin.Begin);
binWriter.Write((byte)1);
}
}
return new SubPacket(OPCODE, playerActorID, playerActorID, data);
}
}
}

View file

@ -0,0 +1,24 @@
using FFXIVClassic_Lobby_Server.packets;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace FFXIVClassic_Map_Server.packets.send.recruitment
{
class StartRecruitingResponse
{
public const ushort OPCODE = 0x01C3;
public const uint PACKET_SIZE = 0x28;
public static SubPacket buildPacket(uint playerActorID, bool success)
{
byte[] data = new byte[PACKET_SIZE - 0x20];
data[0] = (byte)(success ? 0x1 : 0x0);
return new SubPacket(OPCODE, playerActorID, playerActorID, data);
}
}
}