Compile Fix and fix to prevent Mercenaries from being set as Group Leader.

This commit is contained in:
Trevius 2014-11-25 02:54:02 -06:00
parent 09e13d0034
commit b4862dea45
3 changed files with 32 additions and 15 deletions

View File

@ -2,6 +2,7 @@ EQEMu Changelog (Started on Sept 24, 2003 15:50)
------------------------------------------------------- -------------------------------------------------------
== 11/24/2014 == == 11/24/2014 ==
Trevius: Spells that modify model size are now limited to 2 size adjustments from the base size. Trevius: Spells that modify model size are now limited to 2 size adjustments from the base size.
Trevius: Fix to prevent Mercenaries from being set as Group Leader.
== 11/24/2014 == == 11/24/2014 ==
Trevius: Added Rule NPC:EnableMeritBasedFaction (disabled by default) - Allows faction gain to work similar to experience. Trevius: Added Rule NPC:EnableMeritBasedFaction (disabled by default) - Allows faction gain to work similar to experience.

View File

@ -592,12 +592,15 @@ bool Group::DelMemberOOZ(const char *Name) {
bool Group::DelMember(Mob* oldmember,bool ignoresender) bool Group::DelMember(Mob* oldmember,bool ignoresender)
{ {
if (oldmember == nullptr){ if (oldmember == nullptr)
{
return false; return false;
} }
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)
{
members[i] = nullptr; members[i] = nullptr;
membername[i][0] = '\0'; membername[i][0] = '\0';
memset(membername[i],0,64); 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: /* This may seem pointless but the case above does not cover the following situation:
* Group has Leader a, member b, member c * Group has Leader a, member b, member c
* b and c are out of zone * 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) * 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. * Ultimately we should think up a better solution to this.
*/ */
if(oldmember == GetLeader()) { if(oldmember == GetLeader())
{
SetLeader(nullptr); 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)); ServerPacket* pack = new ServerPacket(ServerOP_GroupLeave, sizeof(ServerGroupLeave_Struct));
ServerGroupLeave_Struct* gl = (ServerGroupLeave_Struct*)pack->pBuffer; ServerGroupLeave_Struct* gl = (ServerGroupLeave_Struct*)pack->pBuffer;
gl->gid = GetID(); gl->gid = GetID();

View File

@ -4338,7 +4338,7 @@ Corpse* Merc::GetGroupMemberCorpse() {
if(g->members[i] && g->members[i]->IsClient()) { if(g->members[i] && g->members[i]->IsClient()) {
corpse = entity_list.GetCorpseByOwnerWithinRange(g->members[i]->CastToClient(), this, RuleI(Mercs, ResurrectRadius)); corpse = entity_list.GetCorpseByOwnerWithinRange(g->members[i]->CastToClient(), this, RuleI(Mercs, ResurrectRadius));
if(corpse && !corpse->Rezzed()) { if(corpse && !corpse->IsRezzed()) {
return corpse; return corpse;
} }
} }