/* EQEmu: EQEmulator Copyright (C) 2001-2026 EQEmu Development Team 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 3 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 . */ #pragma once #include "common/struct_strategy.h" #include "common/patches/rof2.h" class EQStreamIdentifier; namespace TOB { extern void Register(EQStreamIdentifier& into); extern void Reload(); class Strategy : public StructStrategy { public: Strategy(); protected: virtual std::string Describe() const; virtual const EQ::versions::ClientVersion ClientVersion() const; //magic macro to declare our opcode processors #include "ss_declare.h" #include "tob_ops.h" }; class MessageComponent : public Titanium::MessageComponent { public: MessageComponent() = default; ~MessageComponent() override = default; std::unique_ptr Formatted(uint32_t color, uint32_t id, const FormattedArgs& args) const override; std::unique_ptr InterruptSpell(uint32_t message, uint32_t spawn_id, const char* spell_link) const override; std::unique_ptr InterruptSpellOther(Mob* sender, uint32_t message, uint32_t spawn_id, const char* name, const char* spell_link) const override; protected: [[nodiscard]] uint32_t ResolveID(uint32_t id) const override; void ResolveArguments(uint32_t id, std::array& args) const override; }; class BuffComponent : public UF::BuffComponent { public: BuffComponent(uint32_t maxLongBuffs, uint32_t maxShortBuffs) : UF::BuffComponent(maxLongBuffs, maxShortBuffs) {} BuffComponent() = delete; ~BuffComponent() override = default; std::unique_ptr BuffDefinition(Mob* mob, const Buffs_Struct& buff, uint32_t slot, bool fade) const override; std::unique_ptr RefreshBuffs(EmuOpcode opcode, Mob* mob, bool remove, bool buff_timers_suspended, const std::vector& slots) const override; bool NeedsWearMessage() const override; void SetRefreshType(std::unique_ptr& packet, uint8_t refresh_type) const override; }; }; /*TOB*/