void HandlePetSpellAutocast(PetSpellAutocast packet) { Creature pet = ObjectAccessor.GetCreatureOrPetOrVehicle(GetPlayer(), packet.PetGUID); if (!pet) { Log.outError(LogFilter.Network, "WorldSession.HandlePetSpellAutocast: {0} not found.", packet.PetGUID.ToString()); return; } if (pet != GetPlayer().GetGuardianPet() && pet != GetPlayer().GetCharm()) { Log.outError(LogFilter.Network, "WorldSession.HandlePetSpellAutocast: {0} isn't pet of player {1} ({2}).", packet.PetGUID.ToString(), GetPlayer().GetName(), GetPlayer().GetGUID().ToString()); return; } SpellInfo spellInfo = Global.SpellMgr.GetSpellInfo(packet.SpellID); if (spellInfo == null) { Log.outError(LogFilter.Network, "WorldSession.HandlePetSpellAutocast: Unknown spell id {0} used by {1}.", packet.SpellID, packet.PetGUID.ToString()); return; } // do not add not learned spells/ passive spells if (!pet.HasSpell(packet.SpellID) || !spellInfo.IsAutocastable()) { return; } CharmInfo charmInfo = pet.GetCharmInfo(); if (charmInfo == null) { Log.outError(LogFilter.Network, "WorldSession.HandlePetSpellAutocastOpcod: object {0} is considered pet-like but doesn't have a charminfo!", pet.GetGUID().ToString()); return; } if (pet.IsPet()) { pet.ToPet().ToggleAutocast(spellInfo, packet.AutocastEnabled); } else { charmInfo.ToggleCreatureAutocast(spellInfo, packet.AutocastEnabled); } charmInfo.SetSpellAutocast(spellInfo, packet.AutocastEnabled); }