mirror of
https://github.com/mod-playerbots/azerothcore-wotlk.git
synced 2026-01-18 19:35:42 +00:00
feat(Core): improved some hooks (#6302)
This commit is contained in:
@@ -1344,13 +1344,13 @@ void ScriptMgr::OnShutdown()
|
||||
FOREACH_SCRIPT(WorldScript)->OnShutdown();
|
||||
}
|
||||
|
||||
bool ScriptMgr::OnCriteriaCheck(uint32 scriptId, Player* source, Unit* target)
|
||||
bool ScriptMgr::OnCriteriaCheck(uint32 scriptId, Player* source, Unit* target, uint32 criteria_id)
|
||||
{
|
||||
ASSERT(source);
|
||||
// target can be nullptr.
|
||||
|
||||
GET_SCRIPT_RET(AchievementCriteriaScript, scriptId, tmpscript, false);
|
||||
return tmpscript->OnCheck(source, target);
|
||||
return tmpscript->OnCheck(source, target, criteria_id);
|
||||
}
|
||||
|
||||
// Player
|
||||
@@ -1650,11 +1650,33 @@ void ScriptMgr::OnPlayerRemoveFromBattleground(Player* player, Battleground* bg)
|
||||
FOREACH_SCRIPT(PlayerScript)->OnRemoveFromBattleground(player, bg);
|
||||
}
|
||||
|
||||
bool ScriptMgr::OnBeforeAchievementComplete(Player* player, AchievementEntry const* achievement)
|
||||
{
|
||||
bool ret = true;
|
||||
|
||||
FOR_SCRIPTS_RET(PlayerScript, itr, end, ret) // return true by default if not scripts
|
||||
if (!itr->second->OnBeforeAchiComplete(player, achievement))
|
||||
ret = false; // we change ret value only when scripts return false
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
void ScriptMgr::OnAchievementComplete(Player* player, AchievementEntry const* achievement)
|
||||
{
|
||||
FOREACH_SCRIPT(PlayerScript)->OnAchiComplete(player, achievement);
|
||||
}
|
||||
|
||||
bool ScriptMgr::OnBeforeCriteriaProgress(Player* player, AchievementCriteriaEntry const* criteria)
|
||||
{
|
||||
bool ret = true;
|
||||
|
||||
FOR_SCRIPTS_RET(PlayerScript, itr, end, ret) // return true by default if not scripts
|
||||
if (!itr->second->OnBeforeCriteriaProgress(player, criteria))
|
||||
ret = false; // we change ret value only when scripts return false
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
void ScriptMgr::OnCriteriaProgress(Player* player, AchievementCriteriaEntry const* criteria)
|
||||
{
|
||||
FOREACH_SCRIPT(PlayerScript)->OnCriteriaProgress(player, criteria);
|
||||
@@ -1981,9 +2003,25 @@ void ScriptMgr::OnBeforeDropAddItem(Player const* player, Loot& loot, bool canRa
|
||||
FOREACH_SCRIPT(GlobalScript)->OnBeforeDropAddItem(player, loot, canRate, lootMode, LootStoreItem, store);
|
||||
}
|
||||
|
||||
void ScriptMgr::OnItemRoll(Player const* player, LootStoreItem const* LootStoreItem, float& chance, Loot& loot, LootStore const& store)
|
||||
bool ScriptMgr::OnItemRoll(Player const* player, LootStoreItem const* LootStoreItem, float& chance, Loot& loot, LootStore const& store)
|
||||
{
|
||||
FOREACH_SCRIPT(GlobalScript)->OnItemRoll(player, LootStoreItem, chance, loot, store);
|
||||
bool ret = true; // return true by default
|
||||
|
||||
FOR_SCRIPTS_RET(GlobalScript, itr, end, ret)
|
||||
if (!itr->second->OnItemRoll(player, LootStoreItem, chance, loot, store))
|
||||
ret = false; // we change ret value only when a script returns false
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
bool ScriptMgr::OnBeforeLootEqualChanced(Player const* player, LootStoreItemList EqualChanced, Loot& loot, LootStore const& store) {
|
||||
bool ret = true; // return true by default
|
||||
|
||||
FOR_SCRIPTS_RET(GlobalScript, itr, end, ret)
|
||||
if (!itr->second->OnBeforeLootEqualChanced(player, EqualChanced, loot, store))
|
||||
ret = false; // we change ret value only when a script returns false
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
void ScriptMgr::OnInitializeLockedDungeons(Player* player, uint8& level, uint32& lockData, lfg::LFGDungeonData const* dungeon)
|
||||
|
||||
@@ -688,8 +688,7 @@ protected:
|
||||
public:
|
||||
[[nodiscard]] bool IsDatabaseBound() const override { return true; }
|
||||
|
||||
// deprecated/legacy
|
||||
[[nodiscard]] virtual bool OnCheck(Player* /*source*/, Unit* /*target*/) { return true; };
|
||||
[[nodiscard]] virtual bool OnCheck(Player* /*source*/, Unit* /*target*/, uint32 /*criteria_id*/) { return true; };
|
||||
};
|
||||
|
||||
class PlayerScript : public ScriptObject
|
||||
@@ -830,9 +829,15 @@ public:
|
||||
// Called when a player complete an achievement
|
||||
virtual void OnAchiComplete(Player* /*player*/, AchievementEntry const* /*achievement*/) { }
|
||||
|
||||
// Called before player complete an achievement, can be used to disable achievements in certain conditions
|
||||
virtual bool OnBeforeAchiComplete(Player* /*player*/, AchievementEntry const* /*achievement*/) { return true; }
|
||||
|
||||
// Called when a player complete an achievement criteria
|
||||
virtual void OnCriteriaProgress(Player* /*player*/, AchievementCriteriaEntry const* /*criteria*/) { }
|
||||
|
||||
// Called before player complete an achievement criteria, can be used to disable achievement criteria in certain conditions
|
||||
virtual bool OnBeforeCriteriaProgress(Player* /*player*/, AchievementCriteriaEntry const* /*criteria*/) { return true; }
|
||||
|
||||
// Called when an Achievement is saved to DB
|
||||
virtual void OnAchiSave(SQLTransaction& /*trans*/, Player* /*player*/, uint16 /*achId*/, CompletedAchievementData /*achiData*/) { }
|
||||
|
||||
@@ -1140,8 +1145,8 @@ public:
|
||||
// loot
|
||||
virtual void OnAfterRefCount(Player const* /*player*/, LootStoreItem* /*LootStoreItem*/, Loot& /*loot*/, bool /*canRate*/, uint16 /*lootMode*/, uint32& /*maxcount*/, LootStore const& /*store*/) { }
|
||||
virtual void OnBeforeDropAddItem(Player const* /*player*/, Loot& /*loot*/, bool /*canRate*/, uint16 /*lootMode*/, LootStoreItem* /*LootStoreItem*/, LootStore const& /*store*/) { }
|
||||
virtual void OnItemRoll(Player const* /*player*/, LootStoreItem const* /*LootStoreItem*/, float& /*chance*/, Loot& /*loot*/, LootStore const& /*store*/) { };
|
||||
|
||||
virtual bool OnItemRoll(Player const* /*player*/, LootStoreItem const* /*LootStoreItem*/, float& /*chance*/, Loot& /*loot*/, LootStore const& /*store*/) { return true; };
|
||||
virtual bool OnBeforeLootEqualChanced(Player const* /*player*/, LootStoreItemList /*EqualChanced*/, Loot& /*loot*/, LootStore const& /*store*/) { return true; }
|
||||
virtual void OnInitializeLockedDungeons(Player* /*player*/, uint8& /*level*/, uint32& /*lockData*/, lfg::LFGDungeonData const* /*dungeon*/) { }
|
||||
virtual void OnAfterInitializeLockedDungeons(Player* /*player*/) { }
|
||||
|
||||
@@ -1549,7 +1554,7 @@ public: /* TransportScript */
|
||||
void OnRelocate(Transport* transport, uint32 waypointId, uint32 mapId, float x, float y, float z);
|
||||
|
||||
public: /* AchievementCriteriaScript */
|
||||
bool OnCriteriaCheck(uint32 scriptId, Player* source, Unit* target);
|
||||
bool OnCriteriaCheck(uint32 scriptId, Player* source, Unit* target, uint32 criteria_id);
|
||||
|
||||
public: /* PlayerScript */
|
||||
void OnBeforePlayerUpdate(Player* player, uint32 p_time);
|
||||
@@ -1596,7 +1601,9 @@ public: /* PlayerScript */
|
||||
void OnPlayerAddToBattleground(Player* player, Battleground* bg);
|
||||
void OnPlayerRemoveFromBattleground(Player* player, Battleground* bg);
|
||||
void OnAchievementComplete(Player* player, AchievementEntry const* achievement);
|
||||
bool OnBeforeAchievementComplete(Player* player, AchievementEntry const* achievement);
|
||||
void OnCriteriaProgress(Player* player, AchievementCriteriaEntry const* criteria);
|
||||
bool OnBeforeCriteriaProgress(Player* player, AchievementCriteriaEntry const* criteria);
|
||||
void OnAchievementSave(SQLTransaction& trans, Player* player, uint16 achiId, CompletedAchievementData achiData);
|
||||
void OnCriteriaSave(SQLTransaction& trans, Player* player, uint16 critId, CriteriaProgress criteriaData);
|
||||
void OnGossipSelect(Player* player, uint32 menu_id, uint32 sender, uint32 action);
|
||||
@@ -1727,7 +1734,8 @@ public: /* GlobalScript */
|
||||
void OnBeforeUpdateArenaPoints(ArenaTeam* at, std::map<ObjectGuid, uint32>& ap);
|
||||
void OnAfterRefCount(Player const* player, Loot& loot, bool canRate, uint16 lootMode, LootStoreItem* LootStoreItem, uint32& maxcount, LootStore const& store);
|
||||
void OnBeforeDropAddItem(Player const* player, Loot& loot, bool canRate, uint16 lootMode, LootStoreItem* LootStoreItem, LootStore const& store);
|
||||
void OnItemRoll(Player const* player, LootStoreItem const* LootStoreItem, float& chance, Loot& loot, LootStore const& store);
|
||||
bool OnItemRoll(Player const* player, LootStoreItem const* LootStoreItem, float& chance, Loot& loot, LootStore const& store);
|
||||
bool OnBeforeLootEqualChanced(Player const* player, LootStoreItemList EqualChanced, Loot& loot, LootStore const& store);
|
||||
void OnInitializeLockedDungeons(Player* player, uint8& level, uint32& lockData, lfg::LFGDungeonData const* dungeon);
|
||||
void OnAfterInitializeLockedDungeons(Player* player);
|
||||
void OnAfterUpdateEncounterState(Map* map, EncounterCreditType type, uint32 creditEntry, Unit* source, Difficulty difficulty_fixed, DungeonEncounterList const* encounters, uint32 dungeonCompleted, bool updated);
|
||||
|
||||
Reference in New Issue
Block a user