From 6bb26f37ea9b4e12212fd37bb7500a96be9e1e0b Mon Sep 17 00:00:00 2001 From: Gemt Date: Sun, 14 May 2017 12:50:55 +0200 Subject: [PATCH] gave faerlina areatrigger scriptname. Using it to do her greet scripttext --- sql/naxx/instance.sql | 4 ++ .../naxxramas/boss_faerlina.cpp | 14 +++--- .../naxxramas/instance_naxxramas.cpp | 32 ++++++++++-- .../eastern_plaguelands/naxxramas/naxxramas.h | 49 ++++++++++--------- 4 files changed, 64 insertions(+), 35 deletions(-) diff --git a/sql/naxx/instance.sql b/sql/naxx/instance.sql index 195e42ef2..f6a24c53e 100644 --- a/sql/naxx/instance.sql +++ b/sql/naxx/instance.sql @@ -13,3 +13,7 @@ VALUES (533001,181195,533,3143.88,-3572.45,287,2.345,0,0,0.921723,0.387849,25,10 -- Give Anub'rekhan gate GO_FLAG_NO_INTERACT flag. It's opened by instance script UPDATE `gameobject_template` SET `flags` = `flags`| 16 WHERE `entry`='181195'; + +-- give AreaTrigger outside Faerlina scriptname +DELETE FROM `scripted_areatrigger` where entry = 4115; +INSERT INTO `scripted_areatrigger` (`entry`, `ScriptName`) VALUES ('4115', 'at_naxxramas'); diff --git a/src/scripts/eastern_kingdoms/eastern_plaguelands/naxxramas/boss_faerlina.cpp b/src/scripts/eastern_kingdoms/eastern_plaguelands/naxxramas/boss_faerlina.cpp index 497430884..6c2816391 100644 --- a/src/scripts/eastern_kingdoms/eastern_plaguelands/naxxramas/boss_faerlina.cpp +++ b/src/scripts/eastern_kingdoms/eastern_plaguelands/naxxramas/boss_faerlina.cpp @@ -26,7 +26,7 @@ EndScriptData */ enum { - SAY_GREET = -1533009, + SAY_GREET = -1533009, // Done in instance_naxxramas::onNaxxramasAreaTrigger() SAY_AGGRO1 = -1533010, SAY_AGGRO2 = -1533011, SAY_AGGRO3 = -1533012, @@ -35,19 +35,19 @@ enum SAY_SLAY2 = -1533015, SAY_DEATH = -1533016, - //SOUND_RANDOM_AGGRO = 8955, //soundId containing the 4 aggro sounds, we not using this + //SOUND_RANDOM_AGGRO = 8955, //soundId containing the 4 aggro sounds, we not using this SPELL_POSIONBOLT_VOLLEY = 28796, SPELL_ENRAGE = 28798, - SPELL_RAINOFFIRE = 28794 //Not sure if targeted AoEs work if casted directly upon a pPlayer + SPELL_RAINOFFIRE = 28794 //Not sure if targeted AoEs work if casted directly upon a pPlayer }; + struct boss_faerlinaAI : public ScriptedAI { boss_faerlinaAI(Creature* pCreature) : ScriptedAI(pCreature) { m_pInstance = (instance_naxxramas*)pCreature->GetInstanceData(); - m_bHasTaunted = false; Reset(); } @@ -56,7 +56,6 @@ struct boss_faerlinaAI : public ScriptedAI uint32 m_uiPoisonBoltVolleyTimer; uint32 m_uiRainOfFireTimer; uint32 m_uiEnrageTimer; - bool m_bHasTaunted; void Reset() { @@ -89,10 +88,9 @@ struct boss_faerlinaAI : public ScriptedAI void MoveInLineOfSight(Unit* pWho) { - if (!m_bHasTaunted && m_creature->IsWithinDistInMap(pWho, 60.0f)) + //todo aggro range + if (m_creature->IsWithinDistInMap(pWho, 60.0f)) { - DoScriptText(SAY_GREET, m_creature); - m_bHasTaunted = true; } ScriptedAI::MoveInLineOfSight(pWho); diff --git a/src/scripts/eastern_kingdoms/eastern_plaguelands/naxxramas/instance_naxxramas.cpp b/src/scripts/eastern_kingdoms/eastern_plaguelands/naxxramas/instance_naxxramas.cpp index ddb3d3519..b3e61b380 100644 --- a/src/scripts/eastern_kingdoms/eastern_plaguelands/naxxramas/instance_naxxramas.cpp +++ b/src/scripts/eastern_kingdoms/eastern_plaguelands/naxxramas/instance_naxxramas.cpp @@ -25,6 +25,9 @@ EndScriptData */ #include "naxxramas.h" instance_naxxramas::instance_naxxramas(Map* pMap) : ScriptedInstance(pMap), + m_faerlinaHaveGreeted(false), + + m_uiAracEyeRampGUID(0), m_uiPlagEyeRampGUID(0), m_uiMiliEyeRampGUID(0), @@ -635,13 +638,11 @@ InstanceData* GetInstanceData_instance_naxxramas(Map* pMap) return new instance_naxxramas(pMap); } -bool AreaTrigger_at_naxxramas(Player* pPlayer, const AreaTriggerEntry* pAt) +void instance_naxxramas::onNaxxramasAreaTrigger(Player* pPlayer, const AreaTriggerEntry* pAt) { - if (pAt->id == AREATRIGGER_KELTHUZAD) + switch (pAt->id) { - if (pPlayer->isDead()) - return false; - + case AREATRIGGER_KELTHUZAD: if (instance_naxxramas* pInstance = (instance_naxxramas*)pPlayer->GetInstanceData()) { if (pInstance->GetData(TYPE_KELTHUZAD) == NOT_STARTED) @@ -650,8 +651,29 @@ bool AreaTrigger_at_naxxramas(Player* pPlayer, const AreaTriggerEntry* pAt) pInstance->SetChamberCenterCoords(pAt->x, pAt->y, pAt->z); } } + break; + case AREATRIGGER_FAERLINA: + if (!m_faerlinaHaveGreeted) + { + m_faerlinaHaveGreeted = true; + if (Creature* pFaerlina = GetCreature(m_uiFaerlinanGUID)) + { + DoScriptText(-1533009, pFaerlina); + } + } + break; } +} +bool AreaTrigger_at_naxxramas(Player* pPlayer, const AreaTriggerEntry* pAt) +{ + if (pPlayer->isGameMaster() || !pPlayer->isAlive()) + return false; + + if (instance_naxxramas* pInstance = (instance_naxxramas*)pPlayer->GetInstanceData()) + { + pInstance->onNaxxramasAreaTrigger(pPlayer, pAt); + } return false; } diff --git a/src/scripts/eastern_kingdoms/eastern_plaguelands/naxxramas/naxxramas.h b/src/scripts/eastern_kingdoms/eastern_plaguelands/naxxramas/naxxramas.h index 0994eeaed..0232a42db 100644 --- a/src/scripts/eastern_kingdoms/eastern_plaguelands/naxxramas/naxxramas.h +++ b/src/scripts/eastern_kingdoms/eastern_plaguelands/naxxramas/naxxramas.h @@ -46,7 +46,7 @@ enum // Gothik NPC_GOTHIK = 16060, - NPC_SUB_BOSS_TRIGGER = 16137, //summon locations + NPC_SUB_BOSS_TRIGGER = 16137, //summon locations NPC_UNREL_TRAINEE = 16124, NPC_UNREL_DEATH_KNIGHT = 16125, NPC_UNREL_RIDER = 16126, @@ -62,38 +62,38 @@ enum NPC_GUARDIAN = 16441, // Arachnid Quarter - GO_ARAC_ANUB_DOOR = 181126, //encounter door - GO_ARAC_ANUB_GATE = 181195, //open after boss is dead - GO_ARAC_FAER_WEB = 181235, //encounter door - GO_ARAC_FAER_DOOR = 194022, //after faerlina, to outer ring - GO_ARAC_MAEX_INNER_DOOR = 181197, //encounter door - GO_ARAC_MAEX_OUTER_DOOR = 181209, //right before maex + GO_ARAC_ANUB_DOOR = 181126, //encounter door + GO_ARAC_ANUB_GATE = 181195, //open after boss is dead + GO_ARAC_FAER_WEB = 181235, //encounter door + GO_ARAC_FAER_DOOR = 194022, //after faerlina, to outer ring + GO_ARAC_MAEX_INNER_DOOR = 181197, //encounter door + GO_ARAC_MAEX_OUTER_DOOR = 181209, //right before maex // Plague Quarter - GO_PLAG_SLIME01_DOOR = 181198, //not used - GO_PLAG_SLIME02_DOOR = 181199, //not used - GO_PLAG_NOTH_ENTRY_DOOR = 181200, //encounter door - GO_PLAG_NOTH_EXIT_DOOR = 181201, //exit, open when boss dead + GO_PLAG_SLIME01_DOOR = 181198, //not used + GO_PLAG_SLIME02_DOOR = 181199, //not used + GO_PLAG_NOTH_ENTRY_DOOR = 181200, //encounter door + GO_PLAG_NOTH_EXIT_DOOR = 181201, //exit, open when boss dead GO_PLAG_HEIG_ENTRY_DOOR = 181202, - GO_PLAG_HEIG_EXIT_DOOR = 181203, //exit, open when boss dead - GO_PLAG_LOAT_DOOR = 181241, //encounter door + GO_PLAG_HEIG_EXIT_DOOR = 181203, //exit, open when boss dead + GO_PLAG_LOAT_DOOR = 181241, //encounter door // Military Quarter - GO_MILI_GOTH_ENTRY_GATE = 181124, //open after razuvious died - GO_MILI_GOTH_EXIT_GATE = 181125, //exit, open at boss dead - GO_MILI_GOTH_COMBAT_GATE = 181170, //used while encounter is in progress - GO_MILI_HORSEMEN_DOOR = 181119, //encounter door + GO_MILI_GOTH_ENTRY_GATE = 181124, //open after razuvious died + GO_MILI_GOTH_EXIT_GATE = 181125, //exit, open at boss dead + GO_MILI_GOTH_COMBAT_GATE = 181170, //used while encounter is in progress + GO_MILI_HORSEMEN_DOOR = 181119, //encounter door - GO_CHEST_HORSEMEN_NORM = 181366, //four horsemen event, DoRespawnGameObject() when event == DONE + GO_CHEST_HORSEMEN_NORM = 181366, //four horsemen event, DoRespawnGameObject() when event == DONE GO_CHEST_HORSEMEN_HERO = 193426, // Construct Quarter GO_CONS_PATH_EXIT_DOOR = 181123, GO_CONS_GLUT_EXIT_DOOR = 181120, - GO_CONS_THAD_DOOR = 181121, // Thaddius enc door + GO_CONS_THAD_DOOR = 181121, // Thaddius enc door // Frostwyrm Lair - GO_KELTHUZAD_WATERFALL_DOOR = 181225, // exit, open after sapphiron is dead + GO_KELTHUZAD_WATERFALL_DOOR = 181225, // exit, open after sapphiron is dead // Eyes GO_ARAC_EYE_RAMP = 181212, @@ -107,9 +107,10 @@ enum GO_MILI_PORTAL = 181578, GO_CONS_PORTAL = 181576, - AREATRIGGER_FROSTWYRM = 4120, //not needed here, but AT to be scripted + AREATRIGGER_GOTHIK = 4116, AREATRIGGER_KELTHUZAD = 4112, - AREATRIGGER_GOTHIK = 4116 + AREATRIGGER_FAERLINA = 4115, // Used for faerlinas greet message + AREATRIGGER_FROSTWYRM = 4120 //not needed here, but AT to be scripted }; struct GothTrigger @@ -150,6 +151,10 @@ class instance_naxxramas : public ScriptedInstance void OnPlayerDeath(Player* p) override; + void onNaxxramasAreaTrigger(Player* pPlayer, const AreaTriggerEntry* pAt); + + private: + bool m_faerlinaHaveGreeted; protected: uint32 m_auiEncounter[MAX_ENCOUNTER]; std::string strInstData;