mirror of
				https://bitbucket.org/Ioncannon/project-meteor-server.git
				synced 2025-05-20 08:26:59 -04:00 
			
		
		
		
	Fixed battle npcs appearing strangely (no nameplate, wrong colour, etc), and implemented content groups!
This commit is contained in:
		| @@ -0,0 +1,51 @@ | ||||
| using FFXIVClassic.Common; | ||||
| 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.group | ||||
| { | ||||
|     class ContentMembersX08Packet | ||||
|     { | ||||
|         public const ushort OPCODE = 0x0183; | ||||
|         public const uint PACKET_SIZE = 0x1B8; | ||||
|  | ||||
|         public static SubPacket buildPacket(uint playerActorID, uint locationCode, ulong sequenceId, List<GroupMember> entries, ref int offset) | ||||
|         { | ||||
|             byte[] data = new byte[PACKET_SIZE - 0x20]; | ||||
|  | ||||
|             using (MemoryStream mem = new MemoryStream(data)) | ||||
|             { | ||||
|                 using (BinaryWriter binWriter = new BinaryWriter(mem)) | ||||
|                 { | ||||
|                     //Write List Header | ||||
|                     binWriter.Write((UInt64)locationCode); | ||||
|                     binWriter.Write((UInt64)sequenceId); | ||||
|                     //Write Entries | ||||
|                     int max = 8; | ||||
|                     if (entries.Count-offset < 8) | ||||
|                         max = entries.Count - offset; | ||||
|                     for (int i = 0; i < max; i++) | ||||
|                     { | ||||
|                         binWriter.Seek(0x10 + (0xC * i), SeekOrigin.Begin); | ||||
|  | ||||
|                         GroupMember entry = entries[i]; | ||||
|                         binWriter.Write((UInt32)entry.actorId); | ||||
|                         binWriter.Write((UInt32)1001); //Layout ID | ||||
|                         binWriter.Write((UInt32)1); //? | ||||
|  | ||||
|                         offset++; | ||||
|                     } | ||||
|                     //Write Count | ||||
|                     binWriter.Seek(0x10 + (0xC * 8), SeekOrigin.Begin); | ||||
|                     binWriter.Write(max); | ||||
|                 } | ||||
|             } | ||||
|  | ||||
|             return new SubPacket(OPCODE, playerActorID, playerActorID, data); | ||||
|         } | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,48 @@ | ||||
| using FFXIVClassic.Common; | ||||
| 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.group | ||||
| { | ||||
|     class ContentMembersX16Packet | ||||
|     { | ||||
|         public const ushort OPCODE = 0x0184; | ||||
|         public const uint PACKET_SIZE = 0xF0; | ||||
|  | ||||
|         public static SubPacket buildPacket(uint playerActorID, uint locationCode, ulong sequenceId, List<GroupMember> entries, ref int offset) | ||||
|         { | ||||
|             byte[] data = new byte[PACKET_SIZE - 0x20]; | ||||
|  | ||||
|             using (MemoryStream mem = new MemoryStream(data)) | ||||
|             { | ||||
|                 using (BinaryWriter binWriter = new BinaryWriter(mem)) | ||||
|                 { | ||||
|                     //Write List Header | ||||
|                     binWriter.Write((UInt64)locationCode); | ||||
|                     binWriter.Write((UInt64)sequenceId); | ||||
|                     //Write Entries | ||||
|                     int max = 16; | ||||
|                     if (entries.Count-offset < 16) | ||||
|                         max = entries.Count - offset; | ||||
|                     for (int i = 0; i < max; i++) | ||||
|                     { | ||||
|                         binWriter.Seek(0x10 + (0xC * i), SeekOrigin.Begin); | ||||
|  | ||||
|                         GroupMember entry = entries[i]; | ||||
|                         binWriter.Write((UInt32)entry.actorId); | ||||
|                         binWriter.Write((UInt32)1001); | ||||
|                         binWriter.Write((UInt32)1); | ||||
|  | ||||
|                         offset++; | ||||
|                     }                     | ||||
|                 } | ||||
|             } | ||||
|  | ||||
|             return new SubPacket(OPCODE, playerActorID, playerActorID, data); | ||||
|         } | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,48 @@ | ||||
| using FFXIVClassic.Common; | ||||
| 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.group | ||||
| { | ||||
|     class ContentMembersX32Packet | ||||
|     { | ||||
|         public const ushort OPCODE = 0x0185; | ||||
|         public const uint PACKET_SIZE = 0x1B0; | ||||
|  | ||||
|         public static SubPacket buildPacket(uint playerActorID, uint locationCode, ulong sequenceId, List<GroupMember> entries, ref int offset) | ||||
|         { | ||||
|             byte[] data = new byte[PACKET_SIZE - 0x20]; | ||||
|  | ||||
|             using (MemoryStream mem = new MemoryStream(data)) | ||||
|             { | ||||
|                 using (BinaryWriter binWriter = new BinaryWriter(mem)) | ||||
|                 { | ||||
|                     //Write List Header | ||||
|                     binWriter.Write((UInt64)locationCode); | ||||
|                     binWriter.Write((UInt64)sequenceId); | ||||
|                     //Write Entries | ||||
|                     int max = 32; | ||||
|                     if (entries.Count-offset < 32) | ||||
|                         max = entries.Count - offset; | ||||
|                     for (int i = 0; i < max; i++) | ||||
|                     { | ||||
|                         binWriter.Seek(0x10 + (0xC * i), SeekOrigin.Begin); | ||||
|  | ||||
|                         GroupMember entry = entries[i]; | ||||
|                         binWriter.Write((UInt32)entry.actorId); | ||||
|                         binWriter.Write((UInt32)1001); | ||||
|                         binWriter.Write((UInt32)1); | ||||
|  | ||||
|                         offset++; | ||||
|                     }                     | ||||
|                 } | ||||
|             } | ||||
|  | ||||
|             return new SubPacket(OPCODE, playerActorID, playerActorID, data); | ||||
|         } | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,48 @@ | ||||
| using FFXIVClassic.Common; | ||||
| 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.group | ||||
| { | ||||
|     class ContentMembersX64Packet | ||||
|     { | ||||
|         public const ushort OPCODE = 0x0186; | ||||
|         public const uint PACKET_SIZE = 0x330; | ||||
|  | ||||
|         public static SubPacket buildPacket(uint playerActorID, uint locationCode, ulong sequenceId, List<GroupMember> entries, ref int offset) | ||||
|         { | ||||
|             byte[] data = new byte[PACKET_SIZE - 0x20]; | ||||
|  | ||||
|             using (MemoryStream mem = new MemoryStream(data)) | ||||
|             { | ||||
|                 using (BinaryWriter binWriter = new BinaryWriter(mem)) | ||||
|                 { | ||||
|                     //Write List Header | ||||
|                     binWriter.Write((UInt64)locationCode); | ||||
|                     binWriter.Write((UInt64)sequenceId); | ||||
|                     //Write Entries | ||||
|                     int max = 64; | ||||
|                     if (entries.Count - offset < 64) | ||||
|                         max = entries.Count - offset; | ||||
|                     for (int i = 0; i < max; i++) | ||||
|                     { | ||||
|                         binWriter.Seek(0x10 + (0xC * i), SeekOrigin.Begin); | ||||
|  | ||||
|                         GroupMember entry = entries[i]; | ||||
|                         binWriter.Write((UInt32)entry.actorId); | ||||
|                         binWriter.Write((UInt32)1001); | ||||
|                         binWriter.Write((UInt32)1); | ||||
|  | ||||
|                         offset++; | ||||
|                     }                    | ||||
|                 } | ||||
|             } | ||||
|  | ||||
|             return new SubPacket(OPCODE, playerActorID, playerActorID, data); | ||||
|         } | ||||
|     } | ||||
| } | ||||
| @@ -18,7 +18,7 @@ namespace FFXIVClassic_Map_Server.packets.send.group | ||||
|             this.unknown2 = unknown2; | ||||
|             this.flag1 = flag1; | ||||
|             this.isOnline = isOnline; | ||||
|             this.name = name; | ||||
|             this.name = name == null ? "" : name; | ||||
|         } | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -38,6 +38,7 @@ namespace FFXIVClassic_Map_Server.packets.send.group | ||||
|                         binWriter.Write((UInt32)entry.unknown2); | ||||
|                         binWriter.Write((Byte)(entry.flag1? 1 : 0)); | ||||
|                         binWriter.Write((Byte)(entry.isOnline? 1 : 0)); | ||||
|  | ||||
|                         binWriter.Write(Encoding.ASCII.GetBytes(entry.name), 0, Encoding.ASCII.GetByteCount(entry.name) >= 0x20 ? 0x20 : Encoding.ASCII.GetByteCount(entry.name)); | ||||
|  | ||||
|                         offset++; | ||||
|   | ||||
| @@ -108,7 +108,7 @@ namespace FFXIVClassic_Map_Server.packets.send.groups | ||||
|             string[] split = name.Split('.'); | ||||
|             int arrayIndex = 0; | ||||
|  | ||||
|             if (!(split[0].Equals("work") || split[0].Equals("partyGroupWork"))) | ||||
|             if (!(split[0].Equals("work") || split[0].Equals("partyGroupWork") || split[0].Equals("contentGroupWork"))) | ||||
|                 return; | ||||
|  | ||||
|             Object curObj = group; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user