Skip to content

Commit

Permalink
Added ambush event for Quest 273.
Browse files Browse the repository at this point in the history
  • Loading branch information
oppahansi authored and cyberium committed Jun 29, 2017
1 parent 00582a6 commit 81fe35a
Showing 1 changed file with 85 additions and 1 deletion.
86 changes: 85 additions & 1 deletion src/game/AI/ScriptDevAI/scripts/world/areatrigger_scripts.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
/* ScriptData
SDName: Areatrigger_Scripts
SD%Complete: 100
SDComment: Quest support: 4291, 6681, 7632, 10280, 10589/10604, 11686, 12548, 12575, 12741, 13315/13351, 24849/24851.
SDComment: Quest support: 4291, 6681, 7632, 273, 10280, 10589/10604, 11686, 12548, 12575, 12741, 13315/13351, 24849/24851.
SDCategory: Areatrigger
EndScriptData */

Expand All @@ -35,6 +35,7 @@ at_murkdeep 1966
at_hot_on_the_trail 5710, 5711, 5712, 5714, 5715, 5716
at_ancient_leaf 3587
at_haramad_teleport 4479
at_huldar_miran
EndContentData */

#include "AI/ScriptDevAI/include/precompiled.h"
Expand Down Expand Up @@ -430,6 +431,84 @@ bool AreaTrigger_at_haramad_teleport(Player* pPlayer, AreaTriggerEntry const* /*
return false;
}

/*######
## Miran and Huldar are Ambushed when AT-171 is triggered
## when quest 273 is active
######*/

enum
{
QUEST_RESUPPLYING_THE_EXCAVATION = 273,

NPC_SAEAN = 1380,
NPC_MIRAN = 1379,
NPC_HULDAR = 2057,
NPC_DARK_IRON_AMBUSHER = 1981,

FACTION_HOSTILE = 14
};

struct Location
{
float m_fX, m_fY, m_fZ, m_fO;
};

static const Location m_miranAmbushSpawns[] =
{
{ -5760.73f, -3437.71f, 305.54f, 2.41f }, // Saean
{ -5759.85f, -3441.29f, 305.57f, 2.24f }, // Dark Iron Ambusher 1
{ -5757.75f, -3437.61f, 304.32f, 2.56f }, // Dark Iron Ambusher 2
};

bool AreaTrigger_at_huldar_miran(Player* pPlayer, AreaTriggerEntry const* /*pAt*/)
{
// Player is deaed, a GM, quest complete or no quest, do nothing
if (!pPlayer->isAlive() || pPlayer->isGameMaster() ||
pPlayer->GetQuestStatus(QUEST_RESUPPLYING_THE_EXCAVATION) == QUEST_STATUS_COMPLETE ||
pPlayer->GetQuestStatus(QUEST_RESUPPLYING_THE_EXCAVATION) == QUEST_STATUS_NONE)
return false;

ScriptedMap* pScriptedMap = (ScriptedMap*)pPlayer->GetInstanceData();
if (!pScriptedMap)
return false;

Creature* m_miran = GetClosestCreatureWithEntry(pPlayer, NPC_MIRAN, 60.0f, true);
Creature* m_huldar = GetClosestCreatureWithEntry(pPlayer, NPC_HULDAR, 60.0f, true);
Creature* m_saean = GetClosestCreatureWithEntry(pPlayer, NPC_SAEAN, 60.0f, true);

// Quest NPCs not availble, do noting
if (!m_miran || !m_huldar)
return false;

// complete quest
pPlayer->CompleteQuest(QUEST_RESUPPLYING_THE_EXCAVATION);
pPlayer->SendQuestCompleteEvent(QUEST_RESUPPLYING_THE_EXCAVATION);

// Quest NPCs in combat, skip the rest, prevent double spawns
if (m_miran->isInCombat() || m_huldar->isInCombat())
return true;

// Check if Saean is spawned and set his faction to hostile - summon him if not spawned
if (m_saean)
m_saean->SetFactionTemporary(FACTION_HOSTILE, TEMPFACTION_RESTORE_RESPAWN);
else
{
m_huldar
->SummonCreature(NPC_SAEAN, m_miranAmbushSpawns[0].m_fX, m_miranAmbushSpawns[0].m_fY, m_miranAmbushSpawns[0].m_fZ, m_miranAmbushSpawns[0].m_fO, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 25000)
->SetFactionTemporary(FACTION_HOSTILE, TEMPFACTION_RESTORE_RESPAWN);
m_saean = GetClosestCreatureWithEntry(pPlayer, NPC_SAEAN, 60.0f, true);
}

// Check if any Dark Iron Ambusher are already spawned or dead, if so, do nothing
if (!GetClosestCreatureWithEntry(pPlayer, NPC_DARK_IRON_AMBUSHER, 60.0f, false, false))
{
m_saean->SummonCreature(NPC_DARK_IRON_AMBUSHER, m_miranAmbushSpawns[1].m_fX, m_miranAmbushSpawns[1].m_fY, m_miranAmbushSpawns[1].m_fZ, m_miranAmbushSpawns[1].m_fO, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 25000);
m_saean->SummonCreature(NPC_DARK_IRON_AMBUSHER, m_miranAmbushSpawns[2].m_fX, m_miranAmbushSpawns[2].m_fY, m_miranAmbushSpawns[2].m_fZ, m_miranAmbushSpawns[2].m_fO, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 25000);
}

return true;
}

void AddSC_areatrigger_scripts()
{
Script* pNewScript;
Expand Down Expand Up @@ -503,4 +582,9 @@ void AddSC_areatrigger_scripts()
pNewScript->Name = "at_haramad_teleport";
pNewScript->pAreaTrigger = &AreaTrigger_at_haramad_teleport;
pNewScript->RegisterSelf();

pNewScript = new Script;
pNewScript->Name = "at_huldar_miran";
pNewScript->pAreaTrigger = &AreaTrigger_at_huldar_miran;
pNewScript->RegisterSelf();
}

0 comments on commit 81fe35a

Please sign in to comment.