mirror of
https://bitbucket.org/Ioncannon/project-meteor-server.git
synced 2025-06-08 21:44:35 +02:00
Added party sync packet which will sync member info between world/zone servers.
This commit is contained in:
parent
a68866617f
commit
2bdc238bc2
6 changed files with 158 additions and 4 deletions
|
@ -16,6 +16,9 @@ using System.Collections.Generic;
|
|||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using FFXIVClassic_Map_Server.actors.group;
|
||||
using FFXIVClassic_Map_Server.packets.send.group;
|
||||
using FFXIVClassic_Map_Server.packets.WorldPackets.Receive;
|
||||
|
||||
namespace FFXIVClassic_Map_Server
|
||||
{
|
||||
|
@ -27,6 +30,7 @@ namespace FFXIVClassic_Map_Server
|
|||
private Dictionary<uint, List<SeamlessBoundry>> seamlessBoundryList;
|
||||
private Dictionary<uint, ZoneEntrance> zoneEntranceList;
|
||||
private Dictionary<uint, ActorClass> actorClasses = new Dictionary<uint,ActorClass>();
|
||||
private Dictionary<ulong, PartyGroup> currentPlayerParties = new Dictionary<ulong, PartyGroup>(); //GroupId, Party object
|
||||
|
||||
private Server mServer;
|
||||
|
||||
|
@ -659,6 +663,58 @@ namespace FFXIVClassic_Map_Server
|
|||
zc.RequestZoneChange(player.playerSession.id, destinationZoneId, spawnType, spawnX, spawnY, spawnZ, spawnRotation);
|
||||
}
|
||||
|
||||
//World server sent a party member list synch packet to the zone server. Add and update players that may be a part of it.
|
||||
public void PartyMemberListRecieved(PartySyncPacket syncPacket)
|
||||
{
|
||||
PartyGroup group;
|
||||
List<GroupMember> members = new List<GroupMember>();
|
||||
|
||||
//Build member list for players on this server
|
||||
foreach (uint actorId in syncPacket.memberActorIds)
|
||||
{
|
||||
Player p = GetPCInWorld(actorId);
|
||||
|
||||
if (p == null)
|
||||
continue;
|
||||
|
||||
GroupMember member = new GroupMember(actorId, -1, 0, false, true, p.customDisplayName);
|
||||
members.Add(member);
|
||||
}
|
||||
|
||||
//If no members on this server, get out or clean
|
||||
if (!currentPlayerParties.ContainsKey(syncPacket.partyGroupId) && members.Count == 0)
|
||||
return;
|
||||
else if (!currentPlayerParties.ContainsKey(syncPacket.partyGroupId) && members.Count == 0)
|
||||
NoMembersInParty(currentPlayerParties[syncPacket.partyGroupId]);
|
||||
|
||||
//Get or create group
|
||||
if (!currentPlayerParties.ContainsKey(syncPacket.partyGroupId))
|
||||
{
|
||||
group = new PartyGroup(syncPacket.partyGroupId, syncPacket.owner);
|
||||
currentPlayerParties.Add(syncPacket.partyGroupId, group);
|
||||
}
|
||||
else
|
||||
group = currentPlayerParties[syncPacket.partyGroupId];
|
||||
|
||||
currentPlayerParties[syncPacket.partyGroupId].members = members;
|
||||
|
||||
//Add group to everyone
|
||||
foreach (GroupMember member in members)
|
||||
{
|
||||
Player player = GetPCInWorld(member.actorId);
|
||||
if (player == null)
|
||||
continue;
|
||||
player.SetParty(group);
|
||||
}
|
||||
}
|
||||
|
||||
//Player was removed from the party either due to leaving it or leaving the server. Remove if empty.
|
||||
public void NoMembersInParty(PartyGroup party)
|
||||
{
|
||||
if (currentPlayerParties.ContainsKey(party.groupId))
|
||||
currentPlayerParties.Remove(party.groupId);
|
||||
}
|
||||
|
||||
public Player GetPCInWorld(string name)
|
||||
{
|
||||
foreach (Zone zone in zoneList.Values)
|
||||
|
@ -745,7 +801,7 @@ namespace FFXIVClassic_Map_Server
|
|||
return actorClasses[id];
|
||||
else
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue