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);