diff --git a/FFXIVClassic Map Server/FFXIVClassic Map Server.csproj b/FFXIVClassic Map Server/FFXIVClassic Map Server.csproj index 9b27b474..393f317c 100644 --- a/FFXIVClassic Map Server/FFXIVClassic Map Server.csproj +++ b/FFXIVClassic Map Server/FFXIVClassic Map Server.csproj @@ -93,10 +93,8 @@ - - - - + + @@ -145,6 +143,9 @@ + + + diff --git a/FFXIVClassic Map Server/PacketProcessor.cs b/FFXIVClassic Map Server/PacketProcessor.cs index 423b3b74..de1346bf 100644 --- a/FFXIVClassic Map Server/PacketProcessor.cs +++ b/FFXIVClassic Map Server/PacketProcessor.cs @@ -22,6 +22,8 @@ using FFXIVClassic_Map_Server.packets.send.script; using FFXIVClassic_Map_Server.packets.send.player; using FFXIVClassic_Map_Server.dataobjects.chara; using FFXIVClassic_Map_Server.packets.send.supportdesk; +using FFXIVClassic_Map_Server.packets.receive.social; +using FFXIVClassic_Map_Server.packets.send.social; namespace FFXIVClassic_Lobby_Server { @@ -336,6 +338,26 @@ namespace FFXIVClassic_Lobby_Server case 0x012F: subpacket.debugPrintSubPacket(); break; + /* SOCIAL STUFF */ + case 0x01C9: + AddRemoveSocialPacket addBlackList = new AddRemoveSocialPacket(subpacket.data); + client.queuePacket(BasePacket.createPacket(BlacklistAddedPacket.buildPacket(player.actorID, true, addBlackList.name), true, false)); + break; + case 0x01CA: + AddRemoveSocialPacket removeBlackList = new AddRemoveSocialPacket(subpacket.data); + client.queuePacket(BasePacket.createPacket(BlacklistRemovedPacket.buildPacket(player.actorID, true, removeBlackList.name), true, false)); + break; + case 0x01CC: + AddRemoveSocialPacket addFriendList = new AddRemoveSocialPacket(subpacket.data); + client.queuePacket(BasePacket.createPacket(FriendlistAddedPacket.buildPacket(player.actorID, true, (uint)10, true, addFriendList.name), true, false)); + break; + case 0x01CD: + AddRemoveSocialPacket removeFriendList = new AddRemoveSocialPacket(subpacket.data); + client.queuePacket(BasePacket.createPacket(FriendlistRemovedPacket.buildPacket(player.actorID, true, removeFriendList.name), true, false)); + break; + case 0x01CF: + client.queuePacket(BasePacket.createPacket(FriendStatusPacket.buildPacket(player.actorID, null), true, false)); + break; /* SUPPORT DESK STUFF */ //Request for FAQ/Info List case 0x01D0: diff --git a/FFXIVClassic Map Server/Program.cs b/FFXIVClassic Map Server/Program.cs index 9d9742db..1d407f11 100644 --- a/FFXIVClassic Map Server/Program.cs +++ b/FFXIVClassic Map Server/Program.cs @@ -83,7 +83,7 @@ namespace FFXIVClassic_Lobby_Server } catch (Exception e) { - Log.error("Could not load packet"); + Log.error("Could not load packet: " + e); } } else if (split[0].Equals("property")) diff --git a/FFXIVClassic Map Server/packets/receive/social/FriendlistRequestPacket.cs b/FFXIVClassic Map Server/packets/receive/social/FriendlistRequestPacket.cs new file mode 100644 index 00000000..39fbda78 --- /dev/null +++ b/FFXIVClassic Map Server/packets/receive/social/FriendlistRequestPacket.cs @@ -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.social +{ + class FriendlistRequestPacket + { + public bool invalidPacket = false; + public uint num1; + public uint num2; + + public FriendlistRequestPacket(byte[] data) + { + using (MemoryStream mem = new MemoryStream(data)) + { + using (BinaryReader binReader = new BinaryReader(mem)) + { + try{ + num1 = binReader.ReadUInt32(); + num2 = binReader.ReadUInt32(); + } + catch (Exception){ + invalidPacket = true; + } + } + } + } + } +} diff --git a/FFXIVClassic Map Server/packets/send/social/FriendStatusPacket.cs b/FFXIVClassic Map Server/packets/send/social/FriendStatusPacket.cs index 816ddce5..0a7b48f0 100644 --- a/FFXIVClassic Map Server/packets/send/social/FriendStatusPacket.cs +++ b/FFXIVClassic Map Server/packets/send/social/FriendStatusPacket.cs @@ -24,10 +24,15 @@ namespace FFXIVClassic_Map_Server.packets.send.social binWriter.Write((UInt32)0); int max; - if (friendStatus.Length <= 200) - max = friendStatus.Length; + if (friendStatus != null) + { + if (friendStatus.Length <= 200) + max = friendStatus.Length; + else + max = 200; + } else - max = 200; + max = 0; binWriter.Write((UInt32)max);