*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
@@ -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_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
#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 OVERLORD_YELL_1 -1000212
#define OVERLORD_YELL_2 -1000213
#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 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
#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>"
bool GossipHello_npc_yarzill_fly(Player *player, Creature *_Creature)
struct TRINITY_DLL_DECL npc_overlord_morghorAI : public ScriptedAI
{
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();}
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;
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);
}
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;
YazillGUID = 0;
Lord = NULL;
Yarzill = NULL;
DoingSpeach = false;
Failed = false;
SpeachNum = 0;
SpeachTimer = 0;
IllidanGUID = 0;
ConversationTimer = 0;
Step = 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);
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)
{
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 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
#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 WaypointReached(uint32 i)
void Reset()
{
m_creature->setFaction(1726);
Completed = false;
}
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;
+4
View File
@@ -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);