aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/server/game/Entities/GameObject/GameObject.cpp16
-rw-r--r--src/server/game/Entities/GameObject/GameObject.h2
-rw-r--r--src/server/game/Spells/SpellEffects.cpp2
3 files changed, 11 insertions, 9 deletions
diff --git a/src/server/game/Entities/GameObject/GameObject.cpp b/src/server/game/Entities/GameObject/GameObject.cpp
index d3d2021ab1b..7e13e4f2f37 100644
--- a/src/server/game/Entities/GameObject/GameObject.cpp
+++ b/src/server/game/Entities/GameObject/GameObject.cpp
@@ -2563,12 +2563,14 @@ void GameObject::SwitchDoorOrButton(bool activate, bool alternative /* = false *
SetGoState(GO_STATE_READY);
}
-void GameObject::Use(Unit* user)
+void GameObject::Use(Unit* user, bool ignoreCastInProgress /*= false*/)
{
// by default spell caster is user
Unit* spellCaster = user;
uint32 spellId = 0;
- bool triggered = false;
+ CastSpellExtraArgs spellArgs;
+ if (ignoreCastInProgress)
+ spellArgs.TriggerFlags |= TRIGGERED_IGNORE_CAST_IN_PROGRESS;
if (Player* playerUser = user->ToPlayer())
{
@@ -2960,7 +2962,7 @@ void GameObject::Use(Unit* user)
if (fishingPool)
{
- fishingPool->Use(player);
+ fishingPool->Use(player, ignoreCastInProgress);
SetLootState(GO_JUST_DEACTIVATED);
}
else
@@ -3043,7 +3045,7 @@ void GameObject::Use(Unit* user)
player->CastSpell(player, info->ritual.animSpell, true);
// for this case, summoningRitual.spellId is always triggered
- triggered = true;
+ spellArgs.TriggerFlags = TRIGGERED_FULL_MASK;
}
// full amount unique participants including original summoner
@@ -3059,7 +3061,7 @@ void GameObject::Use(Unit* user)
// spell have reagent and mana cost but it not expected use its
// it triggered spell in fact cast at currently channeled GO
spellId = 61993;
- triggered = true;
+ spellArgs.TriggerFlags = TRIGGERED_FULL_MASK;
}
// Cast casterTargetSpell at a random GO user
@@ -3439,10 +3441,10 @@ void GameObject::Use(Unit* user)
sOutdoorPvPMgr->HandleCustomSpell(player, spellId, this);
if (spellCaster)
- spellCaster->CastSpell(user, spellId, triggered);
+ spellCaster->CastSpell(user, spellId, spellArgs);
else
{
- SpellCastResult castResult = CastSpell(user, spellId);
+ SpellCastResult castResult = CastSpell(user, spellId, spellArgs);
if (castResult == SPELL_FAILED_SUCCESS)
{
switch (GetGoType())
diff --git a/src/server/game/Entities/GameObject/GameObject.h b/src/server/game/Entities/GameObject/GameObject.h
index 98c71a2a2f9..57bc2c5d72c 100644
--- a/src/server/game/Entities/GameObject/GameObject.h
+++ b/src/server/game/Entities/GameObject/GameObject.h
@@ -293,7 +293,7 @@ class TC_GAME_API GameObject : public WorldObject, public GridObject<GameObject>
void EnableCollision(bool enable);
- void Use(Unit* user);
+ void Use(Unit* user, bool ignoreCastInProgress = false);
LootState getLootState() const { return m_lootState; }
// Note: unit is only used when s = GO_ACTIVATED
diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp
index 1cf1a1dabc6..775cc515f76 100644
--- a/src/server/game/Spells/SpellEffects.cpp
+++ b/src/server/game/Spells/SpellEffects.cpp
@@ -1650,7 +1650,7 @@ void Spell::EffectOpenLock()
}
if (gameObjTarget)
- gameObjTarget->Use(player);
+ gameObjTarget->Use(player, true);
else if (itemTarget)
{
itemTarget->SetItemFlag(ITEM_FIELD_FLAG_UNLOCKED);