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

View File

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