*Added missing file

--HG--
branch : trunk
This commit is contained in:
Blaymoira
2009-01-18 20:58:15 +01:00
parent 219599b59c
commit ccd4815d84

View File

@@ -0,0 +1,643 @@
/* 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_Tomb_Of_Seven
SD%Complete: 50
SDComment: Learning Smelt Dark Iron if tribute quest rewarded. Missing event and re-spawn GO Spectral Chalice
SDCategory: Blackrock Depths
EndScriptData */
#include "precompiled.h"
#include "def_blackrock_depths.h"
#define FACTION_NEUTRAL 734
#define FACTION_HOSTILE 754
#define SPELL_SUNDERARMOR 24317
#define SPELL_SHIELDBLOCK 12169
#define SPELL_STRIKE 15580
struct TRINITY_DLL_DECL boss_angerrelAI : public ScriptedAI
{
boss_angerrelAI(Creature *c) : ScriptedAI(c) {Reset();}
uint32 SunderArmor_Timer;
uint32 ShieldBlock_Timer;
uint32 Strike_Timer;
void Reset()
{
SunderArmor_Timer = 8000;
ShieldBlock_Timer = 15000;
Strike_Timer = 12000;
}
void Aggro(Unit *who)
{
}
void UpdateAI(const uint32 diff)
{
if (!m_creature->SelectHostilTarget() || !m_creature->getVictim())
return;
//SunderArmor_Timer
if (SunderArmor_Timer < diff)
{
DoCast(m_creature->getVictim(),SPELL_SUNDERARMOR);
SunderArmor_Timer = 28000;
}else SunderArmor_Timer -= diff;
//ShieldBlock_Timer
if (ShieldBlock_Timer < diff)
{
DoCast(m_creature,SPELL_SHIELDBLOCK);
ShieldBlock_Timer = 25000;
}else ShieldBlock_Timer -= diff;
//Strike_Timer
if (Strike_Timer < diff)
{
DoCast(m_creature->getVictim(),SPELL_STRIKE);
Strike_Timer = 10000;
}else Strike_Timer -= diff;
DoMeleeAttackIfReady();
}
};
CreatureAI* GetAI_boss_angerrel(Creature *_Creature)
{
return new boss_angerrelAI (_Creature);
}
#define SPELL_SINISTERSTRIKE 15581
#define SPELL_BACKSTAB 15582
#define SPELL_GOUGE 13579
struct TRINITY_DLL_DECL boss_doperelAI : public ScriptedAI
{
boss_doperelAI(Creature *c) : ScriptedAI(c) {Reset();}
uint32 SinisterStrike_Timer;
uint32 BackStab_Timer;
uint32 Gouge_Timer;
void Reset()
{
SinisterStrike_Timer = 8000;
BackStab_Timer = 12000;
Gouge_Timer = 6000;
}
void Aggro(Unit *who)
{
}
void UpdateAI(const uint32 diff)
{
if (!m_creature->SelectHostilTarget() || !m_creature->getVictim())
return;
//SinisterStrike_Timer
if (SinisterStrike_Timer < diff)
{
DoCast(m_creature->getVictim(),SPELL_SINISTERSTRIKE);
SinisterStrike_Timer = 7000;
}else SinisterStrike_Timer -= diff;
//BackStab_Timer
if (BackStab_Timer < diff)
{
DoCast(m_creature->getVictim(),SPELL_BACKSTAB);
BackStab_Timer = 6000;
}else BackStab_Timer -= diff;
//Gouge_Timer
if (Gouge_Timer < diff)
{
DoCast(m_creature->getVictim(),SPELL_GOUGE);
Gouge_Timer = 8000;
}else Gouge_Timer -= diff;
DoMeleeAttackIfReady();
}
};
CreatureAI* GetAI_boss_doperel(Creature *_Creature)
{
return new boss_doperelAI (_Creature);
}
#define SPELL_SHADOWBOLT 17483 //Not sure if right ID
#define SPELL_MANABURN 10876
#define SPELL_SHADOWSHIELD 22417
struct TRINITY_DLL_DECL boss_haterelAI : public ScriptedAI
{
boss_haterelAI(Creature *c) : ScriptedAI(c) {Reset();}
uint32 ShadowBolt_Timer;
uint32 ManaBurn_Timer;
uint32 ShadowShield_Timer;
uint32 Strike_Timer;
void Reset()
{
ShadowBolt_Timer = 15000;
ManaBurn_Timer = 3000;
ShadowShield_Timer = 8000;
Strike_Timer = 12000;
}
void Aggro(Unit *who)
{
}
void UpdateAI(const uint32 diff)
{
if (!m_creature->SelectHostilTarget() || !m_creature->getVictim())
return;
//ShadowBolt_Timer
if (ShadowBolt_Timer < diff)
{
Unit* target = NULL;
target = SelectUnit(SELECT_TARGET_RANDOM,0);
if (target) DoCast(target,SPELL_SHADOWBOLT);
ShadowBolt_Timer = 7000;
}else ShadowBolt_Timer -= diff;
//ManaBurn_Timer
if (ManaBurn_Timer < diff)
{
if (Unit* target = SelectUnit(SELECT_TARGET_RANDOM,0))
DoCast(target,SPELL_MANABURN);
ManaBurn_Timer = 13000;
}else ManaBurn_Timer -= diff;
//ShadowShield_Timer
if (ShadowShield_Timer < diff)
{
DoCast(m_creature,SPELL_SHADOWSHIELD);
ShadowShield_Timer = 25000;
}else ShadowShield_Timer -= diff;
//Strike_Timer
if (Strike_Timer < diff)
{
DoCast(m_creature->getVictim(),SPELL_STRIKE);
Strike_Timer = 10000;
}else Strike_Timer -= diff;
DoMeleeAttackIfReady();
}
};
CreatureAI* GetAI_boss_haterel(Creature *_Creature)
{
return new boss_haterelAI (_Creature);
}
#define SPELL_MINDBLAST 15587
#define SPELL_HEAL 15586
#define SPELL_PRAYEROFHEALING 15585
#define SPELL_SHIELD 10901
struct TRINITY_DLL_DECL boss_vilerelAI : public ScriptedAI
{
boss_vilerelAI(Creature *c) : ScriptedAI(c) {Reset();}
uint32 MindBlast_Timer;
uint32 Heal_Timer;
uint32 PrayerOfHealing_Timer;
uint32 Shield_Timer;
void Reset()
{
MindBlast_Timer = 10000;
Heal_Timer = 35000;
PrayerOfHealing_Timer = 25000;
Shield_Timer = 3000;
}
void Aggro(Unit *who)
{
}
void UpdateAI(const uint32 diff)
{
if (!m_creature->SelectHostilTarget() || !m_creature->getVictim())
return;
//MindBlast_Timer
if (MindBlast_Timer < diff)
{
DoCast(m_creature->getVictim(),SPELL_MINDBLAST);
MindBlast_Timer = 7000;
}else MindBlast_Timer -= diff;
//Heal_Timer
if (Heal_Timer < diff)
{
DoCast(m_creature,SPELL_HEAL);
Heal_Timer = 20000;
}else Heal_Timer -= diff;
//PrayerOfHealing_Timer
if (PrayerOfHealing_Timer < diff)
{
DoCast(m_creature,SPELL_PRAYEROFHEALING);
PrayerOfHealing_Timer = 30000;
}else PrayerOfHealing_Timer -= diff;
//Shield_Timer
if (Shield_Timer < diff)
{
DoCast(m_creature,SPELL_SHIELD);
Shield_Timer = 30000;
}else Shield_Timer -= diff;
DoMeleeAttackIfReady();
}
};
CreatureAI* GetAI_boss_vilerel(Creature *_Creature)
{
return new boss_vilerelAI (_Creature);
}
#define SPELL_FROSTBOLT 16799
#define SPELL_FROSTARMOR 15784 //This is actually a buff he gives himself
#define SPELL_BLIZZARD 19099
#define SPELL_FROSTNOVA 15063
#define SPELL_FROSTWARD 15004
struct TRINITY_DLL_DECL boss_seethrelAI : public ScriptedAI
{
boss_seethrelAI(Creature *c) : ScriptedAI(c) {Reset();}
uint32 FrostArmor_Timer;
uint32 Frostbolt_Timer;
uint32 Blizzard_Timer;
uint32 FrostNova_Timer;
uint32 FrostWard_Timer;
void Reset()
{
FrostArmor_Timer = 2000;
Frostbolt_Timer = 6000;
Blizzard_Timer = 18000;
FrostNova_Timer = 12000;
FrostWard_Timer = 25000;
m_creature->CastSpell(m_creature,SPELL_FROSTARMOR,true);
}
void Aggro(Unit *who)
{
}
void UpdateAI(const uint32 diff)
{
if (!m_creature->SelectHostilTarget() || !m_creature->getVictim())
return;
//FrostArmor_Timer
if (FrostArmor_Timer < diff)
{
DoCast(m_creature, SPELL_FROSTARMOR);
FrostArmor_Timer = 180000;
}else FrostArmor_Timer -= diff;
//Frostbolt_Timer
if (Frostbolt_Timer < diff)
{
DoCast(m_creature->getVictim(),SPELL_FROSTBOLT);
Frostbolt_Timer = 15000;
}else Frostbolt_Timer -= diff;
//Blizzard_Timer
if (Blizzard_Timer < diff)
{
if (Unit* target = SelectUnit(SELECT_TARGET_RANDOM,0))
DoCast(target,SPELL_BLIZZARD);
Blizzard_Timer = 22000;
}else Blizzard_Timer -= diff;
//FrostNova_Timer
if (FrostNova_Timer < diff)
{
DoCast(m_creature->getVictim(),SPELL_FROSTNOVA);
FrostNova_Timer = 14000;
}else FrostNova_Timer -= diff;
//FrostWard_Timer
if (FrostWard_Timer < diff)
{
DoCast(m_creature,SPELL_FROSTWARD);
FrostWard_Timer = 68000;
}else FrostWard_Timer -= diff;
DoMeleeAttackIfReady();
}
};
CreatureAI* GetAI_boss_seethrel(Creature *_Creature)
{
return new boss_seethrelAI (_Creature);
}
#define SPELL_HAMSTRING 9080
#define SPELL_CLEAVE 15579
#define SPELL_MORTALSTRIKE 15708
struct TRINITY_DLL_DECL boss_gloomrelAI : public ScriptedAI
{
boss_gloomrelAI(Creature *c) : ScriptedAI(c) {Reset();}
uint32 Hamstring_Timer;
uint32 Cleave_Timer;
uint32 MortalStrike_Timer;
void Reset()
{
Hamstring_Timer = 19000;
Cleave_Timer = 6000;
MortalStrike_Timer = 10000;
m_creature->setFaction(FACTION_NEUTRAL);
}
void Aggro(Unit *who)
{
}
void UpdateAI(const uint32 diff)
{
if (!m_creature->SelectHostilTarget() || !m_creature->getVictim() )
return;
//Hamstring_Timer
if (Hamstring_Timer < diff)
{
DoCast(m_creature->getVictim(),SPELL_HAMSTRING);
Hamstring_Timer = 14000;
}else Hamstring_Timer -= diff;
//Cleave_Timer
if (Cleave_Timer < diff)
{
DoCast(m_creature->getVictim(),SPELL_CLEAVE);
Cleave_Timer = 8000;
}else Cleave_Timer -= diff;
//MortalStrike_Timer
if (MortalStrike_Timer < diff)
{
DoCast(m_creature->getVictim(),SPELL_MORTALSTRIKE);
MortalStrike_Timer = 12000;
}else MortalStrike_Timer -= diff;
DoMeleeAttackIfReady();
}
};
CreatureAI* GetAI_boss_gloomrel(Creature *_Creature)
{
return new boss_gloomrelAI (_Creature);
}
#define GOSSIP_ITEM_TEACH_1 "Teach me the art of smelting dark iron"
#define GOSSIP_ITEM_TEACH_2 "Continue..."
#define GOSSIP_ITEM_TRIBUTE "I want to pay tribute"
bool GossipHello_boss_gloomrel(Player *player, Creature *_Creature)
{
if (player->GetQuestRewardStatus(4083) == 1 && player->GetSkillValue(SKILL_MINING) >= 230 && !player->HasSpell(14891) )
player->ADD_GOSSIP_ITEM(0, GOSSIP_ITEM_TEACH_1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1);
if (player->GetQuestRewardStatus(4083) == 0 && player->GetSkillValue(SKILL_MINING) >= 230)
player->ADD_GOSSIP_ITEM(0, GOSSIP_ITEM_TRIBUTE, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2);
return true;
}
bool GossipSelect_boss_gloomrel(Player *player, Creature *_Creature, uint32 sender, uint32 action )
{
switch (action)
{
case GOSSIP_ACTION_INFO_DEF+1:
player->ADD_GOSSIP_ITEM(0, GOSSIP_ITEM_TEACH_2, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 11);
player->SEND_GOSSIP_MENU(2606, _Creature->GetGUID());
break;
case GOSSIP_ACTION_INFO_DEF+11:
player->CLOSE_GOSSIP_MENU();
_Creature->CastSpell(player, 14894, false);
break;
case GOSSIP_ACTION_INFO_DEF+2:
player->ADD_GOSSIP_ITEM(0, "[PH] Continue...", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 22);
player->SEND_GOSSIP_MENU(2604, _Creature->GetGUID());
break;
case GOSSIP_ACTION_INFO_DEF+22:
player->CLOSE_GOSSIP_MENU();
//re-spawn object here
break;
}
return true;
}
#define SPELL_SHADOWBOLTVOLLEY 17228
#define SPELL_IMMOLATE 15505
#define SPELL_CURSEOFWEAKNESS 17227
#define SPELL_DEMONARMOR 11735
struct TRINITY_DLL_DECL boss_doomrelAI : public ScriptedAI
{
boss_doomrelAI(Creature *c) : ScriptedAI(c) {Reset();}
uint32 ShadowVolley_Timer;
uint32 Immolate_Timer;
uint32 CurseOfWeakness_Timer;
uint32 DemonArmor_Timer;
bool Voidwalkers;
int Rand;
int RandX;
int RandY;
Creature* Summoned;
void Reset()
{
ShadowVolley_Timer = 10000;
Immolate_Timer = 18000;
CurseOfWeakness_Timer = 5000;
DemonArmor_Timer = 16000;
Voidwalkers = false;
m_creature->setFaction(FACTION_NEUTRAL);
}
void Aggro(Unit *who)
{
}
void SummonVoidwalkers(Unit* victim)
{
Rand = rand()%5;
switch (rand()%2)
{
case 0: RandX = 0 - Rand; break;
case 1: RandX = 0 + Rand; break;
}
Rand = 0;
Rand = rand()%5;
switch (rand()%2)
{
case 0: RandY = 0 - Rand; break;
case 1: RandY = 0 + Rand; break;
}
Rand = 0;
Summoned = DoSpawnCreature(16119, RandX, RandY, 0, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 120000);
if(Summoned)
((CreatureAI*)Summoned->AI())->AttackStart(victim);
}
void UpdateAI(const uint32 diff)
{
if (!m_creature->SelectHostilTarget() || !m_creature->getVictim() )
return;
//ShadowVolley_Timer
if (ShadowVolley_Timer < diff)
{
DoCast(m_creature->getVictim(),SPELL_SHADOWBOLTVOLLEY);
ShadowVolley_Timer = 12000;
}else ShadowVolley_Timer -= diff;
//Immolate_Timer
if (Immolate_Timer < diff)
{
if (Unit* target = SelectUnit(SELECT_TARGET_RANDOM,0))
DoCast(target,SPELL_IMMOLATE);
Immolate_Timer = 25000;
}else Immolate_Timer -= diff;
//CurseOfWeakness_Timer
if (CurseOfWeakness_Timer < diff)
{
DoCast(m_creature->getVictim(),SPELL_CURSEOFWEAKNESS);
CurseOfWeakness_Timer = 45000;
}else CurseOfWeakness_Timer -= diff;
//DemonArmor_Timer
if (DemonArmor_Timer < diff)
{
DoCast(m_creature,SPELL_DEMONARMOR);
DemonArmor_Timer = 300000;
}else DemonArmor_Timer -= diff;
//Summon Voidwalkers
if (!Voidwalkers && m_creature->GetHealth()*100 / m_creature->GetMaxHealth() < 51 )
{
SummonVoidwalkers(m_creature->getVictim());
SummonVoidwalkers(m_creature->getVictim());
SummonVoidwalkers(m_creature->getVictim());
Voidwalkers = true;
}
DoMeleeAttackIfReady();
}
};
CreatureAI* GetAI_boss_doomrel(Creature *_Creature)
{
return new boss_doomrelAI (_Creature);
}
#define GOSSIP_ITEM_CHALLENGE "Your bondage is at an end, Doom'rel. I challenge you!"
bool GossipHello_boss_doomrel(Player *player, Creature *_Creature)
{
player->ADD_GOSSIP_ITEM(0, GOSSIP_ITEM_CHALLENGE, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1);
player->SEND_GOSSIP_MENU(2601, _Creature->GetGUID());
return true;
}
bool GossipSelect_boss_doomrel(Player *player, Creature *_Creature, uint32 sender, uint32 action )
{
switch (action)
{
case GOSSIP_ACTION_INFO_DEF+1:
player->ADD_GOSSIP_ITEM( 0, "[PH] Continue...", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2);
player->SEND_GOSSIP_MENU(2605, _Creature->GetGUID());
break;
case GOSSIP_ACTION_INFO_DEF+2:
player->CLOSE_GOSSIP_MENU();
//start event here, below code just temporary
_Creature->setFaction(FACTION_HOSTILE);
break;
}
return true;
}
void AddSC_boss_tomb_of_seven()
{
Script *newscript;
newscript = new Script;
newscript->Name = "boss_angerrel";
newscript->GetAI = &GetAI_boss_angerrel;
newscript->RegisterSelf();
newscript = new Script;
newscript->Name = "boss_doperel";
newscript->GetAI = &GetAI_boss_doperel;
newscript->RegisterSelf();
newscript = new Script;
newscript->Name = "boss_haterel";
newscript->GetAI = &GetAI_boss_haterel;
newscript->RegisterSelf();
newscript = new Script;
newscript->Name = "boss_vilerel";
newscript->GetAI = &GetAI_boss_vilerel;
newscript->RegisterSelf();
newscript = new Script;
newscript->Name = "boss_seethrel";
newscript->GetAI = &GetAI_boss_seethrel;
newscript->RegisterSelf();
newscript = new Script;
newscript->Name = "boss_gloomrel";
newscript->GetAI = &GetAI_boss_gloomrel;
newscript->pGossipHello = &GossipHello_boss_gloomrel;
newscript->pGossipSelect = &GossipSelect_boss_gloomrel;
newscript->RegisterSelf();
newscript = new Script;
newscript->Name = "boss_doomrel";
newscript->GetAI = &GetAI_boss_doomrel;
newscript->pGossipHello = &GossipHello_boss_doomrel;
newscript->pGossipSelect = &GossipSelect_boss_doomrel;
newscript->RegisterSelf();
}