mirror of
https://github.com/EQEmu/Server.git
synced 2025-12-12 01:11:29 +00:00
Merge pull request #42 from SecretsOTheP/master
Potential fix for a Merc deconstructor crash.
This commit is contained in:
commit
2dde4dce12
@ -6459,15 +6459,6 @@ void Client::Handle_OP_GroupFollow2(const EQApplicationPacket *app)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Remove the merc from the old group
|
|
||||||
if (GetMerc())
|
|
||||||
{
|
|
||||||
if(GetMerc()->GetGroup())
|
|
||||||
{
|
|
||||||
Merc::RemoveMercFromGroup(GetMerc(), GetMerc()->GetGroup());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Group* group = entity_list.GetGroupByClient(inviter->CastToClient());
|
Group* group = entity_list.GetGroupByClient(inviter->CastToClient());
|
||||||
|
|
||||||
if(!group){
|
if(!group){
|
||||||
@ -6539,8 +6530,9 @@ void Client::Handle_OP_GroupFollow2(const EQApplicationPacket *app)
|
|||||||
|
|
||||||
// Add the merc back into the new group
|
// Add the merc back into the new group
|
||||||
if (GetMerc()) {
|
if (GetMerc()) {
|
||||||
if (GetMerc()->AddMercToGroup(GetMerc(), group)) {
|
if (Merc::AddMercToGroup(GetMerc(), group)) {
|
||||||
database.SetGroupID(GetMerc()->GetName(), group->GetID(), inviter->CastToClient()->CharacterID(), true);
|
database.SetGroupID(GetMerc()->GetName(), group->GetID(), inviter->CastToClient()->CharacterID(), true);
|
||||||
|
database.RefreshGroupFromDB(this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -6667,8 +6659,6 @@ void Client::Handle_OP_GroupDisband(const EQApplicationPacket *app)
|
|||||||
Merc* memberMerc = memberToDisband->CastToClient()->GetMerc();
|
Merc* memberMerc = memberToDisband->CastToClient()->GetMerc();
|
||||||
if(memberClient && memberMerc && group)
|
if(memberClient && memberMerc && group)
|
||||||
{
|
{
|
||||||
Merc::RemoveMercFromGroup(memberMerc, group);
|
|
||||||
|
|
||||||
if(!memberMerc->IsGrouped() && !memberClient->IsGrouped()) {
|
if(!memberMerc->IsGrouped() && !memberClient->IsGrouped()) {
|
||||||
Group *g = new Group(memberClient);
|
Group *g = new Group(memberClient);
|
||||||
|
|
||||||
@ -6713,13 +6703,18 @@ void Client::Handle_OP_GroupDisband(const EQApplicationPacket *app)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(GetMerc()->AddMercToGroup(GetMerc(), g)) {
|
if(Merc::AddMercToGroup(GetMerc(), g)) {
|
||||||
database.SetGroupLeaderName(g->GetID(), this->GetName());
|
database.SetGroupLeaderName(g->GetID(), this->GetName());
|
||||||
g->SaveGroupLeaderAA();
|
g->SaveGroupLeaderAA();
|
||||||
database.SetGroupID(this->GetName(), g->GetID(), this->CharacterID());
|
database.SetGroupID(this->GetName(), g->GetID(), this->CharacterID());
|
||||||
database.SetGroupID(GetMerc()->GetName(), g->GetID(), this->CharacterID(), true);
|
database.SetGroupID(GetMerc()->GetName(), g->GetID(), this->CharacterID(), true);
|
||||||
database.RefreshGroupFromDB(this);
|
database.RefreshGroupFromDB(this);
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if(GetMerc())
|
||||||
|
GetMerc()->Depop();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -50,7 +50,6 @@ Merc::Merc(const NPCType* d, float x, float y, float z, float heading)
|
|||||||
_lost_confidence = false;
|
_lost_confidence = false;
|
||||||
_hatedCount = 0;
|
_hatedCount = 0;
|
||||||
|
|
||||||
ourNPCData = d;
|
|
||||||
memset(equipment, 0, sizeof(equipment));
|
memset(equipment, 0, sizeof(equipment));
|
||||||
|
|
||||||
SetMercID(0);
|
SetMercID(0);
|
||||||
@ -74,7 +73,6 @@ Merc::Merc(const NPCType* d, float x, float y, float z, float heading)
|
|||||||
|
|
||||||
Merc::~Merc() {
|
Merc::~Merc() {
|
||||||
AI_Stop();
|
AI_Stop();
|
||||||
safe_delete(ourNPCData); //Since mercs are dynamically alloc'd we should probably safe_delete the data they were made from. I'm not entirely sure this is safe to delete a const.
|
|
||||||
entity_list.RemoveMerc(this->GetID());
|
entity_list.RemoveMerc(this->GetID());
|
||||||
UninitializeBuffSlots();
|
UninitializeBuffSlots();
|
||||||
}
|
}
|
||||||
@ -1915,9 +1913,9 @@ void Merc::AI_Start(int32 iMoveDelay) {
|
|||||||
AIautocastspell_timer->Start(RandomTimer(0, 2000), false);
|
AIautocastspell_timer->Start(RandomTimer(0, 2000), false);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ourNPCData) {
|
if (NPCTypedata_ours) {
|
||||||
//AI_AddNPCSpells(ourNPCData->npc_spells_id);
|
//AI_AddNPCSpells(ourNPCData->npc_spells_id);
|
||||||
NPCSpecialAttacks(ourNPCData->npc_attacks,0);
|
NPCSpecialAttacks(NPCTypedata_ours->npc_attacks,0);
|
||||||
}
|
}
|
||||||
|
|
||||||
SendTo(GetX(), GetY(), GetZ());
|
SendTo(GetX(), GetY(), GetZ());
|
||||||
@ -5841,16 +5839,15 @@ bool Merc::AddMercToGroup(Merc* merc, Group* group) {
|
|||||||
if(merc->HasGroup()) {
|
if(merc->HasGroup()) {
|
||||||
Merc::RemoveMercFromGroup(merc, merc->GetGroup());
|
Merc::RemoveMercFromGroup(merc, merc->GetGroup());
|
||||||
}
|
}
|
||||||
// Add merc to this group
|
//Try and add the member, followed by checking if the merc owner exists.
|
||||||
if(group->AddMember(merc)) {
|
if(group->AddMember(merc) && merc->GetMercOwner() != NULL) {
|
||||||
merc->SetFollowID(merc->GetMercOwner()->GetID());
|
merc->SetFollowID(merc->GetMercOwner()->GetID());
|
||||||
Result = true;
|
Result = true;
|
||||||
}
|
}
|
||||||
else
|
else {
|
||||||
{
|
//Suspend it if the member is not added and the merc's owner is not valid.
|
||||||
merc->Suspend();
|
merc->Suspend();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return Result;
|
return Result;
|
||||||
|
|||||||
@ -379,8 +379,6 @@ private:
|
|||||||
bool _lost_confidence;
|
bool _lost_confidence;
|
||||||
int _hatedCount;
|
int _hatedCount;
|
||||||
uint32 owner_char_id;
|
uint32 owner_char_id;
|
||||||
const NPCType* ourNPCData;
|
|
||||||
|
|
||||||
Timer endupkeep_timer;
|
Timer endupkeep_timer;
|
||||||
Timer rest_timer;
|
Timer rest_timer;
|
||||||
Timer confidence_timer;
|
Timer confidence_timer;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user