aboutsummaryrefslogtreecommitdiff
path: root/src/server/scripts
diff options
context:
space:
mode:
authorShocker <shocker@freakz.ro>2012-01-10 15:06:25 -0800
committerShocker <shocker@freakz.ro>2012-01-10 15:06:25 -0800
commit41488c9deb48f2e3356baca48d049ef28e308fce (patch)
treebe25096faf4086a1d961c8c06e4a3273c734f2a9 /src/server/scripts
parent528a9a6966ca9d952226f6af3e7defe592acbae4 (diff)
parentf7276a95de6bda0fbf4a446b9bb94373328506e2 (diff)
Merge pull request #4757 from Subv/shocking
Core/Achievements: Fix Shocking! on 10-man and 25-man
Diffstat (limited to 'src/server/scripts')
-rw-r--r--src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp59
-rw-r--r--src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp24
-rw-r--r--src/server/scripts/Northrend/Naxxramas/naxxramas.h2
3 files changed, 81 insertions, 4 deletions
diff --git a/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp b/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp
index b0138fb1a5e..24ef5fdcd3e 100644
--- a/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp
+++ b/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp
@@ -400,9 +400,68 @@ public:
};
+class spell_thaddius_pos_neg_charge : public SpellScriptLoader
+{
+ public:
+ spell_thaddius_pos_neg_charge() : SpellScriptLoader("spell_thaddius_pos_neg_charge") { }
+
+ class spell_thaddius_pos_neg_charge_SpellScript : public SpellScript
+ {
+ PrepareSpellScript(spell_thaddius_pos_neg_charge_SpellScript);
+
+ void HandleTargets(std::list<Unit*>& targetList)
+ {
+ uint8 count = 0;
+ for (std::list<Unit*>::iterator ihit = targetList.begin(); ihit != targetList.end(); ++ihit)
+ if ((*ihit)->GetGUID() != GetCaster()->GetGUID())
+ if (Player* target = (*ihit)->ToPlayer())
+ if (target->HasAura(GetTriggeringSpell()->Id))
+ ++count;
+ if (count)
+ {
+ uint32 spellId = 0;
+ switch (GetSpellInfo()->Id)
+ {
+ case 28062: spellId = 29659; break;
+ case 28085: spellId = 29660; break;
+ case 39090: spellId = 39089; break;
+ case 39093: spellId = 39092; break;
+ }
+ GetCaster()->SetAuraStack(spellId, GetCaster(), count);
+ }
+ }
+
+ void HandleDamage(SpellEffIndex /*effIndex*/)
+ {
+ if (!GetTriggeringSpell())
+ return;
+
+ Unit* target = GetHitUnit();
+
+ if (target->HasAura(GetTriggeringSpell()->Id))
+ SetHitDamage(0);
+ else
+ if (InstanceScript* instance = target->GetInstanceScript())
+ instance->SetData(DATA_POLARITY_SWITCHED, 1);
+ }
+
+ void Register()
+ {
+ OnEffectHitTarget += SpellEffectFn(spell_thaddius_pos_neg_charge_SpellScript::HandleDamage, EFFECT_0, SPELL_EFFECT_SCHOOL_DAMAGE);
+ OnUnitTargetSelect += SpellUnitTargetFn(spell_thaddius_pos_neg_charge_SpellScript::HandleTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ALLY);
+ }
+ };
+
+ SpellScript* GetSpellScript() const
+ {
+ return new spell_thaddius_pos_neg_charge_SpellScript();
+ }
+};
+
void AddSC_boss_thaddius()
{
new boss_thaddius();
new mob_stalagg();
new mob_feugen();
+ new spell_thaddius_pos_neg_charge();
}
diff --git a/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp b/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp
index 32cb279ce5f..9ae6f8d9776 100644
--- a/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp
+++ b/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp
@@ -148,6 +148,8 @@ public:
time_t maxHorsemenDiedTime;
uint32 playerDied;
+
+ uint32 PolaritySwitch;
void Initialize()
{
@@ -166,8 +168,10 @@ public:
kelthuzadGUID = 0;
kelthuzadTriggerGUID = 0;
- playerDied = 0;
- gothikDoorState = GO_STATE_ACTIVE;
+ playerDied = 0;
+ gothikDoorState = GO_STATE_ACTIVE;
+
+ PolaritySwitch = 0;
memset(portalsGUID, 0, sizeof(portalsGUID));
}
@@ -311,6 +315,9 @@ public:
case DATA_ABOMINATION_KILLED:
AbominationCount = value;
break;
+ case DATA_POLARITY_SWITCHED:
+ PolaritySwitch = value;
+ break;
}
}
@@ -440,6 +447,13 @@ public:
if (AreAllEncoutersDone() && !playerDied)
return true;
return false;
+ // Criteria for achievement 2178: Shocking! (10-man)
+ case 7604:
+ // Criteria for achievement 2179: Shocking! (25-man)
+ case 7605:
+ if (!PolaritySwitch)
+ return true;
+ return false;
}
return false;
}
@@ -447,14 +461,14 @@ public:
std::string GetSaveData()
{
std::ostringstream saveStream;
- saveStream << GetBossSaveData() << gothikDoorState << ' ' << playerDied;
+ saveStream << GetBossSaveData() << gothikDoorState << ' ' << playerDied << ' ' << PolaritySwitch;
return saveStream.str();
}
void Load(const char * data)
{
std::istringstream loadStream(LoadBossState(data));
- uint32 temp, buff, buff2;
+ uint32 temp, buff, buff2, buff3;
for (uint32 i = 0; i < MAX_BOSS_NUMBER; ++i)
loadStream >> temp;
@@ -463,6 +477,8 @@ public:
gothikDoorState = GOState(buff);
loadStream >> buff2;
playerDied = buff2;
+ loadStream >> buff3;
+ PolaritySwitch = buff3;
}
};
diff --git a/src/server/scripts/Northrend/Naxxramas/naxxramas.h b/src/server/scripts/Northrend/Naxxramas/naxxramas.h
index 43393aff844..34d465c775d 100644
--- a/src/server/scripts/Northrend/Naxxramas/naxxramas.h
+++ b/src/server/scripts/Northrend/Naxxramas/naxxramas.h
@@ -49,6 +49,8 @@ enum Data
DATA_HORSEMEN2,
DATA_HORSEMEN3,
DATA_ABOMINATION_KILLED,
+
+ DATA_POLARITY_SWITCHED,
};
enum Data64