mirror of
https://bitbucket.org/Ioncannon/project-meteor-server.git
synced 2025-04-02 19:42:05 -04:00
Party sync is done. Finished kick/promote code. Client is now always at the top of pt list.
This commit is contained in:
parent
506bcbaf87
commit
2b10221a75
@ -721,6 +721,7 @@ namespace FFXIVClassic_Map_Server
|
||||
else
|
||||
group = currentPlayerParties[syncPacket.partyGroupId];
|
||||
|
||||
group.SetLeader(syncPacket.owner);
|
||||
group.members = syncPacket.memberActorIds.ToList();
|
||||
|
||||
//Add group to everyone
|
||||
|
@ -1289,6 +1289,12 @@ namespace FFXIVClassic_Map_Server.Actors
|
||||
}
|
||||
else
|
||||
return false;
|
||||
}
|
||||
|
||||
public void PartyOustPlayer(uint actorId)
|
||||
{
|
||||
SubPacket oustPacket = PartyModifyPacket.BuildPacket(playerSession, 1, actorId);
|
||||
QueuePacket(oustPacket);
|
||||
}
|
||||
|
||||
public void PartyOustPlayer(string name)
|
||||
@ -1305,6 +1311,12 @@ namespace FFXIVClassic_Map_Server.Actors
|
||||
{
|
||||
}
|
||||
|
||||
public void PartyPromote(uint actorId)
|
||||
{
|
||||
SubPacket promotePacket = PartyModifyPacket.BuildPacket(playerSession, 0, actorId);
|
||||
QueuePacket(promotePacket);
|
||||
}
|
||||
|
||||
public void PartyPromote(string name)
|
||||
{
|
||||
SubPacket promotePacket = PartyModifyPacket.BuildPacket(playerSession, 0, name);
|
||||
|
@ -25,6 +25,21 @@ namespace FFXIVClassic_Map_Server.packets.WorldPackets.Send.Group
|
||||
}
|
||||
}
|
||||
return new SubPacket(true, OPCODE, session.id, session.id, data);
|
||||
}
|
||||
|
||||
public static SubPacket BuildPacket(Session session, ushort command, uint actorId)
|
||||
{
|
||||
byte[] data = new byte[PACKET_SIZE - 0x20];
|
||||
using (MemoryStream mem = new MemoryStream(data))
|
||||
{
|
||||
using (BinaryWriter binWriter = new BinaryWriter(mem))
|
||||
{
|
||||
binWriter.Write((UInt16)(command + 2));
|
||||
binWriter.Write((UInt32)actorId);
|
||||
}
|
||||
}
|
||||
return new SubPacket(true, OPCODE, session.id, session.id, data);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -43,7 +43,7 @@ namespace FFXIVClassic_World_Server.DataObjects.Group
|
||||
return -1;
|
||||
}
|
||||
|
||||
public virtual List<GroupMember> BuildMemberList()
|
||||
public virtual List<GroupMember> BuildMemberList(uint id)
|
||||
{
|
||||
return new List<GroupMember>();
|
||||
}
|
||||
@ -62,7 +62,7 @@ namespace FFXIVClassic_World_Server.DataObjects.Group
|
||||
public void SendGroupPackets(Session session)
|
||||
{
|
||||
ulong time = Utils.MilisUnixTimeStampUTC();
|
||||
List<GroupMember> members = BuildMemberList();
|
||||
List<GroupMember> members = BuildMemberList(session.sessionId);
|
||||
|
||||
session.clientConnection.QueuePacket(GroupHeaderPacket.buildPacket(session.sessionId, session.currentZoneId, time, this), true, false);
|
||||
session.clientConnection.QueuePacket(GroupMembersBeginPacket.buildPacket(session.sessionId, session.currentZoneId, time, this), true, false);
|
||||
|
@ -83,7 +83,7 @@ namespace FFXIVClassic_World_Server.DataObjects.Group
|
||||
return Group.CompanyGroup;
|
||||
}
|
||||
|
||||
public override List<GroupMember> BuildMemberList()
|
||||
public override List<GroupMember> BuildMemberList(uint id)
|
||||
{
|
||||
List<GroupMember> groupMembers = new List<GroupMember>();
|
||||
foreach (LinkshellMember member in members)
|
||||
|
@ -21,6 +21,11 @@ namespace FFXIVClassic_World_Server.DataObjects.Group
|
||||
}
|
||||
|
||||
public void SetLeaderPlayerRequest(Session requestSession, string name)
|
||||
{
|
||||
SetLeaderPlayerRequest(requestSession, GetIdForName(name));
|
||||
}
|
||||
|
||||
public void SetLeaderPlayerRequest(Session requestSession, uint actorId)
|
||||
{
|
||||
if (GetLeader() != requestSession.sessionId)
|
||||
{
|
||||
@ -28,16 +33,16 @@ namespace FFXIVClassic_World_Server.DataObjects.Group
|
||||
return;
|
||||
}
|
||||
|
||||
uint newLeader = GetIdForName(name);
|
||||
uint newLeader = actorId;
|
||||
|
||||
if (newLeader == 0)
|
||||
if (!members.Contains(actorId))
|
||||
{
|
||||
requestSession.SendGameMessage(30575, 0x20);
|
||||
requestSession.SendGameMessage(30567, 0x20);
|
||||
return;
|
||||
}
|
||||
else if (newLeader == GetLeader())
|
||||
{
|
||||
requestSession.SendGameMessage(30563, 0x20, name);
|
||||
requestSession.SendGameMessage(30559, 0x20, (Object)Server.GetServer().GetNameForId(actorId));
|
||||
return;
|
||||
}
|
||||
|
||||
@ -49,13 +54,18 @@ namespace FFXIVClassic_World_Server.DataObjects.Group
|
||||
Session session = Server.GetServer().GetSession(members[i]);
|
||||
if (session == null)
|
||||
continue;
|
||||
session.SendGameMessage(30429, 0x20, Server.GetServer().GetNameForId(members[i]));
|
||||
session.SendGameMessage(30429, 0x20, (Object)Server.GetServer().GetNameForId(actorId));
|
||||
}
|
||||
|
||||
Server.GetServer().GetWorldManager().SendPartySync(this);
|
||||
Server.GetServer().GetWorldManager().SendPartySync(this);
|
||||
}
|
||||
|
||||
public void KickPlayerRequest(Session requestSession, string name)
|
||||
{
|
||||
KickPlayerRequest(requestSession, GetIdForName(name));
|
||||
}
|
||||
|
||||
public void KickPlayerRequest(Session requestSession, uint actorId)
|
||||
{
|
||||
if (GetLeader() != requestSession.sessionId)
|
||||
{
|
||||
@ -63,9 +73,9 @@ namespace FFXIVClassic_World_Server.DataObjects.Group
|
||||
return;
|
||||
}
|
||||
|
||||
uint kickedMemberId = GetIdForName(name);
|
||||
uint kickedMemberId = actorId;
|
||||
|
||||
if (kickedMemberId == 0)
|
||||
if (!members.Contains(actorId))
|
||||
{
|
||||
requestSession.SendGameMessage(30575, 0x20);
|
||||
return;
|
||||
@ -80,7 +90,7 @@ namespace FFXIVClassic_World_Server.DataObjects.Group
|
||||
if (members[i] == kickedMemberId)
|
||||
session.SendGameMessage(30410, 0x20);
|
||||
else
|
||||
session.SendGameMessage(30428, 0x20, (Object)name);
|
||||
session.SendGameMessage(30428, 0x20, (Object)Server.GetServer().GetNameForId(actorId));
|
||||
}
|
||||
|
||||
//All good, remove
|
||||
@ -106,7 +116,7 @@ namespace FFXIVClassic_World_Server.DataObjects.Group
|
||||
|
||||
public void SetLeader(uint actorId)
|
||||
{
|
||||
partyGroupWork._globalTemp.owner = (ulong)((actorId << 32) | 0xB36F92);
|
||||
partyGroupWork._globalTemp.owner = (ulong)(((ulong)actorId << 32) | 0xB36F92);
|
||||
}
|
||||
|
||||
public uint GetLeader()
|
||||
@ -152,11 +162,15 @@ namespace FFXIVClassic_World_Server.DataObjects.Group
|
||||
return Group.PlayerPartyGroup;
|
||||
}
|
||||
|
||||
public override List<GroupMember> BuildMemberList()
|
||||
public override List<GroupMember> BuildMemberList(uint id)
|
||||
{
|
||||
List<GroupMember> groupMembers = new List<GroupMember>();
|
||||
groupMembers.Add(new GroupMember(id, -1, 0, false, true, Server.GetServer().GetNameForId(id)));
|
||||
foreach (uint charaId in members)
|
||||
groupMembers.Add(new GroupMember(charaId, -1, 0, false, true, Server.GetServer().GetNameForId(charaId)));
|
||||
{
|
||||
if (charaId != id)
|
||||
groupMembers.Add(new GroupMember(charaId, -1, 0, false, true, Server.GetServer().GetNameForId(charaId)));
|
||||
}
|
||||
return groupMembers;
|
||||
}
|
||||
|
||||
|
@ -31,7 +31,7 @@ namespace FFXIVClassic_World_Server.DataObjects.Group
|
||||
return Group.GroupInvitationRelationGroup;
|
||||
}
|
||||
|
||||
public override List<GroupMember> BuildMemberList()
|
||||
public override List<GroupMember> BuildMemberList(uint id)
|
||||
{
|
||||
List<GroupMember> groupMembers = new List<GroupMember>();
|
||||
|
||||
|
@ -63,7 +63,7 @@ namespace FFXIVClassic_World_Server.DataObjects.Group
|
||||
return Group.RetainerGroup;
|
||||
}
|
||||
|
||||
public override List<GroupMember> BuildMemberList()
|
||||
public override List<GroupMember> BuildMemberList(uint id)
|
||||
{
|
||||
List<GroupMember> groupMembers = new List<GroupMember>();
|
||||
|
||||
|
@ -14,6 +14,7 @@ namespace FFXIVClassic_World_Server.Packets.WorldPackets.Receive.Group
|
||||
|
||||
public ushort command;
|
||||
public string name;
|
||||
public uint actorId;
|
||||
|
||||
public PartyModifyPacket(byte[] data)
|
||||
{
|
||||
@ -24,7 +25,11 @@ namespace FFXIVClassic_World_Server.Packets.WorldPackets.Receive.Group
|
||||
try
|
||||
{
|
||||
command = binReader.ReadUInt16();
|
||||
name = Encoding.ASCII.GetString(binReader.ReadBytes(0x20)).Trim(new[] { '\0' });
|
||||
|
||||
if (command >= 2)
|
||||
actorId = binReader.ReadUInt32();
|
||||
else
|
||||
name = Encoding.ASCII.GetString(binReader.ReadBytes(0x20)).Trim(new[] { '\0' });
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
|
@ -208,11 +208,15 @@ namespace FFXIVClassic_World_Server
|
||||
|
||||
if (pt.GetMemberCount() <= 1)
|
||||
return;
|
||||
|
||||
if (partyModifyPacket.command == PartyModifyPacket.MODIFY_LEADER)
|
||||
pt.SetLeaderPlayerRequest(GetSession(subpacket.header.sourceId), partyModifyPacket.name);
|
||||
|
||||
if (partyModifyPacket.command == PartyModifyPacket.MODIFY_LEADER)
|
||||
pt.SetLeaderPlayerRequest(GetSession(subpacket.header.sourceId), partyModifyPacket.name);
|
||||
else if (partyModifyPacket.command == PartyModifyPacket.MODIFY_KICKPLAYER)
|
||||
pt.KickPlayerRequest(GetSession(subpacket.header.sourceId), partyModifyPacket.name);
|
||||
else if (partyModifyPacket.command == PartyModifyPacket.MODIFY_LEADER + 2)
|
||||
pt.SetLeaderPlayerRequest(GetSession(subpacket.header.sourceId), partyModifyPacket.actorId);
|
||||
else if (partyModifyPacket.command == PartyModifyPacket.MODIFY_KICKPLAYER + 2)
|
||||
pt.KickPlayerRequest(GetSession(subpacket.header.sourceId), partyModifyPacket.actorId);
|
||||
|
||||
break;
|
||||
//Party Resign or Disband
|
||||
|
@ -214,9 +214,10 @@ namespace FFXIVClassic_World_Server
|
||||
Party pt = mPartyManager.GetParty(session.sessionId);
|
||||
|
||||
|
||||
if (session.sessionId == 0x6c)
|
||||
if (session.sessionId == 156)
|
||||
{
|
||||
mPartyManager.AddToParty(pt.groupIndex, 156);
|
||||
mPartyManager.AddToParty(pt.groupIndex, 0x6c);
|
||||
mPartyManager.AddToParty(pt.groupIndex, 157);
|
||||
}
|
||||
|
||||
pt.SendGroupPackets(session);
|
||||
@ -226,7 +227,7 @@ namespace FFXIVClassic_World_Server
|
||||
foreach (Linkshell ls in linkshells)
|
||||
ls.SendGroupPackets(session);
|
||||
|
||||
mRelationGroupManager.CreateRelationGroup(157, session.sessionId, 40001).SendGroupPackets(session);
|
||||
mRelationGroupManager.CreateRelationGroup(157, session.sessionId, 10001).SendGroupPackets(session);
|
||||
}
|
||||
|
||||
private void SendMotD(Session session)
|
||||
@ -291,7 +292,7 @@ namespace FFXIVClassic_World_Server
|
||||
if (mCurrentWorldGroups.ContainsKey(groupId))
|
||||
{
|
||||
Group group = mCurrentWorldGroups[groupId];
|
||||
foreach (GroupMember member in group.BuildMemberList())
|
||||
foreach (GroupMember member in group.BuildMemberList(0))
|
||||
group.SendGroupPackets(mServer.GetSession(member.actorId));
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user