/*
* This file is part of the AzerothCore 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 Affero 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 Affero 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 .
*/
#ifndef SCRIPT_OBJECT_MISC_SCRIPT_H_
#define SCRIPT_OBJECT_MISC_SCRIPT_H_
#include "ObjectGuid.h"
#include "ScriptObject.h"
#include
enum MiscHook
{
MISCHOOK_ON_CONSTRUCT_OBJECT,
MISCHOOK_ON_DESTRUCT_OBJECT,
MISCHOOK_ON_CONSTRUCT_PLAYER,
MISCHOOK_ON_DESTRUCT_PLAYER,
MISCHOOK_ON_CONSTRUCT_GROUP,
MISCHOOK_ON_DESTRUCT_GROUP,
MISCHOOK_ON_CONSTRUCT_INSTANCE_SAVE,
MISCHOOK_ON_DESTRUCT_INSTANCE_SAVE,
MISCHOOK_ON_ITEM_CREATE,
MISCHOOK_CAN_APPLY_SOULBOUND_FLAG,
MISCHOOK_CAN_ITEM_APPLY_EQUIP_SPELL,
MISCHOOK_CAN_SEND_AUCTIONHELLO,
MISCHOOK_VALIDATE_SPELL_AT_CAST_SPELL,
MISCHOOK_VALIDATE_SPELL_AT_CAST_SPELL_RESULT,
MISCHOOK_ON_AFTER_LOOT_TEMPLATE_PROCESS,
MISCHOOK_ON_PLAYER_SET_PHASE,
MISCHOOK_ON_INSTANCE_SAVE,
MISCHOOK_GET_DIALOG_STATUS,
MISCHOOK_END
};
class MiscScript : public ScriptObject
{
protected:
MiscScript(const char* name, std::vector enabledHooks = std::vector());
public:
[[nodiscard]] bool IsDatabaseBound() const override { return false; }
virtual void OnConstructObject(Object* /*origin*/) { }
virtual void OnDestructObject(Object* /*origin*/) { }
virtual void OnConstructPlayer(Player* /*origin*/) { }
virtual void OnDestructPlayer(Player* /*origin*/) { }
virtual void OnConstructGroup(Group* /*origin*/) { }
virtual void OnDestructGroup(Group* /*origin*/) { }
virtual void OnConstructInstanceSave(InstanceSave* /*origin*/) { }
virtual void OnDestructInstanceSave(InstanceSave* /*origin*/) { }
virtual void OnItemCreate(Item* /*item*/, ItemTemplate const* /*itemProto*/, Player const* /*owner*/) { }
[[nodiscard]] virtual bool CanApplySoulboundFlag(Item* /*item*/, ItemTemplate const* /*proto*/) { return true; }
[[nodiscard]] virtual bool CanItemApplyEquipSpell(Player* /*player*/, Item* /*item*/) { return true; }
[[nodiscard]] virtual bool CanSendAuctionHello(WorldSession const* /*session*/, ObjectGuid /*guid*/, Creature* /*creature*/) { return true; }
virtual void ValidateSpellAtCastSpell(Player* /*player*/, uint32& /*oldSpellId*/, uint32& /*spellId*/, uint8& /*castCount*/, uint8& /*castFlags*/) { }
virtual void ValidateSpellAtCastSpellResult(Player* /*player*/, Unit* /*mover*/, Spell* /*spell*/, uint32 /*oldSpellId*/, uint32 /*spellId*/) { }
virtual void OnAfterLootTemplateProcess(Loot* /*loot*/, LootTemplate const* /*tab*/, LootStore const& /*store*/, Player* /*lootOwner*/, bool /*personal*/, bool /*noEmptyError*/, uint16 /*lootMode*/) { }
virtual void OnPlayerSetPhase(const AuraEffect* /*auraEff*/, AuraApplication const* /*aurApp*/, uint8 /*mode*/, bool /*apply*/, uint32& /*newPhase*/) { }
virtual void OnInstanceSave(InstanceSave* /*instanceSave*/) { }
/**
* @brief This hook called before get Quest Dialog Status
*
* @param player Contains information about the Player
* @param questgiver Contains information about the Object
*/
virtual void GetDialogStatus(Player* /*player*/, Object* /*questgiver*/) { }
};
#endif