#pragma once template struct ScopedOverride { ScopedOverride() { s_refCount++; } ~ScopedOverride() { s_refCount--; } TP_NOCOPYMOVE(ScopedOverride); static bool IsOverriden() { return s_refCount > 0; } private: static thread_local uint32_t s_refCount; }; namespace details { struct Equip { }; struct Unequip { }; struct SaveLoad { }; struct Experience { }; struct Activate { }; struct Inventory { }; struct ExtraData { }; struct Quest { }; struct SpellCast { }; } // namespace details using ScopedReferencesOverride = ScopedOverride; using ScopedEquipOverride = ScopedOverride; using ScopedUnequipOverride = ScopedOverride; using ScopedSaveLoadOverride = ScopedOverride; using ScopedExperienceOverride = ScopedOverride; using ScopedActivateOverride = ScopedOverride; using ScopedInventoryOverride = ScopedOverride; using ScopedExtraDataOverride = ScopedOverride; using ScopedQuestOverride = ScopedOverride; using ScopedSpellCastOverride = ScopedOverride;