diff --git a/zone/common.h b/zone/common.h index 13a65f7c5..d9e3637a8 100644 --- a/zone/common.h +++ b/zone/common.h @@ -521,7 +521,8 @@ typedef enum { petOther, petCharmed, petNPCFollow, - petTargetLock //remain active as long something is on the hatelist. Don't listen to any commands + petTargetLock, //remain active as long something is on the hatelist. Don't listen to any commands + petNone = 0xFF // not a pet } PetType; typedef enum { diff --git a/zone/mob.cpp b/zone/mob.cpp index 7f6cb9fbf..f26a3fb77 100644 --- a/zone/mob.cpp +++ b/zone/mob.cpp @@ -338,7 +338,7 @@ Mob::Mob(const char* in_name, pLastChange = 0; SetPetID(0); SetOwnerID(0); - typeofpet = petCharmed; //default to charmed... + typeofpet = petNone; // default to not a pet petpower = 0; held = false; nocast = false; @@ -2296,8 +2296,10 @@ void Mob::SetOwnerID(uint16 NewOwnerID) { if (NewOwnerID == GetID() && NewOwnerID != 0) // ok, no charming yourself now =p return; ownerid = NewOwnerID; - if (ownerid == 0 && this->IsNPC() && this->GetPetType() != petCharmed) - this->Depop(); + // if we're setting the owner ID to 0 and they're not either charmed or not-a-pet then + // they're a normal pet and should be despawned + if (ownerid == 0 && IsNPC() && GetPetType() != petCharmed && GetPetType() != petNone) + Depop(); } // used in checking for behind (backstab) and checking in front (melee LoS) diff --git a/zone/spell_effects.cpp b/zone/spell_effects.cpp index 28f5518fa..e3b4c4a3b 100644 --- a/zone/spell_effects.cpp +++ b/zone/spell_effects.cpp @@ -773,6 +773,7 @@ bool Mob::SpellEffect(Mob* caster, uint16 spell_id, float partial, int level_ove caster->SetPet(this); SetOwnerID(caster->GetID()); SetPetOrder(SPO_Follow); + SetPetType(petCharmed); if(caster->IsClient()){ EQApplicationPacket *app = new EQApplicationPacket(OP_Charm, sizeof(Charm_Struct)); @@ -3915,6 +3916,7 @@ void Mob::BuffFadeBySlot(int slot, bool iRecalcBonuses) SendAppearancePacket(AT_Pet, 0, true, true); Mob* tempmob = GetOwner(); SetOwnerID(0); + SetPetType(petNone); if(tempmob) { tempmob->SetPet(0);