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