Azjol Nerub, Azjol Nerub: Cleanup

--HG--
branch : trunk
This commit is contained in:
Tartalo
2010-03-24 00:13:00 +01:00
parent 29201cf687
commit c7f5d95a1d
5 changed files with 389 additions and 432 deletions
@@ -1,5 +1,5 @@
/*
* Copyright (C) 2009 Trinity <http://www.trinitycore.org/>
* Copyright (C) 2009 - 2010 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -1,75 +1,63 @@
/*
* Copyright (C) 2009 Trinity <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
/* ScriptData
SDName: boss_anubarak
SD%Complete: 90 %
SDComment: Says are not implemented.
SDCategory: Azjol Nerub
EndScriptData */
* Copyright (C) 2009 - 2010 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include "ScriptedPch.h"
#include "azjol_nerub.h"
enum Spells
{
SPELL_CARRION_BEETLES = 53520,
SPELL_SUMMON_CARRION_BEETLES = 53521,
SPELL_LEECHING_SWARM = 53467,
SPELL_IMPALE = 53454,
H_SPELL_IMPALE = 59446,
SPELL_POUND = 53472,
H_SPELL_POUND = 59433,
SPELL_SUBMERGE = 53421,
SPELL_CARRION_BEETLES = 53520,
SPELL_SUMMON_CARRION_BEETLES = 53521,
SPELL_LEECHING_SWARM = 53467,
SPELL_IMPALE = 53454,
H_SPELL_IMPALE = 59446,
SPELL_POUND = 53472,
H_SPELL_POUND = 59433,
SPELL_SUBMERGE = 53421,
};
enum Creatures
{
CREATURE_GUARDIAN = 29216,
CREATURE_VENOMANCER = 29217,
CREATURE_DATTER = 29213
CREATURE_GUARDIAN = 29216,
CREATURE_VENOMANCER = 29217,
CREATURE_DATTER = 29213
};
// not in db
enum Yells
{
SAY_INTRO = -1601010,
SAY_AGGRO = -1601000,
SAY_SLAY_1 = -1601001,
SAY_SLAY_2 = -1601002,
SAY_SLAY_3 = -1601003,
SAY_LOCUST_1 = -1601005,
SAY_LOCUST_2 = -1601006,
SAY_LOCUST_3 = -1601007,
SAY_SUBMERGE_1 = -1601008,
SAY_SUBMERGE_2 = -1601009,
SAY_DEATH = -1601004
SAY_INTRO = -1601010,
SAY_AGGRO = -1601000,
SAY_SLAY_1 = -1601001,
SAY_SLAY_2 = -1601002,
SAY_SLAY_3 = -1601003,
SAY_LOCUST_1 = -1601005,
SAY_LOCUST_2 = -1601006,
SAY_LOCUST_3 = -1601007,
SAY_SUBMERGE_1 = -1601008,
SAY_SUBMERGE_2 = -1601009,
SAY_DEATH = -1601004
};
#define SPAWNPOINT_Z 224.3
float SpawnPoint[2][2] =
const Position SpawnPoint[2] =
{
{550.7, 282.8},
{551.1, 229.4},
{ 550.7, 282.8, 224.3 },
{ 551.1, 229.4, 224.3 },
};
struct boss_anub_arakAI : public ScriptedAI
@@ -81,36 +69,35 @@ struct boss_anub_arakAI : public ScriptedAI
ScriptedInstance *pInstance;
bool Channeling;
bool HeroicMode;
bool Summoned_Guardian;
bool Summoned_Venomancer;
bool Summoned_Datter;
uint32 Phase;
uint32 Phase_Time;
bool bChanneling;
bool bGuardianSummoned;
bool bVenomancerSummoned;
bool bDatterSummoned;
uint8 uiPhase;
uint32 uiPhaseTimer;
uint32 SPELL_CARRION_BEETLES_Timer;
uint32 SPELL_LEECHING_SWARM_Timer;
uint32 SPELL_IMPALE_Timer;
uint32 SPELL_POUND_Timer;
uint32 SPELL_SUBMERGE_Timer;
uint32 UNDERGROUND_Timer;
uint32 VENOMANCER_Timer;
uint32 DATTER_Timer;
uint32 uiCarrionBeetlesTimer;
uint32 uiLeechingSwarmTimer;
uint32 uiImpaleTimer;
uint32 uiPoundTimer;
uint32 uiSubmergeTimer;
uint32 uiUndergroundTimer;
uint32 uiVenomancerTimer;
uint32 uiDatterTimer;
SummonList lSummons;
void Reset()
{
SPELL_CARRION_BEETLES_Timer = 8000;
SPELL_LEECHING_SWARM_Timer = 20000;
SPELL_IMPALE_Timer = 9000;
SPELL_POUND_Timer = 15000;
uiCarrionBeetlesTimer = 8*IN_MILISECONDS;
uiLeechingSwarmTimer = 20*IN_MILISECONDS;
uiImpaleTimer = 9*IN_MILISECONDS;
uiPoundTimer = 15*IN_MILISECONDS;
Phase = 0;
Phase_Time = 0;
Channeling = false;
uiPhase = 0;
uiPhaseTimer = 0;
bChanneling = false;
m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE|UNIT_FLAG_NOT_SELECTABLE);
m_creature->RemoveAura(SPELL_SUBMERGE);
@@ -137,126 +124,125 @@ struct boss_anub_arakAI : public ScriptedAI
if (!UpdateVictim())
return;
if (Channeling == true)
if (bChanneling == true)
{
for (uint8 i = 0; i < 4; ++i)
DoCast(m_creature->getVictim(), SPELL_SUMMON_CARRION_BEETLES, true);
Channeling = false;
bChanneling = false;
}
if (Phase == 1)
if (uiPhase == 1)
{
if (SPELL_IMPALE_Timer <= diff)
if (uiImpaleTimer <= diff)
{
if (Unit *pTarget = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true))
m_creature->CastSpell(pTarget, DUNGEON_MODE(SPELL_IMPALE,H_SPELL_IMPALE), true);
uiImpaleTimer = 9*IN_MILISECONDS;
} else uiImpaleTimer -= diff;
SPELL_IMPALE_Timer = 9000;
} else SPELL_IMPALE_Timer -= diff;
if (!Summoned_Guardian)
if (!bGuardianSummoned)
{
for (uint8 i = 0; i < 2; ++i)
{
if (Creature *Guardian = m_creature->SummonCreature(CREATURE_GUARDIAN,SpawnPoint[i][0],SpawnPoint[i][1],SPAWNPOINT_Z,0,TEMPSUMMON_CORPSE_DESPAWN,0))
if (Creature *Guardian = m_creature->SummonCreature(CREATURE_GUARDIAN,SpawnPoint[i],TEMPSUMMON_CORPSE_DESPAWN,0))
{
Guardian->AddThreat(m_creature->getVictim(), 0.0f);
DoZoneInCombat(Guardian);
}
}
Summoned_Guardian = true;
bGuardianSummoned = true;
}
if(!Summoned_Venomancer)
if(!bVenomancerSummoned)
{
if (VENOMANCER_Timer <= diff)
if (uiVenomancerTimer <= diff)
{
if (Phase_Time > 1)
if (uiPhaseTimer > 1)
{
for (uint8 i = 0; i < 2; ++i)
{
if (Creature *Venomancer = m_creature->SummonCreature(CREATURE_VENOMANCER,SpawnPoint[i][0],SpawnPoint[i][1],SPAWNPOINT_Z,0,TEMPSUMMON_CORPSE_DESPAWN,0))
if (Creature *Venomancer = m_creature->SummonCreature(CREATURE_VENOMANCER,SpawnPoint[i],TEMPSUMMON_CORPSE_DESPAWN,0))
{
Venomancer->AddThreat(m_creature->getVictim(), 0.0f);
DoZoneInCombat(Venomancer);
}
}
Summoned_Venomancer = true;
bVenomancerSummoned = true;
}
} else VENOMANCER_Timer -= diff;
} else uiVenomancerTimer -= diff;
}
if(!Summoned_Datter)
if(!bDatterSummoned)
{
if (DATTER_Timer <= diff)
if (uiDatterTimer <= diff)
{
if (Phase_Time > 2)
if (uiPhaseTimer > 2)
{
for (uint8 i = 0; i < 2; ++i)
{
if (Creature *Datter = m_creature->SummonCreature(CREATURE_DATTER,SpawnPoint[i][0],SpawnPoint[i][1],SPAWNPOINT_Z,0,TEMPSUMMON_CORPSE_DESPAWN,0))
if (Creature *Datter = m_creature->SummonCreature(CREATURE_DATTER,SpawnPoint[i],TEMPSUMMON_CORPSE_DESPAWN,0))
{
Datter->AddThreat(m_creature->getVictim(), 0.0f);
DoZoneInCombat(Datter);
}
}
Summoned_Datter = true;
bDatterSummoned = true;
}
} else DATTER_Timer -= diff;
} else uiDatterTimer -= diff;
}
if (UNDERGROUND_Timer <= diff)
if (uiUndergroundTimer <= diff)
{
m_creature->RemoveAura(SPELL_SUBMERGE);
m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE|UNIT_FLAG_NOT_SELECTABLE);
Phase = 0;
} else UNDERGROUND_Timer -= diff;
uiPhase = 0;
} else uiUndergroundTimer -= diff;
}
if (Phase == 0)
if (uiPhase == 0)
{
if (SPELL_LEECHING_SWARM_Timer <= diff)
if (uiLeechingSwarmTimer <= diff)
{
DoCast(m_creature, SPELL_LEECHING_SWARM, true);
SPELL_LEECHING_SWARM_Timer = 19000;
} else SPELL_LEECHING_SWARM_Timer -= diff;
uiLeechingSwarmTimer = 19*IN_MILISECONDS;
} else uiLeechingSwarmTimer -= diff;
if (SPELL_CARRION_BEETLES_Timer <= diff)
if (uiCarrionBeetlesTimer <= diff)
{
Channeling = true;
bChanneling = true;
DoCastVictim(SPELL_CARRION_BEETLES);
SPELL_CARRION_BEETLES_Timer = 25000;
} else SPELL_CARRION_BEETLES_Timer -= diff;
uiCarrionBeetlesTimer = 25*IN_MILISECONDS;
} else uiCarrionBeetlesTimer -= diff;
if (SPELL_POUND_Timer <= diff)
if (uiPoundTimer <= diff)
{
DoCastVictim(DUNGEON_MODE(SPELL_POUND, H_SPELL_POUND));
SPELL_POUND_Timer = 16500;
} else SPELL_POUND_Timer -= diff;
uiPoundTimer = 16.5*IN_MILISECONDS;
} else uiPoundTimer -= diff;
}
if ((Phase_Time == 0 && m_creature->GetHealth()*100 / m_creature->GetMaxHealth() <= 75)
|| (Phase_Time == 1 && m_creature->GetHealth()*100 / m_creature->GetMaxHealth() <= 50)
|| (Phase_Time == 2 && m_creature->GetHealth()*100 / m_creature->GetMaxHealth() <= 25))
if ((uiPhaseTimer == 0 && HealthBelowPct(75))
|| (uiPhaseTimer == 1 && HealthBelowPct(50))
|| (uiPhaseTimer == 2 && HealthBelowPct(25)))
{
++Phase_Time;
++uiPhaseTimer;
Summoned_Guardian = false;
Summoned_Venomancer = false;
Summoned_Datter = false;
bGuardianSummoned = false;
bVenomancerSummoned = false;
bDatterSummoned = false;
UNDERGROUND_Timer = 40000;
VENOMANCER_Timer = 25000;
DATTER_Timer = 32000;
uiUndergroundTimer = 40*IN_MILISECONDS;
uiVenomancerTimer = 25*IN_MILISECONDS;
uiDatterTimer = 32*IN_MILISECONDS;
DoCast(m_creature, SPELL_SUBMERGE, false);
m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE|UNIT_FLAG_NOT_SELECTABLE);
Phase = 1;
uiPhase = 1;
}
if (Phase != 1)
if (uiPhase != 1)
DoMeleeAttackIfReady();
}
@@ -1,5 +1,5 @@
/*
* Copyright (C) 2009 Trinity <http://www.trinitycore.org/>
* Copyright (C) 2009 - 2010 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -16,89 +16,83 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
/* Script Data Start
SDName: Boss hadronox
SDAuthor: WarHead
SD%Complete: 50
SDComment: No Waves atm and the doors spells are crazy...
SDCategory:
Script Data End */
//Phase 0 => Gauntlet Event described below
//Phase 1 => Boss Encounter
/*When your group enters the main room (the one after the bridge), you will notice a group of 3 Nerubians.
When you engage them, 2 more groups like this one spawn behind the first one - it is important to pull the first group back,
so you don't aggro all 3. Hadronox will be under you, fighting Nerubians.
This is the timed gauntlet - waves of non-elite spiders
will spawn from the 3 doors located a little above the main room, and will then head down to fight Hadronox. After clearing the
main room, it is recommended to just stay in it, kill the occasional non-elites that will attack you instead of the boss, and wait for
Hadronox to make his way to you. When Hadronox enters the main room, she will web the doors, and no more non-elites will spawn.*/
/*
* Comment: No Waves atm and the doors spells are crazy...
*
* When your group enters the main room (the one after the bridge), you will notice a group of 3 Nerubians.
* When you engage them, 2 more groups like this one spawn behind the first one - it is important to pull the first group back,
* so you don't aggro all 3. Hadronox will be under you, fighting Nerubians.
*
* This is the timed gauntlet - waves of non-elite spiders
* will spawn from the 3 doors located a little above the main room, and will then head down to fight Hadronox. After clearing the
* main room, it is recommended to just stay in it, kill the occasional non-elites that will attack you instead of the boss, and wait for
* Hadronox to make his way to you. When Hadronox enters the main room, she will web the doors, and no more non-elites will spawn.
*/
#include "ScriptedPch.h"
#include "azjol_nerub.h"
#define SPELL_ACID_CLOUD 53400 // Victim
#define SPELL_LEECH_POISON 53030 // Victim
#define SPELL_PIERCE_ARMOR 53418 // Victim
#define SPELL_WEB_GRAB 57731 // Victim
#define SPELL_WEB_FRONT_DOORS 53177 // Self
#define SPELL_WEB_SIDE_DOORS 53185 // Self
#define SPELL_ACID_CLOUD_H 59419
#define SPELL_LEECH_POISON_H 59417
#define SPELL_WEB_GRAB_H 59421
enum Spells
{
SPELL_ACID_CLOUD = 53400, // Victim
SPELL_LEECH_POISON = 53030, // Victim
SPELL_PIERCE_ARMOR = 53418, // Victim
SPELL_WEB_GRAB = 57731, // Victim
SPELL_WEB_FRONT_DOORS = 53177, // Self
SPELL_WEB_SIDE_DOORS = 53185, // Self
H_SPELL_ACID_CLOUD = 59419,
H_SPELL_LEECH_POISON = 59417,
H_SPELL_WEB_GRAB = 59421
};
struct boss_hadronoxAI : public ScriptedAI
{
boss_hadronoxAI(Creature* c) : ScriptedAI(c)
{
pInstance = c->GetInstanceData();
MaxDistance = 50.0f;
FirstTime = true;
fMaxDistance = 50.0f;
bFirstTime = true;
}
ScriptedInstance* pInstance;
uint32 acidtimer,
leechtimer,
piercetimer,
grabtimer,
doorstimer,
CheckDistanceTimer;
uint32 uiAcidTimer;
uint32 uiLeechTimer;
uint32 uiPierceTimer;
uint32 uiGrabTimer;
uint32 uiDoorsTimer;
uint32 uiCheckDistanceTimer;
bool FirstTime;
bool bFirstTime;
float MaxDistance;
float fMaxDistance;
void Reset()
{
m_creature->SetFloatValue(UNIT_FIELD_BOUNDINGRADIUS, 9.0f);
m_creature->SetFloatValue(UNIT_FIELD_COMBATREACH, 9.0f);
acidtimer = urand(10000,14000);
leechtimer = urand(3000,9000);
piercetimer = urand(1000,3000);
grabtimer = urand(15000,19000);
doorstimer = urand(20000,30000);
uiAcidTimer = urand(10*IN_MILISECONDS,14*IN_MILISECONDS);
uiLeechTimer = urand(3*IN_MILISECONDS,9*IN_MILISECONDS);
uiPierceTimer = urand(1*IN_MILISECONDS,3*IN_MILISECONDS);
uiGrabTimer = urand(15*IN_MILISECONDS,19*IN_MILISECONDS);
uiDoorsTimer = urand(20*IN_MILISECONDS,30*IN_MILISECONDS);
uiCheckDistanceTimer = 2*IN_MILISECONDS;
CheckDistanceTimer = 2000;
if (pInstance && (pInstance->GetData(DATA_HADRONOX_EVENT) != DONE && !FirstTime))
if (pInstance && (pInstance->GetData(DATA_HADRONOX_EVENT) != DONE && !bFirstTime))
pInstance->SetData(DATA_HADRONOX_EVENT, FAIL);
FirstTime = false;
bFirstTime = false;
}
//when Hadronox kills any enemy (that includes a party member) she will regain 10% of her HP if the target had Leech Poison on
void KilledUnit(Unit* Victim)
{
// not sure if this aura check is correct, I think it is though
if (!Victim || !Victim->HasAura(DUNGEON_MODE(SPELL_LEECH_POISON, SPELL_LEECH_POISON_H)) || !m_creature->isAlive())
if (!Victim || !Victim->HasAura(DUNGEON_MODE(SPELL_LEECH_POISON, H_SPELL_LEECH_POISON)) || !m_creature->isAlive())
return;
uint32 health = (m_creature->GetMaxHealth()/100)*10;
uint32 health = m_creature->GetMaxHealth()/10;
if ((m_creature->GetHealth()+health) >= m_creature->GetMaxHealth())
m_creature->SetHealth(m_creature->GetMaxHealth());
@@ -127,11 +121,11 @@ struct boss_hadronoxAI : public ScriptedAI
float x=0.0f, y=0.0f, z=0.0f;
m_creature->GetRespawnCoord(x,y,z);
if (CheckDistanceTimer <= uiDiff)
CheckDistanceTimer = 5000;
if (uiCheckDistanceTimer <= uiDiff)
uiCheckDistanceTimer = 5*IN_MILISECONDS;
else
{
CheckDistanceTimer -= uiDiff;
uiCheckDistanceTimer -= uiDiff;
return;
}
if (m_creature->IsInEvadeMode() || !m_creature->getVictim())
@@ -146,7 +140,7 @@ struct boss_hadronoxAI : public ScriptedAI
if (!UpdateVictim()) return;
// Without he comes up through the air to players on the bridge after krikthir if players crossing this bridge!
CheckDistance(MaxDistance, diff);
CheckDistance(fMaxDistance, diff);
if (m_creature->HasAura(SPELL_WEB_FRONT_DOORS) || m_creature->HasAura(SPELL_WEB_SIDE_DOORS))
{
@@ -156,42 +150,41 @@ struct boss_hadronoxAI : public ScriptedAI
else if (!IsCombatMovement())
SetCombatMovement(true);
if (piercetimer <= diff)
if (uiPierceTimer <= diff)
{
DoCast(m_creature->getVictim(), SPELL_PIERCE_ARMOR);
piercetimer = 8000;
} else piercetimer -= diff;
uiPierceTimer = 8*IN_MILISECONDS;
} else uiPierceTimer -= diff;
if (acidtimer <= diff)
if (uiAcidTimer <= diff)
{
if (Unit* pTarget = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true))
DoCast(pTarget, DUNGEON_MODE(SPELL_ACID_CLOUD, SPELL_ACID_CLOUD_H));
DoCast(pTarget, DUNGEON_MODE(SPELL_ACID_CLOUD, H_SPELL_ACID_CLOUD));
acidtimer = urand(20000,30000);
} else acidtimer -= diff;
uiAcidTimer = urand(20*IN_MILISECONDS,30*IN_MILISECONDS);
} else uiAcidTimer -= diff;
if (leechtimer <= diff)
if (uiLeechTimer <= diff)
{
if (Unit* pTarget = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true))
DoCast(pTarget, DUNGEON_MODE(SPELL_LEECH_POISON, SPELL_LEECH_POISON_H));
DoCast(pTarget, DUNGEON_MODE(SPELL_LEECH_POISON, H_SPELL_LEECH_POISON));
leechtimer = urand(11000,14000);
} else leechtimer -= diff;
uiLeechTimer = urand(11*IN_MILISECONDS,14*IN_MILISECONDS);
} else uiLeechTimer -= diff;
if (grabtimer <= diff)
if (uiGrabTimer <= diff)
{
if (Unit* pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0)) // Draws all players (and attacking Mobs) to itself.
DoCast(pTarget, DUNGEON_MODE(SPELL_WEB_GRAB, SPELL_WEB_GRAB_H));
DoCast(pTarget, DUNGEON_MODE(SPELL_WEB_GRAB, H_SPELL_WEB_GRAB));
grabtimer = urand(15000,30000);
} else grabtimer -= diff;
uiGrabTimer = urand(15*IN_MILISECONDS,30*IN_MILISECONDS);
} else uiGrabTimer -= diff;
if (doorstimer <= diff)
{/* Debuff bleibt auf den Spielern bis zum Tod...
DoCast(m_creature, RAND(SPELL_WEB_FRONT_DOORS, SPELL_WEB_SIDE_DOORS));
*/
doorstimer = urand(30000,60000);
} else doorstimer -= diff;
if (uiDoorsTimer <= diff)
{
//DoCast(m_creature, RAND(SPELL_WEB_FRONT_DOORS, SPELL_WEB_SIDE_DOORS));
uiDoorsTimer = urand(30*IN_MILISECONDS,60*IN_MILISECONDS);
} else uiDoorsTimer -= diff;
DoMeleeAttackIfReady();
}
@@ -1,5 +1,5 @@
/*
* Copyright (C) 2009 Trinity <http://www.trinitycore.org/>
* Copyright (C) 2009 - 2010 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -16,84 +16,81 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
/* ScriptData
SDName: boss_krikthir_the_gatewatcher
SD%Complete: 80 %
SDComment: Find in the future best timers and the event is not implemented.
SDCategory: Azjol Nerub
EndScriptData */
/*** SQL START ***
update creature_template set scriptname = 'boss_krik_thir' where entry = '';
*** SQL END ***/
/*
* Comment: Find in the future best timers and the event is not implemented.
*/
#include "ScriptedPch.h"
#include "azjol_nerub.h"
enum Spells
{
SPELL_MIND_FLAY = 52586,
H_SPELL_MIND_FLAY = 59367,
SPELL_CURSE_OF_FATIGUE = 52592,
H_SPELL_CURSE_OF_FATIGUE = 59368,
SPELL_FRENZY = 28747, //maybe 53361
SPELL_SUMMON_SKITTERING_SWARMER = 52438, //AOE Effect 140, maybe 52439
SPELL_SUMMON_SKITTERING_SWARMER_1 = 52439, //Summon 3x 28735
H_SPELL_ACID_SPLASH = 59363,
SPELL_ACID_SPLASH = 52446,
SPELL_CHARGE = 16979,//maybe is another spell
SPELL_BACKSTAB = 52540,
SPELL_SHADOW_BOLT = 52534,
H_SPELL_SHADOW_BOLT = 59357,
SPELL_SHADOW_NOVA = 52535,
H_SPELL_SHADOW_NOVA = 59358,
SPELL_STRIKE = 52532,
SPELL_CLEAVE = 49806,
SPELL_ENRAGE = 52470,
SPELL_INFECTED_BITE = 52469,
H_SPELL_INFECTED_BITE = 59364,
SPELL_WEB_WRAP = 52086,//the spell is not working propperly
SPELL_BLINDING_WEBS = 52524,
H_SPELL_BLINDING_WEBS = 59365,
SPELL_POSION_SPRAY = 52493,
H_SPELL_POSION_SPRAY = 59366,
SPELL_MIND_FLAY = 52586,
H_SPELL_MIND_FLAY = 59367,
SPELL_CURSE_OF_FATIGUE = 52592,
H_SPELL_CURSE_OF_FATIGUE = 59368,
SPELL_FRENZY = 28747, //maybe 53361
SPELL_SUMMON_SKITTERING_SWARMER = 52438, //AOE Effect 140, maybe 52439
SPELL_SUMMON_SKITTERING_SWARMER_1 = 52439, //Summon 3x 28735
H_SPELL_ACID_SPLASH = 59363,
SPELL_ACID_SPLASH = 52446,
SPELL_CHARGE = 16979,//maybe is another spell
SPELL_BACKSTAB = 52540,
SPELL_SHADOW_BOLT = 52534,
H_SPELL_SHADOW_BOLT = 59357,
SPELL_SHADOW_NOVA = 52535,
H_SPELL_SHADOW_NOVA = 59358,
SPELL_STRIKE = 52532,
SPELL_CLEAVE = 49806,
SPELL_ENRAGE = 52470,
SPELL_INFECTED_BITE = 52469,
H_SPELL_INFECTED_BITE = 59364,
SPELL_WEB_WRAP = 52086,//the spell is not working properly
SPELL_BLINDING_WEBS = 52524,
H_SPELL_BLINDING_WEBS = 59365,
SPELL_POSION_SPRAY = 52493,
H_SPELL_POSION_SPRAY = 59366
};
enum Mobs
{
MOB_SKITTERING_SWARMER = 28735,
MOB_SKITTERING_SWARMER_CONTROLLER = 32593,
MOB_SKITTERING_INFECTIOR = 28736,
MOB_SKITTERING_SWARMER = 28735,
MOB_SKITTERING_SWARMER_CONTROLLER = 32593,
MOB_SKITTERING_INFECTIOR = 28736
};
enum Yells
{
SAY_AGGRO = -1601000,
SAY_SLAY_1 = -1601001,
SAY_SLAY_2 = -1601002,
SAY_DEATH = -1601003,
SAY_AGGRO = -1601000,
SAY_SLAY_1 = -1601001,
SAY_SLAY_2 = -1601002,
SAY_DEATH = -1601003,
//Not in db
SAY_SEND_GROUP_1 = -1601004,
SAY_SEND_GROUP_2 = -1601005,
SAY_SEND_GROUP_3 = -1601006,
SAY_SWARM_1 = -1601007,
SAY_SWARM_2 = -1601008,
SAY_PREFIGHT_1 = -1601009,
SAY_PREFIGHT_2 = -1601010,
SAY_PREFIGHT_3 = -1601011,
SAY_SEND_GROUP_1 = -1601004,
SAY_SEND_GROUP_2 = -1601005,
SAY_SEND_GROUP_3 = -1601006,
SAY_SWARM_1 = -1601007,
SAY_SWARM_2 = -1601008,
SAY_PREFIGHT_1 = -1601009,
SAY_PREFIGHT_2 = -1601010,
SAY_PREFIGHT_3 = -1601011
};
enum Misc
{
ACHIEVEMENT_WATCH_HIM_DIE = 1296
ACHIEV_WATH_HIM_DIE = 1296
};
const Position SpawnPoint[] =
{
{ 566.164, 682.087, 769.079, 2.21657 },
{ 529.042, 706.941, 777.298, 1.0821 },
{ 489.975, 671.239, 772.131, 0.261799 },
{ 488.556, 692.95, 771.764, 4.88692 },
{ 553.34, 640.387, 777.419, 1.20428 },
{ 517.486, 706.398, 777.335, 5.35816 },
{ 504.01, 637.693, 777.479, 0.506145 },
{ 552.625, 706.408, 777.177, 3.4383 }
};
struct boss_krik_thirAI : public ScriptedAI
{
@@ -104,14 +101,14 @@ struct boss_krik_thirAI : public ScriptedAI
ScriptedInstance* pInstance;
uint32 MindFlayTimer;
uint32 CurseFatigueTimer;
uint32 SummonTimer;
uint32 uiMindFlayTimer;
uint32 uiCurseFatigueTimer;
uint32 uiSummonTimer;
void Reset()
{
MindFlayTimer = 15000;
CurseFatigueTimer = 12000;
uiMindFlayTimer = 15*IN_MILISECONDS;
uiCurseFatigueTimer = 12*IN_MILISECONDS;
if (pInstance)
pInstance->SetData(DATA_KRIKTHIR_THE_GATEWATCHER_EVENT, NOT_STARTED);
@@ -121,7 +118,7 @@ struct boss_krik_thirAI : public ScriptedAI
{
DoScriptText(SAY_AGGRO, m_creature);
Summon();
SummonTimer = 15000;
uiSummonTimer = 15*IN_MILISECONDS;
if (pInstance)
pInstance->SetData(DATA_KRIKTHIR_THE_GATEWATCHER_EVENT, IN_PROGRESS);
@@ -129,22 +126,22 @@ struct boss_krik_thirAI : public ScriptedAI
void Summon()
{
m_creature->SummonCreature(MOB_SKITTERING_SWARMER,566.164,682.087,769.079,2.21657,TEMPSUMMON_TIMED_DESPAWN,25000);
m_creature->SummonCreature(MOB_SKITTERING_SWARMER,566.164,682.087,769.079,2.21657,TEMPSUMMON_TIMED_DESPAWN,25000);
m_creature->SummonCreature(MOB_SKITTERING_SWARMER,529.042,706.941,777.298,1.0821,TEMPSUMMON_TIMED_DESPAWN,25000);
m_creature->SummonCreature(MOB_SKITTERING_SWARMER,529.042,706.941,777.298,1.0821,TEMPSUMMON_TIMED_DESPAWN,25000);
m_creature->SummonCreature(MOB_SKITTERING_SWARMER,489.975,671.239,772.131,0.261799,TEMPSUMMON_TIMED_DESPAWN,25000);
m_creature->SummonCreature(MOB_SKITTERING_SWARMER,489.975,671.239,772.131,0.261799,TEMPSUMMON_TIMED_DESPAWN,25000);
m_creature->SummonCreature(MOB_SKITTERING_SWARMER,488.556,692.95,771.764,4.88692,TEMPSUMMON_TIMED_DESPAWN,25000);
m_creature->SummonCreature(MOB_SKITTERING_SWARMER,488.556,692.95,771.764,4.88692,TEMPSUMMON_TIMED_DESPAWN,25000);
m_creature->SummonCreature(MOB_SKITTERING_INFECTIOR,553.34,640.387,777.419,1.20428,TEMPSUMMON_TIMED_DESPAWN,25000);
m_creature->SummonCreature(MOB_SKITTERING_SWARMER,553.34,640.387,777.419,1.20428,TEMPSUMMON_TIMED_DESPAWN,25000);
m_creature->SummonCreature(MOB_SKITTERING_INFECTIOR,517.486,706.398,777.335,5.35816,TEMPSUMMON_TIMED_DESPAWN,25000);
m_creature->SummonCreature(MOB_SKITTERING_SWARMER,517.486,706.398,777.335,5.35816,TEMPSUMMON_TIMED_DESPAWN,25000);
m_creature->SummonCreature(MOB_SKITTERING_INFECTIOR,504.01,637.693,777.479,0.506145,TEMPSUMMON_TIMED_DESPAWN,25000);
m_creature->SummonCreature(MOB_SKITTERING_SWARMER,504.01,637.693,777.479,0.506145,TEMPSUMMON_TIMED_DESPAWN,25000);
m_creature->SummonCreature(MOB_SKITTERING_SWARMER,552.625,706.408,777.177,3.4383,TEMPSUMMON_TIMED_DESPAWN,25000);
m_creature->SummonCreature(MOB_SKITTERING_SWARMER,552.625,706.408,777.177,3.4383,TEMPSUMMON_TIMED_DESPAWN,25000);
m_creature->SummonCreature(MOB_SKITTERING_SWARMER,SpawnPoint[0],TEMPSUMMON_TIMED_DESPAWN,25*IN_MILISECONDS);
m_creature->SummonCreature(MOB_SKITTERING_SWARMER,SpawnPoint[0],TEMPSUMMON_TIMED_DESPAWN,25*IN_MILISECONDS);
m_creature->SummonCreature(MOB_SKITTERING_SWARMER,SpawnPoint[1],TEMPSUMMON_TIMED_DESPAWN,25*IN_MILISECONDS);
m_creature->SummonCreature(MOB_SKITTERING_SWARMER,SpawnPoint[1],TEMPSUMMON_TIMED_DESPAWN,25*IN_MILISECONDS);
m_creature->SummonCreature(MOB_SKITTERING_SWARMER,SpawnPoint[2],TEMPSUMMON_TIMED_DESPAWN,25*IN_MILISECONDS);
m_creature->SummonCreature(MOB_SKITTERING_SWARMER,SpawnPoint[2],TEMPSUMMON_TIMED_DESPAWN,25*IN_MILISECONDS);
m_creature->SummonCreature(MOB_SKITTERING_SWARMER,SpawnPoint[3],TEMPSUMMON_TIMED_DESPAWN,25*IN_MILISECONDS);
m_creature->SummonCreature(MOB_SKITTERING_SWARMER,SpawnPoint[3],TEMPSUMMON_TIMED_DESPAWN,25*IN_MILISECONDS);
m_creature->SummonCreature(MOB_SKITTERING_INFECTIOR,SpawnPoint[4],TEMPSUMMON_TIMED_DESPAWN,25*IN_MILISECONDS);
m_creature->SummonCreature(MOB_SKITTERING_SWARMER,SpawnPoint[4],TEMPSUMMON_TIMED_DESPAWN,25*IN_MILISECONDS);
m_creature->SummonCreature(MOB_SKITTERING_INFECTIOR,SpawnPoint[5],TEMPSUMMON_TIMED_DESPAWN,25*IN_MILISECONDS);
m_creature->SummonCreature(MOB_SKITTERING_SWARMER,SpawnPoint[5],TEMPSUMMON_TIMED_DESPAWN,25*IN_MILISECONDS);
m_creature->SummonCreature(MOB_SKITTERING_INFECTIOR,SpawnPoint[6],TEMPSUMMON_TIMED_DESPAWN,25*IN_MILISECONDS);
m_creature->SummonCreature(MOB_SKITTERING_SWARMER,SpawnPoint[6],TEMPSUMMON_TIMED_DESPAWN,25*IN_MILISECONDS);
m_creature->SummonCreature(MOB_SKITTERING_SWARMER,SpawnPoint[7],TEMPSUMMON_TIMED_DESPAWN,25*IN_MILISECONDS);
m_creature->SummonCreature(MOB_SKITTERING_SWARMER,SpawnPoint[7],TEMPSUMMON_TIMED_DESPAWN,25*IN_MILISECONDS);
}
void UpdateAI(const uint32 diff)
@@ -152,19 +149,19 @@ struct boss_krik_thirAI : public ScriptedAI
if (!UpdateVictim())
return;
if (SummonTimer <= diff)
if (uiSummonTimer <= diff)
{
Summon();
SummonTimer = 15000;
} else SummonTimer -= diff;
uiSummonTimer = 15*IN_MILISECONDS;
} else uiSummonTimer -= diff;
if (MindFlayTimer <= diff)
if (uiMindFlayTimer <= diff)
{
DoCast(m_creature->getVictim(), DUNGEON_MODE(SPELL_MIND_FLAY, H_SPELL_MIND_FLAY));
MindFlayTimer = 15000;
} else MindFlayTimer -= diff;
uiMindFlayTimer = 15*IN_MILISECONDS;
} else uiMindFlayTimer -= diff;
if (CurseFatigueTimer <= diff)
if (uiCurseFatigueTimer <= diff)
{
//WowWiki say "Curse of Fatigue-Kirk'thir will cast Curse of Fatigue on 2-3 targets periodically."
Unit *pTarget = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true);
@@ -173,10 +170,10 @@ struct boss_krik_thirAI : public ScriptedAI
DoCast(pTarget, DUNGEON_MODE(SPELL_CURSE_OF_FATIGUE, H_SPELL_CURSE_OF_FATIGUE));
DoCast(pTarget_1, DUNGEON_MODE(SPELL_CURSE_OF_FATIGUE, H_SPELL_CURSE_OF_FATIGUE));
CurseFatigueTimer = 10000;
} else CurseFatigueTimer -= diff;
uiCurseFatigueTimer = 10*IN_MILISECONDS;
} else uiCurseFatigueTimer -= diff;
if (!m_creature->HasAura(SPELL_FRENZY) && m_creature->GetHealth()*100 / m_creature->GetMaxHealth() <= 10)
if (!m_creature->HasAura(SPELL_FRENZY) && HealthBelowPct(10))
DoCast(m_creature, SPELL_FRENZY, true);
DoMeleeAttackIfReady();
@@ -189,19 +186,12 @@ struct boss_krik_thirAI : public ScriptedAI
{
pInstance->SetData(DATA_KRIKTHIR_THE_GATEWATCHER_EVENT, DONE);
//Achievement: Watch him die
AchievementEntry const *AchievWatchHimDie = GetAchievementStore()->LookupEntry(ACHIEVEMENT_WATCH_HIM_DIE);
Map* pMap = m_creature->GetMap();
Creature *pAdd1, *pAdd2, *pAdd3;
if ((pAdd1 = Unit::GetCreature(*m_creature, pInstance->GetData64(DATA_WATCHER_GASHRA))) && pAdd1->isAlive() &&
(pAdd2 = Unit::GetCreature(*m_creature, pInstance->GetData64(DATA_WATCHER_SILTHIK))) && pAdd2->isAlive() &&
(pAdd3 = Unit::GetCreature(*m_creature, pInstance->GetData64(DATA_WATCHER_NARJIL))) && pAdd3->isAlive() &&
IsHeroic() && pMap && pMap->IsDungeon() && AchievWatchHimDie)
{
Map::PlayerList const &players = pMap->GetPlayers();
for (Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr)
if (itr->getSource())
itr->getSource()->CompletedAchievement(AchievWatchHimDie);
}
IsHeroic())
pInstance->DoCompleteAchievement(ACHIEV_WATH_HIM_DIE);
}
}
void KilledUnit(Unit *victim)
@@ -214,7 +204,7 @@ struct boss_krik_thirAI : public ScriptedAI
void JustSummoned(Creature* summoned)
{
summoned->GetMotionMaster()->MovePoint(m_creature->GetEntry(),m_creature->GetPositionX(),m_creature->GetPositionY(),m_creature->GetPositionZ());
summoned->GetMotionMaster()->MovePoint(0,m_creature->GetPositionX(),m_creature->GetPositionY(),m_creature->GetPositionZ());
}
};
@@ -234,13 +224,13 @@ struct npc_anub_ar_skirmisherAI : public ScriptedAI
{
npc_anub_ar_skirmisherAI(Creature *c) : ScriptedAI(c) {}
uint32 ChargeTimer;
uint32 BackstabTimer;
uint32 uiChargeTimer;
uint32 uiBackstabTimer;
void Reset()
{
ChargeTimer = 11000;
BackstabTimer = 7000;
uiChargeTimer = 11*IN_MILISECONDS;
uiBackstabTimer = 7*IN_MILISECONDS;
}
void UpdateAI(const uint32 diff)
@@ -248,7 +238,7 @@ struct npc_anub_ar_skirmisherAI : public ScriptedAI
if (!UpdateVictim())
return;
if (ChargeTimer <= diff)
if (uiChargeTimer <= diff)
{
if (Unit* pTarget = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true))
{
@@ -256,15 +246,14 @@ struct npc_anub_ar_skirmisherAI : public ScriptedAI
m_creature->AddThreat(pTarget,1.0f);
DoCast(pTarget, SPELL_CHARGE, true);
}
uiChargeTimer = 15*IN_MILISECONDS;
} else uiChargeTimer -= diff;
ChargeTimer = 15000;
} else ChargeTimer -= diff;
if (BackstabTimer <= diff)
if (uiBackstabTimer <= diff)
{
DoCast(m_creature->getVictim(), SPELL_BACKSTAB);
BackstabTimer = 12000;
} else BackstabTimer -= diff;
uiBackstabTimer = 12*IN_MILISECONDS;
} else uiBackstabTimer -= diff;
DoMeleeAttackIfReady();
@@ -275,13 +264,13 @@ struct npc_anub_ar_shadowcasterAI : public ScriptedAI
{
npc_anub_ar_shadowcasterAI(Creature *c) : ScriptedAI(c) {}
uint32 ShadowBoltTimer;
uint32 ShadowNovaTimer;
uint32 uiShadowBoltTimer;
uint32 uiShadowNovaTimer;
void Reset()
{
ShadowBoltTimer = 6000;
ShadowNovaTimer = 15000;
uiShadowBoltTimer = 6*IN_MILISECONDS;
uiShadowNovaTimer = 15*IN_MILISECONDS;
}
void UpdateAI(const uint32 diff)
@@ -289,18 +278,18 @@ struct npc_anub_ar_shadowcasterAI : public ScriptedAI
if (!UpdateVictim())
return;
if (ShadowBoltTimer <= diff)
if (uiShadowBoltTimer <= diff)
{
if (Unit *pTarget = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true))
DoCast(pTarget, DUNGEON_MODE(SPELL_SHADOW_BOLT, H_SPELL_SHADOW_BOLT), true);
ShadowBoltTimer = 15000;
} else ShadowBoltTimer -= diff;
uiShadowBoltTimer = 15*IN_MILISECONDS;
} else uiShadowBoltTimer -= diff;
if (ShadowNovaTimer <= diff)
if (uiShadowNovaTimer <= diff)
{
DoCast(m_creature->getVictim(), DUNGEON_MODE(SPELL_SHADOW_NOVA, H_SPELL_SHADOW_NOVA), true);
ShadowNovaTimer = 17000;
} else ShadowNovaTimer -= diff;
uiShadowNovaTimer = 17*IN_MILISECONDS;
} else uiShadowNovaTimer -= diff;
DoMeleeAttackIfReady();
}
@@ -310,13 +299,13 @@ struct npc_anub_ar_warriorAI : public ScriptedAI
{
npc_anub_ar_warriorAI(Creature *c) : ScriptedAI(c){}
uint32 CleaveTimer;
uint32 StrikeTimer;
uint32 uiCleaveTimer;
uint32 uiStrikeTimer;
void Reset()
{
CleaveTimer = 11000;
StrikeTimer = 6000;
uiCleaveTimer = 11*IN_MILISECONDS;
uiStrikeTimer = 6*IN_MILISECONDS;
}
void UpdateAI(const uint32 diff)
@@ -324,17 +313,17 @@ struct npc_anub_ar_warriorAI : public ScriptedAI
if (!UpdateVictim())
return;
if (StrikeTimer <= diff)
if (uiStrikeTimer <= diff)
{
DoCast(m_creature->getVictim(), SPELL_STRIKE, true);
StrikeTimer = 15000;
} else StrikeTimer -= diff;
uiStrikeTimer = 15*IN_MILISECONDS;
} else uiStrikeTimer -= diff;
if (CleaveTimer <= diff)
if (uiCleaveTimer <= diff)
{
DoCast(m_creature->getVictim(), SPELL_CLEAVE, true);
CleaveTimer = 17000;
} else CleaveTimer -= diff;
uiCleaveTimer = 17*IN_MILISECONDS;
} else uiCleaveTimer -= diff;
DoMeleeAttackIfReady();
@@ -346,13 +335,13 @@ struct npc_watcher_gashraAI : public ScriptedAI
{
npc_watcher_gashraAI(Creature *c) : ScriptedAI(c) {}
uint32 WebWrapTimer;
uint32 InfectedBiteTimer;
uint32 uiWebWrapTimer;
uint32 uiInfectedBiteTimer;
void Reset()
{
WebWrapTimer = 11000;
InfectedBiteTimer = 4000;
uiWebWrapTimer = 11*IN_MILISECONDS;
uiInfectedBiteTimer = 4*IN_MILISECONDS;
}
void EnterCombat(Unit* who)
@@ -365,18 +354,18 @@ struct npc_watcher_gashraAI : public ScriptedAI
if (!UpdateVictim())
return;
if (WebWrapTimer <= diff)
if (uiWebWrapTimer <= diff)
{
if (Unit *pTarget = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true))
DoCast(pTarget, SPELL_WEB_WRAP, true);
WebWrapTimer = 17000;
} else WebWrapTimer -= diff;
uiWebWrapTimer = 17*IN_MILISECONDS;
} else uiWebWrapTimer -= diff;
if (InfectedBiteTimer <= diff)
if (uiInfectedBiteTimer <= diff)
{
DoCast(m_creature->getVictim(), DUNGEON_MODE(SPELL_INFECTED_BITE, H_SPELL_INFECTED_BITE), true);
InfectedBiteTimer = 15000;
} else InfectedBiteTimer -= diff;
uiInfectedBiteTimer = 15*IN_MILISECONDS;
} else uiInfectedBiteTimer -= diff;
DoMeleeAttackIfReady();
}
@@ -386,15 +375,15 @@ struct npc_watcher_narjilAI : public ScriptedAI
{
npc_watcher_narjilAI(Creature *c) : ScriptedAI(c) {}
uint32 WebWrapTimer;
uint32 InfectedBiteTimer;
uint32 BlindingWebsTimer;
uint32 uiWebWrapTimer;
uint32 uiInfectedBiteTimer;
uint32 uiBindingWebsTimer;
void Reset()
{
WebWrapTimer = 11000;
InfectedBiteTimer = 4000;
BlindingWebsTimer = 17000;
uiWebWrapTimer = 11*IN_MILISECONDS;
uiInfectedBiteTimer = 4*IN_MILISECONDS;
uiBindingWebsTimer = 17*IN_MILISECONDS;
}
void UpdateAI(const uint32 diff)
@@ -402,24 +391,24 @@ struct npc_watcher_narjilAI : public ScriptedAI
if (!UpdateVictim())
return;
if (WebWrapTimer <= diff)
if (uiWebWrapTimer <= diff)
{
if (Unit *pTarget = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true))
DoCast(pTarget, SPELL_WEB_WRAP, true);
WebWrapTimer = 15000;
} else WebWrapTimer -= diff;
uiWebWrapTimer = 15*IN_MILISECONDS;
} else uiWebWrapTimer -= diff;
if (InfectedBiteTimer <= diff)
if (uiInfectedBiteTimer <= diff)
{
DoCast(m_creature->getVictim(), DUNGEON_MODE(SPELL_INFECTED_BITE, H_SPELL_INFECTED_BITE), true);
InfectedBiteTimer = 11000;
} else InfectedBiteTimer -= diff;
uiInfectedBiteTimer = 11*IN_MILISECONDS;
} else uiInfectedBiteTimer -= diff;
if (BlindingWebsTimer <= diff)
if (uiBindingWebsTimer <= diff)
{
DoCast(m_creature->getVictim(), DUNGEON_MODE(SPELL_BLINDING_WEBS, H_SPELL_BLINDING_WEBS), true);
BlindingWebsTimer = 17000;
} else BlindingWebsTimer -= diff;
uiBindingWebsTimer = 17*IN_MILISECONDS;
} else uiBindingWebsTimer -= diff;
DoMeleeAttackIfReady();
}
@@ -429,15 +418,15 @@ struct npc_watcher_silthikAI : public ScriptedAI
{
npc_watcher_silthikAI(Creature *c) : ScriptedAI(c) {}
uint32 WebWrapTimer;
uint32 InfectedBiteTimer;
uint32 PosionSprayTimer;
uint32 uiWebWrapTimer;
uint32 uiInfectedBiteTimer;
uint32 uiPoisonSprayTimer;
void Reset()
{
WebWrapTimer = 11000;
InfectedBiteTimer = 4000;
PosionSprayTimer = 15000;
uiWebWrapTimer = 11*IN_MILISECONDS;
uiInfectedBiteTimer = 4*IN_MILISECONDS;
uiPoisonSprayTimer = 15*IN_MILISECONDS;
}
void UpdateAI(const uint32 diff)
@@ -445,25 +434,25 @@ struct npc_watcher_silthikAI : public ScriptedAI
if (!UpdateVictim())
return;
if (WebWrapTimer <= diff)
if (uiWebWrapTimer <= diff)
{
if (Unit *pTarget = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true))
DoCast(pTarget, SPELL_WEB_WRAP, true);
WebWrapTimer = 15000;
} else WebWrapTimer -= diff;
uiWebWrapTimer = 15*IN_MILISECONDS;
} else uiWebWrapTimer -= diff;
if (InfectedBiteTimer <= diff)
if (uiInfectedBiteTimer <= diff)
{
DoCast(m_creature->getVictim(), DUNGEON_MODE(SPELL_INFECTED_BITE, H_SPELL_INFECTED_BITE), true);
InfectedBiteTimer = 15000;
} else InfectedBiteTimer -= diff;
uiInfectedBiteTimer = 15*IN_MILISECONDS;
} else uiInfectedBiteTimer -= diff;
if (PosionSprayTimer <= diff)
if (uiPoisonSprayTimer <= diff)
{
DoCast(m_creature->getVictim(), DUNGEON_MODE(SPELL_POSION_SPRAY, H_SPELL_POSION_SPRAY), true);
PosionSprayTimer = 17000;
} else PosionSprayTimer -= diff;
uiPoisonSprayTimer = 17*IN_MILISECONDS;
} else uiPoisonSprayTimer -= diff;
DoMeleeAttackIfReady();
@@ -1,5 +1,5 @@
/*
* Copyright (C) 2009 Trinity <http://www.trinitycore.org/>
* Copyright (C) 2009 - 2010 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -16,13 +16,6 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
/* ScriptData
SDName: Instance_Azjol_Nerub
SD%Complete: 0
SDComment: Placeholder
SDCategory: Azjol Nerub
EndScriptData */
#include "ScriptedPch.h"
#include "azjol_nerub.h"
@@ -38,34 +31,34 @@ struct instance_azjol_nerub : public ScriptedInstance
{
instance_azjol_nerub(Map* pMap) : ScriptedInstance(pMap) {Initialize();};
uint64 m_uiKrikthir;
uint64 m_uiHadronox;
uint64 m_uiAnubarak;
uint64 m_uiWatcherGashra;
uint64 m_uiWatcherSilthik;
uint64 m_uiWatcherNarjil;
uint64 uiKrikthir;
uint64 uiHadronox;
uint64 uiAnubarak;
uint64 uiWatcherGashra;
uint64 uiWatcherSilthik;
uint64 uiWatcherNarjil;
uint64 m_uiKrikthirDoor;
uint64 uiKrikthirDoor;
uint32 m_auiEncounter[MAX_ENCOUNTER];
uint32 auiEncounter[MAX_ENCOUNTER];
void Initialize()
{
memset(&m_auiEncounter, 0, sizeof(m_auiEncounter));
memset(&auiEncounter, 0, sizeof(auiEncounter));
m_uiKrikthir = 0;
m_uiHadronox = 0;
m_uiAnubarak = 0;
m_uiWatcherGashra = 0;
m_uiWatcherSilthik = 0;
m_uiWatcherNarjil = 0;
m_uiKrikthirDoor = 0;
uiKrikthir = 0;
uiHadronox = 0;
uiAnubarak = 0;
uiWatcherGashra = 0;
uiWatcherSilthik = 0;
uiWatcherNarjil = 0;
uiKrikthirDoor = 0;
}
bool IsEncounterInProgress() const
{
for (uint8 i = 0; i < MAX_ENCOUNTER; ++i)
if (m_auiEncounter[i] == IN_PROGRESS) return true;
if (auiEncounter[i] == IN_PROGRESS) return true;
return false;
}
@@ -74,12 +67,12 @@ struct instance_azjol_nerub : public ScriptedInstance
{
switch(pCreature->GetEntry())
{
case 28684: m_uiKrikthir = pCreature->GetGUID(); break;
case 28921: m_uiHadronox = pCreature->GetGUID(); break;
case 29120: m_uiAnubarak = pCreature->GetGUID(); break;
case 28730: m_uiWatcherGashra = pCreature->GetGUID(); break;
case 28731: m_uiWatcherSilthik = pCreature->GetGUID(); break;
case 28729: m_uiWatcherNarjil = pCreature->GetGUID(); break;
case 28684: uiKrikthir = pCreature->GetGUID(); break;
case 28921: uiHadronox = pCreature->GetGUID(); break;
case 29120: uiAnubarak = pCreature->GetGUID(); break;
case 28730: uiWatcherGashra = pCreature->GetGUID(); break;
case 28731: uiWatcherSilthik = pCreature->GetGUID(); break;
case 28729: uiWatcherNarjil = pCreature->GetGUID(); break;
}
}
@@ -88,8 +81,8 @@ struct instance_azjol_nerub : public ScriptedInstance
switch (pGo->GetEntry())
{
case 192395:
m_uiKrikthirDoor = pGo->GetGUID();
if (m_auiEncounter[0] == DONE)
uiKrikthirDoor = pGo->GetGUID();
if (auiEncounter[0] == DONE)
HandleGameObject(NULL,true,pGo);
break;
}
@@ -99,12 +92,12 @@ struct instance_azjol_nerub : public ScriptedInstance
{
switch(identifier)
{
case DATA_KRIKTHIR_THE_GATEWATCHER: return m_uiKrikthir;
case DATA_HADRONOX: return m_uiHadronox;
case DATA_ANUBARAK: return m_uiAnubarak;
case DATA_WATCHER_GASHRA: return m_uiWatcherGashra;
case DATA_WATCHER_SILTHIK: return m_uiWatcherSilthik;
case DATA_WATCHER_NARJIL: return m_uiWatcherNarjil;
case DATA_KRIKTHIR_THE_GATEWATCHER: return uiKrikthir;
case DATA_HADRONOX: return uiHadronox;
case DATA_ANUBARAK: return uiAnubarak;
case DATA_WATCHER_GASHRA: return uiWatcherGashra;
case DATA_WATCHER_SILTHIK: return uiWatcherSilthik;
case DATA_WATCHER_NARJIL: return uiWatcherNarjil;
}
return 0;
@@ -115,14 +108,14 @@ struct instance_azjol_nerub : public ScriptedInstance
switch(type)
{
case DATA_KRIKTHIR_THE_GATEWATCHER_EVENT:
m_auiEncounter[0] = data;
auiEncounter[0] = data;
if (data == DONE)
HandleGameObject(m_uiKrikthirDoor,true);
HandleGameObject(uiKrikthirDoor,true);
break;
case DATA_HADRONOX_EVENT:
m_auiEncounter[1] = data; break;
auiEncounter[1] = data; break;
case DATA_ANUBARAK_EVENT:
m_auiEncounter[2] = data; break;
auiEncounter[2] = data; break;
}
if (data == DONE)
@@ -135,9 +128,9 @@ struct instance_azjol_nerub : public ScriptedInstance
{
switch(type)
{
case DATA_KRIKTHIR_THE_GATEWATCHER_EVENT: return m_auiEncounter[0];
case DATA_HADRONOX_EVENT: return m_auiEncounter[1];
case DATA_ANUBARAK_EVENT: return m_auiEncounter[2];
case DATA_KRIKTHIR_THE_GATEWATCHER_EVENT: return auiEncounter[0];
case DATA_HADRONOX_EVENT: return auiEncounter[1];
case DATA_ANUBARAK_EVENT: return auiEncounter[2];
}
return 0;
@@ -147,16 +140,12 @@ struct instance_azjol_nerub : public ScriptedInstance
{
OUT_SAVE_INST_DATA;
std::string str_data;
std::ostringstream saveStream;
saveStream << "A N " << m_auiEncounter[0] << " " << m_auiEncounter[1] << " "
<< m_auiEncounter[2];
str_data = saveStream.str();
saveStream << "A N " << auiEncounter[0] << " " << auiEncounter[1] << " "
<< auiEncounter[2];
OUT_SAVE_INST_DATA_COMPLETE;
return str_data;
return saveStream.str();
}
void Load(const char* in)
@@ -177,13 +166,13 @@ struct instance_azjol_nerub : public ScriptedInstance
if (dataHead1 == 'A' && dataHead2 == 'N')
{
m_auiEncounter[0] = data0;
m_auiEncounter[1] = data1;
m_auiEncounter[2] = data2;
auiEncounter[0] = data0;
auiEncounter[1] = data1;
auiEncounter[2] = data2;
for (uint8 i = 0; i < MAX_ENCOUNTER; ++i)
if (m_auiEncounter[i] == IN_PROGRESS)
m_auiEncounter[i] = NOT_STARTED;
if (auiEncounter[i] == IN_PROGRESS)
auiEncounter[i] = NOT_STARTED;
} else OUT_LOAD_INST_DATA_FAIL;