mirror of
https://bitbucket.org/Ioncannon/project-meteor-server.git
synced 2025-04-20 19:57:46 +00: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
11 changed files with 77 additions and 25 deletions
|
@ -721,6 +721,7 @@ namespace FFXIVClassic_Map_Server
|
||||||
else
|
else
|
||||||
group = currentPlayerParties[syncPacket.partyGroupId];
|
group = currentPlayerParties[syncPacket.partyGroupId];
|
||||||
|
|
||||||
|
group.SetLeader(syncPacket.owner);
|
||||||
group.members = syncPacket.memberActorIds.ToList();
|
group.members = syncPacket.memberActorIds.ToList();
|
||||||
|
|
||||||
//Add group to everyone
|
//Add group to everyone
|
||||||
|
|
|
@ -1291,6 +1291,12 @@ namespace FFXIVClassic_Map_Server.Actors
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void PartyOustPlayer(uint actorId)
|
||||||
|
{
|
||||||
|
SubPacket oustPacket = PartyModifyPacket.BuildPacket(playerSession, 1, actorId);
|
||||||
|
QueuePacket(oustPacket);
|
||||||
|
}
|
||||||
|
|
||||||
public void PartyOustPlayer(string name)
|
public void PartyOustPlayer(string name)
|
||||||
{
|
{
|
||||||
SubPacket oustPacket = PartyModifyPacket.BuildPacket(playerSession, 1, name);
|
SubPacket oustPacket = PartyModifyPacket.BuildPacket(playerSession, 1, 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)
|
public void PartyPromote(string name)
|
||||||
{
|
{
|
||||||
SubPacket promotePacket = PartyModifyPacket.BuildPacket(playerSession, 0, name);
|
SubPacket promotePacket = PartyModifyPacket.BuildPacket(playerSession, 0, name);
|
||||||
|
|
|
@ -26,5 +26,20 @@ namespace FFXIVClassic_Map_Server.packets.WorldPackets.Send.Group
|
||||||
}
|
}
|
||||||
return new SubPacket(true, OPCODE, session.id, session.id, data);
|
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;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
public virtual List<GroupMember> BuildMemberList()
|
public virtual List<GroupMember> BuildMemberList(uint id)
|
||||||
{
|
{
|
||||||
return new List<GroupMember>();
|
return new List<GroupMember>();
|
||||||
}
|
}
|
||||||
|
@ -62,7 +62,7 @@ namespace FFXIVClassic_World_Server.DataObjects.Group
|
||||||
public void SendGroupPackets(Session session)
|
public void SendGroupPackets(Session session)
|
||||||
{
|
{
|
||||||
ulong time = Utils.MilisUnixTimeStampUTC();
|
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(GroupHeaderPacket.buildPacket(session.sessionId, session.currentZoneId, time, this), true, false);
|
||||||
session.clientConnection.QueuePacket(GroupMembersBeginPacket.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;
|
return Group.CompanyGroup;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override List<GroupMember> BuildMemberList()
|
public override List<GroupMember> BuildMemberList(uint id)
|
||||||
{
|
{
|
||||||
List<GroupMember> groupMembers = new List<GroupMember>();
|
List<GroupMember> groupMembers = new List<GroupMember>();
|
||||||
foreach (LinkshellMember member in members)
|
foreach (LinkshellMember member in members)
|
||||||
|
|
|
@ -21,6 +21,11 @@ namespace FFXIVClassic_World_Server.DataObjects.Group
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SetLeaderPlayerRequest(Session requestSession, string name)
|
public void SetLeaderPlayerRequest(Session requestSession, string name)
|
||||||
|
{
|
||||||
|
SetLeaderPlayerRequest(requestSession, GetIdForName(name));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SetLeaderPlayerRequest(Session requestSession, uint actorId)
|
||||||
{
|
{
|
||||||
if (GetLeader() != requestSession.sessionId)
|
if (GetLeader() != requestSession.sessionId)
|
||||||
{
|
{
|
||||||
|
@ -28,16 +33,16 @@ namespace FFXIVClassic_World_Server.DataObjects.Group
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint newLeader = GetIdForName(name);
|
uint newLeader = actorId;
|
||||||
|
|
||||||
if (newLeader == 0)
|
if (!members.Contains(actorId))
|
||||||
{
|
{
|
||||||
requestSession.SendGameMessage(30575, 0x20);
|
requestSession.SendGameMessage(30567, 0x20);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
else if (newLeader == GetLeader())
|
else if (newLeader == GetLeader())
|
||||||
{
|
{
|
||||||
requestSession.SendGameMessage(30563, 0x20, name);
|
requestSession.SendGameMessage(30559, 0x20, (Object)Server.GetServer().GetNameForId(actorId));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -49,13 +54,18 @@ namespace FFXIVClassic_World_Server.DataObjects.Group
|
||||||
Session session = Server.GetServer().GetSession(members[i]);
|
Session session = Server.GetServer().GetSession(members[i]);
|
||||||
if (session == null)
|
if (session == null)
|
||||||
continue;
|
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)
|
public void KickPlayerRequest(Session requestSession, string name)
|
||||||
|
{
|
||||||
|
KickPlayerRequest(requestSession, GetIdForName(name));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void KickPlayerRequest(Session requestSession, uint actorId)
|
||||||
{
|
{
|
||||||
if (GetLeader() != requestSession.sessionId)
|
if (GetLeader() != requestSession.sessionId)
|
||||||
{
|
{
|
||||||
|
@ -63,9 +73,9 @@ namespace FFXIVClassic_World_Server.DataObjects.Group
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint kickedMemberId = GetIdForName(name);
|
uint kickedMemberId = actorId;
|
||||||
|
|
||||||
if (kickedMemberId == 0)
|
if (!members.Contains(actorId))
|
||||||
{
|
{
|
||||||
requestSession.SendGameMessage(30575, 0x20);
|
requestSession.SendGameMessage(30575, 0x20);
|
||||||
return;
|
return;
|
||||||
|
@ -80,7 +90,7 @@ namespace FFXIVClassic_World_Server.DataObjects.Group
|
||||||
if (members[i] == kickedMemberId)
|
if (members[i] == kickedMemberId)
|
||||||
session.SendGameMessage(30410, 0x20);
|
session.SendGameMessage(30410, 0x20);
|
||||||
else
|
else
|
||||||
session.SendGameMessage(30428, 0x20, (Object)name);
|
session.SendGameMessage(30428, 0x20, (Object)Server.GetServer().GetNameForId(actorId));
|
||||||
}
|
}
|
||||||
|
|
||||||
//All good, remove
|
//All good, remove
|
||||||
|
@ -106,7 +116,7 @@ namespace FFXIVClassic_World_Server.DataObjects.Group
|
||||||
|
|
||||||
public void SetLeader(uint actorId)
|
public void SetLeader(uint actorId)
|
||||||
{
|
{
|
||||||
partyGroupWork._globalTemp.owner = (ulong)((actorId << 32) | 0xB36F92);
|
partyGroupWork._globalTemp.owner = (ulong)(((ulong)actorId << 32) | 0xB36F92);
|
||||||
}
|
}
|
||||||
|
|
||||||
public uint GetLeader()
|
public uint GetLeader()
|
||||||
|
@ -152,11 +162,15 @@ namespace FFXIVClassic_World_Server.DataObjects.Group
|
||||||
return Group.PlayerPartyGroup;
|
return Group.PlayerPartyGroup;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override List<GroupMember> BuildMemberList()
|
public override List<GroupMember> BuildMemberList(uint id)
|
||||||
{
|
{
|
||||||
List<GroupMember> groupMembers = new List<GroupMember>();
|
List<GroupMember> groupMembers = new List<GroupMember>();
|
||||||
|
groupMembers.Add(new GroupMember(id, -1, 0, false, true, Server.GetServer().GetNameForId(id)));
|
||||||
foreach (uint charaId in members)
|
foreach (uint charaId in members)
|
||||||
|
{
|
||||||
|
if (charaId != id)
|
||||||
groupMembers.Add(new GroupMember(charaId, -1, 0, false, true, Server.GetServer().GetNameForId(charaId)));
|
groupMembers.Add(new GroupMember(charaId, -1, 0, false, true, Server.GetServer().GetNameForId(charaId)));
|
||||||
|
}
|
||||||
return groupMembers;
|
return groupMembers;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -31,7 +31,7 @@ namespace FFXIVClassic_World_Server.DataObjects.Group
|
||||||
return Group.GroupInvitationRelationGroup;
|
return Group.GroupInvitationRelationGroup;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override List<GroupMember> BuildMemberList()
|
public override List<GroupMember> BuildMemberList(uint id)
|
||||||
{
|
{
|
||||||
List<GroupMember> groupMembers = new List<GroupMember>();
|
List<GroupMember> groupMembers = new List<GroupMember>();
|
||||||
|
|
||||||
|
|
|
@ -63,7 +63,7 @@ namespace FFXIVClassic_World_Server.DataObjects.Group
|
||||||
return Group.RetainerGroup;
|
return Group.RetainerGroup;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override List<GroupMember> BuildMemberList()
|
public override List<GroupMember> BuildMemberList(uint id)
|
||||||
{
|
{
|
||||||
List<GroupMember> groupMembers = new List<GroupMember>();
|
List<GroupMember> groupMembers = new List<GroupMember>();
|
||||||
|
|
||||||
|
|
|
@ -14,6 +14,7 @@ namespace FFXIVClassic_World_Server.Packets.WorldPackets.Receive.Group
|
||||||
|
|
||||||
public ushort command;
|
public ushort command;
|
||||||
public string name;
|
public string name;
|
||||||
|
public uint actorId;
|
||||||
|
|
||||||
public PartyModifyPacket(byte[] data)
|
public PartyModifyPacket(byte[] data)
|
||||||
{
|
{
|
||||||
|
@ -24,6 +25,10 @@ namespace FFXIVClassic_World_Server.Packets.WorldPackets.Receive.Group
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
command = binReader.ReadUInt16();
|
command = binReader.ReadUInt16();
|
||||||
|
|
||||||
|
if (command >= 2)
|
||||||
|
actorId = binReader.ReadUInt32();
|
||||||
|
else
|
||||||
name = Encoding.ASCII.GetString(binReader.ReadBytes(0x20)).Trim(new[] { '\0' });
|
name = Encoding.ASCII.GetString(binReader.ReadBytes(0x20)).Trim(new[] { '\0' });
|
||||||
}
|
}
|
||||||
catch (Exception)
|
catch (Exception)
|
||||||
|
|
|
@ -213,6 +213,10 @@ namespace FFXIVClassic_World_Server
|
||||||
pt.SetLeaderPlayerRequest(GetSession(subpacket.header.sourceId), partyModifyPacket.name);
|
pt.SetLeaderPlayerRequest(GetSession(subpacket.header.sourceId), partyModifyPacket.name);
|
||||||
else if (partyModifyPacket.command == PartyModifyPacket.MODIFY_KICKPLAYER)
|
else if (partyModifyPacket.command == PartyModifyPacket.MODIFY_KICKPLAYER)
|
||||||
pt.KickPlayerRequest(GetSession(subpacket.header.sourceId), partyModifyPacket.name);
|
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;
|
break;
|
||||||
//Party Resign or Disband
|
//Party Resign or Disband
|
||||||
|
|
|
@ -214,9 +214,10 @@ namespace FFXIVClassic_World_Server
|
||||||
Party pt = mPartyManager.GetParty(session.sessionId);
|
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);
|
pt.SendGroupPackets(session);
|
||||||
|
@ -226,7 +227,7 @@ namespace FFXIVClassic_World_Server
|
||||||
foreach (Linkshell ls in linkshells)
|
foreach (Linkshell ls in linkshells)
|
||||||
ls.SendGroupPackets(session);
|
ls.SendGroupPackets(session);
|
||||||
|
|
||||||
mRelationGroupManager.CreateRelationGroup(157, session.sessionId, 40001).SendGroupPackets(session);
|
mRelationGroupManager.CreateRelationGroup(157, session.sessionId, 10001).SendGroupPackets(session);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void SendMotD(Session session)
|
private void SendMotD(Session session)
|
||||||
|
@ -291,7 +292,7 @@ namespace FFXIVClassic_World_Server
|
||||||
if (mCurrentWorldGroups.ContainsKey(groupId))
|
if (mCurrentWorldGroups.ContainsKey(groupId))
|
||||||
{
|
{
|
||||||
Group group = mCurrentWorldGroups[groupId];
|
Group group = mCurrentWorldGroups[groupId];
|
||||||
foreach (GroupMember member in group.BuildMemberList())
|
foreach (GroupMember member in group.BuildMemberList(0))
|
||||||
group.SendGroupPackets(mServer.GetSession(member.actorId));
|
group.SendGroupPackets(mServer.GetSession(member.actorId));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue