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

--HG--
branch : trunk
This commit is contained in:
megamage
2009-03-18 20:47:26 -06:00
parent 249d0d53c0
commit 9b08473d28
+34 -5
View File
@@ -6563,12 +6563,40 @@ 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)
int32 amount = damage > 0 ? damage : 1;
for(int32 count = 0; count < amount; ++count)
{
float px, py, pz;
// 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);
int32 duration = GetSpellDuration(m_spellInfo);
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; return;
// might not always work correctly, maybe the creature that dies from CoD casts the effect on itself and is therefore the caster? // might not always work correctly, maybe the creature that dies from CoD casts the effect on itself and is therefore the caster?
@@ -6585,6 +6613,7 @@ void Spell::EffectSummonDemon(uint32 i)
Charmed->CastSpell(Charmed, 22703, true, 0); Charmed->CastSpell(Charmed, 22703, true, 0);
} }
} }
}
/* There is currently no need for this effect. We handle it in BattleGround.cpp /* There is currently no need for this effect. We handle it in BattleGround.cpp
If we would handle the resurrection here, the spiritguide would instantly disappear as the If we would handle the resurrection here, the spiritguide would instantly disappear as the