aboutsummaryrefslogtreecommitdiff
path: root/src/server/game
diff options
context:
space:
mode:
authorShauren <none@none>2010-08-21 20:50:38 +0200
committerShauren <none@none>2010-08-21 20:50:38 +0200
commit73d3f210a9df46d3725575663538a69cf58f0fda (patch)
tree59dd52cdd7b1e6a099e5ef28aea8aa61f7914c2e /src/server/game
parent97f98e9bbdb1a4c64738306eaca300b937e3c97c (diff)
Scripts/Icecrown Citadel: Add script for Deathbringer Saurfang (only missing alliance outro due to need of spawning and moving a transport)
Scripts/Icecrown Citadel: Corrected Lord Marrowgar, should no longer target tanks with Bone Spike Graveyard, his Coldflame should now spread properly Core/Scripts: Moved Lady Deathwhisper Mana Barrier handler to scripts Core/Scripts: Allow AuraScript to prevent default effects by effect index Core/Scripts: Added Is25ManRaid() method to ScriptedAI, obviously used to check if raid is 25man Core/Achievements: Pass m_caster to UpdateAchievementCriteria for ACHIEVEMENT_CRITERIA_TYPE_BE_SPELL_TARGET --HG-- branch : trunk
Diffstat (limited to 'src/server/game')
-rw-r--r--src/server/game/AI/ScriptedAI/ScriptedCreature.h3
-rw-r--r--src/server/game/Entities/Unit/Unit.cpp14
-rw-r--r--src/server/game/Entities/Vehicle/Vehicle.cpp1
-rw-r--r--src/server/game/Entities/Vehicle/Vehicle.h1
-rw-r--r--src/server/game/Scripting/ScriptLoader.cpp2
-rw-r--r--src/server/game/Spells/Auras/SpellAuraEffects.cpp8
-rw-r--r--src/server/game/Spells/Spell.cpp14
-rw-r--r--src/server/game/Spells/SpellEffects.cpp10
-rw-r--r--src/server/game/Spells/SpellScript.h8
9 files changed, 45 insertions, 16 deletions
diff --git a/src/server/game/AI/ScriptedAI/ScriptedCreature.h b/src/server/game/AI/ScriptedAI/ScriptedCreature.h
index 6c304ecd346..84e02ae169e 100644
--- a/src/server/game/AI/ScriptedAI/ScriptedCreature.h
+++ b/src/server/game/AI/ScriptedAI/ScriptedCreature.h
@@ -180,6 +180,9 @@ struct ScriptedAI : public CreatureAI
// return the dungeon or raid difficulty
Difficulty getDifficulty() { return m_difficulty; }
+ // return true for 25 man or 25 man heroic mode
+ bool Is25ManRaid() { return m_difficulty & 1; }
+
template<class T> inline
const T& DUNGEON_MODE(const T& normal5, const T& heroic10)
{
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp
index ba69b702b21..c2b01a4032b 100644
--- a/src/server/game/Entities/Unit/Unit.cpp
+++ b/src/server/game/Entities/Unit/Unit.cpp
@@ -8681,6 +8681,16 @@ bool Unit::HandleProcTriggerSpell(Unit *pVictim, uint32 damage, AuraEffect* trig
if (!pVictim->HasAuraState(AURA_STATE_HEALTHLESS_35_PERCENT, procSpell, this))
return false;
break;
+ // Deathbringer Saurfang - Rune of Blood
+ case 72408:
+ // can proc only if target is marked with rune
+ if (!pVictim->HasAura(72410))
+ return false;
+ break;
+ // Deathbringer Saurfang - Blood Beast's Blood Link
+ case 72176:
+ basepoints0 = 3;
+ break;
}
// Blade Barrier
@@ -8868,6 +8878,10 @@ bool Unit::HandleProcTriggerSpell(Unit *pVictim, uint32 damage, AuraEffect* trig
return false;
break;
}
+ // Deathbringer Saurfang - Blood Link
+ case 72202:
+ target = FindNearestCreature(37813, 75.0f); // NPC_DEATHBRINGER_SAURFANG = 37813
+ break;
}
if (cooldown && GetTypeId() == TYPEID_PLAYER && ToPlayer()->HasSpellCooldown(trigger_spell_id))
diff --git a/src/server/game/Entities/Vehicle/Vehicle.cpp b/src/server/game/Entities/Vehicle/Vehicle.cpp
index 4cc20680cd9..d010780bccb 100644
--- a/src/server/game/Entities/Vehicle/Vehicle.cpp
+++ b/src/server/game/Entities/Vehicle/Vehicle.cpp
@@ -76,6 +76,7 @@ void Vehicle::Install()
switch (m_vehicleInfo->m_powerType)
{
case POWER_STEAM:
+ case POWER_BLOOD:
me->setPowerType(POWER_ENERGY);
me->SetMaxPower(POWER_ENERGY, 100);
break;
diff --git a/src/server/game/Entities/Vehicle/Vehicle.h b/src/server/game/Entities/Vehicle/Vehicle.h
index 93464b3699e..cbce5fb2f4b 100644
--- a/src/server/game/Entities/Vehicle/Vehicle.h
+++ b/src/server/game/Entities/Vehicle/Vehicle.h
@@ -29,6 +29,7 @@ enum PowerType
{
POWER_STEAM = 61,
POWER_PYRITE = 41,
+ POWER_BLOOD = 121,
};
struct VehicleSeat
diff --git a/src/server/game/Scripting/ScriptLoader.cpp b/src/server/game/Scripting/ScriptLoader.cpp
index 362f9f7e986..f68c14031f9 100644
--- a/src/server/game/Scripting/ScriptLoader.cpp
+++ b/src/server/game/Scripting/ScriptLoader.cpp
@@ -427,6 +427,7 @@ void AddSC_boss_falric();
void AddSC_boss_marwyn();
void AddSC_boss_lord_marrowgar(); // Icecrown Citadel
void AddSC_boss_lady_deathwhisper();
+void AddSC_boss_deathbringer_saurfang();
void AddSC_instance_icecrown_citadel();
void AddSC_dalaran();
@@ -1100,6 +1101,7 @@ void AddNorthrendScripts()
AddSC_boss_marwyn();
AddSC_boss_lord_marrowgar(); // Icecrown Citadel
AddSC_boss_lady_deathwhisper();
+ AddSC_boss_deathbringer_saurfang();
AddSC_instance_icecrown_citadel();
AddSC_dalaran();
diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.cpp b/src/server/game/Spells/Auras/SpellAuraEffects.cpp
index 43e1febeaed..ad19e45b170 100644
--- a/src/server/game/Spells/Auras/SpellAuraEffects.cpp
+++ b/src/server/game/Spells/Auras/SpellAuraEffects.cpp
@@ -2268,14 +2268,6 @@ void AuraEffect::TriggerSpell(Unit * target, Unit * caster) const
case 39857: triggerSpellId = 39856; break;
// Personalized Weather
case 46736: triggerSpellId = 46737; break;
- // Mana Barrier - Lady Deathwhisper
- case 70842:
- {
- int32 missingHealth = caster->GetMaxHealth() - caster->GetHealth();
- caster->ModifyHealth(missingHealth);
- caster->ModifyPower(POWER_MANA, -missingHealth);
- return;
- }
}
break;
}
diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp
index 9b53c31b814..6e3aa21e258 100644
--- a/src/server/game/Spells/Spell.cpp
+++ b/src/server/game/Spells/Spell.cpp
@@ -1413,7 +1413,7 @@ SpellMissInfo Spell::DoSpellHitOnUnit(Unit *unit, const uint32 effectMask, bool
if (unit->GetTypeId() == TYPEID_PLAYER)
{
unit->ToPlayer()->GetAchievementMgr().StartTimedAchievement(ACHIEVEMENT_TIMED_TYPE_SPELL_TARGET, m_spellInfo->Id);
- unit->ToPlayer()->GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_BE_SPELL_TARGET, m_spellInfo->Id);
+ unit->ToPlayer()->GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_BE_SPELL_TARGET, m_spellInfo->Id, 0, m_caster);
unit->ToPlayer()->GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_BE_SPELL_TARGET2, m_spellInfo->Id);
}
@@ -2805,6 +2805,18 @@ void Spell::SelectEffectTargets(uint32 i, uint32 cur)
case 59725: // Improved Spell Reflection - aoe aura
unitList.remove(m_caster);
break;
+ case 72255: // Mark of the Fallen Champion (Deathbringer Saurfang)
+ case 72444:
+ case 72445:
+ case 72446:
+ for (std::list<Unit*>::iterator itr = unitList.begin() ; itr != unitList.end();)
+ {
+ if (!(*itr)->HasAura(72293))
+ itr = unitList.erase(itr);
+ else
+ ++itr;
+ }
+ break;
}
// Death Pact
if (m_spellInfo->SpellFamilyName == SPELLFAMILY_DEATHKNIGHT && m_spellInfo->SpellFamilyFlags[0] & 0x00080000)
diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp
index 7bd4924c8a6..7980ad125af 100644
--- a/src/server/game/Spells/SpellEffects.cpp
+++ b/src/server/game/Spells/SpellEffects.cpp
@@ -1847,8 +1847,10 @@ void Spell::EffectForceCast(uint32 i)
case 52349: // Overtake
unitTarget->CastCustomSpell(unitTarget, spellInfo->Id, &damage, NULL, NULL, true, NULL, NULL, m_originalCasterGUID);
return;
- //case 72378: // Blood Nova
- //case 73058: // Blood Nova
+ case 72378: // Blood Nova
+ case 73058: // Blood Nova
+ spellInfo = sSpellMgr.GetSpellForDifficultyFromSpell(spellInfo, m_caster);
+ break;
}
}
Unit * caster = GetTriggeredSpellCaster(spellInfo, m_caster, unitTarget);
@@ -2629,7 +2631,9 @@ void Spell::EffectHealthLeech(uint32 i)
// Do not apply multiplier to damage if it's Death Coil
int32 new_damage;
- if (m_spellInfo->SpellFamilyFlags[0] & 0x80000)
+ if (m_spellInfo->SpellFamilyFlags[0] & 0x80000 ||
+ m_spellInfo->Id == 72409 || m_spellInfo->Id == 72447 || // ...or Deathbringer Saurfang's Rune of Blood
+ m_spellInfo->Id == 72448 || m_spellInfo->Id == 72449)
new_damage = damage;
else
new_damage = int32(damage * multiplier);
diff --git a/src/server/game/Spells/SpellScript.h b/src/server/game/Spells/SpellScript.h
index 6912cb18787..7a030614469 100644
--- a/src/server/game/Spells/SpellScript.h
+++ b/src/server/game/Spells/SpellScript.h
@@ -280,12 +280,12 @@ class AuraScript : public _SpellScript
public:
bool _Validate(SpellEntry const * entry, const char * scriptname);
bool _Load(Aura * aura);
- void _ResetDefault() { m_default = true; }
- bool _IsDefaultActionPrevented(SpellEffIndex /*effIndex*/) {return !m_default;};
- void PreventDefaultAction() { m_default = false; };
+ void _ResetDefault() { m_defaultPreventedEffectsMask = 0; }
+ bool _IsDefaultActionPrevented(SpellEffIndex effIndex) { return m_defaultPreventedEffectsMask & (1 << effIndex); }
+ void PreventDefaultAction(SpellEffIndex effIndex) { m_defaultPreventedEffectsMask |= 1 << effIndex; }
private:
Aura * m_aura;
- bool m_default;
+ uint8 m_defaultPreventedEffectsMask;
public:
//
// AuraScript interface