aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLopin <davca.hr@seznam.cz>2011-06-20 17:07:01 +0200
committerLopin <davca.hr@seznam.cz>2011-06-20 17:07:01 +0200
commit24f4cf6cb5a0b416617db0fcdadee3fbcf3c9cfc (patch)
tree717897dfcd9d87537363a04fd52c100648d68de1
parent93a15bc5289d0e7d525553cac327978f72054b0b (diff)
Core/Achievements: Fixed achievement Safety Dance in Heigan the Unclean's encounter
-rw-r--r--sql/updates/world/2011_06_20_03_world_spell_script_names.sql4
-rw-r--r--sql/updates/world/2011_06_20_04_world_achievement_criteria_data.sql6
-rw-r--r--src/server/scripts/Northrend/Naxxramas/boss_heigan.cpp81
-rw-r--r--src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp4
-rw-r--r--src/server/scripts/Northrend/Naxxramas/naxxramas.h1
5 files changed, 95 insertions, 1 deletions
diff --git a/sql/updates/world/2011_06_20_03_world_spell_script_names.sql b/sql/updates/world/2011_06_20_03_world_spell_script_names.sql
new file mode 100644
index 00000000000..0f0efa3fcae
--- /dev/null
+++ b/sql/updates/world/2011_06_20_03_world_spell_script_names.sql
@@ -0,0 +1,4 @@
+DELETE FROM `spell_script_names` WHERE `spell_id`=29371;
+INSERT INTO `spell_script_names` (`spell_id`,`ScriptName`)
+VALUES
+(29371,'spell_heigan_eruption');
diff --git a/sql/updates/world/2011_06_20_04_world_achievement_criteria_data.sql b/sql/updates/world/2011_06_20_04_world_achievement_criteria_data.sql
new file mode 100644
index 00000000000..16ccd48a28f
--- /dev/null
+++ b/sql/updates/world/2011_06_20_04_world_achievement_criteria_data.sql
@@ -0,0 +1,6 @@
+DELETE FROM `disables` WHERE `entry` IN (7264,7548);
+DELETE FROM `achievement_criteria_data` WHERE `criteria_id` IN (7264,7548) AND `type`=11;
+INSERT INTO `achievement_criteria_data` (`criteria_id`,`type`,`value1`,`value2`,`ScriptName`)
+VALUES
+(7264,11,0,0,'achievement_safety_dance'),
+(7548,11,0,0,'achievement_safety_dance');
diff --git a/src/server/scripts/Northrend/Naxxramas/boss_heigan.cpp b/src/server/scripts/Northrend/Naxxramas/boss_heigan.cpp
index 6dcfea6a483..b11e5eb82f3 100644
--- a/src/server/scripts/Northrend/Naxxramas/boss_heigan.cpp
+++ b/src/server/scripts/Northrend/Naxxramas/boss_heigan.cpp
@@ -42,6 +42,9 @@ enum Phases
PHASE_DANCE,
};
+#define ACTION_SAFETY_DANCE_FAIL 1
+#define DATA_SAFETY_DANCE 19962139
+
class boss_heigan : public CreatureScript
{
public:
@@ -58,12 +61,35 @@ public:
uint32 eruptSection;
bool eruptDirection;
+ bool safetyDance;
Phases phase;
- void KilledUnit(Unit* /*Victim*/)
+ void KilledUnit(Unit* who)
{
if (!(rand()%5))
DoScriptText(SAY_SLAY, me);
+ if (who->GetTypeId() == TYPEID_PLAYER)
+ DoAction(ACTION_SAFETY_DANCE_FAIL);
+ }
+
+ void DoAction(int32 const action)
+ {
+ if (action == ACTION_SAFETY_DANCE_FAIL)
+ SetData(DATA_SAFETY_DANCE, 0);
+ }
+
+ void SetData(uint32 id, uint32 data)
+ {
+ if (id == DATA_SAFETY_DANCE)
+ safetyDance = data ? true : false;
+ }
+
+ uint32 GetData(uint32 type)
+ {
+ if (type == DATA_SAFETY_DANCE)
+ return safetyDance ? 1 : 0;
+
+ return 0;
}
void JustDied(Unit* /*Killer*/)
@@ -77,6 +103,7 @@ public:
_EnterCombat();
DoScriptText(SAY_AGGRO, me);
EnterPhase(PHASE_FIGHT);
+ safetyDance = true;
}
void EnterPhase(Phases newPhase)
@@ -147,7 +174,59 @@ public:
};
+class spell_heigan_eruption : public SpellScriptLoader
+{
+ public:
+ spell_heigan_eruption() : SpellScriptLoader("spell_heigan_eruption") { }
+
+ class spell_heigan_eruption_SpellScript : public SpellScript
+ {
+ PrepareSpellScript(spell_heigan_eruption_SpellScript);
+
+ void HandleScript(SpellEffIndex /*eff*/)
+ {
+ Unit* caster = GetCaster();
+ if (!caster)
+ return;
+
+ if (GetHitDamage() >= int32(GetHitUnit()->GetHealth()))
+ if (InstanceScript* instance = caster->GetInstanceScript())
+ if (Creature* Heigan = ObjectAccessor::GetCreature(*caster, instance->GetData64(DATA_HEIGAN)))
+ Heigan->AI()->DoAction(ACTION_SAFETY_DANCE_FAIL);
+ }
+
+ void Register()
+ {
+ OnEffect += SpellEffectFn(spell_heigan_eruption_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCHOOL_DAMAGE);
+ }
+ };
+
+ SpellScript* GetSpellScript() const
+ {
+ return new spell_heigan_eruption_SpellScript();
+ }
+};
+
+class achievement_safety_dance : public AchievementCriteriaScript
+{
+ public:
+ achievement_safety_dance() : AchievementCriteriaScript("achievement_safety_dance")
+ {
+ }
+
+ bool OnCheck(Player* /*player*/, Unit* target)
+ {
+ if (Creature* Heigan = target->ToCreature())
+ if (Heigan->AI()->GetData(DATA_SAFETY_DANCE))
+ return true;
+
+ return false;
+ }
+};
+
void AddSC_boss_heigan()
{
new boss_heigan();
+ new spell_heigan_eruption();
+ new achievement_safety_dance();
}
diff --git a/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp b/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp
index c49ac5b67bf..5b0571a7dcd 100644
--- a/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp
+++ b/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp
@@ -132,6 +132,7 @@ public:
uint64 uiSir;
uint64 uiThaddius;
+ uint64 uiHeigan;
uint64 uiFeugen;
uint64 uiStalagg;
@@ -155,6 +156,7 @@ public:
case 30549: uiBaron = creature->GetGUID(); return;
case 16063: uiSir = creature->GetGUID(); return;
case 15928: uiThaddius = creature->GetGUID(); return;
+ case 15936: uiHeigan = creature->GetGUID(); return;
case 15930: uiFeugen = creature->GetGUID(); return;
case 15929: uiStalagg = creature->GetGUID(); return;
case 15990: uiKelthuzad = creature->GetGUID(); return;
@@ -290,6 +292,8 @@ public:
return uiSir;
case DATA_THADDIUS:
return uiThaddius;
+ case DATA_HEIGAN:
+ return uiHeigan;
case DATA_FEUGEN:
return uiFeugen;
case DATA_STALAGG:
diff --git a/src/server/scripts/Northrend/Naxxramas/naxxramas.h b/src/server/scripts/Northrend/Naxxramas/naxxramas.h
index 37965e12592..86a7f67c11d 100644
--- a/src/server/scripts/Northrend/Naxxramas/naxxramas.h
+++ b/src/server/scripts/Northrend/Naxxramas/naxxramas.h
@@ -58,6 +58,7 @@ enum Data64
DATA_BARON,
DATA_SIR,
DATA_THADDIUS,
+ DATA_HEIGAN,
DATA_FEUGEN,
DATA_STALAGG,
DATA_KELTHUZAD,