diff options
author | Blaymoira <none@none> | 2009-01-22 19:24:57 +0100 |
---|---|---|
committer | Blaymoira <none@none> | 2009-01-22 19:24:57 +0100 |
commit | c36c7111c5a7b6396efad56491c38f4949345c97 (patch) | |
tree | 0a17c125d604dafe2d113b92f209db1f8c496ec4 | |
parent | de63f36302b92eb0af72dcf4fc4a5309b3e777ba (diff) |
*Converted text to database in shadowmoon_valley
*Rewrited npc_overlord_morghor script
*Added models for flight spells
--HG--
branch : trunk
-rw-r--r-- | sql/updates/945_world_scripts.sql | 41 | ||||
-rw-r--r-- | sql/updates/CMakeLists.txt | 1 | ||||
-rw-r--r-- | src/bindings/scripts/scripts/zone/shadowmoon_valley/shadowmoon_valley.cpp | 737 | ||||
-rw-r--r-- | src/game/SpellEffects.cpp | 4 |
4 files changed, 293 insertions, 490 deletions
diff --git a/sql/updates/945_world_scripts.sql b/sql/updates/945_world_scripts.sql new file mode 100644 index 00000000000..8d007e347f9 --- /dev/null +++ b/sql/updates/945_world_scripts.sql @@ -0,0 +1,41 @@ +update creature_template set scriptname='' where entry=22083; +update creature_template set scriptname='npc_overlord_morghor' where entry=23139; +update creature_template set scriptname='' where entry=23141; +DELETE FROM script_texts WHERE entry BETWEEN -1000221 and -1000206; +INSERT INTO script_texts (entry, content_default, type, emote, comment) VALUES +(-1000206, 'Come, $N. Lord Stormrage awaits.', 0, 1, 'OVERLORD_SAY_1'), +(-1000207, 'Lord Illidan will be here shortly.', 0, 1, 'OVERLORD_SAY_2'), +(-1000208, 'Lord Illidan, this is the Dragonmaw that I, and others, have told you about. He will lead us to victory!', 0, 1, 'OVERLORD_SAY_3'), +(-1000209, 'But... My lord, I do not understand. $N... He is the orc that has...', 0, 1, 'OVERLORD_SAY_4'), +(-1000210, 'It will be done, my lord.', 0, 1, 'OVERLORD_SAY_5'), +(-1000211, 'So you thought to make a fool of Mor\'ghor, eh? Before you are delivered to Lord Illidan, you will feel pain that you could not know to exist. I will take pleasure in exacting my own vengeance.', 0, 25, 'OVERLORD_SAY_6'), +(-1000212, 'Warriors of Dragonmaw, gather \'round! One among you has attained the rank of highlord! Bow your heads in reverence! Show your respect and allegiance to Highlord $N!', 1, 22, 'OVERLORD_YELL_1'), +(-1000213, 'All hail Lord Illidan!', 1, 66, 'OVERLORD_YELL_2'), +(-1000214, 'What is the meaning of this, Mor\'ghor?', 0, 1, 'LORD_ILLIDAN_SAY_1'), +(-1000215, 'SILENCE!', 0, 22, 'LORD_ILLIDAN_SAY_2'), +(-1000216, 'Blathering idiot. You incomprehensibly incompetent buffoon...', 0, 1, 'LORD_ILLIDAN_SAY_3'), +(-1000217, 'THIS is your hero?', 0, 6, 'LORD_ILLIDAN_SAY_4'), +(-1000218, 'You have been deceived, imbecile.', 0, 1, 'LORD_ILLIDAN_SAY_5'), +(-1000219, 'This... whole... operation... HAS BEEN COMPROMISED!', 0, 22, 'LORD_ILLIDAN_SAY_6'), +(-1000220, 'I expect to see this insect\'s carcass in pieces in my lair within the hour. Fail and you will suffer a fate so much worse than death.', 0, 1, 'LORD_ILLIDAN_SAY_7'), +(-1000221, 'You will not harm the boy, Mor\'ghor! Quickly, $N, climb on my back!', 0, 22, 'YARZILL_THE_MERC_SAY'); + +DELETE FROM script_texts WHERE entry='-1000222'; +INSERT INTO script_texts (entry, content_default, type, language, emote, comment) VALUES +(-1000222, 'Thank you, mortal.', 0, 11, 1, 'SAY_JUST_EATEN'); + +DELETE FROM script_texts WHERE entry BETWEEN -1000234 and -1000223; +INSERT INTO script_texts (entry, content_default, emote, comment) VALUES +(-1000223, 'I sense the tortured spirits, $N. They are this way, come quickly!', 1, 'SAY_START'), +(-1000224, 'Watch out!', 0, 'SAY_AGGRO1'), +(-1000225, 'Naga attackers! Defend yourself!', 0, 'SAY_AGGRO2'), +(-1000226, 'Kill them all!', 0, 'ASSASSIN_SAY_AGGRO1'), +(-1000227, 'You will never essscape Coilssskarrr...', 0, 'ASSASSIN_SAY_AGGRO2'), +(-1000228, 'Grant me protection $N, i must break trough their foul magic!', 0, 'SAY_PROGRESS1'), +(-1000229, 'The naga of Coilskar are exceptionally cruel to their prisoners. It is a miracle that I survived inside that watery prison for as long as I did. Earthmother be praised.', 0, 'SAY_PROGRESS2'), +(-1000230, 'Now we must find the exit.', 0, 'SAY_PROGRESS3'), +(-1000231, 'Lady Vashj must answer for these atrocities. She must be brought to justice!', 0, 'SAY_PROGRESS4'), +(-1000232, 'The tumultuous nature of the great waterways of Azeroth and Draenor are a direct result of tormented water spirits.', 0, 'SAY_PROGRESS5'), +(-1000233, 'It shouldn\'t be much further, $N. The exit is just up ahead.', 0, 'SAY_PROGRESS6'), +(-1000234, 'Thank you, $N. Please return to my brethren at the Altar of Damnation, near the Hand of Gul\'dan, and tell them that Wilda is safe. May the Earthmother watch over you...', 0, 'SAY_END'); + diff --git a/sql/updates/CMakeLists.txt b/sql/updates/CMakeLists.txt index 760512dda5e..255ff730847 100644 --- a/sql/updates/CMakeLists.txt +++ b/sql/updates/CMakeLists.txt @@ -146,4 +146,5 @@ INSTALL(FILES 933_world_scripts.sql 935_world_scripts.sql 940_world_scripts.sql +945_world_scripts.sql DESTINATION share/trinity/sql/updates) diff --git a/src/bindings/scripts/scripts/zone/shadowmoon_valley/shadowmoon_valley.cpp b/src/bindings/scripts/scripts/zone/shadowmoon_valley/shadowmoon_valley.cpp index 38f84f5ca7a..2621fb5cc4e 100644 --- a/src/bindings/scripts/scripts/zone/shadowmoon_valley/shadowmoon_valley.cpp +++ b/src/bindings/scripts/scripts/zone/shadowmoon_valley/shadowmoon_valley.cpp @@ -30,6 +30,8 @@ npc_murkblood_overseer npc_neltharaku npc_karynaku npc_oronok_tornheart +npc_overlord_morghor +npc_yarzill_the_merc npc_earthmender_wilda EndContentData */ @@ -44,7 +46,7 @@ EndContentData */ #define SPELL_JUST_EATEN 38502 #define SPELL_NETHER_BREATH 38467 -#define SAY_JUST_EATEN "Thank you, mortal." +#define SAY_JUST_EATEN -1000222 struct TRINITY_DLL_DECL mob_mature_netherwing_drakeAI : public ScriptedAI { @@ -120,7 +122,7 @@ struct TRINITY_DLL_DECL mob_mature_netherwing_drakeAI : public ScriptedAI IsEating = false; DoCast(m_creature, SPELL_JUST_EATEN); m_creature->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_NONE); - DoSay(SAY_JUST_EATEN, LANG_DRACONIC, NULL); + DoScriptText(SAY_JUST_EATEN, m_creature); if(PlayerGUID) { Player* plr = ((Player*)Unit::GetUnit((*m_creature), PlayerGUID)); @@ -637,402 +639,195 @@ bool QuestAccept_npc_karynaku(Player* player, Creature* creature, Quest const* q } /*#### -# quest_lord_illidan_stormrage +# npc_overlord_morghor ####*/ + #define QUEST_LORD_ILLIDAN_STORMRAGE 11108 -#define LORD_ILLIDAN_STORMRAGE 22083 + +#define C_ILLIDAN 22083 +#define C_YARZILL 23141 #define SPELL_ONE 39990 // Red Lightning Bolt #define SPELL_TWO 41528 // Mark of Stormrage #define SPELL_THREE 40216 // Dragonaw Faction #define SPELL_FOUR 42016 // Dragonaw Trasform -#define OVERLORD_SAY_1 "Come, $N. Lord Stormrage awaits." -#define OVERLORD_SAY_2 "Lord Illidan will be here shortly." -#define OVERLORD_SAY_3 "Lord Illidan, this is the Dragonmaw that I, and others, have told you about. He will lead us to victory!" -#define OVERLORD_SAY_4 "But... My lord, I do not understand. $N... He is the orc that has..." -#define OVERLORD_SAY_5 "It will be done, my lord." -#define OVERLORD_SAY_6 "So you thought to make a fool of Mor'ghor, eh? Before you are delivered to Lord Illidan, you will feel pain that you could not know to exist. I will take pleasure in exacting my own vengeance." - -#define OVERLORD_YELL_1 "Warriors of Dragonmaw, gather 'round! One among you has attained the rank of highlord! Bow your heads in reverence! Show your respect and allegiance to Highlord $N!" -#define OVERLORD_YELL_2 "All hail Lord Illidan!" - -#define LORD_ILLIDAN_SAY_1 "What is the meaning of this, Mor'ghor?" -#define LORD_ILLIDAN_SAY_2 "SILENCE!" -#define LORD_ILLIDAN_SAY_3 "Blathering idiot. You incomprehensibly incompetent buffoon..." -#define LORD_ILLIDAN_SAY_4 "THIS is your hero?" -#define LORD_ILLIDAN_SAY_5 "You have been deceived, imbecile." -#define LORD_ILLIDAN_SAY_6 "This... whole... operation... HAS BEEN COMPROMISED!" -#define LORD_ILLIDAN_SAY_7 "I expect to see this insect's carcass in pieces in my lair within the hour. Fail and you will suffer a fate so much worse than death." - -#define YARZILL_THE_MERC_SAY "You will not harm the boy, Mor'ghor! Quickly, $N, climb on my back!" - -#define GOSSIP_FLY "Lets Do! <MISSING TEXT>" - -bool GossipHello_npc_yarzill_fly(Player *player, Creature *_Creature) -{ - if (player->GetQuestStatus(QUEST_LORD_ILLIDAN_STORMRAGE) == QUEST_STATUS_COMPLETE) - { - player->ADD_GOSSIP_ITEM(0, GOSSIP_FLY, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); - player->SEND_GOSSIP_MENU(3961,_Creature->GetGUID()); - return true; - }else{ - return false; - } -} - -bool GossipSelect_npc_yarzill_fly(Player *player, Creature *_Creature, uint32 sender, uint32 action) -{ - if (action == GOSSIP_ACTION_INFO_DEF + 1) - { - std::vector<uint32> nodes; - nodes.resize(2); - nodes[0] = 173; - nodes[1] = 174; - error_log("SD2: Player %s started quest 11108 which has disabled taxi node, need to be fixed in core", player->GetName()); - //player->ActivateTaxiPathTo(nodes, 23468); - return true; - } - return false; -} - -struct TRINITY_DLL_DECL Yarzill_The_MercAI : public ScriptedAI -{ - Yarzill_The_MercAI(Creature *c) : ScriptedAI(c) {Reset();} - -void Reset(){} - -void Aggro(Unit *who){} - -void DoSpeach(Unit *target) -{ -DoSay(YARZILL_THE_MERC_SAY,LANG_UNIVERSAL,target); -} -}; - -struct TRINITY_DLL_DECL Lord_IllidanAI : public ScriptedAI -{ -Lord_IllidanAI(Creature *c) : ScriptedAI(c) {Reset();} +#define OVERLORD_SAY_1 -1000206 +#define OVERLORD_SAY_2 -1000207 +#define OVERLORD_SAY_3 -1000208 +#define OVERLORD_SAY_4 -1000209 +#define OVERLORD_SAY_5 -1000210 +#define OVERLORD_SAY_6 -1000211 -void Reset(){} +#define OVERLORD_YELL_1 -1000212 +#define OVERLORD_YELL_2 -1000213 -void Aggro(Unit *who){} +#define LORD_ILLIDAN_SAY_1 -1000214 +#define LORD_ILLIDAN_SAY_2 -1000215 +#define LORD_ILLIDAN_SAY_3 -1000216 +#define LORD_ILLIDAN_SAY_4 -1000217 +#define LORD_ILLIDAN_SAY_5 -1000218 +#define LORD_ILLIDAN_SAY_6 -1000219 +#define LORD_ILLIDAN_SAY_7 -1000220 -void DoSpeach(int phase) -{ - switch(phase) - { - case 1: - DoSay(LORD_ILLIDAN_SAY_1,LANG_UNIVERSAL,NULL); - break; - case 2: - DoSay(LORD_ILLIDAN_SAY_2,LANG_UNIVERSAL,NULL); - break; - case 3: - DoSay(LORD_ILLIDAN_SAY_3,LANG_UNIVERSAL,NULL); - break; - case 4: - DoSay(LORD_ILLIDAN_SAY_4,LANG_UNIVERSAL,NULL); - break; - case 5: - DoSay(LORD_ILLIDAN_SAY_5,LANG_UNIVERSAL,NULL); - break; - case 6: - DoSay(LORD_ILLIDAN_SAY_6,LANG_UNIVERSAL,NULL); - break; - case 7: - DoSay(LORD_ILLIDAN_SAY_7,LANG_UNIVERSAL,NULL); - break; - case 0: - default: - break; - } -} -}; +#define YARZILL_THE_MERC_SAY -1000221 -struct TRINITY_DLL_DECL Overlord_MorghorAI : public ScriptedAI +struct TRINITY_DLL_DECL npc_overlord_morghorAI : public ScriptedAI { - Overlord_MorghorAI(Creature *c) : ScriptedAI(c) - { - Lord = NULL; - Yarzill = NULL; - Reset(); - } - - Unit* m_player; - Unit* PlayerCheck; - - uint32 SpeachTimer; - uint32 SpeachNum; + npc_overlord_morghorAI(Creature *c) : ScriptedAI(c) {Reset();} uint64 PlayerGUID; - uint64 YazillGUID; + uint64 IllidanGUID; - bool DoingSpeach; - bool Failed; + uint32 ConversationTimer; + uint32 Step; - Creature* Lord; - Creature* Yarzill; + bool Event; void Reset() { - if (Lord) - { - Lord->SetUInt64Value(UNIT_FIELD_TARGET, 0); - Lord->SetVisibility(VISIBILITY_OFF); - Lord->setDeathState(JUST_DIED); - } + PlayerGUID = 0; + IllidanGUID = 0; - if (Yarzill) - { - Yarzill->SetUInt64Value(UNIT_FIELD_TARGET, 0); - } + ConversationTimer = 0; + Step = 0; - m_creature->Relocate(-5085.77, 577.231, 86.6719, 2.32608); - m_creature->SetUInt32Value(UNIT_NPC_FLAGS, 2); - m_creature->SetUInt64Value(UNIT_FIELD_TARGET, 0); - m_creature->SetUInt32Value(UNIT_FIELD_BYTES_1,0); - m_player = NULL; - PlayerCheck = NULL; - PlayerGUID = 0; - YazillGUID = 0; - Lord = NULL; - Yarzill = NULL; - DoingSpeach = false; - Failed = false; - SpeachNum = 0; - SpeachTimer = 0; + Event = false; } - void BeginSpeach(Unit* target) + void Aggro(Unit* who){} + + void StartEvent() { m_creature->SetUInt32Value(UNIT_NPC_FLAGS, 0); - m_creature->SetUInt32Value(UNIT_FIELD_BYTES_1,0); - DoSay(OVERLORD_SAY_1,LANG_UNIVERSAL,target); - m_player = target; - PlayerCheck = NULL; - PlayerGUID = target->GetGUID(); - SpeachTimer = 4200; - SpeachNum = 0; - DoingSpeach = true; + m_creature->SetUInt32Value(UNIT_FIELD_BYTES_1,0); + Unit* Illidan = m_creature->SummonCreature(C_ILLIDAN, -5107.83, 602.584, 85.2393, 4.92598, TEMPSUMMON_CORPSE_DESPAWN, 0); + IllidanGUID = Illidan->GetGUID(); + Illidan->SetVisibility(VISIBILITY_OFF); + if(PlayerGUID) + { + Unit* player = Unit::GetUnit((*m_creature), PlayerGUID); + DoScriptText(OVERLORD_SAY_1, m_creature, player); + } + ConversationTimer = 4200; + Step = 0; + Event = true; } - void Aggro(Unit *who){} - - void MoveInLineOfSight(Unit *who) + uint32 NextStep(uint32 Step) { - if (!who) - return; + Unit* plr = Unit::GetUnit((*m_creature), PlayerGUID); + + Unit* Illi = Unit::GetUnit((*m_creature), IllidanGUID); - if (DoingSpeach) + switch(Step) { - if (who->GetEntry() == 23141 && m_creature->IsWithinDistInMap(who, 15)) + case 0: return 0; break; + case 1: m_creature->GetMotionMaster()->MovePoint(0, -5104.41, 595.297, 85.6838); return 9000; break; + case 2: DoScriptText(OVERLORD_YELL_1, m_creature, plr); return 4500; break; + case 3: m_creature->SetInFront(plr); return 3200; break; + case 4: DoScriptText(OVERLORD_SAY_2, m_creature, plr); return 2000; break; + case 5: Illi->SetVisibility(VISIBILITY_ON); return 350; break; + case 6: + Illi->CastSpell(Illi, SPELL_ONE, true); + Illi->SetUInt64Value(UNIT_FIELD_TARGET, m_creature->GetGUID()); + m_creature->SetUInt64Value(UNIT_FIELD_TARGET, IllidanGUID); + return 2000; break; + case 7: DoScriptText(OVERLORD_YELL_2, m_creature); return 4500; break; + case 8: m_creature->SetUInt32Value(UNIT_FIELD_BYTES_1, 8); return 2500; break; + case 9: DoScriptText(OVERLORD_SAY_3, m_creature); return 6500; break; + case 10: DoScriptText(LORD_ILLIDAN_SAY_1, Illi); return 5000; break; + case 11: DoScriptText(OVERLORD_SAY_4, m_creature, plr); return 6000; break; + case 12: DoScriptText(LORD_ILLIDAN_SAY_2, Illi); return 5500; break; + case 13: DoScriptText(LORD_ILLIDAN_SAY_3, Illi); return 4000; break; + case 14: Illi->SetUInt64Value(UNIT_FIELD_TARGET, PlayerGUID); return 1500; break; + case 15: DoScriptText(LORD_ILLIDAN_SAY_4, Illi); return 1500; break; + case 16: + if (plr) { - if (!YazillGUID) - { - YazillGUID = who->GetGUID(); - } - } + Illi->CastSpell(plr, SPELL_TWO, true); + plr->RemoveAurasDueToSpell(SPELL_THREE); + plr->RemoveAurasDueToSpell(SPELL_FOUR); + return 5000; + }else{ + ((Player*)plr)->FailQuest(QUEST_LORD_ILLIDAN_STORMRAGE); Step = 30; return 100; + }break; + case 17: DoScriptText(LORD_ILLIDAN_SAY_5, Illi); return 5000; break; + case 18: DoScriptText(LORD_ILLIDAN_SAY_6, Illi); return 5000; break; + case 19: DoScriptText(LORD_ILLIDAN_SAY_7, Illi); return 5000; break; + case 20: + Illi->HandleEmoteCommand(EMOTE_ONESHOT_LIFTOFF); + Illi->AddUnitMovementFlag(MOVEMENTFLAG_ONTRANSPORT + MOVEMENTFLAG_LEVITATING); + return 500; break; + case 21: DoScriptText(OVERLORD_SAY_5, m_creature); return 500; break; + case 22: + Illi->SetVisibility(VISIBILITY_OFF); + Illi->setDeathState(JUST_DIED); + return 1000; break; + case 23: m_creature->SetUInt32Value(UNIT_FIELD_BYTES_1,0); return 2000; break; + case 24: m_creature->SetUInt64Value(UNIT_FIELD_TARGET, PlayerGUID); return 5000; break; + case 25: DoScriptText(OVERLORD_SAY_6, m_creature); return 2000; break; + case 26: ((Player*)plr)->CompleteQuest(QUEST_LORD_ILLIDAN_STORMRAGE); return 6000; break; + case 27: + { + Unit* Yarzill = FindCreature(C_YARZILL, 50); + if (Yarzill) + Yarzill->SetUInt64Value(UNIT_FIELD_TARGET, PlayerGUID); + return 500; }break; + case 28: + plr->RemoveAurasDueToSpell(SPELL_TWO); + plr->RemoveAurasDueToSpell(41519); + plr->CastSpell(plr, SPELL_THREE, true); + plr->CastSpell(plr, SPELL_FOUR, true); + return 1000; break; + case 29: + { + Unit* Yarzill = FindCreature(C_YARZILL, 50); + if(Yarzill) + DoScriptText(YARZILL_THE_MERC_SAY, Yarzill, plr); + return 5000; }break; + case 30: + { + Unit* Yarzill = FindCreature(C_YARZILL, 50); + if (Yarzill) + Yarzill->SetUInt64Value(UNIT_FIELD_TARGET, 0); + return 5000; }break; + case 31: + { + Unit* Yarzill = FindCreature(C_YARZILL, 50); + if (Yarzill) + Yarzill->CastSpell(plr, 41540, true); + return 1000;}break; + case 32: m_creature->GetMotionMaster()->MovePoint(0, -5085.77, 577.231, 86.6719); return 5000; break; + case 33: Reset(); return 100; break; + + default : return 9999999; } } void UpdateAI(const uint32 diff) { - //Speach - if (DoingSpeach) + if(ConversationTimer < diff) { - if (SpeachTimer < diff) + if(Event && IllidanGUID && PlayerGUID) { - if (YazillGUID && !Yarzill) - Yarzill = ((Creature*)Unit::GetUnit((*m_creature), YazillGUID)); - - if (!m_creature->IsWithinDistInMap(m_player, 50) && ((Player*)m_player)->GetQuestStatus(QUEST_LORD_ILLIDAN_STORMRAGE) == QUEST_STATUS_INCOMPLETE) - { - ((Player*)m_player)->FailQuest(QUEST_LORD_ILLIDAN_STORMRAGE); - SpeachNum = 30; - } - - switch (SpeachNum) - { - // Overlord Movement - case 0: - m_creature->GetMotionMaster()->MovePoint(0, -5104.41, 595.297, 85.6838); - SpeachTimer = 9000; SpeachNum++; break; - // Overlord Yell 1 - case 1: - m_creature->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_SHOUT); - DoYell(OVERLORD_YELL_1,LANG_UNIVERSAL,m_player); - SpeachTimer = 4500; SpeachNum++; break; - // Overlord Angle - case 2: - m_creature->SetUInt64Value(UNIT_FIELD_TARGET, PlayerGUID); - SpeachTimer = 3200; SpeachNum++; break; - // Overlord Say 2 - case 3: - DoSay(OVERLORD_SAY_2,LANG_UNIVERSAL,NULL); - SpeachTimer = 2000; SpeachNum++; break; - // Summon Illidan - case 4: - Lord = m_creature->SummonCreature(LORD_ILLIDAN_STORMRAGE, -5107.83, 602.584, 85.2393, 4.92598, TEMPSUMMON_CORPSE_DESPAWN, 0); - Lord->LoadCreaturesAddon(); - SpeachTimer = 350; SpeachNum++; break; - // Illidan Cast Red Bolt - case 5: - Lord->CastSpell(Lord, SPELL_ONE, true); - Lord->SetUInt64Value(UNIT_FIELD_TARGET, m_creature->GetGUID()); - m_creature->SetUInt64Value(UNIT_FIELD_TARGET, Lord->GetGUID()); - SpeachTimer = 2000; SpeachNum++; break; - // Overlord Yell 2 - case 6: - DoYell(OVERLORD_YELL_2,LANG_UNIVERSAL,NULL); - SpeachTimer = 4500; SpeachNum++; break; - // Overlord Kneel - case 7: - m_creature->SetUInt32Value(UNIT_FIELD_BYTES_1,8); - SpeachTimer = 2500; SpeachNum++; break; - // Overlord Say 3 - case 8: - DoSay(OVERLORD_SAY_3,LANG_UNIVERSAL,NULL); - SpeachTimer = 6500; SpeachNum++; break; - // Illidan Say 1 - case 9: - ((Lord_IllidanAI*)Lord->AI())->DoSpeach(1); - SpeachTimer = 5000; SpeachNum++; break; - // Overlord Say 4 - case 10: - DoSay(OVERLORD_SAY_4,LANG_UNIVERSAL,m_player); - SpeachTimer = 6000; SpeachNum++; break; - // Illidan Say 2 - case 11: - ((Lord_IllidanAI*)Lord->AI())->DoSpeach(2); - SpeachTimer = 5500; SpeachNum++; break; - // Illidan Say 3 - case 12: - ((Lord_IllidanAI*)Lord->AI())->DoSpeach(3); - SpeachTimer = 4000; SpeachNum++; break; - // Illidan Angle - case 13: - Lord->SetUInt64Value(UNIT_FIELD_TARGET, PlayerGUID); - SpeachTimer = 1500; SpeachNum++; break; - // Illidan Say 4 - case 14: - ((Lord_IllidanAI*)Lord->AI())->DoSpeach(4); - SpeachTimer = 1500; SpeachNum++; break; - // Illidan Cast - case 15: - PlayerCheck = Unit::GetUnit(*Lord, PlayerGUID); - if (PlayerCheck) - { - Lord->CastSpell(m_player, SPELL_TWO, true); - m_player->RemoveAurasDueToSpell(SPELL_THREE); - m_player->RemoveAurasDueToSpell(SPELL_FOUR); - SpeachTimer = 5000; SpeachNum++; - } - else - { - ((Player*)m_player)->FailQuest(QUEST_LORD_ILLIDAN_STORMRAGE); - SpeachTimer = 100; SpeachNum = 30; - } - break; - // Illidan Say 5 - case 16: - ((Lord_IllidanAI*)Lord->AI())->DoSpeach(5); - SpeachTimer = 5000; SpeachNum++; break; - // Illidan Say 6 - case 17: - ((Lord_IllidanAI*)Lord->AI())->DoSpeach(6); - SpeachTimer = 5000; SpeachNum++; break; - // Illidan Say 7 - case 18: - ((Lord_IllidanAI*)Lord->AI())->DoSpeach(7); - SpeachTimer = 5000; SpeachNum++; break; - // Illidan Fly - case 19: - Lord->HandleEmoteCommand(EMOTE_ONESHOT_LIFTOFF); - Lord->AddUnitMovementFlag(MOVEMENTFLAG_ONTRANSPORT + MOVEMENTFLAG_LEVITATING); - SpeachTimer = 500; SpeachNum++; break; - // Overlord Say 5 - case 20: - DoSay(OVERLORD_SAY_5,LANG_UNIVERSAL,NULL); - SpeachTimer = 500; SpeachNum++; break; - // Illidan Despawn - case 21: - Lord->SetVisibility(VISIBILITY_OFF); - Lord->setDeathState(JUST_DIED); - Lord = NULL; - SpeachTimer = 1000; SpeachNum++; break; - // Overlord Stand Up - case 22: - m_creature->SetUInt32Value(UNIT_FIELD_BYTES_1,0); - SpeachTimer = 2000; SpeachNum++; break; - // Overlord Angle - case 23: - m_creature->SetUInt64Value(UNIT_FIELD_TARGET, PlayerGUID); - SpeachTimer = 5000; SpeachNum++; break; - // Overlord Say 6 - case 24: - DoSay(OVERLORD_SAY_6,LANG_UNIVERSAL,NULL); - SpeachTimer = 2000; SpeachNum++; break; - // Complete Quest - case 25: - ((Player*)m_player)->CompleteQuest(QUEST_LORD_ILLIDAN_STORMRAGE); - SpeachTimer = 6000; SpeachNum++; break; - // Goblin Angle - case 26: - if (Yarzill) - Yarzill->SetUInt64Value(UNIT_FIELD_TARGET, PlayerGUID); - SpeachTimer = 500; SpeachNum++; break; - // Cast Again Dragonaw Illusion - case 27: - m_player->RemoveAurasDueToSpell(SPELL_TWO); - m_player->RemoveAurasDueToSpell(41519); - m_player->CastSpell(m_player, SPELL_THREE, true); - m_player->CastSpell(m_player, SPELL_FOUR, true); - SpeachTimer = 1000; SpeachNum++; break; - // Goblin - case 28: - if (Yarzill) - ((Yarzill_The_MercAI*)Yarzill->AI())->DoSpeach(m_player); - SpeachTimer = 5000; SpeachNum++; break; - // Goblin Off - case 29: - if (Yarzill) - Yarzill->SetUInt64Value(UNIT_FIELD_TARGET, 0); - SpeachTimer = 5000; SpeachNum++; break; - // Overlord Go Back - case 30: - m_creature->GetMotionMaster()->MovePoint(0, -5085.77, 577.231, 86.6719); - SpeachTimer = 5000; SpeachNum++; break; - // Reset - case 31: - Reset(); - break; - default: break; - } - }else SpeachTimer -= diff; - } + ConversationTimer = NextStep(++Step); + } + }else ConversationTimer -= diff; } }; -CreatureAI* GetAI_Overlord_Morghor(Creature *_Creature) +CreatureAI* GetAI_npc_overlord_morghorAI(Creature *_Creature) { -return new Overlord_MorghorAI(_Creature); +return new npc_overlord_morghorAI(_Creature); } -CreatureAI* GetAI_Lord_Illidan(Creature *_Creature) -{ -return new Lord_IllidanAI(_Creature); -} - -CreatureAI* GetAI_Yarzill_The_Merc(Creature *_Creature) -{ -return new Yarzill_The_MercAI(_Creature); -} -bool QuestAccept_Overlord_Morghor(Player *player, Creature *_Creature, const Quest *_Quest ) +bool QuestAccept_npc_overlord_morghor(Player *player, Creature *_Creature, const Quest *_Quest ) { if(_Quest->GetQuestId() == QUEST_LORD_ILLIDAN_STORMRAGE) { - ((Overlord_MorghorAI*)_Creature->AI())->BeginSpeach((Unit*)player); + ((npc_overlord_morghorAI*)_Creature->AI())->PlayerGUID = player->GetGUID(); + ((npc_overlord_morghorAI*)_Creature->AI())->StartEvent(); return true; } return false; @@ -1042,42 +837,44 @@ bool QuestAccept_Overlord_Morghor(Player *player, Creature *_Creature, const Que # npc_earthmender_wilda ####*/ -#define SAY_START "I sense the tortured spirits, $N. They are this way, come quickly!" -#define SAY_AGGRO1 "Watch out!" -#define SAY_AGGRO2 "Naga attackers! Defend yourself!" -#define ASSASSIN_SAY_AGGRO1 "Kill them all!" -#define ASSASSIN_SAY_AGGRO2 "You will never essscape Coilssskarrr..." -#define SAY_PROGRESS1 "Grant me protection $N, i must break trough their foul magic!" -#define SAY_PROGRESS2 "The naga of Coilskar are exceptionally cruel to their prisoners. It is a miracle that I survived inside that watery prison for as long as I did. Earthmother be praised." -#define SAY_PROGRESS3 "Now we must find the exit." -#define SAY_PROGRESS4 "Lady Vashj must answer for these atrocities. She must be brought to justice!" -#define SAY_PROGRESS5 "The tumultuous nature of the great waterways of Azeroth and Draenor are a direct result of tormented water spirits." -#define SAY_PROGRESS6 "It shouldn't be much further, $N. The exit is just up ahead." -#define SAY_END "Thank you, $N. Please return to my brethren at the Altar of Damnation, near the Hand of Gul'dan, and tell them that Wilda is safe. May the Earthmother watch over you..." - - -#define QUEST_ESCAPE_FROM_COILSKAR_CISTERN 10451 -#define NPC_COILSKAR_ASSASSIN 21044 +#define SAY_START -1000223 +#define SAY_AGGRO1 -1000224 +#define SAY_AGGRO2 -1000225 +#define ASSASSIN_SAY_AGGRO1 -1000226 +#define ASSASSIN_SAY_AGGRO2 -1000227 +#define SAY_PROGRESS1 -1000228 +#define SAY_PROGRESS2 -1000229 +#define SAY_PROGRESS3 -1000230 +#define SAY_PROGRESS4 -1000231 +#define SAY_PROGRESS5 -1000232 +#define SAY_PROGRESS6 -1000233 +#define SAY_END -1000234 + +#define QUEST_ESCAPE_FROM_COILSKAR_CISTERN 10451 +#define NPC_COILSKAR_ASSASSIN 21044 struct TRINITY_DLL_DECL npc_earthmender_wildaAI : public npc_escortAI { npc_earthmender_wildaAI(Creature *c) : npc_escortAI(c) {Reset();} - void Aggro(Unit *who) - { - Unit* player = Unit::GetUnit((*m_creature), PlayerGUID); + bool Completed; - if(who->GetTypeId() == TYPEID_UNIT && who->GetEntry() == NPC_COILSKAR_ASSASSIN) - DoSay(SAY_AGGRO2, LANG_UNIVERSAL, player); - else DoSay(SAY_AGGRO1, LANG_UNIVERSAL, player); - } + void Aggro(Unit *who) + { + Unit* player = Unit::GetUnit((*m_creature), PlayerGUID); - void Reset() - { - m_creature->setFaction(1726); - } + if(who->GetTypeId() == TYPEID_UNIT && who->GetEntry() == NPC_COILSKAR_ASSASSIN) + DoScriptText(SAY_AGGRO2, m_creature, player); + else DoScriptText(SAY_AGGRO1, m_creature, player); + } + + void Reset() + { + m_creature->setFaction(1726); + Completed = false; + } - void WaypointReached(uint32 i) + void WaypointReached(uint32 i) { Unit* player = Unit::GetUnit((*m_creature), PlayerGUID); @@ -1086,120 +883,92 @@ struct TRINITY_DLL_DECL npc_earthmender_wildaAI : public npc_escortAI switch(i) { - case 0: - DoSay(SAY_START, LANG_UNIVERSAL, player); - m_creature->HandleEmoteCommand(EMOTE_ONESHOT_TALK); - break; - case 13: - DoSay(SAY_PROGRESS1, LANG_UNIVERSAL, player); - SummonAssassin(); - break; - case 14: - SummonAssassin(); break; - case 15: - DoSay(SAY_PROGRESS3, LANG_UNIVERSAL, player); break; + case 0: DoScriptText(SAY_START, m_creature, player); break; + case 13: DoScriptText(SAY_PROGRESS1, m_creature, player); + SummonAssassin(); + break; + case 14: SummonAssassin(); break; + case 15: DoScriptText(SAY_PROGRESS3, m_creature, player); break; case 19: - switch(rand()%3) - { - case 0: - DoSay(SAY_PROGRESS2, LANG_UNIVERSAL, player); break; - case 1: - DoSay(SAY_PROGRESS4, LANG_UNIVERSAL, player); break; - case 2: - DoSay(SAY_PROGRESS5, LANG_UNIVERSAL, player); break; - } - break; - case 20: - SummonAssassin(); break; + switch(rand()%3) + { + case 0: DoScriptText(SAY_PROGRESS2, m_creature, player); break; + case 1: DoScriptText(SAY_PROGRESS4, m_creature, player); break; + case 2: DoScriptText(SAY_PROGRESS5, m_creature, player); break; + } + break; + case 20: SummonAssassin(); break; case 26: - switch(rand()%3) - { - case 0: - DoSay(SAY_PROGRESS2, LANG_UNIVERSAL, player); break; - case 1: - DoSay(SAY_PROGRESS4, LANG_UNIVERSAL, player); break; - case 2: - DoSay(SAY_PROGRESS5, LANG_UNIVERSAL, player); break; - } - break; - case 27: - SummonAssassin(); break; + switch(rand()%3) + { + case 0: DoScriptText(SAY_PROGRESS2, m_creature, player); break; + case 1: DoScriptText(SAY_PROGRESS4, m_creature, player); break; + case 2: DoScriptText(SAY_PROGRESS5, m_creature, player); break; + } + break; + case 27: SummonAssassin(); break; case 33: - switch(rand()%3) - { - case 0: - DoSay(SAY_PROGRESS2, LANG_UNIVERSAL, player); break; - case 1: - DoSay(SAY_PROGRESS4, LANG_UNIVERSAL, player); break; - case 2: - DoSay(SAY_PROGRESS5, LANG_UNIVERSAL, player); break; - } - break; - case 34: - SummonAssassin(); break; + switch(rand()%3) + { + case 0: DoScriptText(SAY_PROGRESS2, m_creature, player); break; + case 1: DoScriptText(SAY_PROGRESS4, m_creature, player); break; + case 2: DoScriptText(SAY_PROGRESS5, m_creature, player); break; + } + break; + case 34: SummonAssassin(); break; case 37: - switch(rand()%3) - { - case 0: - DoSay(SAY_PROGRESS2, LANG_UNIVERSAL, player); break; - case 1: - DoSay(SAY_PROGRESS4, LANG_UNIVERSAL, player); break; - case 2: - DoSay(SAY_PROGRESS5, LANG_UNIVERSAL, player); break; - } - break; - case 38: - SummonAssassin(); break; - case 39: - DoSay(SAY_PROGRESS6, LANG_UNIVERSAL, player); break; + switch(rand()%3) + { + case 0: DoScriptText(SAY_PROGRESS2, m_creature, player); break; + case 1: DoScriptText(SAY_PROGRESS4, m_creature, player); break; + case 2: DoScriptText(SAY_PROGRESS5, m_creature, player); break; + } + break; + case 38: SummonAssassin(); break; + case 39: DoScriptText(SAY_PROGRESS6, m_creature, player); break; case 43: - switch(rand()%3) - { - case 0: - DoSay(SAY_PROGRESS2, LANG_UNIVERSAL, player); break; - case 1: - DoSay(SAY_PROGRESS4, LANG_UNIVERSAL, player); break; - case 2: - DoSay(SAY_PROGRESS5, LANG_UNIVERSAL, player); break; - } - break; - case 44: - SummonAssassin(); break; - case 50: - DoSay(SAY_END, LANG_UNIVERSAL, player); - ((Player*)player)->GroupEventHappens(QUEST_ESCAPE_FROM_COILSKAR_CISTERN, m_creature); - break; + switch(rand()%3) + { + case 0: DoScriptText(SAY_PROGRESS2, m_creature, player); break; + case 1: DoScriptText(SAY_PROGRESS4, m_creature, player); break; + case 2: DoScriptText(SAY_PROGRESS5, m_creature, player); break; + } + break; + case 44: SummonAssassin(); break; + case 50: + DoScriptText(SAY_END, m_creature, player); + ((Player*)player)->GroupEventHappens(QUEST_ESCAPE_FROM_COILSKAR_CISTERN, m_creature); + Completed = true; + break; } } void SummonAssassin() { - Unit* player = Unit::GetUnit((*m_creature), PlayerGUID); + Unit* player = Unit::GetUnit((*m_creature), PlayerGUID); - Creature* CoilskarAssassin = m_creature->SummonCreature(NPC_COILSKAR_ASSASSIN, m_creature->GetPositionX(), m_creature->GetPositionY(), m_creature->GetPositionZ(), m_creature->GetOrientation(), TEMPSUMMON_DEAD_DESPAWN, 0); - if( CoilskarAssassin ) + Unit* CoilskarAssassin = m_creature->SummonCreature(NPC_COILSKAR_ASSASSIN, m_creature->GetPositionX(), m_creature->GetPositionY(), m_creature->GetPositionZ(), m_creature->GetOrientation(), TEMPSUMMON_DEAD_DESPAWN, 0); + if( CoilskarAssassin ) + { + switch(rand()%2) { - switch(rand()%2) - { - case 0: - CoilskarAssassin->Say(ASSASSIN_SAY_AGGRO1, LANG_UNIVERSAL, PlayerGUID); break; - case 1: - CoilskarAssassin->Say(ASSASSIN_SAY_AGGRO2, LANG_UNIVERSAL, PlayerGUID); break; - } - CoilskarAssassin->AI()->AttackStart(m_creature); - } - else error_log("SD2 ERROR: Coilskar Assassin couldn't be summmoned"); + case 0: DoScriptText(ASSASSIN_SAY_AGGRO1, CoilskarAssassin, player); break; + case 1: DoScriptText(ASSASSIN_SAY_AGGRO2, CoilskarAssassin, player); break; + } + ((Creature*)CoilskarAssassin)->AI()->AttackStart(m_creature); + } + else error_log("SD2 ERROR: Coilskar Assassin couldn't be summmoned"); } void JustDied(Unit* killer) - { - if (PlayerGUID) { - Unit* player = Unit::GetUnit((*m_creature), PlayerGUID); - if (player) - ((Player*)player)->FailQuest(QUEST_ESCAPE_FROM_COILSKAR_CISTERN); - } - } + if (PlayerGUID && !Completed) + { + Unit* player = Unit::GetUnit((*m_creature), PlayerGUID); + if (player) + ((Player*)player)->FailQuest(QUEST_ESCAPE_FROM_COILSKAR_CISTERN); + } + } void UpdateAI(const uint32 diff) { @@ -1333,20 +1102,8 @@ void AddSC_shadowmoon_valley() newscript = new Script; newscript->Name = "npc_overlord_morghor"; - newscript->GetAI = &GetAI_Overlord_Morghor; - newscript->pQuestAccept = &QuestAccept_Overlord_Morghor; - newscript->RegisterSelf(); - - newscript = new Script; - newscript->Name = "npc_lord_illidan_stormrage"; - newscript->GetAI = &GetAI_Lord_Illidan; - newscript->RegisterSelf(); - - newscript = new Script; - newscript->Name = "npc_yarzill_the_merc"; - newscript->GetAI = &GetAI_Yarzill_The_Merc; - newscript->pGossipHello = &GossipHello_npc_yarzill_fly; - newscript->pGossipSelect = &GossipSelect_npc_yarzill_fly; + newscript->GetAI = &GetAI_npc_overlord_morghorAI; + newscript->pQuestAccept = &QuestAccept_npc_overlord_morghor; newscript->RegisterSelf(); newscript = new Script; diff --git a/src/game/SpellEffects.cpp b/src/game/SpellEffects.cpp index 98cc82960c4..fa1b957c243 100644 --- a/src/game/SpellEffects.cpp +++ b/src/game/SpellEffects.cpp @@ -5882,6 +5882,10 @@ void Spell::EffectSendTaxi(uint32 i) case 34905: //Stealth Flight mountid = 6851; break; + case 41533: //Fly of the Netherwing + case 41540: //Fly of the Netherwing + mountid = 23468; + break; } ((Player*)unitTarget)->ActivateTaxiPathTo(nodes,mountid); |