mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-20 09:17:36 +01:00
*Summon creatures based on general summon types.
--HG-- branch : trunk
This commit is contained in:
@@ -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,
|
||||
|
||||
@@ -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 ||
|
||||
|
||||
Reference in New Issue
Block a user