aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLopin <davca.hr@seznam.cz>2011-06-24 22:04:20 +0200
committerLopin <davca.hr@seznam.cz>2011-06-24 22:04:20 +0200
commit3cb41ddb1f8fc1ca545d03a4aec48799b08a1973 (patch)
tree069eb67de95e7796254a08fc9d05a0bb69c499e7
parent29cacd96b2968d43f9bc6b27615377f2f848f2b9 (diff)
Scripts/Drak'Tharon Keep: Properly fixed achievement Oh Novos!
-rw-r--r--sql/updates/world/2011_06_24_08_world_achievement_criteria_data.sql6
-rw-r--r--src/server/scripts/Northrend/DraktharonKeep/boss_novos.cpp69
2 files changed, 54 insertions, 21 deletions
diff --git a/sql/updates/world/2011_06_24_08_world_achievement_criteria_data.sql b/sql/updates/world/2011_06_24_08_world_achievement_criteria_data.sql
new file mode 100644
index 00000000000..4e64ce26ae1
--- /dev/null
+++ b/sql/updates/world/2011_06_24_08_world_achievement_criteria_data.sql
@@ -0,0 +1,6 @@
+DELETE FROM `disables` WHERE `entry`=7361 AND `sourceType`=4;
+
+DELETE FROM `achievement_criteria_data` WHERE `criteria_id`=7361 AND `type`=11;
+INSERT INTO `achievement_criteria_data` (`criteria_id`,`type`,`value1`,`value2`,`ScriptName`)
+VALUES
+(7361,11,0,0,'achievement_oh_novos');
diff --git a/src/server/scripts/Northrend/DraktharonKeep/boss_novos.cpp b/src/server/scripts/Northrend/DraktharonKeep/boss_novos.cpp
index 2672a22d26c..4441c95a688 100644
--- a/src/server/scripts/Northrend/DraktharonKeep/boss_novos.cpp
+++ b/src/server/scripts/Northrend/DraktharonKeep/boss_novos.cpp
@@ -31,6 +31,7 @@ enum Spells
H_SPELL_WRATH_OF_MISERY = 59856,
SPELL_SUMMON_MINIONS = 59910 //Summons an army of Fetid Troll Corpses to assist the caster.
};
+
//not in db
enum Yells
{
@@ -41,6 +42,7 @@ enum Yells
SAY_REUBBLE_1 = -1600004,
SAY_REUBBLE_2 = -1600005
};
+
enum Creatures
{
CREATURE_RISEN_SHADOWCASTER = 27600,
@@ -48,16 +50,16 @@ enum Creatures
CREATURE_HULKING_CORPSE = 27597,
CREATURE_CRYSTAL_HANDLER = 26627
};
+
enum CombatPhase
{
IDLE,
PHASE_1,
PHASE_2
};
-enum Achievements
-{
- ACHIEV_OH_NOVOS = 2057
-};
+
+#define ACTION_MINION_REACHED 1
+#define DATA_OH_NOVOS 2
static Position AddSpawnPoint = { -379.20f, -816.76f, 59.70f, 0.0f };
static Position CrystalHandlerSpawnPoint = { -326.626343f, -709.956604f, 27.813314f, 0.0f };
@@ -79,7 +81,7 @@ public:
uint32 uiCrystalHandlerTimer;
uint8 crystalHandlerAmount;
- bool bAchiev;
+ bool ohNovos;
SummonList lSummons;
@@ -93,7 +95,7 @@ public:
{
Phase = IDLE;
luiCrystals.clear();
- bAchiev = true;
+ ohNovos = true;
me->CastStop();
lSummons.DespawnAll();
crystalHandlerAmount = 0;
@@ -108,10 +110,8 @@ public:
if (pInstance)
{
pInstance->SetData(DATA_NOVOS_EVENT, NOT_STARTED);
- luiCrystals.push_back(pInstance->GetData64(DATA_NOVOS_CRYSTAL_1));
- luiCrystals.push_back(pInstance->GetData64(DATA_NOVOS_CRYSTAL_2));
- luiCrystals.push_back(pInstance->GetData64(DATA_NOVOS_CRYSTAL_3));
- luiCrystals.push_back(pInstance->GetData64(DATA_NOVOS_CRYSTAL_4));
+ for (uint8 n = 0; n < 4; ++n)
+ luiCrystals.push_back(pInstance->GetData64(DATA_NOVOS_CRYSTAL_1 + n));
for (std::list<uint64>::const_iterator itr = luiCrystals.begin(); itr != luiCrystals.end(); ++itr)
{
if (GameObject* pTemp = pInstance->instance->GetGameObject(*itr))
@@ -182,12 +182,7 @@ public:
{
DoScriptText(SAY_DEATH, me);
if (pInstance)
- {
pInstance->SetData(DATA_NOVOS_EVENT, DONE);
-
- if (IsHeroic() && bAchiev)
- pInstance->DoCompleteAchievement(ACHIEV_OH_NOVOS);
- }
lSummons.DespawnAll();
}
@@ -206,6 +201,20 @@ public:
lSummons.Summon(summon);
}
+ void DoAction(int32 const action)
+ {
+ if (action == ACTION_MINION_REACHED)
+ ohNovos = false;
+ }
+
+ uint32 GetData(uint32 type)
+ {
+ if (type == DATA_OH_NOVOS)
+ return ohNovos ? 1 : 0;
+
+ return 0;
+ }
+
void RemoveCrystal()
{
if (!luiCrystals.empty())
@@ -319,10 +328,10 @@ public:
{
if (type != POINT_MOTION_TYPE || id !=0)
return;
- if (Creature* pNovos = Unit::GetCreature(*me, pInstance ? pInstance->GetData64(DATA_NOVOS) : 0))
+ if (Creature* Novos = ObjectAccessor::GetCreature(*me, pInstance ? pInstance->GetData64(DATA_NOVOS) : 0))
{
- CAST_AI(boss_novos::boss_novosAI, pNovos->AI())->bAchiev = false;
- if (Unit *pTarget = CAST_AI(boss_novos::boss_novosAI, pNovos->AI())->GetRandomTarget())
+ Novos->AI()->DoAction(ACTION_MINION_REACHED);
+ if (Unit *pTarget = CAST_AI(boss_novos::boss_novosAI, Novos->AI())->GetRandomTarget())
AttackStart(pTarget);
}
}
@@ -334,9 +343,27 @@ public:
}
};
+class achievement_oh_novos : public AchievementCriteriaScript
+{
+ public:
+ achievement_oh_novos() : AchievementCriteriaScript("achievement_oh_novos")
+ {
+ }
+
+ bool OnCheck(Player* /*player*/, Unit* target)
+ {
+ if (Creature* Novos = target->ToCreature())
+ if (Novos->AI()->GetData(DATA_OH_NOVOS))
+ return true;
+
+ return false;
+ }
+};
+
void AddSC_boss_novos()
{
- new boss_novos;
- new mob_crystal_handler;
- new mob_novos_minion;
+ new boss_novos();
+ new mob_crystal_handler();
+ new mob_novos_minion();
+ new achievement_oh_novos();
}