diff --git a/src/game/SharedDefines.h b/src/game/SharedDefines.h index 58c60a012..6ec7dcb9b 100644 --- a/src/game/SharedDefines.h +++ b/src/game/SharedDefines.h @@ -2380,6 +2380,7 @@ enum SummonType SUMMON_TYPE_UNKNOWN5 = 409, SUMMON_TYPE_UNKNOWN2 = 427, SUMMON_TYPE_POSESSED2 = 428, + SUMMON_TYPE_INFERNO = 711, SUMMON_TYPE_GUARDIAN2 = 1161, SUMMON_TYPE_ELEMENTAL = 1561, SUMMON_TYPE_FORCE_OF_NATURE = 1562 diff --git a/src/game/Spell.cpp b/src/game/Spell.cpp index 3e33a691d..88e4bc3d8 100644 --- a/src/game/Spell.cpp +++ b/src/game/Spell.cpp @@ -1679,12 +1679,19 @@ void Spell::SetTargetMap(uint32 i,uint32 cur,UnitList& TagUnitMap) case TARGET_ALL_ENEMY_IN_AREA_INSTANT: { // targets the ground, not the units in the area - if (m_spellInfo->Effect[i]!=SPELL_EFFECT_PERSISTENT_AREA_AURA) + switch(m_spellInfo->Effect[i]) { - FillAreaTargets(TagUnitMap,m_targets.m_destX, m_targets.m_destY,radius,PUSH_DEST_CENTER,SPELL_TARGETS_AOE_DAMAGE); + case SPELL_EFFECT_PERSISTENT_AREA_AURA: + break; + case SPELL_EFFECT_SUMMON: + TagUnitMap.push_back(m_caster); + break; + default: + FillAreaTargets(TagUnitMap,m_targets.m_destX, m_targets.m_destY,radius,PUSH_DEST_CENTER,SPELL_TARGETS_AOE_DAMAGE); - // exclude caster (this can be important if this not original caster) - TagUnitMap.remove(m_caster); + // exclude caster (this can be important if this not original caster) + TagUnitMap.remove(m_caster); + break; } break; } @@ -4324,6 +4331,7 @@ SpellCastResult Spell::CheckCast(bool strict) case SUMMON_TYPE_DEMON: case SUMMON_TYPE_SUMMON: case SUMMON_TYPE_ELEMENTAL: + case SUMMON_TYPE_INFERNO: { if(m_caster->GetPetGUID()) return SPELL_FAILED_ALREADY_HAVE_SUMMON; diff --git a/src/game/SpellEffects.cpp b/src/game/SpellEffects.cpp index dc07e2e7e..e17753622 100644 --- a/src/game/SpellEffects.cpp +++ b/src/game/SpellEffects.cpp @@ -3266,12 +3266,17 @@ void Spell::EffectSummonType(uint32 i) case SUMMON_TYPE_POSESSED2: case SUMMON_TYPE_FORCE_OF_NATURE: case SUMMON_TYPE_GUARDIAN2: - EffectSummonGuardian(i); + // Jewelery statue case (totem like) + if(m_spellInfo->SpellIconID == 2056) + EffectSummonTotem(i); + else + EffectSummonGuardian(i); break; case SUMMON_TYPE_WILD: EffectSummonWild(i); break; case SUMMON_TYPE_DEMON: + case SUMMON_TYPE_INFERNO: EffectSummonDemon(i); break; case SUMMON_TYPE_SUMMON: @@ -3317,6 +3322,16 @@ void Spell::EffectSummon(uint32 i) if(m_caster->GetTypeId()==TYPEID_PLAYER && spawnCreature->LoadPetFromDB((Player*)m_caster,pet_entry)) { + // Summon in dest location + float x, y, z; + if(m_targets.m_targetMask & TARGET_FLAG_DEST_LOCATION) + { + x = m_targets.m_destX; + y = m_targets.m_destY; + z = m_targets.m_destZ; + spawnCreature->Relocate(m_targets.m_destX, m_targets.m_destY, m_targets.m_destZ, -m_caster->GetOrientation()); + } + // set timer for unsummon int32 duration = GetSpellDuration(m_spellInfo); if(duration > 0) @@ -3692,13 +3707,6 @@ void Spell::EffectSummonGuardian(uint32 i) if(!pet_entry) return; - // Jewelery statue case (totem like) - if(m_spellInfo->SpellIconID == 2056) - { - EffectSummonTotem(i); - return; - } - // set timer for unsummon int32 duration = GetSpellDuration(m_spellInfo); @@ -6505,6 +6513,9 @@ void Spell::EffectSummonDemon(uint32 i) int32 amount = damage > 0 ? damage : 1; + if (m_spellInfo->EffectMiscValueB[i] == SUMMON_TYPE_INFERNO) + amount = 1; + for(int32 count = 0; count < amount; ++count) { float px, py, pz; @@ -6537,13 +6548,15 @@ void Spell::EffectSummonDemon(uint32 i) // TODO: Add damage/mana/hp according to level + // Enslave demon effect, without mana cost and cooldown if (m_spellInfo->EffectMiscValue[i] == 89) // Inferno summon { // Enslave demon effect, without mana cost and cooldown m_caster->CastSpell(Charmed, 20882, true); // FIXME: enslave does not scale with level, level 62+ minions cannot be enslaved - // Inferno effect - Charmed->CastSpell(Charmed, 22703, true, 0); + // Inferno effect for non player calls + if (m_spellInfo->EffectMiscValueB[i]!=SUMMON_TYPE_INFERNO) + Charmed->CastSpell(Charmed, 22703, true, 0); } } } diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 89ce2f0cd..f74ce21c8 100644 --- a/src/shared/revision_nr.h +++ b/src/shared/revision_nr.h @@ -1,4 +1,4 @@ #ifndef __REVISION_NR_H__ #define __REVISION_NR_H__ - #define REVISION_NR "8300" + #define REVISION_NR "8301" #endif // __REVISION_NR_H__