diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/game/GameObject.cpp | 26 | ||||
-rw-r--r-- | src/game/SpellEffects.cpp | 4 | ||||
-rw-r--r-- | src/game/SpellMgr.cpp | 1 |
3 files changed, 20 insertions, 11 deletions
diff --git a/src/game/GameObject.cpp b/src/game/GameObject.cpp index 574563edcf7..cf6f6d96e75 100644 --- a/src/game/GameObject.cpp +++ b/src/game/GameObject.cpp @@ -303,20 +303,19 @@ void GameObject::Update(uint32 /*p_time*/) if(m_cooldownTime >= time(NULL)) return; + if(!goInfo->trap.spellId) + return; + bool IsBattleGroundTrap = false; //FIXME: this is activation radius (in different casting radius that must be selected from spell data) //TODO: move activated state code (cast itself) to GO_ACTIVATED, in this place only check activating and set state - float radius = 0.0f; - const SpellEntry *spellEntry = sSpellStore.LookupEntry(m_spellId); - if(spellEntry) - radius = GetSpellRadiusForHostile(sSpellRadiusStore.LookupEntry(spellEntry->EffectRadiusIndex[0])); - else - radius = goInfo->trap.radius; + float radius = goInfo->trap.radius; + if(!radius) // i think this is a hack, spell radius is determined by trap radius (spell itself does not have radius) + if(const SpellEntry *spellEntry = sSpellStore.LookupEntry(m_spellId)) + radius = goInfo->trap.radius; if(!radius) { - if(goInfo->trap.cooldown != 3) // cast in other case (at some triggering/linked go/etc explicit call) - return; - else + if(goInfo->trap.cooldown == 3) // cast in other case (at some triggering/linked go/etc explicit call) { if(m_respawnTime > 0) break; @@ -324,13 +323,15 @@ void GameObject::Update(uint32 /*p_time*/) radius = goInfo->trap.cooldown; // battlegrounds gameobjects has data2 == 0 && data5 == 3 IsBattleGroundTrap = true; } + if(!radius) + return; } bool NeedDespawn = (goInfo->trap.charges != 0); // Note: this hack with search required until GO casting not implemented // search unfriendly creature - if(owner && NeedDespawn) // hunter trap + if(owner) // hunter trap { Trinity::AnyUnfriendlyNoTotemUnitInObjectRangeCheck checker(this, owner, radius); Trinity::UnitSearcher<Trinity::AnyUnfriendlyNoTotemUnitInObjectRangeCheck> searcher(this, ok, checker); @@ -354,7 +355,10 @@ void GameObject::Update(uint32 /*p_time*/) CastSpell(ok, goInfo->trap.spellId); //caster->CastSpell(ok, goInfo->trap.spellId, true, 0, 0, GetGUID()); - m_cooldownTime = time(NULL) + 4; // 4 seconds + if(goInfo->trap.cooldown) + m_cooldownTime = time(NULL) + goInfo->trap.cooldown; + else + m_cooldownTime = time(NULL) + 4; // 4 seconds if(NeedDespawn) SetLootState(GO_JUST_DEACTIVATED); // can be despawned or destroyed diff --git a/src/game/SpellEffects.cpp b/src/game/SpellEffects.cpp index 6847e96f5af..c69069b82a9 100644 --- a/src/game/SpellEffects.cpp +++ b/src/game/SpellEffects.cpp @@ -4892,6 +4892,10 @@ void Spell::EffectScriptEffect(uint32 effIndex) if(unitTarget) m_caster->CastSpell(unitTarget, 52125, false); return; + case 52479: // Gift of the Harvester + if(unitTarget && m_originalCaster) + m_originalCaster->CastSpell(unitTarget, urand(0, 1) ? damage : 52505, true); + return; // Death Gate case 52751: { diff --git a/src/game/SpellMgr.cpp b/src/game/SpellMgr.cpp index da571c83975..99c113a5eb5 100644 --- a/src/game/SpellMgr.cpp +++ b/src/game/SpellMgr.cpp @@ -3370,6 +3370,7 @@ void SpellMgr::LoadSpellCustomAttr() case 39365: // Thundering Storm case 41071: // Raise Dead (HACK) case 52124: // Sky Darkener Assault + case 52479: // Gift of the Harvester spellInfo->MaxAffectedTargets = 1; break; case 41376: // Spite |