*Converted text to database in shadowmoon_valley

*Rewrited npc_overlord_morghor script
*Added models for flight spells

--HG--
branch : trunk
This commit is contained in:
Blaymoira
2009-01-22 19:24:57 +01:00
parent de63f36302
commit c36c7111c5
4 changed files with 293 additions and 490 deletions
+41
View File
@@ -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');
+1
View File
@@ -146,4 +146,5 @@ INSTALL(FILES
933_world_scripts.sql 933_world_scripts.sql
935_world_scripts.sql 935_world_scripts.sql
940_world_scripts.sql 940_world_scripts.sql
945_world_scripts.sql
DESTINATION share/trinity/sql/updates) DESTINATION share/trinity/sql/updates)
@@ -30,6 +30,8 @@ npc_murkblood_overseer
npc_neltharaku npc_neltharaku
npc_karynaku npc_karynaku
npc_oronok_tornheart npc_oronok_tornheart
npc_overlord_morghor
npc_yarzill_the_merc
npc_earthmender_wilda npc_earthmender_wilda
EndContentData */ EndContentData */
@@ -44,7 +46,7 @@ EndContentData */
#define SPELL_JUST_EATEN 38502 #define SPELL_JUST_EATEN 38502
#define SPELL_NETHER_BREATH 38467 #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 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; IsEating = false;
DoCast(m_creature, SPELL_JUST_EATEN); DoCast(m_creature, SPELL_JUST_EATEN);
m_creature->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_NONE); m_creature->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_NONE);
DoSay(SAY_JUST_EATEN, LANG_DRACONIC, NULL); DoScriptText(SAY_JUST_EATEN, m_creature);
if(PlayerGUID) if(PlayerGUID)
{ {
Player* plr = ((Player*)Unit::GetUnit((*m_creature), 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 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_ONE 39990 // Red Lightning Bolt
#define SPELL_TWO 41528 // Mark of Stormrage #define SPELL_TWO 41528 // Mark of Stormrage
#define SPELL_THREE 40216 // Dragonaw Faction #define SPELL_THREE 40216 // Dragonaw Faction
#define SPELL_FOUR 42016 // Dragonaw Trasform #define SPELL_FOUR 42016 // Dragonaw Trasform
#define OVERLORD_SAY_1 "Come, $N. Lord Stormrage awaits." #define OVERLORD_SAY_1 -1000206
#define OVERLORD_SAY_2 "Lord Illidan will be here shortly." #define OVERLORD_SAY_2 -1000207
#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_3 -1000208
#define OVERLORD_SAY_4 "But... My lord, I do not understand. $N... He is the orc that has..." #define OVERLORD_SAY_4 -1000209
#define OVERLORD_SAY_5 "It will be done, my lord." #define OVERLORD_SAY_5 -1000210
#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_SAY_6 -1000211
#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_1 -1000212
#define OVERLORD_YELL_2 "All hail Lord Illidan!" #define OVERLORD_YELL_2 -1000213
#define LORD_ILLIDAN_SAY_1 "What is the meaning of this, Mor'ghor?" #define LORD_ILLIDAN_SAY_1 -1000214
#define LORD_ILLIDAN_SAY_2 "SILENCE!" #define LORD_ILLIDAN_SAY_2 -1000215
#define LORD_ILLIDAN_SAY_3 "Blathering idiot. You incomprehensibly incompetent buffoon..." #define LORD_ILLIDAN_SAY_3 -1000216
#define LORD_ILLIDAN_SAY_4 "THIS is your hero?" #define LORD_ILLIDAN_SAY_4 -1000217
#define LORD_ILLIDAN_SAY_5 "You have been deceived, imbecile." #define LORD_ILLIDAN_SAY_5 -1000218
#define LORD_ILLIDAN_SAY_6 "This... whole... operation... HAS BEEN COMPROMISED!" #define LORD_ILLIDAN_SAY_6 -1000219
#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 LORD_ILLIDAN_SAY_7 -1000220
#define YARZILL_THE_MERC_SAY "You will not harm the boy, Mor'ghor! Quickly, $N, climb on my back!" #define YARZILL_THE_MERC_SAY -1000221
#define GOSSIP_FLY "Lets Do! <MISSING TEXT>" struct TRINITY_DLL_DECL npc_overlord_morghorAI : public ScriptedAI
bool GossipHello_npc_yarzill_fly(Player *player, Creature *_Creature)
{ {
if (player->GetQuestStatus(QUEST_LORD_ILLIDAN_STORMRAGE) == QUEST_STATUS_COMPLETE) npc_overlord_morghorAI(Creature *c) : ScriptedAI(c) {Reset();}
{
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();}
void Reset(){}
void Aggro(Unit *who){}
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;
}
}
};
struct TRINITY_DLL_DECL Overlord_MorghorAI : public ScriptedAI
{
Overlord_MorghorAI(Creature *c) : ScriptedAI(c)
{
Lord = NULL;
Yarzill = NULL;
Reset();
}
Unit* m_player;
Unit* PlayerCheck;
uint32 SpeachTimer;
uint32 SpeachNum;
uint64 PlayerGUID; uint64 PlayerGUID;
uint64 YazillGUID; uint64 IllidanGUID;
bool DoingSpeach; uint32 ConversationTimer;
bool Failed; uint32 Step;
Creature* Lord; bool Event;
Creature* Yarzill;
void Reset() void Reset()
{ {
if (Lord)
{
Lord->SetUInt64Value(UNIT_FIELD_TARGET, 0);
Lord->SetVisibility(VISIBILITY_OFF);
Lord->setDeathState(JUST_DIED);
}
if (Yarzill)
{
Yarzill->SetUInt64Value(UNIT_FIELD_TARGET, 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; PlayerGUID = 0;
YazillGUID = 0; IllidanGUID = 0;
Lord = NULL;
Yarzill = NULL; ConversationTimer = 0;
DoingSpeach = false; Step = 0;
Failed = false;
SpeachNum = 0; Event = false;
SpeachTimer = 0;
} }
void BeginSpeach(Unit* target) void Aggro(Unit* who){}
void StartEvent()
{ {
m_creature->SetUInt32Value(UNIT_NPC_FLAGS, 0); m_creature->SetUInt32Value(UNIT_NPC_FLAGS, 0);
m_creature->SetUInt32Value(UNIT_FIELD_BYTES_1,0); m_creature->SetUInt32Value(UNIT_FIELD_BYTES_1,0);
DoSay(OVERLORD_SAY_1,LANG_UNIVERSAL,target); Unit* Illidan = m_creature->SummonCreature(C_ILLIDAN, -5107.83, 602.584, 85.2393, 4.92598, TEMPSUMMON_CORPSE_DESPAWN, 0);
m_player = target; IllidanGUID = Illidan->GetGUID();
PlayerCheck = NULL; Illidan->SetVisibility(VISIBILITY_OFF);
PlayerGUID = target->GetGUID(); if(PlayerGUID)
SpeachTimer = 4200; {
SpeachNum = 0; Unit* player = Unit::GetUnit((*m_creature), PlayerGUID);
DoingSpeach = true; DoScriptText(OVERLORD_SAY_1, m_creature, player);
}
ConversationTimer = 4200;
Step = 0;
Event = true;
} }
void Aggro(Unit *who){} uint32 NextStep(uint32 Step)
void MoveInLineOfSight(Unit *who)
{ {
if (!who) Unit* plr = Unit::GetUnit((*m_creature), PlayerGUID);
return;
if (DoingSpeach) Unit* Illi = Unit::GetUnit((*m_creature), IllidanGUID);
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) Illi->CastSpell(plr, SPELL_TWO, true);
{ plr->RemoveAurasDueToSpell(SPELL_THREE);
YazillGUID = who->GetGUID(); 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) void UpdateAI(const uint32 diff)
{ {
//Speach if(ConversationTimer < diff)
if (DoingSpeach)
{ {
if (SpeachTimer < diff) if(Event && IllidanGUID && PlayerGUID)
{ {
if (YazillGUID && !Yarzill) ConversationTimer = NextStep(++Step);
Yarzill = ((Creature*)Unit::GetUnit((*m_creature), YazillGUID)); }
}else ConversationTimer -= diff;
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;
}
} }
}; };
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) bool QuestAccept_npc_overlord_morghor(Player *player, Creature *_Creature, const Quest *_Quest )
{
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 )
{ {
if(_Quest->GetQuestId() == QUEST_LORD_ILLIDAN_STORMRAGE) 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 true;
} }
return false; return false;
@@ -1042,42 +837,44 @@ bool QuestAccept_Overlord_Morghor(Player *player, Creature *_Creature, const Que
# npc_earthmender_wilda # npc_earthmender_wilda
####*/ ####*/
#define SAY_START "I sense the tortured spirits, $N. They are this way, come quickly!" #define SAY_START -1000223
#define SAY_AGGRO1 "Watch out!" #define SAY_AGGRO1 -1000224
#define SAY_AGGRO2 "Naga attackers! Defend yourself!" #define SAY_AGGRO2 -1000225
#define ASSASSIN_SAY_AGGRO1 "Kill them all!" #define ASSASSIN_SAY_AGGRO1 -1000226
#define ASSASSIN_SAY_AGGRO2 "You will never essscape Coilssskarrr..." #define ASSASSIN_SAY_AGGRO2 -1000227
#define SAY_PROGRESS1 "Grant me protection $N, i must break trough their foul magic!" #define SAY_PROGRESS1 -1000228
#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_PROGRESS2 -1000229
#define SAY_PROGRESS3 "Now we must find the exit." #define SAY_PROGRESS3 -1000230
#define SAY_PROGRESS4 "Lady Vashj must answer for these atrocities. She must be brought to justice!" #define SAY_PROGRESS4 -1000231
#define SAY_PROGRESS5 "The tumultuous nature of the great waterways of Azeroth and Draenor are a direct result of tormented water spirits." #define SAY_PROGRESS5 -1000232
#define SAY_PROGRESS6 "It shouldn't be much further, $N. The exit is just up ahead." #define SAY_PROGRESS6 -1000233
#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 SAY_END -1000234
#define QUEST_ESCAPE_FROM_COILSKAR_CISTERN 10451
#define QUEST_ESCAPE_FROM_COILSKAR_CISTERN 10451 #define NPC_COILSKAR_ASSASSIN 21044
#define NPC_COILSKAR_ASSASSIN 21044
struct TRINITY_DLL_DECL npc_earthmender_wildaAI : public npc_escortAI struct TRINITY_DLL_DECL npc_earthmender_wildaAI : public npc_escortAI
{ {
npc_earthmender_wildaAI(Creature *c) : npc_escortAI(c) {Reset();} npc_earthmender_wildaAI(Creature *c) : npc_escortAI(c) {Reset();}
void Aggro(Unit *who) bool Completed;
{
Unit* player = Unit::GetUnit((*m_creature), PlayerGUID);
if(who->GetTypeId() == TYPEID_UNIT && who->GetEntry() == NPC_COILSKAR_ASSASSIN) void Aggro(Unit *who)
DoSay(SAY_AGGRO2, LANG_UNIVERSAL, player); {
else DoSay(SAY_AGGRO1, LANG_UNIVERSAL, player); Unit* player = Unit::GetUnit((*m_creature), PlayerGUID);
}
void Reset() if(who->GetTypeId() == TYPEID_UNIT && who->GetEntry() == NPC_COILSKAR_ASSASSIN)
{ DoScriptText(SAY_AGGRO2, m_creature, player);
m_creature->setFaction(1726); else DoScriptText(SAY_AGGRO1, m_creature, player);
} }
void WaypointReached(uint32 i) void Reset()
{
m_creature->setFaction(1726);
Completed = false;
}
void WaypointReached(uint32 i)
{ {
Unit* player = Unit::GetUnit((*m_creature), PlayerGUID); Unit* player = Unit::GetUnit((*m_creature), PlayerGUID);
@@ -1086,120 +883,92 @@ struct TRINITY_DLL_DECL npc_earthmender_wildaAI : public npc_escortAI
switch(i) switch(i)
{ {
case 0: case 0: DoScriptText(SAY_START, m_creature, player); break;
DoSay(SAY_START, LANG_UNIVERSAL, player); case 13: DoScriptText(SAY_PROGRESS1, m_creature, player);
m_creature->HandleEmoteCommand(EMOTE_ONESHOT_TALK); SummonAssassin();
break; break;
case 13: case 14: SummonAssassin(); break;
DoSay(SAY_PROGRESS1, LANG_UNIVERSAL, player); case 15: DoScriptText(SAY_PROGRESS3, m_creature, player); break;
SummonAssassin();
break;
case 14:
SummonAssassin(); break;
case 15:
DoSay(SAY_PROGRESS3, LANG_UNIVERSAL, player); break;
case 19: case 19:
switch(rand()%3) switch(rand()%3)
{ {
case 0: case 0: DoScriptText(SAY_PROGRESS2, m_creature, player); break;
DoSay(SAY_PROGRESS2, LANG_UNIVERSAL, player); break; case 1: DoScriptText(SAY_PROGRESS4, m_creature, player); break;
case 1: case 2: DoScriptText(SAY_PROGRESS5, m_creature, player); break;
DoSay(SAY_PROGRESS4, LANG_UNIVERSAL, player); break; }
case 2: break;
DoSay(SAY_PROGRESS5, LANG_UNIVERSAL, player); break; case 20: SummonAssassin(); break;
}
break;
case 20:
SummonAssassin(); break;
case 26: case 26:
switch(rand()%3) switch(rand()%3)
{ {
case 0: case 0: DoScriptText(SAY_PROGRESS2, m_creature, player); break;
DoSay(SAY_PROGRESS2, LANG_UNIVERSAL, player); break; case 1: DoScriptText(SAY_PROGRESS4, m_creature, player); break;
case 1: case 2: DoScriptText(SAY_PROGRESS5, m_creature, player); break;
DoSay(SAY_PROGRESS4, LANG_UNIVERSAL, player); break; }
case 2: break;
DoSay(SAY_PROGRESS5, LANG_UNIVERSAL, player); break; case 27: SummonAssassin(); break;
}
break;
case 27:
SummonAssassin(); break;
case 33: case 33:
switch(rand()%3) switch(rand()%3)
{ {
case 0: case 0: DoScriptText(SAY_PROGRESS2, m_creature, player); break;
DoSay(SAY_PROGRESS2, LANG_UNIVERSAL, player); break; case 1: DoScriptText(SAY_PROGRESS4, m_creature, player); break;
case 1: case 2: DoScriptText(SAY_PROGRESS5, m_creature, player); break;
DoSay(SAY_PROGRESS4, LANG_UNIVERSAL, player); break; }
case 2: break;
DoSay(SAY_PROGRESS5, LANG_UNIVERSAL, player); break; case 34: SummonAssassin(); break;
}
break;
case 34:
SummonAssassin(); break;
case 37: case 37:
switch(rand()%3) switch(rand()%3)
{ {
case 0: case 0: DoScriptText(SAY_PROGRESS2, m_creature, player); break;
DoSay(SAY_PROGRESS2, LANG_UNIVERSAL, player); break; case 1: DoScriptText(SAY_PROGRESS4, m_creature, player); break;
case 1: case 2: DoScriptText(SAY_PROGRESS5, m_creature, player); break;
DoSay(SAY_PROGRESS4, LANG_UNIVERSAL, player); break; }
case 2: break;
DoSay(SAY_PROGRESS5, LANG_UNIVERSAL, player); break; case 38: SummonAssassin(); break;
} case 39: DoScriptText(SAY_PROGRESS6, m_creature, player); break;
break;
case 38:
SummonAssassin(); break;
case 39:
DoSay(SAY_PROGRESS6, LANG_UNIVERSAL, player); break;
case 43: case 43:
switch(rand()%3) switch(rand()%3)
{ {
case 0: case 0: DoScriptText(SAY_PROGRESS2, m_creature, player); break;
DoSay(SAY_PROGRESS2, LANG_UNIVERSAL, player); break; case 1: DoScriptText(SAY_PROGRESS4, m_creature, player); break;
case 1: case 2: DoScriptText(SAY_PROGRESS5, m_creature, player); break;
DoSay(SAY_PROGRESS4, LANG_UNIVERSAL, player); break; }
case 2: break;
DoSay(SAY_PROGRESS5, LANG_UNIVERSAL, player); break; case 44: SummonAssassin(); break;
} case 50:
break; DoScriptText(SAY_END, m_creature, player);
case 44: ((Player*)player)->GroupEventHappens(QUEST_ESCAPE_FROM_COILSKAR_CISTERN, m_creature);
SummonAssassin(); break; Completed = true;
case 50: break;
DoSay(SAY_END, LANG_UNIVERSAL, player);
((Player*)player)->GroupEventHappens(QUEST_ESCAPE_FROM_COILSKAR_CISTERN, m_creature);
break;
} }
} }
void SummonAssassin() 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); 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 ) if( CoilskarAssassin )
{
switch(rand()%2)
{ {
switch(rand()%2) case 0: DoScriptText(ASSASSIN_SAY_AGGRO1, CoilskarAssassin, player); break;
{ case 1: DoScriptText(ASSASSIN_SAY_AGGRO2, CoilskarAssassin, player); break;
case 0: }
CoilskarAssassin->Say(ASSASSIN_SAY_AGGRO1, LANG_UNIVERSAL, PlayerGUID); break; ((Creature*)CoilskarAssassin)->AI()->AttackStart(m_creature);
case 1: }
CoilskarAssassin->Say(ASSASSIN_SAY_AGGRO2, LANG_UNIVERSAL, PlayerGUID); break; else error_log("SD2 ERROR: Coilskar Assassin couldn't be summmoned");
}
CoilskarAssassin->AI()->AttackStart(m_creature);
}
else error_log("SD2 ERROR: Coilskar Assassin couldn't be summmoned");
} }
void JustDied(Unit* killer) void JustDied(Unit* killer)
{
if (PlayerGUID)
{ {
Unit* player = Unit::GetUnit((*m_creature), PlayerGUID); if (PlayerGUID && !Completed)
if (player) {
((Player*)player)->FailQuest(QUEST_ESCAPE_FROM_COILSKAR_CISTERN); Unit* player = Unit::GetUnit((*m_creature), PlayerGUID);
} if (player)
} ((Player*)player)->FailQuest(QUEST_ESCAPE_FROM_COILSKAR_CISTERN);
}
}
void UpdateAI(const uint32 diff) void UpdateAI(const uint32 diff)
{ {
@@ -1333,20 +1102,8 @@ void AddSC_shadowmoon_valley()
newscript = new Script; newscript = new Script;
newscript->Name = "npc_overlord_morghor"; newscript->Name = "npc_overlord_morghor";
newscript->GetAI = &GetAI_Overlord_Morghor; newscript->GetAI = &GetAI_npc_overlord_morghorAI;
newscript->pQuestAccept = &QuestAccept_Overlord_Morghor; newscript->pQuestAccept = &QuestAccept_npc_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->RegisterSelf(); newscript->RegisterSelf();
newscript = new Script; newscript = new Script;
+4
View File
@@ -5882,6 +5882,10 @@ void Spell::EffectSendTaxi(uint32 i)
case 34905: //Stealth Flight case 34905: //Stealth Flight
mountid = 6851; mountid = 6851;
break; break;
case 41533: //Fly of the Netherwing
case 41540: //Fly of the Netherwing
mountid = 23468;
break;
} }
((Player*)unitTarget)->ActivateTaxiPathTo(nodes,mountid); ((Player*)unitTarget)->ActivateTaxiPathTo(nodes,mountid);