diff --git a/FFXIVClassic Map Server/FFXIVClassic Map Server.csproj b/FFXIVClassic Map Server/FFXIVClassic Map Server.csproj
index b6eaeae1..bdc58e1d 100644
--- a/FFXIVClassic Map Server/FFXIVClassic Map Server.csproj
+++ b/FFXIVClassic Map Server/FFXIVClassic Map Server.csproj
@@ -81,7 +81,11 @@
-
+
+
+
+
+
@@ -91,15 +95,15 @@
-
-
-
+
+
+
-
-
+
+
-
-
+
+
diff --git a/FFXIVClassic Map Server/actors/chara/player/Player.cs b/FFXIVClassic Map Server/actors/chara/player/Player.cs
index e4c14a17..6735ccfa 100644
--- a/FFXIVClassic Map Server/actors/chara/player/Player.cs
+++ b/FFXIVClassic Map Server/actors/chara/player/Player.cs
@@ -486,11 +486,11 @@ namespace FFXIVClassic_Map_Server.Actors
#region Groups
RetainerGroup retainerGroup = new RetainerGroup(0x800000000004e639);
- PartyGroup partyGroup = new PartyGroup(0x8000000000696df2);
+ PartyGroup partyGroup = new PartyGroup(0x8000000000696df2, actorId);
retainerGroup.add(this);
partyGroup.add(this);
retainerGroup.sendMemberPackets(this);
- partyGroup.sendMemberPackets(this);
+ partyGroup.sendMemberPackets(this);
#endregion
#region Inventory & Equipment
diff --git a/FFXIVClassic Map Server/actors/group/Group.cs b/FFXIVClassic Map Server/actors/group/Group.cs
index 9641d7d7..3fb2a774 100644
--- a/FFXIVClassic Map Server/actors/group/Group.cs
+++ b/FFXIVClassic Map Server/actors/group/Group.cs
@@ -28,20 +28,12 @@ namespace FFXIVClassic_Map_Server.actors.group
public int localizedNamed = -1;
public string groupName = "";
- public PartyWork partyGroupWork; //For party group types
- public Object work; //For the rest
-
public List members = new List();
- public Group(ulong id, uint typeId, object work)
+ public Group(ulong id, uint typeId)
{
groupId = id;
groupTypeId = typeId;
-
- if (work is PartyWork)
- partyGroupWork = (PartyWork)work;
- else
- this.work = work;
}
public Group(ulong id, uint typeId, int nameId, object work)
@@ -49,11 +41,6 @@ namespace FFXIVClassic_Map_Server.actors.group
groupId = id;
groupTypeId = typeId;
localizedNamed = nameId;
-
- if (work is PartyWork)
- partyGroupWork = (PartyWork)work;
- else
- this.work = (PartyWork)work;
}
public Group(ulong id, uint typeId, string name, object work)
@@ -62,11 +49,6 @@ namespace FFXIVClassic_Map_Server.actors.group
groupTypeId = typeId;
groupName = name;
localizedNamed = -1;
-
- if (work is PartyWork)
- partyGroupWork = (PartyWork)work;
- else
- this.work = work;
}
public void add(Actor actor)
@@ -103,40 +85,7 @@ namespace FFXIVClassic_Map_Server.actors.group
}
- public void sendWorkValues(Player player)
- {
- if (groupTypeId == PlayerPartyGroup)
- {
- SynchGroupWorkValuesPacket groupWork = new SynchGroupWorkValuesPacket(groupId);
- groupWork.addProperty(this, "partyGroupWork._globalTemp.owner");
- groupWork.setTarget("/_init");
-
- SubPacket test = groupWork.buildPacket(player.actorId, player.actorId);
- player.QueuePacket(test);
- }
- else if (groupTypeId == GroupInvitationRelationGroup)
- {
- SynchGroupWorkValuesPacket groupWork = new SynchGroupWorkValuesPacket(groupId);
- groupWork.addProperty(this, "work._globalTemp.host");
- groupWork.addProperty(this, "work._globalTemp.variableCommand");
- groupWork.setTarget("/_init");
+ public virtual void sendWorkValues(Player player){}
- SubPacket test = groupWork.buildPacket(player.actorId, player.actorId);
- test.DebugPrintSubPacket();
- player.QueuePacket(test);
- }
- else if (groupTypeId == RetainerGroup)
- {
- SynchGroupWorkValuesPacket groupWork = new SynchGroupWorkValuesPacket(groupId);
- groupWork.addProperty(this, "work._memberSave[0].cdIDOffset");
- groupWork.addProperty(this, "work._memberSave[0].placeName");
- groupWork.addProperty(this, "work._memberSave[0].conditions");
- groupWork.addProperty(this, "work._memberSave[0].level");
- groupWork.setTarget("/_init");
-
- SubPacket test = groupWork.buildPacket(player.actorId, player.actorId);
- player.QueuePacket(test);
- }
- }
}
}
diff --git a/FFXIVClassic Map Server/actors/group/GroupInvitationRelationGroup.cs b/FFXIVClassic Map Server/actors/group/GroupInvitationRelationGroup.cs
new file mode 100644
index 00000000..6e6cb999
--- /dev/null
+++ b/FFXIVClassic Map Server/actors/group/GroupInvitationRelationGroup.cs
@@ -0,0 +1,37 @@
+using FFXIVClassic.Common;
+using FFXIVClassic_Map_Server.actors.group.work;
+using FFXIVClassic_Map_Server.Actors;
+using FFXIVClassic_Map_Server.packets.send.groups;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace FFXIVClassic_Map_Server.actors.group
+{
+ class GroupInvitationRelationGroup : Group
+ {
+ RelationWork work;
+
+ public GroupInvitationRelationGroup(uint id, uint hostActorId, uint commandType) : base(id, Group.GroupInvitationRelationGroup)
+ {
+ work = new RelationWork();
+ work._globalTemp.host = hostActorId;
+ work._globalTemp.variableCommand = commandType;
+ }
+
+ public override void sendWorkValues(Player player)
+ {
+ SynchGroupWorkValuesPacket groupWork = new SynchGroupWorkValuesPacket(groupId);
+ groupWork.addProperty(this, "work._globalTemp.host");
+ groupWork.addProperty(this, "work._globalTemp.variableCommand");
+ groupWork.setTarget("/_init");
+
+ SubPacket test = groupWork.buildPacket(player.actorId, player.actorId);
+ test.DebugPrintSubPacket();
+ player.QueuePacket(test);
+ }
+
+ }
+}
diff --git a/FFXIVClassic Map Server/actors/group/LinkshellGroup.cs b/FFXIVClassic Map Server/actors/group/LinkshellGroup.cs
index 600aff58..1f48b24d 100644
--- a/FFXIVClassic Map Server/actors/group/LinkshellGroup.cs
+++ b/FFXIVClassic Map Server/actors/group/LinkshellGroup.cs
@@ -11,7 +11,7 @@ namespace FFXIVClassic_Map_Server.actors.group
{
private LinkshellWork linkshellWork;
- public LinkshellGroup(ulong id) : base(id, Group.CompanyGroup, null)
+ public LinkshellGroup(ulong id) : base(id, Group.CompanyGroup)
{
linkshellWork = new LinkshellWork();
}
diff --git a/FFXIVClassic Map Server/actors/group/PartyGroup.cs b/FFXIVClassic Map Server/actors/group/PartyGroup.cs
index 2bdb9bac..edf05743 100644
--- a/FFXIVClassic Map Server/actors/group/PartyGroup.cs
+++ b/FFXIVClassic Map Server/actors/group/PartyGroup.cs
@@ -1,4 +1,6 @@
-using FFXIVClassic_Map_Server.actors.group.work;
+using FFXIVClassic.Common;
+using FFXIVClassic_Map_Server.actors.group.work;
+using FFXIVClassic_Map_Server.packets.send.groups;
using System;
using System.Collections.Generic;
using System.Linq;
@@ -9,16 +11,27 @@ namespace FFXIVClassic_Map_Server.actors.group
{
class PartyGroup : Group
{
- private PartyWork partyWork;
+ private PartyWork partyGroupWork;
- public PartyGroup(ulong id) : base(id, Group.PlayerPartyGroup, null)
+ public PartyGroup(ulong id, uint owner) : base(id, Group.PlayerPartyGroup)
{
- partyWork = new PartyWork();
+ partyGroupWork = new PartyWork();
+ partyGroupWork._globalTemp.owner = (ulong)((0xB36F92 << 8) | owner);
}
public void setPartyOwner(uint actorId)
{
- partyWork._globalTemp.owner = (ulong)((0xB36F92 << 8) | actorId);
+ partyGroupWork._globalTemp.owner = (ulong)((0xB36F92 << 8) | actorId);
+ }
+
+ public override void sendWorkValues(Actors.Player player)
+ {
+ SynchGroupWorkValuesPacket groupWork = new SynchGroupWorkValuesPacket(groupId);
+ groupWork.addProperty(this, "partyGroupWork._globalTemp.owner");
+ groupWork.setTarget("/_init");
+
+ SubPacket test = groupWork.buildPacket(player.actorId, player.actorId);
+ player.QueuePacket(test);
}
}
}
diff --git a/FFXIVClassic Map Server/actors/group/RetainerGroup.cs b/FFXIVClassic Map Server/actors/group/RetainerGroup.cs
index f4ffb9d8..66fca5dc 100644
--- a/FFXIVClassic Map Server/actors/group/RetainerGroup.cs
+++ b/FFXIVClassic Map Server/actors/group/RetainerGroup.cs
@@ -1,4 +1,6 @@
-using FFXIVClassic_Map_Server.actors.group.work;
+using FFXIVClassic.Common;
+using FFXIVClassic_Map_Server.actors.group.work;
+using FFXIVClassic_Map_Server.packets.send.groups;
using System;
using System.Collections.Generic;
using System.Linq;
@@ -9,21 +11,34 @@ namespace FFXIVClassic_Map_Server.actors.group
{
class RetainerGroup : Group
{
- private RetainerWork retainerWork;
+ private RetainerWork work;
- public RetainerGroup(ulong id) : base(id, Group.RetainerGroup, null)
+ public RetainerGroup(ulong id) : base(id, Group.RetainerGroup)
{
- retainerWork = new RetainerWork();
+ work = new RetainerWork();
}
public void setRetainerProperties(int index, byte cdIDOffset, ushort placeName, byte condition, byte level)
{
if (members.Count >= index)
return;
- retainerWork._memberSave[index].cdIDOffset = cdIDOffset;
- retainerWork._memberSave[index].placeName = placeName;
- retainerWork._memberSave[index].conditions = condition;
- retainerWork._memberSave[index].level = level;
+ work._memberSave[index].cdIDOffset = cdIDOffset;
+ work._memberSave[index].placeName = placeName;
+ work._memberSave[index].conditions = condition;
+ work._memberSave[index].level = level;
+ }
+
+ public override void sendWorkValues(Actors.Player player)
+ {
+ SynchGroupWorkValuesPacket groupWork = new SynchGroupWorkValuesPacket(groupId);
+ groupWork.addProperty(this, "work._memberSave[0].cdIDOffset");
+ groupWork.addProperty(this, "work._memberSave[0].placeName");
+ groupWork.addProperty(this, "work._memberSave[0].conditions");
+ groupWork.addProperty(this, "work._memberSave[0].level");
+ groupWork.setTarget("/_init");
+
+ SubPacket test = groupWork.buildPacket(player.actorId, player.actorId);
+ player.QueuePacket(test);
}
}
}