convert Hellfire Ramparts to new format
--HG-- branch : trunk
This commit is contained in:
+196
-172
@@ -25,184 +25,208 @@ EndScriptData */
|
|||||||
|
|
||||||
#include "ScriptPCH.h"
|
#include "ScriptPCH.h"
|
||||||
|
|
||||||
#define SAY_AGGRO_1 -1543009
|
enum eSays
|
||||||
#define SAY_AGGRO_2 -1543010
|
|
||||||
#define SAY_AGGRO_3 -1543011
|
|
||||||
#define SAY_SUMMON -1543012
|
|
||||||
#define SAY_CURSE -1543013
|
|
||||||
#define SAY_KILL_1 -1543014
|
|
||||||
#define SAY_DIE -1543015
|
|
||||||
#define SAY_WIPE -1543016
|
|
||||||
|
|
||||||
#define SPELL_ORBITAL_STRIKE 30637
|
|
||||||
#define SPELL_SHADOW_WHIP 30638
|
|
||||||
#define SPELL_TREACHEROUS_AURA 30695
|
|
||||||
#define H_SPELL_BANE_OF_TREACHERY 37566
|
|
||||||
#define SPELL_DEMONIC_SHIELD 31901
|
|
||||||
#define SPELL_SHADOW_BOLT 30686
|
|
||||||
#define H_SPELL_SHADOW_BOLT 39297
|
|
||||||
#define SPELL_SUMMON_FIENDISH_HOUND 30707
|
|
||||||
|
|
||||||
struct boss_omor_the_unscarredAI : public ScriptedAI
|
|
||||||
{
|
{
|
||||||
boss_omor_the_unscarredAI(Creature *c) : ScriptedAI(c)
|
SAY_AGGRO_1 = -1543009,
|
||||||
{
|
SAY_AGGRO_2 = -1543010,
|
||||||
SetCombatMovement(false);
|
SAY_AGGRO_3 = -1543011,
|
||||||
}
|
SAY_SUMMON = -1543012,
|
||||||
|
SAY_CURSE = -1543013,
|
||||||
uint32 OrbitalStrike_Timer;
|
SAY_KILL_1 = -1543014,
|
||||||
uint32 ShadowWhip_Timer;
|
SAY_DIE = -1543015,
|
||||||
uint32 Aura_Timer;
|
SAY_WIPE = -1543016,
|
||||||
uint32 DemonicShield_Timer;
|
|
||||||
uint32 Shadowbolt_Timer;
|
|
||||||
uint32 Summon_Timer;
|
|
||||||
uint32 SummonedCount;
|
|
||||||
uint64 PlayerGUID;
|
|
||||||
bool CanPullBack;
|
|
||||||
|
|
||||||
void Reset()
|
|
||||||
{
|
|
||||||
DoScriptText(SAY_WIPE, me);
|
|
||||||
|
|
||||||
OrbitalStrike_Timer = 25000;
|
|
||||||
ShadowWhip_Timer = 2000;
|
|
||||||
Aura_Timer = 10000;
|
|
||||||
DemonicShield_Timer = 1000;
|
|
||||||
Shadowbolt_Timer = 2000;
|
|
||||||
Summon_Timer = 10000;
|
|
||||||
SummonedCount = 0;
|
|
||||||
PlayerGUID = 0;
|
|
||||||
CanPullBack = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
void EnterCombat(Unit * /*who*/)
|
|
||||||
{
|
|
||||||
DoScriptText(RAND(SAY_AGGRO_1,SAY_AGGRO_2,SAY_AGGRO_3), me);
|
|
||||||
}
|
|
||||||
|
|
||||||
void KilledUnit(Unit* /*victim*/)
|
|
||||||
{
|
|
||||||
if (rand()%2)
|
|
||||||
return;
|
|
||||||
|
|
||||||
DoScriptText(SAY_KILL_1, me);
|
|
||||||
}
|
|
||||||
|
|
||||||
void JustSummoned(Creature* summoned)
|
|
||||||
{
|
|
||||||
DoScriptText(SAY_SUMMON, me);
|
|
||||||
|
|
||||||
if (Unit* random = SelectUnit(SELECT_TARGET_RANDOM,0))
|
|
||||||
summoned->AI()->AttackStart(random);
|
|
||||||
|
|
||||||
++SummonedCount;
|
|
||||||
}
|
|
||||||
|
|
||||||
void JustDied(Unit* /*Killer*/)
|
|
||||||
{
|
|
||||||
DoScriptText(SAY_DIE, me);
|
|
||||||
}
|
|
||||||
|
|
||||||
void UpdateAI(const uint32 diff)
|
|
||||||
{
|
|
||||||
if (!UpdateVictim())
|
|
||||||
return;
|
|
||||||
|
|
||||||
//only two may be wrong, perhaps increase timer and spawn periodically instead.
|
|
||||||
if (SummonedCount < 2)
|
|
||||||
{
|
|
||||||
if (Summon_Timer <= diff)
|
|
||||||
{
|
|
||||||
me->InterruptNonMeleeSpells(false);
|
|
||||||
DoCast(me, SPELL_SUMMON_FIENDISH_HOUND);
|
|
||||||
Summon_Timer = 15000+rand()%15000;
|
|
||||||
} else Summon_Timer -= diff;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (CanPullBack)
|
|
||||||
{
|
|
||||||
if (ShadowWhip_Timer <= diff)
|
|
||||||
{
|
|
||||||
if (Player* temp = Unit::GetPlayer(*me, PlayerGUID))
|
|
||||||
{
|
|
||||||
//if unit dosen't have this flag, then no pulling back (script will attempt cast, even if orbital strike was resisted)
|
|
||||||
if (temp->HasUnitMovementFlag(MOVEMENTFLAG_FALLING))
|
|
||||||
{
|
|
||||||
me->InterruptNonMeleeSpells(false);
|
|
||||||
DoCast(temp, SPELL_SHADOW_WHIP);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
PlayerGUID = 0;
|
|
||||||
ShadowWhip_Timer = 2000;
|
|
||||||
CanPullBack = false;
|
|
||||||
} else ShadowWhip_Timer -= diff;
|
|
||||||
}
|
|
||||||
else if (OrbitalStrike_Timer <= diff)
|
|
||||||
{
|
|
||||||
Unit* temp = NULL;
|
|
||||||
if (me->IsWithinMeleeRange(me->getVictim()))
|
|
||||||
temp = me->getVictim();
|
|
||||||
else temp = SelectUnit(SELECT_TARGET_RANDOM,0);
|
|
||||||
|
|
||||||
if (temp && temp->GetTypeId() == TYPEID_PLAYER)
|
|
||||||
{
|
|
||||||
DoCast(temp, SPELL_ORBITAL_STRIKE);
|
|
||||||
OrbitalStrike_Timer = 14000+rand()%2000;
|
|
||||||
PlayerGUID = temp->GetGUID();
|
|
||||||
|
|
||||||
if (PlayerGUID)
|
|
||||||
CanPullBack = true;
|
|
||||||
}
|
|
||||||
} else OrbitalStrike_Timer -= diff;
|
|
||||||
|
|
||||||
if ((me->GetHealth()*100) / me->GetMaxHealth() < 20)
|
|
||||||
{
|
|
||||||
if (DemonicShield_Timer <= diff)
|
|
||||||
{
|
|
||||||
DoCast(me, SPELL_DEMONIC_SHIELD);
|
|
||||||
DemonicShield_Timer = 15000;
|
|
||||||
} else DemonicShield_Timer -= diff;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (Aura_Timer <= diff)
|
|
||||||
{
|
|
||||||
DoScriptText(SAY_CURSE, me);
|
|
||||||
|
|
||||||
if (Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM,0))
|
|
||||||
{
|
|
||||||
DoCast(pTarget, SPELL_TREACHEROUS_AURA);
|
|
||||||
Aura_Timer = 8000+rand()%8000;
|
|
||||||
}
|
|
||||||
} else Aura_Timer -= diff;
|
|
||||||
|
|
||||||
if (Shadowbolt_Timer <= diff)
|
|
||||||
{
|
|
||||||
if (Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM,0))
|
|
||||||
{
|
|
||||||
if (pTarget)
|
|
||||||
pTarget = me->getVictim();
|
|
||||||
|
|
||||||
DoCast(pTarget, SPELL_SHADOW_BOLT);
|
|
||||||
Shadowbolt_Timer = 4000+rand()%2500;
|
|
||||||
}
|
|
||||||
} else Shadowbolt_Timer -= diff;
|
|
||||||
|
|
||||||
DoMeleeAttackIfReady();
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
CreatureAI* GetAI_boss_omor_the_unscarredAI(Creature* pCreature)
|
enum eSpells
|
||||||
{
|
{
|
||||||
return new boss_omor_the_unscarredAI (pCreature);
|
SPELL_ORBITAL_STRIKE = 30637,
|
||||||
}
|
SPELL_SHADOW_WHIP = 30638,
|
||||||
|
SPELL_TREACHEROUS_AURA = 30695,
|
||||||
|
H_SPELL_BANE_OF_TREACHERY = 37566,
|
||||||
|
SPELL_DEMONIC_SHIELD = 31901,
|
||||||
|
SPELL_SHADOW_BOLT = 30686,
|
||||||
|
H_SPELL_SHADOW_BOLT = 39297,
|
||||||
|
SPELL_SUMMON_FIENDISH_HOUND= 30707,
|
||||||
|
};
|
||||||
|
|
||||||
|
class boss_omor_the_unscarred : public CreatureScript
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
|
||||||
|
boss_omor_the_unscarred()
|
||||||
|
: CreatureScript("boss_omor_the_unscarred")
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
struct boss_omor_the_unscarredAI : public ScriptedAI
|
||||||
|
{
|
||||||
|
boss_omor_the_unscarredAI(Creature* pCreature) : ScriptedAI(pCreature)
|
||||||
|
{
|
||||||
|
SetCombatMovement(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32 OrbitalStrike_Timer;
|
||||||
|
uint32 ShadowWhip_Timer;
|
||||||
|
uint32 Aura_Timer;
|
||||||
|
uint32 DemonicShield_Timer;
|
||||||
|
uint32 Shadowbolt_Timer;
|
||||||
|
uint32 Summon_Timer;
|
||||||
|
uint32 SummonedCount;
|
||||||
|
uint64 PlayerGUID;
|
||||||
|
bool CanPullBack;
|
||||||
|
|
||||||
|
void Reset()
|
||||||
|
{
|
||||||
|
DoScriptText(SAY_WIPE, me);
|
||||||
|
|
||||||
|
OrbitalStrike_Timer = 25000;
|
||||||
|
ShadowWhip_Timer = 2000;
|
||||||
|
Aura_Timer = 10000;
|
||||||
|
DemonicShield_Timer = 1000;
|
||||||
|
Shadowbolt_Timer = 2000;
|
||||||
|
Summon_Timer = 10000;
|
||||||
|
SummonedCount = 0;
|
||||||
|
PlayerGUID = 0;
|
||||||
|
CanPullBack = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
void EnterCombat(Unit * /*who*/)
|
||||||
|
{
|
||||||
|
DoScriptText(RAND(SAY_AGGRO_1,SAY_AGGRO_2,SAY_AGGRO_3), me);
|
||||||
|
}
|
||||||
|
|
||||||
|
void KilledUnit(Unit* /*victim*/)
|
||||||
|
{
|
||||||
|
if (rand()%2)
|
||||||
|
return;
|
||||||
|
|
||||||
|
DoScriptText(SAY_KILL_1, me);
|
||||||
|
}
|
||||||
|
|
||||||
|
void JustSummoned(Creature* summoned)
|
||||||
|
{
|
||||||
|
DoScriptText(SAY_SUMMON, me);
|
||||||
|
|
||||||
|
if (Unit* random = SelectUnit(SELECT_TARGET_RANDOM,0))
|
||||||
|
summoned->AI()->AttackStart(random);
|
||||||
|
|
||||||
|
++SummonedCount;
|
||||||
|
}
|
||||||
|
|
||||||
|
void JustDied(Unit* /*Killer*/)
|
||||||
|
{
|
||||||
|
DoScriptText(SAY_DIE, me);
|
||||||
|
}
|
||||||
|
|
||||||
|
void UpdateAI(const uint32 diff)
|
||||||
|
{
|
||||||
|
if (!UpdateVictim())
|
||||||
|
return;
|
||||||
|
|
||||||
|
//only two may be wrong, perhaps increase timer and spawn periodically instead.
|
||||||
|
if (SummonedCount < 2)
|
||||||
|
{
|
||||||
|
if (Summon_Timer <= diff)
|
||||||
|
{
|
||||||
|
me->InterruptNonMeleeSpells(false);
|
||||||
|
DoCast(me, SPELL_SUMMON_FIENDISH_HOUND);
|
||||||
|
Summon_Timer = 15000+rand()%15000;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
Summon_Timer -= diff;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (CanPullBack)
|
||||||
|
{
|
||||||
|
if (ShadowWhip_Timer <= diff)
|
||||||
|
{
|
||||||
|
if (Player* temp = Unit::GetPlayer(*me, PlayerGUID))
|
||||||
|
{
|
||||||
|
//if unit dosen't have this flag, then no pulling back (script will attempt cast, even if orbital strike was resisted)
|
||||||
|
if (temp->HasUnitMovementFlag(MOVEMENTFLAG_FALLING))
|
||||||
|
{
|
||||||
|
me->InterruptNonMeleeSpells(false);
|
||||||
|
DoCast(temp, SPELL_SHADOW_WHIP);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
PlayerGUID = 0;
|
||||||
|
ShadowWhip_Timer = 2000;
|
||||||
|
CanPullBack = false;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
ShadowWhip_Timer -= diff;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
if (OrbitalStrike_Timer <= diff)
|
||||||
|
{
|
||||||
|
Unit* temp = NULL;
|
||||||
|
if (me->IsWithinMeleeRange(me->getVictim()))
|
||||||
|
temp = me->getVictim();
|
||||||
|
else temp = SelectUnit(SELECT_TARGET_RANDOM,0);
|
||||||
|
|
||||||
|
if (temp && temp->GetTypeId() == TYPEID_PLAYER)
|
||||||
|
{
|
||||||
|
DoCast(temp, SPELL_ORBITAL_STRIKE);
|
||||||
|
OrbitalStrike_Timer = 14000+rand()%2000;
|
||||||
|
PlayerGUID = temp->GetGUID();
|
||||||
|
|
||||||
|
if (PlayerGUID)
|
||||||
|
CanPullBack = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
OrbitalStrike_Timer -= diff;
|
||||||
|
|
||||||
|
if ((me->GetHealth()*100) / me->GetMaxHealth() < 20)
|
||||||
|
{
|
||||||
|
if (DemonicShield_Timer <= diff)
|
||||||
|
{
|
||||||
|
DoCast(me, SPELL_DEMONIC_SHIELD);
|
||||||
|
DemonicShield_Timer = 15000;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
DemonicShield_Timer -= diff;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Aura_Timer <= diff)
|
||||||
|
{
|
||||||
|
DoScriptText(SAY_CURSE, me);
|
||||||
|
|
||||||
|
if (Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM,0))
|
||||||
|
{
|
||||||
|
DoCast(pTarget, SPELL_TREACHEROUS_AURA);
|
||||||
|
Aura_Timer = 8000+rand()%8000;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
Aura_Timer -= diff;
|
||||||
|
|
||||||
|
if (Shadowbolt_Timer <= diff)
|
||||||
|
{
|
||||||
|
if (Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM,0))
|
||||||
|
{
|
||||||
|
if (pTarget)
|
||||||
|
pTarget = me->getVictim();
|
||||||
|
|
||||||
|
DoCast(pTarget, SPELL_SHADOW_BOLT);
|
||||||
|
Shadowbolt_Timer = 4000+rand()%2500;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
Shadowbolt_Timer -= diff;
|
||||||
|
|
||||||
|
DoMeleeAttackIfReady();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
CreatureAI* GetAI(Creature* Creature) const
|
||||||
|
{
|
||||||
|
return new boss_omor_the_unscarredAI (Creature);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
void AddSC_boss_omor_the_unscarred()
|
void AddSC_boss_omor_the_unscarred()
|
||||||
{
|
{
|
||||||
Script *newscript;
|
new boss_omor_the_unscarred();
|
||||||
|
|
||||||
newscript = new Script;
|
|
||||||
newscript->Name = "boss_omor_the_unscarred";
|
|
||||||
newscript->GetAI = &GetAI_boss_omor_the_unscarredAI;
|
|
||||||
newscript->RegisterSelf();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+406
-366
@@ -50,6 +50,7 @@ enum eUnits
|
|||||||
ENTRY_REINFORCED_FEL_IRON_CHEST = 185168,
|
ENTRY_REINFORCED_FEL_IRON_CHEST = 185168,
|
||||||
ENTRY_REINFORCED_FEL_IRON_CHEST_H = 185169,
|
ENTRY_REINFORCED_FEL_IRON_CHEST_H = 185169,
|
||||||
};
|
};
|
||||||
|
|
||||||
enum eSays
|
enum eSays
|
||||||
{
|
{
|
||||||
SAY_INTRO = -1543017,
|
SAY_INTRO = -1543017,
|
||||||
@@ -70,404 +71,443 @@ const float VazrudenRing[2][3] =
|
|||||||
{-1377, 1760, 112}
|
{-1377, 1760, 112}
|
||||||
};
|
};
|
||||||
|
|
||||||
struct boss_nazanAI : public ScriptedAI
|
class boss_nazan : public CreatureScript
|
||||||
{
|
{
|
||||||
boss_nazanAI(Creature* pCreature) : ScriptedAI(pCreature)
|
public:
|
||||||
{
|
|
||||||
VazrudenGUID = 0;
|
|
||||||
flight = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
uint32 Fireball_Timer;
|
boss_nazan()
|
||||||
uint32 ConeOfFire_Timer;
|
: CreatureScript("boss_nazan")
|
||||||
uint32 BellowingRoar_Timer;
|
|
||||||
uint32 Fly_Timer;
|
|
||||||
uint32 Turn_Timer;
|
|
||||||
bool flight;
|
|
||||||
uint64 VazrudenGUID;
|
|
||||||
SpellEntry *liquid_fire;
|
|
||||||
|
|
||||||
void Reset()
|
|
||||||
{
|
|
||||||
Fireball_Timer = 4000;
|
|
||||||
Fly_Timer = 45000;
|
|
||||||
Turn_Timer = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
void EnterCombat(Unit* /*who*/) {}
|
|
||||||
|
|
||||||
void JustSummoned(Creature *summoned)
|
|
||||||
{
|
|
||||||
if (summoned && summoned->GetEntry() == ENTRY_LIQUID_FIRE)
|
|
||||||
{
|
{
|
||||||
summoned->SetLevel(me->getLevel());
|
|
||||||
summoned->setFaction(me->getFaction());
|
|
||||||
summoned->CastSpell(summoned, DUNGEON_MODE(SPELL_SUMMON_LIQUID_FIRE,SPELL_SUMMON_LIQUID_FIRE_H),true);
|
|
||||||
summoned->CastSpell(summoned,SPELL_FIRE_NOVA_VISUAL,true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void SpellHitTarget(Unit *pTarget, const SpellEntry* entry)
|
|
||||||
{
|
|
||||||
if (pTarget && entry->Id == uint32(SPELL_FIREBALL))
|
|
||||||
me->SummonCreature(ENTRY_LIQUID_FIRE,pTarget->GetPositionX(),pTarget->GetPositionY(),pTarget->GetPositionZ(),pTarget->GetOrientation(),TEMPSUMMON_TIMED_DESPAWN,30000);
|
|
||||||
}
|
|
||||||
|
|
||||||
void UpdateAI(const uint32 diff)
|
|
||||||
{
|
|
||||||
if (!UpdateVictim())
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (Fireball_Timer <= diff)
|
|
||||||
{
|
|
||||||
if (Unit* pVictim = SelectUnit(SELECT_TARGET_RANDOM,0))
|
|
||||||
DoCast(pVictim, DUNGEON_MODE(SPELL_FIREBALL, SPELL_FIREBALL_H), true);
|
|
||||||
Fireball_Timer = urand(4000,7000);
|
|
||||||
} else Fireball_Timer -= diff;
|
|
||||||
|
|
||||||
if (flight) // phase 1 - the flight
|
|
||||||
{
|
|
||||||
Creature *Vazruden = Unit::GetCreature(*me,VazrudenGUID);
|
|
||||||
if (Fly_Timer < diff || !(Vazruden && Vazruden->isAlive() && (Vazruden->GetHealth()*5 > Vazruden->GetMaxHealth())))
|
|
||||||
{
|
|
||||||
flight = false;
|
|
||||||
BellowingRoar_Timer = 6000;
|
|
||||||
ConeOfFire_Timer = 12000;
|
|
||||||
me->RemoveUnitMovementFlag(MOVEMENTFLAG_LEVITATING);
|
|
||||||
me->AddUnitMovementFlag(MOVEMENTFLAG_WALKING);
|
|
||||||
me->GetMotionMaster()->Clear();
|
|
||||||
if (Unit* pVictim = SelectUnit(SELECT_TARGET_NEAREST,0))
|
|
||||||
me->AI()->AttackStart(pVictim);
|
|
||||||
DoStartMovement(me->getVictim());
|
|
||||||
DoScriptText(EMOTE, me);
|
|
||||||
return;
|
|
||||||
} else Fly_Timer -= diff;
|
|
||||||
|
|
||||||
if (Turn_Timer <= diff)
|
|
||||||
{
|
|
||||||
uint32 waypoint = (Fly_Timer/10000)%2;
|
|
||||||
if (!me->IsWithinDist3d(VazrudenRing[waypoint][0],VazrudenRing[waypoint][1],VazrudenRing[waypoint][2], 5))
|
|
||||||
me->GetMotionMaster()->MovePoint(0,VazrudenRing[waypoint][0],VazrudenRing[waypoint][1],VazrudenRing[waypoint][2]);
|
|
||||||
Turn_Timer = 10000;
|
|
||||||
} else Turn_Timer -= diff;
|
|
||||||
}
|
|
||||||
else // phase 2 - land fight
|
|
||||||
{
|
|
||||||
if (ConeOfFire_Timer <= diff)
|
|
||||||
{
|
|
||||||
DoCast(me, DUNGEON_MODE(SPELL_CONE_OF_FIRE, SPELL_CONE_OF_FIRE_H));
|
|
||||||
ConeOfFire_Timer = 12000;
|
|
||||||
Fireball_Timer = 4000;
|
|
||||||
} else ConeOfFire_Timer -= diff;
|
|
||||||
|
|
||||||
if (IsHeroic())
|
|
||||||
if (BellowingRoar_Timer <= diff)
|
|
||||||
{
|
|
||||||
DoCast(me, SPELL_BELLOWING_ROAR);
|
|
||||||
BellowingRoar_Timer = 45000;
|
|
||||||
} else BellowingRoar_Timer -= diff;
|
|
||||||
|
|
||||||
DoMeleeAttackIfReady();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
struct boss_vazrudenAI : public ScriptedAI
|
|
||||||
{
|
|
||||||
boss_vazrudenAI(Creature* pCreature) : ScriptedAI(pCreature)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
uint32 Revenge_Timer;
|
|
||||||
bool WipeSaid;
|
|
||||||
uint32 UnsummonCheck;
|
|
||||||
|
|
||||||
void Reset()
|
|
||||||
{
|
|
||||||
Revenge_Timer = 4000;
|
|
||||||
UnsummonCheck = 2000;
|
|
||||||
WipeSaid = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
void EnterCombat(Unit * /*who*/)
|
|
||||||
{
|
|
||||||
DoScriptText(RAND(SAY_AGGRO_1,SAY_AGGRO_2,SAY_AGGRO_3), me);
|
|
||||||
}
|
|
||||||
|
|
||||||
void KilledUnit(Unit* who)
|
|
||||||
{
|
|
||||||
if (who && who->GetEntry() != ENTRY_VAZRUDEN)
|
|
||||||
DoScriptText(RAND(SAY_KILL_1,SAY_KILL_2), me);
|
|
||||||
}
|
|
||||||
|
|
||||||
void JustDied(Unit* who)
|
|
||||||
{
|
|
||||||
if (who && who != me)
|
|
||||||
DoScriptText(SAY_DIE, me);
|
|
||||||
}
|
|
||||||
|
|
||||||
void UpdateAI(const uint32 diff)
|
|
||||||
{
|
|
||||||
if (!UpdateVictim())
|
|
||||||
{
|
|
||||||
if (UnsummonCheck < diff && me->isAlive())
|
|
||||||
{
|
|
||||||
if (!WipeSaid)
|
|
||||||
{
|
|
||||||
DoScriptText(SAY_WIPE, me);
|
|
||||||
WipeSaid = true;
|
|
||||||
}
|
|
||||||
me->DisappearAndDie();
|
|
||||||
} else UnsummonCheck -= diff;
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Revenge_Timer <= diff)
|
struct boss_nazanAI : public ScriptedAI
|
||||||
{
|
{
|
||||||
if (Unit *victim = me->getVictim())
|
boss_nazanAI(Creature* pCreature) : ScriptedAI(pCreature)
|
||||||
DoCast(victim, DUNGEON_MODE(SPELL_REVENGE,SPELL_REVENGE_H));
|
|
||||||
Revenge_Timer = 5000;
|
|
||||||
} else Revenge_Timer -= diff;
|
|
||||||
|
|
||||||
DoMeleeAttackIfReady();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
struct boss_vazruden_the_heraldAI : public ScriptedAI
|
|
||||||
{
|
|
||||||
boss_vazruden_the_heraldAI(Creature* pCreature) : ScriptedAI(pCreature)
|
|
||||||
{
|
|
||||||
summoned = false;
|
|
||||||
sentryDown = false;
|
|
||||||
NazanGUID = 0;
|
|
||||||
VazrudenGUID = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
uint32 phase;
|
|
||||||
uint32 waypoint;
|
|
||||||
uint32 check;
|
|
||||||
bool sentryDown;
|
|
||||||
uint64 NazanGUID;
|
|
||||||
uint64 VazrudenGUID;
|
|
||||||
bool summoned;
|
|
||||||
|
|
||||||
void Reset()
|
|
||||||
{
|
|
||||||
phase = 0;
|
|
||||||
waypoint = 0;
|
|
||||||
check = 0;
|
|
||||||
UnsummonAdds();
|
|
||||||
}
|
|
||||||
|
|
||||||
void UnsummonAdds()
|
|
||||||
{
|
|
||||||
if (summoned)
|
|
||||||
{
|
|
||||||
Creature *Nazan = Unit::GetCreature(*me, NazanGUID);
|
|
||||||
if (!Nazan)
|
|
||||||
Nazan = me->FindNearestCreature(ENTRY_NAZAN, 5000);
|
|
||||||
if (Nazan)
|
|
||||||
{
|
{
|
||||||
Nazan->DisappearAndDie();
|
|
||||||
NazanGUID = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
Creature *Vazruden = Unit::GetCreature(*me, VazrudenGUID);
|
|
||||||
if (!Vazruden)
|
|
||||||
Vazruden = me->FindNearestCreature(ENTRY_VAZRUDEN, 5000);
|
|
||||||
if (Vazruden)
|
|
||||||
{
|
|
||||||
Vazruden->DisappearAndDie();
|
|
||||||
VazrudenGUID = 0;
|
VazrudenGUID = 0;
|
||||||
|
flight = true;
|
||||||
}
|
}
|
||||||
summoned = false;
|
|
||||||
me->clearUnitState(UNIT_STAT_ROOT);
|
|
||||||
me->SetVisibility(VISIBILITY_ON);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void SummonAdds()
|
uint32 Fireball_Timer;
|
||||||
{
|
uint32 ConeOfFire_Timer;
|
||||||
if (!summoned)
|
uint32 BellowingRoar_Timer;
|
||||||
{
|
uint32 Fly_Timer;
|
||||||
if (Creature* Vazruden = me->SummonCreature(ENTRY_VAZRUDEN,VazrudenMiddle[0],VazrudenMiddle[1],VazrudenMiddle[2],0,TEMPSUMMON_CORPSE_TIMED_DESPAWN,6000000))
|
uint32 Turn_Timer;
|
||||||
VazrudenGUID = Vazruden->GetGUID();
|
bool flight;
|
||||||
if (Creature* Nazan = me->SummonCreature(ENTRY_NAZAN,VazrudenMiddle[0],VazrudenMiddle[1],VazrudenMiddle[2],0,TEMPSUMMON_CORPSE_TIMED_DESPAWN,6000000))
|
uint64 VazrudenGUID;
|
||||||
NazanGUID = Nazan->GetGUID();
|
SpellEntry *liquid_fire;
|
||||||
summoned = true;
|
|
||||||
me->SetVisibility(VISIBILITY_OFF);
|
|
||||||
me->addUnitState(UNIT_STAT_ROOT);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void EnterCombat(Unit* /*who*/)
|
void Reset()
|
||||||
{
|
|
||||||
if (phase == 0)
|
|
||||||
{
|
|
||||||
phase = 1;
|
|
||||||
check = 0;
|
|
||||||
DoScriptText(SAY_INTRO, me);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void JustSummoned(Creature* pSummoned)
|
|
||||||
{
|
|
||||||
if (!pSummoned)
|
|
||||||
return;
|
|
||||||
Unit* pVictim = me->getVictim();
|
|
||||||
if (pSummoned->GetEntry() == ENTRY_NAZAN)
|
|
||||||
{
|
|
||||||
CAST_AI(boss_nazanAI, pSummoned->AI())->VazrudenGUID = VazrudenGUID;
|
|
||||||
pSummoned->AddUnitMovementFlag(MOVEMENTFLAG_LEVITATING);
|
|
||||||
pSummoned->SetSpeed(MOVE_FLIGHT, 2.5);
|
|
||||||
if (pVictim)
|
|
||||||
AttackStartNoMove(pVictim);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
if (pVictim)
|
|
||||||
pSummoned->AI()->AttackStart(pVictim);
|
|
||||||
}
|
|
||||||
|
|
||||||
void SentryDownBy(Unit* pKiller)
|
|
||||||
{
|
|
||||||
if (sentryDown)
|
|
||||||
{
|
|
||||||
AttackStartNoMove(pKiller);
|
|
||||||
sentryDown = false;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
sentryDown = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
void UpdateAI(const uint32 diff)
|
|
||||||
{
|
|
||||||
switch(phase)
|
|
||||||
{
|
|
||||||
case 0: // circle around the platform
|
|
||||||
return;
|
|
||||||
break;
|
|
||||||
case 1: // go to the middle and begin the fight
|
|
||||||
if (check <= diff)
|
|
||||||
{
|
{
|
||||||
if (!me->IsWithinDist3d(VazrudenMiddle[0],VazrudenMiddle[1],VazrudenMiddle[2],5))
|
Fireball_Timer = 4000;
|
||||||
|
Fly_Timer = 45000;
|
||||||
|
Turn_Timer = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void EnterCombat(Unit* /*who*/) {}
|
||||||
|
|
||||||
|
void JustSummoned(Creature *summoned)
|
||||||
|
{
|
||||||
|
if (summoned && summoned->GetEntry() == ENTRY_LIQUID_FIRE)
|
||||||
{
|
{
|
||||||
me->GetMotionMaster()->Clear();
|
summoned->SetLevel(me->getLevel());
|
||||||
me->GetMotionMaster()->MovePoint(0,VazrudenMiddle[0],VazrudenMiddle[1],VazrudenMiddle[2]);
|
summoned->setFaction(me->getFaction());
|
||||||
check = 1000;
|
summoned->CastSpell(summoned, DUNGEON_MODE(SPELL_SUMMON_LIQUID_FIRE,SPELL_SUMMON_LIQUID_FIRE_H),true);
|
||||||
|
summoned->CastSpell(summoned,SPELL_FIRE_NOVA_VISUAL,true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void SpellHitTarget(Unit *pTarget, const SpellEntry* entry)
|
||||||
|
{
|
||||||
|
if (pTarget && entry->Id == uint32(SPELL_FIREBALL))
|
||||||
|
me->SummonCreature(ENTRY_LIQUID_FIRE,pTarget->GetPositionX(),pTarget->GetPositionY(),pTarget->GetPositionZ(),pTarget->GetOrientation(),TEMPSUMMON_TIMED_DESPAWN,30000);
|
||||||
|
}
|
||||||
|
|
||||||
|
void UpdateAI(const uint32 diff)
|
||||||
|
{
|
||||||
|
if (!UpdateVictim())
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (Fireball_Timer <= diff)
|
||||||
|
{
|
||||||
|
if (Unit* pVictim = SelectUnit(SELECT_TARGET_RANDOM,0))
|
||||||
|
DoCast(pVictim, DUNGEON_MODE(SPELL_FIREBALL, SPELL_FIREBALL_H), true);
|
||||||
|
Fireball_Timer = urand(4000,7000);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
Fireball_Timer -= diff;
|
||||||
|
|
||||||
|
if (flight) // phase 1 - the flight
|
||||||
{
|
{
|
||||||
SummonAdds();
|
Creature *Vazruden = Unit::GetCreature(*me,VazrudenGUID);
|
||||||
phase = 2;
|
if (Fly_Timer < diff || !(Vazruden && Vazruden->isAlive() && (Vazruden->GetHealth()*5 > Vazruden->GetMaxHealth())))
|
||||||
return;
|
|
||||||
}
|
|
||||||
} else check -= diff;
|
|
||||||
break;
|
|
||||||
default: // adds do the job now
|
|
||||||
if (check <= diff)
|
|
||||||
{
|
|
||||||
Creature *Nazan = Unit::GetCreature(*me, NazanGUID);
|
|
||||||
Creature *Vazruden = Unit::GetCreature(*me, VazrudenGUID);
|
|
||||||
if (Nazan && Nazan->isAlive() || Vazruden && Vazruden->isAlive())
|
|
||||||
{
|
|
||||||
if (Nazan && Nazan->getVictim() || Vazruden && Vazruden->getVictim())
|
|
||||||
return;
|
|
||||||
else
|
|
||||||
{
|
{
|
||||||
UnsummonAdds();
|
flight = false;
|
||||||
EnterEvadeMode();
|
BellowingRoar_Timer = 6000;
|
||||||
|
ConeOfFire_Timer = 12000;
|
||||||
|
me->RemoveUnitMovementFlag(MOVEMENTFLAG_LEVITATING);
|
||||||
|
me->AddUnitMovementFlag(MOVEMENTFLAG_WALKING);
|
||||||
|
me->GetMotionMaster()->Clear();
|
||||||
|
if (Unit* pVictim = SelectUnit(SELECT_TARGET_NEAREST,0))
|
||||||
|
me->AI()->AttackStart(pVictim);
|
||||||
|
DoStartMovement(me->getVictim());
|
||||||
|
DoScriptText(EMOTE, me);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
Fly_Timer -= diff;
|
||||||
|
|
||||||
|
if (Turn_Timer <= diff)
|
||||||
|
{
|
||||||
|
uint32 waypoint = (Fly_Timer/10000)%2;
|
||||||
|
if (!me->IsWithinDist3d(VazrudenRing[waypoint][0],VazrudenRing[waypoint][1],VazrudenRing[waypoint][2], 5))
|
||||||
|
me->GetMotionMaster()->MovePoint(0,VazrudenRing[waypoint][0],VazrudenRing[waypoint][1],VazrudenRing[waypoint][2]);
|
||||||
|
Turn_Timer = 10000;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
Turn_Timer -= diff;
|
||||||
|
}
|
||||||
|
else // phase 2 - land fight
|
||||||
|
{
|
||||||
|
if (ConeOfFire_Timer <= diff)
|
||||||
|
{
|
||||||
|
DoCast(me, DUNGEON_MODE(SPELL_CONE_OF_FIRE, SPELL_CONE_OF_FIRE_H));
|
||||||
|
ConeOfFire_Timer = 12000;
|
||||||
|
Fireball_Timer = 4000;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
ConeOfFire_Timer -= diff;
|
||||||
|
|
||||||
|
if (IsHeroic())
|
||||||
|
if (BellowingRoar_Timer <= diff)
|
||||||
|
{
|
||||||
|
DoCast(me, SPELL_BELLOWING_ROAR);
|
||||||
|
BellowingRoar_Timer = 45000;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
BellowingRoar_Timer -= diff;
|
||||||
|
|
||||||
|
DoMeleeAttackIfReady();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
CreatureAI* GetAI(Creature* Creature) const
|
||||||
|
{
|
||||||
|
return new boss_nazanAI (Creature);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
class boss_vazruden : public CreatureScript
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
|
||||||
|
boss_vazruden()
|
||||||
|
: CreatureScript("boss_vazruden")
|
||||||
|
{
|
||||||
|
}
|
||||||
|
struct boss_vazrudenAI : public ScriptedAI
|
||||||
|
{
|
||||||
|
boss_vazrudenAI(Creature* pCreature) : ScriptedAI(pCreature)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32 Revenge_Timer;
|
||||||
|
bool WipeSaid;
|
||||||
|
uint32 UnsummonCheck;
|
||||||
|
|
||||||
|
void Reset()
|
||||||
|
{
|
||||||
|
Revenge_Timer = 4000;
|
||||||
|
UnsummonCheck = 2000;
|
||||||
|
WipeSaid = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
void EnterCombat(Unit * /*who*/)
|
||||||
|
{
|
||||||
|
DoScriptText(RAND(SAY_AGGRO_1,SAY_AGGRO_2,SAY_AGGRO_3), me);
|
||||||
|
}
|
||||||
|
|
||||||
|
void KilledUnit(Unit* who)
|
||||||
|
{
|
||||||
|
if (who && who->GetEntry() != ENTRY_VAZRUDEN)
|
||||||
|
DoScriptText(RAND(SAY_KILL_1,SAY_KILL_2), me);
|
||||||
|
}
|
||||||
|
|
||||||
|
void JustDied(Unit* who)
|
||||||
|
{
|
||||||
|
if (who && who != me)
|
||||||
|
DoScriptText(SAY_DIE, me);
|
||||||
|
}
|
||||||
|
|
||||||
|
void UpdateAI(const uint32 diff)
|
||||||
|
{
|
||||||
|
if (!UpdateVictim())
|
||||||
|
{
|
||||||
|
if (UnsummonCheck < diff && me->isAlive())
|
||||||
|
{
|
||||||
|
if (!WipeSaid)
|
||||||
|
{
|
||||||
|
DoScriptText(SAY_WIPE, me);
|
||||||
|
WipeSaid = true;
|
||||||
|
}
|
||||||
|
me->DisappearAndDie();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
UnsummonCheck -= diff;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Revenge_Timer <= diff)
|
||||||
|
{
|
||||||
|
if (Unit *victim = me->getVictim())
|
||||||
|
DoCast(victim, DUNGEON_MODE(SPELL_REVENGE,SPELL_REVENGE_H));
|
||||||
|
Revenge_Timer = 5000;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
Revenge_Timer -= diff;
|
||||||
me->SummonGameObject(DUNGEON_MODE(ENTRY_REINFORCED_FEL_IRON_CHEST, ENTRY_REINFORCED_FEL_IRON_CHEST_H),VazrudenMiddle[0],VazrudenMiddle[1],VazrudenMiddle[2],0,0,0,0,0,0);
|
|
||||||
me->SetLootRecipient(NULL); // don't think this is necessary..
|
|
||||||
//me->Kill(me);
|
|
||||||
}
|
|
||||||
check = 2000;
|
|
||||||
} else check -= diff;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
struct mob_hellfire_sentryAI : public ScriptedAI
|
DoMeleeAttackIfReady();
|
||||||
{
|
}
|
||||||
mob_hellfire_sentryAI(Creature* pCreature) : ScriptedAI(pCreature) {}
|
};
|
||||||
|
CreatureAI* GetAI(Creature* Creature) const
|
||||||
uint32 KidneyShot_Timer;
|
|
||||||
|
|
||||||
void Reset()
|
|
||||||
{
|
|
||||||
KidneyShot_Timer = urand(3000,7000);
|
|
||||||
}
|
|
||||||
|
|
||||||
void EnterCombat(Unit* /*who*/) {}
|
|
||||||
|
|
||||||
void JustDied(Unit* who)
|
|
||||||
{
|
|
||||||
if (Creature *herald = me->FindNearestCreature(ENTRY_VAZRUDEN_HERALD,150))
|
|
||||||
CAST_AI(boss_vazruden_the_heraldAI, herald->AI())->SentryDownBy(who);
|
|
||||||
}
|
|
||||||
|
|
||||||
void UpdateAI(const uint32 diff)
|
|
||||||
{
|
|
||||||
if (!UpdateVictim())
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (KidneyShot_Timer <= diff)
|
|
||||||
{
|
{
|
||||||
if (Unit *victim = me->getVictim())
|
return new boss_vazrudenAI (Creature);
|
||||||
DoCast(victim, SPELL_KIDNEY_SHOT);
|
}
|
||||||
KidneyShot_Timer = 20000;
|
|
||||||
} else KidneyShot_Timer -= diff;
|
|
||||||
|
|
||||||
DoMeleeAttackIfReady();
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
CreatureAI* GetAI_boss_vazruden_the_herald(Creature* pCreature)
|
class boss_vazruden_the_herald : public CreatureScript
|
||||||
{
|
{
|
||||||
return new boss_vazruden_the_heraldAI (pCreature);
|
public:
|
||||||
}
|
|
||||||
|
|
||||||
CreatureAI* GetAI_boss_vazruden(Creature* pCreature)
|
boss_vazruden_the_herald()
|
||||||
|
: CreatureScript("boss_vazruden_the_herald")
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
struct boss_vazruden_the_heraldAI : public ScriptedAI
|
||||||
|
{
|
||||||
|
boss_vazruden_the_heraldAI(Creature* pCreature) : ScriptedAI(pCreature)
|
||||||
|
{
|
||||||
|
summoned = false;
|
||||||
|
sentryDown = false;
|
||||||
|
NazanGUID = 0;
|
||||||
|
VazrudenGUID = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32 phase;
|
||||||
|
uint32 waypoint;
|
||||||
|
uint32 check;
|
||||||
|
bool sentryDown;
|
||||||
|
uint64 NazanGUID;
|
||||||
|
uint64 VazrudenGUID;
|
||||||
|
bool summoned;
|
||||||
|
|
||||||
|
void Reset()
|
||||||
|
{
|
||||||
|
phase = 0;
|
||||||
|
waypoint = 0;
|
||||||
|
check = 0;
|
||||||
|
UnsummonAdds();
|
||||||
|
}
|
||||||
|
|
||||||
|
void UnsummonAdds()
|
||||||
|
{
|
||||||
|
if (summoned)
|
||||||
|
{
|
||||||
|
Creature *Nazan = Unit::GetCreature(*me, NazanGUID);
|
||||||
|
if (!Nazan)
|
||||||
|
Nazan = me->FindNearestCreature(ENTRY_NAZAN, 5000);
|
||||||
|
if (Nazan)
|
||||||
|
{
|
||||||
|
Nazan->DisappearAndDie();
|
||||||
|
NazanGUID = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
Creature *Vazruden = Unit::GetCreature(*me, VazrudenGUID);
|
||||||
|
if (!Vazruden)
|
||||||
|
Vazruden = me->FindNearestCreature(ENTRY_VAZRUDEN, 5000);
|
||||||
|
if (Vazruden)
|
||||||
|
{
|
||||||
|
Vazruden->DisappearAndDie();
|
||||||
|
VazrudenGUID = 0;
|
||||||
|
}
|
||||||
|
summoned = false;
|
||||||
|
me->clearUnitState(UNIT_STAT_ROOT);
|
||||||
|
me->SetVisibility(VISIBILITY_ON);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void SummonAdds()
|
||||||
|
{
|
||||||
|
if (!summoned)
|
||||||
|
{
|
||||||
|
if (Creature* Vazruden = me->SummonCreature(ENTRY_VAZRUDEN,VazrudenMiddle[0],VazrudenMiddle[1],VazrudenMiddle[2],0,TEMPSUMMON_CORPSE_TIMED_DESPAWN,6000000))
|
||||||
|
VazrudenGUID = Vazruden->GetGUID();
|
||||||
|
if (Creature* Nazan = me->SummonCreature(ENTRY_NAZAN,VazrudenMiddle[0],VazrudenMiddle[1],VazrudenMiddle[2],0,TEMPSUMMON_CORPSE_TIMED_DESPAWN,6000000))
|
||||||
|
NazanGUID = Nazan->GetGUID();
|
||||||
|
summoned = true;
|
||||||
|
me->SetVisibility(VISIBILITY_OFF);
|
||||||
|
me->addUnitState(UNIT_STAT_ROOT);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void EnterCombat(Unit* /*who*/)
|
||||||
|
{
|
||||||
|
if (phase == 0)
|
||||||
|
{
|
||||||
|
phase = 1;
|
||||||
|
check = 0;
|
||||||
|
DoScriptText(SAY_INTRO, me);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void JustSummoned(Creature* pSummoned)
|
||||||
|
{
|
||||||
|
if (!pSummoned)
|
||||||
|
return;
|
||||||
|
Unit* pVictim = me->getVictim();
|
||||||
|
if (pSummoned->GetEntry() == ENTRY_NAZAN)
|
||||||
|
{
|
||||||
|
CAST_AI(boss_nazan::boss_nazanAI, pSummoned->AI())->VazrudenGUID = VazrudenGUID;
|
||||||
|
pSummoned->AddUnitMovementFlag(MOVEMENTFLAG_LEVITATING);
|
||||||
|
pSummoned->SetSpeed(MOVE_FLIGHT, 2.5);
|
||||||
|
if (pVictim)
|
||||||
|
AttackStartNoMove(pVictim);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
if (pVictim)
|
||||||
|
pSummoned->AI()->AttackStart(pVictim);
|
||||||
|
}
|
||||||
|
|
||||||
|
void SentryDownBy(Unit* pKiller)
|
||||||
|
{
|
||||||
|
if (sentryDown)
|
||||||
|
{
|
||||||
|
AttackStartNoMove(pKiller);
|
||||||
|
sentryDown = false;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
sentryDown = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void UpdateAI(const uint32 diff)
|
||||||
|
{
|
||||||
|
switch(phase)
|
||||||
|
{
|
||||||
|
case 0: // circle around the platform
|
||||||
|
return;
|
||||||
|
break;
|
||||||
|
case 1: // go to the middle and begin the fight
|
||||||
|
if (check <= diff)
|
||||||
|
{
|
||||||
|
if (!me->IsWithinDist3d(VazrudenMiddle[0],VazrudenMiddle[1],VazrudenMiddle[2],5))
|
||||||
|
{
|
||||||
|
me->GetMotionMaster()->Clear();
|
||||||
|
me->GetMotionMaster()->MovePoint(0,VazrudenMiddle[0],VazrudenMiddle[1],VazrudenMiddle[2]);
|
||||||
|
check = 1000;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
SummonAdds();
|
||||||
|
phase = 2;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
check -= diff;
|
||||||
|
break;
|
||||||
|
default: // adds do the job now
|
||||||
|
if (check <= diff)
|
||||||
|
{
|
||||||
|
Creature *Nazan = Unit::GetCreature(*me, NazanGUID);
|
||||||
|
Creature *Vazruden = Unit::GetCreature(*me, VazrudenGUID);
|
||||||
|
if (Nazan && Nazan->isAlive() || Vazruden && Vazruden->isAlive())
|
||||||
|
{
|
||||||
|
if (Nazan && Nazan->getVictim() || Vazruden && Vazruden->getVictim())
|
||||||
|
return;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
UnsummonAdds();
|
||||||
|
EnterEvadeMode();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
me->SummonGameObject(DUNGEON_MODE(ENTRY_REINFORCED_FEL_IRON_CHEST, ENTRY_REINFORCED_FEL_IRON_CHEST_H),VazrudenMiddle[0],VazrudenMiddle[1],VazrudenMiddle[2],0,0,0,0,0,0);
|
||||||
|
me->SetLootRecipient(NULL); // don't think this is necessary..
|
||||||
|
//me->Kill(me);
|
||||||
|
}
|
||||||
|
check = 2000;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
check -= diff;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
CreatureAI* GetAI(Creature* Creature) const
|
||||||
|
{
|
||||||
|
return new boss_vazruden_the_heraldAI (Creature);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
class mob_hellfire_sentry : public CreatureScript
|
||||||
{
|
{
|
||||||
return new boss_vazrudenAI (pCreature);
|
public:
|
||||||
}
|
|
||||||
|
|
||||||
CreatureAI* GetAI_boss_nazan(Creature* pCreature)
|
mob_hellfire_sentry()
|
||||||
{
|
: CreatureScript("mob_hellfire_sentry")
|
||||||
return new boss_nazanAI (pCreature);
|
{
|
||||||
}
|
}
|
||||||
|
struct mob_hellfire_sentryAI : public ScriptedAI
|
||||||
|
{
|
||||||
|
mob_hellfire_sentryAI(Creature* pCreature) : ScriptedAI(pCreature) {}
|
||||||
|
|
||||||
CreatureAI* GetAI_mob_hellfire_sentry(Creature* pCreature)
|
uint32 KidneyShot_Timer;
|
||||||
{
|
|
||||||
return new mob_hellfire_sentryAI (pCreature);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
void Reset()
|
||||||
|
{
|
||||||
|
KidneyShot_Timer = urand(3000,7000);
|
||||||
|
}
|
||||||
|
|
||||||
|
void EnterCombat(Unit* /*who*/) {}
|
||||||
|
|
||||||
|
void JustDied(Unit* who)
|
||||||
|
{
|
||||||
|
if (Creature *herald = me->FindNearestCreature(ENTRY_VAZRUDEN_HERALD,150))
|
||||||
|
CAST_AI(boss_vazruden_the_herald::boss_vazruden_the_heraldAI, herald->AI())->SentryDownBy(who);
|
||||||
|
}
|
||||||
|
|
||||||
|
void UpdateAI(const uint32 diff)
|
||||||
|
{
|
||||||
|
if (!UpdateVictim())
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (KidneyShot_Timer <= diff)
|
||||||
|
{
|
||||||
|
if (Unit *victim = me->getVictim())
|
||||||
|
DoCast(victim, SPELL_KIDNEY_SHOT);
|
||||||
|
KidneyShot_Timer = 20000;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
KidneyShot_Timer -= diff;
|
||||||
|
|
||||||
|
DoMeleeAttackIfReady();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
CreatureAI* GetAI(Creature* Creature) const
|
||||||
|
{
|
||||||
|
return new mob_hellfire_sentryAI (Creature);
|
||||||
|
}
|
||||||
|
};
|
||||||
void AddSC_boss_vazruden_the_herald()
|
void AddSC_boss_vazruden_the_herald()
|
||||||
{
|
{
|
||||||
Script *newscript;
|
new boss_vazruden_the_herald();
|
||||||
newscript = new Script;
|
new boss_vazruden();
|
||||||
newscript->Name = "boss_vazruden_the_herald";
|
new boss_nazan();
|
||||||
newscript->GetAI = &GetAI_boss_vazruden_the_herald;
|
new mob_hellfire_sentry();
|
||||||
newscript->RegisterSelf();
|
|
||||||
|
|
||||||
newscript = new Script;
|
|
||||||
newscript->Name = "boss_vazruden";
|
|
||||||
newscript->GetAI = &GetAI_boss_vazruden;
|
|
||||||
newscript->RegisterSelf();
|
|
||||||
|
|
||||||
newscript = new Script;
|
|
||||||
newscript->Name = "boss_nazan";
|
|
||||||
newscript->GetAI = &GetAI_boss_nazan;
|
|
||||||
newscript->RegisterSelf();
|
|
||||||
|
|
||||||
newscript = new Script;
|
|
||||||
newscript->Name = "mob_hellfire_sentry";
|
|
||||||
newscript->GetAI = &GetAI_mob_hellfire_sentry;
|
|
||||||
newscript->RegisterSelf();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+140
-122
@@ -25,134 +25,152 @@ EndScriptData */
|
|||||||
|
|
||||||
#include "ScriptPCH.h"
|
#include "ScriptPCH.h"
|
||||||
|
|
||||||
#define SAY_TAUNT -1543000
|
enum eSays
|
||||||
#define SAY_HEAL -1543001
|
|
||||||
#define SAY_SURGE -1543002
|
|
||||||
#define SAY_AGGRO_1 -1543003
|
|
||||||
#define SAY_AGGRO_2 -1543004
|
|
||||||
#define SAY_AGGRO_3 -1543005
|
|
||||||
#define SAY_KILL_1 -1543006
|
|
||||||
#define SAY_KILL_2 -1543007
|
|
||||||
#define SAY_DIE -1543008
|
|
||||||
|
|
||||||
#define SPELL_MORTAL_WOUND 30641
|
|
||||||
#define H_SPELL_MORTAL_WOUND 36814
|
|
||||||
#define SPELL_SURGE 34645
|
|
||||||
#define SPELL_RETALIATION 22857
|
|
||||||
|
|
||||||
struct boss_watchkeeper_gargolmarAI : public ScriptedAI
|
|
||||||
{
|
{
|
||||||
boss_watchkeeper_gargolmarAI(Creature *c) : ScriptedAI(c)
|
SAY_TAUNT = -1543000,
|
||||||
{
|
SAY_HEAL = -1543001,
|
||||||
}
|
SAY_SURGE = -1543002,
|
||||||
|
SAY_AGGRO_1 = -1543003,
|
||||||
uint32 Surge_Timer;
|
SAY_AGGRO_2 = -1543004,
|
||||||
uint32 MortalWound_Timer;
|
SAY_AGGRO_3 = -1543005,
|
||||||
uint32 Retaliation_Timer;
|
SAY_KILL_1 = -1543006,
|
||||||
|
SAY_KILL_2 = -1543007,
|
||||||
bool HasTaunted;
|
SAY_DIE = -1543008,
|
||||||
bool YelledForHeal;
|
|
||||||
|
|
||||||
void Reset()
|
|
||||||
{
|
|
||||||
Surge_Timer = 5000;
|
|
||||||
MortalWound_Timer = 4000;
|
|
||||||
Retaliation_Timer = 0;
|
|
||||||
|
|
||||||
HasTaunted = false;
|
|
||||||
YelledForHeal = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
void EnterCombat(Unit * /*who*/)
|
|
||||||
{
|
|
||||||
DoScriptText(RAND(SAY_AGGRO_1,SAY_AGGRO_2,SAY_AGGRO_3), me);
|
|
||||||
}
|
|
||||||
|
|
||||||
void MoveInLineOfSight(Unit* who)
|
|
||||||
{
|
|
||||||
if (!me->getVictim() && who->isTargetableForAttack() && (me->IsHostileTo(who)) && who->isInAccessiblePlaceFor(me))
|
|
||||||
{
|
|
||||||
if (!me->canFly() && me->GetDistanceZ(who) > CREATURE_Z_ATTACK_RANGE)
|
|
||||||
return;
|
|
||||||
|
|
||||||
float attackRadius = me->GetAttackDistance(who);
|
|
||||||
if (me->IsWithinDistInMap(who, attackRadius) && me->IsWithinLOSInMap(who))
|
|
||||||
{
|
|
||||||
//who->RemoveSpellsCausingAura(SPELL_AURA_MOD_STEALTH);
|
|
||||||
AttackStart(who);
|
|
||||||
}
|
|
||||||
else if (!HasTaunted && me->IsWithinDistInMap(who, 60.0f))
|
|
||||||
{
|
|
||||||
DoScriptText(SAY_TAUNT, me);
|
|
||||||
HasTaunted = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void KilledUnit(Unit* /*victim*/)
|
|
||||||
{
|
|
||||||
DoScriptText(RAND(SAY_KILL_1,SAY_KILL_2), me);
|
|
||||||
}
|
|
||||||
|
|
||||||
void JustDied(Unit* /*Killer*/)
|
|
||||||
{
|
|
||||||
DoScriptText(SAY_DIE, me);
|
|
||||||
}
|
|
||||||
|
|
||||||
void UpdateAI(const uint32 diff)
|
|
||||||
{
|
|
||||||
if (!UpdateVictim())
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (MortalWound_Timer <= diff)
|
|
||||||
{
|
|
||||||
DoCast(me->getVictim(), SPELL_MORTAL_WOUND);
|
|
||||||
MortalWound_Timer = 5000+rand()%8000;
|
|
||||||
} else MortalWound_Timer -= diff;
|
|
||||||
|
|
||||||
if (Surge_Timer <= diff)
|
|
||||||
{
|
|
||||||
DoScriptText(SAY_SURGE, me);
|
|
||||||
|
|
||||||
if (Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM,0))
|
|
||||||
DoCast(pTarget, SPELL_SURGE);
|
|
||||||
|
|
||||||
Surge_Timer = 5000+rand()%8000;
|
|
||||||
} else Surge_Timer -= diff;
|
|
||||||
|
|
||||||
if ((me->GetHealth()*100) / me->GetMaxHealth() < 20)
|
|
||||||
{
|
|
||||||
if (Retaliation_Timer <= diff)
|
|
||||||
{
|
|
||||||
DoCast(me, SPELL_RETALIATION);
|
|
||||||
Retaliation_Timer = 30000;
|
|
||||||
} else Retaliation_Timer -= diff;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!YelledForHeal)
|
|
||||||
{
|
|
||||||
if ((me->GetHealth()*100) / me->GetMaxHealth() < 40)
|
|
||||||
{
|
|
||||||
DoScriptText(SAY_HEAL, me);
|
|
||||||
YelledForHeal = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
DoMeleeAttackIfReady();
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
CreatureAI* GetAI_boss_watchkeeper_gargolmarAI(Creature* pCreature)
|
enum eSpells
|
||||||
{
|
{
|
||||||
return new boss_watchkeeper_gargolmarAI (pCreature);
|
SPELL_MORTAL_WOUND = 30641,
|
||||||
}
|
H_SPELL_MORTAL_WOUND = 36814,
|
||||||
|
SPELL_SURGE = 34645,
|
||||||
|
SPELL_RETALIATION = 22857,
|
||||||
|
};
|
||||||
|
|
||||||
|
class boss_watchkeeper_gargolmar : public CreatureScript
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
|
||||||
|
boss_watchkeeper_gargolmar()
|
||||||
|
: CreatureScript("boss_watchkeeper_gargolmar")
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
struct boss_watchkeeper_gargolmarAI : public ScriptedAI
|
||||||
|
{
|
||||||
|
boss_watchkeeper_gargolmarAI(Creature* pCreature) : ScriptedAI(pCreature)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32 Surge_Timer;
|
||||||
|
uint32 MortalWound_Timer;
|
||||||
|
uint32 Retaliation_Timer;
|
||||||
|
|
||||||
|
bool HasTaunted;
|
||||||
|
bool YelledForHeal;
|
||||||
|
|
||||||
|
void Reset()
|
||||||
|
{
|
||||||
|
Surge_Timer = 5000;
|
||||||
|
MortalWound_Timer = 4000;
|
||||||
|
Retaliation_Timer = 0;
|
||||||
|
|
||||||
|
HasTaunted = false;
|
||||||
|
YelledForHeal = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
void EnterCombat(Unit * /*who*/)
|
||||||
|
{
|
||||||
|
DoScriptText(RAND(SAY_AGGRO_1,SAY_AGGRO_2,SAY_AGGRO_3), me);
|
||||||
|
}
|
||||||
|
|
||||||
|
void MoveInLineOfSight(Unit* who)
|
||||||
|
{
|
||||||
|
if (!me->getVictim() && who->isTargetableForAttack() && (me->IsHostileTo(who)) && who->isInAccessiblePlaceFor(me))
|
||||||
|
{
|
||||||
|
if (!me->canFly() && me->GetDistanceZ(who) > CREATURE_Z_ATTACK_RANGE)
|
||||||
|
return;
|
||||||
|
|
||||||
|
float attackRadius = me->GetAttackDistance(who);
|
||||||
|
if (me->IsWithinDistInMap(who, attackRadius) && me->IsWithinLOSInMap(who))
|
||||||
|
{
|
||||||
|
//who->RemoveSpellsCausingAura(SPELL_AURA_MOD_STEALTH);
|
||||||
|
AttackStart(who);
|
||||||
|
}
|
||||||
|
else if (!HasTaunted && me->IsWithinDistInMap(who, 60.0f))
|
||||||
|
{
|
||||||
|
DoScriptText(SAY_TAUNT, me);
|
||||||
|
HasTaunted = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void KilledUnit(Unit* /*victim*/)
|
||||||
|
{
|
||||||
|
DoScriptText(RAND(SAY_KILL_1,SAY_KILL_2), me);
|
||||||
|
}
|
||||||
|
|
||||||
|
void JustDied(Unit* /*Killer*/)
|
||||||
|
{
|
||||||
|
DoScriptText(SAY_DIE, me);
|
||||||
|
}
|
||||||
|
|
||||||
|
void UpdateAI(const uint32 diff)
|
||||||
|
{
|
||||||
|
if (!UpdateVictim())
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (MortalWound_Timer <= diff)
|
||||||
|
{
|
||||||
|
DoCast(me->getVictim(), SPELL_MORTAL_WOUND);
|
||||||
|
MortalWound_Timer = 5000+rand()%8000;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
MortalWound_Timer -= diff;
|
||||||
|
|
||||||
|
if (Surge_Timer <= diff)
|
||||||
|
{
|
||||||
|
DoScriptText(SAY_SURGE, me);
|
||||||
|
|
||||||
|
if (Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM,0))
|
||||||
|
DoCast(pTarget, SPELL_SURGE);
|
||||||
|
|
||||||
|
Surge_Timer = 5000+rand()%8000;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
Surge_Timer -= diff;
|
||||||
|
|
||||||
|
if ((me->GetHealth()*100) / me->GetMaxHealth() < 20)
|
||||||
|
{
|
||||||
|
if (Retaliation_Timer <= diff)
|
||||||
|
{
|
||||||
|
DoCast(me, SPELL_RETALIATION);
|
||||||
|
Retaliation_Timer = 30000;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
Retaliation_Timer -= diff;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!YelledForHeal)
|
||||||
|
{
|
||||||
|
if ((me->GetHealth()*100) / me->GetMaxHealth() < 40)
|
||||||
|
{
|
||||||
|
DoScriptText(SAY_HEAL, me);
|
||||||
|
YelledForHeal = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
DoMeleeAttackIfReady();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
CreatureAI* GetAI(Creature* Creature) const
|
||||||
|
{
|
||||||
|
return new boss_watchkeeper_gargolmarAI (Creature);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
void AddSC_boss_watchkeeper_gargolmar()
|
void AddSC_boss_watchkeeper_gargolmar()
|
||||||
{
|
{
|
||||||
Script *newscript;
|
new boss_watchkeeper_gargolmar();
|
||||||
newscript = new Script;
|
|
||||||
newscript->Name = "boss_watchkeeper_gargolmar";
|
|
||||||
newscript->GetAI = &GetAI_boss_watchkeeper_gargolmarAI;
|
|
||||||
newscript->RegisterSelf();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+56
-47
@@ -26,61 +26,70 @@ EndScriptData */
|
|||||||
#include "ScriptPCH.h"
|
#include "ScriptPCH.h"
|
||||||
#include "hellfire_ramparts.h"
|
#include "hellfire_ramparts.h"
|
||||||
|
|
||||||
struct instance_ramparts : public ScriptedInstance
|
class instance_ramparts : public InstanceMapScript
|
||||||
{
|
{
|
||||||
instance_ramparts(Map* pMap) : ScriptedInstance(pMap) {Initialize();}
|
public:
|
||||||
|
instance_ramparts()
|
||||||
uint32 m_auiEncounter[MAX_ENCOUNTER];
|
: InstanceMapScript("instance_ramparts")
|
||||||
uint64 m_uiChestNGUID;
|
|
||||||
uint64 m_uiChestHGUID;
|
|
||||||
|
|
||||||
void Initialize()
|
|
||||||
{
|
|
||||||
memset(&m_auiEncounter, 0, sizeof(m_auiEncounter));
|
|
||||||
|
|
||||||
m_uiChestNGUID = 0;
|
|
||||||
m_uiChestHGUID = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
void OnGameObjectCreate(GameObject* pGo, bool /*add*/)
|
|
||||||
{
|
|
||||||
switch(pGo->GetEntry())
|
|
||||||
{
|
{
|
||||||
case 185168: m_uiChestNGUID = pGo->GetGUID(); break;
|
|
||||||
case 185169: m_uiChestHGUID = pGo->GetGUID(); break;
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
void SetData(uint32 uiType, uint32 uiData)
|
struct instance_ramparts_InstanceMapScript : public ScriptedInstance
|
||||||
{
|
|
||||||
sLog.outDebug("TSCR: Instance Ramparts: SetData received for type %u with data %u",uiType,uiData);
|
|
||||||
|
|
||||||
switch(uiType)
|
|
||||||
{
|
{
|
||||||
case TYPE_VAZRUDEN:
|
instance_ramparts_InstanceMapScript(Map* pMap) : ScriptedInstance(pMap) {Initialize();}
|
||||||
if (uiData == DONE && m_auiEncounter[1] == DONE)
|
|
||||||
DoRespawnGameObject(instance->IsHeroic() ? m_uiChestHGUID : m_uiChestNGUID, HOUR*IN_MILLISECONDS);
|
uint32 m_auiEncounter[MAX_ENCOUNTER];
|
||||||
m_auiEncounter[0] = uiData;
|
uint64 m_uiChestNGUID;
|
||||||
break;
|
uint64 m_uiChestHGUID;
|
||||||
case TYPE_NAZAN:
|
|
||||||
if (uiData == DONE && m_auiEncounter[0] == DONE)
|
void Initialize()
|
||||||
DoRespawnGameObject(instance->IsHeroic() ? m_uiChestHGUID : m_uiChestNGUID, HOUR*IN_MILLISECONDS);
|
{
|
||||||
m_auiEncounter[1] = uiData;
|
memset(&m_auiEncounter, 0, sizeof(m_auiEncounter));
|
||||||
break;
|
|
||||||
|
m_uiChestNGUID = 0;
|
||||||
|
m_uiChestHGUID = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void OnGameObjectCreate(GameObject* pGo, bool /*add*/)
|
||||||
|
{
|
||||||
|
switch(pGo->GetEntry())
|
||||||
|
{
|
||||||
|
case 185168:
|
||||||
|
m_uiChestNGUID = pGo->GetGUID();
|
||||||
|
break;
|
||||||
|
case 185169:
|
||||||
|
m_uiChestHGUID = pGo->GetGUID();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void SetData(uint32 uiType, uint32 uiData)
|
||||||
|
{
|
||||||
|
sLog.outDebug("TSCR: Instance Ramparts: SetData received for type %u with data %u",uiType,uiData);
|
||||||
|
|
||||||
|
switch(uiType)
|
||||||
|
{
|
||||||
|
case TYPE_VAZRUDEN:
|
||||||
|
if (uiData == DONE && m_auiEncounter[1] == DONE)
|
||||||
|
DoRespawnGameObject(instance->IsHeroic() ? m_uiChestHGUID : m_uiChestNGUID, HOUR*IN_MILLISECONDS);
|
||||||
|
m_auiEncounter[0] = uiData;
|
||||||
|
break;
|
||||||
|
case TYPE_NAZAN:
|
||||||
|
if (uiData == DONE && m_auiEncounter[0] == DONE)
|
||||||
|
DoRespawnGameObject(instance->IsHeroic() ? m_uiChestHGUID : m_uiChestNGUID, HOUR*IN_MILLISECONDS);
|
||||||
|
m_auiEncounter[1] = uiData;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
InstanceData* GetInstanceData(Map* pMap) const
|
||||||
|
{
|
||||||
|
return new instance_ramparts_InstanceMapScript(pMap);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
InstanceData* GetInstanceData_instance_ramparts(Map* pMap)
|
|
||||||
{
|
|
||||||
return new instance_ramparts(pMap);
|
|
||||||
}
|
|
||||||
|
|
||||||
void AddSC_instance_ramparts()
|
void AddSC_instance_ramparts()
|
||||||
{
|
{
|
||||||
Script* pNewScript;
|
new instance_ramparts;
|
||||||
pNewScript = new Script;
|
|
||||||
pNewScript->Name = "instance_ramparts";
|
|
||||||
pNewScript->GetInstanceData = &GetInstanceData_instance_ramparts;
|
|
||||||
pNewScript->RegisterSelf();
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user