Potential crash/bug fixes for Groups and Mercs.

This commit is contained in:
Trevius 2015-01-08 23:28:22 -06:00
parent 4808dcadcf
commit 4c9653d204
2 changed files with 25 additions and 30 deletions

View File

@ -2033,8 +2033,9 @@ void EntityList::RemoveAllMercs()
void EntityList::RemoveAllGroups() void EntityList::RemoveAllGroups()
{ {
while (group_list.size()) { while (group_list.size()) {
safe_delete(group_list.front()); auto group = group_list.front();
group_list.pop_front(); group_list.pop_front();
delete group;
} }
#if EQDEBUG >= 5 #if EQDEBUG >= 5
CheckGroupList (__FILE__, __LINE__); CheckGroupList (__FILE__, __LINE__);
@ -2044,8 +2045,9 @@ void EntityList::RemoveAllGroups()
void EntityList::RemoveAllRaids() void EntityList::RemoveAllRaids()
{ {
while (raid_list.size()) { while (raid_list.size()) {
safe_delete(raid_list.front()); auto raid = raid_list.front();
raid_list.pop_front(); raid_list.pop_front();
delete raid;
} }
} }
@ -2256,8 +2258,8 @@ bool EntityList::RemoveGroup(uint32 delete_id)
while(iterator != group_list.end()) while(iterator != group_list.end())
{ {
if((*iterator)->GetID() == delete_id) { if((*iterator)->GetID() == delete_id) {
safe_delete(*iterator);
group_list.remove(*iterator); group_list.remove(*iterator);
delete *iterator;
#if EQDEBUG >= 5 #if EQDEBUG >= 5
CheckGroupList (__FILE__, __LINE__); CheckGroupList (__FILE__, __LINE__);
#endif #endif
@ -2280,8 +2282,8 @@ bool EntityList::RemoveRaid(uint32 delete_id)
while(iterator != raid_list.end()) while(iterator != raid_list.end())
{ {
if((*iterator)->GetID() == delete_id) { if((*iterator)->GetID() == delete_id) {
safe_delete(*iterator);
raid_list.remove(*iterator); raid_list.remove(*iterator);
delete *iterator;
return true; return true;
} }
++iterator; ++iterator;

View File

@ -231,7 +231,6 @@ bool Group::AddMember(Mob* newmember, const char *NewMemberName, uint32 Characte
if(owner) if(owner)
{ {
CharacterID = owner->CastToClient()->CharacterID(); CharacterID = owner->CastToClient()->CharacterID();
NewMemberName = newmember->GetName();
} }
ismerc = true; ismerc = true;
} }
@ -282,14 +281,7 @@ bool Group::AddMember(Mob* newmember, const char *NewMemberName, uint32 Characte
if (members[i] != nullptr && members[i] != newmember) if (members[i] != nullptr && members[i] != newmember)
{ {
//fill in group join & send it //fill in group join & send it
if(members[i]->IsMerc()) strcpy(gj->yourname, members[i]->GetCleanName());
{
strcpy(gj->yourname, members[i]->GetName());
}
else
{
strcpy(gj->yourname, members[i]->GetCleanName());
}
if(members[i]->IsClient()) if(members[i]->IsClient())
{ {
members[i]->CastToClient()->QueuePacket(outapp); members[i]->CastToClient()->QueuePacket(outapp);
@ -336,7 +328,7 @@ bool Group::AddMember(Mob* newmember, const char *NewMemberName, uint32 Characte
Client* owner = newmember->CastToMerc()->GetMercOwner(); Client* owner = newmember->CastToMerc()->GetMercOwner();
if(owner) if(owner)
{ {
database.SetGroupID(newmember->GetName(), GetID(), owner->CharacterID(), true); database.SetGroupID(NewMemberName, GetID(), owner->CharacterID(), true);
} }
} }
#ifdef BOTS #ifdef BOTS
@ -475,7 +467,7 @@ bool Group::UpdatePlayer(Mob* update){
for (i = 0; i < MAX_GROUP_MEMBERS; i++) for (i = 0; i < MAX_GROUP_MEMBERS; i++)
{ {
if (!strcasecmp(membername[i],update->GetName())) if (!strcasecmp(membername[i],update->GetCleanName()))
{ {
members[i] = update; members[i] = update;
members[i]->SetGrouped(true); members[i]->SetGrouped(true);
@ -545,7 +537,7 @@ void Group::SendGroupJoinOOZ(Mob* NewMember) {
gj->gid = GetID(); gj->gid = GetID();
gj->zoneid = zone->GetZoneID(); gj->zoneid = zone->GetZoneID();
gj->instance_id = zone->GetInstanceID(); gj->instance_id = zone->GetInstanceID();
strcpy(gj->member_name, NewMember->GetName()); strcpy(gj->member_name, NewMember->GetCleanName());
worldserver.SendPacket(pack); worldserver.SendPacket(pack);
safe_delete(pack); safe_delete(pack);
@ -645,7 +637,7 @@ bool Group::DelMember(Mob* oldmember, bool ignoresender)
gl->gid = GetID(); gl->gid = GetID();
gl->zoneid = zone->GetZoneID(); gl->zoneid = zone->GetZoneID();
gl->instance_id = zone->GetInstanceID(); gl->instance_id = zone->GetInstanceID();
strcpy(gl->member_name, oldmember->GetName()); strcpy(gl->member_name, oldmember->GetCleanName());
worldserver.SendPacket(pack); worldserver.SendPacket(pack);
safe_delete(pack); safe_delete(pack);
@ -696,7 +688,7 @@ bool Group::DelMember(Mob* oldmember, bool ignoresender)
Client* owner = oldmember->CastToMerc()->GetMercOwner(); Client* owner = oldmember->CastToMerc()->GetMercOwner();
if(owner) if(owner)
{ {
database.SetGroupID(oldmember->GetName(), 0, owner->CharacterID(), true); database.SetGroupID(oldmember->GetCleanName(), 0, owner->CharacterID(), true);
} }
} }
@ -706,19 +698,19 @@ bool Group::DelMember(Mob* oldmember, bool ignoresender)
if(HasRole(oldmember, RoleTank)) if(HasRole(oldmember, RoleTank))
{ {
SetGroupTankTarget(0); SetGroupTankTarget(0);
UnDelegateMainTank(oldmember->GetName()); UnDelegateMainTank(oldmember->GetCleanName());
} }
if(HasRole(oldmember, RoleAssist)) if(HasRole(oldmember, RoleAssist))
{ {
SetGroupAssistTarget(0); SetGroupAssistTarget(0);
UnDelegateMainAssist(oldmember->GetName()); UnDelegateMainAssist(oldmember->GetCleanName());
} }
if(HasRole(oldmember, RolePuller)) if(HasRole(oldmember, RolePuller))
{ {
SetGroupPullerTarget(0); SetGroupPullerTarget(0);
UnDelegatePuller(oldmember->GetName()); UnDelegatePuller(oldmember->GetCleanName());
} }
if (oldmember->GetName() == mentoree_name) if (oldmember->GetName() == mentoree_name)
@ -858,7 +850,7 @@ void Group::GroupMessage(Mob* sender, uint8 language, uint8 lang_skill, const ch
gcm->zoneid = zone->GetZoneID(); gcm->zoneid = zone->GetZoneID();
gcm->groupid = GetID(); gcm->groupid = GetID();
gcm->instanceid = zone->GetInstanceID(); gcm->instanceid = zone->GetInstanceID();
strcpy(gcm->from, sender->GetName()); strcpy(gcm->from, sender->GetCleanName());
strcpy(gcm->message, message); strcpy(gcm->message, message);
worldserver.SendPacket(pack); worldserver.SendPacket(pack);
safe_delete(pack); safe_delete(pack);
@ -900,8 +892,8 @@ void Group::DisbandGroup() {
Leader = members[i]->CastToClient(); Leader = members[i]->CastToClient();
} }
strcpy(gu->yourname, members[i]->GetName()); strcpy(gu->yourname, members[i]->GetCleanName());
database.SetGroupID(members[i]->GetName(), 0, members[i]->CastToClient()->CharacterID(), false); database.SetGroupID(members[i]->GetCleanName(), 0, members[i]->CastToClient()->CharacterID(), false);
members[i]->CastToClient()->QueuePacket(outapp); members[i]->CastToClient()->QueuePacket(outapp);
SendMarkedNPCsToMember(members[i]->CastToClient(), true); SendMarkedNPCsToMember(members[i]->CastToClient(), true);
} }
@ -911,7 +903,7 @@ void Group::DisbandGroup() {
Client* owner = members[i]->CastToMerc()->GetMercOwner(); Client* owner = members[i]->CastToMerc()->GetMercOwner();
if(owner) if(owner)
{ {
database.SetGroupID(members[i]->GetName(), 0, owner->CharacterID(), true); database.SetGroupID(members[i]->GetCleanName(), 0, owner->CharacterID(), true);
} }
} }
@ -930,12 +922,13 @@ void Group::DisbandGroup() {
worldserver.SendPacket(pack); worldserver.SendPacket(pack);
safe_delete(pack); safe_delete(pack);
entity_list.RemoveGroup(GetID());
if(GetID() != 0) if(GetID() != 0)
{ {
database.ClearGroup(GetID()); database.ClearGroup(GetID());
} }
entity_list.RemoveGroup(GetID());
if(Leader && (Leader->IsLFP())) if(Leader && (Leader->IsLFP()))
{ {
Leader->UpdateLFP(); Leader->UpdateLFP();
@ -975,7 +968,7 @@ void Group::SendUpdate(uint32 type, Mob* member)
for (uint32 i = 0; i < MAX_GROUP_MEMBERS; ++i) for (uint32 i = 0; i < MAX_GROUP_MEMBERS; ++i)
if (members[i] != nullptr && members[i] != member) if (members[i] != nullptr && members[i] != member)
strcpy(gu->membername[x++], members[i]->GetName()); strcpy(gu->membername[x++], members[i]->GetCleanName());
member->CastToClient()->QueuePacket(outapp); member->CastToClient()->QueuePacket(outapp);
@ -1156,7 +1149,7 @@ void Client::LeaveGroup() {
{ {
int32 MemberCount = g->GroupCount(); int32 MemberCount = g->GroupCount();
// Account for both client and merc leaving the group // Account for both client and merc leaving the group
if (GetMerc() && GetMerc()->HasGroup() && GetMerc()->GetGroup() == g) if (GetMerc() && g == GetMerc()->GetGroup())
{ {
MemberCount -= 1; MemberCount -= 1;
} }
@ -1177,10 +1170,10 @@ void Client::LeaveGroup() {
else else
{ {
//force things a little //force things a little
database.SetGroupID(GetName(), 0, CharacterID(), false); database.SetGroupID(GetCleanName(), 0, CharacterID(), false);
if (GetMerc()) if (GetMerc())
{ {
database.SetGroupID(GetMerc()->GetName(), 0, CharacterID(), true); database.SetGroupID(GetMerc()->GetCleanName(), 0, CharacterID(), true);
} }
} }