mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-17 16:10:49 +01:00
Core/Spells: Move cloning spells to SpellScript
This commit is contained in:
@@ -1885,6 +1885,18 @@ INSERT INTO `spell_script_names` (`spell_id`,`ScriptName`) VALUES
|
||||
( 61177, 'spell_gen_profession_research'),
|
||||
( 61288, 'spell_gen_profession_research'),
|
||||
( 61756, 'spell_gen_profession_research'),
|
||||
( 45785, 'spell_generic_clone'),
|
||||
( 49889, 'spell_generic_clone'),
|
||||
( 50218, 'spell_generic_clone'),
|
||||
( 51719, 'spell_generic_clone'),
|
||||
( 57528, 'spell_generic_clone'),
|
||||
( 69828, 'spell_generic_clone'),
|
||||
( 41055, 'spell_generic_clone_weapon'),
|
||||
( 63416, 'spell_generic_clone_weapon'),
|
||||
( 69891, 'spell_generic_clone_weapon'),
|
||||
( 45206, 'spell_generic_clone_weapon'),
|
||||
( 69892, 'spell_generic_clone_weapon'),
|
||||
( 57593, 'spell_generic_clone_weapon'),
|
||||
-- instances
|
||||
-- Black Temple
|
||||
( 41475, 'spell_boss_lady_malande_shield'),
|
||||
|
||||
14
sql/updates/world/2011_04_17_03_world_spell_script_names.sql
Normal file
14
sql/updates/world/2011_04_17_03_world_spell_script_names.sql
Normal file
@@ -0,0 +1,14 @@
|
||||
DELETE FROM `spell_script_names` WHERE `ScriptName` IN ('spell_generic_clone', 'spell_generic_clone_weapon');
|
||||
INSERT INTO `spell_script_names` (`spell_id`,`ScriptName`) VALUES
|
||||
(45785, 'spell_generic_clone'),
|
||||
(49889, 'spell_generic_clone'),
|
||||
(50218, 'spell_generic_clone'),
|
||||
(51719, 'spell_generic_clone'),
|
||||
(57528, 'spell_generic_clone'),
|
||||
(69828, 'spell_generic_clone'),
|
||||
(41055, 'spell_generic_clone_weapon'),
|
||||
(63416, 'spell_generic_clone_weapon'),
|
||||
(69891, 'spell_generic_clone_weapon'),
|
||||
(45206, 'spell_generic_clone_weapon'),
|
||||
(69892, 'spell_generic_clone_weapon'),
|
||||
(57593, 'spell_generic_clone_weapon');
|
||||
@@ -4402,53 +4402,8 @@ void Spell::EffectScriptEffect(SpellEffIndex effIndex)
|
||||
return;
|
||||
}
|
||||
case 45204: // Clone Me!
|
||||
case 45785: // Sinister Reflection Clone
|
||||
case 49889: // Mystery of the Infinite: Future You's Mirror Image Aura
|
||||
case 50218: // The Cleansing: Your Inner Turmoil's Mirror Image Aura
|
||||
case 51719: // Altar of Quetz'lun: Material You's Mirror Image Aura
|
||||
case 57528: // Nightmare Figment Mirror Image
|
||||
case 69828: // Halls of Reflection Clone
|
||||
m_caster->CastSpell(unitTarget, damage, true);
|
||||
break;
|
||||
case 41055: // Copy Weapon
|
||||
case 63416:
|
||||
case 69891:
|
||||
m_caster->CastSpell(unitTarget, damage, true);
|
||||
if (unitTarget->GetTypeId() == TYPEID_PLAYER)
|
||||
break;
|
||||
if (m_caster->GetTypeId() == TYPEID_PLAYER)
|
||||
{
|
||||
if (Item * mainItem = m_caster->ToPlayer()->GetItemByPos(INVENTORY_SLOT_BAG_0, EQUIPMENT_SLOT_MAINHAND))
|
||||
unitTarget->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID, mainItem->GetEntry());
|
||||
}
|
||||
else
|
||||
unitTarget->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID, m_caster->GetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID));
|
||||
break;
|
||||
case 45206: // Copy Off-hand Weapon
|
||||
case 69892:
|
||||
m_caster->CastSpell(unitTarget, damage, true);
|
||||
if (unitTarget->GetTypeId() == TYPEID_PLAYER)
|
||||
break;
|
||||
if (m_caster->GetTypeId() == TYPEID_PLAYER)
|
||||
{
|
||||
if (Item * offItem = m_caster->ToPlayer()->GetItemByPos(INVENTORY_SLOT_BAG_0, EQUIPMENT_SLOT_OFFHAND))
|
||||
unitTarget->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID + 1, offItem->GetEntry());
|
||||
}
|
||||
else
|
||||
unitTarget->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID + 1, m_caster->GetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID + 1));
|
||||
break;
|
||||
case 57593: // Copy Ranged Weapon
|
||||
m_caster->CastSpell(unitTarget, damage, true);
|
||||
if (unitTarget->GetTypeId() == TYPEID_PLAYER)
|
||||
break;
|
||||
if (m_caster->GetTypeId() == TYPEID_PLAYER)
|
||||
{
|
||||
if (Item * rangedItem = m_caster->ToPlayer()->GetItemByPos(INVENTORY_SLOT_BAG_0, EQUIPMENT_SLOT_RANGED))
|
||||
unitTarget->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID + 2, rangedItem->GetEntry());
|
||||
}
|
||||
else
|
||||
unitTarget->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID + 2, m_caster->GetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID + 2));
|
||||
break;
|
||||
case 55693: // Remove Collapsing Cave Aura
|
||||
if (!unitTarget)
|
||||
return;
|
||||
|
||||
@@ -799,6 +799,145 @@ class spell_gen_profession_research : public SpellScriptLoader
|
||||
}
|
||||
};
|
||||
|
||||
class spell_generic_clone : public SpellScriptLoader
|
||||
{
|
||||
public:
|
||||
spell_generic_clone() : SpellScriptLoader("spell_generic_clone") { }
|
||||
|
||||
class spell_generic_clone_SpellScript : public SpellScript
|
||||
{
|
||||
PrepareSpellScript(spell_generic_clone_SpellScript);
|
||||
|
||||
void HandleScriptEffect(SpellEffIndex effIndex)
|
||||
{
|
||||
PreventHitDefaultEffect(effIndex);
|
||||
Unit* caster = GetCaster();
|
||||
uint32 spellId = uint32(SpellMgr::CalculateSpellEffectAmount(GetSpellInfo(), effIndex));
|
||||
|
||||
if (Unit* target = GetHitUnit())
|
||||
target->CastSpell(caster, spellId, true);
|
||||
}
|
||||
|
||||
void Register()
|
||||
{
|
||||
OnEffect += SpellEffectFn(spell_generic_clone_SpellScript::HandleScriptEffect, EFFECT_1, SPELL_EFFECT_SCRIPT_EFFECT);
|
||||
OnEffect += SpellEffectFn(spell_generic_clone_SpellScript::HandleScriptEffect, EFFECT_2, SPELL_EFFECT_SCRIPT_EFFECT);
|
||||
}
|
||||
};
|
||||
|
||||
SpellScript* GetSpellScript() const
|
||||
{
|
||||
return new spell_generic_clone_SpellScript();
|
||||
}
|
||||
};
|
||||
|
||||
enum CloneWeaponSpells
|
||||
{
|
||||
SPELL_COPY_WEAPON = 41055,
|
||||
SPELL_COPY_WEAPON_2 = 63416,
|
||||
SPELL_COPY_WEAPON_3 = 69891,
|
||||
|
||||
SPELL_COPY_OFFHAND = 45206,
|
||||
SPELL_COPY_OFFHAND_2 = 69892,
|
||||
|
||||
SPELL_COPY_RANGED = 57593
|
||||
};
|
||||
|
||||
class spell_generic_clone_weapon : public SpellScriptLoader
|
||||
{
|
||||
public:
|
||||
spell_generic_clone_weapon() : SpellScriptLoader("spell_generic_clone_weapon") { }
|
||||
|
||||
class spell_generic_clone_weapon_SpellScript : public SpellScript
|
||||
{
|
||||
PrepareSpellScript(spell_generic_clone_weapon_SpellScript);
|
||||
bool Validate(SpellEntry const* /*spellEntry*/)
|
||||
{
|
||||
if (!sSpellStore.LookupEntry(SPELL_COPY_WEAPON))
|
||||
return false;
|
||||
if (!sSpellStore.LookupEntry(SPELL_COPY_WEAPON_2))
|
||||
return false;
|
||||
if (!sSpellStore.LookupEntry(SPELL_COPY_WEAPON_3))
|
||||
return false;
|
||||
if (!sSpellStore.LookupEntry(SPELL_COPY_OFFHAND))
|
||||
return false;
|
||||
if (!sSpellStore.LookupEntry(SPELL_COPY_OFFHAND_2))
|
||||
return false;
|
||||
if (!sSpellStore.LookupEntry(SPELL_COPY_RANGED))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
void HandleScriptEffect(SpellEffIndex effIndex)
|
||||
{
|
||||
PreventHitDefaultEffect(effIndex);
|
||||
Unit* caster = GetCaster();
|
||||
Unit* target = GetHitUnit();
|
||||
|
||||
if (!target)
|
||||
return;
|
||||
|
||||
uint32 spellId = uint32(SpellMgr::CalculateSpellEffectAmount(GetSpellInfo(), EFFECT_0));
|
||||
target->CastSpell(caster, spellId, true);
|
||||
|
||||
if (target->GetTypeId() == TYPEID_PLAYER)
|
||||
return;
|
||||
|
||||
switch (GetSpellInfo()->Id)
|
||||
{
|
||||
case SPELL_COPY_WEAPON:
|
||||
case SPELL_COPY_WEAPON_2:
|
||||
case SPELL_COPY_WEAPON_3:
|
||||
{
|
||||
if (Player* plrCaster = caster->ToPlayer())
|
||||
{
|
||||
if (Item* mainItem = plrCaster->GetItemByPos(INVENTORY_SLOT_BAG_0, EQUIPMENT_SLOT_MAINHAND))
|
||||
target->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID, mainItem->GetEntry());
|
||||
}
|
||||
else
|
||||
target->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID, caster->GetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID));
|
||||
break;
|
||||
}
|
||||
case SPELL_COPY_OFFHAND:
|
||||
case SPELL_COPY_OFFHAND_2:
|
||||
{
|
||||
if (Player* plrCaster = caster->ToPlayer())
|
||||
{
|
||||
if (Item* offItem = plrCaster->GetItemByPos(INVENTORY_SLOT_BAG_0, EQUIPMENT_SLOT_OFFHAND))
|
||||
target->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID + 1, offItem->GetEntry());
|
||||
}
|
||||
else
|
||||
target->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID + 1, caster->GetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID + 1));
|
||||
break;
|
||||
}
|
||||
case SPELL_COPY_RANGED:
|
||||
{
|
||||
if (Player* plrCaster = caster->ToPlayer())
|
||||
{
|
||||
if (Item* rangedItem = plrCaster->GetItemByPos(INVENTORY_SLOT_BAG_0, EQUIPMENT_SLOT_RANGED))
|
||||
target->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID + 2, rangedItem->GetEntry());
|
||||
}
|
||||
else
|
||||
target->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID + 2, caster->GetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID + 2));
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void Register()
|
||||
{
|
||||
OnEffect += SpellEffectFn(spell_generic_clone_weapon_SpellScript::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
|
||||
}
|
||||
};
|
||||
|
||||
SpellScript* GetSpellScript() const
|
||||
{
|
||||
return new spell_generic_clone_weapon_SpellScript();
|
||||
}
|
||||
};
|
||||
|
||||
void AddSC_generic_spell_scripts()
|
||||
{
|
||||
new spell_gen_absorb0_hitlimit1();
|
||||
@@ -819,4 +958,6 @@ void AddSC_generic_spell_scripts()
|
||||
new spell_gen_gunship_portal();
|
||||
new spell_gen_dungeon_credit();
|
||||
new spell_gen_profession_research();
|
||||
new spell_generic_clone();
|
||||
new spell_generic_clone_weapon();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user