Core/Spells: ported CastSpell unclusterfucking from 3.3.5 branch
This commit is contained in:
1 parent
7e637971ee
commit
754c138f89
157 files changed
+1195
-1223
No files matched your search
@@ -562,17 +562,14 @@ void Spell::EffectTriggerSpell(SpellEffIndex effIndex)
|
||||
targets.SetUnitTarget(m_caster);
|
||||
}
|
||||
|
||||
CustomSpellValues values;
|
||||
CastSpellExtraArgs args(m_originalCasterGUID);
|
||||
// set basepoints for trigger with value effect
|
||||
if (m_spellInfo->Effects[effIndex].Effect == SPELL_EFFECT_TRIGGER_SPELL_WITH_VALUE)
|
||||
{
|
||||
values.AddSpellMod(SPELLVALUE_BASE_POINT0, damage);
|
||||
values.AddSpellMod(SPELLVALUE_BASE_POINT1, damage);
|
||||
values.AddSpellMod(SPELLVALUE_BASE_POINT2, damage);
|
||||
}
|
||||
for (uint32 i = 0; i < MAX_SPELL_EFFECTS; ++i)
|
||||
args.SpellValueOverrides.AddMod(SpellValueMod(SPELLVALUE_BASE_POINT0 + i), damage);
|
||||
|
||||
// original caster guid only for GO cast
|
||||
m_caster->CastSpell(targets, spellInfo, &values, TRIGGERED_FULL_MASK, nullptr, nullptr, m_originalCasterGUID);
|
||||
m_caster->CastSpell(targets, spellInfo->Id, args);
|
||||
}
|
||||
|
||||
void Spell::EffectTriggerMissileSpell(SpellEffIndex effIndex)
|
||||
@@ -612,18 +609,14 @@ void Spell::EffectTriggerMissileSpell(SpellEffIndex effIndex)
|
||||
targets.SetUnitTarget(m_caster);
|
||||
}
|
||||
|
||||
CustomSpellValues values;
|
||||
CastSpellExtraArgs args(m_originalCasterGUID);
|
||||
// set basepoints for trigger with value effect
|
||||
if (m_spellInfo->Effects[effIndex].Effect == SPELL_EFFECT_TRIGGER_MISSILE_SPELL_WITH_VALUE)
|
||||
{
|
||||
// maybe need to set value only when basepoints == 0?
|
||||
values.AddSpellMod(SPELLVALUE_BASE_POINT0, damage);
|
||||
values.AddSpellMod(SPELLVALUE_BASE_POINT1, damage);
|
||||
values.AddSpellMod(SPELLVALUE_BASE_POINT2, damage);
|
||||
}
|
||||
for (uint32 i = 0; i < MAX_SPELL_EFFECTS; ++i)
|
||||
args.SpellValueOverrides.AddMod(SpellValueMod(SPELLVALUE_BASE_POINT0 + i), damage);
|
||||
|
||||
// original caster guid only for GO cast
|
||||
m_caster->CastSpell(targets, spellInfo, &values, TRIGGERED_FULL_MASK, nullptr, nullptr, m_originalCasterGUID);
|
||||
m_caster->CastSpell(targets, spellInfo->Id, args);
|
||||
}
|
||||
|
||||
void Spell::EffectForceCast(SpellEffIndex effIndex)
|
||||
@@ -655,32 +648,28 @@ void Spell::EffectForceCast(SpellEffIndex effIndex)
|
||||
break;
|
||||
case 52463: // Hide In Mine Car
|
||||
case 52349: // Overtake
|
||||
unitTarget->CastCustomSpell(unitTarget, spellInfo->Id, &damage, nullptr, nullptr, true, nullptr, nullptr, m_originalCasterGUID);
|
||||
{
|
||||
CastSpellExtraArgs args(m_originalCasterGUID);
|
||||
args.SpellValueOverrides.AddMod(SPELLVALUE_BASE_POINT0, damage);
|
||||
unitTarget->CastSpell(unitTarget, spellInfo->Id, args);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
switch (spellInfo->Id)
|
||||
{
|
||||
case 72298: // Malleable Goo Summon
|
||||
unitTarget->CastSpell(unitTarget, spellInfo->Id, true, nullptr, nullptr, m_originalCasterGUID);
|
||||
unitTarget->CastSpell(unitTarget, spellInfo->Id, m_originalCasterGUID);
|
||||
return;
|
||||
}
|
||||
|
||||
CustomSpellValues values;
|
||||
// set basepoints for trigger with value effect
|
||||
CastSpellExtraArgs args(TRIGGERED_FULL_MASK);
|
||||
if (m_spellInfo->Effects[effIndex].Effect == SPELL_EFFECT_FORCE_CAST_WITH_VALUE)
|
||||
{
|
||||
// maybe need to set value only when basepoints == 0?
|
||||
values.AddSpellMod(SPELLVALUE_BASE_POINT0, damage);
|
||||
values.AddSpellMod(SPELLVALUE_BASE_POINT1, damage);
|
||||
values.AddSpellMod(SPELLVALUE_BASE_POINT2, damage);
|
||||
}
|
||||
for (uint32 i = 0; i < MAX_SPELL_EFFECTS; ++i)
|
||||
args.SpellValueOverrides.AddMod(SpellValueMod(SPELLVALUE_BASE_POINT0 + i), damage);
|
||||
|
||||
SpellCastTargets targets;
|
||||
targets.SetUnitTarget(m_caster);
|
||||
|
||||
unitTarget->CastSpell(targets, spellInfo, &values, TriggerCastFlags(TRIGGERED_FULL_MASK & ~TRIGGERED_IGNORE_SPELL_AND_CATEGORY_CD));
|
||||
unitTarget->CastSpell(m_caster, spellInfo->Id, args);
|
||||
}
|
||||
|
||||
void Spell::EffectTriggerRitualOfSummoning(SpellEffIndex effIndex)
|
||||
@@ -699,7 +688,7 @@ void Spell::EffectTriggerRitualOfSummoning(SpellEffIndex effIndex)
|
||||
|
||||
finish();
|
||||
|
||||
m_caster->CastSpell((Unit*)nullptr, spellInfo, false);
|
||||
m_caster->CastSpell(nullptr, spellInfo->Id, false);
|
||||
}
|
||||
|
||||
void Spell::EffectJump(SpellEffIndex effIndex)
|
||||
@@ -1912,11 +1901,13 @@ void Spell::EffectSummonType(SpellEffIndex effIndex)
|
||||
spellId = spellInfo->Id;
|
||||
}
|
||||
|
||||
CastSpellExtraArgs args(TRIGGERED_FULL_MASK);
|
||||
|
||||
// if we have small value, it indicates seat position
|
||||
if (basePoints > 0 && basePoints < MAX_VEHICLE_SEATS)
|
||||
m_originalCaster->CastCustomSpell(spellId, SPELLVALUE_BASE_POINT0, basePoints, summon, true);
|
||||
else
|
||||
m_originalCaster->CastSpell(summon, spellId, true);
|
||||
args.SpellValueOverrides.AddMod(SPELLVALUE_BASE_POINT0, basePoints);
|
||||
|
||||
m_originalCaster->CastSpell(summon, spellId, args);
|
||||
}
|
||||
ExecuteLogEffectSummonObject(effIndex, summon);
|
||||
}
|
||||
@@ -2053,12 +2044,13 @@ void Spell::EffectDispel(SpellEffIndex effIndex)
|
||||
// Devour Magic
|
||||
if (m_spellInfo->SpellFamilyName == SPELLFAMILY_WARLOCK && m_spellInfo->GetCategory() == SPELLCATEGORY_DEVOUR_MAGIC)
|
||||
{
|
||||
int32 heal_amount = m_spellInfo->Effects[EFFECT_1].CalcValue(m_caster);
|
||||
m_caster->CastCustomSpell(m_caster, 19658, &heal_amount, nullptr, nullptr, true);
|
||||
CastSpellExtraArgs args(TRIGGERED_FULL_MASK);
|
||||
args.SpellValueOverrides.AddMod(SPELLVALUE_BASE_POINT0, m_spellInfo->Effects[EFFECT_1].CalcValue());
|
||||
m_caster->CastSpell(m_caster, 19658, args);
|
||||
// Glyph of Felhunter
|
||||
if (Unit* owner = m_caster->GetOwner())
|
||||
if (owner->GetAura(56249))
|
||||
owner->CastCustomSpell(owner, 19658, &heal_amount, nullptr, nullptr, true);
|
||||
owner->CastSpell(owner, 19658, args);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2710,7 +2702,7 @@ void Spell::EffectWeaponDmg(SpellEffIndex effIndex)
|
||||
// Skyshatter Harness item set bonus
|
||||
// Stormstrike
|
||||
if (AuraEffect* aurEff = m_caster->IsScriptOverriden(m_spellInfo, 5634))
|
||||
m_caster->CastSpell(m_caster, 38430, true, nullptr, aurEff);
|
||||
m_caster->CastSpell(m_caster, 38430, aurEff);
|
||||
break;
|
||||
}
|
||||
case SPELLFAMILY_DRUID:
|
||||
@@ -3043,8 +3035,7 @@ void Spell::EffectScriptEffect(SpellEffIndex effIndex)
|
||||
return;
|
||||
|
||||
uint32 spell_id = roll_chance_i(20) ? 8854 : 8855;
|
||||
|
||||
m_caster->CastSpell(m_caster, spell_id, true, nullptr);
|
||||
m_caster->CastSpell(m_caster, spell_id, true);
|
||||
return;
|
||||
}
|
||||
// Brittle Armor - need remove one 24575 Brittle Armor aura
|
||||
@@ -3252,7 +3243,7 @@ void Spell::EffectScriptEffect(SpellEffIndex effIndex)
|
||||
for (uint8 i = 0; i < 15; ++i)
|
||||
{
|
||||
m_caster->GetRandomPoint(*destTarget, radius, x, y, z);
|
||||
m_caster->CastSpell(x, y, z, 54522, true);
|
||||
m_caster->CastSpell({ x, y, z }, 54522, true);
|
||||
}
|
||||
break;
|
||||
}
|
||||
@@ -3370,7 +3361,7 @@ void Spell::EffectScriptEffect(SpellEffIndex effIndex)
|
||||
// proc a spellcast
|
||||
if (Aura* chargesAura = m_caster->GetAura(59907))
|
||||
{
|
||||
m_caster->CastSpell(unitTarget, spell_heal, true, nullptr, nullptr, m_caster->ToTempSummon()->GetSummonerGUID());
|
||||
m_caster->CastSpell(unitTarget, spell_heal, m_caster->ToTempSummon()->GetSummonerGUID());
|
||||
if (chargesAura->ModCharges(-1))
|
||||
m_caster->ToTempSummon()->UnSummon();
|
||||
}
|
||||
@@ -3389,7 +3380,6 @@ void Spell::EffectScriptEffect(SpellEffIndex effIndex)
|
||||
case 58590: // Rank 9
|
||||
case 58591: // Rank 10
|
||||
{
|
||||
int32 basepoints0 = damage;
|
||||
// Cast Absorb on totems
|
||||
for (uint8 slot = SUMMON_SLOT_TOTEM_FIRE; slot < MAX_TOTEM_SLOT; ++slot)
|
||||
{
|
||||
@@ -3399,14 +3389,17 @@ void Spell::EffectScriptEffect(SpellEffIndex effIndex)
|
||||
Creature* totem = unitTarget->GetMap()->GetCreature(unitTarget->m_SummonSlot[slot]);
|
||||
if (totem && totem->IsTotem())
|
||||
{
|
||||
m_caster->CastCustomSpell(totem, 55277, &basepoints0, nullptr, nullptr, true);
|
||||
CastSpellExtraArgs args(TRIGGERED_FULL_MASK);
|
||||
args.SpellValueOverrides.AddMod(SPELLVALUE_BASE_POINT0, damage);
|
||||
m_caster->CastSpell(totem, 55277, args);
|
||||
}
|
||||
}
|
||||
// Glyph of Stoneclaw Totem
|
||||
if (AuraEffect* aur=unitTarget->GetAuraEffect(63298, 0))
|
||||
{
|
||||
basepoints0 *= aur->GetAmount();
|
||||
m_caster->CastCustomSpell(unitTarget, 55277, &basepoints0, nullptr, nullptr, true);
|
||||
CastSpellExtraArgs args(TRIGGERED_FULL_MASK);
|
||||
args.SpellValueOverrides.AddMod(SPELLVALUE_BASE_POINT0, damage* aur->GetAmount());
|
||||
m_caster->CastSpell(unitTarget, 55277, args);
|
||||
}
|
||||
break;
|
||||
}
|
||||
@@ -3940,8 +3933,9 @@ void Spell::EffectFeedPet(SpellEffIndex effIndex)
|
||||
uint32 count = 1;
|
||||
player->DestroyItemCount(foodItem, count, true);
|
||||
/// @todo fix crash when a spell has two effects, both pointed at the same item target
|
||||
|
||||
m_caster->CastCustomSpell(pet, m_spellInfo->Effects[effIndex].TriggerSpell, &benefit, nullptr, nullptr, true);
|
||||
CastSpellExtraArgs args(TRIGGERED_FULL_MASK);
|
||||
args.SpellValueOverrides.AddMod(SPELLVALUE_BASE_POINT0, benefit);
|
||||
m_caster->CastSpell(pet, m_spellInfo->Effects[effIndex].TriggerSpell, args);
|
||||
}
|
||||
|
||||
void Spell::EffectDismissPet(SpellEffIndex effIndex)
|
||||
@@ -4665,7 +4659,11 @@ void Spell::EffectDestroyAllTotems(SpellEffIndex /*effIndex*/)
|
||||
}
|
||||
ApplyPct(mana, damage);
|
||||
if (mana)
|
||||
m_caster->CastCustomSpell(m_caster, 39104, &mana, nullptr, nullptr, true);
|
||||
{
|
||||
CastSpellExtraArgs args(TRIGGERED_FULL_MASK);
|
||||
args.SpellValueOverrides.AddMod(SPELLVALUE_BASE_POINT0, mana);
|
||||
m_caster->CastSpell(m_caster, 39104, args);
|
||||
}
|
||||
}
|
||||
|
||||
void Spell::EffectDurabilityDamage(SpellEffIndex effIndex)
|
||||
|
||||
Reference in new issue
Block a user