mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-23 02:25:38 +01:00
Core/Spells: Add a 'as-generic-as-possible' temporary fix for SummonProperties 2081 (Mechanical Dragonling, Arcanite Dragonling, Mithril Dragonling). For them, basepoints != amount of entities to spawn. Needs more research for the proper value
Small cleanup in affected function.
This commit is contained in:
@@ -3000,29 +3000,12 @@ void Spell::EffectSummonType(SpellEffIndex effIndex)
|
||||
Position pos;
|
||||
GetSummonPosition(effIndex, pos);
|
||||
|
||||
/*//totem must be at same Z in case swimming caster and etc.
|
||||
if (fabs(z - m_caster->GetPositionZ()) > 5)
|
||||
z = m_caster->GetPositionZ();
|
||||
|
||||
uint8 level = m_caster->getLevel();
|
||||
|
||||
// level of creature summoned using engineering item based at engineering skill level
|
||||
if (m_caster->GetTypeId() == TYPEID_PLAYER && m_CastItem)
|
||||
{
|
||||
ItemPrototype const *proto = m_CastItem->GetProto();
|
||||
if (proto && proto->RequiredSkill == SKILL_ENGINERING)
|
||||
{
|
||||
uint16 skill202 = m_caster->ToPlayer()->GetSkillValue(SKILL_ENGINERING);
|
||||
if (skill202)
|
||||
level = skill202/5;
|
||||
}
|
||||
}*/
|
||||
|
||||
TempSummon *summon = NULL;
|
||||
|
||||
switch (properties->Category)
|
||||
{
|
||||
default:
|
||||
case SUMMON_CATEGORY_WILD:
|
||||
case SUMMON_CATEGORY_ALLY:
|
||||
if (properties->Flags & 512)
|
||||
{
|
||||
SummonGuardian(effIndex, entry, properties);
|
||||
@@ -3036,6 +3019,7 @@ void Spell::EffectSummonType(SpellEffIndex effIndex)
|
||||
case SUMMON_TYPE_MINION:
|
||||
SummonGuardian(effIndex, entry, properties);
|
||||
break;
|
||||
// Summons a vehicle, but doesn't force anyone to enter it (see SUMMON_CATEGORY_VEHICLE)
|
||||
case SUMMON_TYPE_VEHICLE:
|
||||
case SUMMON_TYPE_VEHICLE2:
|
||||
if (m_originalCaster)
|
||||
@@ -3053,8 +3037,6 @@ void Spell::EffectSummonType(SpellEffIndex effIndex)
|
||||
summon->SetHealth(damage);
|
||||
}
|
||||
|
||||
//summon->SetUInt32Value(UNIT_CREATED_BY_SPELL,m_spellInfo->Id);
|
||||
|
||||
if (m_originalCaster->GetTypeId() == TYPEID_PLAYER
|
||||
&& properties->Slot >= SUMMON_SLOT_TOTEM
|
||||
&& properties->Slot < MAX_TOTEM_SLOT)
|
||||
@@ -3098,24 +3080,27 @@ void Spell::EffectSummonType(SpellEffIndex effIndex)
|
||||
float radius = GetSpellRadiusForHostile(sSpellRadiusStore.LookupEntry(m_spellInfo->EffectRadiusIndex[effIndex]));
|
||||
|
||||
uint32 amount = damage > 0 ? damage : 1;
|
||||
if (m_spellInfo->Id == 18662) // Curse of Doom
|
||||
if (m_spellInfo->Id == 18662 || // Curse of Doom
|
||||
properties->Id == 2081) // Mechanical Dragonling, Arcanite Dragonling, Mithril Dragonling TODO: Research on meaning of basepoints
|
||||
amount = 1;
|
||||
|
||||
TempSummonType summonType = (duration == 0) ? TEMPSUMMON_DEAD_DESPAWN : TEMPSUMMON_TIMED_DESPAWN;
|
||||
|
||||
for (uint32 count = 0; count < amount; ++count)
|
||||
{
|
||||
GetSummonPosition(effIndex, pos, radius, count);
|
||||
|
||||
TempSummonType summonType = (duration == 0) ? TEMPSUMMON_DEAD_DESPAWN : TEMPSUMMON_TIMED_DESPAWN;
|
||||
|
||||
summon = m_originalCaster->SummonCreature(entry, pos, summonType, duration);
|
||||
if (!summon)
|
||||
continue;
|
||||
|
||||
if (properties->Category == SUMMON_CATEGORY_ALLY)
|
||||
{
|
||||
summon->SetUInt64Value(UNIT_FIELD_SUMMONEDBY, m_originalCaster->GetGUID());
|
||||
summon->setFaction(m_originalCaster->getFaction());
|
||||
summon->SetUInt32Value(UNIT_CREATED_BY_SPELL, m_spellInfo->Id);
|
||||
}
|
||||
|
||||
ExecuteLogEffectSummonObject(effIndex, summon);
|
||||
}
|
||||
return;
|
||||
@@ -3128,35 +3113,33 @@ void Spell::EffectSummonType(SpellEffIndex effIndex)
|
||||
case SUMMON_CATEGORY_PUPPET:
|
||||
summon = m_caster->GetMap()->SummonCreature(entry, pos, properties, duration, m_originalCaster);
|
||||
break;
|
||||
case SUMMON_CATEGORY_VEHICLE:
|
||||
{
|
||||
case SUMMON_CATEGORY_VEHICLE:
|
||||
// Summoning spells (usually triggered by npc_spellclick) that spawn a vehicle and that cause the clicker
|
||||
// to cast a ride vehicle spell on the summoned unit.
|
||||
float x, y, z;
|
||||
m_caster->GetClosePoint(x, y, z, DEFAULT_WORLD_OBJECT_SIZE);
|
||||
summon = m_originalCaster->GetMap()->SummonCreature(entry, pos, properties, duration, m_caster);
|
||||
if (!summon || !summon->IsVehicle())
|
||||
return;
|
||||
|
||||
if (m_spellInfo->EffectBasePoints[effIndex])
|
||||
// The spell that this effect will trigger. It has SPELL_AURA_CONTROL_VEHICLE
|
||||
uint32 spell = m_spellInfo->EffectBasePoints[effIndex];
|
||||
if (spell)
|
||||
{
|
||||
SpellEntry const *spellProto = sSpellStore.LookupEntry(SpellMgr::CalculateSpellEffectAmount(m_spellInfo, effIndex));
|
||||
if (spellProto)
|
||||
{
|
||||
m_originalCaster->CastSpell(summon, spellProto, true);
|
||||
return;
|
||||
}
|
||||
if (!spellProto)
|
||||
spell = VEHICLE_SPELL_RIDE_HARDCODED;
|
||||
}
|
||||
|
||||
// Hard coded enter vehicle spell
|
||||
m_originalCaster->CastSpell(summon, VEHICLE_SPELL_RIDE_HARDCODED, true);
|
||||
m_originalCaster->CastSpell(summon, spell, true);
|
||||
|
||||
summon->SetUInt32Value(UNIT_CREATED_BY_SPELL, m_spellInfo->Id);
|
||||
uint32 faction = properties->Faction;
|
||||
if (!faction)
|
||||
faction = m_originalCaster->getFaction();
|
||||
|
||||
summon->setFaction(faction);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (summon)
|
||||
|
||||
Reference in New Issue
Block a user