mirror of
https://github.com/EQEmu/Server.git
synced 2026-04-08 05:52:26 +00:00
Quick fix to resolve some serious group issues
Group leader swapping didn't work and left the client in a bad state This just disbands the group if the leader leaves Also prevents a group leader from disbanding other groups ... Which also lead to bad states Group leader swapping not working is better than these issues :P
This commit is contained in:
parent
72ed770037
commit
7621bf47c8
@ -6506,6 +6506,16 @@ void Client::Handle_OP_GroupDisband(const EQApplicationPacket *app)
|
|||||||
if (!group) //We must recheck this here.. incase the final bot disbanded the party..otherwise we crash
|
if (!group) //We must recheck this here.. incase the final bot disbanded the party..otherwise we crash
|
||||||
return;
|
return;
|
||||||
#endif
|
#endif
|
||||||
|
Mob* memberToDisband = GetTarget();
|
||||||
|
|
||||||
|
if (!memberToDisband)
|
||||||
|
memberToDisband = entity_list.GetMob(gd->name2);
|
||||||
|
|
||||||
|
if (memberToDisband) {
|
||||||
|
auto group2 = memberToDisband->GetGroup();
|
||||||
|
if (group2 != group) // they're not in our group!
|
||||||
|
memberToDisband = this;
|
||||||
|
}
|
||||||
|
|
||||||
if (group->GroupCount() < 3)
|
if (group->GroupCount() < 3)
|
||||||
{
|
{
|
||||||
@ -6527,7 +6537,7 @@ void Client::Handle_OP_GroupDisband(const EQApplicationPacket *app)
|
|||||||
GetMerc()->Suspend();
|
GetMerc()->Suspend();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (group->IsLeader(this) && GetTarget() == this)
|
else if (group->IsLeader(this) && (GetTarget() == this || memberToDisband == this))
|
||||||
{
|
{
|
||||||
LeaveGroup();
|
LeaveGroup();
|
||||||
if (GetMerc() && !GetMerc()->IsSuspended())
|
if (GetMerc() && !GetMerc()->IsSuspended())
|
||||||
@ -6537,12 +6547,6 @@ void Client::Handle_OP_GroupDisband(const EQApplicationPacket *app)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Mob* memberToDisband = nullptr;
|
|
||||||
memberToDisband = GetTarget();
|
|
||||||
|
|
||||||
if (!memberToDisband)
|
|
||||||
memberToDisband = entity_list.GetMob(gd->name2);
|
|
||||||
|
|
||||||
if (memberToDisband)
|
if (memberToDisband)
|
||||||
{
|
{
|
||||||
if (group->IsLeader(this))
|
if (group->IsLeader(this))
|
||||||
|
|||||||
@ -581,6 +581,16 @@ bool Group::DelMember(Mob* oldmember, bool ignoresender)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: fix this shit
|
||||||
|
// okay, so there is code below that tries to handle this. It does not.
|
||||||
|
// So instead of figuring it out now, lets just disband the group so the client doesn't
|
||||||
|
// sit there with a broken group and there isn't any group leader shuffling going on
|
||||||
|
// since the code below doesn't work.
|
||||||
|
if (oldmember == GetLeader()) {
|
||||||
|
DisbandGroup();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
for (uint32 i = 0; i < MAX_GROUP_MEMBERS; i++)
|
for (uint32 i = 0; i < MAX_GROUP_MEMBERS; i++)
|
||||||
{
|
{
|
||||||
if (members[i] == oldmember)
|
if (members[i] == oldmember)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user