/* * This file is part of the TrinityCore Project. See AUTHORS file for Copyright information * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation; either version 2 of the License, or (at your * option) any later version. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * more details. * * You should have received a copy of the GNU General Public License along * with this program. If not, see . */ #include "PetPackets.h" #include "PacketOperators.h" namespace WorldPackets::Pet { WorldPacket const* PetSpells::Write() { _worldPacket << PetGUID; _worldPacket << uint16(_CreatureFamily); _worldPacket << uint16(Specialization); _worldPacket << uint32(TimeLimit); _worldPacket << uint8(CommandState); _worldPacket << uint8(Flag); _worldPacket << uint8(ReactState); _worldPacket.append(ActionButtons.data(), ActionButtons.size()); _worldPacket << Size(Actions); _worldPacket << Size(Cooldowns); _worldPacket << Size(SpellHistory); for (uint32 action : Actions) _worldPacket << uint32(action); for (PetSpellCooldown const& cooldown : Cooldowns) { _worldPacket << int32(cooldown.SpellID); _worldPacket << int32(cooldown.Duration); _worldPacket << int32(cooldown.CategoryDuration); _worldPacket << float(cooldown.ModRate); _worldPacket << uint16(cooldown.Category); } for (PetSpellHistory const& history : SpellHistory) { _worldPacket << int32(history.CategoryID); _worldPacket << int32(history.RecoveryTime); _worldPacket << float(history.ChargeModRate); _worldPacket << int8(history.ConsumedCharges); } return &_worldPacket; } WorldPacket const* PetStableResult::Write() { _worldPacket << int32(Result); return &_worldPacket; } WorldPacket const* PetLearnedSpells::Write() { _worldPacket << Size(Spells); for (uint32 spell : Spells) _worldPacket << int32(spell); return &_worldPacket; } WorldPacket const* PetUnlearnedSpells::Write() { _worldPacket << Size(Spells); for (uint32 spell : Spells) _worldPacket << int32(spell); return &_worldPacket; } WorldPacket const* PetNameInvalid::Write() { _worldPacket << uint32(Result); _worldPacket << RenameData.PetGUID; _worldPacket << int32(RenameData.PetNumber); _worldPacket << SizedString::BitsSize<8>(RenameData.NewName); _worldPacket << OptionalInit(RenameData.DeclinedNames); if (RenameData.DeclinedNames) { for (int32 i = 0; i < MAX_DECLINED_NAME_CASES; i++) _worldPacket << SizedString::BitsSize<7>(RenameData.DeclinedNames->name[i]); _worldPacket.FlushBits(); for (int32 i = 0; i < MAX_DECLINED_NAME_CASES; i++) _worldPacket << SizedString::Data(RenameData.DeclinedNames->name[i]); } else _worldPacket.FlushBits(); _worldPacket << SizedString::Data(RenameData.NewName); return &_worldPacket; } void PetRename::Read() { _worldPacket >> RenameData.PetGUID; _worldPacket >> RenameData.PetNumber; _worldPacket >> SizedString::BitsSize<8>(RenameData.NewName); _worldPacket >> OptionalInit(RenameData.DeclinedNames); if (RenameData.DeclinedNames) { for (int32 i = 0; i < MAX_DECLINED_NAME_CASES; i++) _worldPacket >> SizedString::BitsSize<7>(RenameData.DeclinedNames->name[i]); for (int32 i = 0; i < MAX_DECLINED_NAME_CASES; i++) _worldPacket >> SizedString::Data(RenameData.DeclinedNames->name[i]); } _worldPacket >> SizedString::Data(RenameData.NewName); } void PetAction::Read() { _worldPacket >> PetGUID; _worldPacket >> Action; _worldPacket >> TargetGUID; _worldPacket >> ActionPosition; } void PetStopAttack::Read() { _worldPacket >> PetGUID; } void PetSetAction::Read() { _worldPacket >> PetGUID; _worldPacket >> Index; _worldPacket >> Action; } void PetAbandon::Read() { _worldPacket >> Pet; } void PetAbandonByNumber::Read() { _worldPacket >> PetNumber; } void PetSpellAutocast::Read() { _worldPacket >> PetGUID; _worldPacket >> SpellID; _worldPacket >> Bits<1>(AutocastEnabled); } void DismissCritter::Read() { _worldPacket >> CritterGUID; } void PetCancelAura::Read() { _worldPacket >> PetGUID; _worldPacket >> SpellID; } WorldPacket const* SetPetSpecialization::Write() { _worldPacket << uint16(SpecID); return &_worldPacket; } WorldPacket const* PetActionFeedback::Write() { _worldPacket << int32(Response); _worldPacket << int32(SpellID); return &_worldPacket; } WorldPacket const* PetActionSound::Write() { _worldPacket << UnitGUID; _worldPacket << int32(Action); return &_worldPacket; } WorldPacket const* PetTameFailure::Write() { _worldPacket << uint32(Result); return &_worldPacket; } WorldPacket const* PetMode::Write() { _worldPacket << PetGUID; _worldPacket << uint8(CommandState); _worldPacket << uint8(Flag); _worldPacket << uint8(ReactState); return &_worldPacket; } }