aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/game/SharedDefines.h8
-rw-r--r--src/game/SpellEffects.cpp75
2 files changed, 49 insertions, 34 deletions
diff --git a/src/game/SharedDefines.h b/src/game/SharedDefines.h
index f71f5655e25..8e0f1cffbf9 100644
--- a/src/game/SharedDefines.h
+++ b/src/game/SharedDefines.h
@@ -2377,11 +2377,15 @@ enum DungeonDifficulties
enum SummonType
{
+ //SUMMON_TYPE_WILD = 0,
+ //SUMMON_TYPE_ALLY = 1,
+ //SUMMON_TYPE_GUARDIAN = 2,
+ SUMMON_TYPE_POSSESSED = 3,
+ SUMMON_TYPE_VEHICLE = 4,
SUMMON_TYPE_CRITTER = 41,
SUMMON_TYPE_GUARDIAN = 61,
SUMMON_TYPE_TOTEM_SLOT1 = 63,
SUMMON_TYPE_WILD = 64,
- SUMMON_TYPE_POSESSED = 65,
SUMMON_TYPE_DEMON = 66,
SUMMON_TYPE_SUMMON = 67,
SUMMON_TYPE_TOTEM_SLOT2 = 81,
@@ -2394,8 +2398,6 @@ enum SummonType
SUMMON_TYPE_CRITTER2 = 407,
SUMMON_TYPE_CRITTER3 = 307,
SUMMON_TYPE_UNKNOWN5 = 409,
- SUMMON_TYPE_RACE_CONTROLLER = 427,
- SUMMON_TYPE_STEAM_TONK = 428,
SUMMON_TYPE_FROZEN_EARTH = 429,
SUMMON_TYPE_FORCE_OF_NATURE = 669,
SUMMON_TYPE_LIGHTWELL = 1141,
diff --git a/src/game/SpellEffects.cpp b/src/game/SpellEffects.cpp
index 70881495556..ee0ca2784b4 100644
--- a/src/game/SpellEffects.cpp
+++ b/src/game/SpellEffects.cpp
@@ -3317,11 +3317,6 @@ void Spell::EffectSummonType(uint32 i)
case SUMMON_TYPE_GUARDIAN:
EffectSummonGuardian(i);
break;
- case SUMMON_TYPE_POSESSED:
- case SUMMON_TYPE_STEAM_TONK:
- case SUMMON_TYPE_RACE_CONTROLLER:
- EffectSummonPossessed(i);
- break;
case SUMMON_TYPE_FORCE_OF_NATURE:
case SUMMON_TYPE_FERAL_SPIRIT:
EffectSummonGuardian(i);
@@ -3355,8 +3350,26 @@ void Spell::EffectSummonType(uint32 i)
case SUMMON_TYPE_UNKNOWN5:
break;
default:
- sLog.outError("EffectSummonType: Unhandled summon type %u", m_spellInfo->EffectMiscValueB[i]);
+ {
+ SummonPropertiesEntry const *SummonProperties = sSummonPropertiesStore.LookupEntry(m_spellInfo->EffectMiscValueB[i]);
+ if(!SummonProperties)
+ {
+ sLog.outError("EffectSummonType: Unhandled summon type %u", m_spellInfo->EffectMiscValueB[i]);
+ return;
+ }
+ switch(SummonProperties->Group)
+ {
+ default:
+ EffectSummonWild(i);
+ break;
+ case SUMMON_TYPE_POSSESSED:
+ EffectSummonPossessed(i);
+ break;
+ case SUMMON_TYPE_VEHICLE:
+ break;
+ }
break;
+ }
}
}
@@ -3804,30 +3817,6 @@ void Spell::EffectSummonGuardian(uint32 i)
}
}
-void Spell::EffectSummonPossessed(uint32 i)
-{
- uint32 entry = m_spellInfo->EffectMiscValue[i];
- if(!entry)
- return;
-
- if(m_caster->GetTypeId() != TYPEID_PLAYER)
- return;
-
- uint32 level = m_caster->getLevel();
-
- float x, y, z;
- m_caster->GetClosePoint(x, y, z, DEFAULT_WORLD_OBJECT_SIZE);
-
- int32 duration = GetSpellDuration(m_spellInfo);
-
- Pet* pet = ((Player*)m_caster)->SummonPet(entry, x, y, z, m_caster->GetOrientation(), POSSESSED_PET, duration);
- if(!pet)
- return;
-
- pet->SetUInt32Value(UNIT_CREATED_BY_SPELL, m_spellInfo->Id);
- pet->SetCharmedOrPossessedBy(m_caster, true);
-}
-
void Spell::EffectTeleUnitsFaceCaster(uint32 i)
{
if(!unitTarget)
@@ -6568,7 +6557,7 @@ void Spell::EffectSummonDemon(uint32 i)
float center_y = m_targets.m_destY;
float center_z = m_targets.m_destZ;
- float radius = GetSpellRadius(sSpellRadiusStore.LookupEntry(m_spellInfo->EffectRadiusIndex[i]));
+ float radius = GetSpellRadiusForFriend(sSpellRadiusStore.LookupEntry(m_spellInfo->EffectRadiusIndex[i]));
int32 amount = damage > 0 ? damage : 1;
@@ -6763,6 +6752,30 @@ void Spell::EffectRedirectThreat(uint32 /*i*/)
m_caster->SetReducedThreatPercent((uint32)damage, unitTarget->GetGUID());
}
+void Spell::EffectSummonPossessed(uint32 i)
+{
+ uint32 entry = m_spellInfo->EffectMiscValue[i];
+ if(!entry)
+ return;
+
+ if(m_caster->GetTypeId() != TYPEID_PLAYER)
+ return;
+
+ uint32 level = m_caster->getLevel();
+
+ float x, y, z;
+ m_caster->GetClosePoint(x, y, z, DEFAULT_WORLD_OBJECT_SIZE);
+
+ int32 duration = GetSpellDuration(m_spellInfo);
+
+ Pet* pet = ((Player*)m_caster)->SummonPet(entry, x, y, z, m_caster->GetOrientation(), POSSESSED_PET, duration);
+ if(!pet)
+ return;
+
+ pet->SetUInt32Value(UNIT_CREATED_BY_SPELL, m_spellInfo->Id);
+ pet->SetCharmedOrPossessedBy(m_caster, true);
+}
+
void Spell::EffectRenamePet(uint32 /*eff_idx*/)
{
if (!unitTarget || unitTarget->GetTypeId() != TYPEID_UNIT ||