diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/server/game/AI/SmartScripts/SmartScriptMgr.cpp | 39 | ||||
| -rw-r--r-- | src/server/game/Spells/SpellEffects.cpp | 23 | ||||
| -rw-r--r-- | src/server/game/Spells/SpellMgr.cpp | 8 | ||||
| -rw-r--r-- | src/server/scripts/Spells/spell_quest.cpp | 4 |
4 files changed, 48 insertions, 26 deletions
diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp index 01f9080fba1..c93ffe90add 100644 --- a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp +++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp @@ -771,6 +771,26 @@ bool SmartAIMgr::IsEventValid(SmartScriptHolder& e) case SMART_ACTION_SUMMON_CREATURE: if (!IsCreatureValid(e, e.action.summonCreature.creature)) return false; + + for (uint32 i = 0; i < sSpellMgr->GetSpellInfoStoreSize(); ++i) + { + SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(i); + if (!spellInfo) + continue; + + for (uint32 j = 0; j < MAX_SPELL_EFFECTS; ++j) + { + if (spellInfo->Effects[j].Effect == SPELL_EFFECT_SUMMON) + { + uint32 creatureSummonEntry = spellInfo->Effects[j].MiscValue; + + if (e.action.killedMonster.creature == creatureSummonEntry) + TC_LOG_ERROR(LOG_FILTER_SQL, "SmartAIMgr: Entry %d SourceType %u Event %u Action %u creature summon: %u has already summon spell (SpellId: %u effect: %u)", + e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType(), e.action.killedMonster.creature, spellInfo->Id, j); + } + } + } + if (e.action.summonCreature.type < TEMPSUMMON_TIMED_OR_DEAD_DESPAWN || e.action.summonCreature.type > TEMPSUMMON_MANUAL_DESPAWN) { TC_LOG_ERROR(LOG_FILTER_SQL, "SmartAIMgr: Entry %d SourceType %u Event %u Action %u uses incorrect TempSummonType %u, skipped.", e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType(), e.action.summonCreature.type); @@ -828,6 +848,25 @@ bool SmartAIMgr::IsEventValid(SmartScriptHolder& e) case SMART_ACTION_SUMMON_GO: if (!IsGameObjectValid(e, e.action.summonGO.entry)) return false; + + for (uint32 i = 0; i < sSpellMgr->GetSpellInfoStoreSize(); ++i) + { + SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(i); + if (!spellInfo) + continue; + + for (uint32 j = 0; j < MAX_SPELL_EFFECTS; ++j) + { + if (spellInfo->Effects[j].Effect == SPELL_EFFECT_SUMMON_OBJECT_WILD) + { + uint32 goSummonEntry = spellInfo->Effects[j].MiscValue; + + if (e.action.summonGO.entry == goSummonEntry) + TC_LOG_ERROR(LOG_FILTER_SQL, "SmartAIMgr: Entry %d SourceType %u Event %u Action %u gameobject summon: %u has already summon spell (SpellId: %u effect: %u)", + e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType(), e.action.summonGO.entry, spellInfo->Id, j); + } + } + } break; case SMART_ACTION_ADD_ITEM: case SMART_ACTION_REMOVE_ITEM: diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp index 91a5c35955a..45a07fee945 100644 --- a/src/server/game/Spells/SpellEffects.cpp +++ b/src/server/game/Spells/SpellEffects.cpp @@ -1133,29 +1133,6 @@ void Spell::EffectTeleportUnits(SpellEffIndex /*effIndex*/) if (!unitTarget || unitTarget->IsInFlight()) return; - // Pre effects - switch (m_spellInfo->Id) - { - case 66550: // teleports outside (Isle of Conquest) - if (Player* target = unitTarget->ToPlayer()) - { - if (target->GetTeamId() == TEAM_ALLIANCE) - m_targets.SetDst(442.24f, -835.25f, 44.30f, 0.06f, 628); - else - m_targets.SetDst(1120.43f, -762.11f, 47.92f, 2.94f, 628); - } - break; - case 66551: // teleports inside (Isle of Conquest) - if (Player* target = unitTarget->ToPlayer()) - { - if (target->GetTeamId() == TEAM_ALLIANCE) - m_targets.SetDst(389.57f, -832.38f, 48.65f, 3.00f, 628); - else - m_targets.SetDst(1174.85f, -763.24f, 48.72f, 6.26f, 628); - } - break; - } - // If not exist data for dest location - return if (!m_targets.HasDst()) { diff --git a/src/server/game/Spells/SpellMgr.cpp b/src/server/game/Spells/SpellMgr.cpp index 5d471492553..bc5f8edc9ac 100644 --- a/src/server/game/Spells/SpellMgr.cpp +++ b/src/server/game/Spells/SpellMgr.cpp @@ -2975,6 +2975,7 @@ void SpellMgr::LoadSpellInfoCustomAttributes() spellInfo->AttributesCu |= SPELL_ATTR0_CU_NEGATIVE_EFF0; break; case 38729: // Rod of Purification + case 51858: // Siphon of Acherus spellInfo->AttributesCu |= SPELL_ATTR0_CU_TRIGGERED_BY_CASTER; break; default: @@ -3750,6 +3751,13 @@ void SpellMgr::LoadSpellInfoCorrections() // Crashes client on pressing ESC spellInfo->AttributesEx4 &= ~SPELL_ATTR4_TRIGGERED; break; + // ISLE OF CONQUEST SPELLS + // + case 66551: // Teleport + spellInfo->RangeEntry = sSpellRangeStore.LookupEntry(13); // 50000yd + break; + // ENDOF ISLE OF CONQUEST SPELLS + // default: break; } diff --git a/src/server/scripts/Spells/spell_quest.cpp b/src/server/scripts/Spells/spell_quest.cpp index 8804410d814..919046d3c38 100644 --- a/src/server/scripts/Spells/spell_quest.cpp +++ b/src/server/scripts/Spells/spell_quest.cpp @@ -2072,8 +2072,6 @@ class spell_q12641_death_comes_from_on_high : public SpellScriptLoader { uint32 spellId = 0; - TC_LOG_DEBUG(LOG_FILTER_SPELLS_AURAS, "spell_q12641_death_comes_from_on_high:: Caster: %s (GUID: %u) On Hit Target: Creature: %s (Entry: %u GUID: %u)", - GetOriginalCaster()->GetName().c_str(), GetOriginalCaster()->GetGUIDLow(), GetHitCreature()->GetName().c_str(), GetHitCreature()->GetEntry(), GetHitCreature()->GetGUIDLow()); switch (GetHitCreature()->GetEntry()) { case NPC_NEW_AVALON_FORGE: @@ -2092,7 +2090,7 @@ class spell_q12641_death_comes_from_on_high : public SpellScriptLoader return; } - GetOriginalCaster()->CastSpell((Unit*)NULL, spellId, true); + GetCaster()->CastSpell((Unit*)NULL, spellId, true); } void Register() OVERRIDE |
