mirror of
https://github.com/EQEmu/Server.git
synced 2026-06-10 23:20:25 +00:00
Compile Fix and fix to prevent Mercenaries from being set as Group Leader.
This commit is contained in:
+30
-14
@@ -592,12 +592,15 @@ bool Group::DelMemberOOZ(const char *Name) {
|
||||
|
||||
bool Group::DelMember(Mob* oldmember,bool ignoresender)
|
||||
{
|
||||
if (oldmember == nullptr){
|
||||
if (oldmember == nullptr)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
for (uint32 i = 0; i < MAX_GROUP_MEMBERS; i++) {
|
||||
if (members[i] == oldmember) {
|
||||
for (uint32 i = 0; i < MAX_GROUP_MEMBERS; i++)
|
||||
{
|
||||
if (members[i] == oldmember)
|
||||
{
|
||||
members[i] = nullptr;
|
||||
membername[i][0] = '\0';
|
||||
memset(membername[i],0,64);
|
||||
@@ -606,16 +609,6 @@ bool Group::DelMember(Mob* oldmember,bool ignoresender)
|
||||
}
|
||||
}
|
||||
|
||||
//handle leader quitting group gracefully
|
||||
if (oldmember == GetLeader() && GroupCount() >= 2) {
|
||||
for(uint32 nl = 0; nl < MAX_GROUP_MEMBERS; nl++) {
|
||||
if(members[nl]) {
|
||||
ChangeLeader(members[nl]);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* This may seem pointless but the case above does not cover the following situation:
|
||||
* Group has Leader a, member b, member c
|
||||
* b and c are out of zone
|
||||
@@ -624,10 +617,33 @@ bool Group::DelMember(Mob* oldmember,bool ignoresender)
|
||||
* a is still "leader" from GetLeader()'s perspective and will crash the zone when we DelMember(b)
|
||||
* Ultimately we should think up a better solution to this.
|
||||
*/
|
||||
if(oldmember == GetLeader()) {
|
||||
if(oldmember == GetLeader())
|
||||
{
|
||||
SetLeader(nullptr);
|
||||
}
|
||||
|
||||
//handle leader quitting group gracefully
|
||||
if (oldmember == GetLeader() && GroupCount() >= 2)
|
||||
{
|
||||
for(uint32 nl = 0; nl < MAX_GROUP_MEMBERS; nl++)
|
||||
{
|
||||
if(members[nl])
|
||||
{
|
||||
if (members[nl]->IsClient())
|
||||
{
|
||||
ChangeLeader(members[nl]);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (GetLeader() == nullptr)
|
||||
{
|
||||
DisbandGroup();
|
||||
return true;
|
||||
}
|
||||
|
||||
ServerPacket* pack = new ServerPacket(ServerOP_GroupLeave, sizeof(ServerGroupLeave_Struct));
|
||||
ServerGroupLeave_Struct* gl = (ServerGroupLeave_Struct*)pack->pBuffer;
|
||||
gl->gid = GetID();
|
||||
|
||||
Reference in New Issue
Block a user