mirror of
https://github.com/EQEmu/Server.git
synced 2025-12-15 16:41:29 +00:00
Compile Fix and fix to prevent Mercenaries from being set as Group Leader.
This commit is contained in:
parent
09e13d0034
commit
b4862dea45
@ -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.
|
||||||
|
|||||||
@ -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();
|
||||||
|
|||||||
@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user