[7490] Implement expected multiply summon case support with proper duration for EffectSummonDemon

This commit is contained in:
VladimirMangos 2009-03-19 00:18:48 +03:00
parent 7589bf7263
commit 8228161197
2 changed files with 45 additions and 16 deletions

View file

@ -6375,26 +6375,55 @@ void Spell::EffectSkill(uint32 /*i*/)
void Spell::EffectSummonDemon(uint32 i) void Spell::EffectSummonDemon(uint32 i)
{ {
float px = m_targets.m_destX; // select center of summon position
float py = m_targets.m_destY; float center_x = m_targets.m_destX;
float pz = m_targets.m_destZ; float center_y = m_targets.m_destY;
float center_z = m_targets.m_destZ;
Creature* Charmed = m_caster->SummonCreature(m_spellInfo->EffectMiscValue[i], px, py, pz, m_caster->GetOrientation(),TEMPSUMMON_TIMED_OR_DEAD_DESPAWN,3600000); float radius = GetSpellRadius(sSpellRadiusStore.LookupEntry(m_spellInfo->EffectRadiusIndex[i]));
if (!Charmed)
return;
// might not always work correctly, maybe the creature that dies from CoD casts the effect on itself and is therefore the caster? int32 amount = damage > 0 ? damage : 1;
Charmed->SetLevel(m_caster->getLevel());
// TODO: Add damage/mana/hp according to level for(int32 count = 0; count < amount; ++count)
if (m_spellInfo->EffectMiscValue[i] == 89) // Inferno summon
{ {
// Enslave demon effect, without mana cost and cooldown float px, py, pz;
m_caster->CastSpell(Charmed, 20882, true); // FIXME: enslave does not scale with level, level 62+ minions cannot be enslaved // If dest location if present
if (m_targets.m_targetMask & TARGET_FLAG_DEST_LOCATION)
{
// Summon 1 unit in dest location
if (count == 0)
{
px = m_targets.m_destX;
py = m_targets.m_destY;
pz = m_targets.m_destZ;
}
// Summon in random point all other units if location present
else
m_caster->GetRandomPoint(center_x,center_y,center_z,radius,px,py,pz);
}
// Summon if dest location not present near caster
else
m_caster->GetClosePoint(px,py,pz,3.0f);
// Inferno effect int32 duration = GetSpellDuration(m_spellInfo);
Charmed->CastSpell(Charmed, 22703, true, 0);
Creature* Charmed = m_caster->SummonCreature(m_spellInfo->EffectMiscValue[i], px, py, pz, m_caster->GetOrientation(),TEMPSUMMON_TIMED_OR_DEAD_DESPAWN,duration);
if (!Charmed) // something fatal, not attempt more
return;
// might not always work correctly, maybe the creature that dies from CoD casts the effect on itself and is therefore the caster?
Charmed->SetLevel(m_caster->getLevel());
// TODO: Add damage/mana/hp according to level
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);
}
} }
} }

View file

@ -1,4 +1,4 @@
#ifndef __REVISION_NR_H__ #ifndef __REVISION_NR_H__
#define __REVISION_NR_H__ #define __REVISION_NR_H__
#define REVISION_NR "7489" #define REVISION_NR "7490"
#endif // __REVISION_NR_H__ #endif // __REVISION_NR_H__