mirror of
https://github.com/mangosfour/server.git
synced 2025-12-14 07:37:01 +00:00
[8301] Restore work 1122 broken after switch.
Also small cleanup in summon code: move statue summon cal from EffectSummonGuardian to common summon type selector code.
This commit is contained in:
parent
f05ac51b8a
commit
19ccf59cd4
4 changed files with 37 additions and 15 deletions
|
|
@ -2380,6 +2380,7 @@ enum SummonType
|
||||||
SUMMON_TYPE_UNKNOWN5 = 409,
|
SUMMON_TYPE_UNKNOWN5 = 409,
|
||||||
SUMMON_TYPE_UNKNOWN2 = 427,
|
SUMMON_TYPE_UNKNOWN2 = 427,
|
||||||
SUMMON_TYPE_POSESSED2 = 428,
|
SUMMON_TYPE_POSESSED2 = 428,
|
||||||
|
SUMMON_TYPE_INFERNO = 711,
|
||||||
SUMMON_TYPE_GUARDIAN2 = 1161,
|
SUMMON_TYPE_GUARDIAN2 = 1161,
|
||||||
SUMMON_TYPE_ELEMENTAL = 1561,
|
SUMMON_TYPE_ELEMENTAL = 1561,
|
||||||
SUMMON_TYPE_FORCE_OF_NATURE = 1562
|
SUMMON_TYPE_FORCE_OF_NATURE = 1562
|
||||||
|
|
|
||||||
|
|
@ -1679,12 +1679,19 @@ void Spell::SetTargetMap(uint32 i,uint32 cur,UnitList& TagUnitMap)
|
||||||
case TARGET_ALL_ENEMY_IN_AREA_INSTANT:
|
case TARGET_ALL_ENEMY_IN_AREA_INSTANT:
|
||||||
{
|
{
|
||||||
// targets the ground, not the units in the area
|
// 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)
|
// exclude caster (this can be important if this not original caster)
|
||||||
TagUnitMap.remove(m_caster);
|
TagUnitMap.remove(m_caster);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
@ -4324,6 +4331,7 @@ SpellCastResult Spell::CheckCast(bool strict)
|
||||||
case SUMMON_TYPE_DEMON:
|
case SUMMON_TYPE_DEMON:
|
||||||
case SUMMON_TYPE_SUMMON:
|
case SUMMON_TYPE_SUMMON:
|
||||||
case SUMMON_TYPE_ELEMENTAL:
|
case SUMMON_TYPE_ELEMENTAL:
|
||||||
|
case SUMMON_TYPE_INFERNO:
|
||||||
{
|
{
|
||||||
if(m_caster->GetPetGUID())
|
if(m_caster->GetPetGUID())
|
||||||
return SPELL_FAILED_ALREADY_HAVE_SUMMON;
|
return SPELL_FAILED_ALREADY_HAVE_SUMMON;
|
||||||
|
|
|
||||||
|
|
@ -3266,12 +3266,17 @@ void Spell::EffectSummonType(uint32 i)
|
||||||
case SUMMON_TYPE_POSESSED2:
|
case SUMMON_TYPE_POSESSED2:
|
||||||
case SUMMON_TYPE_FORCE_OF_NATURE:
|
case SUMMON_TYPE_FORCE_OF_NATURE:
|
||||||
case SUMMON_TYPE_GUARDIAN2:
|
case SUMMON_TYPE_GUARDIAN2:
|
||||||
EffectSummonGuardian(i);
|
// Jewelery statue case (totem like)
|
||||||
|
if(m_spellInfo->SpellIconID == 2056)
|
||||||
|
EffectSummonTotem(i);
|
||||||
|
else
|
||||||
|
EffectSummonGuardian(i);
|
||||||
break;
|
break;
|
||||||
case SUMMON_TYPE_WILD:
|
case SUMMON_TYPE_WILD:
|
||||||
EffectSummonWild(i);
|
EffectSummonWild(i);
|
||||||
break;
|
break;
|
||||||
case SUMMON_TYPE_DEMON:
|
case SUMMON_TYPE_DEMON:
|
||||||
|
case SUMMON_TYPE_INFERNO:
|
||||||
EffectSummonDemon(i);
|
EffectSummonDemon(i);
|
||||||
break;
|
break;
|
||||||
case SUMMON_TYPE_SUMMON:
|
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))
|
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
|
// set timer for unsummon
|
||||||
int32 duration = GetSpellDuration(m_spellInfo);
|
int32 duration = GetSpellDuration(m_spellInfo);
|
||||||
if(duration > 0)
|
if(duration > 0)
|
||||||
|
|
@ -3692,13 +3707,6 @@ void Spell::EffectSummonGuardian(uint32 i)
|
||||||
if(!pet_entry)
|
if(!pet_entry)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// Jewelery statue case (totem like)
|
|
||||||
if(m_spellInfo->SpellIconID == 2056)
|
|
||||||
{
|
|
||||||
EffectSummonTotem(i);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// set timer for unsummon
|
// set timer for unsummon
|
||||||
int32 duration = GetSpellDuration(m_spellInfo);
|
int32 duration = GetSpellDuration(m_spellInfo);
|
||||||
|
|
||||||
|
|
@ -6505,6 +6513,9 @@ void Spell::EffectSummonDemon(uint32 i)
|
||||||
|
|
||||||
int32 amount = damage > 0 ? damage : 1;
|
int32 amount = damage > 0 ? damage : 1;
|
||||||
|
|
||||||
|
if (m_spellInfo->EffectMiscValueB[i] == SUMMON_TYPE_INFERNO)
|
||||||
|
amount = 1;
|
||||||
|
|
||||||
for(int32 count = 0; count < amount; ++count)
|
for(int32 count = 0; count < amount; ++count)
|
||||||
{
|
{
|
||||||
float px, py, pz;
|
float px, py, pz;
|
||||||
|
|
@ -6537,13 +6548,15 @@ void Spell::EffectSummonDemon(uint32 i)
|
||||||
|
|
||||||
// TODO: Add damage/mana/hp according to level
|
// TODO: Add damage/mana/hp according to level
|
||||||
|
|
||||||
|
// Enslave demon effect, without mana cost and cooldown
|
||||||
if (m_spellInfo->EffectMiscValue[i] == 89) // Inferno summon
|
if (m_spellInfo->EffectMiscValue[i] == 89) // Inferno summon
|
||||||
{
|
{
|
||||||
// Enslave demon effect, without mana cost and cooldown
|
// 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
|
m_caster->CastSpell(Charmed, 20882, true); // FIXME: enslave does not scale with level, level 62+ minions cannot be enslaved
|
||||||
|
|
||||||
// Inferno effect
|
// Inferno effect for non player calls
|
||||||
Charmed->CastSpell(Charmed, 22703, true, 0);
|
if (m_spellInfo->EffectMiscValueB[i]!=SUMMON_TYPE_INFERNO)
|
||||||
|
Charmed->CastSpell(Charmed, 22703, true, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
#ifndef __REVISION_NR_H__
|
#ifndef __REVISION_NR_H__
|
||||||
#define __REVISION_NR_H__
|
#define __REVISION_NR_H__
|
||||||
#define REVISION_NR "8300"
|
#define REVISION_NR "8301"
|
||||||
#endif // __REVISION_NR_H__
|
#endif // __REVISION_NR_H__
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue