Add more methods to SpellScript.
Spells cleanup: move spells from the core to scripts. * Shaman spells: 39610 Mana Tide Totem, 1535 Fire Nova (and ranks) * Death Knight spells: 55090 Scourge Strike (and ranks), 49158 Corpse Explosion (and ranks), 50524 Runic Power Feed * Druid spells: 54846 Glyph of Starfire * Warlock spells: 6201 Create Healthstone (and ranks), 47422 Everlasting Affliction, 47193 Demonic Empowerment, 63521 Guarded by The Light * Hunter spells: 37506 Scatter Shot, 53412 Invigoration, 53209 Chimera Shot * Quest spells: 45449 Arcane Prisoner Rescue (quest 11587), 46023 The Ultrasonic Screwdriver (quest 11730). Closes issue #3068 Clean old code for hunter's Heart of the Phoenix, move script effect of hunter's Master's Call to corresponding script. Move DK's Hungering Cold to spell_scripts table (needs DB support) --HG-- branch : trunk
This commit is contained in:
1 parent
0284ed4cfe
commit
66fcd52106
12 files changed
+1127
-520
No files matched your search
@@ -14740,6 +14740,9 @@ LOCK TABLES `spell_script_names` WRITE;
|
||||
INSERT INTO `spell_script_names` (`spell_id`,`ScriptName`) VALUES
|
||||
-- generic
|
||||
( 58601, 'spell_gen_remove_flight_auras'),
|
||||
-- quest
|
||||
( 45449, 'spell_q11587_arcane_prisoner_rescue'),
|
||||
( 46023, 'spell_q11730_ultrasonic_screwdriver'),
|
||||
-- warrior
|
||||
( 12975,'spell_warr_last_stand'),
|
||||
-- paladin
|
||||
@@ -14747,9 +14750,12 @@ INSERT INTO `spell_script_names` (`spell_id`,`ScriptName`) VALUES
|
||||
(-20473, 'spell_pal_holy_shock'),
|
||||
( 37877, 'spell_pal_blessing_of_faith'),
|
||||
-- hunter
|
||||
( 23989, 'spell_hun_readiness'),
|
||||
( 53209, 'spell_hun_chimera_shot'),
|
||||
( 53412, 'spell_hun_invigoration'),
|
||||
( 53271, 'spell_hun_masters_call'),
|
||||
( 53478, 'spell_hun_last_stand_pet'),
|
||||
( 23989, 'spell_hun_readiness'),
|
||||
( 37506, 'spell_hun_scatter_shot'),
|
||||
( 55709, 'spell_hun_pet_heart_of_the_phoenix'),
|
||||
( 54044, 'spell_hun_pet_carrion_feeder'),
|
||||
-- rogue
|
||||
@@ -14761,13 +14767,23 @@ INSERT INTO `spell_script_names` (`spell_id`,`ScriptName`) VALUES
|
||||
( 47948, 'spell_pri_pain_and_suffering_proc'),
|
||||
(-47540, 'spell_pri_penance'),
|
||||
-- death knight
|
||||
(-49158,'spell_dk_corpse_explosion'),
|
||||
( 50524,'spell_dk_runic_power_feed'),
|
||||
(-55090,'spell_dk_scourge_strike'),
|
||||
-- shaman
|
||||
( 39610, 'spell_sha_mana_tide_totem'),
|
||||
( -1535, 'spell_sha_fire_nova'),
|
||||
-- mage
|
||||
( 11958, 'spell_mage_cold_snap'),
|
||||
( 31687, 'spell_mage_summon_water_elemental'),
|
||||
( 32826, 'spell_mage_polymorph_visual');
|
||||
( 32826, 'spell_mage_polymorph_visual'),
|
||||
-- warlock
|
||||
( -6201, 'spell_warl_create_healthstone'),
|
||||
( 47193, 'spell_warl_demonic_empowerment'),
|
||||
( 47422, 'spell_warl_everlasting_affliction'),
|
||||
( 63521, 'spell_warl_guarded_by_the_light'),
|
||||
-- druid
|
||||
( 54846, 'spell_dru_glyph_of_starfire');
|
||||
/*!40000 ALTER TABLE `spell_script_names` ENABLE KEYS */;
|
||||
UNLOCK TABLES;
|
||||
|
||||
|
||||
@@ -0,0 +1,65 @@
|
||||
-- QUEST SPELLS
|
||||
-- 45449 Arcane Prisoner Rescue
|
||||
DELETE FROM `spell_script_names` WHERE `spell_id`=45449 AND `ScriptName`='spell_q11587_arcane_prisoner_rescue';
|
||||
INSERT INTO `spell_script_names` (`spell_id`,`ScriptName`) VALUES (45449,'spell_q11587_arcane_prisoner_rescue');
|
||||
|
||||
-- 46023 The Ultrasonic Screwdriver
|
||||
DELETE FROM `spell_script_names` WHERE `spell_id`=46023 AND `ScriptName`='spell_q11730_ultrasonic_screwdriver';
|
||||
INSERT INTO `spell_script_names` (`spell_id`,`ScriptName`) VALUES (46023,'spell_q11730_ultrasonic_screwdriver');
|
||||
|
||||
-- SHAMAN SPELLS
|
||||
-- 1535 Fire Nova (and ranks)
|
||||
DELETE FROM `spell_script_names` WHERE `spell_id`=-1535 AND `ScriptName`='spell_sha_fire_nova';
|
||||
INSERT INTO `spell_script_names` (`spell_id`,`ScriptName`) VALUES (-1535,'spell_sha_fire_nova');
|
||||
|
||||
-- 39610 Mana Tide Totem
|
||||
DELETE FROM `spell_script_names` WHERE `spell_id`=39610 AND `ScriptName`='spell_sha_mana_tide_totem';
|
||||
INSERT INTO `spell_script_names` (`spell_id`,`ScriptName`) VALUES (39610,'spell_sha_mana_tide_totem');
|
||||
|
||||
-- DEATH KNIGHT SPELLS
|
||||
-- 49158 Corpse Explosion (and ranks)
|
||||
DELETE FROM `spell_script_names` WHERE `spell_id`=-49158 AND `ScriptName`='spell_dk_corpse_explosion';
|
||||
INSERT INTO `spell_script_names` (`spell_id`,`ScriptName`) VALUES (-49158,'spell_dk_corpse_explosion');
|
||||
|
||||
-- 50524 Runic Power Feed
|
||||
DELETE FROM `spell_script_names` WHERE `spell_id`=50524 AND `ScriptName`='spell_dk_runic_power_feed';
|
||||
INSERT INTO `spell_script_names` (`spell_id`,`ScriptName`) VALUES (50524,'spell_dk_runic_power_feed');
|
||||
|
||||
-- 55090 Scourge Strike (and ranks)
|
||||
DELETE FROM `spell_script_names` WHERE `spell_id`=-55090 AND `ScriptName`='spell_dk_scourge_strike';
|
||||
INSERT INTO `spell_script_names` (`spell_id`,`ScriptName`) VALUES (-55090,'spell_dk_scourge_strike');
|
||||
|
||||
-- DRUID SPELLS
|
||||
-- 54846 Glyph of Starfire
|
||||
DELETE FROM `spell_script_names` WHERE `spell_id`=54846 AND `ScriptName`='spell_dru_glyph_of_starfire';
|
||||
INSERT INTO `spell_script_names` (`spell_id`,`ScriptName`) VALUES (54846,'spell_dru_glyph_of_starfire');
|
||||
|
||||
-- WARLOCK SPELLS
|
||||
-- 6201 Create Healthstone (and ranks)
|
||||
DELETE FROM `spell_script_names` WHERE `spell_id`=-6201 AND `ScriptName`='spell_warl_create_healthstone';
|
||||
INSERT INTO `spell_script_names` (`spell_id`,`ScriptName`) VALUES (-6201,'spell_warl_create_healthstone');
|
||||
|
||||
-- 47193 Demonic Empowerment
|
||||
DELETE FROM `spell_script_names` WHERE `spell_id`=47193 AND `ScriptName`='spell_warl_demonic_empowerment';
|
||||
INSERT INTO `spell_script_names` (`spell_id`,`ScriptName`) VALUES (47193,'spell_warl_demonic_empowerment');
|
||||
|
||||
-- 47422 Everlasting Affliction
|
||||
DELETE FROM `spell_script_names` WHERE `spell_id`=47422 AND `ScriptName`='spell_warl_everlasting_affliction';
|
||||
INSERT INTO `spell_script_names` (`spell_id`,`ScriptName`) VALUES (47422,'spell_warl_everlasting_affliction');
|
||||
|
||||
-- 63521 Guarded by The Light
|
||||
DELETE FROM `spell_script_names` WHERE `spell_id`=63521 AND `ScriptName`='spell_warl_guarded_by_the_light';
|
||||
INSERT INTO `spell_script_names` (`spell_id`,`ScriptName`) VALUES (63521,'spell_warl_guarded_by_the_light');
|
||||
|
||||
-- HUNTER SPELLS
|
||||
-- 53209 Chimera Shot
|
||||
DELETE FROM `spell_script_names` WHERE `spell_id`=53209 AND `ScriptName`='spell_hun_chimera_shot';
|
||||
INSERT INTO `spell_script_names` (`spell_id`,`ScriptName`) VALUES (53209,'spell_hun_chimera_shot');
|
||||
|
||||
-- 53412 Invigoration
|
||||
DELETE FROM `spell_script_names` WHERE `spell_id`=53412 AND `ScriptName`='spell_hun_invigoration';
|
||||
INSERT INTO `spell_script_names` (`spell_id`,`ScriptName`) VALUES (53412,'spell_hun_invigoration');
|
||||
|
||||
-- 37506 Scatter Shot
|
||||
DELETE FROM `spell_script_names` WHERE `spell_id`=37506 AND `ScriptName`='spell_hun_scatter_shot';
|
||||
INSERT INTO `spell_script_names` (`spell_id`,`ScriptName`) VALUES (37506,'spell_hun_scatter_shot');
|
||||
@@ -523,6 +523,7 @@ void AddSC_rogue_spell_scripts();
|
||||
void AddSC_shaman_spell_scripts();
|
||||
void AddSC_warlock_spell_scripts();
|
||||
void AddSC_warrior_spell_scripts();
|
||||
void AddSC_quest_spell_scripts();
|
||||
void AddSC_example_spell_scripts();
|
||||
|
||||
// battlegrounds
|
||||
@@ -580,6 +581,7 @@ void AddSpellScripts()
|
||||
AddSC_shaman_spell_scripts();
|
||||
AddSC_warlock_spell_scripts();
|
||||
AddSC_warrior_spell_scripts();
|
||||
AddSC_quest_spell_scripts();
|
||||
AddSC_example_spell_scripts();
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -1607,22 +1607,6 @@ void Spell::EffectDummy(uint32 i)
|
||||
return;
|
||||
}
|
||||
break;
|
||||
case SPELLFAMILY_HUNTER:
|
||||
switch(m_spellInfo->Id)
|
||||
{
|
||||
case 37506: // Scatter Shot
|
||||
{
|
||||
if (m_caster->GetTypeId() != TYPEID_PLAYER)
|
||||
return;
|
||||
|
||||
// break Auto Shot and autohit
|
||||
m_caster->InterruptSpell(CURRENT_AUTOREPEAT_SPELL);
|
||||
m_caster->AttackStop();
|
||||
m_caster->ToPlayer()->SendAttackSwingCancelAttack();
|
||||
return;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case SPELLFAMILY_PALADIN:
|
||||
// Divine Storm
|
||||
if (m_spellInfo->SpellFamilyFlags[1] & SPELLFAMILYFLAG1_PALADIN_DIVINESTORM && i == 1)
|
||||
@@ -1690,50 +1674,6 @@ void Spell::EffectDummy(uint32 i)
|
||||
m_caster->CastCustomSpell(unitTarget, 52032, &damage, 0, 0, true, 0, 0, m_originalCasterGUID);
|
||||
return;
|
||||
}
|
||||
if (m_spellInfo->Id == 39610) // Mana Tide Totem effect
|
||||
{
|
||||
if (!unitTarget || unitTarget->getPowerType() != POWER_MANA)
|
||||
return;
|
||||
// Glyph of Mana Tide
|
||||
if (Unit *owner = m_caster->GetOwner())
|
||||
if (AuraEffect *dummy = owner->GetAuraEffect(55441, 0))
|
||||
damage += dummy->GetAmount();
|
||||
// Regenerate 6% of Total Mana Every 3 secs
|
||||
int32 EffectBasePoints0 = unitTarget->GetMaxPower(POWER_MANA) * damage / 100;
|
||||
m_caster->CastCustomSpell(unitTarget, 39609, &EffectBasePoints0, NULL, NULL, true, NULL, NULL, m_originalCasterGUID);
|
||||
return;
|
||||
}
|
||||
// Fire Nova
|
||||
if (m_spellInfo->SpellIconID == 33)
|
||||
{
|
||||
if (!m_caster)
|
||||
return;
|
||||
|
||||
uint32 triggered_spell_id;
|
||||
switch(m_spellInfo->Id)
|
||||
{
|
||||
case 1535: triggered_spell_id = 8349; break;
|
||||
case 8498: triggered_spell_id = 8502; break;
|
||||
case 8499: triggered_spell_id = 8503; break;
|
||||
case 11314: triggered_spell_id = 11306; break;
|
||||
case 11315: triggered_spell_id = 11307; break;
|
||||
case 25546: triggered_spell_id = 25535; break;
|
||||
case 25547: triggered_spell_id = 25537; break;
|
||||
case 61649: triggered_spell_id = 61650; break;
|
||||
case 61657: triggered_spell_id = 61654; break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
// fire slot
|
||||
if (triggered_spell_id && m_caster->m_SummonSlot[1])
|
||||
{
|
||||
Creature* totem = m_caster->GetMap()->GetCreature(m_caster->m_SummonSlot[1]);
|
||||
if (totem && totem->isTotem())
|
||||
totem->CastSpell(totem, triggered_spell_id, true);
|
||||
return;
|
||||
}
|
||||
return;
|
||||
}
|
||||
// Lava Lash
|
||||
if (m_spellInfo->SpellFamilyFlags[2] & SPELLFAMILYFLAG2_SHAMAN_LAVA_LASH)
|
||||
{
|
||||
@@ -1761,13 +1701,6 @@ void Spell::EffectDummy(uint32 i)
|
||||
m_caster->CastCustomSpell(m_caster, 45470, &bp, NULL, NULL, false);
|
||||
return;
|
||||
}
|
||||
// Scourge Strike
|
||||
if (m_spellInfo->SpellFamilyFlags[1] & SPELLFAMILYFLAG1_DK_SCOURGE_STRIKE)
|
||||
{
|
||||
int32 bp = (m_damage * damage * unitTarget->GetDiseasesByCaster(m_caster->GetGUID())) / 100;
|
||||
m_caster->CastCustomSpell(unitTarget, 70890, &bp, NULL, NULL, true);
|
||||
return;
|
||||
}
|
||||
// Death Coil
|
||||
if (m_spellInfo->SpellFamilyFlags[0] & SPELLFAMILYFLAG_DK_DEATH_COIL)
|
||||
{
|
||||
@@ -1783,40 +1716,30 @@ void Spell::EffectDummy(uint32 i)
|
||||
}
|
||||
return;
|
||||
}
|
||||
// Hungering Cold
|
||||
if (m_spellInfo->SpellFamilyFlags[1] & SPELLFAMILYFLAG1_DK_HUNGERING_COLD)
|
||||
{
|
||||
unitTarget->CastSpell(m_caster, 51209, true);
|
||||
return;
|
||||
}
|
||||
// Death Grip
|
||||
if (m_spellInfo->Id == 49560)
|
||||
switch (m_spellInfo->Id)
|
||||
{
|
||||
case 49560: // Death Grip
|
||||
Position pos;
|
||||
GetSummonPosition(i, pos);
|
||||
if (Unit *unit = unitTarget->GetVehicleBase()) // what is this for?
|
||||
unit->CastSpell(pos.GetPositionX(),pos.GetPositionY(),pos.GetPositionZ(),damage,true);
|
||||
unit->CastSpell(pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ(), damage, true);
|
||||
else
|
||||
unitTarget->CastSpell(pos.GetPositionX(),pos.GetPositionY(),pos.GetPositionZ(),damage,true);
|
||||
unitTarget->CastSpell(pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ(), damage, true);
|
||||
return;
|
||||
}
|
||||
else if (m_spellInfo->Id == 46584) // Raise dead
|
||||
{
|
||||
case 46584: // Raise Dead
|
||||
if (m_caster->GetTypeId() != TYPEID_PLAYER)
|
||||
return;
|
||||
|
||||
// Do we have talent Master of Ghouls?
|
||||
if (m_caster->HasAura(52143))
|
||||
// summon as pet
|
||||
bp = 52150;
|
||||
bp = 52150;
|
||||
else
|
||||
// or guardian
|
||||
bp = 46585;
|
||||
|
||||
if (m_targets.HasDst())
|
||||
{
|
||||
targets.setDst(m_targets.m_dstPos);
|
||||
}
|
||||
else
|
||||
{
|
||||
targets.setDst(*m_caster);
|
||||
@@ -1824,50 +1747,16 @@ void Spell::EffectDummy(uint32 i)
|
||||
triggered = false;
|
||||
}
|
||||
// Remove cooldown - summon spellls have category
|
||||
m_caster->ToPlayer()->RemoveSpellCooldown(m_spellInfo->Id,true);
|
||||
spell_id=48289;
|
||||
}
|
||||
m_caster->ToPlayer()->RemoveSpellCooldown(m_spellInfo->Id, true);
|
||||
spell_id = 48289;
|
||||
break;
|
||||
// Raise dead - take reagents and trigger summon spells
|
||||
else if (m_spellInfo->Id == 48289)
|
||||
{
|
||||
case 48289:
|
||||
if (m_targets.HasDst())
|
||||
targets.setDst(m_targets.m_dstPos);
|
||||
|
||||
spell_id = CalculateDamage(0, NULL);
|
||||
}
|
||||
// Corpse Explosion
|
||||
else if (m_spellInfo->SpellIconID == 1737)
|
||||
{
|
||||
// Dummy effect 1 is used only for targeting and damage amount
|
||||
if (i != 0)
|
||||
return;
|
||||
int32 bp = 0;
|
||||
// Living ghoul as a target
|
||||
if (unitTarget->isAlive())
|
||||
{
|
||||
bp = unitTarget->GetMaxHealth()*0.25f;
|
||||
}
|
||||
// Some corpse
|
||||
else
|
||||
{
|
||||
bp = damage;
|
||||
}
|
||||
m_caster->CastCustomSpell(unitTarget, SpellMgr::CalculateSpellEffectAmount(m_spellInfo, 1), &bp,NULL,NULL,true);
|
||||
// Corpse Explosion (Suicide)
|
||||
unitTarget->CastCustomSpell(unitTarget,43999,&bp,NULL,NULL,true);
|
||||
// Set corpse look
|
||||
unitTarget->SetDisplayId(25537+urand(0,3));
|
||||
}
|
||||
// Runic Power Feed (keeping Gargoyle alive)
|
||||
else if (m_spellInfo->Id == 50524)
|
||||
{
|
||||
// No power, dismiss Gargoyle
|
||||
if (m_caster->GetPower(POWER_RUNIC_POWER)<30)
|
||||
m_caster->RemoveAurasDueToSpell(50514, m_caster->GetGUID());
|
||||
else
|
||||
m_caster->ModifyPower(POWER_RUNIC_POWER,-30);
|
||||
|
||||
return;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
@@ -4748,24 +4637,6 @@ void Spell::EffectScriptEffect(uint32 effIndex)
|
||||
}
|
||||
return;
|
||||
}
|
||||
// Glyph of Starfire
|
||||
case 54846:
|
||||
{
|
||||
if (AuraEffect const * aurEff = unitTarget->GetAuraEffect(SPELL_AURA_PERIODIC_DAMAGE,SPELLFAMILY_DRUID,0x00000002,0,0,m_caster->GetGUID()))
|
||||
{
|
||||
uint32 countMin = aurEff->GetBase()->GetMaxDuration();
|
||||
uint32 countMax = 18000;
|
||||
countMax += m_caster->HasAura(38414) ? 3000 : 0;
|
||||
countMax += m_caster->HasAura(57865) ? 3000 : 0;
|
||||
|
||||
if (countMin < countMax)
|
||||
{
|
||||
aurEff->GetBase()->SetDuration(uint32(aurEff->GetBase()->GetDuration()+3000));
|
||||
aurEff->GetBase()->SetMaxDuration(countMin+3000);
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
// Glyph of Backstab
|
||||
case 63975:
|
||||
{
|
||||
@@ -5653,211 +5524,6 @@ void Spell::EffectScriptEffect(uint32 effIndex)
|
||||
}
|
||||
break;
|
||||
}
|
||||
case SPELLFAMILY_WARLOCK:
|
||||
{
|
||||
switch(m_spellInfo->Id)
|
||||
{
|
||||
// Healthstone creating spells
|
||||
case 6201:
|
||||
case 6202:
|
||||
case 5699:
|
||||
case 11729:
|
||||
case 11730:
|
||||
case 27230:
|
||||
case 47871:
|
||||
case 47878:
|
||||
{
|
||||
uint32 itemtype;
|
||||
uint32 rank = 0;
|
||||
|
||||
// Improved Healthstone
|
||||
if (AuraEffect const * aurEff = unitTarget->GetDummyAuraEffect(SPELLFAMILY_WARLOCK, 284, 0))
|
||||
{
|
||||
if (aurEff->GetId() == 18692)
|
||||
rank = 1;
|
||||
else if (aurEff->GetId() == 18693)
|
||||
rank = 2;
|
||||
else
|
||||
sLog.outError("Unknown rank of Improved Healthstone id: %d", aurEff->GetId());
|
||||
}
|
||||
|
||||
static uint32 const itypes[8][3] = {
|
||||
{ 5512, 19004, 19005}, // Minor Healthstone
|
||||
{ 5511, 19006, 19007}, // Lesser Healthstone
|
||||
{ 5509, 19008, 19009}, // Healthstone
|
||||
{ 5510, 19010, 19011}, // Greater Healthstone
|
||||
{ 9421, 19012, 19013}, // Major Healthstone
|
||||
{22103, 22104, 22105}, // Master Healthstone
|
||||
{36889, 36890, 36891}, // Demonic Healthstone
|
||||
{36892, 36893, 36894} // Fel Healthstone
|
||||
};
|
||||
|
||||
switch(m_spellInfo->Id)
|
||||
{
|
||||
case 6201:
|
||||
itemtype=itypes[0][rank];break; // Minor Healthstone
|
||||
case 6202:
|
||||
itemtype=itypes[1][rank];break; // Lesser Healthstone
|
||||
case 5699:
|
||||
itemtype=itypes[2][rank];break; // Healthstone
|
||||
case 11729:
|
||||
itemtype=itypes[3][rank];break; // Greater Healthstone
|
||||
case 11730:
|
||||
itemtype=itypes[4][rank];break; // Major Healthstone
|
||||
case 27230:
|
||||
itemtype=itypes[5][rank];break; // Master Healthstone
|
||||
case 47871:
|
||||
itemtype=itypes[6][rank];break; // Demonic Healthstone
|
||||
case 47878:
|
||||
itemtype=itypes[7][rank];break; // Fel Healthstone
|
||||
default:
|
||||
return;
|
||||
}
|
||||
DoCreateItem(effIndex, itemtype);
|
||||
return;
|
||||
}
|
||||
// Everlasting Affliction
|
||||
case 47422:
|
||||
// Refresh corruption on target
|
||||
if (AuraEffect * aur = unitTarget->GetAuraEffect(SPELL_AURA_PERIODIC_DAMAGE, SPELLFAMILY_WARLOCK, 0x2, 0, 0, m_caster->GetGUID()))
|
||||
aur->GetBase()->RefreshDuration();
|
||||
return;
|
||||
// Demonic Empowerment
|
||||
case 47193:
|
||||
{
|
||||
if (!unitTarget || unitTarget->GetTypeId() != TYPEID_UNIT || !unitTarget->ToCreature()->isPet())
|
||||
return;
|
||||
CreatureInfo const * ci = sObjectMgr.GetCreatureTemplate(unitTarget->GetEntry());
|
||||
switch (ci->family)
|
||||
{
|
||||
case CREATURE_FAMILY_SUCCUBUS:
|
||||
unitTarget->CastSpell(unitTarget, 54435, true);
|
||||
break;
|
||||
case CREATURE_FAMILY_VOIDWALKER:
|
||||
{
|
||||
SpellEntry const* spellInfo = sSpellStore.LookupEntry(54443);
|
||||
int32 hp = unitTarget->GetMaxHealth() * m_caster->CalculateSpellDamage(unitTarget, spellInfo, 0) /100;
|
||||
unitTarget->CastCustomSpell(unitTarget, 54443,&hp, NULL, NULL,true);
|
||||
//unitTarget->CastSpell(unitTarget, 54441, true);
|
||||
break;
|
||||
}
|
||||
case CREATURE_FAMILY_FELGUARD:
|
||||
unitTarget->CastSpell(unitTarget, 54508, true);
|
||||
break;
|
||||
case CREATURE_FAMILY_FELHUNTER:
|
||||
unitTarget->CastSpell(unitTarget, 54509, true);
|
||||
break;
|
||||
case CREATURE_FAMILY_IMP:
|
||||
unitTarget->CastSpell(unitTarget, 54444, true);
|
||||
break;
|
||||
}
|
||||
return;
|
||||
}
|
||||
// Guarded by The Light
|
||||
case 63521:
|
||||
{
|
||||
// Divine Plea
|
||||
if (Aura * aura = m_caster->GetAura(54428))
|
||||
aura->RefreshDuration();
|
||||
return;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
case SPELLFAMILY_HUNTER:
|
||||
{
|
||||
switch(m_spellInfo->Id)
|
||||
{
|
||||
// Invigoration
|
||||
case 53412:
|
||||
{
|
||||
if (AuraEffect * aurEff = unitTarget->GetDummyAuraEffect(SPELLFAMILY_HUNTER, 3487, 0))
|
||||
{
|
||||
if (roll_chance_i(aurEff->GetAmount()))
|
||||
unitTarget->CastSpell(unitTarget, 53398, true);
|
||||
}
|
||||
break;
|
||||
}
|
||||
// Heart of the Pheonix
|
||||
case 55709:
|
||||
{
|
||||
int pct = 100;
|
||||
if (unitTarget->GetTypeId() == TYPEID_UNIT && unitTarget->ToCreature()->isPet())
|
||||
if (Unit* owner = unitTarget->ToCreature()->GetOwner())
|
||||
owner->CastCustomSpell(unitTarget, 54114, &pct, NULL, NULL, true);
|
||||
break;
|
||||
}
|
||||
// Chimera Shot
|
||||
case 53209:
|
||||
{
|
||||
uint32 spellId = 0;
|
||||
int32 basePoint = 0;
|
||||
Unit::AuraApplicationMap& Auras = unitTarget->GetAppliedAuras();
|
||||
for (Unit::AuraApplicationMap::iterator i = Auras.begin(); i != Auras.end(); ++i)
|
||||
{
|
||||
Aura * aura = (*i).second->GetBase();
|
||||
if (aura->GetCasterGUID() != m_caster->GetGUID())
|
||||
continue;
|
||||
// Search only Serpent Sting, Viper Sting, Scorpid Sting auras
|
||||
flag96 familyFlag = aura->GetSpellProto()->SpellFamilyFlags;
|
||||
if (!(familyFlag[1] & 0x00000080 || familyFlag[0] & 0x0000C000))
|
||||
continue;
|
||||
if (AuraEffect const * aurEff = aura->GetEffect(0))
|
||||
{
|
||||
// Serpent Sting - Instantly deals 40% of the damage done by your Serpent Sting.
|
||||
if (familyFlag[0] & 0x4000)
|
||||
{
|
||||
int32 TickCount = aurEff->GetTotalTicks();
|
||||
spellId = 53353; // 53353 Chimera Shot - Serpent
|
||||
basePoint = aurEff->GetAmount() * TickCount * 40 / 100;
|
||||
}
|
||||
// Viper Sting - Instantly restores mana to you equal to 60% of the total amount drained by your Viper Sting.
|
||||
else if (familyFlag[1] & 0x00000080)
|
||||
{
|
||||
int32 TickCount = aura->GetEffect(0)->GetTotalTicks();
|
||||
spellId = 53358; // 53358 Chimera Shot - Viper
|
||||
|
||||
// Amount of one aura tick
|
||||
basePoint = aurEff->GetAmount() * unitTarget->GetMaxPower(POWER_MANA) / 100 ;
|
||||
int32 casterBasePoint = aurEff->GetAmount() * unitTarget->GetMaxPower(POWER_MANA) / 50 ;
|
||||
if (basePoint > casterBasePoint)
|
||||
basePoint = casterBasePoint;
|
||||
basePoint = basePoint * TickCount * 60 / 100;
|
||||
}
|
||||
// Scorpid Sting - Attempts to Disarm the target for 10 sec. This effect cannot occur more than once per 1 minute.
|
||||
else if (familyFlag[0] & 0x00008000)
|
||||
spellId = 53359; // 53359 Chimera Shot - Scorpid
|
||||
// ?? nothing say in spell desc (possibly need addition check)
|
||||
//if (familyFlag & 0x0000010000000000LL || // dot
|
||||
// familyFlag & 0x0000100000000000LL) // stun
|
||||
//{
|
||||
// spellId = 53366; // 53366 Chimera Shot - Wyvern
|
||||
//}
|
||||
|
||||
// Refresh aura duration
|
||||
aura->RefreshDuration();
|
||||
}
|
||||
break;
|
||||
}
|
||||
if (spellId)
|
||||
m_caster->CastCustomSpell(unitTarget, spellId, &basePoint, 0, 0, false);
|
||||
return;
|
||||
}
|
||||
// Master's Call
|
||||
case 53271:
|
||||
{
|
||||
if (m_caster->GetTypeId() != TYPEID_PLAYER)
|
||||
return;
|
||||
|
||||
if (Pet *PlrPet = m_caster->ToPlayer()->GetPet())
|
||||
m_caster->CastSpell(PlrPet, 62305, true);
|
||||
return;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case SPELLFAMILY_PALADIN:
|
||||
{
|
||||
// Judgement (seal trigger)
|
||||
|
||||
@@ -241,3 +241,13 @@ int32 SpellScript::GetEffectValue()
|
||||
{
|
||||
return m_spell->damage;
|
||||
}
|
||||
|
||||
Item * SpellScript::GetCastItem()
|
||||
{
|
||||
return m_spell->m_CastItem;
|
||||
}
|
||||
|
||||
void SpellScript::CreateItem(uint32 effIndex, uint32 itemId)
|
||||
{
|
||||
m_spell->DoCreateItem(effIndex, itemId);
|
||||
}
|
||||
@@ -155,6 +155,12 @@ class SpellScript : public _SpellScript
|
||||
|
||||
// method avalible only in EffectHandler method
|
||||
int32 GetEffectValue();
|
||||
|
||||
// returns: cast item if present.
|
||||
Item * GetCastItem();
|
||||
|
||||
// Creates item. Calls Spell::DoCreateItem method.
|
||||
void CreateItem(uint32 effIndex, uint32 itemId);
|
||||
};
|
||||
// SpellScript interface
|
||||
//
|
||||
|
||||
@@ -22,8 +22,141 @@
|
||||
*/
|
||||
|
||||
#include "ScriptPCH.h"
|
||||
#include "Spell.h"
|
||||
|
||||
enum DeathKnightSpells
|
||||
{
|
||||
DK_SPELL_SUMMON_GARGOYLE = 50514,
|
||||
DK_SPELL_CORPSE_EXPLOSION_TRIGGERED = 43999,
|
||||
DISPLAY_GHOUL_CORPSE = 25537,
|
||||
DK_SPELL_SCOURGE_STRIKE_TRIGGERED = 70890,
|
||||
};
|
||||
|
||||
// 49158 Corpse Explosion (51325, 51326, 51327, 51328)
|
||||
class spell_dk_corpse_explosion : public SpellHandlerScript
|
||||
{
|
||||
public:
|
||||
spell_dk_corpse_explosion() : SpellHandlerScript("spell_dk_corpse_explosion") { }
|
||||
|
||||
class spell_dk_corpse_explosion_SpellScript : public SpellScript
|
||||
{
|
||||
bool Validate(SpellEntry const * spellEntry)
|
||||
{
|
||||
if (!sSpellStore.LookupEntry(DK_SPELL_CORPSE_EXPLOSION_TRIGGERED))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
void HandleDummy(SpellEffIndex effIndex)
|
||||
{
|
||||
if (Unit* unitTarget = GetHitUnit())
|
||||
{
|
||||
int32 bp = 0;
|
||||
// Living ghoul as a target
|
||||
if (unitTarget->isAlive())
|
||||
bp = unitTarget->GetMaxHealth() * 0.25f;
|
||||
// Some corpse
|
||||
else
|
||||
bp = GetEffectValue();
|
||||
GetCaster()->CastCustomSpell(unitTarget, SpellMgr::CalculateSpellEffectAmount(GetSpellInfo(), 1), &bp, NULL, NULL, true);
|
||||
// Corpse Explosion (Suicide)
|
||||
unitTarget->CastCustomSpell(unitTarget, DK_SPELL_CORPSE_EXPLOSION_TRIGGERED, &bp, NULL, NULL, true);
|
||||
// Set corpse look
|
||||
unitTarget->SetDisplayId(DISPLAY_GHOUL_CORPSE + urand(0, 3));
|
||||
}
|
||||
}
|
||||
|
||||
void Register()
|
||||
{
|
||||
EffectHandlers += EffectHandlerFn(spell_dk_corpse_explosion_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
|
||||
}
|
||||
};
|
||||
|
||||
SpellScript* GetSpellScript() const
|
||||
{
|
||||
return new spell_dk_corpse_explosion_SpellScript();
|
||||
}
|
||||
};
|
||||
|
||||
// 50524 Runic Power Feed (keeping Gargoyle alive)
|
||||
class spell_dk_runic_power_feed : public SpellHandlerScript
|
||||
{
|
||||
public:
|
||||
spell_dk_runic_power_feed() : SpellHandlerScript("spell_dk_runic_power_feed") { }
|
||||
|
||||
class spell_dk_runic_power_feed_SpellScript : public SpellScript
|
||||
{
|
||||
bool Validate(SpellEntry const * spellEntry)
|
||||
{
|
||||
if (!sSpellStore.LookupEntry(DK_SPELL_SUMMON_GARGOYLE))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
void HandleDummy(SpellEffIndex effIndex)
|
||||
{
|
||||
if (Unit* caster = GetCaster())
|
||||
{
|
||||
// No power, dismiss Gargoyle
|
||||
if (caster->GetPower(POWER_RUNIC_POWER) < 30)
|
||||
caster->RemoveAurasDueToSpell(DK_SPELL_SUMMON_GARGOYLE, caster->GetGUID());
|
||||
else
|
||||
caster->ModifyPower(POWER_RUNIC_POWER, -30);
|
||||
}
|
||||
}
|
||||
|
||||
void Register()
|
||||
{
|
||||
EffectHandlers += EffectHandlerFn(spell_dk_runic_power_feed_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
|
||||
}
|
||||
};
|
||||
|
||||
SpellScript* GetSpellScript() const
|
||||
{
|
||||
return new spell_dk_runic_power_feed_SpellScript();
|
||||
}
|
||||
};
|
||||
|
||||
// 55090 Scourge Strike (55265, 55270, 55271)
|
||||
class spell_dk_scourge_strike : public SpellHandlerScript
|
||||
{
|
||||
public:
|
||||
spell_dk_scourge_strike() : SpellHandlerScript("spell_dk_scourge_strike") { }
|
||||
|
||||
class spell_dk_scourge_strike_SpellScript : public SpellScript
|
||||
{
|
||||
bool Validate(SpellEntry const * spellEntry)
|
||||
{
|
||||
if (!sSpellStore.LookupEntry(DK_SPELL_SCOURGE_STRIKE_TRIGGERED))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
void HandleDummy(SpellEffIndex effIndex)
|
||||
{
|
||||
Unit* caster = GetCaster();
|
||||
if (Unit* unitTarget = GetHitUnit())
|
||||
{
|
||||
int32 bp = (GetHitDamage() * GetEffectValue() * unitTarget->GetDiseasesByCaster(caster->GetGUID())) / 100;
|
||||
caster->CastCustomSpell(unitTarget, DK_SPELL_SCOURGE_STRIKE_TRIGGERED, &bp, NULL, NULL, true);
|
||||
}
|
||||
}
|
||||
|
||||
void Register()
|
||||
{
|
||||
EffectHandlers += EffectHandlerFn(spell_dk_scourge_strike_SpellScript::HandleDummy, EFFECT_2, SPELL_EFFECT_DUMMY);
|
||||
}
|
||||
};
|
||||
|
||||
SpellScript* GetSpellScript() const
|
||||
{
|
||||
return new spell_dk_scourge_strike_SpellScript();
|
||||
}
|
||||
};
|
||||
|
||||
void AddSC_deathknight_spell_scripts()
|
||||
{
|
||||
|
||||
new spell_dk_corpse_explosion();
|
||||
new spell_dk_runic_power_feed();
|
||||
new spell_dk_scourge_strike();
|
||||
}
|
||||
@@ -22,8 +22,67 @@
|
||||
*/
|
||||
|
||||
#include "ScriptPCH.h"
|
||||
#include "SpellAuraEffects.h"
|
||||
|
||||
enum DruidSpells
|
||||
{
|
||||
DRUID_INCREASED_MOONFIRE_DURATION = 38414,
|
||||
DRUID_NATURES_SPLENDOR = 57865
|
||||
};
|
||||
|
||||
// 54846 Glyph of Starfire
|
||||
class spell_dru_glyph_of_starfire : public SpellHandlerScript
|
||||
{
|
||||
public:
|
||||
spell_dru_glyph_of_starfire() : SpellHandlerScript("spell_dru_glyph_of_starfire") { }
|
||||
|
||||
class spell_dru_glyph_of_starfire_SpellScript : public SpellScript
|
||||
{
|
||||
bool Validate(SpellEntry const * spellEntry)
|
||||
{
|
||||
if (!sSpellStore.LookupEntry(DRUID_INCREASED_MOONFIRE_DURATION))
|
||||
return false;
|
||||
if (!sSpellStore.LookupEntry(DRUID_NATURES_SPLENDOR))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
void HandleScriptEffect(SpellEffIndex effIndex)
|
||||
{
|
||||
Unit* caster = GetCaster();
|
||||
if (Unit* unitTarget = GetHitUnit())
|
||||
if (AuraEffect const * aurEff = unitTarget->GetAuraEffect(SPELL_AURA_PERIODIC_DAMAGE,SPELLFAMILY_DRUID, 0x00000002, 0, 0, caster->GetGUID()))
|
||||
{
|
||||
Aura* aura = aurEff->GetBase();
|
||||
|
||||
uint32 countMin = aura->GetMaxDuration();
|
||||
uint32 countMax = 18000;
|
||||
if (caster->HasAura(DRUID_INCREASED_MOONFIRE_DURATION))
|
||||
countMax += 3000;
|
||||
if (caster->HasAura(DRUID_NATURES_SPLENDOR))
|
||||
countMax += 3000;
|
||||
|
||||
if (countMin < countMax)
|
||||
{
|
||||
aura->SetDuration(uint32(aura->GetDuration() + 3000));
|
||||
aura->SetMaxDuration(countMin + 3000);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Register()
|
||||
{
|
||||
EffectHandlers += EffectHandlerFn(spell_dru_glyph_of_starfire_SpellScript::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
|
||||
}
|
||||
};
|
||||
|
||||
SpellScript* GetSpellScript() const
|
||||
{
|
||||
return new spell_dru_glyph_of_starfire_SpellScript();
|
||||
}
|
||||
};
|
||||
|
||||
void AddSC_druid_spell_scripts()
|
||||
{
|
||||
|
||||
new spell_dru_glyph_of_starfire();
|
||||
}
|
||||
@@ -22,6 +22,7 @@
|
||||
*/
|
||||
|
||||
#include "ScriptPCH.h"
|
||||
#include "SpellAuraEffects.h"
|
||||
|
||||
enum HunterSpells
|
||||
{
|
||||
@@ -32,229 +33,394 @@ enum HunterSpells
|
||||
HUNTER_PET_HEART_OF_THE_PHOENIX_TRIGGERED = 54114,
|
||||
HUNTER_PET_HEART_OF_THE_PHOENIX_DEBUFF = 55711,
|
||||
HUNTER_PET_SPELL_CARRION_FEEDER_TRIGGERED = 54045,
|
||||
HUNTER_SPELL_INVIGORATION_TRIGGERED = 53398,
|
||||
HUNTER_SPELL_MASTERS_CALL_TRIGGERED = 62305,
|
||||
HUNTER_SPELL_CHIMERA_SHOT_SERPENT = 53353,
|
||||
HUNTER_SPELL_CHIMERA_SHOT_VIPER = 53358,
|
||||
HUNTER_SPELL_CHIMERA_SHOT_SCORPID = 53359,
|
||||
};
|
||||
|
||||
// 53209 Chimera Shot
|
||||
class spell_hun_chimera_shot : public SpellHandlerScript
|
||||
{
|
||||
public:
|
||||
spell_hun_chimera_shot() : SpellHandlerScript("spell_hun_chimera_shot") { }
|
||||
|
||||
class spell_hun_chimera_shot_SpellScript : public SpellScript
|
||||
{
|
||||
bool Validate(SpellEntry const * spellEntry)
|
||||
{
|
||||
if (!sSpellStore.LookupEntry(HUNTER_SPELL_CHIMERA_SHOT_SERPENT))
|
||||
return false;
|
||||
if (!sSpellStore.LookupEntry(HUNTER_SPELL_CHIMERA_SHOT_VIPER))
|
||||
return false;
|
||||
if (!sSpellStore.LookupEntry(HUNTER_SPELL_CHIMERA_SHOT_SCORPID))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
void HandleScriptEffect(SpellEffIndex effIndex)
|
||||
{
|
||||
Unit* caster = GetCaster();
|
||||
Unit* unitTarget = GetHitUnit();
|
||||
if (!unitTarget)
|
||||
return;
|
||||
|
||||
uint32 spellId = 0;
|
||||
int32 basePoint = 0;
|
||||
Unit::AuraApplicationMap& Auras = unitTarget->GetAppliedAuras();
|
||||
for (Unit::AuraApplicationMap::iterator i = Auras.begin(); i != Auras.end(); ++i)
|
||||
{
|
||||
Aura* aura = i->second->GetBase();
|
||||
if (aura->GetCasterGUID() != caster->GetGUID())
|
||||
continue;
|
||||
|
||||
// Search only Serpent Sting, Viper Sting, Scorpid Sting auras
|
||||
flag96 familyFlag = aura->GetSpellProto()->SpellFamilyFlags;
|
||||
if (!(familyFlag[1] & 0x00000080 || familyFlag[0] & 0x0000C000))
|
||||
continue;
|
||||
if (AuraEffect const * aurEff = aura->GetEffect(0))
|
||||
{
|
||||
// Serpent Sting - Instantly deals 40% of the damage done by your Serpent Sting.
|
||||
if (familyFlag[0] & 0x4000)
|
||||
{
|
||||
int32 TickCount = aurEff->GetTotalTicks();
|
||||
spellId = HUNTER_SPELL_CHIMERA_SHOT_SERPENT;
|
||||
basePoint = aurEff->GetAmount() * TickCount * 40 / 100;
|
||||
}
|
||||
// Viper Sting - Instantly restores mana to you equal to 60% of the total amount drained by your Viper Sting.
|
||||
else if (familyFlag[1] & 0x00000080)
|
||||
{
|
||||
int32 TickCount = aura->GetEffect(0)->GetTotalTicks();
|
||||
spellId = HUNTER_SPELL_CHIMERA_SHOT_VIPER;
|
||||
|
||||
// Amount of one aura tick
|
||||
basePoint = aurEff->GetAmount() * unitTarget->GetMaxPower(POWER_MANA) / 100 ;
|
||||
int32 casterBasePoint = aurEff->GetAmount() * unitTarget->GetMaxPower(POWER_MANA) / 50 ;
|
||||
if (basePoint > casterBasePoint)
|
||||
basePoint = casterBasePoint;
|
||||
basePoint = basePoint * TickCount * 60 / 100;
|
||||
}
|
||||
// Scorpid Sting - Attempts to Disarm the target for 10 sec. This effect cannot occur more than once per 1 minute.
|
||||
else if (familyFlag[0] & 0x00008000)
|
||||
spellId = HUNTER_SPELL_CHIMERA_SHOT_SCORPID;
|
||||
// ?? nothing say in spell desc (possibly need addition check)
|
||||
//if (familyFlag & 0x0000010000000000LL || // dot
|
||||
// familyFlag & 0x0000100000000000LL) // stun
|
||||
//{
|
||||
// spellId = 53366; // 53366 Chimera Shot - Wyvern
|
||||
//}
|
||||
|
||||
// Refresh aura duration
|
||||
aura->RefreshDuration();
|
||||
}
|
||||
break;
|
||||
}
|
||||
if (spellId)
|
||||
caster->CastCustomSpell(unitTarget, spellId, &basePoint, 0, 0, false);
|
||||
}
|
||||
|
||||
void Register()
|
||||
{
|
||||
EffectHandlers += EffectHandlerFn(spell_hun_chimera_shot_SpellScript::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
|
||||
}
|
||||
};
|
||||
|
||||
SpellScript* GetSpellScript() const
|
||||
{
|
||||
return new spell_hun_chimera_shot_SpellScript();
|
||||
}
|
||||
};
|
||||
|
||||
// 53412 Invigoration
|
||||
class spell_hun_invigoration : public SpellHandlerScript
|
||||
{
|
||||
public:
|
||||
spell_hun_invigoration() : SpellHandlerScript("spell_hun_invigoration") { }
|
||||
|
||||
class spell_hun_invigoration_SpellScript : public SpellScript
|
||||
{
|
||||
bool Validate(SpellEntry const * spellEntry)
|
||||
{
|
||||
if (!sSpellStore.LookupEntry(HUNTER_SPELL_INVIGORATION_TRIGGERED))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
void HandleScriptEffect(SpellEffIndex effIndex)
|
||||
{
|
||||
if (Unit* unitTarget = GetHitUnit())
|
||||
if (AuraEffect* aurEff = unitTarget->GetDummyAuraEffect(SPELLFAMILY_HUNTER, 3487, 0))
|
||||
if (roll_chance_i(aurEff->GetAmount()))
|
||||
unitTarget->CastSpell(unitTarget, HUNTER_SPELL_INVIGORATION_TRIGGERED, true);
|
||||
}
|
||||
|
||||
void Register()
|
||||
{
|
||||
EffectHandlers += EffectHandlerFn(spell_hun_invigoration_SpellScript::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
|
||||
}
|
||||
};
|
||||
|
||||
SpellScript* GetSpellScript() const
|
||||
{
|
||||
return new spell_hun_invigoration_SpellScript();
|
||||
}
|
||||
};
|
||||
|
||||
class spell_hun_last_stand_pet : public SpellHandlerScript
|
||||
{
|
||||
public:
|
||||
public:
|
||||
spell_hun_last_stand_pet() : SpellHandlerScript("spell_hun_last_stand_pet") { }
|
||||
|
||||
spell_hun_last_stand_pet()
|
||||
: SpellHandlerScript("spell_hun_last_stand_pet")
|
||||
class spell_hun_last_stand_pet_SpellScript : public SpellScript
|
||||
{
|
||||
bool Validate(SpellEntry const * spellEntry)
|
||||
{
|
||||
if (!sSpellStore.LookupEntry(HUNTER_PET_SPELL_LAST_STAND_TRIGGERED))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
class spell_hun_last_stand_pet_SpellScript : public SpellScript
|
||||
void HandleDummy(SpellEffIndex effIndex)
|
||||
{
|
||||
bool Validate(SpellEntry const * spellEntry)
|
||||
{
|
||||
if (!sSpellStore.LookupEntry(HUNTER_PET_SPELL_LAST_STAND_TRIGGERED))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
void HandleDummy(SpellEffIndex effIndex)
|
||||
{
|
||||
Unit *caster = GetCaster();
|
||||
int32 healthModSpellBasePoints0 = int32(caster->GetMaxHealth()*0.3);
|
||||
caster->CastCustomSpell(caster, HUNTER_PET_SPELL_LAST_STAND_TRIGGERED, &healthModSpellBasePoints0, NULL, NULL, true, NULL);
|
||||
}
|
||||
|
||||
void Register()
|
||||
{
|
||||
// add dummy effect spell handler to pet's Last Stand
|
||||
EffectHandlers += EffectHandlerFn(spell_hun_last_stand_pet_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
|
||||
}
|
||||
};
|
||||
|
||||
SpellScript* GetSpellScript() const
|
||||
{
|
||||
return new spell_hun_last_stand_pet_SpellScript();
|
||||
Unit *caster = GetCaster();
|
||||
int32 healthModSpellBasePoints0 = int32(caster->GetMaxHealth()*0.3);
|
||||
caster->CastCustomSpell(caster, HUNTER_PET_SPELL_LAST_STAND_TRIGGERED, &healthModSpellBasePoints0, NULL, NULL, true, NULL);
|
||||
}
|
||||
|
||||
void Register()
|
||||
{
|
||||
// add dummy effect spell handler to pet's Last Stand
|
||||
EffectHandlers += EffectHandlerFn(spell_hun_last_stand_pet_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
|
||||
}
|
||||
};
|
||||
|
||||
SpellScript* GetSpellScript() const
|
||||
{
|
||||
return new spell_hun_last_stand_pet_SpellScript();
|
||||
}
|
||||
};
|
||||
|
||||
class spell_hun_masters_call : public SpellHandlerScript
|
||||
{
|
||||
public:
|
||||
public:
|
||||
spell_hun_masters_call() : SpellHandlerScript("spell_hun_masters_call") { }
|
||||
|
||||
spell_hun_masters_call()
|
||||
: SpellHandlerScript("spell_hun_masters_call")
|
||||
class spell_hun_masters_call_SpellScript : public SpellScript
|
||||
{
|
||||
bool Validate(SpellEntry const * spellEntry)
|
||||
{
|
||||
if (!sSpellStore.LookupEntry(HUNTER_SPELL_MASTERS_CALL_TRIGGERED))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
class spell_hun_masters_call_SpellScript : public SpellScript
|
||||
void HandleDummy(SpellEffIndex effIndex)
|
||||
{
|
||||
void HandleDummy(SpellEffIndex effIndex)
|
||||
{
|
||||
Unit *caster = GetCaster();
|
||||
Unit *unitTarget = GetHitUnit();
|
||||
Unit *caster = GetCaster();
|
||||
Unit *unitTarget = GetHitUnit();
|
||||
|
||||
if (caster->GetTypeId() != TYPEID_PLAYER || !unitTarget)
|
||||
return;
|
||||
if (caster->GetTypeId() != TYPEID_PLAYER || !unitTarget)
|
||||
return;
|
||||
|
||||
if (Pet *pet = caster->ToPlayer()->GetPet())
|
||||
if (pet->isAlive())
|
||||
pet->CastSpell(unitTarget, SpellMgr::CalculateSpellEffectAmount(GetSpellInfo(), effIndex), true);
|
||||
}
|
||||
|
||||
void Register()
|
||||
{
|
||||
// add dummy effect spell handler to Master's Call
|
||||
EffectHandlers += EffectHandlerFn(spell_hun_masters_call_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
|
||||
}
|
||||
};
|
||||
|
||||
SpellScript* GetSpellScript() const
|
||||
{
|
||||
return new spell_hun_masters_call_SpellScript();
|
||||
if (Pet *pet = caster->ToPlayer()->GetPet())
|
||||
if (pet->isAlive())
|
||||
pet->CastSpell(unitTarget, SpellMgr::CalculateSpellEffectAmount(GetSpellInfo(), effIndex), true);
|
||||
}
|
||||
|
||||
void HandleScriptEffect(SpellEffIndex effIndex)
|
||||
{
|
||||
Unit* caster = GetCaster();
|
||||
if (caster->GetTypeId() != TYPEID_PLAYER)
|
||||
return;
|
||||
|
||||
if (Pet *pet = caster->ToPlayer()->GetPet())
|
||||
if (pet->isAlive())
|
||||
caster->CastSpell(pet, HUNTER_SPELL_MASTERS_CALL_TRIGGERED, true);
|
||||
}
|
||||
|
||||
void Register()
|
||||
{
|
||||
EffectHandlers += EffectHandlerFn(spell_hun_masters_call_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
|
||||
EffectHandlers += EffectHandlerFn(spell_hun_masters_call_SpellScript::HandleScriptEffect, EFFECT_1, SPELL_EFFECT_SCRIPT_EFFECT);
|
||||
}
|
||||
};
|
||||
|
||||
SpellScript* GetSpellScript() const
|
||||
{
|
||||
return new spell_hun_masters_call_SpellScript();
|
||||
}
|
||||
};
|
||||
|
||||
class spell_hun_readiness : public SpellHandlerScript
|
||||
{
|
||||
public:
|
||||
public:
|
||||
spell_hun_readiness() : SpellHandlerScript("spell_hun_readiness") { }
|
||||
|
||||
spell_hun_readiness()
|
||||
: SpellHandlerScript("spell_hun_readiness")
|
||||
class spell_hun_readiness_SpellScript : public SpellScript
|
||||
{
|
||||
void HandleDummy(SpellEffIndex effIndex)
|
||||
{
|
||||
Unit *caster = GetCaster();
|
||||
if (caster->GetTypeId() != TYPEID_PLAYER)
|
||||
return;
|
||||
|
||||
// immediately finishes the cooldown on your other Hunter abilities except Bestial Wrath
|
||||
const SpellCooldowns& cm = caster->ToPlayer()->GetSpellCooldownMap();
|
||||
for (SpellCooldowns::const_iterator itr = cm.begin(); itr != cm.end();)
|
||||
{
|
||||
SpellEntry const *spellInfo = sSpellStore.LookupEntry(itr->first);
|
||||
|
||||
if (spellInfo->SpellFamilyName == SPELLFAMILY_HUNTER &&
|
||||
spellInfo->Id != HUNTER_SPELL_READINESS &&
|
||||
spellInfo->Id != HUNTER_SPELL_BESTIAL_WRATH &&
|
||||
GetSpellRecoveryTime(spellInfo) > 0)
|
||||
caster->ToPlayer()->RemoveSpellCooldown((itr++)->first,true);
|
||||
else
|
||||
++itr;
|
||||
}
|
||||
}
|
||||
|
||||
class spell_hun_readiness_SpellScript : public SpellScript
|
||||
void Register()
|
||||
{
|
||||
void HandleDummy(SpellEffIndex effIndex)
|
||||
{
|
||||
Unit *caster = GetCaster();
|
||||
if (caster->GetTypeId() != TYPEID_PLAYER)
|
||||
return;
|
||||
|
||||
// immediately finishes the cooldown on your other Hunter abilities except Bestial Wrath
|
||||
const SpellCooldowns& cm = caster->ToPlayer()->GetSpellCooldownMap();
|
||||
for (SpellCooldowns::const_iterator itr = cm.begin(); itr != cm.end();)
|
||||
{
|
||||
SpellEntry const *spellInfo = sSpellStore.LookupEntry(itr->first);
|
||||
|
||||
if (spellInfo->SpellFamilyName == SPELLFAMILY_HUNTER &&
|
||||
spellInfo->Id != HUNTER_SPELL_READINESS &&
|
||||
spellInfo->Id != HUNTER_SPELL_BESTIAL_WRATH &&
|
||||
GetSpellRecoveryTime(spellInfo) > 0)
|
||||
caster->ToPlayer()->RemoveSpellCooldown((itr++)->first,true);
|
||||
else
|
||||
++itr;
|
||||
}
|
||||
}
|
||||
|
||||
void Register()
|
||||
{
|
||||
// add dummy effect spell handler to Readiness
|
||||
EffectHandlers += EffectHandlerFn(spell_hun_readiness_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
|
||||
}
|
||||
};
|
||||
|
||||
SpellScript* GetSpellScript() const
|
||||
{
|
||||
return new spell_hun_readiness_SpellScript();
|
||||
// add dummy effect spell handler to Readiness
|
||||
EffectHandlers += EffectHandlerFn(spell_hun_readiness_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
|
||||
}
|
||||
};
|
||||
|
||||
SpellScript* GetSpellScript() const
|
||||
{
|
||||
return new spell_hun_readiness_SpellScript();
|
||||
}
|
||||
};
|
||||
|
||||
// 37506 Scatter Shot
|
||||
class spell_hun_scatter_shot : public SpellHandlerScript
|
||||
{
|
||||
public:
|
||||
spell_hun_scatter_shot() : SpellHandlerScript("spell_hun_scatter_shot") { }
|
||||
|
||||
class spell_hun_scatter_shot_SpellScript : public SpellScript
|
||||
{
|
||||
void HandleDummy(SpellEffIndex effIndex)
|
||||
{
|
||||
Unit* caster = GetCaster();
|
||||
if (caster->GetTypeId() != TYPEID_PLAYER)
|
||||
return;
|
||||
|
||||
// break Auto Shot and autohit
|
||||
caster->InterruptSpell(CURRENT_AUTOREPEAT_SPELL);
|
||||
caster->AttackStop();
|
||||
caster->ToPlayer()->SendAttackSwingCancelAttack();
|
||||
}
|
||||
|
||||
void Register()
|
||||
{
|
||||
EffectHandlers += EffectHandlerFn(spell_hun_scatter_shot_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
|
||||
}
|
||||
};
|
||||
|
||||
SpellScript* GetSpellScript() const
|
||||
{
|
||||
return new spell_hun_scatter_shot_SpellScript();
|
||||
}
|
||||
};
|
||||
|
||||
class spell_hun_pet_heart_of_the_phoenix : public SpellHandlerScript
|
||||
{
|
||||
public:
|
||||
public:
|
||||
spell_hun_pet_heart_of_the_phoenix() : SpellHandlerScript("spell_hun_pet_heart_of_the_phoenix") { }
|
||||
|
||||
spell_hun_pet_heart_of_the_phoenix()
|
||||
: SpellHandlerScript("spell_hun_pet_heart_of_the_phoenix")
|
||||
class spell_hun_pet_heart_of_the_phoenix_SpellScript : public SpellScript
|
||||
{
|
||||
bool Validate(SpellEntry const * spellEntry)
|
||||
{
|
||||
if (!sSpellStore.LookupEntry(HUNTER_PET_HEART_OF_THE_PHOENIX_TRIGGERED))
|
||||
return false;
|
||||
if (!sSpellStore.LookupEntry(HUNTER_PET_HEART_OF_THE_PHOENIX_DEBUFF))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
class spell_hun_pet_heart_of_the_phoenix_SpellScript : public SpellScript
|
||||
void HandleScript(SpellEffIndex effIndex)
|
||||
{
|
||||
bool Validate(SpellEntry const * spellEntry)
|
||||
{
|
||||
if (!sSpellStore.LookupEntry(HUNTER_PET_HEART_OF_THE_PHOENIX_TRIGGERED))
|
||||
return false;
|
||||
if (!sSpellStore.LookupEntry(HUNTER_PET_HEART_OF_THE_PHOENIX_DEBUFF))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
void HandleScript(SpellEffIndex effIndex)
|
||||
{
|
||||
Unit *caster = GetCaster();
|
||||
if (caster->HasAura(HUNTER_PET_HEART_OF_THE_PHOENIX_DEBUFF))
|
||||
return;
|
||||
caster->CastCustomSpell(HUNTER_PET_HEART_OF_THE_PHOENIX_TRIGGERED, SPELLVALUE_BASE_POINT0, 100, caster, true);
|
||||
caster->CastSpell(caster, HUNTER_PET_HEART_OF_THE_PHOENIX_DEBUFF, true);
|
||||
}
|
||||
|
||||
void Register()
|
||||
{
|
||||
// add dummy effect spell handler to pet's Last Stand
|
||||
EffectHandlers += EffectHandlerFn(spell_hun_pet_heart_of_the_phoenix_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
|
||||
}
|
||||
|
||||
bool Load()
|
||||
{
|
||||
if (!GetCaster()->isPet())
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
SpellScript* GetSpellScript() const
|
||||
{
|
||||
return new spell_hun_pet_heart_of_the_phoenix_SpellScript();
|
||||
Unit *caster = GetCaster();
|
||||
if (caster->HasAura(HUNTER_PET_HEART_OF_THE_PHOENIX_DEBUFF))
|
||||
return;
|
||||
caster->CastCustomSpell(HUNTER_PET_HEART_OF_THE_PHOENIX_TRIGGERED, SPELLVALUE_BASE_POINT0, 100, caster, true);
|
||||
caster->CastSpell(caster, HUNTER_PET_HEART_OF_THE_PHOENIX_DEBUFF, true);
|
||||
}
|
||||
|
||||
void Register()
|
||||
{
|
||||
// add dummy effect spell handler to pet's Last Stand
|
||||
EffectHandlers += EffectHandlerFn(spell_hun_pet_heart_of_the_phoenix_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
|
||||
}
|
||||
|
||||
bool Load()
|
||||
{
|
||||
if (!GetCaster()->isPet())
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
SpellScript* GetSpellScript() const
|
||||
{
|
||||
return new spell_hun_pet_heart_of_the_phoenix_SpellScript();
|
||||
}
|
||||
};
|
||||
|
||||
class spell_hun_pet_carrion_feeder : public SpellHandlerScript
|
||||
{
|
||||
public:
|
||||
public:
|
||||
spell_hun_pet_carrion_feeder() : SpellHandlerScript("spell_hun_pet_carrion_feeder") { }
|
||||
|
||||
spell_hun_pet_carrion_feeder()
|
||||
: SpellHandlerScript("spell_hun_pet_carrion_feeder")
|
||||
class spell_hun_pet_carrion_feeder_SpellScript : public SpellScript
|
||||
{
|
||||
bool Validate(SpellEntry const * spellEntry)
|
||||
{
|
||||
if (!sSpellStore.LookupEntry(HUNTER_PET_SPELL_CARRION_FEEDER_TRIGGERED))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
class spell_hun_pet_carrion_feeder_SpellScript : public SpellScript
|
||||
void HandleDummy(SpellEffIndex effIndex)
|
||||
{
|
||||
bool Validate(SpellEntry const * spellEntry)
|
||||
{
|
||||
if (!sSpellStore.LookupEntry(HUNTER_PET_SPELL_CARRION_FEEDER_TRIGGERED))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
void HandleDummy(SpellEffIndex effIndex)
|
||||
{
|
||||
if (!GetHitUnit())
|
||||
return;
|
||||
Unit *caster = GetCaster();
|
||||
caster->CastSpell(caster, HUNTER_PET_SPELL_CARRION_FEEDER_TRIGGERED, false);
|
||||
}
|
||||
|
||||
void Register()
|
||||
{
|
||||
// add dummy effect spell handler to pet's Last Stand
|
||||
EffectHandlers += EffectHandlerFn(spell_hun_pet_carrion_feeder_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
|
||||
}
|
||||
|
||||
bool Load()
|
||||
{
|
||||
if (!GetCaster()->isPet())
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
SpellScript* GetSpellScript() const
|
||||
{
|
||||
return new spell_hun_pet_carrion_feeder_SpellScript();
|
||||
if (!GetHitUnit())
|
||||
return;
|
||||
Unit *caster = GetCaster();
|
||||
caster->CastSpell(caster, HUNTER_PET_SPELL_CARRION_FEEDER_TRIGGERED, false);
|
||||
}
|
||||
|
||||
void Register()
|
||||
{
|
||||
// add dummy effect spell handler to pet's Last Stand
|
||||
EffectHandlers += EffectHandlerFn(spell_hun_pet_carrion_feeder_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
|
||||
}
|
||||
|
||||
bool Load()
|
||||
{
|
||||
if (!GetCaster()->isPet())
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
SpellScript* GetSpellScript() const
|
||||
{
|
||||
return new spell_hun_pet_carrion_feeder_SpellScript();
|
||||
}
|
||||
};
|
||||
|
||||
void AddSC_hunter_spell_scripts()
|
||||
{
|
||||
new spell_hun_last_stand_pet;
|
||||
new spell_hun_masters_call;
|
||||
new spell_hun_readiness;
|
||||
new spell_hun_pet_heart_of_the_phoenix;
|
||||
new spell_hun_pet_carrion_feeder;
|
||||
new spell_hun_chimera_shot();
|
||||
new spell_hun_invigoration();
|
||||
new spell_hun_last_stand_pet();
|
||||
new spell_hun_masters_call();
|
||||
new spell_hun_readiness();
|
||||
new spell_hun_scatter_shot();
|
||||
new spell_hun_pet_heart_of_the_phoenix();
|
||||
new spell_hun_pet_carrion_feeder();
|
||||
}
|
||||
@@ -0,0 +1,163 @@
|
||||
/*
|
||||
* Copyright (C) 2008-2010 TrinityCore <http://www.trinitycore.org/>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License as published by the
|
||||
* Free Software Foundation; either version 2 of the License, or (at your
|
||||
* option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||
* more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along
|
||||
* with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Scripts for spells with SPELLFAMILY_GENERIC spells used for quests.
|
||||
* Ordered alphabetically using questId and scriptname.
|
||||
* Scriptnames of files in this file should be prefixed with "spell_q#questID_".
|
||||
*/
|
||||
|
||||
enum Quest11587Spells
|
||||
{
|
||||
QUEST11587_SPELL_SUMMON_ARCANE_PRISONER_MALE = 45446, // Summon Arcane Prisoner - Male
|
||||
QUEST11587_SPELL_SUMMON_ARCANE_PRISONER_FEMALE = 45448, // Summon Arcane Prisoner - Female
|
||||
QUEST11587_SPELL_ARCANE_PRISONER_KILL_CREDIT = 45456 // Arcane Prisoner Kill Credit
|
||||
};
|
||||
|
||||
// http://www.wowhead.com/quest=11587 Prison Break
|
||||
// 45449 Arcane Prisoner Rescue
|
||||
class spell_q11587_arcane_prisoner_rescue : public SpellHandlerScript
|
||||
{
|
||||
public:
|
||||
spell_q11587_arcane_prisoner_rescue() : SpellHandlerScript("spell_q11587_arcane_prisoner_rescue") { }
|
||||
|
||||
class spell_q11587_arcane_prisoner_rescue_SpellScript : public SpellScript
|
||||
{
|
||||
bool Validate(SpellEntry const * spellEntry)
|
||||
{
|
||||
if (!sSpellStore.LookupEntry(QUEST11587_SPELL_SUMMON_ARCANE_PRISONER_MALE))
|
||||
return false;
|
||||
if (!sSpellStore.LookupEntry(QUEST11587_SPELL_SUMMON_ARCANE_PRISONER_FEMALE))
|
||||
return false;
|
||||
if (!sSpellStore.LookupEntry(QUEST11587_SPELL_ARCANE_PRISONER_KILL_CREDIT))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
void HandleDummy(SpellEffIndex effIndex)
|
||||
{
|
||||
Unit* caster = GetCaster();
|
||||
if (Unit* unitTarget = GetHitUnit())
|
||||
{
|
||||
uint32 spellId = QUEST11587_SPELL_SUMMON_ARCANE_PRISONER_MALE;
|
||||
if (rand() % 2)
|
||||
spellId = QUEST11587_SPELL_SUMMON_ARCANE_PRISONER_FEMALE;
|
||||
caster->CastSpell(caster, spellId, true);
|
||||
unitTarget->CastSpell(caster, QUEST11587_SPELL_ARCANE_PRISONER_KILL_CREDIT, true);
|
||||
}
|
||||
}
|
||||
|
||||
void Register()
|
||||
{
|
||||
EffectHandlers += EffectHandlerFn(spell_q11587_arcane_prisoner_rescue_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
|
||||
}
|
||||
};
|
||||
|
||||
SpellScript* GetSpellScript() const
|
||||
{
|
||||
return new spell_q11587_arcane_prisoner_rescue_SpellScript();
|
||||
}
|
||||
};
|
||||
|
||||
enum Quest11730Spells
|
||||
{
|
||||
SPELL_QUEST_SUMMON_SCAVENGEBOT_004A8 = 46063,
|
||||
SPELL_QUEST_SUMMON_SENTRYBOT_57K = 46068,
|
||||
SPELL_QUEST_SUMMON_DEFENDOTANK_66D = 46058,
|
||||
SPELL_QUEST_SUMMON_SCAVENGEBOT_005B6 = 46066,
|
||||
SPELL_QUEST_SUMMON_55D_COLLECTATRON = 46034,
|
||||
SPELL_QUEST_ROBOT_KILL_CREDIT = 46027,
|
||||
NPC_SCAVENGEBOT_004A8 = 25752,
|
||||
NPC_SENTRYBOT_57K = 25753,
|
||||
NPC_DEFENDOTANK_66D = 25758,
|
||||
NPC_SCAVENGEBOT_005B6 = 25792,
|
||||
NPC_55D_COLLECTATRON = 25793
|
||||
};
|
||||
|
||||
// http://www.wowhead.com/quest=11730 Master and Servant
|
||||
// 46023 The Ultrasonic Screwdriver
|
||||
class spell_q11730_ultrasonic_screwdriver : public SpellHandlerScript
|
||||
{
|
||||
public:
|
||||
spell_q11730_ultrasonic_screwdriver() : SpellHandlerScript("spell_q11730_ultrasonic_screwdriver") { }
|
||||
|
||||
class spell_q11730_ultrasonic_screwdriver_SpellScript : public SpellScript
|
||||
{
|
||||
bool Validate(SpellEntry const * spellEntry)
|
||||
{
|
||||
if (!sSpellStore.LookupEntry(SPELL_QUEST_SUMMON_SCAVENGEBOT_004A8))
|
||||
return false;
|
||||
if (!sSpellStore.LookupEntry(SPELL_QUEST_SUMMON_SENTRYBOT_57K))
|
||||
return false;
|
||||
if (!sSpellStore.LookupEntry(SPELL_QUEST_SUMMON_DEFENDOTANK_66D))
|
||||
return false;
|
||||
if (!sSpellStore.LookupEntry(SPELL_QUEST_SUMMON_SCAVENGEBOT_005B6))
|
||||
return false;
|
||||
if (!sSpellStore.LookupEntry(SPELL_QUEST_SUMMON_55D_COLLECTATRON))
|
||||
return false;
|
||||
if (!sSpellStore.LookupEntry(SPELL_QUEST_ROBOT_KILL_CREDIT))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
void HandleDummy(SpellEffIndex effIndex)
|
||||
{
|
||||
Item *castItem = GetCastItem();
|
||||
if (!castItem)
|
||||
return;
|
||||
|
||||
Unit* pCaster = GetCaster();
|
||||
if (pCaster->GetTypeId() != TYPEID_PLAYER)
|
||||
return;
|
||||
|
||||
Creature* pTarget = GetHitCreature();
|
||||
if (!pTarget)
|
||||
return;
|
||||
|
||||
uint32 spellId = 0;
|
||||
switch (pTarget->GetEntry())
|
||||
{
|
||||
case NPC_SCAVENGEBOT_004A8: spellId = SPELL_QUEST_SUMMON_SCAVENGEBOT_004A8; break;
|
||||
case NPC_SENTRYBOT_57K: spellId = SPELL_QUEST_SUMMON_SENTRYBOT_57K; break;
|
||||
case NPC_DEFENDOTANK_66D: spellId = SPELL_QUEST_SUMMON_DEFENDOTANK_66D; break;
|
||||
case NPC_SCAVENGEBOT_005B6: spellId = SPELL_QUEST_SUMMON_SCAVENGEBOT_005B6; break;
|
||||
case NPC_55D_COLLECTATRON: spellId = SPELL_QUEST_SUMMON_55D_COLLECTATRON; break;
|
||||
default:
|
||||
return;
|
||||
}
|
||||
pCaster->CastSpell(pCaster, spellId, true, castItem);
|
||||
pCaster->CastSpell(pCaster, SPELL_QUEST_ROBOT_KILL_CREDIT, true);
|
||||
pTarget->ForcedDespawn();
|
||||
}
|
||||
|
||||
void Register()
|
||||
{
|
||||
EffectHandlers += EffectHandlerFn(spell_q11730_ultrasonic_screwdriver_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
|
||||
}
|
||||
};
|
||||
|
||||
SpellScript * GetSpellScript() const
|
||||
{
|
||||
return new spell_q11730_ultrasonic_screwdriver_SpellScript();
|
||||
}
|
||||
};
|
||||
|
||||
void AddSC_quest_spell_scripts()
|
||||
{
|
||||
new spell_q11587_arcane_prisoner_rescue();
|
||||
new spell_q11730_ultrasonic_screwdriver();
|
||||
}
|
||||
@@ -22,8 +22,115 @@
|
||||
*/
|
||||
|
||||
#include "ScriptPCH.h"
|
||||
#include "SpellAuraEffects.h"
|
||||
|
||||
enum ShamanSpells
|
||||
{
|
||||
SHAMAN_SPELL_GLYPH_OF_MANA_TIDE = 55441,
|
||||
SHAMAN_SPELL_MANA_TIDE_TOTEM = 39609,
|
||||
SHAMAN_SPELL_FIRE_NOVA_R1 = 1535,
|
||||
SHAMAN_SPELL_FIRE_NOVA_TRIGGERED_R1 = 8349
|
||||
};
|
||||
|
||||
// 1535 Fire Nova
|
||||
class spell_sha_fire_nova : public SpellHandlerScript
|
||||
{
|
||||
public:
|
||||
spell_sha_fire_nova() : SpellHandlerScript("spell_sha_fire_nova") { }
|
||||
|
||||
class spell_sha_fire_nova_SpellScript : public SpellScript
|
||||
{
|
||||
bool Validate(SpellEntry const * spellEntry)
|
||||
{
|
||||
if (!sSpellStore.LookupEntry(SHAMAN_SPELL_FIRE_NOVA_R1))
|
||||
return false;
|
||||
if (sSpellMgr.GetFirstSpellInChain(SHAMAN_SPELL_FIRE_NOVA_R1) != sSpellMgr.GetFirstSpellInChain(spellEntry->Id))
|
||||
return false;
|
||||
|
||||
uint8 rank = sSpellMgr.GetSpellRank(spellEntry->Id);
|
||||
if (!sSpellMgr.GetSpellWithRank(SHAMAN_SPELL_FIRE_NOVA_TRIGGERED_R1, rank, true))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
void HandleDummy(SpellEffIndex effIndex)
|
||||
{
|
||||
if (Unit* caster = GetCaster())
|
||||
{
|
||||
uint8 rank = sSpellMgr.GetSpellRank(GetSpellInfo()->Id);
|
||||
uint32 spellId = sSpellMgr.GetSpellWithRank(SHAMAN_SPELL_FIRE_NOVA_TRIGGERED_R1, rank);
|
||||
// fire slot
|
||||
if (spellId && caster->m_SummonSlot[1])
|
||||
{
|
||||
Creature* totem = caster->GetMap()->GetCreature(caster->m_SummonSlot[1]);
|
||||
if (totem && totem->isTotem())
|
||||
totem->CastSpell(totem, spellId, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Register()
|
||||
{
|
||||
EffectHandlers += EffectHandlerFn(spell_sha_fire_nova_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
|
||||
}
|
||||
};
|
||||
|
||||
SpellScript* GetSpellScript() const
|
||||
{
|
||||
return new spell_sha_fire_nova_SpellScript();
|
||||
}
|
||||
};
|
||||
|
||||
// 39610 Mana Tide Totem
|
||||
class spell_sha_mana_tide_totem : public SpellHandlerScript
|
||||
{
|
||||
public:
|
||||
spell_sha_mana_tide_totem() : SpellHandlerScript("spell_sha_mana_tide_totem") { }
|
||||
|
||||
class spell_sha_mana_tide_totem_SpellScript : public SpellScript
|
||||
{
|
||||
bool Validate(SpellEntry const * spellEntry)
|
||||
{
|
||||
if (!sSpellStore.LookupEntry(SHAMAN_SPELL_GLYPH_OF_MANA_TIDE))
|
||||
return false;
|
||||
if (!sSpellStore.LookupEntry(SHAMAN_SPELL_MANA_TIDE_TOTEM))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
void HandleDummy(SpellEffIndex effIndex)
|
||||
{
|
||||
Unit* caster = GetCaster();
|
||||
if (Unit* unitTarget = GetHitUnit())
|
||||
{
|
||||
if (unitTarget->getPowerType() == POWER_MANA)
|
||||
{
|
||||
int32 effValue = GetEffectValue();
|
||||
// Glyph of Mana Tide
|
||||
if (Unit *owner = caster->GetOwner())
|
||||
if (AuraEffect *dummy = owner->GetAuraEffect(SHAMAN_SPELL_GLYPH_OF_MANA_TIDE, 0))
|
||||
effValue += dummy->GetAmount();
|
||||
// Regenerate 6% of Total Mana Every 3 secs
|
||||
int32 effBasePoints0 = unitTarget->GetMaxPower(POWER_MANA) * effValue / 100;
|
||||
caster->CastCustomSpell(unitTarget, SHAMAN_SPELL_MANA_TIDE_TOTEM, &effBasePoints0, NULL, NULL, true, NULL, NULL, GetOriginalCaster()->GetGUID());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Register()
|
||||
{
|
||||
EffectHandlers += EffectHandlerFn(spell_sha_mana_tide_totem_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
|
||||
}
|
||||
};
|
||||
|
||||
SpellScript* GetSpellScript() const
|
||||
{
|
||||
return new spell_sha_mana_tide_totem_SpellScript();
|
||||
}
|
||||
};
|
||||
|
||||
void AddSC_shaman_spell_scripts()
|
||||
{
|
||||
|
||||
new spell_sha_fire_nova();
|
||||
new spell_sha_mana_tide_totem();
|
||||
}
|
||||
@@ -22,8 +22,222 @@
|
||||
*/
|
||||
|
||||
#include "ScriptPCH.h"
|
||||
#include "Spell.h"
|
||||
#include "SpellAuraEffects.h"
|
||||
|
||||
enum WarlockSpells
|
||||
{
|
||||
WARLOCK_DIVINE_PLEA = 54428,
|
||||
WARLOCK_DEMONIC_EMPOWERMENT_SUCCUBUS = 54435,
|
||||
WARLOCK_DEMONIC_EMPOWERMENT_VOIDWALKER = 54443,
|
||||
WARLOCK_DEMONIC_EMPOWERMENT_FELGUARD = 54508,
|
||||
WARLOCK_DEMONIC_EMPOWERMENT_FELHUNTER = 54509,
|
||||
WARLOCK_DEMONIC_EMPOWERMENT_IMP = 54444,
|
||||
WARLOCK_IMPROVED_HEALTHSTONE_R1 = 18692,
|
||||
WARLOCK_IMPROVED_HEALTHSTONE_R2 = 18693,
|
||||
};
|
||||
|
||||
// 47193 Demonic Empowerment
|
||||
class spell_warl_demonic_empowerment : public SpellHandlerScript
|
||||
{
|
||||
public:
|
||||
spell_warl_demonic_empowerment() : SpellHandlerScript("spell_warl_demonic_empowerment") { }
|
||||
|
||||
class spell_warl_demonic_empowerment_SpellScript : public SpellScript
|
||||
{
|
||||
bool Validate(SpellEntry const * spellEntry)
|
||||
{
|
||||
if (!sSpellStore.LookupEntry(WARLOCK_DEMONIC_EMPOWERMENT_SUCCUBUS))
|
||||
return false;
|
||||
if (!sSpellStore.LookupEntry(WARLOCK_DEMONIC_EMPOWERMENT_VOIDWALKER))
|
||||
return false;
|
||||
if (!sSpellStore.LookupEntry(WARLOCK_DEMONIC_EMPOWERMENT_FELGUARD))
|
||||
return false;
|
||||
if (!sSpellStore.LookupEntry(WARLOCK_DEMONIC_EMPOWERMENT_FELHUNTER))
|
||||
return false;
|
||||
if (!sSpellStore.LookupEntry(WARLOCK_DEMONIC_EMPOWERMENT_IMP))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
void HandleScriptEffect(SpellEffIndex effIndex)
|
||||
{
|
||||
if (Creature* targetCreature = GetHitCreature())
|
||||
{
|
||||
if (targetCreature->isPet())
|
||||
{
|
||||
CreatureInfo const * ci = sObjectMgr.GetCreatureTemplate(targetCreature->GetEntry());
|
||||
switch (ci->family)
|
||||
{
|
||||
case CREATURE_FAMILY_SUCCUBUS:
|
||||
targetCreature->CastSpell(targetCreature, WARLOCK_DEMONIC_EMPOWERMENT_SUCCUBUS, true);
|
||||
break;
|
||||
case CREATURE_FAMILY_VOIDWALKER:
|
||||
{
|
||||
SpellEntry const* spellInfo = sSpellStore.LookupEntry(WARLOCK_DEMONIC_EMPOWERMENT_VOIDWALKER);
|
||||
int32 hp = targetCreature->GetMaxHealth() * GetCaster()->CalculateSpellDamage(targetCreature, spellInfo, 0) / 100;
|
||||
targetCreature->CastCustomSpell(targetCreature, WARLOCK_DEMONIC_EMPOWERMENT_VOIDWALKER, &hp, NULL, NULL, true);
|
||||
//unitTarget->CastSpell(unitTarget, 54441, true);
|
||||
break;
|
||||
}
|
||||
case CREATURE_FAMILY_FELGUARD:
|
||||
targetCreature->CastSpell(targetCreature, WARLOCK_DEMONIC_EMPOWERMENT_FELGUARD, true);
|
||||
break;
|
||||
case CREATURE_FAMILY_FELHUNTER:
|
||||
targetCreature->CastSpell(targetCreature, WARLOCK_DEMONIC_EMPOWERMENT_FELHUNTER, true);
|
||||
break;
|
||||
case CREATURE_FAMILY_IMP:
|
||||
targetCreature->CastSpell(targetCreature, WARLOCK_DEMONIC_EMPOWERMENT_IMP, true);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Register()
|
||||
{
|
||||
EffectHandlers += EffectHandlerFn(spell_warl_demonic_empowerment_SpellScript::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
|
||||
}
|
||||
};
|
||||
|
||||
SpellScript* GetSpellScript() const
|
||||
{
|
||||
return new spell_warl_demonic_empowerment_SpellScript();
|
||||
}
|
||||
};
|
||||
|
||||
// 47422 Everlasting Affliction
|
||||
class spell_warl_everlasting_affliction : public SpellHandlerScript
|
||||
{
|
||||
public:
|
||||
spell_warl_everlasting_affliction() : SpellHandlerScript("spell_warl_everlasting_affliction") { }
|
||||
|
||||
class spell_warl_everlasting_affliction_SpellScript : public SpellScript
|
||||
{
|
||||
void HandleScriptEffect(SpellEffIndex effIndex)
|
||||
{
|
||||
if (Unit* unitTarget = GetHitUnit())
|
||||
// Refresh corruption on target
|
||||
if (AuraEffect* aur = unitTarget->GetAuraEffect(SPELL_AURA_PERIODIC_DAMAGE, SPELLFAMILY_WARLOCK, 0x2, 0, 0, GetCaster()->GetGUID()))
|
||||
aur->GetBase()->RefreshDuration();
|
||||
}
|
||||
|
||||
void Register()
|
||||
{
|
||||
EffectHandlers += EffectHandlerFn(spell_warl_everlasting_affliction_SpellScript::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
|
||||
}
|
||||
};
|
||||
|
||||
SpellScript* GetSpellScript() const
|
||||
{
|
||||
return new spell_warl_everlasting_affliction_SpellScript();
|
||||
}
|
||||
};
|
||||
|
||||
// 63521 Guarded by The Light
|
||||
class spell_warl_guarded_by_the_light : public SpellHandlerScript
|
||||
{
|
||||
public:
|
||||
spell_warl_guarded_by_the_light() : SpellHandlerScript("spell_warl_guarded_by_the_light") { }
|
||||
|
||||
class spell_warl_guarded_by_the_light_SpellScript : public SpellScript
|
||||
{
|
||||
bool Validate(SpellEntry const * spellEntry)
|
||||
{
|
||||
if (!sSpellStore.LookupEntry(WARLOCK_DIVINE_PLEA))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
void HandleScriptEffect(SpellEffIndex effIndex)
|
||||
{
|
||||
// Divine Plea
|
||||
if (Aura* aura = GetCaster()->GetAura(WARLOCK_DIVINE_PLEA))
|
||||
aura->RefreshDuration();
|
||||
}
|
||||
|
||||
void Register()
|
||||
{
|
||||
EffectHandlers += EffectHandlerFn(spell_warl_guarded_by_the_light_SpellScript::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
|
||||
}
|
||||
};
|
||||
|
||||
SpellScript* GetSpellScript() const
|
||||
{
|
||||
return new spell_warl_guarded_by_the_light_SpellScript();
|
||||
}
|
||||
};
|
||||
|
||||
// 6201 Create Healthstone (and ranks)
|
||||
class spell_warl_create_healthstone : public SpellHandlerScript
|
||||
{
|
||||
public:
|
||||
spell_warl_create_healthstone() : SpellHandlerScript("spell_warl_create_healthstone") { }
|
||||
|
||||
class spell_warl_create_healthstone_SpellScript : public SpellScript
|
||||
{
|
||||
static uint32 const iTypes[8][3];
|
||||
|
||||
bool Validate(SpellEntry const * spellEntry)
|
||||
{
|
||||
if (!sSpellStore.LookupEntry(WARLOCK_IMPROVED_HEALTHSTONE_R1))
|
||||
return false;
|
||||
if (!sSpellStore.LookupEntry(WARLOCK_IMPROVED_HEALTHSTONE_R2))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
void HandleScriptEffect(SpellEffIndex effIndex)
|
||||
{
|
||||
if (Unit* unitTarget = GetHitUnit())
|
||||
{
|
||||
uint32 rank = 0;
|
||||
// Improved Healthstone
|
||||
if (AuraEffect const * aurEff = unitTarget->GetDummyAuraEffect(SPELLFAMILY_WARLOCK, 284, 0))
|
||||
{
|
||||
switch (aurEff->GetId())
|
||||
{
|
||||
case WARLOCK_IMPROVED_HEALTHSTONE_R1: rank = 1; break;
|
||||
case WARLOCK_IMPROVED_HEALTHSTONE_R2: rank = 2; break;
|
||||
default:
|
||||
sLog.outError("Unknown rank of Improved Healthstone id: %d", aurEff->GetId());
|
||||
break;
|
||||
}
|
||||
}
|
||||
uint8 spellRank = sSpellMgr.GetSpellRank(GetSpellInfo()->Id);
|
||||
if (spellRank > 0 && spellRank <= 8)
|
||||
CreateItem(effIndex, iTypes[spellRank - 1][rank]);
|
||||
}
|
||||
}
|
||||
|
||||
void Register()
|
||||
{
|
||||
EffectHandlers += EffectHandlerFn(spell_warl_create_healthstone_SpellScript::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
|
||||
}
|
||||
};
|
||||
|
||||
SpellScript* GetSpellScript() const
|
||||
{
|
||||
return new spell_warl_create_healthstone_SpellScript();
|
||||
}
|
||||
};
|
||||
|
||||
uint32 const spell_warl_create_healthstone::spell_warl_create_healthstone_SpellScript::iTypes[8][3] = {
|
||||
{ 5512, 19004, 19005}, // Minor Healthstone
|
||||
{ 5511, 19006, 19007}, // Lesser Healthstone
|
||||
{ 5509, 19008, 19009}, // Healthstone
|
||||
{ 5510, 19010, 19011}, // Greater Healthstone
|
||||
{ 9421, 19012, 19013}, // Major Healthstone
|
||||
{22103, 22104, 22105}, // Master Healthstone
|
||||
{36889, 36890, 36891}, // Demonic Healthstone
|
||||
{36892, 36893, 36894} // Fel Healthstone
|
||||
};
|
||||
|
||||
|
||||
void AddSC_warlock_spell_scripts()
|
||||
{
|
||||
|
||||
new spell_warl_demonic_empowerment();
|
||||
new spell_warl_everlasting_affliction();
|
||||
new spell_warl_guarded_by_the_light();
|
||||
new spell_warl_create_healthstone();
|
||||
}
|
||||
Reference in new issue
Block a user