mirror of
https://github.com/mod-playerbots/azerothcore-wotlk.git
synced 2026-01-16 18:40:28 +00:00
More hooks for Scripts/Modules (#270)
This commit is contained in:
@@ -602,6 +602,8 @@ void ScriptMgr::OnPlayerEnterMap(Map* map, Player* player)
|
||||
ASSERT(map);
|
||||
ASSERT(player);
|
||||
|
||||
FOREACH_SCRIPT(AllMapScript)->OnPlayerEnterAll(map, player);
|
||||
|
||||
FOREACH_SCRIPT(PlayerScript)->OnMapChanged(player);
|
||||
|
||||
SCR_MAP_BGN(WorldMapScript, map, itr, end, entry, IsWorldMap);
|
||||
@@ -621,7 +623,9 @@ void ScriptMgr::OnPlayerLeaveMap(Map* map, Player* player)
|
||||
{
|
||||
ASSERT(map);
|
||||
ASSERT(player);
|
||||
|
||||
|
||||
FOREACH_SCRIPT(AllMapScript)->OnPlayerLeaveAll(map, player);
|
||||
|
||||
SCR_MAP_BGN(WorldMapScript, map, itr, end, entry, IsWorldMap);
|
||||
itr->second->OnPlayerLeave(map, player);
|
||||
SCR_MAP_END;
|
||||
@@ -815,6 +819,8 @@ void ScriptMgr::OnCreatureUpdate(Creature* creature, uint32 diff)
|
||||
{
|
||||
ASSERT(creature);
|
||||
|
||||
FOREACH_SCRIPT(AllCreatureScript)->OnAllCreatureUpdate(creature, diff);
|
||||
|
||||
GET_SCRIPT(CreatureScript, creature->GetScriptId(), tmpscript);
|
||||
tmpscript->OnUpdate(creature, diff);
|
||||
}
|
||||
@@ -1335,19 +1341,33 @@ void ScriptMgr::OnAfterPlayerMoveItemFromInventory(Player* player, Item* it, uin
|
||||
|
||||
void ScriptMgr::OnEquip(Player* player, Item* it, uint8 bag, uint8 slot, bool update)
|
||||
{
|
||||
FOREACH_SCRIPT(PlayerScript)->OnEquip(player, it, bag, slot, update);
|
||||
FOREACH_SCRIPT(PlayerScript)->OnEquip(player, it, bag, slot, update);
|
||||
}
|
||||
|
||||
void ScriptMgr::OnPlayerJoinBG(Player* player, Battleground* bg)
|
||||
{
|
||||
FOREACH_SCRIPT(PlayerScript)->OnPlayerJoinBG(player, bg);
|
||||
FOREACH_SCRIPT(PlayerScript)->OnPlayerJoinBG(player, bg);
|
||||
}
|
||||
|
||||
void ScriptMgr::OnPlayerJoinArena(Player* player, Battleground* bg)
|
||||
{
|
||||
FOREACH_SCRIPT(PlayerScript)->OnPlayerJoinArena(player, bg);
|
||||
FOREACH_SCRIPT(PlayerScript)->OnPlayerJoinArena(player, bg);
|
||||
}
|
||||
|
||||
void ScriptMgr::OnLootItem(Player* player, Item* item, uint32 count, uint64 lootguid)
|
||||
{
|
||||
FOREACH_SCRIPT(PlayerScript)->OnLootItem(player, item, count, lootguid);
|
||||
}
|
||||
|
||||
void ScriptMgr::OnCreateItem(Player* player, Item* item, uint32 count)
|
||||
{
|
||||
FOREACH_SCRIPT(PlayerScript)->OnCreateItem(player, item, count);
|
||||
}
|
||||
|
||||
void ScriptMgr::OnQuestRewardItem(Player* player, Item* item, uint32 count)
|
||||
{
|
||||
FOREACH_SCRIPT(PlayerScript)->OnQuestRewardItem(player, item, count);
|
||||
}
|
||||
|
||||
// Guild
|
||||
void ScriptMgr::OnGuildAddMember(Guild* guild, Player* player, uint8& plRank)
|
||||
@@ -1455,6 +1475,76 @@ void ScriptMgr::OnBeforeUpdateArenaPoints(ArenaTeam* at, std::map<uint32, uint32
|
||||
FOREACH_SCRIPT(GlobalScript)->OnBeforeUpdateArenaPoints(at,ap);
|
||||
}
|
||||
|
||||
uint32 ScriptMgr::DealDamage(Unit* AttackerUnit, Unit *pVictim, uint32 damage, DamageEffectType damagetype)
|
||||
{
|
||||
FOR_SCRIPTS_RET(UnitScript, itr, end, damage)
|
||||
damage = itr->second->DealDamage(AttackerUnit, pVictim, damage, damagetype);
|
||||
return damage;
|
||||
}
|
||||
void ScriptMgr::Creature_SelectLevel(const CreatureTemplate *cinfo, Creature* creature)
|
||||
{
|
||||
FOREACH_SCRIPT(AllCreatureScript)->Creature_SelectLevel(cinfo, creature);
|
||||
}
|
||||
void ScriptMgr::OnHeal(Unit* healer, Unit* reciever, uint32& gain)
|
||||
{
|
||||
FOREACH_SCRIPT(UnitScript)->OnHeal(healer, reciever, gain);
|
||||
}
|
||||
|
||||
void ScriptMgr::OnDamage(Unit* attacker, Unit* victim, uint32& damage)
|
||||
{
|
||||
FOREACH_SCRIPT(UnitScript)->OnDamage(attacker, victim, damage);
|
||||
}
|
||||
|
||||
void ScriptMgr::ModifyPeriodicDamageAurasTick(Unit* target, Unit* attacker, uint32& damage)
|
||||
{
|
||||
FOREACH_SCRIPT(UnitScript)->ModifyPeriodicDamageAurasTick(target, attacker, damage);
|
||||
}
|
||||
|
||||
void ScriptMgr::ModifyMeleeDamage(Unit* target, Unit* attacker, uint32& damage)
|
||||
{
|
||||
FOREACH_SCRIPT(UnitScript)->ModifyMeleeDamage(target, attacker, damage);
|
||||
}
|
||||
|
||||
void ScriptMgr::ModifySpellDamageTaken(Unit* target, Unit* attacker, int32& damage)
|
||||
{
|
||||
FOREACH_SCRIPT(UnitScript)->ModifySpellDamageTaken(target, attacker, damage);
|
||||
}
|
||||
|
||||
void ScriptMgr::ModifyHealRecieved(Unit* target, Unit* attacker, uint32& damage)
|
||||
{
|
||||
FOREACH_SCRIPT(UnitScript)->ModifyHealRecieved(target, attacker, damage);
|
||||
}
|
||||
|
||||
void ScriptMgr::OnPlayerMove(Player* player, MovementInfo movementInfo, uint32 opcode)
|
||||
{
|
||||
FOREACH_SCRIPT(MovementHandlerScript)->OnPlayerMove(player, movementInfo, opcode);
|
||||
}
|
||||
|
||||
AllMapScript::AllMapScript(const char* name)
|
||||
: ScriptObject(name)
|
||||
{
|
||||
ScriptRegistry<AllMapScript>::AddScript(this);
|
||||
}
|
||||
|
||||
AllCreatureScript::AllCreatureScript(const char* name)
|
||||
: ScriptObject(name)
|
||||
{
|
||||
ScriptRegistry<AllCreatureScript>::AddScript(this);
|
||||
}
|
||||
|
||||
UnitScript::UnitScript(const char* name, bool addToScripts)
|
||||
: ScriptObject(name)
|
||||
{
|
||||
if (addToScripts)
|
||||
ScriptRegistry<UnitScript>::AddScript(this);
|
||||
}
|
||||
|
||||
MovementHandlerScript::MovementHandlerScript(const char* name)
|
||||
: ScriptObject(name)
|
||||
{
|
||||
ScriptRegistry<MovementHandlerScript>::AddScript(this);
|
||||
}
|
||||
|
||||
SpellScriptLoader::SpellScriptLoader(const char* name)
|
||||
: ScriptObject(name)
|
||||
{
|
||||
@@ -1636,6 +1726,10 @@ template class ScriptRegistry<PlayerScript>;
|
||||
template class ScriptRegistry<GuildScript>;
|
||||
template class ScriptRegistry<GroupScript>;
|
||||
template class ScriptRegistry<GlobalScript>;
|
||||
template class ScriptRegistry<UnitScript>;
|
||||
template class ScriptRegistry<AllCreatureScript>;
|
||||
template class ScriptRegistry<AllMapScript>;
|
||||
template class ScriptRegistry<MovementHandlerScript>;
|
||||
|
||||
// Undefine utility macros.
|
||||
#undef GET_SCRIPT_RET
|
||||
|
||||
@@ -417,6 +417,77 @@ class ItemScript : public ScriptObject
|
||||
virtual void OnGossipSelectCode(Player* /*player*/, Item* /*item*/, uint32 /*sender*/, uint32 /*action*/, const char* /*code*/) { }
|
||||
};
|
||||
|
||||
class UnitScript : public ScriptObject
|
||||
{
|
||||
protected:
|
||||
|
||||
UnitScript(const char* name, bool addToScripts = true);
|
||||
|
||||
public:
|
||||
// Called when a unit deals healing to another unit
|
||||
virtual void OnHeal(Unit* /*healer*/, Unit* /*reciever*/, uint32& /*gain*/) { }
|
||||
|
||||
// Called when a unit deals damage to another unit
|
||||
virtual void OnDamage(Unit* /*attacker*/, Unit* /*victim*/, uint32& /*damage*/) { }
|
||||
|
||||
// Called when DoT's Tick Damage is being Dealt
|
||||
virtual void ModifyPeriodicDamageAurasTick(Unit* /*target*/, Unit* /*attacker*/, uint32& /*damage*/) { }
|
||||
|
||||
// Called when Melee Damage is being Dealt
|
||||
virtual void ModifyMeleeDamage(Unit* /*target*/, Unit* /*attacker*/, uint32& /*damage*/) { }
|
||||
|
||||
// Called when Spell Damage is being Dealt
|
||||
virtual void ModifySpellDamageTaken(Unit* /*target*/, Unit* /*attacker*/, int32& /*damage*/) { }
|
||||
|
||||
// Called when Heal is Recieved
|
||||
virtual void ModifyHealRecieved(Unit* /*target*/, Unit* /*attacker*/, uint32& /*damage*/) { }
|
||||
|
||||
//Called when Damage is Dealt
|
||||
virtual uint32 DealDamage(Unit* AttackerUnit, Unit *pVictim, uint32 damage, DamageEffectType damagetype) { return damage; }
|
||||
};
|
||||
|
||||
class MovementHandlerScript : public ScriptObject
|
||||
{
|
||||
protected:
|
||||
|
||||
MovementHandlerScript(const char* name);
|
||||
|
||||
public:
|
||||
|
||||
//Called whenever a player moves
|
||||
virtual void OnPlayerMove(Player* /*player*/, MovementInfo /*movementInfo*/, uint32 /*opcode*/) { }
|
||||
};
|
||||
|
||||
class AllMapScript : public ScriptObject
|
||||
{
|
||||
protected:
|
||||
|
||||
AllMapScript(const char* name);
|
||||
|
||||
public:
|
||||
|
||||
// Called when a player enters any Map
|
||||
virtual void OnPlayerEnterAll(Map* /*map*/, Player* /*player*/) { }
|
||||
|
||||
// Called when a player leave any Map
|
||||
virtual void OnPlayerLeaveAll(Map* /*map*/, Player* /*player*/) { }
|
||||
};
|
||||
|
||||
class AllCreatureScript : public ScriptObject
|
||||
{
|
||||
protected:
|
||||
|
||||
AllCreatureScript(const char* name);
|
||||
|
||||
public:
|
||||
|
||||
// Called from End of Creature Update.
|
||||
virtual void OnAllCreatureUpdate(Creature* /*creature*/, uint32 /*diff*/) { }
|
||||
|
||||
// Called from End of Creature SelectLevel.
|
||||
virtual void Creature_SelectLevel(const CreatureTemplate* /*cinfo*/, Creature* /*creature*/) { }
|
||||
};
|
||||
|
||||
class CreatureScript : public ScriptObject, public UpdatableScript<Creature>
|
||||
{
|
||||
protected:
|
||||
@@ -801,6 +872,16 @@ class PlayerScript : public ScriptObject
|
||||
|
||||
// After player enters queue for Arena
|
||||
virtual void OnPlayerJoinArena(Player* player, Battleground* bg) { }
|
||||
|
||||
//After looting item
|
||||
virtual void OnLootItem(Player* player, Item* item, uint32 count, uint64 lootguid) { }
|
||||
|
||||
//After creating item (eg profession item creation)
|
||||
virtual void OnCreateItem(Player* player, Item* item, uint32 count) { }
|
||||
|
||||
//After receiving item as a quest reward
|
||||
virtual void OnQuestRewardItem(Player* player, Item* item, uint32 count) { }
|
||||
|
||||
};
|
||||
|
||||
class GuildScript : public ScriptObject
|
||||
@@ -1105,6 +1186,9 @@ class ScriptMgr
|
||||
void OnEquip(Player* player, Item* it, uint8 bag, uint8 slot, bool update);
|
||||
void OnPlayerJoinBG(Player* player, Battleground* bg);
|
||||
void OnPlayerJoinArena(Player* player, Battleground* bg);
|
||||
void OnLootItem(Player* player, Item* item, uint32 count, uint64 lootguid);
|
||||
void OnCreateItem(Player* player, Item* item, uint32 count);
|
||||
void OnQuestRewardItem(Player* player, Item* item, uint32 count);
|
||||
|
||||
public: /* GuildScript */
|
||||
|
||||
@@ -1141,6 +1225,30 @@ class ScriptMgr
|
||||
uint32 DecreaseScheduledScriptCount(size_t count) { return _scheduledScripts -= count; }
|
||||
bool IsScriptScheduled() const { return _scheduledScripts > 0; }
|
||||
|
||||
public: /* UnitScript */
|
||||
|
||||
void OnHeal(Unit* healer, Unit* reciever, uint32& gain);
|
||||
void OnDamage(Unit* attacker, Unit* victim, uint32& damage);
|
||||
void ModifyPeriodicDamageAurasTick(Unit* target, Unit* attacker, uint32& damage);
|
||||
void ModifyMeleeDamage(Unit* target, Unit* attacker, uint32& damage);
|
||||
void ModifySpellDamageTaken(Unit* target, Unit* attacker, int32& damage);
|
||||
void ModifyHealRecieved(Unit* target, Unit* attacker, uint32& addHealth);
|
||||
uint32 DealDamage(Unit* AttackerUnit, Unit *pVictim, uint32 damage, DamageEffectType damagetype);
|
||||
|
||||
public: /* MovementHandlerScript */
|
||||
|
||||
void OnPlayerMove(Player* player, MovementInfo movementInfo, uint32 opcode);
|
||||
|
||||
public: /* AllCreatureScript */
|
||||
|
||||
void OnAllCreatureUpdate(Creature* creature, uint32 diff);
|
||||
void Creature_SelectLevel(const CreatureTemplate *cinfo, Creature* creature);
|
||||
|
||||
public: /* AllMapScript */
|
||||
|
||||
void OnPlayerEnterMapAll(Map* map, Player* player);
|
||||
void OnPlayerLeaveMapAll(Map* map, Player* player);
|
||||
|
||||
private:
|
||||
|
||||
uint32 _scriptCount;
|
||||
|
||||
Reference in New Issue
Block a user