aboutsummaryrefslogtreecommitdiff
path: root/src/server/scripts/EasternKingdoms/hinterlands.cpp
diff options
context:
space:
mode:
authorSpp <spp@jorge.gr>2012-11-22 15:04:59 +0100
committerSpp <spp@jorge.gr>2012-11-22 15:04:59 +0100
commitb9b57c2d62fe68f5b35bf7cdb2fb6a68e501ca5e (patch)
tree7c15f9bd2298d0fc8564a12397e485317e754bcd /src/server/scripts/EasternKingdoms/hinterlands.cpp
parent7416ada4f7b28c6fa8a9fd18d90327c1314106d4 (diff)
parent32c259b1ce88c36015514018e95a7d6c29420678 (diff)
Merge branch 'master' into 4.3.4
Conflicts: src/server/game/Chat/ChatLink.cpp src/server/game/Entities/Player/Player.cpp src/server/game/Handlers/ChannelHandler.cpp src/server/scripts/EasternKingdoms/hinterlands.cpp
Diffstat (limited to 'src/server/scripts/EasternKingdoms/hinterlands.cpp')
-rw-r--r--src/server/scripts/EasternKingdoms/hinterlands.cpp224
1 files changed, 211 insertions, 13 deletions
diff --git a/src/server/scripts/EasternKingdoms/hinterlands.cpp b/src/server/scripts/EasternKingdoms/hinterlands.cpp
index 0398779655f..618491c8c7b 100644
--- a/src/server/scripts/EasternKingdoms/hinterlands.cpp
+++ b/src/server/scripts/EasternKingdoms/hinterlands.cpp
@@ -38,11 +38,11 @@ EndContentData */
enum eOOX
{
- SAY_OOX_START = -1000287,
- SAY_OOX_AGGRO1 = -1000288,
- SAY_OOX_AGGRO2 = -1000289,
- SAY_OOX_AMBUSH = -1000290,
- SAY_OOX_END = -1000292,
+ SAY_OOX_START = 0,
+ SAY_OOX_AGGRO = 1,
+ SAY_OOX_AMBUSH = 3,
+ SAY_OOX_AMBUSH_REPLY = 4,
+ SAY_OOX_END = 5,
QUEST_RESQUE_OOX_09 = 836,
@@ -69,7 +69,7 @@ public:
else if (player->GetTeam() == HORDE)
creature->setFaction(FACTION_ESCORTEE_H);
- DoScriptText(SAY_OOX_START, creature, player);
+ creature->AI()->Talk(SAY_OOX_START, player->GetGUID());
if (npc_00x09hlAI* pEscortAI = CAST_AI(npc_00x09hl::npc_00x09hlAI, creature->AI()))
pEscortAI->Start(false, false, player->GetGUID(), quest);
@@ -93,13 +93,13 @@ public:
switch (waypointId)
{
case 26:
- DoScriptText(SAY_OOX_AMBUSH, me);
+ Talk(SAY_OOX_AMBUSH);
break;
case 43:
- DoScriptText(SAY_OOX_AMBUSH, me);
+ Talk(SAY_OOX_AMBUSH);
break;
case 64:
- DoScriptText(SAY_OOX_END, me);
+ Talk(SAY_OOX_END);
if (Player* player = GetPlayerForEscort())
player->GroupEventHappens(QUEST_RESQUE_OOX_09, me);
break;
@@ -136,10 +136,7 @@ public:
if (who->GetEntry() == NPC_MARAUDING_OWL || who->GetEntry() == NPC_VILE_AMBUSHER)
return;
- if (rand()%1)
- DoScriptText(SAY_OOX_AGGRO1, me);
- else
- DoScriptText(SAY_OOX_AGGRO2, me);
+ Talk(SAY_OOX_AGGRO);
}
void JustSummoned(Creature* summoned)
@@ -149,6 +146,207 @@ public:
};
};
+<<<<<<< HEAD
+=======
+/*######
+## npc_rinji
+######*/
+
+enum eRinji
+{
+ SAY_RIN_BY_OUTRUNNER = 0,
+
+ SAY_RIN_FREE = 0, //from here
+ SAY_RIN_HELP = 1,
+ SAY_RIN_COMPLETE = 2,
+ SAY_RIN_PROGRESS_1 = 3,
+ SAY_RIN_PROGRESS_2 = 4,
+
+ QUEST_RINJI_TRAPPED = 2742,
+ NPC_RANGER = 2694,
+ NPC_OUTRUNNER = 2691,
+ GO_RINJI_CAGE = 142036
+};
+
+struct Location
+{
+ float m_fX, m_fY, m_fZ;
+};
+
+Location m_afAmbushSpawn[] =
+{
+ {191.296204f, -2839.329346f, 107.388f},
+ {70.972466f, -2848.674805f, 109.459f}
+};
+
+Location m_afAmbushMoveTo[] =
+{
+ {166.630386f, -2824.780273f, 108.153f},
+ {70.886589f, -2874.335449f, 116.675f}
+};
+
+class npc_rinji : public CreatureScript
+{
+public:
+ npc_rinji() : CreatureScript("npc_rinji") { }
+
+ bool OnQuestAccept(Player* player, Creature* creature, const Quest* quest)
+ {
+ if (quest->GetQuestId() == QUEST_RINJI_TRAPPED)
+ {
+ if (GameObject* go = creature->FindNearestGameObject(GO_RINJI_CAGE, INTERACTION_DISTANCE))
+ go->UseDoorOrButton();
+
+ if (npc_rinjiAI* pEscortAI = CAST_AI(npc_rinji::npc_rinjiAI, creature->AI()))
+ pEscortAI->Start(false, false, player->GetGUID(), quest);
+ }
+ return true;
+ }
+
+ CreatureAI* GetAI(Creature* creature) const
+ {
+ return new npc_rinjiAI(creature);
+ }
+
+ struct npc_rinjiAI : public npc_escortAI
+ {
+ npc_rinjiAI(Creature* creature) : npc_escortAI(creature)
+ {
+ m_bIsByOutrunner = false;
+ m_iSpawnId = 0;
+ }
+
+ bool m_bIsByOutrunner;
+ uint32 m_uiPostEventCount;
+ uint32 m_uiPostEventTimer;
+ int m_iSpawnId;
+
+ void Reset()
+ {
+ m_uiPostEventCount = 0;
+ m_uiPostEventTimer = 3000;
+ }
+
+ void JustRespawned()
+ {
+ m_bIsByOutrunner = false;
+ m_iSpawnId = 0;
+
+ npc_escortAI::JustRespawned();
+ }
+
+ void EnterCombat(Unit* who)
+ {
+ if (HasEscortState(STATE_ESCORT_ESCORTING))
+ {
+ if (who->GetEntry() == NPC_OUTRUNNER && !m_bIsByOutrunner)
+ {
+ if (Creature* talker = who->ToCreature())
+ talker->AI()->Talk(SAY_RIN_BY_OUTRUNNER);
+ m_bIsByOutrunner = true;
+ }
+
+ if (rand()%4)
+ return;
+
+ //only if attacked and escorter is not in combat?
+ Talk(SAY_RIN_HELP);
+ }
+ }
+
+ void DoSpawnAmbush(bool bFirst)
+ {
+ if (!bFirst)
+ m_iSpawnId = 1;
+
+ me->SummonCreature(NPC_RANGER,
+ m_afAmbushSpawn[m_iSpawnId].m_fX, m_afAmbushSpawn[m_iSpawnId].m_fY, m_afAmbushSpawn[m_iSpawnId].m_fZ, 0.0f,
+ TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 60000);
+
+ for (int i = 0; i < 2; ++i)
+ {
+ me->SummonCreature(NPC_OUTRUNNER,
+ m_afAmbushSpawn[m_iSpawnId].m_fX, m_afAmbushSpawn[m_iSpawnId].m_fY, m_afAmbushSpawn[m_iSpawnId].m_fZ, 0.0f,
+ TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 60000);
+ }
+ }
+
+ void JustSummoned(Creature* summoned)
+ {
+ summoned->SetWalk(false);
+ summoned->GetMotionMaster()->MovePoint(0, m_afAmbushMoveTo[m_iSpawnId].m_fX, m_afAmbushMoveTo[m_iSpawnId].m_fY, m_afAmbushMoveTo[m_iSpawnId].m_fZ);
+ }
+
+ void WaypointReached(uint32 waypointId)
+ {
+ Player* player = GetPlayerForEscort();
+ if (!player)
+ return;
+
+ switch (waypointId)
+ {
+ case 1:
+ Talk(SAY_RIN_FREE, player->GetGUID());
+ break;
+ case 7:
+ DoSpawnAmbush(true);
+ break;
+ case 13:
+ DoSpawnAmbush(false);
+ break;
+ case 17:
+ Talk(SAY_RIN_COMPLETE, player->GetGUID());
+ player->GroupEventHappens(QUEST_RINJI_TRAPPED, me);
+ SetRun();
+ m_uiPostEventCount = 1;
+ break;
+ }
+ }
+
+ void UpdateEscortAI(const uint32 uiDiff)
+ {
+ //Check if we have a current target
+ if (!UpdateVictim())
+ {
+ if (HasEscortState(STATE_ESCORT_ESCORTING) && m_uiPostEventCount)
+ {
+ if (m_uiPostEventTimer <= uiDiff)
+ {
+ m_uiPostEventTimer = 3000;
+
+ if (Player* player = GetPlayerForEscort())
+ {
+ switch (m_uiPostEventCount)
+ {
+ case 1:
+ Talk(SAY_RIN_PROGRESS_1, player->GetGUID());
+ ++m_uiPostEventCount;
+ break;
+ case 2:
+ Talk(SAY_RIN_PROGRESS_2, player->GetGUID());
+ m_uiPostEventCount = 0;
+ break;
+ }
+ }
+ else
+ {
+ me->DespawnOrUnsummon();
+ return;
+ }
+ }
+ else
+ m_uiPostEventTimer -= uiDiff;
+ }
+
+ return;
+ }
+
+ DoMeleeAttackIfReady();
+ }
+ };
+};
+
+>>>>>>> master
void AddSC_hinterlands()
{
new npc_00x09hl();