feat(Core/Scripts): Optimize PetScript (#18720)

* Add files via upload

* Add files via upload

* Add files via upload

* Add files via upload

* Add files via upload

* Update PetScript.h
This commit is contained in:
天鹿
2024-04-12 21:55:04 +08:00
committed by GitHub
parent 55233dd17b
commit 574bdc2869
2 changed files with 27 additions and 49 deletions

View File

@@ -21,79 +21,45 @@
void ScriptMgr::OnInitStatsForLevel(Guardian* guardian, uint8 petlevel)
{
ExecuteScript<PetScript>([&](PetScript* script)
{
script->OnInitStatsForLevel(guardian, petlevel);
});
CALL_ENABLED_HOOKS(PetScript, PETHOOK_ON_INIT_STATS_FOR_LEVEL, script->OnInitStatsForLevel(guardian, petlevel));
}
void ScriptMgr::OnCalculateMaxTalentPointsForLevel(Pet* pet, uint8 level, uint8& points)
{
ExecuteScript<PetScript>([&](PetScript* script)
{
script->OnCalculateMaxTalentPointsForLevel(pet, level, points);
});
CALL_ENABLED_HOOKS(PetScript, PETHOOK_ON_CALCULATE_MAX_TALENT_POINTS_FOR_LEVEL, script->OnCalculateMaxTalentPointsForLevel(pet, level, points));
}
bool ScriptMgr::CanUnlearnSpellSet(Pet* pet, uint32 level, uint32 spell)
{
auto ret = IsValidBoolScript<PetScript>([&](PetScript* script)
{
return !script->CanUnlearnSpellSet(pet, level, spell);
});
if (ret && *ret)
{
return false;
}
return true;
CALL_ENABLED_BOOLEAN_HOOKS(PetScript, PETHOOK_CAN_UNLEARN_SPELL_SET, !script->CanUnlearnSpellSet(pet, level, spell));
}
bool ScriptMgr::CanUnlearnSpellDefault(Pet* pet, SpellInfo const* spellInfo)
{
auto ret = IsValidBoolScript<PetScript>([&](PetScript* script)
{
return !script->CanUnlearnSpellDefault(pet, spellInfo);
});
if (ret && *ret)
{
return false;
}
return true;
CALL_ENABLED_BOOLEAN_HOOKS(PetScript, PETHOOK_CAN_UNLEARN_SPELL_DEFAULT, !script->CanUnlearnSpellDefault(pet, spellInfo));
}
bool ScriptMgr::CanResetTalents(Pet* pet)
{
auto ret = IsValidBoolScript<PetScript>([&](PetScript* script)
{
return !script->CanResetTalents(pet);
});
if (ret && *ret)
{
return false;
}
return true;
CALL_ENABLED_BOOLEAN_HOOKS(PetScript, PETHOOK_CAN_RESET_TALENTS, !script->CanResetTalents(pet));
}
void ScriptMgr::OnPetAddToWorld(Pet* pet)
{
ASSERT(pet);
ExecuteScript<PetScript>([&](PetScript* script)
{
script->OnPetAddToWorld(pet);
});
CALL_ENABLED_HOOKS(PetScript, PETHOOK_ON_PET_ADD_TO_WORLD, script->OnPetAddToWorld(pet));
}
PetScript::PetScript(const char* name)
: ScriptObject(name)
PetScript::PetScript(const char* name, std::vector<uint16> enabledHooks)
: ScriptObject(name, PETHOOK_END)
{
ScriptRegistry<PetScript>::AddScript(this);
// If empty - enable all available hooks.
if (enabledHooks.empty())
for (uint16 i = 0; i < PETHOOK_END; ++i)
enabledHooks.emplace_back(i);
ScriptRegistry<PetScript>::AddScript(this, std::move(enabledHooks));
}
template class AC_GAME_API ScriptRegistry<PetScript>;

View File

@@ -19,11 +19,23 @@
#define SCRIPT_OBJECT_PET_SCRIPT_H_
#include "ScriptObject.h"
#include <vector>
enum PetHook
{
PETHOOK_ON_INIT_STATS_FOR_LEVEL,
PETHOOK_ON_CALCULATE_MAX_TALENT_POINTS_FOR_LEVEL,
PETHOOK_CAN_UNLEARN_SPELL_SET,
PETHOOK_CAN_UNLEARN_SPELL_DEFAULT,
PETHOOK_CAN_RESET_TALENTS,
PETHOOK_ON_PET_ADD_TO_WORLD,
PETHOOK_END
};
class PetScript : public ScriptObject
{
protected:
PetScript(const char* name);
PetScript(const char* name, std::vector<uint16> enabledHooks = std::vector<uint16>());
public:
[[nodiscard]] bool IsDatabaseBound() const override { return false; }