mirror of
				https://bitbucket.org/Ioncannon/project-meteor-server.git
				synced 2025-05-20 08:26:59 -04:00 
			
		
		
		
	Added receiving packets for GM stuff. Started implementing the recruitment packets.
This commit is contained in:
		| @@ -86,9 +86,13 @@ | |||||||
|     <Compile Include="dataobjects\Item.cs" /> |     <Compile Include="dataobjects\Item.cs" /> | ||||||
|     <Compile Include="dataobjects\ConnectedPlayer.cs" /> |     <Compile Include="dataobjects\ConnectedPlayer.cs" /> | ||||||
|     <Compile Include="dataobjects\database\DBWorld.cs" /> |     <Compile Include="dataobjects\database\DBWorld.cs" /> | ||||||
|  |     <Compile Include="dataobjects\RecruitmentDetails.cs" /> | ||||||
|  |     <Compile Include="dataobjects\SearchEntry.cs" /> | ||||||
|     <Compile Include="PacketProcessor.cs" /> |     <Compile Include="PacketProcessor.cs" /> | ||||||
|     <Compile Include="packets\BasePacket.cs" /> |     <Compile Include="packets\BasePacket.cs" /> | ||||||
|     <Compile Include="packets\receive\HandshakePacket.cs" /> |     <Compile Include="packets\receive\HandshakePacket.cs" /> | ||||||
|  |     <Compile Include="packets\receive\recruitment\RecruitmentSearchRequestPacket.cs" /> | ||||||
|  |     <Compile Include="packets\receive\recruitment\StartRecruitingRequestPacket.cs" /> | ||||||
|     <Compile Include="packets\receive\script\CommandStartRequestPacket.cs" /> |     <Compile Include="packets\receive\script\CommandStartRequestPacket.cs" /> | ||||||
|     <Compile Include="packets\receive\script\ScriptResultPacket.cs" /> |     <Compile Include="packets\receive\script\ScriptResultPacket.cs" /> | ||||||
|     <Compile Include="packets\receive\SetTargetPacket.cs" /> |     <Compile Include="packets\receive\SetTargetPacket.cs" /> | ||||||
| @@ -96,6 +100,9 @@ | |||||||
|     <Compile Include="packets\receive\social\AddRemoveSocialPacket.cs" /> |     <Compile Include="packets\receive\social\AddRemoveSocialPacket.cs" /> | ||||||
|     <Compile Include="packets\receive\social\FriendlistRequestPacket.cs" /> |     <Compile Include="packets\receive\social\FriendlistRequestPacket.cs" /> | ||||||
|     <Compile Include="packets\receive\StartScriptPacket.cs" /> |     <Compile Include="packets\receive\StartScriptPacket.cs" /> | ||||||
|  |     <Compile Include="packets\receive\supportdesk\FaqBodyRequestPacket.cs" /> | ||||||
|  |     <Compile Include="packets\receive\supportdesk\FaqListRequestPacket.cs" /> | ||||||
|  |     <Compile Include="packets\receive\supportdesk\GMTicketIssuesRequestPacket.cs" /> | ||||||
|     <Compile Include="packets\send\actor\ActorDoEmotePacket.cs" /> |     <Compile Include="packets\send\actor\ActorDoEmotePacket.cs" /> | ||||||
|     <Compile Include="packets\send\actor\DeleteAllActorsPacket.cs" /> |     <Compile Include="packets\send\actor\DeleteAllActorsPacket.cs" /> | ||||||
|     <Compile Include="packets\send\actor\DoBattleActionPacket.cs" /> |     <Compile Include="packets\send\actor\DoBattleActionPacket.cs" /> | ||||||
| @@ -133,6 +140,8 @@ | |||||||
|     <Compile Include="packets\send\player\SetPlayerTitlePacket.cs" /> |     <Compile Include="packets\send\player\SetPlayerTitlePacket.cs" /> | ||||||
|     <Compile Include="packets\send\PongPacket.cs" /> |     <Compile Include="packets\send\PongPacket.cs" /> | ||||||
|     <Compile Include="packets\send\QuitPacket.cs" /> |     <Compile Include="packets\send\QuitPacket.cs" /> | ||||||
|  |     <Compile Include="packets\send\recruitment\CurrentRecruitmentDetailsPacket.cs" /> | ||||||
|  |     <Compile Include="packets\send\recruitment\StartRecruitingResponse.cs" /> | ||||||
|     <Compile Include="packets\send\script\ScriptEndPacket.cs" /> |     <Compile Include="packets\send\script\ScriptEndPacket.cs" /> | ||||||
|     <Compile Include="packets\send\script\ScriptStartPacket.cs" /> |     <Compile Include="packets\send\script\ScriptStartPacket.cs" /> | ||||||
|     <Compile Include="packets\send\SendMessagePacket.cs" /> |     <Compile Include="packets\send\SendMessagePacket.cs" /> | ||||||
|   | |||||||
| @@ -24,6 +24,9 @@ using FFXIVClassic_Map_Server.dataobjects.chara; | |||||||
| using FFXIVClassic_Map_Server.packets.send.supportdesk; | using FFXIVClassic_Map_Server.packets.send.supportdesk; | ||||||
| using FFXIVClassic_Map_Server.packets.receive.social; | using FFXIVClassic_Map_Server.packets.receive.social; | ||||||
| using FFXIVClassic_Map_Server.packets.send.social; | using FFXIVClassic_Map_Server.packets.send.social; | ||||||
|  | using FFXIVClassic_Map_Server.packets.receive.supportdesk; | ||||||
|  | using FFXIVClassic_Map_Server.packets.receive.recruitment; | ||||||
|  | using FFXIVClassic_Map_Server.packets.send.recruitment; | ||||||
|  |  | ||||||
| namespace FFXIVClassic_Lobby_Server | namespace FFXIVClassic_Lobby_Server | ||||||
| { | { | ||||||
| @@ -338,6 +341,35 @@ namespace FFXIVClassic_Lobby_Server | |||||||
|                         case 0x012F: |                         case 0x012F: | ||||||
|                             subpacket.debugPrintSubPacket(); |                             subpacket.debugPrintSubPacket(); | ||||||
|                             break; |                             break; | ||||||
|  |                         /* RECRUITMENT */      | ||||||
|  |                         //Start Recruiting | ||||||
|  |                         case 0x01C3: | ||||||
|  |                             StartRecruitingRequestPacket recruitRequestPacket = new StartRecruitingRequestPacket(subpacket.data); | ||||||
|  |                             client.queuePacket(BasePacket.createPacket(StartRecruitingResponse.buildPacket(player.actorID, true), true, false));     | ||||||
|  |                             break; | ||||||
|  |                         case 0x01C7: | ||||||
|  |                             subpacket.debugPrintSubPacket(); | ||||||
|  |                             RecruitmentSearchRequestPacket recruitSearchPacket = new RecruitmentSearchRequestPacket(subpacket.data);                             | ||||||
|  |                             break; | ||||||
|  |                         //Current Recruitment Details | ||||||
|  |                         case 0x01C8: | ||||||
|  |                             subpacket.debugPrintSubPacket(); | ||||||
|  |                             //CurrentRecruitmentDetailsPacket currentRecruitDetailsPacket = new CurrentRecruitmentDetailsPacket(subpacket.data); | ||||||
|  |                             RecruitmentDetails details = new RecruitmentDetails(); | ||||||
|  |                             details.recruiterName = "Localhost Character"; | ||||||
|  |                             details.purposeId = 2; | ||||||
|  |                             details.locationId = 1; | ||||||
|  |                             details.subTaskId = 1; | ||||||
|  |                             details.comment = "This is a test details packet sent by the server. No implementation has been created yet..."; | ||||||
|  |                             details.num[0] = 1; | ||||||
|  |                             client.queuePacket(BasePacket.createPacket(CurrentRecruitmentDetailsPacket.buildPacket(player.actorID, details), true, false));     | ||||||
|  |                             break; | ||||||
|  |                         //Party Window Opened, Request State | ||||||
|  |                         case 0x01C5: | ||||||
|  |                         case 0x01C4:                         | ||||||
|  |                         case 0x01C6: | ||||||
|  |                             subpacket.debugPrintSubPacket(); | ||||||
|  |                             break; | ||||||
|                         /* SOCIAL STUFF */ |                         /* SOCIAL STUFF */ | ||||||
|                         case 0x01C9: |                         case 0x01C9: | ||||||
|                             AddRemoveSocialPacket addBlackList = new AddRemoveSocialPacket(subpacket.data); |                             AddRemoveSocialPacket addBlackList = new AddRemoveSocialPacket(subpacket.data); | ||||||
| @@ -349,7 +381,7 @@ namespace FFXIVClassic_Lobby_Server | |||||||
|                             break; |                             break; | ||||||
|                         case 0x01CC: |                         case 0x01CC: | ||||||
|                             AddRemoveSocialPacket addFriendList = new AddRemoveSocialPacket(subpacket.data); |                             AddRemoveSocialPacket addFriendList = new AddRemoveSocialPacket(subpacket.data); | ||||||
|                             client.queuePacket(BasePacket.createPacket(FriendlistAddedPacket.buildPacket(player.actorID, true, (uint)10, true, addFriendList.name), true, false)); |                             client.queuePacket(BasePacket.createPacket(FriendlistAddedPacket.buildPacket(player.actorID, true, (uint)addFriendList.name.GetHashCode(), true, addFriendList.name), true, false)); | ||||||
|                             break; |                             break; | ||||||
|                         case 0x01CD: |                         case 0x01CD: | ||||||
|                             AddRemoveSocialPacket removeFriendList = new AddRemoveSocialPacket(subpacket.data); |                             AddRemoveSocialPacket removeFriendList = new AddRemoveSocialPacket(subpacket.data); | ||||||
| @@ -361,28 +393,26 @@ namespace FFXIVClassic_Lobby_Server | |||||||
|                         /* SUPPORT DESK STUFF */ |                         /* SUPPORT DESK STUFF */ | ||||||
|                         //Request for FAQ/Info List |                         //Request for FAQ/Info List | ||||||
|                         case 0x01D0: |                         case 0x01D0: | ||||||
|                             subpacket.debugPrintSubPacket(); |                             FaqListRequestPacket faqRequest = new FaqListRequestPacket(subpacket.data); | ||||||
|                             client.queuePacket(BasePacket.createPacket(FaqListResponsePacket.buildPacket(player.actorID, new string[]{"Testing FAQ1", "Coded style!"}), true, false)); |                             client.queuePacket(BasePacket.createPacket(FaqListResponsePacket.buildPacket(player.actorID, new string[]{"Testing FAQ1", "Coded style!"}), true, false)); | ||||||
|                             break; |                             break; | ||||||
|                         //Request for body of a faq/info selection |                         //Request for body of a faq/info selection | ||||||
|                         case 0x01D1: |                         case 0x01D1: | ||||||
|  |                             FaqBodyRequestPacket faqBodyRequest = new FaqBodyRequestPacket(subpacket.data); | ||||||
|                             client.queuePacket(BasePacket.createPacket(FaqBodyResponsePacket.buildPacket(player.actorID, "HERE IS A GIANT BODY. Nothing else to say!"), true, false));                             |                             client.queuePacket(BasePacket.createPacket(FaqBodyResponsePacket.buildPacket(player.actorID, "HERE IS A GIANT BODY. Nothing else to say!"), true, false));                             | ||||||
|                             subpacket.debugPrintSubPacket(); |  | ||||||
|                             break; |                             break; | ||||||
|                         //Request issue list |                         //Request issue list | ||||||
|                         case 0x01D2: |                         case 0x01D2: | ||||||
|  |                             GMTicketIssuesRequestPacket issuesRequest = new GMTicketIssuesRequestPacket(subpacket.data); | ||||||
|                             client.queuePacket(BasePacket.createPacket(IssueListResponsePacket.buildPacket(player.actorID, new string[] { "Test1", "Test2", "Test3", "Test4", "Test5"}), true, false));                             |                             client.queuePacket(BasePacket.createPacket(IssueListResponsePacket.buildPacket(player.actorID, new string[] { "Test1", "Test2", "Test3", "Test4", "Test5"}), true, false));                             | ||||||
|                             subpacket.debugPrintSubPacket(); |  | ||||||
|                             break; |                             break; | ||||||
|                         //Request for GM response message |                         //Request for GM response message | ||||||
|                         case 0x01D4: |                         case 0x01D4: | ||||||
|                             client.queuePacket(BasePacket.createPacket(GMTicketPacket.buildPacket(player.actorID, "This is a GM Ticket Title", "This is a GM Ticket Body."), true, false)); |                             client.queuePacket(BasePacket.createPacket(GMTicketPacket.buildPacket(player.actorID, "This is a GM Ticket Title", "This is a GM Ticket Body."), true, false)); | ||||||
|                             subpacket.debugPrintSubPacket(); |  | ||||||
|                             break; |                             break; | ||||||
|                         //Request to end ticket |                         //Request to end ticket | ||||||
|                         case 0x01D6: |                         case 0x01D6: | ||||||
|                             client.queuePacket(BasePacket.createPacket(EndGMTicketPacket.buildPacket(player.actorID), true, false)); |                             client.queuePacket(BasePacket.createPacket(EndGMTicketPacket.buildPacket(player.actorID), true, false)); | ||||||
|                             subpacket.debugPrintSubPacket(); |  | ||||||
|                             break; |                             break; | ||||||
|                         default: |                         default: | ||||||
|                             Log.debug(String.Format("Unknown command 0x{0:X} received.", subpacket.gameMessage.opcode)); |                             Log.debug(String.Format("Unknown command 0x{0:X} received.", subpacket.gameMessage.opcode)); | ||||||
|   | |||||||
							
								
								
									
										26
									
								
								FFXIVClassic Map Server/dataobjects/RecruitmentDetails.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								FFXIVClassic Map Server/dataobjects/RecruitmentDetails.cs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,26 @@ | |||||||
|  | using System; | ||||||
|  | using System.Collections.Generic; | ||||||
|  | using System.Linq; | ||||||
|  | using System.Text; | ||||||
|  | using System.Threading.Tasks; | ||||||
|  |  | ||||||
|  | namespace FFXIVClassic_Map_Server.dataobjects | ||||||
|  | { | ||||||
|  |     class RecruitmentDetails | ||||||
|  |     { | ||||||
|  |         public string recruiterName; | ||||||
|  |         public string comment; | ||||||
|  |  | ||||||
|  |         public uint purposeId; | ||||||
|  |         public uint locationId; | ||||||
|  |         public uint subTaskId; | ||||||
|  |         public uint timeSinceStart; | ||||||
|  |  | ||||||
|  |         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]; | ||||||
|  |  | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										39
									
								
								FFXIVClassic Map Server/dataobjects/SearchEntry.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								FFXIVClassic Map Server/dataobjects/SearchEntry.cs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,39 @@ | |||||||
|  | using System; | ||||||
|  | using System.Collections.Generic; | ||||||
|  | using System.IO; | ||||||
|  | using System.Linq; | ||||||
|  | using System.Text; | ||||||
|  | using System.Threading.Tasks; | ||||||
|  |  | ||||||
|  | namespace FFXIVClassic_Map_Server.dataobjects | ||||||
|  | { | ||||||
|  |     class SearchEntry | ||||||
|  |     { | ||||||
|  |         public ushort preferredClass; | ||||||
|  |         public ushort langauges; | ||||||
|  |         public ushort location; | ||||||
|  |         public ushort grandCompany; | ||||||
|  |         public ushort status; | ||||||
|  |         public ushort currentClass; | ||||||
|  |         public string name; | ||||||
|  |         public ushort[] classes = new ushort[2 * 20]; | ||||||
|  |         public ushort[] jobs = new ushort[8]; | ||||||
|  |  | ||||||
|  |         public void writeSearchEntry(BinaryWriter writer) | ||||||
|  |         { | ||||||
|  |             writer.Write((UInt16)preferredClass); | ||||||
|  |             writer.Write((UInt16)langauges); | ||||||
|  |             writer.Write((UInt16)location); | ||||||
|  |             writer.Write((UInt16)grandCompany); | ||||||
|  |             writer.Write((UInt16)status); | ||||||
|  |             writer.Write((UInt16)currentClass); | ||||||
|  |  | ||||||
|  |             writer.Write(Encoding.ASCII.GetBytes(name), 0, Encoding.ASCII.GetByteCount(name) >= 0x20 ? 0x20 : Encoding.ASCII.GetByteCount(name)); | ||||||
|  |  | ||||||
|  |             for (int i = 0; i < classes.Length; i++) | ||||||
|  |                 writer.Write((UInt16)classes[i]); | ||||||
|  |             for (int i = 0; i < jobs.Length; i++) | ||||||
|  |                 writer.Write((UInt16)jobs[i]); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
| @@ -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; | ||||||
|  |                     } | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
| @@ -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; | ||||||
|  |                     } | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
| @@ -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; | ||||||
|  |                     } | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
| @@ -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; | ||||||
|  |                     } | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
| @@ -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; | ||||||
|  |                     } | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
| @@ -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); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
| @@ -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); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
		Reference in New Issue
	
	Block a user