aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author_manuel_ <none@none>2010-01-03 15:55:42 -0300
committer_manuel_ <none@none>2010-01-03 15:55:42 -0300
commit8d051d9645bcac4035d1bee9e87b00fd00923b3c (patch)
treeee5dafb96d51728ebac2e8b767a31de234f9f7ab
parent4a31d579bda45386cbaf34afa150e9f0e7009e1c (diff)
Blackfathom Deeps: Implemented event related with gameobject Fire of Aku'mai.
--HG-- branch : trunk
-rw-r--r--sql/FULL/world_scripts_full.sql1
-rw-r--r--sql/updates/6887_world_scriptnames.sql1
-rw-r--r--src/bindings/scripts/scripts/kalimdor/blackfathom_depths/blackfathom_deeps.cpp133
-rw-r--r--src/bindings/scripts/scripts/kalimdor/blackfathom_depths/blackfathom_deeps.h10
-rw-r--r--src/bindings/scripts/scripts/kalimdor/blackfathom_depths/instance_blackfathom_deeps.cpp107
5 files changed, 201 insertions, 51 deletions
diff --git a/sql/FULL/world_scripts_full.sql b/sql/FULL/world_scripts_full.sql
index 1d717fd1af5..4351a250591 100644
--- a/sql/FULL/world_scripts_full.sql
+++ b/sql/FULL/world_scripts_full.sql
@@ -289,6 +289,7 @@ UPDATE `gameobject_template` SET `ScriptName`='go_blackfathom_altar' WHERE `entr
UPDATE `creature_template` SET `ScriptName`='boss_gelihast' WHERE `entry`=6243;
UPDATE `creature_template` SET `ScriptName`='boss_kelris' WHERE `entry`=4832;
UPDATE `creature_template` SET `ScriptName`='boss_aku_mai' WHERE `entry`=4829;
+UPDATE `creature_template` SET `ScriptName`='npc_blackfathom_deeps_event' WHERE `entry` IN (4823,4825,4977,4978);
/* BLACKROCK DEPTHS */
diff --git a/sql/updates/6887_world_scriptnames.sql b/sql/updates/6887_world_scriptnames.sql
new file mode 100644
index 00000000000..313667ca37e
--- /dev/null
+++ b/sql/updates/6887_world_scriptnames.sql
@@ -0,0 +1 @@
+UPDATE `creature_template` SET `ScriptName`='npc_blackfathom_deeps_event' WHERE `entry` IN (4823,4825,4977,4978);
diff --git a/src/bindings/scripts/scripts/kalimdor/blackfathom_depths/blackfathom_deeps.cpp b/src/bindings/scripts/scripts/kalimdor/blackfathom_depths/blackfathom_deeps.cpp
index 39f52a35d00..6a2f9126afe 100644
--- a/src/bindings/scripts/scripts/kalimdor/blackfathom_depths/blackfathom_deeps.cpp
+++ b/src/bindings/scripts/scripts/kalimdor/blackfathom_depths/blackfathom_deeps.cpp
@@ -19,11 +19,16 @@
#include "precompiled.h"
#include "blackfathom_deeps.h"
-enum Spells
+enum eSpells
{
- SPELL_BLESSING_OF_BLACKFATHOM = 8733
+ SPELL_BLESSING_OF_BLACKFATHOM = 8733,
+ SPELL_RAVAGE = 8391,
+ SPELL_FROST_NOVA = 865,
+ SPELL_FROST_BOLT_VOLLEY = 8398
};
+const Position HomePosition = {-815.817,-145.299,-25.870, 0};
+
bool GoHello_blackfathom_altar(Player *pPlayer, GameObject* pGo)
{
if (!pPlayer->HasAura(SPELL_BLESSING_OF_BLACKFATHOM))
@@ -34,7 +39,7 @@ bool GoHello_blackfathom_altar(Player *pPlayer, GameObject* pGo)
bool GoHello_blackfathom_fire(Player *pPlayer, GameObject* pGo)
{
ScriptedInstance *pInstance = pGo->GetInstanceData();
-
+
if (pInstance)
{
pGo->SetGoState(GO_STATE_ACTIVE);
@@ -45,6 +50,121 @@ bool GoHello_blackfathom_fire(Player *pPlayer, GameObject* pGo)
return false;
}
+struct TRINITY_DLL_DECL npc_blackfathom_deeps_eventAI : public ScriptedAI
+{
+ npc_blackfathom_deeps_eventAI(Creature* pCreature) : ScriptedAI(pCreature)
+ {
+ if (pCreature->isSummon())
+ {
+ pCreature->SetHomePosition(HomePosition);
+ AttackPlayer();
+ }
+
+ pInstance = pCreature->GetInstanceData();
+ }
+
+ ScriptedInstance* pInstance;
+
+ uint32 uiRavageTimer;
+ uint32 uiFrostNovaTimer;
+ uint32 uiFrostBoltVolleyTimer;
+
+ bool bFlee;
+
+ void Reset()
+ {
+ bFlee = false;
+
+ uiRavageTimer = urand(5000,8000);
+ uiFrostNovaTimer = urand(9000,12000);
+ uiFrostBoltVolleyTimer = urand(2000,4000);
+ }
+
+ void AttackPlayer()
+ {
+ Map::PlayerList const &PlList = m_creature->GetMap()->GetPlayers();
+
+ if(PlList.isEmpty())
+ return;
+
+ for (Map::PlayerList::const_iterator i = PlList.begin(); i != PlList.end(); ++i)
+ {
+ if(Player* pPlayer = i->getSource())
+ {
+ if(pPlayer->isGameMaster())
+ continue;
+
+ if(pPlayer->isAlive())
+ {
+ m_creature->SetInCombatWith(pPlayer);
+ pPlayer->SetInCombatWith(m_creature);
+ m_creature->AddThreat(pPlayer, 0.0f);
+ }
+ }
+ }
+ }
+
+ void UpdateAI(const uint32 uiDiff)
+ {
+ if (!UpdateVictim())
+ return;
+
+ switch (m_creature->GetEntry())
+ {
+ case NPC_AKU_MAI_SNAPJAW:
+ {
+ if (uiRavageTimer <= uiDiff)
+ {
+ DoCast(m_creature->getVictim(), SPELL_RAVAGE);
+ uiRavageTimer = urand(9000,14000);
+ } else uiRavageTimer -= uiDiff;
+ break;
+ }
+ case NPC_MURKSHALLOW_SOFTSHELL:
+ case NPC_BARBED_CRUSTACEAN:
+ {
+ if (!bFlee && HealthBelowPct(15))
+ {
+ bFlee = true;
+ m_creature->DoFleeToGetAssistance();
+ }
+ break;
+ }
+ case NPC_AKU_MAI_SERVANT:
+ {
+ if (uiFrostBoltVolleyTimer <= uiDiff)
+ {
+ if (Unit* pTarget = SelectUnit(SELECT_TARGET_RANDOM,0))
+ {
+ if (pTarget)
+ DoCast(pTarget, SPELL_FROST_BOLT_VOLLEY);
+ }
+ uiFrostBoltVolleyTimer = urand(5000,8000);
+ } else uiFrostBoltVolleyTimer -= uiDiff;
+ if (uiFrostNovaTimer <= uiDiff)
+ {
+ DoCastAOE(SPELL_FROST_NOVA,false);
+ uiFrostNovaTimer = urand(25000,30000);
+ } else uiFrostNovaTimer -= uiDiff;
+ break;
+ }
+ }
+
+ DoMeleeAttackIfReady();
+ }
+
+ void JustDied(Unit* pKiller)
+ {
+ if (m_creature->isSummon()) //we are not a normal spawn.
+ if (pInstance)
+ pInstance->SetData(DATA_EVENT, pInstance->GetData(DATA_EVENT) + 1);
+ }
+};
+
+CreatureAI* GetAI_npc_blackfathom_deeps_event(Creature* pCreature)
+{
+ return new npc_blackfathom_deeps_eventAI (pCreature);
+}
void AddSC_blackfathom_deeps()
{
@@ -58,4 +178,9 @@ void AddSC_blackfathom_deeps()
newscript->Name = "go_blackfathom_fire";
newscript->pGOHello = &GoHello_blackfathom_fire;
newscript->RegisterSelf();
-} \ No newline at end of file
+
+ newscript = new Script;
+ newscript->Name = "npc_blackfathom_deeps_event";
+ newscript->GetAI = &GetAI_npc_blackfathom_deeps_event;
+ newscript->RegisterSelf();
+}
diff --git a/src/bindings/scripts/scripts/kalimdor/blackfathom_depths/blackfathom_deeps.h b/src/bindings/scripts/scripts/kalimdor/blackfathom_depths/blackfathom_deeps.h
index 68523c4a6d9..317aa67fa1c 100644
--- a/src/bindings/scripts/scripts/kalimdor/blackfathom_depths/blackfathom_deeps.h
+++ b/src/bindings/scripts/scripts/kalimdor/blackfathom_depths/blackfathom_deeps.h
@@ -23,13 +23,19 @@ enum Data
TYPE_KELRIS,
TYPE_SHRINE,
TYPE_AKU_MAI,
- DATA_FIRE
+ DATA_FIRE,
+ DATA_EVENT
};
enum Creatures
{
NPC_TWILIGHT_LORD_KELRIS = 4832,
- NPC_LORGUS_JETT = 12902
+ NPC_LORGUS_JETT = 12902,
+
+ NPC_AKU_MAI_SNAPJAW = 4825,
+ NPC_MURKSHALLOW_SOFTSHELL = 4977,
+ NPC_AKU_MAI_SERVANT = 4978,
+ NPC_BARBED_CRUSTACEAN = 4823
};
enum GameObjects
diff --git a/src/bindings/scripts/scripts/kalimdor/blackfathom_depths/instance_blackfathom_deeps.cpp b/src/bindings/scripts/scripts/kalimdor/blackfathom_depths/instance_blackfathom_deeps.cpp
index e12e6c8bb08..a1ba1c63934 100644
--- a/src/bindings/scripts/scripts/kalimdor/blackfathom_depths/instance_blackfathom_deeps.cpp
+++ b/src/bindings/scripts/scripts/kalimdor/blackfathom_depths/instance_blackfathom_deeps.cpp
@@ -30,14 +30,22 @@ EndScriptData */
Encounter 1 = Twilight Lord Kelris
Encounter 2 = Shrine event
Encounter 3 = Aku'Mai
- Must kill twilight lord for shrine event to be possible
*/
const Position LorgusPosition[4] =
-{ { -458.500610, -38.343079, -33.474445 },
- { -469.423615, -88.400513, -39.265102 },
- { -622.354980, -10.350100, -22.777000 },
- { -759.640564, 16.658913, -29.159529 }
+{
+ { -458.500610, -38.343079, -33.474445 },
+ { -469.423615, -88.400513, -39.265102 },
+ { -622.354980, -10.350100, -22.777000 },
+ { -759.640564, 16.658913, -29.159529 }
+};
+
+const Position SpawnsLocation[] =
+{
+ {-775.431, -153.853, -25.871, 3.207},
+ {-775.404, -174.132, -25.871, 3.185},
+ {-862.430, -154.937, -25.871, 0.060},
+ {-862.193, -174.251, -25.871, 6.182},
};
struct TRINITY_DLL_DECL instance_blackfathom_deeps : public ScriptedInstance
@@ -55,6 +63,7 @@ struct TRINITY_DLL_DECL instance_blackfathom_deeps : public ScriptedInstance
uint8 m_auiEncounter[MAX_ENCOUNTER];
uint8 m_uiCountFires;
+ uint8 uiDeathTimes;
void Initialize()
{
@@ -69,6 +78,7 @@ struct TRINITY_DLL_DECL instance_blackfathom_deeps : public ScriptedInstance
m_uiAltarOfTheDeepsGUID = 0;
m_uiMainDoorGUID = 0;
m_uiCountFires = 0;
+ uiDeathTimes = 0;
}
void OnCreatureCreate(Creature* pCreature, bool add)
@@ -90,23 +100,15 @@ struct TRINITY_DLL_DECL instance_blackfathom_deeps : public ScriptedInstance
{
case GO_FIRE_OF_AKU_MAI_1:
m_uiShrine1GUID = pGo->GetGUID();
- pGo->SetGoState(GO_STATE_READY);
- pGo->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_UNK1);
break;
case GO_FIRE_OF_AKU_MAI_2:
m_uiShrine2GUID = pGo->GetGUID();
- pGo->SetGoState(GO_STATE_READY);
- pGo->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_UNK1);
break;
case GO_FIRE_OF_AKU_MAI_3:
m_uiShrine3GUID = pGo->GetGUID();
- pGo->SetGoState(GO_STATE_READY);
- pGo->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_UNK1);
break;
case GO_FIRE_OF_AKU_MAI_4:
m_uiShrine4GUID = pGo->GetGUID();
- pGo->SetGoState(GO_STATE_READY);
- pGo->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_UNK1);
break;
case GO_SHRINE_OF_GELIHAST:
m_uiShrineOfGelihastGUID = pGo->GetGUID();
@@ -136,20 +138,6 @@ struct TRINITY_DLL_DECL instance_blackfathom_deeps : public ScriptedInstance
if (GameObject *pGo = instance->GetGameObject(m_uiShrineOfGelihastGUID))
pGo->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_UNK1);
break;
- case TYPE_KELRIS:
- m_auiEncounter[1] = uiData;
- if (uiData == DONE)
- {
- if (GameObject *pGo = instance->GetGameObject(m_uiShrine1GUID))
- pGo->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_UNK1);
- if (GameObject *pGo = instance->GetGameObject(m_uiShrine2GUID))
- pGo->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_UNK1);
- if (GameObject *pGo = instance->GetGameObject(m_uiShrine3GUID))
- pGo->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_UNK1);
- if (GameObject *pGo = instance->GetGameObject(m_uiShrine4GUID))
- pGo->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_UNK1);
- }
- break;
case TYPE_AKU_MAI:
m_auiEncounter[3] = uiData;
if (uiData == DONE)
@@ -158,8 +146,51 @@ struct TRINITY_DLL_DECL instance_blackfathom_deeps : public ScriptedInstance
break;
case DATA_FIRE:
m_uiCountFires = uiData;
- if (uiData == 4)
- CheckFires();
+ switch (m_uiCountFires)
+ {
+ case 1:
+ if (GameObject* pGO = instance->GetGameObject(m_uiShrine1GUID))
+ {
+ pGO->SummonCreature(NPC_AKU_MAI_SNAPJAW, SpawnsLocation[0], TEMPSUMMON_CORPSE_TIMED_DESPAWN, 300000);
+ pGO->SummonCreature(NPC_AKU_MAI_SNAPJAW, SpawnsLocation[1], TEMPSUMMON_CORPSE_TIMED_DESPAWN, 300000);
+ pGO->SummonCreature(NPC_AKU_MAI_SNAPJAW, SpawnsLocation[2], TEMPSUMMON_CORPSE_TIMED_DESPAWN, 300000);
+ pGO->SummonCreature(NPC_AKU_MAI_SNAPJAW, SpawnsLocation[3], TEMPSUMMON_CORPSE_TIMED_DESPAWN, 300000);
+ }
+ break;
+ case 2:
+ if (GameObject* pGO = instance->GetGameObject(m_uiShrine1GUID))
+ {
+ for (uint8 i = 0; i < 2; ++i)
+ {
+ pGO->SummonCreature(NPC_MURKSHALLOW_SOFTSHELL, SpawnsLocation[0], TEMPSUMMON_CORPSE_TIMED_DESPAWN, 300000);
+ pGO->SummonCreature(NPC_MURKSHALLOW_SOFTSHELL, SpawnsLocation[1], TEMPSUMMON_CORPSE_TIMED_DESPAWN, 300000);
+ pGO->SummonCreature(NPC_MURKSHALLOW_SOFTSHELL, SpawnsLocation[2], TEMPSUMMON_CORPSE_TIMED_DESPAWN, 300000);
+ pGO->SummonCreature(NPC_MURKSHALLOW_SOFTSHELL, SpawnsLocation[3], TEMPSUMMON_CORPSE_TIMED_DESPAWN, 300000);
+ }
+ }
+ break;
+ case 3:
+ if (GameObject* pGO = instance->GetGameObject(m_uiShrine1GUID))
+ {
+ pGO->SummonCreature(NPC_AKU_MAI_SERVANT, SpawnsLocation[1], TEMPSUMMON_CORPSE_TIMED_DESPAWN, 300000);
+ pGO->SummonCreature(NPC_AKU_MAI_SERVANT, SpawnsLocation[2], TEMPSUMMON_CORPSE_TIMED_DESPAWN, 300000);
+ }
+ break;
+ case 4:
+ if (GameObject* pGO = instance->GetGameObject(m_uiShrine1GUID))
+ {
+ pGO->SummonCreature(NPC_BARBED_CRUSTACEAN, SpawnsLocation[0], TEMPSUMMON_CORPSE_TIMED_DESPAWN, 300000);
+ pGO->SummonCreature(NPC_BARBED_CRUSTACEAN, SpawnsLocation[1], TEMPSUMMON_CORPSE_TIMED_DESPAWN, 300000);
+ pGO->SummonCreature(NPC_BARBED_CRUSTACEAN, SpawnsLocation[2], TEMPSUMMON_CORPSE_TIMED_DESPAWN, 300000);
+ pGO->SummonCreature(NPC_BARBED_CRUSTACEAN, SpawnsLocation[3], TEMPSUMMON_CORPSE_TIMED_DESPAWN, 300000);
+ }
+ break;
+ }
+ break;
+ case DATA_EVENT:
+ uiDeathTimes = uiData;
+ if (uiDeathTimes == 18)
+ HandleGameObject(m_uiMainDoorGUID,true);
break;
}
}
@@ -178,6 +209,8 @@ struct TRINITY_DLL_DECL instance_blackfathom_deeps : public ScriptedInstance
return m_auiEncounter[3];
case DATA_FIRE:
return m_uiCountFires;
+ case DATA_EVENT:
+ return uiDeathTimes;
}
return 0;
@@ -205,22 +238,6 @@ struct TRINITY_DLL_DECL instance_blackfathom_deeps : public ScriptedInstance
return 0;
}
-
- void CheckFires()
- {
- GameObject *pShrine1 = instance->GetGameObject(m_uiShrine1GUID);
- GameObject *pShrine2 = instance->GetGameObject(m_uiShrine2GUID);
- GameObject *pShrine3 = instance->GetGameObject(m_uiShrine3GUID);
- GameObject *pShrine4 = instance->GetGameObject(m_uiShrine4GUID);
- if (pShrine1 && pShrine1->GetGoState() == GO_STATE_ACTIVE &&
- pShrine2 && pShrine2->GetGoState() == GO_STATE_ACTIVE &&
- pShrine3 && pShrine3->GetGoState() == GO_STATE_ACTIVE &&
- pShrine4 && pShrine4->GetGoState() == GO_STATE_ACTIVE)
- {
- HandleGameObject(m_uiMainDoorGUID,true);
- m_auiEncounter[2] = DONE;
- }
- }
};
InstanceData* GetInstanceData_instance_blackfathom_deeps(Map* pMap)