*Add support for quest 9212 - patch provided by Lighguard
--HG-- branch : trunk
This commit is contained in:
@@ -0,0 +1 @@
|
||||
UPDATE creature_template SET Scriptname='npc_ranger_lilatha' WHERE entry=16295;
|
||||
@@ -17,7 +17,7 @@
|
||||
/* ScriptData
|
||||
SDName: Ghostlands
|
||||
SD%Complete: 100
|
||||
SDComment: Quest support: 9692. Obtain Budd's Guise of Zul'aman. Vendor Rathis Tomber
|
||||
SDComment: Quest support: 9692, 9212. Obtain Budd's Guise of Zul'aman. Vendor Rathis Tomber
|
||||
SDCategory: Ghostlands
|
||||
EndScriptData */
|
||||
|
||||
@@ -25,9 +25,11 @@ EndScriptData */
|
||||
npc_blood_knight_dawnstar
|
||||
npc_budd_nedreck
|
||||
npc_rathis_tomber
|
||||
npc_ranger_lilatha
|
||||
EndContentData */
|
||||
|
||||
#include "precompiled.h"
|
||||
#include "../../npc/npc_escortAI.h"
|
||||
|
||||
/*######
|
||||
## npc_blood_knight_dawnstar
|
||||
@@ -125,6 +127,209 @@ bool GOHello_gilded_brazier(Player *player, GameObject* _GO)
|
||||
return true;
|
||||
};
|
||||
|
||||
/*######
|
||||
## npc_ranger_lilatha
|
||||
######*/
|
||||
|
||||
#define SAY_START "Let's go."
|
||||
#define SAY_PROGRESS1 "$N, let's use the antechamber to the right."
|
||||
#define SAY_PROGRESS2 "I can see the light at the end of the tunnel!"
|
||||
#define SAY_PROGRESS3 "There's Farstrider Enclave now, $C. Not far to go... Look out! Troll ambush!!"
|
||||
#define SAY_END1 "Thank you for saving my life and bringing me back to safety, $N"
|
||||
#define SAY_END2 "Captain Helios, I've been rescued from the Amani Catacombs. Reporting for duty, sir!"
|
||||
#define CAPTAIN_ANSWER "Liatha, get someone to look at those injuries. Thank you for bringing her back safely."
|
||||
|
||||
#define QUEST_ESCAPE_FROM_THE_CATACOMBS 9212
|
||||
#define GO_CAGE 181152
|
||||
#define NPC_CAPTAIN_HELIOS 16220
|
||||
|
||||
struct TRINITY_DLL_DECL npc_ranger_lilathaAI : public npc_escortAI
|
||||
{
|
||||
npc_ranger_lilathaAI(Creature *c) : npc_escortAI(c) {Reset();}
|
||||
|
||||
std::list<GameObject*> CageList;
|
||||
|
||||
void WaypointReached(uint32 i)
|
||||
{
|
||||
Unit* player = Unit::GetUnit((*m_creature), PlayerGUID);
|
||||
|
||||
if (!player)
|
||||
return;
|
||||
|
||||
switch(i)
|
||||
{
|
||||
case 0:
|
||||
{
|
||||
m_creature->SetUInt32Value(UNIT_FIELD_BYTES_1, 0);
|
||||
setCage(true);
|
||||
DoSay(SAY_START, LANG_UNIVERSAL, player);
|
||||
break;
|
||||
}
|
||||
case 5:
|
||||
DoSay(SAY_PROGRESS1, LANG_UNIVERSAL, player); break;
|
||||
case 11:
|
||||
DoSay(SAY_PROGRESS2, LANG_UNIVERSAL, player);
|
||||
m_creature->SetOrientation(4.762841);
|
||||
break;
|
||||
case 18:
|
||||
{
|
||||
DoSay(SAY_PROGRESS3, LANG_UNIVERSAL, player);
|
||||
Creature* Summ1 = m_creature->SummonCreature(16342, 7627.083984, -7532.538086, 152.128616, 1.082733, TEMPSUMMON_DEAD_DESPAWN, 0);
|
||||
Creature* Summ2 = m_creature->SummonCreature(16343, 7620.432129, -7532.550293, 152.454865, 0.827478, TEMPSUMMON_DEAD_DESPAWN, 0);
|
||||
Summ1->Attack(m_creature, true);
|
||||
Summ2->Attack(player, true);
|
||||
m_creature->AI()->AttackStart(Summ1);
|
||||
break;
|
||||
}
|
||||
case 19:
|
||||
m_creature->SetSpeed(MOVE_RUN, 1.5f); break;
|
||||
case 25:
|
||||
m_creature->SetSpeed(MOVE_WALK, 1.0f); break;
|
||||
case 30:
|
||||
if (player && player->GetTypeId() == TYPEID_PLAYER)
|
||||
((Player*)player)->GroupEventHappens(QUEST_ESCAPE_FROM_THE_CATACOMBS,m_creature);
|
||||
break;
|
||||
case 32:
|
||||
m_creature->SetOrientation(2.978281);
|
||||
DoSay(SAY_END1, LANG_UNIVERSAL, player);
|
||||
break;
|
||||
case 33:
|
||||
m_creature->SetOrientation(5.858011);
|
||||
DoSay(SAY_END2, LANG_UNIVERSAL, player);
|
||||
captainAnswer();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void Aggro(Unit* who) {}
|
||||
|
||||
void Reset()
|
||||
{
|
||||
if (!IsBeingEscorted)
|
||||
m_creature->setFaction(1602);
|
||||
setCage(false);
|
||||
}
|
||||
|
||||
void JustDied(Unit* killer)
|
||||
{
|
||||
if (PlayerGUID)
|
||||
{
|
||||
Unit* player = Unit::GetUnit((*m_creature), PlayerGUID);
|
||||
if (player)
|
||||
((Player*)player)->FailQuest(QUEST_ESCAPE_FROM_THE_CATACOMBS);
|
||||
}
|
||||
}
|
||||
|
||||
void UpdateAI(const uint32 diff)
|
||||
{
|
||||
npc_escortAI::UpdateAI(diff);
|
||||
}
|
||||
|
||||
void setCage(bool open)
|
||||
{
|
||||
CellPair pair(Trinity::ComputeCellPair(m_creature->GetPositionX(), m_creature->GetPositionY()));
|
||||
Cell cell(pair);
|
||||
cell.data.Part.reserved = ALL_DISTRICT;
|
||||
cell.SetNoCreate();
|
||||
|
||||
Trinity::AllGameObjectsWithEntryInGrid go_check(GO_CAGE);
|
||||
Trinity::GameObjectListSearcher<Trinity::AllGameObjectsWithEntryInGrid> go_search(CageList, go_check);
|
||||
TypeContainerVisitor
|
||||
<Trinity::GameObjectListSearcher<Trinity::AllGameObjectsWithEntryInGrid>, GridTypeMapContainer> go_visit(go_search);
|
||||
CellLock<GridReadGuard> cell_lock(cell, pair);
|
||||
cell_lock->Visit(cell_lock, go_visit, *(m_creature->GetMap()));
|
||||
|
||||
if (!CageList.empty())
|
||||
{
|
||||
for(std::list<GameObject*>::iterator itr = CageList.begin(); itr != CageList.end(); ++itr)
|
||||
{
|
||||
if( open )
|
||||
(*itr)->SetGoState(0);
|
||||
else
|
||||
(*itr)->SetGoState(1);
|
||||
}
|
||||
} else error_log("SD2 ERROR: CageList is empty!");
|
||||
}
|
||||
|
||||
void captainAnswer()
|
||||
{
|
||||
CellPair pair(Trinity::ComputeCellPair(m_creature->GetPositionX(), m_creature->GetPositionY()));
|
||||
Cell cell(pair);
|
||||
cell.data.Part.reserved = ALL_DISTRICT;
|
||||
cell.SetNoCreate();
|
||||
|
||||
std::list<Creature*> NPCList;
|
||||
|
||||
Trinity::AllCreaturesOfEntryInRange check(m_creature, NPC_CAPTAIN_HELIOS, 100);
|
||||
Trinity::CreatureListSearcher<Trinity::AllCreaturesOfEntryInRange> searcher(NPCList, check);
|
||||
TypeContainerVisitor<Trinity::CreatureListSearcher<Trinity::AllCreaturesOfEntryInRange>, GridTypeMapContainer> visitor(searcher);
|
||||
|
||||
CellLock<GridReadGuard> cell_lock(cell, pair);
|
||||
cell_lock->Visit(cell_lock, visitor, *(m_creature->GetMap()));
|
||||
|
||||
if (!NPCList.empty())
|
||||
{
|
||||
for(std::list<Creature*>::iterator itr = NPCList.begin(); itr != NPCList.end(); ++itr)
|
||||
{
|
||||
(*itr)->Say(CAPTAIN_ANSWER, LANG_UNIVERSAL, PlayerGUID);
|
||||
}
|
||||
}else error_log("SD2 ERROR: Captain Helios not found!");
|
||||
}
|
||||
};
|
||||
|
||||
bool QuestAccept_npc_ranger_lilatha(Player* player, Creature* creature, Quest const* quest)
|
||||
{
|
||||
if (quest->GetQuestId() == QUEST_ESCAPE_FROM_THE_CATACOMBS)
|
||||
{
|
||||
creature->setFaction(1603);
|
||||
((npc_escortAI*)(creature->AI()))->Start(true, true, false, player->GetGUID());
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
CreatureAI* GetAI_npc_ranger_lilathaAI(Creature *_Creature)
|
||||
{
|
||||
npc_ranger_lilathaAI* ranger_lilathaAI = new npc_ranger_lilathaAI(_Creature);
|
||||
|
||||
ranger_lilathaAI->AddWaypoint(0, 7545.07, -7359.87, 162.354, 4000); // Say0
|
||||
ranger_lilathaAI->AddWaypoint(1, 7550.048340, -7362.237793, 162.235657);
|
||||
ranger_lilathaAI->AddWaypoint(2, 7566.976074, -7364.315430, 161.738770);
|
||||
ranger_lilathaAI->AddWaypoint(3, 7578.830566, -7361.677734, 161.738770);
|
||||
ranger_lilathaAI->AddWaypoint(4, 7590.969238, -7359.053711, 162.257660);
|
||||
ranger_lilathaAI->AddWaypoint(5, 7598.354004, -7362.815430, 162.256683, 4000); // Say1
|
||||
ranger_lilathaAI->AddWaypoint(6, 7605.861328, -7380.424316, 161.937073);
|
||||
ranger_lilathaAI->AddWaypoint(7, 7605.295410, -7387.382813, 157.253998);
|
||||
ranger_lilathaAI->AddWaypoint(8, 7606.131836, -7393.893555, 156.941925);
|
||||
ranger_lilathaAI->AddWaypoint(9, 7615.207520, -7400.187012, 157.142639);
|
||||
ranger_lilathaAI->AddWaypoint(10, 7618.956543, -7402.652832, 158.202042);
|
||||
ranger_lilathaAI->AddWaypoint(11, 7636.850586, -7401.756836, 162.144791);
|
||||
ranger_lilathaAI->AddWaypoint(12, 7637.058105, -7404.944824, 162.206970, 4000);// Say2
|
||||
ranger_lilathaAI->AddWaypoint(13, 7636.910645, -7412.585449, 162.366425);
|
||||
ranger_lilathaAI->AddWaypoint(14, 7637.607910, -7425.591797, 162.630661);
|
||||
ranger_lilathaAI->AddWaypoint(15, 7637.816895, -7459.057129, 163.302704);
|
||||
ranger_lilathaAI->AddWaypoint(16, 7638.859863, -7470.902344, 162.517059);
|
||||
ranger_lilathaAI->AddWaypoint(17, 7641.395996, -7488.217285, 157.381287);
|
||||
ranger_lilathaAI->AddWaypoint(18, 7634.455566, -7505.451660, 154.682159);
|
||||
ranger_lilathaAI->AddWaypoint(19, 7631.906738, -7516.948730, 153.597382); // say3
|
||||
ranger_lilathaAI->AddWaypoint(20, 7622.231445, -7537.037598, 151.587112);
|
||||
ranger_lilathaAI->AddWaypoint(21, 7610.921875, -7550.670410, 149.639374);
|
||||
ranger_lilathaAI->AddWaypoint(22, 7598.229004, -7562.551758, 145.953888);
|
||||
ranger_lilathaAI->AddWaypoint(23, 7588.509277, -7577.755371, 148.294479);
|
||||
ranger_lilathaAI->AddWaypoint(24, 7567.339355, -7608.456055, 146.006485);
|
||||
ranger_lilathaAI->AddWaypoint(25, 7562.547852, -7617.417969, 148.097504);
|
||||
ranger_lilathaAI->AddWaypoint(26, 7561.508789, -7645.064453, 151.245163);
|
||||
ranger_lilathaAI->AddWaypoint(27, 7563.337402, -7654.652344, 151.227158);
|
||||
ranger_lilathaAI->AddWaypoint(28, 7565.533691, -7658.296387, 151.248886);
|
||||
ranger_lilathaAI->AddWaypoint(29, 7571.155762, -7659.118652, 151.244568);
|
||||
ranger_lilathaAI->AddWaypoint(30, 7579.119629, -7662.213867, 151.651505);
|
||||
ranger_lilathaAI->AddWaypoint(31, 7603.768066, -7667.000488, 153.997726);
|
||||
ranger_lilathaAI->AddWaypoint(32, 7603.768066, -7667.000488, 153.997726, 4000); // Say4 & Set orientation
|
||||
ranger_lilathaAI->AddWaypoint(33, 7603.768066, -7667.000488, 153.997726, 8000); // Say5 & Set orientation
|
||||
ranger_lilathaAI->AddWaypoint(34, 7603.768066, -7667.000488, 153.997726);
|
||||
|
||||
return (CreatureAI*)ranger_lilathaAI;
|
||||
}
|
||||
|
||||
void AddSC_ghostlands()
|
||||
{
|
||||
Script *newscript;
|
||||
@@ -151,4 +356,10 @@ void AddSC_ghostlands()
|
||||
newscript->Name = "go_gilded_brazier";
|
||||
newscript->pGOHello = &GOHello_gilded_brazier;
|
||||
newscript->RegisterSelf();
|
||||
|
||||
newscript = new Script;
|
||||
newscript->Name = "npc_ranger_lilatha";
|
||||
newscript->GetAI = &GetAI_npc_ranger_lilathaAI;
|
||||
newscript->pQuestAccept = &QuestAccept_npc_ranger_lilatha;
|
||||
newscript->RegisterSelf();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user