* Last round of script directory renames.
--HG-- branch : trunk
This commit is contained in:
@@ -0,0 +1,414 @@
|
||||
/* Copyright (C) 2006 - 2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
|
||||
* 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_Darkweaver_Syth
|
||||
SD%Complete: 85
|
||||
SDComment: Shock spells/times need more work. Heroic partly implemented.
|
||||
SDCategory: Auchindoun, Sethekk Halls
|
||||
EndScriptData */
|
||||
|
||||
#include "ScriptedPch.h"
|
||||
|
||||
#define SAY_SUMMON -1556000
|
||||
|
||||
#define SAY_AGGRO_1 -1556001
|
||||
#define SAY_AGGRO_2 -1556002
|
||||
#define SAY_AGGRO_3 -1556003
|
||||
|
||||
#define SAY_SLAY_1 -1556004
|
||||
#define SAY_SLAY_2 -1556005
|
||||
|
||||
#define SAY_DEATH -1556006
|
||||
|
||||
#define SPELL_FROST_SHOCK 21401 //37865
|
||||
#define SPELL_FLAME_SHOCK 34354
|
||||
#define SPELL_SHADOW_SHOCK 30138
|
||||
#define SPELL_ARCANE_SHOCK 37132
|
||||
|
||||
#define SPELL_CHAIN_LIGHTNING 15659 //15305
|
||||
|
||||
#define SPELL_SUMMON_SYTH_FIRE 33537 // Spawns 19203
|
||||
#define SPELL_SUMMON_SYTH_ARCANE 33538 // Spawns 19205
|
||||
#define SPELL_SUMMON_SYTH_FROST 33539 // Spawns 19204
|
||||
#define SPELL_SUMMON_SYTH_SHADOW 33540 // Spawns 19206
|
||||
|
||||
#define SPELL_FLAME_BUFFET DUNGEON_MODE(33526, 38141)
|
||||
#define SPELL_ARCANE_BUFFET DUNGEON_MODE(33527, 38138)
|
||||
#define SPELL_FROST_BUFFET DUNGEON_MODE(33528, 38142)
|
||||
#define SPELL_SHADOW_BUFFET DUNGEON_MODE(33529, 38143)
|
||||
|
||||
struct boss_darkweaver_sythAI : public ScriptedAI
|
||||
{
|
||||
boss_darkweaver_sythAI(Creature *c) : ScriptedAI(c)
|
||||
{
|
||||
}
|
||||
|
||||
uint32 flameshock_timer;
|
||||
uint32 arcaneshock_timer;
|
||||
uint32 frostshock_timer;
|
||||
uint32 shadowshock_timer;
|
||||
uint32 chainlightning_timer;
|
||||
|
||||
bool summon90;
|
||||
bool summon50;
|
||||
bool summon10;
|
||||
|
||||
void Reset()
|
||||
{
|
||||
flameshock_timer = 2000;
|
||||
arcaneshock_timer = 4000;
|
||||
frostshock_timer = 6000;
|
||||
shadowshock_timer = 8000;
|
||||
chainlightning_timer = 15000;
|
||||
|
||||
summon90 = false;
|
||||
summon50 = false;
|
||||
summon10 = false;
|
||||
}
|
||||
|
||||
void EnterCombat(Unit * /*who*/)
|
||||
{
|
||||
DoScriptText(RAND(SAY_AGGRO_1,SAY_AGGRO_2,SAY_AGGRO_3), me);
|
||||
}
|
||||
|
||||
void JustDied(Unit* /*Killer*/)
|
||||
{
|
||||
DoScriptText(SAY_DEATH, me);
|
||||
}
|
||||
|
||||
void KilledUnit(Unit* /*victim*/)
|
||||
{
|
||||
if (rand()%2)
|
||||
return;
|
||||
|
||||
DoScriptText(RAND(SAY_SLAY_1,SAY_SLAY_2), me);
|
||||
}
|
||||
|
||||
void JustSummoned(Creature *summoned)
|
||||
{
|
||||
if (Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM,0))
|
||||
summoned->AI()->AttackStart(pTarget);
|
||||
}
|
||||
|
||||
void SythSummoning()
|
||||
{
|
||||
DoScriptText(SAY_SUMMON, me);
|
||||
|
||||
if (me->IsNonMeleeSpellCasted(false))
|
||||
me->InterruptNonMeleeSpells(false);
|
||||
|
||||
DoCast(me, SPELL_SUMMON_SYTH_ARCANE, true); //front
|
||||
DoCast(me, SPELL_SUMMON_SYTH_FIRE, true); //back
|
||||
DoCast(me, SPELL_SUMMON_SYTH_FROST, true); //left
|
||||
DoCast(me, SPELL_SUMMON_SYTH_SHADOW, true); //right
|
||||
}
|
||||
|
||||
void UpdateAI(const uint32 diff)
|
||||
{
|
||||
if (!UpdateVictim())
|
||||
return;
|
||||
|
||||
if (((me->GetHealth()*100) / me->GetMaxHealth() < 90) && !summon90)
|
||||
{
|
||||
SythSummoning();
|
||||
summon90 = true;
|
||||
}
|
||||
|
||||
if (((me->GetHealth()*100) / me->GetMaxHealth() < 50) && !summon50)
|
||||
{
|
||||
SythSummoning();
|
||||
summon50 = true;
|
||||
}
|
||||
|
||||
if (((me->GetHealth()*100) / me->GetMaxHealth() < 10) && !summon10)
|
||||
{
|
||||
SythSummoning();
|
||||
summon10 = true;
|
||||
}
|
||||
|
||||
if (flameshock_timer <= diff)
|
||||
{
|
||||
if (Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM,0))
|
||||
DoCast(pTarget, SPELL_FLAME_SHOCK);
|
||||
|
||||
flameshock_timer = 10000 + rand()%5000;
|
||||
} else flameshock_timer -= diff;
|
||||
|
||||
if (arcaneshock_timer <= diff)
|
||||
{
|
||||
if (Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM,0))
|
||||
DoCast(pTarget, SPELL_ARCANE_SHOCK);
|
||||
|
||||
arcaneshock_timer = 10000 + rand()%5000;
|
||||
} else arcaneshock_timer -= diff;
|
||||
|
||||
if (frostshock_timer <= diff)
|
||||
{
|
||||
if (Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM,0))
|
||||
DoCast(pTarget, SPELL_FROST_SHOCK);
|
||||
|
||||
frostshock_timer = 10000 + rand()%5000;
|
||||
} else frostshock_timer -= diff;
|
||||
|
||||
if (shadowshock_timer <= diff)
|
||||
{
|
||||
if (Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM,0))
|
||||
DoCast(pTarget, SPELL_SHADOW_SHOCK);
|
||||
|
||||
shadowshock_timer = 10000 + rand()%5000;
|
||||
} else shadowshock_timer -= diff;
|
||||
|
||||
if (chainlightning_timer <= diff)
|
||||
{
|
||||
if (Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM,0))
|
||||
DoCast(pTarget, SPELL_CHAIN_LIGHTNING);
|
||||
|
||||
chainlightning_timer = 25000;
|
||||
} else chainlightning_timer -= diff;
|
||||
|
||||
DoMeleeAttackIfReady();
|
||||
}
|
||||
};
|
||||
|
||||
CreatureAI* GetAI_boss_darkweaver_syth(Creature* pCreature)
|
||||
{
|
||||
return new boss_darkweaver_sythAI (pCreature);
|
||||
}
|
||||
|
||||
/* ELEMENTALS */
|
||||
|
||||
struct mob_syth_fireAI : public ScriptedAI
|
||||
{
|
||||
mob_syth_fireAI(Creature *c) : ScriptedAI(c)
|
||||
{
|
||||
}
|
||||
|
||||
uint32 flameshock_timer;
|
||||
uint32 flamebuffet_timer;
|
||||
|
||||
void Reset()
|
||||
{
|
||||
me->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_FIRE, true);
|
||||
flameshock_timer = 2500;
|
||||
flamebuffet_timer = 5000;
|
||||
}
|
||||
|
||||
void EnterCombat(Unit * /*who*/) { }
|
||||
|
||||
void UpdateAI(const uint32 diff)
|
||||
{
|
||||
if (!UpdateVictim())
|
||||
return;
|
||||
|
||||
if (flameshock_timer <= diff)
|
||||
{
|
||||
if (Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM,0))
|
||||
DoCast(pTarget, SPELL_FLAME_SHOCK);
|
||||
|
||||
flameshock_timer = 5000;
|
||||
} else flameshock_timer -= diff;
|
||||
|
||||
if (flamebuffet_timer <= diff)
|
||||
{
|
||||
if (Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM,0))
|
||||
DoCast(pTarget, SPELL_FLAME_BUFFET);
|
||||
|
||||
flamebuffet_timer = 5000;
|
||||
} else flamebuffet_timer -= diff;
|
||||
|
||||
DoMeleeAttackIfReady();
|
||||
}
|
||||
};
|
||||
|
||||
CreatureAI* GetAI_mob_syth_fire(Creature* pCreature)
|
||||
{
|
||||
return new mob_syth_fireAI (pCreature);
|
||||
}
|
||||
|
||||
struct mob_syth_arcaneAI : public ScriptedAI
|
||||
{
|
||||
mob_syth_arcaneAI(Creature *c) : ScriptedAI(c)
|
||||
{
|
||||
}
|
||||
|
||||
uint32 arcaneshock_timer;
|
||||
uint32 arcanebuffet_timer;
|
||||
|
||||
void Reset()
|
||||
{
|
||||
me->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_ARCANE, true);
|
||||
arcaneshock_timer = 2500;
|
||||
arcanebuffet_timer = 5000;
|
||||
}
|
||||
|
||||
void EnterCombat(Unit * /*who*/) { }
|
||||
|
||||
void UpdateAI(const uint32 diff)
|
||||
{
|
||||
if (!UpdateVictim())
|
||||
return;
|
||||
|
||||
if (arcaneshock_timer <= diff)
|
||||
{
|
||||
if (Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM,0))
|
||||
DoCast(pTarget, SPELL_ARCANE_SHOCK);
|
||||
|
||||
arcaneshock_timer = 5000;
|
||||
} else arcaneshock_timer -= diff;
|
||||
|
||||
if (arcanebuffet_timer <= diff)
|
||||
{
|
||||
if (Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM,0))
|
||||
DoCast(pTarget, SPELL_ARCANE_BUFFET);
|
||||
|
||||
arcanebuffet_timer = 5000;
|
||||
} else arcanebuffet_timer -= diff;
|
||||
|
||||
DoMeleeAttackIfReady();
|
||||
}
|
||||
};
|
||||
|
||||
CreatureAI* GetAI_mob_syth_arcane(Creature* pCreature)
|
||||
{
|
||||
return new mob_syth_arcaneAI (pCreature);
|
||||
}
|
||||
|
||||
struct mob_syth_frostAI : public ScriptedAI
|
||||
{
|
||||
mob_syth_frostAI(Creature *c) : ScriptedAI(c)
|
||||
{
|
||||
}
|
||||
|
||||
uint32 frostshock_timer;
|
||||
uint32 frostbuffet_timer;
|
||||
|
||||
void Reset()
|
||||
{
|
||||
me->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_FROST, true);
|
||||
frostshock_timer = 2500;
|
||||
frostbuffet_timer = 5000;
|
||||
}
|
||||
|
||||
void EnterCombat(Unit * /*who*/) { }
|
||||
|
||||
void UpdateAI(const uint32 diff)
|
||||
{
|
||||
if (!UpdateVictim())
|
||||
return;
|
||||
|
||||
if (frostshock_timer <= diff)
|
||||
{
|
||||
if (Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM,0))
|
||||
DoCast(pTarget, SPELL_FROST_SHOCK);
|
||||
|
||||
frostshock_timer = 5000;
|
||||
} else frostshock_timer -= diff;
|
||||
|
||||
if (frostbuffet_timer <= diff)
|
||||
{
|
||||
if (Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM,0))
|
||||
DoCast(pTarget, SPELL_FROST_BUFFET);
|
||||
|
||||
frostbuffet_timer = 5000;
|
||||
} else frostbuffet_timer -= diff;
|
||||
|
||||
DoMeleeAttackIfReady();
|
||||
}
|
||||
};
|
||||
|
||||
CreatureAI* GetAI_mob_syth_frost(Creature* pCreature)
|
||||
{
|
||||
return new mob_syth_frostAI (pCreature);
|
||||
}
|
||||
|
||||
struct mob_syth_shadowAI : public ScriptedAI
|
||||
{
|
||||
mob_syth_shadowAI(Creature *c) : ScriptedAI(c)
|
||||
{
|
||||
}
|
||||
|
||||
uint32 shadowshock_timer;
|
||||
uint32 shadowbuffet_timer;
|
||||
|
||||
void Reset()
|
||||
{
|
||||
me->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_SHADOW, true);
|
||||
shadowshock_timer = 2500;
|
||||
shadowbuffet_timer = 5000;
|
||||
}
|
||||
|
||||
void EnterCombat(Unit * /*who*/) { }
|
||||
|
||||
void UpdateAI(const uint32 diff)
|
||||
{
|
||||
if (!UpdateVictim())
|
||||
return;
|
||||
|
||||
if (shadowshock_timer <= diff)
|
||||
{
|
||||
if (Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM,0))
|
||||
DoCast(pTarget, SPELL_SHADOW_SHOCK);
|
||||
|
||||
shadowshock_timer = 5000;
|
||||
} else shadowshock_timer -= diff;
|
||||
|
||||
if (shadowbuffet_timer <= diff)
|
||||
{
|
||||
if (Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM,0))
|
||||
DoCast(pTarget, SPELL_SHADOW_BUFFET);
|
||||
|
||||
shadowbuffet_timer = 5000;
|
||||
} else shadowbuffet_timer -= diff;
|
||||
|
||||
DoMeleeAttackIfReady();
|
||||
}
|
||||
};
|
||||
|
||||
CreatureAI* GetAI_mob_syth_shadow(Creature* pCreature)
|
||||
{
|
||||
return new mob_syth_shadowAI (pCreature);
|
||||
}
|
||||
|
||||
void AddSC_boss_darkweaver_syth()
|
||||
{
|
||||
Script *newscript;
|
||||
newscript = new Script;
|
||||
newscript->Name = "boss_darkweaver_syth";
|
||||
newscript->GetAI = &GetAI_boss_darkweaver_syth;
|
||||
newscript->RegisterSelf();
|
||||
|
||||
newscript = new Script;
|
||||
newscript->Name = "mob_syth_fire";
|
||||
newscript->GetAI = &GetAI_mob_syth_arcane;
|
||||
newscript->RegisterSelf();
|
||||
|
||||
newscript = new Script;
|
||||
newscript->Name = "mob_syth_arcane";
|
||||
newscript->GetAI = &GetAI_mob_syth_arcane;
|
||||
newscript->RegisterSelf();
|
||||
|
||||
newscript = new Script;
|
||||
newscript->Name = "mob_syth_frost";
|
||||
newscript->GetAI = &GetAI_mob_syth_frost;
|
||||
newscript->RegisterSelf();
|
||||
|
||||
newscript = new Script;
|
||||
newscript->Name = "mob_syth_shadow";
|
||||
newscript->GetAI = &GetAI_mob_syth_shadow;
|
||||
newscript->RegisterSelf();
|
||||
}
|
||||
|
||||
@@ -0,0 +1,213 @@
|
||||
/* Copyright (C) 2006 - 2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
|
||||
* 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_Talon_King_Ikiss
|
||||
SD%Complete: 80
|
||||
SDComment: Heroic supported. Some details missing, but most are spell related.
|
||||
SDCategory: Auchindoun, Sethekk Halls
|
||||
EndScriptData */
|
||||
|
||||
#include "ScriptedPch.h"
|
||||
#include "sethekk_halls.h"
|
||||
|
||||
#define SAY_INTRO -1556007
|
||||
|
||||
#define SAY_AGGRO_1 -1556008
|
||||
#define SAY_AGGRO_2 -1556009
|
||||
#define SAY_AGGRO_3 -1556010
|
||||
|
||||
#define SAY_SLAY_1 -1556011
|
||||
#define SAY_SLAY_2 -1556012
|
||||
#define SAY_DEATH -1556013
|
||||
#define EMOTE_ARCANE_EXP -1556015
|
||||
|
||||
#define SPELL_BLINK 38194
|
||||
#define SPELL_BLINK_TELEPORT 38203
|
||||
#define SPELL_MANA_SHIELD 38151
|
||||
#define SPELL_ARCANE_BUBBLE 9438
|
||||
#define H_SPELL_SLOW 35032
|
||||
|
||||
#define SPELL_POLYMORPH 38245
|
||||
#define H_SPELL_POLYMORPH 43309
|
||||
|
||||
#define SPELL_ARCANE_VOLLEY 35059
|
||||
#define H_SPELL_ARCANE_VOLLEY 40424
|
||||
|
||||
#define SPELL_ARCANE_EXPLOSION 38197
|
||||
#define H_SPELL_ARCANE_EXPLOSION 40425
|
||||
|
||||
struct boss_talon_king_ikissAI : public ScriptedAI
|
||||
{
|
||||
boss_talon_king_ikissAI(Creature *c) : ScriptedAI(c)
|
||||
{
|
||||
pInstance = c->GetInstanceData();
|
||||
}
|
||||
|
||||
ScriptedInstance* pInstance;
|
||||
|
||||
uint32 ArcaneVolley_Timer;
|
||||
uint32 Sheep_Timer;
|
||||
uint32 Blink_Timer;
|
||||
uint32 Slow_Timer;
|
||||
|
||||
bool ManaShield;
|
||||
bool Blink;
|
||||
bool Intro;
|
||||
|
||||
void Reset()
|
||||
{
|
||||
ArcaneVolley_Timer = 5000;
|
||||
Sheep_Timer = 8000;
|
||||
Blink_Timer = 35000;
|
||||
Slow_Timer = 15000+rand()%15000;
|
||||
Blink = false;
|
||||
Intro = false;
|
||||
ManaShield = false;
|
||||
}
|
||||
|
||||
void MoveInLineOfSight(Unit *who)
|
||||
{
|
||||
if (!me->getVictim() && who->isTargetableForAttack() && (me->IsHostileTo(who)) && who->isInAccessiblePlaceFor(me))
|
||||
{
|
||||
if (!Intro && me->IsWithinDistInMap(who, 100))
|
||||
{
|
||||
Intro = true;
|
||||
DoScriptText(SAY_INTRO, 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void EnterCombat(Unit * /*who*/)
|
||||
{
|
||||
DoScriptText(RAND(SAY_AGGRO_1,SAY_AGGRO_2,SAY_AGGRO_3), me);
|
||||
}
|
||||
|
||||
void JustDied(Unit* /*Killer*/)
|
||||
{
|
||||
DoScriptText(SAY_DEATH, me);
|
||||
|
||||
if (pInstance)
|
||||
pInstance->SetData(DATA_IKISSDOOREVENT, DONE);
|
||||
}
|
||||
|
||||
void KilledUnit(Unit* /*victim*/)
|
||||
{
|
||||
DoScriptText(RAND(SAY_SLAY_1,SAY_SLAY_2), me);
|
||||
}
|
||||
|
||||
void UpdateAI(const uint32 diff)
|
||||
{
|
||||
if (!UpdateVictim())
|
||||
return;
|
||||
|
||||
if (Blink)
|
||||
{
|
||||
DoCast(me, SPELL_ARCANE_EXPLOSION);
|
||||
DoCast(me, SPELL_ARCANE_BUBBLE, true);
|
||||
Blink = false;
|
||||
}
|
||||
|
||||
if (ArcaneVolley_Timer <= diff)
|
||||
{
|
||||
DoCast(me, SPELL_ARCANE_VOLLEY);
|
||||
ArcaneVolley_Timer = 7000+rand()%5000;
|
||||
} else ArcaneVolley_Timer -= diff;
|
||||
|
||||
if (Sheep_Timer <= diff)
|
||||
{
|
||||
Unit *pTarget;
|
||||
|
||||
//second top aggro target in normal, random target in heroic correct?
|
||||
if (IsHeroic())
|
||||
pTarget = SelectUnit(SELECT_TARGET_RANDOM,0);
|
||||
else
|
||||
pTarget = SelectUnit(SELECT_TARGET_TOPAGGRO,1);
|
||||
|
||||
if (pTarget)
|
||||
DoCast(pTarget, SPELL_POLYMORPH);
|
||||
Sheep_Timer = 15000+rand()%2500;
|
||||
} else Sheep_Timer -= diff;
|
||||
|
||||
//may not be correct time to cast
|
||||
if (!ManaShield && ((me->GetHealth()*100) / me->GetMaxHealth() < 20))
|
||||
{
|
||||
DoCast(me, SPELL_MANA_SHIELD);
|
||||
ManaShield = true;
|
||||
}
|
||||
|
||||
if (IsHeroic())
|
||||
{
|
||||
if (Slow_Timer <= diff)
|
||||
{
|
||||
DoCast(me, H_SPELL_SLOW);
|
||||
Slow_Timer = 15000+rand()%25000;
|
||||
} else Slow_Timer -= diff;
|
||||
}
|
||||
|
||||
if (Blink_Timer <= diff)
|
||||
{
|
||||
DoScriptText(EMOTE_ARCANE_EXP, me);
|
||||
|
||||
if (Unit *pTarget = SelectUnit(SELECT_TARGET_RANDOM,0))
|
||||
{
|
||||
if (me->IsNonMeleeSpellCasted(false))
|
||||
me->InterruptNonMeleeSpells(false);
|
||||
|
||||
//Spell doesn't work, but we use for visual effect at least
|
||||
DoCast(pTarget, SPELL_BLINK);
|
||||
|
||||
float X = pTarget->GetPositionX();
|
||||
float Y = pTarget->GetPositionY();
|
||||
float Z = pTarget->GetPositionZ();
|
||||
|
||||
DoTeleportTo(X,Y,Z);
|
||||
|
||||
DoCast(pTarget, SPELL_BLINK_TELEPORT);
|
||||
Blink = true;
|
||||
}
|
||||
Blink_Timer = 35000+rand()%5000;
|
||||
} else Blink_Timer -= diff;
|
||||
|
||||
if (!Blink)
|
||||
DoMeleeAttackIfReady();
|
||||
}
|
||||
};
|
||||
|
||||
CreatureAI* GetAI_boss_talon_king_ikiss(Creature* pCreature)
|
||||
{
|
||||
return new boss_talon_king_ikissAI (pCreature);
|
||||
}
|
||||
|
||||
void AddSC_boss_talon_king_ikiss()
|
||||
{
|
||||
Script *newscript;
|
||||
newscript = new Script;
|
||||
newscript->Name = "boss_talon_king_ikiss";
|
||||
newscript->GetAI = &GetAI_boss_talon_king_ikiss;
|
||||
newscript->RegisterSelf();
|
||||
}
|
||||
|
||||
@@ -0,0 +1,91 @@
|
||||
/* Copyright (C) 2006 - 2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
|
||||
* 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: Instance - Sethekk Halls
|
||||
SD%Complete: 50
|
||||
SDComment: Instance Data for Sethekk Halls instance
|
||||
SDCategory: Auchindoun, Sethekk Halls
|
||||
EndScriptData */
|
||||
|
||||
#include "ScriptedPch.h"
|
||||
#include "sethekk_halls.h"
|
||||
|
||||
enum eEnums
|
||||
{
|
||||
NPC_ANZU = 23035,
|
||||
IKISS_DOOR = 177203,
|
||||
};
|
||||
|
||||
struct instance_sethekk_halls : public ScriptedInstance
|
||||
{
|
||||
instance_sethekk_halls(Map* pMap) : ScriptedInstance(pMap) {Initialize();};
|
||||
|
||||
uint32 AnzuEncounter;
|
||||
uint64 m_uiIkissDoorGUID;
|
||||
|
||||
void Initialize()
|
||||
{
|
||||
AnzuEncounter = NOT_STARTED;
|
||||
m_uiIkissDoorGUID = 0;
|
||||
}
|
||||
|
||||
void OnCreatureCreate(Creature* pCreature, bool /*add*/)
|
||||
{
|
||||
if (pCreature->GetEntry() == NPC_ANZU)
|
||||
{
|
||||
if (AnzuEncounter >= IN_PROGRESS)
|
||||
pCreature->DisappearAndDie();
|
||||
else
|
||||
AnzuEncounter = IN_PROGRESS;
|
||||
}
|
||||
}
|
||||
|
||||
void OnGameObjectCreate(GameObject* pGo, bool /*add*/)
|
||||
{
|
||||
if (pGo->GetEntry() == IKISS_DOOR)
|
||||
m_uiIkissDoorGUID = pGo->GetGUID();
|
||||
}
|
||||
|
||||
void SetData(uint32 type, uint32 data)
|
||||
{
|
||||
switch(type)
|
||||
{
|
||||
case DATA_IKISSDOOREVENT:
|
||||
if (data == DONE)
|
||||
DoUseDoorOrButton(m_uiIkissDoorGUID,DAY*IN_MILISECONDS);
|
||||
break;
|
||||
case TYPE_ANZU_ENCOUNTER:
|
||||
AnzuEncounter = data;
|
||||
break;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
InstanceData* GetInstanceData_instance_sethekk_halls(Map* pMap)
|
||||
{
|
||||
return new instance_sethekk_halls(pMap);
|
||||
}
|
||||
|
||||
void AddSC_instance_sethekk_halls()
|
||||
{
|
||||
Script *newscript;
|
||||
newscript = new Script;
|
||||
newscript->Name = "instance_sethekk_halls";
|
||||
newscript->GetInstanceData = &GetInstanceData_instance_sethekk_halls;
|
||||
newscript->RegisterSelf();
|
||||
}
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
/* Copyright (C) 2006 - 2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
|
||||
* This program is free software licensed under GPL version 2
|
||||
* Please see the included DOCS/LICENSE.TXT for more information */
|
||||
|
||||
#ifndef DEF_SETHEKK_HALLS_H
|
||||
#define DEF_SETHEKK_HALLS_H
|
||||
|
||||
enum eTypes
|
||||
{
|
||||
DATA_IKISSDOOREVENT = 1,
|
||||
TYPE_ANZU_ENCOUNTER = 2,
|
||||
};
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user