mirror of
https://bitbucket.org/Ioncannon/project-meteor-server.git
synced 2025-06-10 14:34:32 +02:00
Kicked/Promote leader added but broke login. D/Cing now.
This commit is contained in:
parent
e89b7557b3
commit
16c9b741bf
30 changed files with 1120 additions and 211 deletions
|
@ -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;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue