diff --git a/src/server/game/Handlers/PetHandler.cpp b/src/server/game/Handlers/PetHandler.cpp index 686fe1b77..892d611b4 100644 --- a/src/server/game/Handlers/PetHandler.cpp +++ b/src/server/game/Handlers/PetHandler.cpp @@ -558,10 +558,11 @@ void WorldSession::HandlePetActionHelper(Unit* pet, ObjectGuid guid1, uint32 spe if (!owner->IsValidAttackTarget(TargetUnit)) return; - // pussywizard: - if (Creature* creaturePet = pet->ToCreature()) - if (!creaturePet->_CanDetectFeignDeathOf(TargetUnit) || !creaturePet->CanCreatureAttack(TargetUnit)) - return; + // pussywizard (excluded charmed) + if (!pet->IsCharmed()) + if (Creature* creaturePet = pet->ToCreature()) + if (!creaturePet->_CanDetectFeignDeathOf(TargetUnit) || !creaturePet->CanCreatureAttack(TargetUnit)) + return; // Not let attack through obstructions bool checkLos = !DisableMgr::IsPathfindingEnabled(pet->GetMap()) || diff --git a/src/server/game/Handlers/SpellHandler.cpp b/src/server/game/Handlers/SpellHandler.cpp index e22396178..fe65762ab 100644 --- a/src/server/game/Handlers/SpellHandler.cpp +++ b/src/server/game/Handlers/SpellHandler.cpp @@ -462,9 +462,11 @@ void WorldSession::HandleCancelAuraOpcode(WorldPacket& recvPacket) if (!spellInfo) return; - // not allow remove non positive spells and spells with attr SPELL_ATTR0_NO_AURA_CANCEL - if ((!spellInfo->IsPositive() || spellInfo->HasAttribute(SPELL_ATTR0_NO_AURA_CANCEL) || spellInfo->IsPassive()) && spellId != 605) + // not allow remove spells with attr SPELL_ATTR0_CANT_CANCEL + if (spellInfo->HasAttribute(SPELL_ATTR0_NO_AURA_CANCEL)) + { return; + } // channeled spell case (it currently casted then) if (spellInfo->IsChanneled()) @@ -475,6 +477,14 @@ void WorldSession::HandleCancelAuraOpcode(WorldPacket& recvPacket) return; } + // non channeled case: + // don't allow remove non positive spells + // don't allow cancelling passive auras (some of them are visible) + if (!spellInfo->IsPositive() || spellInfo->IsPassive()) + { + return; + } + // maybe should only remove one buff when there are multiple? _player->RemoveOwnedAura(spellId, ObjectGuid::Empty, 0, AURA_REMOVE_BY_CANCEL); }