Convert outdoors northrend scripts to the new format.

--HG--
branch : trunk
This commit is contained in:
silinoron
2010-08-07 13:11:55 -07:00
parent c787f11de1
commit 9e1695a9c5
10 changed files with 4424 additions and 4317 deletions
File diff suppressed because it is too large Load Diff
@@ -42,68 +42,69 @@ enum NPCs
NPC_WARMAGE_ILSUDRIA = 32372
};
struct npc_warmage_violetstandAI : public Scripted_NoMovementAI
class npc_warmage_violetstand : public CreatureScript
{
npc_warmage_violetstandAI(Creature* pCreature) : Scripted_NoMovementAI(pCreature){}
public:
npc_warmage_violetstand() : CreatureScript("npc_warmage_violetstand") { }
uint64 uiTargetGUID;
void Reset()
struct npc_warmage_violetstandAI : public Scripted_NoMovementAI
{
uiTargetGUID = 0;
}
npc_warmage_violetstandAI(Creature* pCreature) : Scripted_NoMovementAI(pCreature){}
void UpdateAI(const uint32 /*uiDiff*/)
{
if (me->IsNonMeleeSpellCasted(false))
return;
uint64 uiTargetGUID;
if (me->GetEntry() == NPC_WARMAGE_SARINA)
void Reset()
{
if (!uiTargetGUID)
uiTargetGUID = 0;
}
void UpdateAI(const uint32 /*uiDiff*/)
{
if (me->IsNonMeleeSpellCasted(false))
return;
if (me->GetEntry() == NPC_WARMAGE_SARINA)
{
std::list<Creature*> orbList;
GetCreatureListWithEntryInGrid(orbList, me, NPC_TRANSITUS_SHIELD_DUMMY, 32.0f);
if (!orbList.empty())
if (!uiTargetGUID)
{
for (std::list<Creature*>::const_iterator itr = orbList.begin(); itr != orbList.end(); ++itr)
std::list<Creature*> orbList;
GetCreatureListWithEntryInGrid(orbList, me, NPC_TRANSITUS_SHIELD_DUMMY, 32.0f);
if (!orbList.empty())
{
if (Creature* pOrb = *itr)
for (std::list<Creature*>::const_iterator itr = orbList.begin(); itr != orbList.end(); ++itr)
{
if (pOrb->GetPositionY() < 1000)
if (Creature* pOrb = *itr)
{
uiTargetGUID = pOrb->GetGUID();
break;
if (pOrb->GetPositionY() < 1000)
{
uiTargetGUID = pOrb->GetGUID();
break;
}
}
}
}
}
}else
{
if (!uiTargetGUID)
if (Creature* pOrb = GetClosestCreatureWithEntry(me,NPC_TRANSITUS_SHIELD_DUMMY,32.0f))
uiTargetGUID = pOrb->GetGUID();
}
}else
{
if (!uiTargetGUID)
if (Creature* pOrb = GetClosestCreatureWithEntry(me,NPC_TRANSITUS_SHIELD_DUMMY,32.0f))
uiTargetGUID = pOrb->GetGUID();
if (Creature* pOrb = me->GetCreature(*me,uiTargetGUID))
DoCast(pOrb,SPELL_TRANSITUS_SHIELD_BEAM);
}
};
if (Creature* pOrb = me->GetCreature(*me,uiTargetGUID))
DoCast(pOrb,SPELL_TRANSITUS_SHIELD_BEAM);
CreatureAI *GetAI(Creature *creature) const
{
return new npc_warmage_violetstandAI(creature);
}
};
CreatureAI* GetAI_npc_warmage_violetstand(Creature* pCreature)
{
return new npc_warmage_violetstandAI(pCreature);
}
void AddSC_crystalsong_forest()
{
Script *newscript;
newscript = new Script;
newscript->Name = "npc_warmage_violetstand";
newscript->GetAI = &GetAI_npc_warmage_violetstand;
newscript->RegisterSelf();
new npc_warmage_violetstand;
}
+87 -85
View File
@@ -41,69 +41,75 @@ enum NPCs // All outdoor guards are within 35.0f of these NPCs
NPC_SWEETBERRY_H = 29715,
};
struct npc_mageguard_dalaranAI : public Scripted_NoMovementAI
class npc_mageguard_dalaran : public CreatureScript
{
npc_mageguard_dalaranAI(Creature* pCreature) : Scripted_NoMovementAI(pCreature)
public:
npc_mageguard_dalaran() : CreatureScript("npc_mageguard_dalaran") { }
struct npc_mageguard_dalaranAI : public Scripted_NoMovementAI
{
pCreature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
pCreature->ApplySpellImmune(0, IMMUNITY_DAMAGE, SPELL_SCHOOL_NORMAL, true);
pCreature->ApplySpellImmune(0, IMMUNITY_DAMAGE, SPELL_SCHOOL_MASK_MAGIC, true);
}
void Reset(){}
void EnterCombat(Unit* /*pWho*/){}
void AttackStart(Unit* /*pWho*/){}
void MoveInLineOfSight(Unit *pWho)
{
if (!pWho || !pWho->IsInWorld() || pWho->GetZoneId() != 4395)
return;
if (!me->IsWithinDist(pWho, 65.0f, false))
return;
Player *pPlayer = pWho->GetCharmerOrOwnerPlayerOrPlayerItself();
if (!pPlayer || pPlayer->isGameMaster() || pPlayer->IsBeingTeleported())
return;
switch (me->GetEntry())
npc_mageguard_dalaranAI(Creature* pCreature) : Scripted_NoMovementAI(pCreature)
{
case 29254:
if (pPlayer->GetTeam() == HORDE) // Horde unit found in Alliance area
if (GetClosestCreatureWithEntry(me, NPC_APPLEBOUGH_A, 32.0f))
{
if (me->isInBackInMap(pWho, 12.0f)) // In my line of sight, "outdoors", and behind me
DoCast(pWho, SPELL_TRESPASSER_A); // Teleport the Horde unit out
}
else // In my line of sight, and "indoors"
DoCast(pWho, SPELL_TRESPASSER_A); // Teleport the Horde unit out
break;
case 29255:
if (pPlayer->GetTeam() == ALLIANCE) // Alliance unit found in Horde area
if (GetClosestCreatureWithEntry(me, NPC_SWEETBERRY_H, 32.0f))
{
if (me->isInBackInMap(pWho, 12.0f)) // In my line of sight, "outdoors", and behind me
DoCast(pWho, SPELL_TRESPASSER_H); // Teleport the Alliance unit out
}
else // In my line of sight, and "indoors"
DoCast(pWho, SPELL_TRESPASSER_H); // Teleport the Alliance unit out
break;
pCreature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
pCreature->ApplySpellImmune(0, IMMUNITY_DAMAGE, SPELL_SCHOOL_NORMAL, true);
pCreature->ApplySpellImmune(0, IMMUNITY_DAMAGE, SPELL_SCHOOL_MASK_MAGIC, true);
}
me->SetOrientation(me->GetHomePosition().GetOrientation());
return;
void Reset(){}
void EnterCombat(Unit* /*pWho*/){}
void AttackStart(Unit* /*pWho*/){}
void MoveInLineOfSight(Unit *pWho)
{
if (!pWho || !pWho->IsInWorld() || pWho->GetZoneId() != 4395)
return;
if (!me->IsWithinDist(pWho, 65.0f, false))
return;
Player *pPlayer = pWho->GetCharmerOrOwnerPlayerOrPlayerItself();
if (!pPlayer || pPlayer->isGameMaster() || pPlayer->IsBeingTeleported())
return;
switch (me->GetEntry())
{
case 29254:
if (pPlayer->GetTeam() == HORDE) // Horde unit found in Alliance area
if (GetClosestCreatureWithEntry(me, NPC_APPLEBOUGH_A, 32.0f))
{
if (me->isInBackInMap(pWho, 12.0f)) // In my line of sight, "outdoors", and behind me
DoCast(pWho, SPELL_TRESPASSER_A); // Teleport the Horde unit out
}
else // In my line of sight, and "indoors"
DoCast(pWho, SPELL_TRESPASSER_A); // Teleport the Horde unit out
break;
case 29255:
if (pPlayer->GetTeam() == ALLIANCE) // Alliance unit found in Horde area
if (GetClosestCreatureWithEntry(me, NPC_SWEETBERRY_H, 32.0f))
{
if (me->isInBackInMap(pWho, 12.0f)) // In my line of sight, "outdoors", and behind me
DoCast(pWho, SPELL_TRESPASSER_H); // Teleport the Alliance unit out
}
else // In my line of sight, and "indoors"
DoCast(pWho, SPELL_TRESPASSER_H); // Teleport the Alliance unit out
break;
}
me->SetOrientation(me->GetHomePosition().GetOrientation());
return;
}
void UpdateAI(const uint32 /*diff*/){}
};
CreatureAI *GetAI(Creature *creature) const
{
return new npc_mageguard_dalaranAI(creature);
}
void UpdateAI(const uint32 /*diff*/){}
};
CreatureAI* GetAI_npc_mageguard_dalaran(Creature* pCreature)
{
return new npc_mageguard_dalaranAI(pCreature);
}
/*######
## npc_hira_snowdawn
######*/
@@ -115,44 +121,40 @@ enum eHiraSnowdawn
#define GOSSIP_TEXT_TRAIN_HIRA "I seek training to ride a steed."
bool GossipHello_npc_hira_snowdawn(Player* pPlayer, Creature* pCreature)
class npc_hira_snowdawn : public CreatureScript
{
if (!pCreature->isVendor() || !pCreature->isTrainer())
return false;
public:
npc_hira_snowdawn() : CreatureScript("npc_hira_snowdawn") { }
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_VENDOR, GOSSIP_TEXT_TRAIN_HIRA, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_TRAIN);
bool OnGossipHello(Player* pPlayer, Creature* pCreature)
{
if (!pCreature->isVendor() || !pCreature->isTrainer())
return false;
if (pPlayer->getLevel() >= 80 && pPlayer->HasSpell(SPELL_COLD_WEATHER_FLYING))
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_VENDOR, GOSSIP_TEXT_BROWSE_GOODS, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_TRADE);
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_VENDOR, GOSSIP_TEXT_TRAIN_HIRA, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_TRAIN);
pPlayer->SEND_GOSSIP_MENU(pPlayer->GetGossipTextId(pCreature), pCreature->GetGUID());
if (pPlayer->getLevel() >= 80 && pPlayer->HasSpell(SPELL_COLD_WEATHER_FLYING))
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_VENDOR, GOSSIP_TEXT_BROWSE_GOODS, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_TRADE);
return true;
}
pPlayer->SEND_GOSSIP_MENU(pPlayer->GetGossipTextId(pCreature), pCreature->GetGUID());
bool GossipSelect_npc_hira_snowdawn(Player* pPlayer, Creature* pCreature, uint32 /*uiSender*/, uint32 uiAction)
{
if (uiAction == GOSSIP_ACTION_TRAIN)
pPlayer->SEND_TRAINERLIST(pCreature->GetGUID());
return true;
}
if (uiAction == GOSSIP_ACTION_TRADE)
pPlayer->SEND_VENDORLIST(pCreature->GetGUID());
bool OnGossipSelect(Player* pPlayer, Creature* pCreature, uint32 /*uiSender*/, uint32 uiAction)
{
if (uiAction == GOSSIP_ACTION_TRAIN)
pPlayer->SEND_TRAINERLIST(pCreature->GetGUID());
return true;
}
if (uiAction == GOSSIP_ACTION_TRADE)
pPlayer->SEND_VENDORLIST(pCreature->GetGUID());
return true;
}
};
void AddSC_dalaran()
{
Script *newscript;
newscript = new Script;
newscript->Name = "npc_mageguard_dalaran";
newscript->GetAI = &GetAI_npc_mageguard_dalaran;
newscript->RegisterSelf();
newscript = new Script;
newscript->Name = "npc_hira_snowdawn";
newscript->pGossipHello = &GossipHello_npc_hira_snowdawn;
newscript->pGossipSelect = &GossipSelect_npc_hira_snowdawn;
newscript->RegisterSelf();
new npc_mageguard_dalaran;
new npc_hira_snowdawn;
}
+173 -173
View File
@@ -39,28 +39,34 @@ enum eEnums
#define GOSSIP_ITEM_WHAT_HAPPENED "Alexstrasza, can you show me what happened here?"
bool GossipHello_npc_alexstrasza_wr_gate(Player* pPlayer, Creature* pCreature)
class npc_alexstrasza_wr_gate : public CreatureScript
{
if (pCreature->isQuestGiver())
pPlayer->PrepareQuestMenu(pCreature->GetGUID());
public:
npc_alexstrasza_wr_gate() : CreatureScript("npc_alexstrasza_wr_gate") { }
if (pPlayer->GetQuestRewardStatus(QUEST_RETURN_TO_AG_A) || pPlayer->GetQuestRewardStatus(QUEST_RETURN_TO_AG_H))
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM_WHAT_HAPPENED, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1);
pPlayer->SEND_GOSSIP_MENU(pPlayer->GetGossipTextId(pCreature), pCreature->GetGUID());
return true;
}
bool GossipSelect_npc_alexstrasza_wr_gate(Player* pPlayer, Creature* /*pCreature*/, uint32 /*uiSender*/, uint32 uiAction)
{
if (uiAction == GOSSIP_ACTION_INFO_DEF+1)
bool OnGossipHello(Player* pPlayer, Creature* pCreature)
{
pPlayer->CLOSE_GOSSIP_MENU();
pPlayer->SendMovieStart(MOVIE_ID_GATES);
if (pCreature->isQuestGiver())
pPlayer->PrepareQuestMenu(pCreature->GetGUID());
if (pPlayer->GetQuestRewardStatus(QUEST_RETURN_TO_AG_A) || pPlayer->GetQuestRewardStatus(QUEST_RETURN_TO_AG_H))
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM_WHAT_HAPPENED, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1);
pPlayer->SEND_GOSSIP_MENU(pPlayer->GetGossipTextId(pCreature), pCreature->GetGUID());
return true;
}
return true;
}
bool OnGossipSelect(Player* pPlayer, Creature* /*pCreature*/, uint32 /*uiSender*/, uint32 uiAction)
{
if (uiAction == GOSSIP_ACTION_INFO_DEF+1)
{
pPlayer->CLOSE_GOSSIP_MENU();
pPlayer->SendMovieStart(MOVIE_ID_GATES);
}
return true;
}
};
/*######
## npc_inquisitor_hallard. Quest 12321
@@ -104,171 +110,165 @@ enum eInquisitor
#define QUEST_A_RIGHTEOUS_SERMON 12321
struct npc_inquisitor_hallardAI : public npc_escortAI
{
npc_inquisitor_hallardAI(Creature* pCreature) : npc_escortAI(pCreature) { }
class npc_inquisitor_hallard : public CreatureScript
{
public:
npc_inquisitor_hallard() : CreatureScript("npc_inquisitor_hallard") { }
bool Completed;
struct npc_inquisitor_hallardAI : public npc_escortAI
{
npc_inquisitor_hallardAI(Creature* pCreature) : npc_escortAI(pCreature) { }
void WaypointReached(uint32 i)
{
Player* pPlayer = GetPlayerForEscort();
if (!pPlayer)
return;
Creature* Godfrey = me->FindNearestCreature(NPC_GODFREY, 50, true);
if (!Godfrey)
return;
switch (i)
bool Completed;
void WaypointReached(uint32 i)
{
case 1:
DoScriptText(SAY_WP_1, me, Godfrey);
me->SetUInt64Value(UNIT_FIELD_TARGET, Godfrey->GetGUID());
me->HandleEmoteCommand(5);
me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_QUESTGIVER);
me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
break;
case 2:
Godfrey->HandleEmoteCommand(434);
DoScriptText(SAY_WP_2, me, Godfrey);
me->HandleEmoteCommand(15);
break;
case 3:
DoScriptText(SAY_WP_3, me, Godfrey);
me->HandleEmoteCommand(1);
break;
case 4:
DoScriptText(SAY_WP_4, Godfrey);
break;
case 5:
DoScriptText(SAY_WP_5, Godfrey);
break;
case 6:
DoScriptText(SAY_WP_6, Godfrey);
break;
case 7:
DoScriptText(SAY_WP_7, me, Godfrey);
me->HandleEmoteCommand(1);
break;
case 8:
DoScriptText(SAY_WP_8, me, Godfrey);
me->HandleEmoteCommand(16);
break;
case 9:
DoScriptText(SAY_WP_9, me, Godfrey);
me->HandleEmoteCommand(5);
break;
case 10:
DoScriptText(SAY_WP_10, me, Godfrey);
DoCast(Godfrey, SPELL_HOLY_FIRE);
break;
case 11:
Godfrey->HandleEmoteCommand(434);
DoScriptText(SAY_WP_11, Godfrey);
break;
case 12:
DoScriptText(SAY_WP_12, me, Godfrey);
DoCast(Godfrey, SPELL_HOLY_FIRE);
break;
case 13:
DoScriptText(SAY_WP_13, me, Godfrey);
DoCast(Godfrey, SPELL_HOLY_FIRE);
break;
case 14:
Godfrey->HandleEmoteCommand(434);
DoScriptText(SAY_WP_14, Godfrey);
break;
case 15:
DoScriptText(SAY_WP_15, me, Godfrey);
DoCast(Godfrey, SPELL_HOLY_FIRE);
break;
case 16:
DoScriptText(SAY_WP_16, me, Godfrey);
break;
case 17:
DoScriptText(SAY_WP_17, me, Godfrey);
break;
case 18:
DoScriptText(SAY_WP_18, Godfrey);
break;
case 19:
DoScriptText(SAY_WP_19, me, Godfrey);
break;
case 20:
DoScriptText(SAY_WP_20, Godfrey);
break;
case 21:
DoScriptText(SAY_WP_21, Godfrey);
break;
case 22:
DoScriptText(SAY_WP_22, me, Godfrey);
break;
case 23:
DoScriptText(SAY_WP_23, Godfrey);
break;
case 24:
DoScriptText(SAY_WP_24, Godfrey);
break;
case 25:
DoScriptText(SAY_WP_25, me, Godfrey);
break;
case 26:
DoScriptText(SAY_WP_26, me);
me->SetUInt64Value(UNIT_FIELD_TARGET, pPlayer->GetGUID());
break;
case 27:
DoScriptText(SAY_WP_27, me, Godfrey);
me->SetUInt64Value(UNIT_FIELD_TARGET, Godfrey->GetGUID());
Completed = true;
if (pPlayer)
pPlayer->GroupEventHappens(QUEST_A_RIGHTEOUS_SERMON, me);
break;
Player* pPlayer = GetPlayerForEscort();
if (!pPlayer)
return;
Creature* Godfrey = me->FindNearestCreature(NPC_GODFREY, 50, true);
if (!Godfrey)
return;
switch (i)
{
case 1:
DoScriptText(SAY_WP_1, me, Godfrey);
me->SetUInt64Value(UNIT_FIELD_TARGET, Godfrey->GetGUID());
me->HandleEmoteCommand(5);
me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_QUESTGIVER);
me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
break;
case 2:
Godfrey->HandleEmoteCommand(434);
DoScriptText(SAY_WP_2, me, Godfrey);
me->HandleEmoteCommand(15);
break;
case 3:
DoScriptText(SAY_WP_3, me, Godfrey);
me->HandleEmoteCommand(1);
break;
case 4:
DoScriptText(SAY_WP_4, Godfrey);
break;
case 5:
DoScriptText(SAY_WP_5, Godfrey);
break;
case 6:
DoScriptText(SAY_WP_6, Godfrey);
break;
case 7:
DoScriptText(SAY_WP_7, me, Godfrey);
me->HandleEmoteCommand(1);
break;
case 8:
DoScriptText(SAY_WP_8, me, Godfrey);
me->HandleEmoteCommand(16);
break;
case 9:
DoScriptText(SAY_WP_9, me, Godfrey);
me->HandleEmoteCommand(5);
break;
case 10:
DoScriptText(SAY_WP_10, me, Godfrey);
DoCast(Godfrey, SPELL_HOLY_FIRE);
break;
case 11:
Godfrey->HandleEmoteCommand(434);
DoScriptText(SAY_WP_11, Godfrey);
break;
case 12:
DoScriptText(SAY_WP_12, me, Godfrey);
DoCast(Godfrey, SPELL_HOLY_FIRE);
break;
case 13:
DoScriptText(SAY_WP_13, me, Godfrey);
DoCast(Godfrey, SPELL_HOLY_FIRE);
break;
case 14:
Godfrey->HandleEmoteCommand(434);
DoScriptText(SAY_WP_14, Godfrey);
break;
case 15:
DoScriptText(SAY_WP_15, me, Godfrey);
DoCast(Godfrey, SPELL_HOLY_FIRE);
break;
case 16:
DoScriptText(SAY_WP_16, me, Godfrey);
break;
case 17:
DoScriptText(SAY_WP_17, me, Godfrey);
break;
case 18:
DoScriptText(SAY_WP_18, Godfrey);
break;
case 19:
DoScriptText(SAY_WP_19, me, Godfrey);
break;
case 20:
DoScriptText(SAY_WP_20, Godfrey);
break;
case 21:
DoScriptText(SAY_WP_21, Godfrey);
break;
case 22:
DoScriptText(SAY_WP_22, me, Godfrey);
break;
case 23:
DoScriptText(SAY_WP_23, Godfrey);
break;
case 24:
DoScriptText(SAY_WP_24, Godfrey);
break;
case 25:
DoScriptText(SAY_WP_25, me, Godfrey);
break;
case 26:
DoScriptText(SAY_WP_26, me);
me->SetUInt64Value(UNIT_FIELD_TARGET, pPlayer->GetGUID());
break;
case 27:
DoScriptText(SAY_WP_27, me, Godfrey);
me->SetUInt64Value(UNIT_FIELD_TARGET, Godfrey->GetGUID());
Completed = true;
if (pPlayer)
pPlayer->GroupEventHappens(QUEST_A_RIGHTEOUS_SERMON, me);
break;
}
}
void Reset()
{
Completed = false;
}
void UpdateAI(const uint32 diff)
{
npc_escortAI::UpdateAI(diff);
}
};
bool OnQuestAccept(Player* pPlayer, Creature* pCreature, Quest const* quest)
{
if (quest->GetQuestId() == QUEST_A_RIGHTEOUS_SERMON)
{
DoScriptText(SAY_WP_0, pCreature, pPlayer);
if (npc_escortAI* pEscortAI = CAST_AI(npc_inquisitor_hallardAI, pCreature->AI()))
{
pEscortAI->Start(true, false, pPlayer->GetGUID(), 0, true);
pCreature->GetMotionMaster()->MovePoint(0, 3801.543, -679.350, 213.75);
}
}
return true;
}
void Reset()
{
Completed = false;
}
void UpdateAI(const uint32 diff)
{
npc_escortAI::UpdateAI(diff);
CreatureAI *GetAI(Creature *creature) const
{
return new npc_inquisitor_hallardAI(creature);
}
};
bool QuestAccept_npc_inquisitor_hallard(Player* pPlayer, Creature* pCreature, Quest const* quest)
{
if (quest->GetQuestId() == QUEST_A_RIGHTEOUS_SERMON)
{
DoScriptText(SAY_WP_0, pCreature, pPlayer);
if (npc_escortAI* pEscortAI = CAST_AI(npc_inquisitor_hallardAI, pCreature->AI()))
{
pEscortAI->Start(true, false, pPlayer->GetGUID(), 0, true);
pCreature->GetMotionMaster()->MovePoint(0, 3801.543, -679.350, 213.75);
}
}
return true;
}
CreatureAI* GetAI_npc_inquisitor_hallard(Creature* pCreature)
{
return new npc_inquisitor_hallardAI(pCreature);
}
void AddSC_dragonblight()
{
Script *newscript;
newscript = new Script;
newscript->Name = "npc_alexstrasza_wr_gate";
newscript->pGossipHello = &GossipHello_npc_alexstrasza_wr_gate;
newscript->pGossipSelect = &GossipSelect_npc_alexstrasza_wr_gate;
newscript->RegisterSelf();
newscript = new Script;
newscript->Name = "npc_inquisitor_hallard";
newscript->GetAI = &GetAI_npc_inquisitor_hallard;
newscript->pQuestAccept = &QuestAccept_npc_inquisitor_hallard;
newscript->RegisterSelf();
new npc_alexstrasza_wr_gate;
new npc_inquisitor_hallard;
}
+429 -419
View File
@@ -56,67 +56,73 @@ enum eEnums
QUEST_THE_BEAR_GODS_OFFSPRING = 12231
};
bool GossipHello_npc_orsonn_and_kodian(Player* pPlayer, Creature* pCreature)
class npc_orsonn_and_kodian : public CreatureScript
{
if (pCreature->isQuestGiver())
pPlayer->PrepareQuestMenu(pCreature->GetGUID());
public:
npc_orsonn_and_kodian() : CreatureScript("npc_orsonn_and_kodian") { }
if (pPlayer->GetQuestStatus(QUEST_CHILDREN_OF_URSOC) == QUEST_STATUS_INCOMPLETE || pPlayer->GetQuestStatus(QUEST_THE_BEAR_GODS_OFFSPRING) == QUEST_STATUS_INCOMPLETE)
bool OnGossipHello(Player* pPlayer, Creature* pCreature)
{
switch(pCreature->GetEntry())
if (pCreature->isQuestGiver())
pPlayer->PrepareQuestMenu(pCreature->GetGUID());
if (pPlayer->GetQuestStatus(QUEST_CHILDREN_OF_URSOC) == QUEST_STATUS_INCOMPLETE || pPlayer->GetQuestStatus(QUEST_THE_BEAR_GODS_OFFSPRING) == QUEST_STATUS_INCOMPLETE)
{
case NPC_ORSONN:
if (!pPlayer->GetReqKillOrCastCurrentCount(QUEST_CHILDREN_OF_URSOC, NPC_ORSONN_CREDIT) || !pPlayer->GetReqKillOrCastCurrentCount(QUEST_THE_BEAR_GODS_OFFSPRING, NPC_ORSONN_CREDIT))
{
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1);
pPlayer->SEND_GOSSIP_MENU(GOSSIP_TEXTID_ORSONN1, pCreature->GetGUID());
return true;
}
switch(pCreature->GetEntry())
{
case NPC_ORSONN:
if (!pPlayer->GetReqKillOrCastCurrentCount(QUEST_CHILDREN_OF_URSOC, NPC_ORSONN_CREDIT) || !pPlayer->GetReqKillOrCastCurrentCount(QUEST_THE_BEAR_GODS_OFFSPRING, NPC_ORSONN_CREDIT))
{
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1);
pPlayer->SEND_GOSSIP_MENU(GOSSIP_TEXTID_ORSONN1, pCreature->GetGUID());
return true;
}
break;
case NPC_KODIAN:
if (!pPlayer->GetReqKillOrCastCurrentCount(QUEST_CHILDREN_OF_URSOC, NPC_KODIAN_CREDIT) || !pPlayer->GetReqKillOrCastCurrentCount(QUEST_THE_BEAR_GODS_OFFSPRING, NPC_KODIAN_CREDIT))
{
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM4, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+4);
pPlayer->SEND_GOSSIP_MENU(GOSSIP_TEXTID_KODIAN1, pCreature->GetGUID());
return true;
}
break;
}
}
pPlayer->SEND_GOSSIP_MENU(pPlayer->GetGossipTextId(pCreature), pCreature->GetGUID());
return true;
}
bool OnGossipSelect(Player* pPlayer, Creature* pCreature, uint32 /*uiSender*/, uint32 uiAction)
{
switch(uiAction)
{
case GOSSIP_ACTION_INFO_DEF+1:
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM2, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2);
pPlayer->SEND_GOSSIP_MENU(GOSSIP_TEXTID_ORSONN2, pCreature->GetGUID());
break;
case NPC_KODIAN:
if (!pPlayer->GetReqKillOrCastCurrentCount(QUEST_CHILDREN_OF_URSOC, NPC_KODIAN_CREDIT) || !pPlayer->GetReqKillOrCastCurrentCount(QUEST_THE_BEAR_GODS_OFFSPRING, NPC_KODIAN_CREDIT))
{
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM4, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+4);
pPlayer->SEND_GOSSIP_MENU(GOSSIP_TEXTID_KODIAN1, pCreature->GetGUID());
return true;
}
case GOSSIP_ACTION_INFO_DEF+2:
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM3, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3);
pPlayer->SEND_GOSSIP_MENU(GOSSIP_TEXTID_ORSONN3, pCreature->GetGUID());
break;
case GOSSIP_ACTION_INFO_DEF+3:
pPlayer->CLOSE_GOSSIP_MENU();
pPlayer->TalkedToCreature(NPC_ORSONN_CREDIT, pCreature->GetGUID());
break;
case GOSSIP_ACTION_INFO_DEF+4:
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM5, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 5);
pPlayer->SEND_GOSSIP_MENU(GOSSIP_TEXTID_KODIAN2, pCreature->GetGUID());
break;
case GOSSIP_ACTION_INFO_DEF+5:
pPlayer->CLOSE_GOSSIP_MENU();
pPlayer->TalkedToCreature(NPC_KODIAN_CREDIT, pCreature->GetGUID());
break;
}
return true;
}
pPlayer->SEND_GOSSIP_MENU(pPlayer->GetGossipTextId(pCreature), pCreature->GetGUID());
return true;
}
bool GossipSelect_npc_orsonn_and_kodian(Player* pPlayer, Creature* pCreature, uint32 /*uiSender*/, uint32 uiAction)
{
switch(uiAction)
{
case GOSSIP_ACTION_INFO_DEF+1:
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM2, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2);
pPlayer->SEND_GOSSIP_MENU(GOSSIP_TEXTID_ORSONN2, pCreature->GetGUID());
break;
case GOSSIP_ACTION_INFO_DEF+2:
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM3, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3);
pPlayer->SEND_GOSSIP_MENU(GOSSIP_TEXTID_ORSONN3, pCreature->GetGUID());
break;
case GOSSIP_ACTION_INFO_DEF+3:
pPlayer->CLOSE_GOSSIP_MENU();
pPlayer->TalkedToCreature(NPC_ORSONN_CREDIT, pCreature->GetGUID());
break;
case GOSSIP_ACTION_INFO_DEF+4:
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM5, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 5);
pPlayer->SEND_GOSSIP_MENU(GOSSIP_TEXTID_KODIAN2, pCreature->GetGUID());
break;
case GOSSIP_ACTION_INFO_DEF+5:
pPlayer->CLOSE_GOSSIP_MENU();
pPlayer->TalkedToCreature(NPC_KODIAN_CREDIT, pCreature->GetGUID());
break;
}
return true;
}
};
/*######
## Quest 12027: Mr. Floppy's Perilous Adventure
@@ -149,221 +155,232 @@ enum eFloppy
};
//emily
struct npc_emilyAI : public npc_escortAI
class npc_emily : public CreatureScript
{
npc_emilyAI(Creature* pCreature) : npc_escortAI(pCreature) { }
public:
npc_emily() : CreatureScript("npc_emily") { }
uint32 m_uiChatTimer;
uint64 RWORGGUID;
uint64 MrfloppyGUID;
bool Completed;
void JustSummoned(Creature* pSummoned)
struct npc_emilyAI : public npc_escortAI
{
if (Creature* Mrfloppy = GetClosestCreatureWithEntry(me, NPC_MRFLOPPY, 50.0f))
pSummoned->AI()->AttackStart(Mrfloppy);
else
pSummoned->AI()->AttackStart(me->getVictim());
}
npc_emilyAI(Creature* pCreature) : npc_escortAI(pCreature) { }
void WaypointReached(uint32 i)
{
Player* pPlayer = GetPlayerForEscort();
if (!pPlayer)
return;
switch (i)
uint32 m_uiChatTimer;
uint64 RWORGGUID;
uint64 MrfloppyGUID;
bool Completed;
void JustSummoned(Creature* pSummoned)
{
case 9:
if (Creature *Mrfloppy = GetClosestCreatureWithEntry(me, NPC_MRFLOPPY, 100.0f))
MrfloppyGUID = Mrfloppy->GetGUID();
break;
case 10:
if (Creature *Mrfloppy = Unit::GetCreature(*me, MrfloppyGUID))
{
DoScriptText(SAY_WORGHAGGRO1, me);
me->SummonCreature(NPC_HUNGRY_WORG,me->GetPositionX()+5,me->GetPositionY()+2,me->GetPositionZ()+1,3.229f,TEMPSUMMON_TIMED_OR_DEAD_DESPAWN,120000);
}
break;
case 11:
if (Creature *Mrfloppy = Unit::GetCreature(*me, MrfloppyGUID))
Mrfloppy->GetMotionMaster()->MoveFollow(me, PET_FOLLOW_DIST, PET_FOLLOW_ANGLE);
break;
case 17:
if (Creature *Mrfloppy = Unit::GetCreature(*me, MrfloppyGUID))
Mrfloppy->GetMotionMaster()->MovePoint(0, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ());
DoScriptText(SAY_WORGRAGGRO3, me);
if (Creature *RWORG = me->SummonCreature(NPC_RAVENOUS_WORG,me->GetPositionX()+10,me->GetPositionY()+8,me->GetPositionZ()+2,3.229f,TEMPSUMMON_TIMED_OR_DEAD_DESPAWN,120000))
{
RWORG->setFaction(35);
RWORGGUID = RWORG->GetGUID();
}
break;
case 18:
if (Creature *Mrfloppy = Unit::GetCreature(*me, MrfloppyGUID))
{
if (Creature *RWORG = Unit::GetCreature(*me, RWORGGUID))
RWORG->GetMotionMaster()->MovePoint(0, Mrfloppy->GetPositionX(), Mrfloppy->GetPositionY(), Mrfloppy->GetPositionZ());
DoCast(Mrfloppy,SPELL_MRFLOPPY);
}
break;
case 19:
if (Creature *Mrfloppy = Unit::GetCreature(*me, MrfloppyGUID))
{
if (Mrfloppy->HasAura(SPELL_MRFLOPPY, 0))
{
if (Creature *RWORG = Unit::GetCreature(*me, RWORGGUID))
Mrfloppy->EnterVehicle(RWORG);
}
}
break;
case 20:
if (Creature *RWORG = Unit::GetCreature(*me, RWORGGUID))
RWORG->HandleEmoteCommand(34);
break;
case 21:
if (Creature *Mrfloppy = Unit::GetCreature(*me, MrfloppyGUID))
{
if (Creature *RWORG = Unit::GetCreature(*me, RWORGGUID))
{
RWORG->Kill(Mrfloppy);
Mrfloppy->ExitVehicle();
RWORG->setFaction(14);
RWORG->GetMotionMaster()->MovePoint(0, RWORG->GetPositionX()+10,RWORG->GetPositionY()+80,RWORG->GetPositionZ());
DoScriptText(SAY_VICTORY2, me);
}
}
break;
case 22:
if (Creature *Mrfloppy = Unit::GetCreature(*me, MrfloppyGUID))
{
if (Mrfloppy->isDead())
{
if (Creature *RWORG = Unit::GetCreature(*me, RWORGGUID))
RWORG->DisappearAndDie();
me->GetMotionMaster()->MovePoint(0, Mrfloppy->GetPositionX(), Mrfloppy->GetPositionY(), Mrfloppy->GetPositionZ());
Mrfloppy->setDeathState(ALIVE);
Mrfloppy->GetMotionMaster()->MoveFollow(me, PET_FOLLOW_DIST, PET_FOLLOW_ANGLE);
DoScriptText(SAY_VICTORY3, me);
}
}
break;
case 24:
if (pPlayer)
{
Completed = true;
pPlayer->GroupEventHappens(QUEST_PERILOUS_ADVENTURE, me);
DoScriptText(SAY_QUEST_COMPLETE, me, pPlayer);
}
me->RemoveUnitMovementFlag(MOVEMENTFLAG_WALKING);
break;
case 25:
DoScriptText(SAY_VICTORY4, me);
break;
case 27:
me->DisappearAndDie();
if (Creature *Mrfloppy = Unit::GetCreature(*me, MrfloppyGUID))
Mrfloppy->DisappearAndDie();
break;
}
}
void EnterCombat(Unit* /*Who*/)
{
DoScriptText(SAY_RANDOMAGGRO, me);
}
void Reset()
{
m_uiChatTimer = 4000;
MrfloppyGUID = 0;
RWORGGUID = 0;
}
void UpdateAI(const uint32 uiDiff)
{
npc_escortAI::UpdateAI(uiDiff);
if (HasEscortState(STATE_ESCORT_ESCORTING))
{
if (m_uiChatTimer <= uiDiff)
{
m_uiChatTimer = 12000;
}
if (Creature* Mrfloppy = GetClosestCreatureWithEntry(me, NPC_MRFLOPPY, 50.0f))
pSummoned->AI()->AttackStart(Mrfloppy);
else
m_uiChatTimer -= uiDiff;
pSummoned->AI()->AttackStart(me->getVictim());
}
void WaypointReached(uint32 i)
{
Player* pPlayer = GetPlayerForEscort();
if (!pPlayer)
return;
switch (i)
{
case 9:
if (Creature *Mrfloppy = GetClosestCreatureWithEntry(me, NPC_MRFLOPPY, 100.0f))
MrfloppyGUID = Mrfloppy->GetGUID();
break;
case 10:
if (Creature *Mrfloppy = Unit::GetCreature(*me, MrfloppyGUID))
{
DoScriptText(SAY_WORGHAGGRO1, me);
me->SummonCreature(NPC_HUNGRY_WORG,me->GetPositionX()+5,me->GetPositionY()+2,me->GetPositionZ()+1,3.229f,TEMPSUMMON_TIMED_OR_DEAD_DESPAWN,120000);
}
break;
case 11:
if (Creature *Mrfloppy = Unit::GetCreature(*me, MrfloppyGUID))
Mrfloppy->GetMotionMaster()->MoveFollow(me, PET_FOLLOW_DIST, PET_FOLLOW_ANGLE);
break;
case 17:
if (Creature *Mrfloppy = Unit::GetCreature(*me, MrfloppyGUID))
Mrfloppy->GetMotionMaster()->MovePoint(0, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ());
DoScriptText(SAY_WORGRAGGRO3, me);
if (Creature *RWORG = me->SummonCreature(NPC_RAVENOUS_WORG,me->GetPositionX()+10,me->GetPositionY()+8,me->GetPositionZ()+2,3.229f,TEMPSUMMON_TIMED_OR_DEAD_DESPAWN,120000))
{
RWORG->setFaction(35);
RWORGGUID = RWORG->GetGUID();
}
break;
case 18:
if (Creature *Mrfloppy = Unit::GetCreature(*me, MrfloppyGUID))
{
if (Creature *RWORG = Unit::GetCreature(*me, RWORGGUID))
RWORG->GetMotionMaster()->MovePoint(0, Mrfloppy->GetPositionX(), Mrfloppy->GetPositionY(), Mrfloppy->GetPositionZ());
DoCast(Mrfloppy,SPELL_MRFLOPPY);
}
break;
case 19:
if (Creature *Mrfloppy = Unit::GetCreature(*me, MrfloppyGUID))
{
if (Mrfloppy->HasAura(SPELL_MRFLOPPY, 0))
{
if (Creature *RWORG = Unit::GetCreature(*me, RWORGGUID))
Mrfloppy->EnterVehicle(RWORG);
}
}
break;
case 20:
if (Creature *RWORG = Unit::GetCreature(*me, RWORGGUID))
RWORG->HandleEmoteCommand(34);
break;
case 21:
if (Creature *Mrfloppy = Unit::GetCreature(*me, MrfloppyGUID))
{
if (Creature *RWORG = Unit::GetCreature(*me, RWORGGUID))
{
RWORG->Kill(Mrfloppy);
Mrfloppy->ExitVehicle();
RWORG->setFaction(14);
RWORG->GetMotionMaster()->MovePoint(0, RWORG->GetPositionX()+10,RWORG->GetPositionY()+80,RWORG->GetPositionZ());
DoScriptText(SAY_VICTORY2, me);
}
}
break;
case 22:
if (Creature *Mrfloppy = Unit::GetCreature(*me, MrfloppyGUID))
{
if (Mrfloppy->isDead())
{
if (Creature *RWORG = Unit::GetCreature(*me, RWORGGUID))
RWORG->DisappearAndDie();
me->GetMotionMaster()->MovePoint(0, Mrfloppy->GetPositionX(), Mrfloppy->GetPositionY(), Mrfloppy->GetPositionZ());
Mrfloppy->setDeathState(ALIVE);
Mrfloppy->GetMotionMaster()->MoveFollow(me, PET_FOLLOW_DIST, PET_FOLLOW_ANGLE);
DoScriptText(SAY_VICTORY3, me);
}
}
break;
case 24:
if (pPlayer)
{
Completed = true;
pPlayer->GroupEventHappens(QUEST_PERILOUS_ADVENTURE, me);
DoScriptText(SAY_QUEST_COMPLETE, me, pPlayer);
}
me->RemoveUnitMovementFlag(MOVEMENTFLAG_WALKING);
break;
case 25:
DoScriptText(SAY_VICTORY4, me);
break;
case 27:
me->DisappearAndDie();
if (Creature *Mrfloppy = Unit::GetCreature(*me, MrfloppyGUID))
Mrfloppy->DisappearAndDie();
break;
}
}
void EnterCombat(Unit* /*Who*/)
{
DoScriptText(SAY_RANDOMAGGRO, me);
}
void Reset()
{
m_uiChatTimer = 4000;
MrfloppyGUID = 0;
RWORGGUID = 0;
}
void UpdateAI(const uint32 uiDiff)
{
npc_escortAI::UpdateAI(uiDiff);
if (HasEscortState(STATE_ESCORT_ESCORTING))
{
if (m_uiChatTimer <= uiDiff)
{
m_uiChatTimer = 12000;
}
else
m_uiChatTimer -= uiDiff;
}
}
};
bool OnQuestAccept(Player* pPlayer, Creature* pCreature, Quest const* quest)
{
if (quest->GetQuestId() == QUEST_PERILOUS_ADVENTURE)
{
DoScriptText(SAY_QUEST_ACCEPT, pCreature);
if (Creature* Mrfloppy = GetClosestCreatureWithEntry(pCreature, NPC_MRFLOPPY, 180.0f))
{
Mrfloppy->GetMotionMaster()->MoveFollow(pCreature, PET_FOLLOW_DIST, PET_FOLLOW_ANGLE);
}
if (npc_escortAI* pEscortAI = CAST_AI(npc_emilyAI, (pCreature->AI())))
pEscortAI->Start(true, false, pPlayer->GetGUID());
}
return true;
}
CreatureAI *GetAI(Creature *creature) const
{
return new npc_emilyAI(creature);
}
};
bool QuestAccept_npc_emily(Player* pPlayer, Creature* pCreature, Quest const* quest)
{
if (quest->GetQuestId() == QUEST_PERILOUS_ADVENTURE)
{
DoScriptText(SAY_QUEST_ACCEPT, pCreature);
if (Creature* Mrfloppy = GetClosestCreatureWithEntry(pCreature, NPC_MRFLOPPY, 180.0f))
{
Mrfloppy->GetMotionMaster()->MoveFollow(pCreature, PET_FOLLOW_DIST, PET_FOLLOW_ANGLE);
}
if (npc_escortAI* pEscortAI = CAST_AI(npc_emilyAI, (pCreature->AI())))
pEscortAI->Start(true, false, pPlayer->GetGUID());
}
return true;
}
CreatureAI* GetAI_npc_emily(Creature* pCreature)
{
return new npc_emilyAI(pCreature);
}
//mrfloppy
struct npc_mrfloppyAI : public ScriptedAI
class npc_mrfloppy : public CreatureScript
{
npc_mrfloppyAI(Creature *c) : ScriptedAI(c) {}
public:
npc_mrfloppy() : CreatureScript("npc_mrfloppy") { }
uint64 EmilyGUID;
uint64 RWORGGUID;
uint64 HWORGGUID;
void Reset() {}
void EnterCombat(Unit* Who)
struct npc_mrfloppyAI : public ScriptedAI
{
if (Creature* Emily = GetClosestCreatureWithEntry(me, NPC_EMILY, 50.0f))
npc_mrfloppyAI(Creature *c) : ScriptedAI(c) {}
uint64 EmilyGUID;
uint64 RWORGGUID;
uint64 HWORGGUID;
void Reset() {}
void EnterCombat(Unit* Who)
{
switch(Who->GetEntry())
if (Creature* Emily = GetClosestCreatureWithEntry(me, NPC_EMILY, 50.0f))
{
case NPC_HUNGRY_WORG:
DoScriptText(SAY_WORGHAGGRO2, Emily);
break;
case NPC_RAVENOUS_WORG:
DoScriptText(SAY_WORGRAGGRO4, Emily);
break;
default:
DoScriptText(SAY_RANDOMAGGRO, Emily);
switch(Who->GetEntry())
{
case NPC_HUNGRY_WORG:
DoScriptText(SAY_WORGHAGGRO2, Emily);
break;
case NPC_RAVENOUS_WORG:
DoScriptText(SAY_WORGRAGGRO4, Emily);
break;
default:
DoScriptText(SAY_RANDOMAGGRO, Emily);
}
}
}
}
void EnterEvadeMode() {}
void EnterEvadeMode() {}
void MoveInLineOfSight(Unit * /*who*/) {}
void MoveInLineOfSight(Unit * /*who*/) {}
void UpdateAI(const uint32 /*diff*/)
void UpdateAI(const uint32 /*diff*/)
{
if (!UpdateVictim())
return;
}
};
CreatureAI *GetAI(Creature *creature) const
{
if (!UpdateVictim())
return;
return new npc_mrfloppyAI(creature);
}
};
CreatureAI* GetAI_npc_mrfloppy(Creature* pCreature)
{
return new npc_mrfloppyAI(pCreature);
}
// Outhouse Bunny
enum eOuthouseBunny
@@ -378,49 +395,56 @@ enum eSounds
SOUND_FEMALE = 12671,
SOUND_MALE = 12670
};
struct npc_outhouse_bunnyAI : public ScriptedAI
class npc_outhouse_bunny : public CreatureScript
{
npc_outhouse_bunnyAI(Creature* pCreature) : ScriptedAI(pCreature) {}
public:
npc_outhouse_bunny() : CreatureScript("npc_outhouse_bunny") { }
uint8 m_counter;
uint8 m_gender;
void Reset()
struct npc_outhouse_bunnyAI : public ScriptedAI
{
m_counter = 0;
m_gender = 0;
}
npc_outhouse_bunnyAI(Creature* pCreature) : ScriptedAI(pCreature) {}
void SetData(uint32 uiType, uint32 uiData)
{
if (uiType == 1)
m_gender = uiData;
}
uint8 m_counter;
uint8 m_gender;
void SpellHit(Unit* pCaster, const SpellEntry* pSpell)
{
if (pSpell->Id == SPELL_OUTHOUSE_GROANS)
void Reset()
{
++m_counter;
if (m_counter < 5)
DoCast(pCaster, SPELL_CAMERA_SHAKE, true);
else
m_counter = 0;
DoCast(me, SPELL_DUST_FIELD, true);
switch (m_gender)
m_counter = 0;
m_gender = 0;
}
void SetData(uint32 uiType, uint32 uiData)
{
if (uiType == 1)
m_gender = uiData;
}
void SpellHit(Unit* pCaster, const SpellEntry* pSpell)
{
if (pSpell->Id == SPELL_OUTHOUSE_GROANS)
{
case GENDER_FEMALE: DoPlaySoundToSet(me, SOUND_FEMALE); break;
case GENDER_MALE: DoPlaySoundToSet(me, SOUND_MALE); break;
++m_counter;
if (m_counter < 5)
DoCast(pCaster, SPELL_CAMERA_SHAKE, true);
else
m_counter = 0;
DoCast(me, SPELL_DUST_FIELD, true);
switch (m_gender)
{
case GENDER_FEMALE: DoPlaySoundToSet(me, SOUND_FEMALE); break;
case GENDER_MALE: DoPlaySoundToSet(me, SOUND_MALE); break;
}
}
}
};
CreatureAI *GetAI(Creature *creature) const
{
return new npc_outhouse_bunnyAI(creature);
}
};
CreatureAI* GetAI_npc_outhouse_bunny(Creature* pCreature)
{
return new npc_outhouse_bunnyAI (pCreature);
}
// Tallhorn Stage
enum etallhornstage
@@ -428,37 +452,43 @@ enum etallhornstage
OBJECT_HAUNCH = 188665
};
struct npc_tallhorn_stagAI : public ScriptedAI
class npc_tallhorn_stag : public CreatureScript
{
npc_tallhorn_stagAI(Creature* pCreature) : ScriptedAI(pCreature) {}
public:
npc_tallhorn_stag() : CreatureScript("npc_tallhorn_stag") { }
uint8 m_uiPhase;
void Reset()
struct npc_tallhorn_stagAI : public ScriptedAI
{
m_uiPhase = 1;
}
npc_tallhorn_stagAI(Creature* pCreature) : ScriptedAI(pCreature) {}
void UpdateAI(const uint32 /*uiDiff*/)
{
if (m_uiPhase == 1)
uint8 m_uiPhase;
void Reset()
{
if (GameObject* haunch = me->FindNearestGameObject(OBJECT_HAUNCH, 2.0f))
{
me->SetStandState(UNIT_STAND_STATE_DEAD);
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_OOC_NOT_ATTACKABLE);
me->SetUInt32Value(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_DEAD);
}
m_uiPhase = 0;
m_uiPhase = 1;
}
void UpdateAI(const uint32 /*uiDiff*/)
{
if (m_uiPhase == 1)
{
if (GameObject* haunch = me->FindNearestGameObject(OBJECT_HAUNCH, 2.0f))
{
me->SetStandState(UNIT_STAND_STATE_DEAD);
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_OOC_NOT_ATTACKABLE);
me->SetUInt32Value(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_DEAD);
}
m_uiPhase = 0;
}
}
};
CreatureAI *GetAI(Creature *creature) const
{
return new npc_tallhorn_stagAI(creature);
}
};
CreatureAI* GetAI_npc_tallhorn_stag(Creature* pCreature)
{
return new npc_tallhorn_stagAI (pCreature);
}
// Amberpine Woodsman
enum eamberpinewoodsman
@@ -466,54 +496,64 @@ enum eamberpinewoodsman
TALLHORN_STAG = 26363
};
struct npc_amberpine_woodsmanAI : public ScriptedAI
class npc_amberpine_woodsman : public CreatureScript
{
npc_amberpine_woodsmanAI(Creature* pCreature) : ScriptedAI(pCreature) {}
public:
npc_amberpine_woodsman() : CreatureScript("npc_amberpine_woodsman") { }
uint8 m_uiPhase;
uint32 m_uiTimer;
void Reset()
struct npc_amberpine_woodsmanAI : public ScriptedAI
{
m_uiTimer = 0;
m_uiPhase = 1;
}
npc_amberpine_woodsmanAI(Creature* pCreature) : ScriptedAI(pCreature) {}
void UpdateAI(const uint32 uiDiff)
{
// call this each update tick?
if (Creature* stag = me->FindNearestCreature(TALLHORN_STAG, 0.2f))
uint8 m_uiPhase;
uint32 m_uiTimer;
void Reset()
{
me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_USESTANDING);
m_uiTimer = 0;
m_uiPhase = 1;
}
else
if (m_uiPhase)
{
if (m_uiTimer <= uiDiff)
{
switch(m_uiPhase)
{
case 1:
me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_LOOT);
m_uiTimer = 3000;
m_uiPhase = 2;
break;
case 2:
me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_ATTACK1H);
m_uiTimer = 4000;
m_uiPhase = 1;
break;
}
}
else
m_uiTimer -= uiDiff;
}
ScriptedAI::UpdateAI(uiDiff);
UpdateVictim();
void UpdateAI(const uint32 uiDiff)
{
// call this each update tick?
if (Creature* stag = me->FindNearestCreature(TALLHORN_STAG, 0.2f))
{
me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_USESTANDING);
}
else
if (m_uiPhase)
{
if (m_uiTimer <= uiDiff)
{
switch(m_uiPhase)
{
case 1:
me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_LOOT);
m_uiTimer = 3000;
m_uiPhase = 2;
break;
case 2:
me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_ATTACK1H);
m_uiTimer = 4000;
m_uiPhase = 1;
break;
}
}
else
m_uiTimer -= uiDiff;
}
ScriptedAI::UpdateAI(uiDiff);
UpdateVictim();
}
};
CreatureAI *GetAI(Creature *creature) const
{
return new npc_amberpine_woodsmanAI(creature);
}
};
/*######
## Quest 12288: Overwhelmed!
######*/
@@ -528,100 +568,70 @@ enum eSkirmisher
RANDOM_SAY_3 = -1800046 //Thank you. $Class!
};
struct npc_wounded_skirmisherAI : public ScriptedAI
class npc_wounded_skirmisher : public CreatureScript
{
npc_wounded_skirmisherAI(Creature *c) : ScriptedAI(c) {}
uint64 uiPlayerGUID;
public:
npc_wounded_skirmisher() : CreatureScript("npc_wounded_skirmisher") { }
uint32 DespawnTimer;
void Reset ()
struct npc_wounded_skirmisherAI : public ScriptedAI
{
DespawnTimer = 5000;
uiPlayerGUID = 0;
}
npc_wounded_skirmisherAI(Creature *c) : ScriptedAI(c) {}
uint64 uiPlayerGUID;
void MovementInform(uint32, uint32 id)
{
if (id == 1)
me->ForcedDespawn(DespawnTimer);
}
uint32 DespawnTimer;
void SpellHit(Unit *caster, const SpellEntry *spell)
{
if (spell->Id == SPELL_RENEW_SKIRMISHER && caster->GetTypeId() == TYPEID_PLAYER
&& caster->ToPlayer()->GetQuestStatus(12288) == QUEST_STATUS_INCOMPLETE)
{
caster->ToPlayer()->KilledMonsterCredit(CREDIT_NPC, 0);
DoScriptText(RAND(RANDOM_SAY_1,RANDOM_SAY_2,RANDOM_SAY_3),caster);
if(me->IsStandState())
me->GetMotionMaster()->MovePoint(1, me->GetPositionX()+7, me->GetPositionY()+7, me->GetPositionZ());
else
{
me->SetStandState(UNIT_STAND_STATE_STAND);
me->ForcedDespawn(DespawnTimer);
}
void Reset ()
{
DespawnTimer = 5000;
uiPlayerGUID = 0;
}
}
void UpdateAI(const uint32 /*diff*/)
void MovementInform(uint32, uint32 id)
{
if (id == 1)
me->ForcedDespawn(DespawnTimer);
}
void SpellHit(Unit *caster, const SpellEntry *spell)
{
if (spell->Id == SPELL_RENEW_SKIRMISHER && caster->GetTypeId() == TYPEID_PLAYER
&& caster->ToPlayer()->GetQuestStatus(12288) == QUEST_STATUS_INCOMPLETE)
{
caster->ToPlayer()->KilledMonsterCredit(CREDIT_NPC, 0);
DoScriptText(RAND(RANDOM_SAY_1,RANDOM_SAY_2,RANDOM_SAY_3),caster);
if(me->IsStandState())
me->GetMotionMaster()->MovePoint(1, me->GetPositionX()+7, me->GetPositionY()+7, me->GetPositionZ());
else
{
me->SetStandState(UNIT_STAND_STATE_STAND);
me->ForcedDespawn(DespawnTimer);
}
}
}
void UpdateAI(const uint32 /*diff*/)
{
if (!UpdateVictim())
return;
DoMeleeAttackIfReady();
}
};
CreatureAI *GetAI(Creature *creature) const
{
if (!UpdateVictim())
return;
DoMeleeAttackIfReady();
return new npc_wounded_skirmisherAI(creature);
}
};
CreatureAI* GetAI_npc_wounded_skirmisher(Creature* pCreature)
{
return new npc_wounded_skirmisherAI(pCreature);
}
CreatureAI* GetAI_npc_amberpine_woodsman(Creature* pCreature)
{
return new npc_amberpine_woodsmanAI (pCreature);
}
void AddSC_grizzly_hills()
{
Script* newscript;
newscript = new Script;
newscript->Name = "npc_orsonn_and_kodian";
newscript->pGossipHello = &GossipHello_npc_orsonn_and_kodian;
newscript->pGossipSelect = &GossipSelect_npc_orsonn_and_kodian;
newscript->RegisterSelf();
newscript = new Script;
newscript->Name = "npc_emily";
newscript->GetAI = &GetAI_npc_emily;
newscript->pQuestAccept = &QuestAccept_npc_emily;
newscript->RegisterSelf();
newscript = new Script;
newscript->Name = "npc_mrfloppy";
newscript->GetAI = &GetAI_npc_mrfloppy;
newscript->RegisterSelf();
newscript = new Script;
newscript->Name = "npc_outhouse_bunny";
newscript->GetAI = &GetAI_npc_outhouse_bunny;
newscript->RegisterSelf();
newscript = new Script;
newscript->Name = "npc_tallhorn_stag";
newscript->GetAI = &GetAI_npc_tallhorn_stag;
newscript->RegisterSelf();
newscript = new Script;
newscript->Name = "npc_amberpine_woodsman";
newscript->GetAI = &GetAI_npc_amberpine_woodsman;
newscript->RegisterSelf();
newscript = new Script;
newscript->Name = "npc_wounded_skirmisher";
newscript->GetAI = &GetAI_npc_wounded_skirmisher;
newscript->RegisterSelf();
new npc_orsonn_and_kodian;
new npc_emily;
new npc_mrfloppy;
new npc_outhouse_bunny;
new npc_tallhorn_stag;
new npc_amberpine_woodsman;
new npc_wounded_skirmisher;
}
+221 -215
View File
@@ -43,108 +43,116 @@ enum Entries
SPELL_COSMETIC_LOW_POLY_FIRE = 56274
};
bool QuestAccept_npc_apothecary_hanes(Player* pPlayer, Creature* pCreature, Quest const* quest)
class npc_apothecary_hanes : public CreatureScript
{
if (quest->GetQuestId() == QUEST_TRAIL_OF_FIRE)
public:
npc_apothecary_hanes() : CreatureScript("npc_apothecary_hanes") { }
bool OnQuestAccept(Player* pPlayer, Creature* pCreature, Quest const* quest)
{
switch (pPlayer->GetTeam())
if (quest->GetQuestId() == QUEST_TRAIL_OF_FIRE)
{
case ALLIANCE:
pCreature->setFaction(FACTION_ESCORTEE_A);
break;
case HORDE:
pCreature->setFaction(FACTION_ESCORTEE_H);
break;
}
CAST_AI(npc_escortAI, (pCreature->AI()))->Start(true, false, pPlayer->GetGUID());
}
return true;
}
struct npc_Apothecary_HanesAI : public npc_escortAI
{
npc_Apothecary_HanesAI(Creature* pCreature) : npc_escortAI(pCreature){}
uint32 PotTimer;
void Reset ()
{
SetDespawnAtFar(false);
PotTimer = 10000; //10 sec cooldown on potion
}
void JustDied(Unit* /*killer*/)
{
if (Player* pPlayer = GetPlayerForEscort())
pPlayer->FailQuest(QUEST_TRAIL_OF_FIRE);
}
void UpdateEscortAI(const uint32 diff)
{
if (HealthBelowPct(75))
{
if (PotTimer <= diff)
switch (pPlayer->GetTeam())
{
DoCast(me, 17534, true);
PotTimer = 10000;
} else PotTimer -= diff;
case ALLIANCE:
pCreature->setFaction(FACTION_ESCORTEE_A);
break;
case HORDE:
pCreature->setFaction(FACTION_ESCORTEE_H);
break;
}
CAST_AI(npc_escortAI, (pCreature->AI()))->Start(true, false, pPlayer->GetGUID());
}
if (GetAttack() && UpdateVictim())
DoMeleeAttackIfReady();
return true;
}
void WaypointReached(uint32 i)
struct npc_Apothecary_HanesAI : public npc_escortAI
{
Player* pPlayer = GetPlayerForEscort();
if (!pPlayer)
return;
switch(i)
npc_Apothecary_HanesAI(Creature* pCreature) : npc_escortAI(pCreature){}
uint32 PotTimer;
void Reset ()
{
case 1:
me->SetReactState(REACT_AGGRESSIVE);
SetRun(true);
break;
case 23:
if (pPlayer)
pPlayer->GroupEventHappens(QUEST_TRAIL_OF_FIRE, me);
me->ForcedDespawn();
break;
case 5:
if (Unit* Trigger = me->FindNearestCreature(NPC_HANES_FIRE_TRIGGER,10.0f))
Trigger->CastSpell(Trigger, SPELL_COSMETIC_LOW_POLY_FIRE, false);
SetRun(false);
break;
case 6:
if (Unit* Trigger = me->FindNearestCreature(NPC_HANES_FIRE_TRIGGER,10.0f))
Trigger->CastSpell(Trigger, SPELL_COSMETIC_LOW_POLY_FIRE, false);
SetRun(true);
break;
case 8:
if (Unit* Trigger = me->FindNearestCreature(NPC_HANES_FIRE_TRIGGER,10.0f))
Trigger->CastSpell(Trigger, SPELL_COSMETIC_LOW_POLY_FIRE, false);
SetRun(false);
break;
case 9:
if (Unit* Trigger = me->FindNearestCreature(NPC_HANES_FIRE_TRIGGER,10.0f))
Trigger->CastSpell(Trigger, SPELL_COSMETIC_LOW_POLY_FIRE, false);
break;
case 10:
SetRun(true);
break;
case 13:
SetRun(false);
break;
case 14:
if (Unit* Trigger = me->FindNearestCreature(NPC_HANES_FIRE_TRIGGER,10.0f))
Trigger->CastSpell(Trigger, SPELL_COSMETIC_LOW_POLY_FIRE, false);
SetRun(true);
break;
SetDespawnAtFar(false);
PotTimer = 10000; //10 sec cooldown on potion
}
void JustDied(Unit* /*killer*/)
{
if (Player* pPlayer = GetPlayerForEscort())
pPlayer->FailQuest(QUEST_TRAIL_OF_FIRE);
}
void UpdateEscortAI(const uint32 diff)
{
if (HealthBelowPct(75))
{
if (PotTimer <= diff)
{
DoCast(me, 17534, true);
PotTimer = 10000;
} else PotTimer -= diff;
}
if (GetAttack() && UpdateVictim())
DoMeleeAttackIfReady();
}
void WaypointReached(uint32 i)
{
Player* pPlayer = GetPlayerForEscort();
if (!pPlayer)
return;
switch(i)
{
case 1:
me->SetReactState(REACT_AGGRESSIVE);
SetRun(true);
break;
case 23:
if (pPlayer)
pPlayer->GroupEventHappens(QUEST_TRAIL_OF_FIRE, me);
me->ForcedDespawn();
break;
case 5:
if (Unit* Trigger = me->FindNearestCreature(NPC_HANES_FIRE_TRIGGER,10.0f))
Trigger->CastSpell(Trigger, SPELL_COSMETIC_LOW_POLY_FIRE, false);
SetRun(false);
break;
case 6:
if (Unit* Trigger = me->FindNearestCreature(NPC_HANES_FIRE_TRIGGER,10.0f))
Trigger->CastSpell(Trigger, SPELL_COSMETIC_LOW_POLY_FIRE, false);
SetRun(true);
break;
case 8:
if (Unit* Trigger = me->FindNearestCreature(NPC_HANES_FIRE_TRIGGER,10.0f))
Trigger->CastSpell(Trigger, SPELL_COSMETIC_LOW_POLY_FIRE, false);
SetRun(false);
break;
case 9:
if (Unit* Trigger = me->FindNearestCreature(NPC_HANES_FIRE_TRIGGER,10.0f))
Trigger->CastSpell(Trigger, SPELL_COSMETIC_LOW_POLY_FIRE, false);
break;
case 10:
SetRun(true);
break;
case 13:
SetRun(false);
break;
case 14:
if (Unit* Trigger = me->FindNearestCreature(NPC_HANES_FIRE_TRIGGER,10.0f))
Trigger->CastSpell(Trigger, SPELL_COSMETIC_LOW_POLY_FIRE, false);
SetRun(true);
break;
}
}
};
CreatureAI *GetAI(Creature *creature) const
{
return new npc_Apothecary_HanesAI(creature);
}
};
CreatureAI* GetAI_npc_apothecary_hanes(Creature* pCreature)
{
return new npc_Apothecary_HanesAI(pCreature);
}
/*######
## npc_plaguehound_tracker
######*/
@@ -154,55 +162,61 @@ enum ePlaguehound
QUEST_SNIFF_OUT_ENEMY = 11253
};
struct npc_plaguehound_trackerAI : public npc_escortAI
class npc_plaguehound_tracker : public CreatureScript
{
npc_plaguehound_trackerAI(Creature* pCreature) : npc_escortAI(pCreature) { }
public:
npc_plaguehound_tracker() : CreatureScript("npc_plaguehound_tracker") { }
void Reset()
struct npc_plaguehound_trackerAI : public npc_escortAI
{
InitScriptData();
}
npc_plaguehound_trackerAI(Creature* pCreature) : npc_escortAI(pCreature) { }
void InitScriptData()
{
Player* pPlayer = NULL;
if (me->isSummon())
if (Unit* summoner = CAST_SUM(me)->GetSummoner())
if (summoner->GetTypeId() == TYPEID_PLAYER)
pPlayer = CAST_PLR(summoner);
if (!pPlayer)
return;
me->SetUnitMovementFlags(MOVEMENTFLAG_WALKING);
Start(false, false, pPlayer->GetGUID());
}
void WaypointReached(uint32 i)
{
Player* pPlayer = NULL;
if (me->isSummon())
if (Unit* summoner = CAST_SUM(me)->GetSummoner())
if (summoner->GetTypeId() == TYPEID_PLAYER)
pPlayer = CAST_PLR(summoner);
if (!pPlayer)
return;
switch(i)
void Reset()
{
case 26:
me->ForcedDespawn();
break;
InitScriptData();
}
void InitScriptData()
{
Player* pPlayer = NULL;
if (me->isSummon())
if (Unit* summoner = CAST_SUM(me)->GetSummoner())
if (summoner->GetTypeId() == TYPEID_PLAYER)
pPlayer = CAST_PLR(summoner);
if (!pPlayer)
return;
me->SetUnitMovementFlags(MOVEMENTFLAG_WALKING);
Start(false, false, pPlayer->GetGUID());
}
void WaypointReached(uint32 i)
{
Player* pPlayer = NULL;
if (me->isSummon())
if (Unit* summoner = CAST_SUM(me)->GetSummoner())
if (summoner->GetTypeId() == TYPEID_PLAYER)
pPlayer = CAST_PLR(summoner);
if (!pPlayer)
return;
switch(i)
{
case 26:
me->ForcedDespawn();
break;
}
}
};
CreatureAI *GetAI(Creature *creature) const
{
return new npc_plaguehound_trackerAI(creature);
}
};
CreatureAI* GetAI_npc_plaguehound_tracker(Creature* pCreature)
{
return new npc_plaguehound_trackerAI(pCreature);
}
/*######
## npc_razael_and_lyana
######*/
@@ -221,50 +235,56 @@ enum eRazael
GOSSIP_TEXTID_LYANA2 = 11588
};
bool GossipHello_npc_razael_and_lyana(Player* pPlayer, Creature* pCreature)
class npc_razael_and_lyana : public CreatureScript
{
if (pCreature->isQuestGiver())
pPlayer->PrepareQuestMenu(pCreature->GetGUID());
public:
npc_razael_and_lyana() : CreatureScript("npc_razael_and_lyana") { }
if (pPlayer->GetQuestStatus(QUEST_REPORTS_FROM_THE_FIELD) == QUEST_STATUS_INCOMPLETE)
switch (pCreature->GetEntry())
{
case NPC_RAZAEL:
if (!pPlayer->GetReqKillOrCastCurrentCount(QUEST_REPORTS_FROM_THE_FIELD, NPC_RAZAEL))
{
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_RAZAEL_REPORT, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1);
pPlayer->SEND_GOSSIP_MENU(GOSSIP_TEXTID_RAZAEL1, pCreature->GetGUID());
return true;
}
break;
case NPC_LYANA:
if (!pPlayer->GetReqKillOrCastCurrentCount(QUEST_REPORTS_FROM_THE_FIELD, NPC_LYANA))
{
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_LYANA_REPORT, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2);
pPlayer->SEND_GOSSIP_MENU(GOSSIP_TEXTID_LYANA1, pCreature->GetGUID());
return true;
}
break;
}
pPlayer->SEND_GOSSIP_MENU(pPlayer->GetGossipTextId(pCreature), pCreature->GetGUID());
return true;
}
bool GossipSelect_npc_razael_and_lyana(Player* pPlayer, Creature* pCreature, uint32 /*uiSender*/, uint32 uiAction)
{
switch (uiAction)
bool OnGossipHello(Player* pPlayer, Creature* pCreature)
{
case GOSSIP_ACTION_INFO_DEF + 1:
pPlayer->SEND_GOSSIP_MENU(GOSSIP_TEXTID_RAZAEL2, pCreature->GetGUID());
pPlayer->TalkedToCreature(NPC_RAZAEL, pCreature->GetGUID());
break;
case GOSSIP_ACTION_INFO_DEF + 2:
pPlayer->SEND_GOSSIP_MENU(GOSSIP_TEXTID_LYANA2, pCreature->GetGUID());
pPlayer->TalkedToCreature(NPC_LYANA, pCreature->GetGUID());
break;
if (pCreature->isQuestGiver())
pPlayer->PrepareQuestMenu(pCreature->GetGUID());
if (pPlayer->GetQuestStatus(QUEST_REPORTS_FROM_THE_FIELD) == QUEST_STATUS_INCOMPLETE)
switch (pCreature->GetEntry())
{
case NPC_RAZAEL:
if (!pPlayer->GetReqKillOrCastCurrentCount(QUEST_REPORTS_FROM_THE_FIELD, NPC_RAZAEL))
{
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_RAZAEL_REPORT, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1);
pPlayer->SEND_GOSSIP_MENU(GOSSIP_TEXTID_RAZAEL1, pCreature->GetGUID());
return true;
}
break;
case NPC_LYANA:
if (!pPlayer->GetReqKillOrCastCurrentCount(QUEST_REPORTS_FROM_THE_FIELD, NPC_LYANA))
{
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_LYANA_REPORT, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2);
pPlayer->SEND_GOSSIP_MENU(GOSSIP_TEXTID_LYANA1, pCreature->GetGUID());
return true;
}
break;
}
pPlayer->SEND_GOSSIP_MENU(pPlayer->GetGossipTextId(pCreature), pCreature->GetGUID());
return true;
}
return true;
}
bool OnGossipSelect(Player* pPlayer, Creature* pCreature, uint32 /*uiSender*/, uint32 uiAction)
{
switch (uiAction)
{
case GOSSIP_ACTION_INFO_DEF + 1:
pPlayer->SEND_GOSSIP_MENU(GOSSIP_TEXTID_RAZAEL2, pCreature->GetGUID());
pPlayer->TalkedToCreature(NPC_RAZAEL, pCreature->GetGUID());
break;
case GOSSIP_ACTION_INFO_DEF + 2:
pPlayer->SEND_GOSSIP_MENU(GOSSIP_TEXTID_LYANA2, pCreature->GetGUID());
pPlayer->TalkedToCreature(NPC_LYANA, pCreature->GetGUID());
break;
}
return true;
}
};
/*######
## npc_mcgoyver
@@ -283,56 +303,42 @@ enum eMcGoyver
GOSSIP_TEXTID_MCGOYVER = 12193
};
bool GossipHello_npc_mcgoyver(Player* pPlayer, Creature* pCreature)
class npc_mcgoyver : public CreatureScript
{
if (pPlayer->GetQuestStatus(QUEST_WE_CAN_REBUILD_IT) == QUEST_STATUS_INCOMPLETE)
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM_MG_I, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1);
public:
npc_mcgoyver() : CreatureScript("npc_mcgoyver") { }
pPlayer->SEND_GOSSIP_MENU(pPlayer->GetGossipTextId(pCreature), pCreature->GetGUID());
return true;
}
bool GossipSelect_npc_mcgoyver(Player* pPlayer, Creature* pCreature, uint32 /*uiSender*/, uint32 uiAction)
{
switch(uiAction)
bool OnGossipHello(Player* pPlayer, Creature* pCreature)
{
case GOSSIP_ACTION_INFO_DEF+1:
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM_MG_II, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+2);
pPlayer->SEND_GOSSIP_MENU(GOSSIP_TEXTID_MCGOYVER, pCreature->GetGUID());
pPlayer->CastSpell(pPlayer, SPELL_CREATURE_DARK_IRON_INGOTS, true);
break;
case GOSSIP_ACTION_INFO_DEF+2:
pPlayer->CastSpell(pPlayer, SPELL_TAXI_EXPLORERS_LEAGUE, true);
pPlayer->CLOSE_GOSSIP_MENU();
break;
if (pPlayer->GetQuestStatus(QUEST_WE_CAN_REBUILD_IT) == QUEST_STATUS_INCOMPLETE)
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM_MG_I, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1);
pPlayer->SEND_GOSSIP_MENU(pPlayer->GetGossipTextId(pCreature), pCreature->GetGUID());
return true;
}
return true;
}
bool OnGossipSelect(Player* pPlayer, Creature* pCreature, uint32 /*uiSender*/, uint32 uiAction)
{
switch(uiAction)
{
case GOSSIP_ACTION_INFO_DEF+1:
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM_MG_II, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+2);
pPlayer->SEND_GOSSIP_MENU(GOSSIP_TEXTID_MCGOYVER, pCreature->GetGUID());
pPlayer->CastSpell(pPlayer, SPELL_CREATURE_DARK_IRON_INGOTS, true);
break;
case GOSSIP_ACTION_INFO_DEF+2:
pPlayer->CastSpell(pPlayer, SPELL_TAXI_EXPLORERS_LEAGUE, true);
pPlayer->CLOSE_GOSSIP_MENU();
break;
}
return true;
}
};
void AddSC_howling_fjord()
{
Script *newscript;
newscript = new Script;
newscript->Name = "npc_apothecary_hanes";
newscript->GetAI = &GetAI_npc_apothecary_hanes;
newscript->pQuestAccept = &QuestAccept_npc_apothecary_hanes;
newscript->RegisterSelf();
newscript = new Script;
newscript->Name = "npc_plaguehound_tracker";
newscript->GetAI = &GetAI_npc_plaguehound_tracker;
newscript->RegisterSelf();
newscript = new Script;
newscript->Name = "npc_razael_and_lyana";
newscript->pGossipHello = &GossipHello_npc_razael_and_lyana;
newscript->pGossipSelect = &GossipSelect_npc_razael_and_lyana;
newscript->RegisterSelf();
newscript = new Script;
newscript->Name = "npc_mcgoyver";
newscript->pGossipHello = &GossipHello_npc_mcgoyver;
newscript->pGossipSelect = &GossipSelect_npc_mcgoyver;
newscript->RegisterSelf();
new npc_apothecary_hanes;
new npc_plaguehound_tracker;
new npc_razael_and_lyana;
new npc_mcgoyver;
}
+235 -227
View File
@@ -54,58 +54,64 @@ enum eArete
QUEST_THE_STORY_THUS_FAR = 12807
};
bool GossipHello_npc_arete(Player* pPlayer, Creature* pCreature)
class npc_arete : public CreatureScript
{
if (pCreature->isQuestGiver())
pPlayer->PrepareQuestMenu(pCreature->GetGUID());
public:
npc_arete() : CreatureScript("npc_arete") { }
if (pPlayer->GetQuestStatus(QUEST_THE_STORY_THUS_FAR) == QUEST_STATUS_INCOMPLETE)
bool OnGossipHello(Player* pPlayer, Creature* pCreature)
{
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ARETE_ITEM1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1);
pPlayer->SEND_GOSSIP_MENU(GOSSIP_TEXTID_ARETE1, pCreature->GetGUID());
if (pCreature->isQuestGiver())
pPlayer->PrepareQuestMenu(pCreature->GetGUID());
if (pPlayer->GetQuestStatus(QUEST_THE_STORY_THUS_FAR) == QUEST_STATUS_INCOMPLETE)
{
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ARETE_ITEM1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1);
pPlayer->SEND_GOSSIP_MENU(GOSSIP_TEXTID_ARETE1, pCreature->GetGUID());
return true;
}
pPlayer->SEND_GOSSIP_MENU(pPlayer->GetGossipTextId(pCreature), pCreature->GetGUID());
return true;
}
pPlayer->SEND_GOSSIP_MENU(pPlayer->GetGossipTextId(pCreature), pCreature->GetGUID());
return true;
}
bool GossipSelect_npc_arete(Player* pPlayer, Creature* pCreature, uint32 /*uiSender*/, uint32 uiAction)
{
switch(uiAction)
bool OnGossipSelect(Player* pPlayer, Creature* pCreature, uint32 /*uiSender*/, uint32 uiAction)
{
case GOSSIP_ACTION_INFO_DEF+1:
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ARETE_ITEM2, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2);
pPlayer->SEND_GOSSIP_MENU(GOSSIP_TEXTID_ARETE2, pCreature->GetGUID());
break;
case GOSSIP_ACTION_INFO_DEF+2:
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ARETE_ITEM3, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3);
pPlayer->SEND_GOSSIP_MENU(GOSSIP_TEXTID_ARETE3, pCreature->GetGUID());
break;
case GOSSIP_ACTION_INFO_DEF+3:
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ARETE_ITEM4, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 4);
pPlayer->SEND_GOSSIP_MENU(GOSSIP_TEXTID_ARETE4, pCreature->GetGUID());
break;
case GOSSIP_ACTION_INFO_DEF+4:
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ARETE_ITEM5, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 5);
pPlayer->SEND_GOSSIP_MENU(GOSSIP_TEXTID_ARETE5, pCreature->GetGUID());
break;
case GOSSIP_ACTION_INFO_DEF+5:
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ARETE_ITEM6, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 6);
pPlayer->SEND_GOSSIP_MENU(GOSSIP_TEXTID_ARETE6, pCreature->GetGUID());
break;
case GOSSIP_ACTION_INFO_DEF+6:
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ARETE_ITEM7, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 7);
pPlayer->SEND_GOSSIP_MENU(GOSSIP_TEXTID_ARETE7, pCreature->GetGUID());
break;
case GOSSIP_ACTION_INFO_DEF+7:
pPlayer->CLOSE_GOSSIP_MENU();
pPlayer->AreaExploredOrEventHappens(QUEST_THE_STORY_THUS_FAR);
break;
}
switch(uiAction)
{
case GOSSIP_ACTION_INFO_DEF+1:
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ARETE_ITEM2, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2);
pPlayer->SEND_GOSSIP_MENU(GOSSIP_TEXTID_ARETE2, pCreature->GetGUID());
break;
case GOSSIP_ACTION_INFO_DEF+2:
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ARETE_ITEM3, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3);
pPlayer->SEND_GOSSIP_MENU(GOSSIP_TEXTID_ARETE3, pCreature->GetGUID());
break;
case GOSSIP_ACTION_INFO_DEF+3:
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ARETE_ITEM4, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 4);
pPlayer->SEND_GOSSIP_MENU(GOSSIP_TEXTID_ARETE4, pCreature->GetGUID());
break;
case GOSSIP_ACTION_INFO_DEF+4:
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ARETE_ITEM5, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 5);
pPlayer->SEND_GOSSIP_MENU(GOSSIP_TEXTID_ARETE5, pCreature->GetGUID());
break;
case GOSSIP_ACTION_INFO_DEF+5:
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ARETE_ITEM6, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 6);
pPlayer->SEND_GOSSIP_MENU(GOSSIP_TEXTID_ARETE6, pCreature->GetGUID());
break;
case GOSSIP_ACTION_INFO_DEF+6:
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ARETE_ITEM7, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 7);
pPlayer->SEND_GOSSIP_MENU(GOSSIP_TEXTID_ARETE7, pCreature->GetGUID());
break;
case GOSSIP_ACTION_INFO_DEF+7:
pPlayer->CLOSE_GOSSIP_MENU();
pPlayer->AreaExploredOrEventHappens(QUEST_THE_STORY_THUS_FAR);
break;
}
return true;
}
return true;
}
};
/*######
## npc_dame_evniki_kapsalis
@@ -116,21 +122,27 @@ enum eDameEnvikiKapsalis
TITLE_CRUSADER = 123
};
bool GossipHello_npc_dame_evniki_kapsalis(Player* pPlayer, Creature* pCreature)
class npc_dame_evniki_kapsalis : public CreatureScript
{
if (pPlayer->HasTitle(TITLE_CRUSADER))
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_VENDOR, GOSSIP_TEXT_BROWSE_GOODS, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_TRADE);
public:
npc_dame_evniki_kapsalis() : CreatureScript("npc_dame_evniki_kapsalis") { }
pPlayer->SEND_GOSSIP_MENU(pPlayer->GetGossipTextId(pCreature), pCreature->GetGUID());
return true;
}
bool OnGossipHello(Player* pPlayer, Creature* pCreature)
{
if (pPlayer->HasTitle(TITLE_CRUSADER))
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_VENDOR, GOSSIP_TEXT_BROWSE_GOODS, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_TRADE);
bool GossipSelect_npc_dame_evniki_kapsalis(Player* pPlayer, Creature* pCreature, uint32 /*uiSender*/, uint32 uiAction)
{
if (uiAction == GOSSIP_ACTION_TRADE)
pPlayer->SEND_VENDORLIST(pCreature->GetGUID());
return true;
}
pPlayer->SEND_GOSSIP_MENU(pPlayer->GetGossipTextId(pCreature), pCreature->GetGUID());
return true;
}
bool OnGossipSelect(Player* pPlayer, Creature* pCreature, uint32 /*uiSender*/, uint32 uiAction)
{
if (uiAction == GOSSIP_ACTION_TRADE)
pPlayer->SEND_VENDORLIST(pCreature->GetGUID());
return true;
}
};
/*######
## npc_squire_david
@@ -149,30 +161,34 @@ enum eSquireDavid
#define GOSSIP_SQUIRE_ITEM_1 "I am ready to fight!"
#define GOSSIP_SQUIRE_ITEM_2 "How do the Argent Crusader raiders fight?"
bool GossipHello_npc_squire_david(Player* pPlayer, Creature* pCreature)
class npc_squire_david : public CreatureScript
{
if (pPlayer->GetQuestStatus(QUEST_THE_ASPIRANT_S_CHALLENGE_H) == QUEST_STATUS_INCOMPLETE ||
pPlayer->GetQuestStatus(QUEST_THE_ASPIRANT_S_CHALLENGE_A) == QUEST_STATUS_INCOMPLETE)//We need more info about it.
public:
npc_squire_david() : CreatureScript("npc_squire_david") { }
bool OnGossipHello(Player* pPlayer, Creature* pCreature)
{
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_SQUIRE_ITEM_1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1);
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_SQUIRE_ITEM_2, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+2);
if (pPlayer->GetQuestStatus(QUEST_THE_ASPIRANT_S_CHALLENGE_H) == QUEST_STATUS_INCOMPLETE ||
pPlayer->GetQuestStatus(QUEST_THE_ASPIRANT_S_CHALLENGE_A) == QUEST_STATUS_INCOMPLETE)//We need more info about it.
{
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_SQUIRE_ITEM_1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1);
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_SQUIRE_ITEM_2, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+2);
}
pPlayer->SEND_GOSSIP_MENU(GOSSIP_TEXTID_SQUIRE, pCreature->GetGUID());
return true;
}
pPlayer->SEND_GOSSIP_MENU(GOSSIP_TEXTID_SQUIRE, pCreature->GetGUID());
return true;
}
bool GossipSelect_npc_squire_david(Player* pPlayer, Creature* pCreature, uint32 /*uiSender*/, uint32 uiAction)
{
if (uiAction == GOSSIP_ACTION_INFO_DEF+1)
bool OnGossipSelect(Player* pPlayer, Creature* pCreature, uint32 /*uiSender*/, uint32 uiAction)
{
pPlayer->CLOSE_GOSSIP_MENU();
pCreature->SummonCreature(NPC_ARGENT_VALIANT,8575.451,952.472,547.554,0.38);
if (uiAction == GOSSIP_ACTION_INFO_DEF+1)
{
pPlayer->CLOSE_GOSSIP_MENU();
pCreature->SummonCreature(NPC_ARGENT_VALIANT,8575.451,952.472,547.554,0.38);
}
return true;
}
//else
//pPlayer->SEND_GOSSIP_MENU(???, pCreature->GetGUID()); Missing text
return true;
}
};
/*######
## npc_argent_valiant
@@ -186,70 +202,76 @@ enum eArgentValiant
NPC_ARGENT_VALIANT_CREDIT = 24108
};
struct npc_argent_valiantAI : public ScriptedAI
class npc_argent_valiant : public CreatureScript
{
npc_argent_valiantAI(Creature* pCreature) : ScriptedAI(pCreature)
public:
npc_argent_valiant() : CreatureScript("npc_argent_valiant") { }
struct npc_argent_valiantAI : public ScriptedAI
{
pCreature->GetMotionMaster()->MovePoint(0,8599.258,963.951,547.553);
pCreature->setFaction(35); //wrong faction in db?
}
uint32 uiChargeTimer;
uint32 uiShieldBreakerTimer;
void Reset()
{
uiChargeTimer = 7000;
uiShieldBreakerTimer = 10000;
}
void MovementInform(uint32 uiType, uint32 /*uiId*/)
{
if (uiType != POINT_MOTION_TYPE)
return;
me->setFaction(14);
}
void DamageTaken(Unit* pDoneBy, uint32& uiDamage)
{
if (uiDamage > me->GetHealth() && pDoneBy->GetTypeId() == TYPEID_PLAYER)
npc_argent_valiantAI(Creature* pCreature) : ScriptedAI(pCreature)
{
uiDamage = 0;
CAST_PLR(pDoneBy)->KilledMonsterCredit(NPC_ARGENT_VALIANT_CREDIT,0);
me->setFaction(35);
me->ForcedDespawn(5000);
me->SetHomePosition(me->GetPositionX(),me->GetPositionY(),me->GetPositionZ(),me->GetOrientation());
EnterEvadeMode();
pCreature->GetMotionMaster()->MovePoint(0,8599.258,963.951,547.553);
pCreature->setFaction(35); //wrong faction in db?
}
}
void UpdateAI(const uint32 uiDiff)
{
if (!UpdateVictim())
return;
uint32 uiChargeTimer;
uint32 uiShieldBreakerTimer;
if (uiChargeTimer <= uiDiff)
void Reset()
{
DoCastVictim(SPELL_CHARGE);
uiChargeTimer = 7000;
} else uiChargeTimer -= uiDiff;
if (uiShieldBreakerTimer <= uiDiff)
{
DoCastVictim(SPELL_SHIELD_BREAKER);
uiShieldBreakerTimer = 10000;
} else uiShieldBreakerTimer -= uiDiff;
}
DoMeleeAttackIfReady();
void MovementInform(uint32 uiType, uint32 /*uiId*/)
{
if (uiType != POINT_MOTION_TYPE)
return;
me->setFaction(14);
}
void DamageTaken(Unit* pDoneBy, uint32& uiDamage)
{
if (uiDamage > me->GetHealth() && pDoneBy->GetTypeId() == TYPEID_PLAYER)
{
uiDamage = 0;
CAST_PLR(pDoneBy)->KilledMonsterCredit(NPC_ARGENT_VALIANT_CREDIT,0);
me->setFaction(35);
me->ForcedDespawn(5000);
me->SetHomePosition(me->GetPositionX(),me->GetPositionY(),me->GetPositionZ(),me->GetOrientation());
EnterEvadeMode();
}
}
void UpdateAI(const uint32 uiDiff)
{
if (!UpdateVictim())
return;
if (uiChargeTimer <= uiDiff)
{
DoCastVictim(SPELL_CHARGE);
uiChargeTimer = 7000;
} else uiChargeTimer -= uiDiff;
if (uiShieldBreakerTimer <= uiDiff)
{
DoCastVictim(SPELL_SHIELD_BREAKER);
uiShieldBreakerTimer = 10000;
} else uiShieldBreakerTimer -= uiDiff;
DoMeleeAttackIfReady();
}
};
CreatureAI *GetAI(Creature *creature) const
{
return new npc_argent_valiantAI(creature);
}
};
CreatureAI* GetAI_npc_argent_valiant(Creature* pCreature)
{
return new npc_argent_valiantAI (pCreature);
}
/*######
## npc_argent_tournament_post
######*/
@@ -261,31 +283,37 @@ enum eArgentTournamentPost
NPC_ICEHOWL = 35470
};
struct npc_argent_tournament_postAI : public ScriptedAI
class npc_argent_tournament_post : public CreatureScript
{
npc_argent_tournament_postAI(Creature* pCreature) : ScriptedAI(pCreature) {}
public:
npc_argent_tournament_post() : CreatureScript("npc_argent_tournament_post") { }
void UpdateAI(const uint32 /*uiDiff*/)
struct npc_argent_tournament_postAI : public ScriptedAI
{
if (me->IsNonMeleeSpellCasted(false))
return;
npc_argent_tournament_postAI(Creature* pCreature) : ScriptedAI(pCreature) {}
if (Creature* pTarget = me->FindNearestCreature(NPC_GORMOK_THE_IMPALER, 6.0f))
DoCast(pTarget, SPELL_ROPE_BEAM);
void UpdateAI(const uint32 /*uiDiff*/)
{
if (me->IsNonMeleeSpellCasted(false))
return;
if (Creature* pTarget2 = me->FindNearestCreature(NPC_ICEHOWL, 6.0f))
DoCast(pTarget2, SPELL_ROPE_BEAM);
if (Creature* pTarget = me->FindNearestCreature(NPC_GORMOK_THE_IMPALER, 6.0f))
DoCast(pTarget, SPELL_ROPE_BEAM);
if (!UpdateVictim())
return;
if (Creature* pTarget2 = me->FindNearestCreature(NPC_ICEHOWL, 6.0f))
DoCast(pTarget2, SPELL_ROPE_BEAM);
if (!UpdateVictim())
return;
}
};
CreatureAI *GetAI(Creature *creature) const
{
return new npc_argent_tournament_postAI(creature);
}
};
CreatureAI* GetAI_npc_argent_tournament_post(Creature* pCreature)
{
return new npc_argent_tournament_postAI (pCreature);
}
/*######
## npc_alorah_and_grimmin
######*/
@@ -299,46 +327,52 @@ enum ealorah_and_grimmin
NPC_PRIEST_GRIMMIN = 36102
};
struct npc_alorah_and_grimminAI : public ScriptedAI
class npc_alorah_and_grimmin : public CreatureScript
{
npc_alorah_and_grimminAI(Creature* pCreature) : ScriptedAI(pCreature) {}
public:
npc_alorah_and_grimmin() : CreatureScript("npc_alorah_and_grimmin") { }
bool uiCast;
void Reset()
struct npc_alorah_and_grimminAI : public ScriptedAI
{
uiCast = false;
}
npc_alorah_and_grimminAI(Creature* pCreature) : ScriptedAI(pCreature) {}
void UpdateAI(const uint32 /*uiDiff*/)
{
if (uiCast)
return;
uiCast = true;
Creature* pTarget = NULL;
bool uiCast;
switch(me->GetEntry())
void Reset()
{
case NPC_PRIESTESS_ALORAH:
pTarget = me->FindNearestCreature(NPC_EYDIS_DARKBANE, 10.0f);
break;
case NPC_PRIEST_GRIMMIN:
pTarget = me->FindNearestCreature(NPC_FJOLA_LIGHTBANE, 10.0f);
break;
uiCast = false;
}
if (pTarget)
DoCast(pTarget, SPELL_CHAIN);
if (!UpdateVictim())
return;
void UpdateAI(const uint32 /*uiDiff*/)
{
if (uiCast)
return;
uiCast = true;
Creature* pTarget = NULL;
switch(me->GetEntry())
{
case NPC_PRIESTESS_ALORAH:
pTarget = me->FindNearestCreature(NPC_EYDIS_DARKBANE, 10.0f);
break;
case NPC_PRIEST_GRIMMIN:
pTarget = me->FindNearestCreature(NPC_FJOLA_LIGHTBANE, 10.0f);
break;
}
if (pTarget)
DoCast(pTarget, SPELL_CHAIN);
if (!UpdateVictim())
return;
}
};
CreatureAI *GetAI(Creature *creature) const
{
return new npc_alorah_and_grimminAI(creature);
}
};
CreatureAI* GetAI_npc_alorah_and_grimmin(Creature* pCreature)
{
return new npc_alorah_and_grimminAI (pCreature);
}
/*######
## npc_guardian_pavilion
######*/
@@ -352,73 +386,47 @@ enum eGuardianPavilion
SPELL_TRESPASSER_A = 63986,
};
struct npc_guardian_pavilionAI : public Scripted_NoMovementAI
class npc_guardian_pavilion : public CreatureScript
{
npc_guardian_pavilionAI(Creature* pCreature) : Scripted_NoMovementAI(pCreature) {}
public:
npc_guardian_pavilion() : CreatureScript("npc_guardian_pavilion") { }
void MoveInLineOfSight(Unit* pWho)
struct npc_guardian_pavilionAI : public Scripted_NoMovementAI
{
if (me->GetAreaId() != AREA_SUNREAVER_PAVILION && me->GetAreaId() != AREA_SILVER_COVENANT_PAVILION)
return;
npc_guardian_pavilionAI(Creature* pCreature) : Scripted_NoMovementAI(pCreature) {}
if (!pWho || pWho->GetTypeId() != TYPEID_PLAYER || !me->IsHostileTo(pWho) || !me->isInBackInMap(pWho, 5.0f))
return;
void MoveInLineOfSight(Unit* pWho)
{
if (me->GetAreaId() != AREA_SUNREAVER_PAVILION && me->GetAreaId() != AREA_SILVER_COVENANT_PAVILION)
return;
if (pWho->HasAura(SPELL_TRESPASSER_H) || pWho->HasAura(SPELL_TRESPASSER_A))
return;
if (!pWho || pWho->GetTypeId() != TYPEID_PLAYER || !me->IsHostileTo(pWho) || !me->isInBackInMap(pWho, 5.0f))
return;
if (pWho->ToPlayer()->GetTeamId() == TEAM_ALLIANCE)
pWho->CastSpell(pWho, SPELL_TRESPASSER_H, true);
else
pWho->CastSpell(pWho, SPELL_TRESPASSER_A, true);
if (pWho->HasAura(SPELL_TRESPASSER_H) || pWho->HasAura(SPELL_TRESPASSER_A))
return;
if (pWho->ToPlayer()->GetTeamId() == TEAM_ALLIANCE)
pWho->CastSpell(pWho, SPELL_TRESPASSER_H, true);
else
pWho->CastSpell(pWho, SPELL_TRESPASSER_A, true);
}
};
CreatureAI *GetAI(Creature *creature) const
{
return new npc_guardian_pavilionAI(creature);
}
};
CreatureAI* GetAI_npc_guardian_pavilion(Creature* pCreature)
{
return new npc_guardian_pavilionAI (pCreature);
}
void AddSC_icecrown()
{
Script *newscript;
newscript = new Script;
newscript->Name = "npc_arete";
newscript->pGossipHello = &GossipHello_npc_arete;
newscript->pGossipSelect = &GossipSelect_npc_arete;
newscript->RegisterSelf();
newscript = new Script;
newscript->Name = "npc_dame_evniki_kapsalis";
newscript->pGossipHello = &GossipHello_npc_dame_evniki_kapsalis;
newscript->pGossipSelect = &GossipSelect_npc_dame_evniki_kapsalis;
newscript->RegisterSelf();
newscript = new Script;
newscript->Name = "npc_squire_david";
newscript->pGossipHello = &GossipHello_npc_squire_david;
newscript->pGossipSelect = &GossipSelect_npc_squire_david;
newscript->RegisterSelf();
newscript = new Script;
newscript->Name = "npc_argent_valiant";
newscript->GetAI = &GetAI_npc_argent_valiant;
newscript->RegisterSelf();
newscript = new Script;
newscript->Name = "npc_argent_tournament_post";
newscript->GetAI = &GetAI_npc_argent_tournament_post;
newscript->RegisterSelf();
newscript = new Script;
newscript->Name = "npc_alorah_and_grimmin";
newscript->GetAI = &GetAI_npc_alorah_and_grimmin;
newscript->RegisterSelf();
newscript = new Script;
newscript->Name = "npc_guardian_pavilion";
newscript->GetAI = &GetAI_npc_guardian_pavilion;
newscript->RegisterSelf();
new npc_arete;
new npc_dame_evniki_kapsalis;
new npc_squire_david;
new npc_argent_valiant;
new npc_argent_tournament_post;
new npc_alorah_and_grimmin;
new npc_guardian_pavilion;
}
+295 -291
View File
@@ -48,118 +48,124 @@ enum eRainspeaker
FACTION_ESCORTEE_H = 775
};
struct npc_injured_rainspeaker_oracleAI : public npc_escortAI
class npc_injured_rainspeaker_oracle : public CreatureScript
{
npc_injured_rainspeaker_oracleAI(Creature* c) : npc_escortAI(c) { c_guid = c->GetGUID(); }
public:
npc_injured_rainspeaker_oracle() : CreatureScript("npc_injured_rainspeaker_oracle") { }
uint64 c_guid;
void Reset()
struct npc_injured_rainspeaker_oracleAI : public npc_escortAI
{
me->RestoreFaction();
// if we will have other way to assign this to only one npc remove this part
if (GUID_LOPART(me->GetGUID()) != 101030)
npc_injured_rainspeaker_oracleAI(Creature* c) : npc_escortAI(c) { c_guid = c->GetGUID(); }
uint64 c_guid;
void Reset()
{
me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_QUESTGIVER);
me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
me->RestoreFaction();
// if we will have other way to assign this to only one npc remove this part
if (GUID_LOPART(me->GetGUID()) != 101030)
{
me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_QUESTGIVER);
me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
}
}
}
void WaypointReached(uint32 i)
{
Player* pPlayer = GetPlayerForEscort();
if (!pPlayer)
return;
switch(i)
void WaypointReached(uint32 i)
{
case 1: SetRun(); break;
case 10:
case 11:
case 12:
case 13:
case 14:
case 15:
case 16:
case 17:
case 18:
me->RemoveUnitMovementFlag(MOVEMENTFLAG_SWIMMING);
me->RemoveUnitMovementFlag(MOVEMENTFLAG_JUMPING);
me->SetSpeed(MOVE_SWIM, 0.85f, true);
me->AddUnitMovementFlag(MOVEMENTFLAG_SWIMMING | MOVEMENTFLAG_LEVITATING);
break;
case 19:
me->SetUnitMovementFlags(MOVEMENTFLAG_JUMPING);
break;
case 28:
Player* pPlayer = GetPlayerForEscort();
if (!pPlayer)
return;
switch(i)
{
case 1: SetRun(); break;
case 10:
case 11:
case 12:
case 13:
case 14:
case 15:
case 16:
case 17:
case 18:
me->RemoveUnitMovementFlag(MOVEMENTFLAG_SWIMMING);
me->RemoveUnitMovementFlag(MOVEMENTFLAG_JUMPING);
me->SetSpeed(MOVE_SWIM, 0.85f, true);
me->AddUnitMovementFlag(MOVEMENTFLAG_SWIMMING | MOVEMENTFLAG_LEVITATING);
break;
case 19:
me->SetUnitMovementFlags(MOVEMENTFLAG_JUMPING);
break;
case 28:
if (Player* pPlayer = GetPlayerForEscort())
pPlayer->GroupEventHappens(QUEST_FORTUNATE_MISUNDERSTANDINGS, me);
// me->RestoreFaction();
DoScriptText(SAY_END_IRO,me);
SetRun(false);
break;
}
}
void JustDied(Unit* /*killer*/)
{
if (!HasEscortState(STATE_ESCORT_ESCORTING))
return;
if (Player* pPlayer = GetPlayerForEscort())
pPlayer->GroupEventHappens(QUEST_FORTUNATE_MISUNDERSTANDINGS, me);
// me->RestoreFaction();
DoScriptText(SAY_END_IRO,me);
SetRun(false);
break;
{
if (pPlayer->GetQuestStatus(QUEST_FORTUNATE_MISUNDERSTANDINGS) != QUEST_STATUS_COMPLETE)
pPlayer->FailQuest(QUEST_FORTUNATE_MISUNDERSTANDINGS);
}
}
};
bool OnGossipHello(Player* pPlayer, Creature* pCreature)
{
if (pCreature->isQuestGiver())
pPlayer->PrepareQuestMenu(pCreature->GetGUID());
if (pPlayer->GetQuestStatus(QUEST_FORTUNATE_MISUNDERSTANDINGS) == QUEST_STATUS_INCOMPLETE)
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1);
pPlayer->SEND_GOSSIP_MENU(pPlayer->GetGossipTextId(pCreature), pCreature->GetGUID());
return true;
}
void JustDied(Unit* /*killer*/)
bool OnGossipSelect(Player* pPlayer, Creature* pCreature, uint32 /*uiSender*/, uint32 uiAction)
{
if (!HasEscortState(STATE_ESCORT_ESCORTING))
return;
if (Player* pPlayer = GetPlayerForEscort())
if (uiAction == GOSSIP_ACTION_INFO_DEF+1)
{
if (pPlayer->GetQuestStatus(QUEST_FORTUNATE_MISUNDERSTANDINGS) != QUEST_STATUS_COMPLETE)
pPlayer->FailQuest(QUEST_FORTUNATE_MISUNDERSTANDINGS);
CAST_AI(npc_escortAI, (pCreature->AI()))->Start(true, false, pPlayer->GetGUID());
CAST_AI(npc_escortAI, (pCreature->AI()))->SetMaxPlayerDistance(35.0f);
pCreature->SetUnitMovementFlags(MOVEMENTFLAG_JUMPING);
DoScriptText(SAY_START_IRO, pCreature);
switch (pPlayer->GetTeam()){
case ALLIANCE:
pCreature->setFaction(FACTION_ESCORTEE_A);
break;
case HORDE:
pCreature->setFaction(FACTION_ESCORTEE_H);
break;
}
}
return true;
}
bool OnQuestAccept(Player* /*pPlayer*/, Creature* pCreature, Quest const * /*_Quest*/)
{
DoScriptText(SAY_QUEST_ACCEPT_IRO, pCreature);
return false;
}
CreatureAI *GetAI(Creature *creature) const
{
return new npc_injured_rainspeaker_oracleAI(creature);
}
};
bool GossipHello_npc_injured_rainspeaker_oracle(Player* pPlayer, Creature* pCreature)
{
if (pCreature->isQuestGiver())
pPlayer->PrepareQuestMenu(pCreature->GetGUID());
if (pPlayer->GetQuestStatus(QUEST_FORTUNATE_MISUNDERSTANDINGS) == QUEST_STATUS_INCOMPLETE)
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1);
pPlayer->SEND_GOSSIP_MENU(pPlayer->GetGossipTextId(pCreature), pCreature->GetGUID());
return true;
}
bool GossipSelect_npc_injured_rainspeaker_oracle(Player* pPlayer, Creature* pCreature, uint32 /*uiSender*/, uint32 uiAction)
{
if (uiAction == GOSSIP_ACTION_INFO_DEF+1)
{
CAST_AI(npc_escortAI, (pCreature->AI()))->Start(true, false, pPlayer->GetGUID());
CAST_AI(npc_escortAI, (pCreature->AI()))->SetMaxPlayerDistance(35.0f);
pCreature->SetUnitMovementFlags(MOVEMENTFLAG_JUMPING);
DoScriptText(SAY_START_IRO, pCreature);
switch (pPlayer->GetTeam()){
case ALLIANCE:
pCreature->setFaction(FACTION_ESCORTEE_A);
break;
case HORDE:
pCreature->setFaction(FACTION_ESCORTEE_H);
break;
}
}
return true;
}
bool QuestAccept_npc_injured_rainspeaker_oracle(Player* /*pPlayer*/, Creature* pCreature, Quest const * /*_Quest*/)
{
DoScriptText(SAY_QUEST_ACCEPT_IRO, pCreature);
return false;
}
CreatureAI* GetAI_npc_injured_rainspeaker_oracle(Creature* pCreature)
{
return new npc_injured_rainspeaker_oracleAI(pCreature);
}
/*######
## npc_vekjik
######*/
@@ -179,40 +185,46 @@ enum eVekjik
QUEST_MAKING_PEACE = 12573
};
bool GossipHello_npc_vekjik(Player* pPlayer, Creature* pCreature)
class npc_vekjik : public CreatureScript
{
if (pCreature->isQuestGiver())
pPlayer->PrepareQuestMenu(pCreature->GetGUID());
public:
npc_vekjik() : CreatureScript("npc_vekjik") { }
if (pPlayer->GetQuestStatus(QUEST_MAKING_PEACE) == QUEST_STATUS_INCOMPLETE)
bool OnGossipHello(Player* pPlayer, Creature* pCreature)
{
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_VEKJIK_ITEM1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1);
pPlayer->SEND_GOSSIP_MENU(GOSSIP_TEXTID_VEKJIK1, pCreature->GetGUID());
if (pCreature->isQuestGiver())
pPlayer->PrepareQuestMenu(pCreature->GetGUID());
if (pPlayer->GetQuestStatus(QUEST_MAKING_PEACE) == QUEST_STATUS_INCOMPLETE)
{
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_VEKJIK_ITEM1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1);
pPlayer->SEND_GOSSIP_MENU(GOSSIP_TEXTID_VEKJIK1, pCreature->GetGUID());
return true;
}
pPlayer->SEND_GOSSIP_MENU(pPlayer->GetGossipTextId(pCreature), pCreature->GetGUID());
return true;
}
pPlayer->SEND_GOSSIP_MENU(pPlayer->GetGossipTextId(pCreature), pCreature->GetGUID());
return true;
}
bool GossipSelect_npc_vekjik(Player* pPlayer, Creature* pCreature, uint32 /*uiSender*/, uint32 uiAction)
{
switch(uiAction)
bool OnGossipSelect(Player* pPlayer, Creature* pCreature, uint32 /*uiSender*/, uint32 uiAction)
{
case GOSSIP_ACTION_INFO_DEF+1:
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_VEKJIK_ITEM2, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+2);
pPlayer->SEND_GOSSIP_MENU(GOSSIP_TEXTID_VEKJIK2, pCreature->GetGUID());
break;
case GOSSIP_ACTION_INFO_DEF+2:
pPlayer->CLOSE_GOSSIP_MENU();
DoScriptText(SAY_TEXTID_VEKJIK1, pCreature, pPlayer);
pPlayer->AreaExploredOrEventHappens(QUEST_MAKING_PEACE);
pCreature->CastSpell(pPlayer, SPELL_FREANZYHEARTS_FURY, false);
break;
}
switch(uiAction)
{
case GOSSIP_ACTION_INFO_DEF+1:
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_VEKJIK_ITEM2, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+2);
pPlayer->SEND_GOSSIP_MENU(GOSSIP_TEXTID_VEKJIK2, pCreature->GetGUID());
break;
case GOSSIP_ACTION_INFO_DEF+2:
pPlayer->CLOSE_GOSSIP_MENU();
DoScriptText(SAY_TEXTID_VEKJIK1, pCreature, pPlayer);
pPlayer->AreaExploredOrEventHappens(QUEST_MAKING_PEACE);
pCreature->CastSpell(pPlayer, SPELL_FREANZYHEARTS_FURY, false);
break;
}
return true;
}
return true;
}
};
/*######
## avatar_of_freya
@@ -233,70 +245,82 @@ enum eFreya
GOSSIP_TEXTID_AVATAR3 = 13305
};
bool GossipHello_npc_avatar_of_freya(Player* pPlayer, Creature* pCreature)
class npc_avatar_of_freya : public CreatureScript
{
if (pCreature->isQuestGiver())
pPlayer->PrepareQuestMenu(pCreature->GetGUID());
public:
npc_avatar_of_freya() : CreatureScript("npc_avatar_of_freya") { }
if (pPlayer->GetQuestStatus(QUEST_FREYA_PACT) == QUEST_STATUS_INCOMPLETE)
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM_AOF1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1);
pPlayer->PlayerTalkClass->SendGossipMenu(GOSSIP_TEXTID_AVATAR1, pCreature->GetGUID());
return true;
}
bool GossipSelect_npc_avatar_of_freya(Player* pPlayer, Creature* pCreature, uint32 /*uiSender*/, uint32 uiAction)
{
switch (uiAction)
bool OnGossipHello(Player* pPlayer, Creature* pCreature)
{
case GOSSIP_ACTION_INFO_DEF+1:
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM_AOF2, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+2);
pPlayer->PlayerTalkClass->SendGossipMenu(GOSSIP_TEXTID_AVATAR2, pCreature->GetGUID());
break;
case GOSSIP_ACTION_INFO_DEF+2:
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM_AOF3, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+3);
pPlayer->PlayerTalkClass->SendGossipMenu(GOSSIP_TEXTID_AVATAR3, pCreature->GetGUID());
break;
case GOSSIP_ACTION_INFO_DEF+3:
pPlayer->CastSpell(pPlayer, SPELL_FREYA_CONVERSATION, true);
pPlayer->CLOSE_GOSSIP_MENU();
break;
}
return true;
}
if (pCreature->isQuestGiver())
pPlayer->PrepareQuestMenu(pCreature->GetGUID());
/*######
## npc_geezle
######*/
if (pPlayer->GetQuestStatus(QUEST_FREYA_PACT) == QUEST_STATUS_INCOMPLETE)
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM_AOF1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1);
struct npc_bushwhackerAI : public ScriptedAI
{
npc_bushwhackerAI(Creature* pCreature) : ScriptedAI(pCreature)
{
MoveToSummoner();
pPlayer->PlayerTalkClass->SendGossipMenu(GOSSIP_TEXTID_AVATAR1, pCreature->GetGUID());
return true;
}
void MoveToSummoner()
bool OnGossipSelect(Player* pPlayer, Creature* pCreature, uint32 /*uiSender*/, uint32 uiAction)
{
if (me->isSummon())
if (Unit* pSummoner = CAST_SUM(me)->GetSummoner())
if (pSummoner)
me->GetMotionMaster()->MovePoint(0,pSummoner->GetPositionX(),pSummoner->GetPositionY(),pSummoner->GetPositionZ());
}
void UpdateAI(const uint32 /*uiDiff*/)
{
if (!UpdateVictim())
return;
DoMeleeAttackIfReady();
switch (uiAction)
{
case GOSSIP_ACTION_INFO_DEF+1:
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM_AOF2, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+2);
pPlayer->PlayerTalkClass->SendGossipMenu(GOSSIP_TEXTID_AVATAR2, pCreature->GetGUID());
break;
case GOSSIP_ACTION_INFO_DEF+2:
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM_AOF3, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+3);
pPlayer->PlayerTalkClass->SendGossipMenu(GOSSIP_TEXTID_AVATAR3, pCreature->GetGUID());
break;
case GOSSIP_ACTION_INFO_DEF+3:
pPlayer->CastSpell(pPlayer, SPELL_FREYA_CONVERSATION, true);
pPlayer->CLOSE_GOSSIP_MENU();
break;
}
return true;
}
};
CreatureAI* GetAI_npc_bushwhacker(Creature* pCreature)
/*######
## npc_bushwhacker
######*/
class npc_bushwhacker : public CreatureScript
{
return new npc_bushwhackerAI(pCreature);
}
public:
npc_bushwhacker() : CreatureScript("npc_bushwhacker") { }
struct npc_bushwhackerAI : public ScriptedAI
{
npc_bushwhackerAI(Creature* pCreature) : ScriptedAI(pCreature)
{
MoveToSummoner();
}
void MoveToSummoner()
{
if (me->isSummon())
if (Unit* pSummoner = CAST_SUM(me)->GetSummoner())
if (pSummoner)
me->GetMotionMaster()->MovePoint(0,pSummoner->GetPositionX(),pSummoner->GetPositionY(),pSummoner->GetPositionZ());
}
void UpdateAI(const uint32 /*uiDiff*/)
{
if (!UpdateVictim())
return;
DoMeleeAttackIfReady();
}
};
CreatureAI *GetAI(Creature *creature) const
{
return new npc_bushwhackerAI(creature);
}
};
/*######
## npc_engineer_helice
@@ -318,132 +342,112 @@ enum eEnums
QUEST_DISASTER = 12688
};
struct npc_engineer_heliceAI : public npc_escortAI
class npc_engineer_helice : public CreatureScript
{
npc_engineer_heliceAI(Creature* pCreature) : npc_escortAI(pCreature) { }
uint32 m_uiChatTimer;
public:
npc_engineer_helice() : CreatureScript("npc_engineer_helice") { }
void WaypointReached(uint32 i)
{
Player* pPlayer = GetPlayerForEscort();
switch (i)
{
case 0:
DoScriptText(SAY_WP_2, me);
break;
case 1:
DoScriptText(SAY_WP_3, me);
me->CastSpell(5918.33, 5372.91, -98.770, SPELL_EXPLODE_CRYSTAL, true);
me->SummonGameObject(184743, 5918.33, 5372.91, -98.770, 0, 0, 0, 0, 0, TEMPSUMMON_MANUAL_DESPAWN); //approx 3 to 4 seconds
me->HandleEmoteCommand(EMOTE_ONESHOT_LAUGH);
break;
case 2:
DoScriptText(SAY_WP_4, me);
break;
case 7:
DoScriptText(SAY_WP_5, me);
break;
case 8:
me->CastSpell(5887.37, 5379.39, -91.289, SPELL_EXPLODE_CRYSTAL, true);
me->SummonGameObject(184743, 5887.37, 5379.39, -91.289, 0, 0, 0, 0, 0, TEMPSUMMON_MANUAL_DESPAWN); //approx 3 to 4 seconds
me->HandleEmoteCommand(EMOTE_ONESHOT_LAUGH);
break;
case 9:
DoScriptText(SAY_WP_6, me);
break;
case 13:
if (pPlayer)
{
pPlayer->GroupEventHappens(QUEST_DISASTER, me);
DoScriptText(SAY_WP_7, me);
}
break;
}
}
void Reset()
{
m_uiChatTimer = 4000;
}
void JustDied(Unit* /*pKiller*/)
struct npc_engineer_heliceAI : public npc_escortAI
{
Player* pPlayer = GetPlayerForEscort();
if (HasEscortState(STATE_ESCORT_ESCORTING))
{
if (pPlayer)
pPlayer->FailQuest(QUEST_DISASTER);
}
}
npc_engineer_heliceAI(Creature* pCreature) : npc_escortAI(pCreature) { }
uint32 m_uiChatTimer;
void UpdateAI(const uint32 uiDiff)
{
npc_escortAI::UpdateAI(uiDiff);
if (HasEscortState(STATE_ESCORT_ESCORTING))
{
if (m_uiChatTimer <= uiDiff)
{
m_uiChatTimer = 12000;
void WaypointReached(uint32 i)
{
Player* pPlayer = GetPlayerForEscort();
switch (i)
{
case 0:
DoScriptText(SAY_WP_2, me);
break;
case 1:
DoScriptText(SAY_WP_3, me);
me->CastSpell(5918.33, 5372.91, -98.770, SPELL_EXPLODE_CRYSTAL, true);
me->SummonGameObject(184743, 5918.33, 5372.91, -98.770, 0, 0, 0, 0, 0, TEMPSUMMON_MANUAL_DESPAWN); //approx 3 to 4 seconds
me->HandleEmoteCommand(EMOTE_ONESHOT_LAUGH);
break;
case 2:
DoScriptText(SAY_WP_4, me);
break;
case 7:
DoScriptText(SAY_WP_5, me);
break;
case 8:
me->CastSpell(5887.37, 5379.39, -91.289, SPELL_EXPLODE_CRYSTAL, true);
me->SummonGameObject(184743, 5887.37, 5379.39, -91.289, 0, 0, 0, 0, 0, TEMPSUMMON_MANUAL_DESPAWN); //approx 3 to 4 seconds
me->HandleEmoteCommand(EMOTE_ONESHOT_LAUGH);
break;
case 9:
DoScriptText(SAY_WP_6, me);
break;
case 13:
if (pPlayer)
{
pPlayer->GroupEventHappens(QUEST_DISASTER, me);
DoScriptText(SAY_WP_7, me);
}
break;
}
else
m_uiChatTimer -= uiDiff;
}
}
void Reset()
{
m_uiChatTimer = 4000;
}
void JustDied(Unit* /*pKiller*/)
{
Player* pPlayer = GetPlayerForEscort();
if (HasEscortState(STATE_ESCORT_ESCORTING))
{
if (pPlayer)
pPlayer->FailQuest(QUEST_DISASTER);
}
}
void UpdateAI(const uint32 uiDiff)
{
npc_escortAI::UpdateAI(uiDiff);
if (HasEscortState(STATE_ESCORT_ESCORTING))
{
if (m_uiChatTimer <= uiDiff)
{
m_uiChatTimer = 12000;
}
else
m_uiChatTimer -= uiDiff;
}
}
};
CreatureAI *GetAI(Creature *creature) const
{
return new npc_engineer_heliceAI(creature);
}
bool OnQuestAccept(Player* pPlayer, Creature* pCreature, const Quest* pQuest)
{
if (pQuest->GetQuestId() == QUEST_DISASTER)
{
if (npc_engineer_heliceAI* pEscortAI = CAST_AI(npc_engineer_heliceAI, pCreature->AI()))
{
pCreature->GetMotionMaster()->MoveJumpTo(0, 0.4, 0.4);
pCreature->setFaction(113);
pEscortAI->Start(false, false, pPlayer->GetGUID());
DoScriptText(SAY_WP_1, pCreature);
}
}
return true;
}
};
CreatureAI* GetAI_npc_engineer_helice(Creature* pCreature)
{
return new npc_engineer_heliceAI(pCreature);
}
bool QuestAccept_npc_engineer_helice(Player* pPlayer, Creature* pCreature, const Quest* pQuest)
{
if (pQuest->GetQuestId() == QUEST_DISASTER)
{
if (npc_engineer_heliceAI* pEscortAI = CAST_AI(npc_engineer_heliceAI, pCreature->AI()))
{
pCreature->GetMotionMaster()->MoveJumpTo(0, 0.4, 0.4);
pCreature->setFaction(113);
pEscortAI->Start(false, false, pPlayer->GetGUID());
DoScriptText(SAY_WP_1, pCreature);
}
}
return true;
}
void AddSC_sholazar_basin()
{
Script *newscript;
newscript = new Script;
newscript->Name = "npc_injured_rainspeaker_oracle";
newscript->GetAI = &GetAI_npc_injured_rainspeaker_oracle;
newscript->pGossipHello = &GossipHello_npc_injured_rainspeaker_oracle;
newscript->pGossipSelect = &GossipSelect_npc_injured_rainspeaker_oracle;
newscript->pQuestAccept = &QuestAccept_npc_injured_rainspeaker_oracle;
newscript->RegisterSelf();
newscript = new Script;
newscript->Name = "npc_vekjik";
newscript->pGossipHello = &GossipHello_npc_vekjik;
newscript->pGossipSelect = &GossipSelect_npc_vekjik;
newscript->RegisterSelf();
newscript = new Script;
newscript->Name = "npc_avatar_of_freya";
newscript->pGossipHello = &GossipHello_npc_avatar_of_freya;
newscript->pGossipSelect = &GossipSelect_npc_avatar_of_freya;
newscript->RegisterSelf();
newscript = new Script;
newscript->Name = "npc_bushwhacker";
newscript->GetAI = &GetAI_npc_bushwhacker;
newscript->RegisterSelf();
newscript = new Script;
newscript->Name = "npc_engineer_helice";
newscript->GetAI = &GetAI_npc_engineer_helice;
newscript->pQuestAccept = &QuestAccept_npc_engineer_helice;
newscript->RegisterSelf();
new npc_injured_rainspeaker_oracle;
new npc_vekjik;
new npc_avatar_of_freya;
new npc_bushwhacker;
new npc_engineer_helice;
}
+338 -334
View File
@@ -31,43 +31,49 @@ enum eAgnetta
FACTION_HOSTILE_AT1 = 45
};
struct npc_agnetta_tyrsdottarAI : public ScriptedAI
class npc_agnetta_tyrsdottar : public CreatureScript
{
npc_agnetta_tyrsdottarAI(Creature* pCreature) : ScriptedAI(pCreature) { }
public:
npc_agnetta_tyrsdottar() : CreatureScript("npc_agnetta_tyrsdottar") { }
void Reset()
struct npc_agnetta_tyrsdottarAI : public ScriptedAI
{
me->RestoreFaction();
npc_agnetta_tyrsdottarAI(Creature* pCreature) : ScriptedAI(pCreature) { }
void Reset()
{
me->RestoreFaction();
}
};
CreatureAI *GetAI(Creature *creature) const
{
return new npc_agnetta_tyrsdottarAI(creature);
}
bool OnGossipHello(Player* pPlayer, Creature* pCreature)
{
if (pPlayer->GetQuestStatus(QUEST_ITS_THAT_YOUR_GOBLIN) == QUEST_STATUS_INCOMPLETE)
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_AGNETTA, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1);
pPlayer->SEND_GOSSIP_MENU(13691, pCreature->GetGUID());
return true;
}
bool OnGossipSelect(Player* pPlayer, Creature* pCreature, uint32 /*uiSender*/, uint32 uiAction)
{
if (uiAction == GOSSIP_ACTION_INFO_DEF+1)
{
DoScriptText(SAY_AGGRO, pCreature);
pPlayer->CLOSE_GOSSIP_MENU();
pCreature->setFaction(FACTION_HOSTILE_AT1);
pCreature->AI()->AttackStart(pPlayer);
}
return true;
}
};
CreatureAI* GetAI_npc_agnetta_tyrsdottar(Creature* pCreature)
{
return new npc_agnetta_tyrsdottarAI(pCreature);
}
bool GossipHello_npc_agnetta_tyrsdottar(Player* pPlayer, Creature* pCreature)
{
if (pPlayer->GetQuestStatus(QUEST_ITS_THAT_YOUR_GOBLIN) == QUEST_STATUS_INCOMPLETE)
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_AGNETTA, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1);
pPlayer->SEND_GOSSIP_MENU(13691, pCreature->GetGUID());
return true;
}
bool GossipSelect_npc_agnetta_tyrsdottar(Player* pPlayer, Creature* pCreature, uint32 /*uiSender*/, uint32 uiAction)
{
if (uiAction == GOSSIP_ACTION_INFO_DEF+1)
{
DoScriptText(SAY_AGGRO, pCreature);
pPlayer->CLOSE_GOSSIP_MENU();
pCreature->setFaction(FACTION_HOSTILE_AT1);
pCreature->AI()->AttackStart(pPlayer);
}
return true;
}
/*######
## npc_frostborn_scout
######*/
@@ -81,38 +87,44 @@ enum eFrostbornScout
QUEST_MISSING_SCOUTS = 12864
};
bool GossipHello_npc_frostborn_scout(Player* pPlayer, Creature* pCreature)
class npc_frostborn_scout : public CreatureScript
{
public:
npc_frostborn_scout() : CreatureScript("npc_frostborn_scout") { }
if (pPlayer->GetQuestStatus(QUEST_MISSING_SCOUTS) == QUEST_STATUS_INCOMPLETE)
bool OnGossipHello(Player* pPlayer, Creature* pCreature)
{
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1);
pPlayer->PlayerTalkClass->SendGossipMenu(13611, pCreature->GetGUID());
if (pPlayer->GetQuestStatus(QUEST_MISSING_SCOUTS) == QUEST_STATUS_INCOMPLETE)
{
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1);
pPlayer->PlayerTalkClass->SendGossipMenu(13611, pCreature->GetGUID());
}
return true;
}
return true;
}
bool GossipSelect_npc_frostborn_scout(Player* pPlayer, Creature* pCreature, uint32 /*uiSender*/, uint32 uiAction)
{
switch (uiAction)
bool OnGossipSelect(Player* pPlayer, Creature* pCreature, uint32 /*uiSender*/, uint32 uiAction)
{
case GOSSIP_ACTION_INFO_DEF+1:
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM2, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+2);
pPlayer->PlayerTalkClass->SendGossipMenu(13612, pCreature->GetGUID());
break;
case GOSSIP_ACTION_INFO_DEF+2:
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM3, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+3);
pPlayer->PlayerTalkClass->SendGossipMenu(13613, pCreature->GetGUID());
break;
case GOSSIP_ACTION_INFO_DEF+3:
pPlayer->PlayerTalkClass->SendGossipMenu(13614, pCreature->GetGUID());
pPlayer->AreaExploredOrEventHappens(QUEST_MISSING_SCOUTS);
break;
}
switch (uiAction)
{
case GOSSIP_ACTION_INFO_DEF+1:
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM2, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+2);
pPlayer->PlayerTalkClass->SendGossipMenu(13612, pCreature->GetGUID());
break;
case GOSSIP_ACTION_INFO_DEF+2:
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM3, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+3);
pPlayer->PlayerTalkClass->SendGossipMenu(13613, pCreature->GetGUID());
break;
case GOSSIP_ACTION_INFO_DEF+3:
pPlayer->PlayerTalkClass->SendGossipMenu(13614, pCreature->GetGUID());
pPlayer->AreaExploredOrEventHappens(QUEST_MISSING_SCOUTS);
break;
}
return true;
}
return true;
}
};
/*######
## npc_thorim
@@ -133,42 +145,48 @@ enum eThorim
GOSSIP_TEXTID_THORIM4 = 13803
};
bool GossipHello_npc_thorim(Player* pPlayer, Creature* pCreature)
class npc_thorim : public CreatureScript
{
if (pCreature->isQuestGiver())
pPlayer->PrepareQuestMenu(pCreature->GetGUID());
public:
npc_thorim() : CreatureScript("npc_thorim") { }
if (pPlayer->GetQuestStatus(QUEST_SIBLING_RIVALRY) == QUEST_STATUS_INCOMPLETE) {
pPlayer->ADD_GOSSIP_ITEM(0, GOSSIP_HN, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1);
pPlayer->SEND_GOSSIP_MENU(GOSSIP_TEXTID_THORIM1, pCreature->GetGUID());
bool OnGossipHello(Player* pPlayer, Creature* pCreature)
{
if (pCreature->isQuestGiver())
pPlayer->PrepareQuestMenu(pCreature->GetGUID());
if (pPlayer->GetQuestStatus(QUEST_SIBLING_RIVALRY) == QUEST_STATUS_INCOMPLETE) {
pPlayer->ADD_GOSSIP_ITEM(0, GOSSIP_HN, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1);
pPlayer->SEND_GOSSIP_MENU(GOSSIP_TEXTID_THORIM1, pCreature->GetGUID());
return true;
}
return false;
}
bool OnGossipSelect(Player* pPlayer, Creature* pCreature, uint32 /*uiSender*/, uint32 uiAction)
{
switch (uiAction)
{
case GOSSIP_ACTION_INFO_DEF+1:
pPlayer->ADD_GOSSIP_ITEM(0, GOSSIP_SN1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+2);
pPlayer->SEND_GOSSIP_MENU(GOSSIP_TEXTID_THORIM2, pCreature->GetGUID());
break;
case GOSSIP_ACTION_INFO_DEF+2:
pPlayer->ADD_GOSSIP_ITEM(0, GOSSIP_SN2, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+3);
pPlayer->SEND_GOSSIP_MENU(GOSSIP_TEXTID_THORIM3, pCreature->GetGUID());
break;
case GOSSIP_ACTION_INFO_DEF+3:
pPlayer->ADD_GOSSIP_ITEM(0, GOSSIP_SN3, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+4);
pPlayer->SEND_GOSSIP_MENU(GOSSIP_TEXTID_THORIM4, pCreature->GetGUID());
break;
case GOSSIP_ACTION_INFO_DEF+4:
pPlayer->CLOSE_GOSSIP_MENU();
pPlayer->CompleteQuest(QUEST_SIBLING_RIVALRY);
break;
}
return true;
}
return false;
}
bool GossipSelect_npc_thorim(Player* pPlayer, Creature* pCreature, uint32 /*uiSender*/, uint32 uiAction)
{
switch (uiAction)
{
case GOSSIP_ACTION_INFO_DEF+1:
pPlayer->ADD_GOSSIP_ITEM(0, GOSSIP_SN1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+2);
pPlayer->SEND_GOSSIP_MENU(GOSSIP_TEXTID_THORIM2, pCreature->GetGUID());
break;
case GOSSIP_ACTION_INFO_DEF+2:
pPlayer->ADD_GOSSIP_ITEM(0, GOSSIP_SN2, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+3);
pPlayer->SEND_GOSSIP_MENU(GOSSIP_TEXTID_THORIM3, pCreature->GetGUID());
break;
case GOSSIP_ACTION_INFO_DEF+3:
pPlayer->ADD_GOSSIP_ITEM(0, GOSSIP_SN3, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+4);
pPlayer->SEND_GOSSIP_MENU(GOSSIP_TEXTID_THORIM4, pCreature->GetGUID());
break;
case GOSSIP_ACTION_INFO_DEF+4:
pPlayer->CLOSE_GOSSIP_MENU();
pPlayer->CompleteQuest(QUEST_SIBLING_RIVALRY);
break;
}
return true;
}
};
/*######
## npc_goblin_prisoner
@@ -179,28 +197,34 @@ enum eGoblinPrisoner
GO_RUSTY_CAGE = 191544
};
struct npc_goblin_prisonerAI : public ScriptedAI
class npc_goblin_prisoner : public CreatureScript
{
npc_goblin_prisonerAI(Creature* pCreature) : ScriptedAI (pCreature){}
public:
npc_goblin_prisoner() : CreatureScript("npc_goblin_prisoner") { }
void Reset()
struct npc_goblin_prisonerAI : public ScriptedAI
{
me->SetReactState(REACT_PASSIVE);
npc_goblin_prisonerAI(Creature* pCreature) : ScriptedAI (pCreature){}
if (GameObject* pGO = me->FindNearestGameObject(GO_RUSTY_CAGE,5.0f))
void Reset()
{
if (pGO->GetGoState() == GO_STATE_ACTIVE)
pGO->SetGoState(GO_STATE_READY);
me->SetReactState(REACT_PASSIVE);
if (GameObject* pGO = me->FindNearestGameObject(GO_RUSTY_CAGE,5.0f))
{
if (pGO->GetGoState() == GO_STATE_ACTIVE)
pGO->SetGoState(GO_STATE_READY);
}
}
};
CreatureAI *GetAI(Creature *creature) const
{
return new npc_goblin_prisonerAI(creature);
}
};
CreatureAI* GetAI_npc_goblin_prisoner(Creature* pCreature)
{
return new npc_goblin_prisonerAI(pCreature);
}
/*######
## npc_victorious_challenger
######*/
@@ -216,80 +240,86 @@ enum eVictoriousChallenger
SPELL_REND_VC = 11977
};
struct npc_victorious_challengerAI : public ScriptedAI
class npc_victorious_challenger : public CreatureScript
{
npc_victorious_challengerAI(Creature* pCreature) : ScriptedAI(pCreature) {}
public:
npc_victorious_challenger() : CreatureScript("npc_victorious_challenger") { }
uint32 SunderArmorTimer;
uint32 RendTimer;
void Reset()
struct npc_victorious_challengerAI : public ScriptedAI
{
me->RestoreFaction();
npc_victorious_challengerAI(Creature* pCreature) : ScriptedAI(pCreature) {}
SunderArmorTimer = 10000;
RendTimer = 15000;
}
uint32 SunderArmorTimer;
uint32 RendTimer;
void UpdateAI(const uint32 diff)
{
//Return since we have no target
if (!UpdateVictim())
return;
if (RendTimer < diff)
void Reset()
{
DoCast(me->getVictim(), SPELL_REND_VC, true);
RendTimer = 15000;
}else RendTimer -= diff;
me->RestoreFaction();
if (SunderArmorTimer < diff)
{
DoCast(me->getVictim(), SPELL_SUNDER_ARMOR, true);
SunderArmorTimer = 10000;
}else SunderArmorTimer -= diff;
RendTimer = 15000;
}
DoMeleeAttackIfReady();
void UpdateAI(const uint32 diff)
{
//Return since we have no target
if (!UpdateVictim())
return;
if (RendTimer < diff)
{
DoCast(me->getVictim(), SPELL_REND_VC, true);
RendTimer = 15000;
}else RendTimer -= diff;
if (SunderArmorTimer < diff)
{
DoCast(me->getVictim(), SPELL_SUNDER_ARMOR, true);
SunderArmorTimer = 10000;
}else SunderArmorTimer -= diff;
DoMeleeAttackIfReady();
}
void KilledUnit(Unit* /*victim*/)
{
me->RestoreFaction();
}
};
bool OnGossipHello(Player* pPlayer, Creature* pCreature)
{
if (pCreature->isQuestGiver())
pPlayer->PrepareQuestMenu(pCreature->GetGUID());
if (pPlayer->GetQuestStatus(QUEST_TAKING_ALL_CHALLENGERS) == QUEST_STATUS_INCOMPLETE || pPlayer->GetQuestStatus(QUEST_DEFENDING_YOUR_TITLE) == QUEST_STATUS_INCOMPLETE)
{
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_CHALLENGER, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1);
pPlayer->SEND_GOSSIP_MENU(pPlayer->GetGossipTextId(pCreature), pCreature->GetGUID());
return true;
}
return false;
}
void KilledUnit(Unit* /*victim*/)
bool OnGossipSelect(Player* pPlayer, Creature* pCreature, uint32 /*uiSender*/, uint32 uiAction)
{
me->RestoreFaction();
}
if (uiAction == GOSSIP_ACTION_INFO_DEF+1)
{
pPlayer->CLOSE_GOSSIP_MENU();
pCreature->setFaction(14);
pCreature->AI()->AttackStart(pPlayer);
}
};
bool GossipHello_npc_victorious_challenger(Player* pPlayer, Creature* pCreature)
{
if (pCreature->isQuestGiver())
pPlayer->PrepareQuestMenu(pCreature->GetGUID());
if (pPlayer->GetQuestStatus(QUEST_TAKING_ALL_CHALLENGERS) == QUEST_STATUS_INCOMPLETE || pPlayer->GetQuestStatus(QUEST_DEFENDING_YOUR_TITLE) == QUEST_STATUS_INCOMPLETE)
{
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_CHALLENGER, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1);
pPlayer->SEND_GOSSIP_MENU(pPlayer->GetGossipTextId(pCreature), pCreature->GetGUID());
return true;
}
return false;
}
bool GossipSelect_npc_victorious_challenger(Player* pPlayer, Creature* pCreature, uint32 /*uiSender*/, uint32 uiAction)
{
if (uiAction == GOSSIP_ACTION_INFO_DEF+1)
CreatureAI *GetAI(Creature *creature) const
{
pPlayer->CLOSE_GOSSIP_MENU();
pCreature->setFaction(14);
pCreature->AI()->AttackStart(pPlayer);
return new npc_victorious_challengerAI(creature);
}
return true;
}
CreatureAI* GetAI_npc_victorious_challenger(Creature* pCreature)
{
return new npc_victorious_challengerAI(pCreature);
}
};
/*######
## npc_loklira_crone
@@ -309,43 +339,49 @@ enum eLokliraCrone
GOSSIP_TEXTID_LOK3 = 13780
};
bool GossipHello_npc_loklira_crone(Player* pPlayer, Creature* pCreature)
class npc_loklira_crone : public CreatureScript
{
if (pCreature->isQuestGiver())
pPlayer->PrepareQuestMenu(pCreature->GetGUID());
public:
npc_loklira_crone() : CreatureScript("npc_loklira_crone") { }
if (pPlayer->GetQuestStatus(QUEST_HYLDSMEET) == QUEST_STATUS_INCOMPLETE)
bool OnGossipHello(Player* pPlayer, Creature* pCreature)
{
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_LOKLIRACRONE, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1);
pPlayer->SEND_GOSSIP_MENU(pPlayer->GetGossipTextId(pCreature), pCreature->GetGUID());
if (pCreature->isQuestGiver())
pPlayer->PrepareQuestMenu(pCreature->GetGUID());
if (pPlayer->GetQuestStatus(QUEST_HYLDSMEET) == QUEST_STATUS_INCOMPLETE)
{
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_LOKLIRACRONE, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1);
pPlayer->SEND_GOSSIP_MENU(pPlayer->GetGossipTextId(pCreature), pCreature->GetGUID());
return true;
}
return false;
}
bool OnGossipSelect(Player* pPlayer, Creature* pCreature, uint32 /*uiSender*/, uint32 uiAction)
{
switch (uiAction)
{
case GOSSIP_ACTION_INFO_DEF+1:
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_LOKLIRACRONE1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+2);
pPlayer->SEND_GOSSIP_MENU(GOSSIP_TEXTID_LOK1, pCreature->GetGUID());
break;
case GOSSIP_ACTION_INFO_DEF+2:
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_LOKLIRACRONE2, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+3);
pPlayer->SEND_GOSSIP_MENU(GOSSIP_TEXTID_LOK2, pCreature->GetGUID());
break;
case GOSSIP_ACTION_INFO_DEF+3:
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_LOKLIRACRONE3, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+4);
pPlayer->SEND_GOSSIP_MENU(GOSSIP_TEXTID_LOK3, pCreature->GetGUID());
break;
case GOSSIP_ACTION_INFO_DEF+4:
pPlayer->CLOSE_GOSSIP_MENU();
pPlayer->CompleteQuest(QUEST_HYLDSMEET);
break;
}
return true;
}
return false;
}
bool GossipSelect_npc_loklira_crone(Player* pPlayer, Creature* pCreature, uint32 /*uiSender*/, uint32 uiAction)
{
switch (uiAction)
{
case GOSSIP_ACTION_INFO_DEF+1:
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_LOKLIRACRONE1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+2);
pPlayer->SEND_GOSSIP_MENU(GOSSIP_TEXTID_LOK1, pCreature->GetGUID());
break;
case GOSSIP_ACTION_INFO_DEF+2:
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_LOKLIRACRONE2, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+3);
pPlayer->SEND_GOSSIP_MENU(GOSSIP_TEXTID_LOK2, pCreature->GetGUID());
break;
case GOSSIP_ACTION_INFO_DEF+3:
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_LOKLIRACRONE3, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+4);
pPlayer->SEND_GOSSIP_MENU(GOSSIP_TEXTID_LOK3, pCreature->GetGUID());
break;
case GOSSIP_ACTION_INFO_DEF+4:
pPlayer->CLOSE_GOSSIP_MENU();
pPlayer->CompleteQuest(QUEST_HYLDSMEET);
break;
}
return true;
}
};
/////////////////////
///npc_injured_goblin
@@ -360,85 +396,91 @@ enum eInjuredGoblin
#define GOSSIP_ITEM_1 "I am ready, lets get you out of here"
struct npc_injured_goblinAI : public npc_escortAI
class npc_injured_goblin : public CreatureScript
{
npc_injured_goblinAI(Creature* pCreature) : npc_escortAI(pCreature) { }
public:
npc_injured_goblin() : CreatureScript("npc_injured_goblin") { }
void WaypointReached(uint32 i)
struct npc_injured_goblinAI : public npc_escortAI
{
Player* pPlayer = GetPlayerForEscort();
switch (i)
npc_injured_goblinAI(Creature* pCreature) : npc_escortAI(pCreature) { }
void WaypointReached(uint32 i)
{
case 26:
DoScriptText(SAY_END_WP_REACHED, me, pPlayer);
break;
case 27:
if (pPlayer)
pPlayer->GroupEventHappens(QUEST_BITTER_DEPARTURE, me);
break;
Player* pPlayer = GetPlayerForEscort();
switch (i)
{
case 26:
DoScriptText(SAY_END_WP_REACHED, me, pPlayer);
break;
case 27:
if (pPlayer)
pPlayer->GroupEventHappens(QUEST_BITTER_DEPARTURE, me);
break;
}
}
void EnterCombat(Unit* /*pWho*/) {}
void Reset() {}
void JustDied(Unit* /*pKiller*/)
{
Player* pPlayer = GetPlayerForEscort();
if (HasEscortState(STATE_ESCORT_ESCORTING) && pPlayer)
pPlayer->FailQuest(QUEST_BITTER_DEPARTURE);
}
void UpdateAI(const uint32 uiDiff)
{
npc_escortAI::UpdateAI(uiDiff);
if (!UpdateVictim())
return;
DoMeleeAttackIfReady();
}
};
CreatureAI *GetAI(Creature *creature) const
{
return new npc_injured_goblinAI(creature);
}
void EnterCombat(Unit* /*pWho*/) {}
void Reset() {}
void JustDied(Unit* /*pKiller*/)
bool OnGossipHello(Player* pPlayer, Creature* pCreature)
{
Player* pPlayer = GetPlayerForEscort();
if (HasEscortState(STATE_ESCORT_ESCORTING) && pPlayer)
pPlayer->FailQuest(QUEST_BITTER_DEPARTURE);
if (pCreature->isQuestGiver())
pPlayer->PrepareQuestMenu(pCreature->GetGUID());
if (pPlayer->GetQuestStatus(QUEST_BITTER_DEPARTURE) == QUEST_STATUS_INCOMPLETE)
{
pPlayer->ADD_GOSSIP_ITEM(0, GOSSIP_ITEM_1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1);
pPlayer->PlayerTalkClass->SendGossipMenu(9999999, pCreature->GetGUID());
}
else
pPlayer->SEND_GOSSIP_MENU(999999, pCreature->GetGUID());
return true;
}
void UpdateAI(const uint32 uiDiff)
bool OnQuestAccept(Player* /*pPlayer*/, Creature* pCreature, Quest const *quest)
{
npc_escortAI::UpdateAI(uiDiff);
if (!UpdateVictim())
return;
DoMeleeAttackIfReady();
if (quest->GetQuestId() == QUEST_BITTER_DEPARTURE)
DoScriptText(SAY_QUEST_ACCEPT, pCreature);
return false;
}
bool OnGossipSelect(Player* pPlayer, Creature* pCreature, uint32 /*uiSender*/, uint32 uiAction)
{
npc_escortAI* pEscortAI = CAST_AI(npc_injured_goblinAI, pCreature->AI());
if (uiAction == GOSSIP_ACTION_INFO_DEF+1)
{
pEscortAI->Start(true, true, pPlayer->GetGUID());
pCreature->setFaction(113);
}
return true;
}
};
CreatureAI* GetAI_npc_injured_goblin(Creature* pCreature)
{
return new npc_injured_goblinAI(pCreature);
}
bool GossipHello_npc_injured_goblin(Player* pPlayer, Creature* pCreature)
{
if (pCreature->isQuestGiver())
pPlayer->PrepareQuestMenu(pCreature->GetGUID());
if (pPlayer->GetQuestStatus(QUEST_BITTER_DEPARTURE) == QUEST_STATUS_INCOMPLETE)
{
pPlayer->ADD_GOSSIP_ITEM(0, GOSSIP_ITEM_1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1);
pPlayer->PlayerTalkClass->SendGossipMenu(9999999, pCreature->GetGUID());
}
else
pPlayer->SEND_GOSSIP_MENU(999999, pCreature->GetGUID());
return true;
}
bool QuestAccept_npc_injured_goblin(Player* /*pPlayer*/, Creature* pCreature, Quest const *quest)
{
if (quest->GetQuestId() == QUEST_BITTER_DEPARTURE)
DoScriptText(SAY_QUEST_ACCEPT, pCreature);
return false;
}
bool GossipSelect_npc_injured_goblin(Player* pPlayer, Creature* pCreature, uint32 /*uiSender*/, uint32 uiAction)
{
npc_escortAI* pEscortAI = CAST_AI(npc_injured_goblinAI, pCreature->AI());
if (uiAction == GOSSIP_ACTION_INFO_DEF+1)
{
pEscortAI->Start(true, true, pPlayer->GetGUID());
pCreature->setFaction(113);
}
return true;
}
/*######
## npc_roxi_ramrocket
######*/
@@ -446,91 +488,53 @@ bool GossipSelect_npc_injured_goblin(Player* pPlayer, Creature* pCreature, uint3
#define SPELL_MECHANO_HOG 60866
#define SPELL_MEKGINEERS_CHOPPER 60867
bool GossipHello_npc_roxi_ramrocket(Player* pPlayer, Creature* pCreature)
class npc_roxi_ramrocket : public CreatureScript
{
//Quest Menu
if (pCreature->isQuestGiver())
pPlayer->PrepareQuestMenu(pCreature->GetGUID());
public:
npc_roxi_ramrocket() : CreatureScript("npc_roxi_ramrocket") { }
//Trainer Menu
if( pCreature->isTrainer() )
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_TRAINER, GOSSIP_TEXT_TRAIN, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_TRAIN);
//Vendor Menu
if( pCreature->isVendor() )
if(pPlayer->HasSpell(SPELL_MECHANO_HOG) || pPlayer->HasSpell(SPELL_MEKGINEERS_CHOPPER))
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_VENDOR, GOSSIP_TEXT_BROWSE_GOODS, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_TRADE);
pPlayer->SEND_GOSSIP_MENU(pPlayer->GetGossipTextId(pCreature), pCreature->GetGUID());
return true;
}
bool GossipSelect_npc_roxi_ramrocket(Player* pPlayer, Creature* pCreature, uint32 sender, uint32 action )
{
switch(action)
bool OnGossipHello(Player* pPlayer, Creature* pCreature)
{
case GOSSIP_ACTION_TRAIN:
pPlayer->SEND_TRAINERLIST( pCreature->GetGUID() );
break;
case GOSSIP_ACTION_TRADE:
pPlayer->SEND_VENDORLIST( pCreature->GetGUID() );
break;
//Quest Menu
if (pCreature->isQuestGiver())
pPlayer->PrepareQuestMenu(pCreature->GetGUID());
//Trainer Menu
if( pCreature->isTrainer() )
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_TRAINER, GOSSIP_TEXT_TRAIN, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_TRAIN);
//Vendor Menu
if( pCreature->isVendor() )
if(pPlayer->HasSpell(SPELL_MECHANO_HOG) || pPlayer->HasSpell(SPELL_MEKGINEERS_CHOPPER))
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_VENDOR, GOSSIP_TEXT_BROWSE_GOODS, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_TRADE);
pPlayer->SEND_GOSSIP_MENU(pPlayer->GetGossipTextId(pCreature), pCreature->GetGUID());
return true;
}
return true;
}
bool OnGossipSelect(Player* pPlayer, Creature* pCreature, uint32 sender, uint32 action )
{
switch(action)
{
case GOSSIP_ACTION_TRAIN:
pPlayer->SEND_TRAINERLIST( pCreature->GetGUID() );
break;
case GOSSIP_ACTION_TRADE:
pPlayer->SEND_VENDORLIST( pCreature->GetGUID() );
break;
}
return true;
}
};
void AddSC_storm_peaks()
{
Script* newscript;
newscript = new Script;
newscript->Name = "npc_agnetta_tyrsdottar";
newscript->GetAI = &GetAI_npc_agnetta_tyrsdottar;
newscript->pGossipHello = &GossipHello_npc_agnetta_tyrsdottar;
newscript->pGossipSelect = &GossipSelect_npc_agnetta_tyrsdottar;
newscript->RegisterSelf();
newscript = new Script;
newscript->Name = "npc_frostborn_scout";
newscript->pGossipHello = &GossipHello_npc_frostborn_scout;
newscript->pGossipSelect = &GossipSelect_npc_frostborn_scout;
newscript->RegisterSelf();
newscript = new Script;
newscript->Name = "npc_thorim";
newscript->pGossipHello = &GossipHello_npc_thorim;
newscript->pGossipSelect = &GossipSelect_npc_thorim;
newscript->RegisterSelf();
newscript = new Script;
newscript->Name = "npc_goblin_prisoner";
newscript->GetAI = &GetAI_npc_goblin_prisoner;
newscript->RegisterSelf();
newscript = new Script;
newscript->Name = "npc_victorious_challenger";
newscript->GetAI = &GetAI_npc_victorious_challenger;
newscript->pGossipHello = &GossipHello_npc_victorious_challenger;
newscript->pGossipSelect = &GossipSelect_npc_victorious_challenger;
newscript->RegisterSelf();
newscript = new Script;
newscript->Name = "npc_loklira_crone";
newscript->pGossipHello = &GossipHello_npc_loklira_crone;
newscript->pGossipSelect = &GossipSelect_npc_loklira_crone;
newscript->RegisterSelf();
newscript = new Script;
newscript->Name = "npc_injured_goblin";
newscript->GetAI = &GetAI_npc_injured_goblin;
newscript->pGossipHello = &GossipHello_npc_injured_goblin;
newscript->pGossipSelect = &GossipSelect_npc_injured_goblin;
newscript->pQuestAccept = &QuestAccept_npc_injured_goblin;
newscript->RegisterSelf();
newscript = new Script;
newscript->Name = "npc_roxi_ramrocket";
newscript->pGossipHello = &GossipHello_npc_roxi_ramrocket;
newscript->pGossipSelect = &GossipSelect_npc_roxi_ramrocket;
newscript->RegisterSelf();
new npc_agnetta_tyrsdottar;
new npc_frostborn_scout;
new npc_thorim;
new npc_goblin_prisoner;
new npc_victorious_challenger;
new npc_loklira_crone;
new npc_injured_goblin;
new npc_roxi_ramrocket;
}
File diff suppressed because it is too large Load Diff