mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-16 07:30:42 +01:00
Core/Instance: add new hook & method
(cherry picked from commit 953b05459a)
This commit is contained in:
@@ -681,6 +681,35 @@ void InstanceScript::DoRemoveAurasDueToSpellOnPlayers(uint32 spell, bool include
|
||||
}
|
||||
}
|
||||
|
||||
void InstanceScript::DoRemoveAurasDueToSpellOnPlayer(Player* player, uint32 spell, bool includePets /*= false*/, bool includeControlled /*= false*/)
|
||||
{
|
||||
if (!player)
|
||||
return;
|
||||
|
||||
player->RemoveAurasDueToSpell(spell);
|
||||
|
||||
if (!includePets)
|
||||
return;
|
||||
|
||||
for (uint8 itr2 = 0; itr2 < MAX_SUMMON_SLOT; ++itr2)
|
||||
{
|
||||
ObjectGuid summonGUID = player->m_SummonSlot[itr2];
|
||||
if (!summonGUID.IsEmpty())
|
||||
if (Creature* summon = instance->GetCreature(summonGUID))
|
||||
summon->RemoveAurasDueToSpell(spell);
|
||||
}
|
||||
|
||||
if (!includeControlled)
|
||||
return;
|
||||
|
||||
for (auto itr2 = player->m_Controlled.begin(); itr2 != player->m_Controlled.end(); ++itr2)
|
||||
{
|
||||
if (Unit* controlled = *itr2)
|
||||
if (controlled->IsInWorld() && controlled->GetTypeId() == TYPEID_UNIT)
|
||||
controlled->RemoveAurasDueToSpell(spell);
|
||||
}
|
||||
}
|
||||
|
||||
void InstanceScript::DoCastSpellOnPlayers(uint32 spell, bool includePets /*= false*/, bool includeControlled /*= false*/)
|
||||
{
|
||||
Map::PlayerList const& playerList = instance->GetPlayers();
|
||||
|
||||
@@ -200,6 +200,8 @@ class TC_GAME_API InstanceScript : public ZoneScript
|
||||
|
||||
// Called when a player successfully enters the instance.
|
||||
virtual void OnPlayerEnter(Player* /*player*/) { }
|
||||
// Called when a player successfully leaves the instance.
|
||||
virtual void OnPlayerLeave(Player* /*player*/) { }
|
||||
|
||||
// Handle open / close objects
|
||||
// * use HandleGameObject(0, boolen, GO); in OnObjectCreate in instance scripts
|
||||
@@ -228,6 +230,7 @@ class TC_GAME_API InstanceScript : public ZoneScript
|
||||
|
||||
// Remove Auras due to Spell on all players in instance
|
||||
void DoRemoveAurasDueToSpellOnPlayers(uint32 spell, bool includePets = false, bool includeControlled = false);
|
||||
void DoRemoveAurasDueToSpellOnPlayer(Player* player, uint32 spell, bool includePets = false, bool includeControlled = false);
|
||||
|
||||
// Cast spell on all players in instance
|
||||
void DoCastSpellOnPlayers(uint32 spell, bool includePets = false, bool includeControlled = false);
|
||||
|
||||
@@ -4058,12 +4058,19 @@ void InstanceMap::Update(uint32 t_diff)
|
||||
void InstanceMap::RemovePlayerFromMap(Player* player, bool remove)
|
||||
{
|
||||
TC_LOG_DEBUG("maps", "MAP: Removing player '%s' from instance '%u' of map '%s' before relocating to another map", player->GetName().c_str(), GetInstanceId(), GetMapName());
|
||||
//if last player set unload timer
|
||||
|
||||
if (i_data)
|
||||
i_data->OnPlayerLeave(player);
|
||||
|
||||
// if last player set unload timer
|
||||
if (!m_unloadTimer && m_mapRefManager.getSize() == 1)
|
||||
m_unloadTimer = m_unloadWhenEmpty ? MIN_UNLOAD_DELAY : std::max(sWorld->getIntConfig(CONFIG_INSTANCE_UNLOAD_DELAY), (uint32)MIN_UNLOAD_DELAY);
|
||||
|
||||
if (i_scenario)
|
||||
i_scenario->OnPlayerExit(player);
|
||||
|
||||
Map::RemovePlayerFromMap(player, remove);
|
||||
|
||||
// for normal instances schedule the reset after all players have left
|
||||
SetResetSchedule(true);
|
||||
sInstanceSaveMgr->UnloadInstanceSave(GetInstanceId());
|
||||
|
||||
Reference in New Issue
Block a user