Kicked/Promote leader added but broke login. D/Cing now.

This commit is contained in:
Filip Maj 2016-12-21 18:02:50 -05:00
parent e89b7557b3
commit 16c9b741bf
30 changed files with 1120 additions and 211 deletions

View file

@ -20,6 +20,90 @@ namespace FFXIVClassic_World_Server.DataObjects.Group
members.Add(leaderCharaId);
}
public void SetLeaderPlayerRequest(Session requestSession, string name)
{
if (GetLeader() != requestSession.sessionId)
{
requestSession.SendGameMessage(30428, 0x20, Server.GetServer().GetNameForId(requestSession.sessionId));
return;
}
uint newLeader = GetIdForName(name);
if (newLeader == 0)
{
requestSession.SendGameMessage(30575, 0x20);
return;
}
else if (newLeader == GetLeader())
{
requestSession.SendGameMessage(30563, 0x20, name);
return;
}
SetLeader(newLeader);
SendLeaderWorkToAllMembers();
for (int i = 0; i < members.Count; i++)
{
Session session = Server.GetServer().GetSession(members[i]);
if (session == null)
continue;
session.SendGameMessage(30429, 0x20, Server.GetServer().GetNameForId(members[i]));
}
Server.GetServer().GetWorldManager().SendPartySync(this);
}
public void KickPlayerRequest(Session requestSession, string name)
{
if (GetLeader() != requestSession.sessionId)
{
requestSession.SendGameMessage(30428, 0x20, Server.GetServer().GetNameForId(requestSession.sessionId));
return;
}
uint kickedMemberId = GetIdForName(name);
if (kickedMemberId == 0)
{
requestSession.SendGameMessage(30575, 0x20);
return;
}
for (int i = 0; i < members.Count; i++)
{
Session session = Server.GetServer().GetSession(members[i]);
if (session == null)
continue;
if (members[i] == kickedMemberId)
session.SendGameMessage(30410, 0x20);
else
session.SendGameMessage(30428, 0x20, (Object)name);
}
//All good, remove
members.Remove(kickedMemberId);
SendGroupPacketsAll(members);
Server.GetServer().GetWorldManager().SendPartySync(this);
}
public void SendLeaderWorkToAllMembers()
{
for (int i = 0; i < members.Count; i++)
{
SynchGroupWorkValuesPacket leaderUpdate = new SynchGroupWorkValuesPacket(groupIndex);
leaderUpdate.addProperty(this, "partyGroupWork._globalTemp.owner");
leaderUpdate.setTarget("partyGroupWork/leader");
Session session = Server.GetServer().GetSession(members[i]);
if (session == null)
continue;
else
session.clientConnection.QueuePacket(leaderUpdate.buildPacket(session.sessionId, session.sessionId), true, false);
}
}
public void SetLeader(uint actorId)
{
partyGroupWork._globalTemp.owner = (ulong)((actorId << 32) | 0xB36F92);
@ -30,10 +114,22 @@ namespace FFXIVClassic_World_Server.DataObjects.Group
return (uint)((partyGroupWork._globalTemp.owner >> 32) & 0xFFFFFFFF);
}
public uint GetIdForName(string name)
{
for (int i = 0; i < members.Count; i++)
{
if (Server.GetServer().GetNameForId(members[i]).Equals(name))
{
return members[i];
}
}
return 0;
}
public bool IsInParty(uint charaId)
{
return members.Contains(charaId);
}
}
public override void SendInitWorkValues(Session session)
{
@ -64,5 +160,6 @@ namespace FFXIVClassic_World_Server.DataObjects.Group
return groupMembers;
}
}
}