*Add script of General Bjarngrim, Halls of Lightning. Source: SD2. Thanks to manuel.
--HG-- branch : trunk
This commit is contained in:
@@ -1,86 +1,429 @@
|
||||
/* Script Data Start
|
||||
SDName: Boss bjarngrim
|
||||
SDAuthor: LordVanMartin
|
||||
SD%Complete:
|
||||
SDComment:
|
||||
SDCategory:
|
||||
Script Data End */
|
||||
/* 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 General Bjarngrim
|
||||
SD%Complete: 70%
|
||||
SDComment: Waypoint needed, we expect boss to always have 2x Stormforged Lieutenant following
|
||||
SDCategory: Halls of Lightning
|
||||
EndScriptData */
|
||||
|
||||
/*** SQL START ***
|
||||
update creature_template set scriptname = '' where entry = '';
|
||||
*** SQL END ***/
|
||||
#include "precompiled.h"
|
||||
#include "def_halls_of_lightning.h"
|
||||
|
||||
//AURAS AND STANCES
|
||||
#define BUFF_BATTLE_AURA 41106
|
||||
#define SPELL_BATTLE_STANCE 53792
|
||||
#define BUFF_BERSEKER_AURA 41107
|
||||
#define SPELL_BERSEKER_STANCE 53791
|
||||
#define BUFF_DEFENSIVE_AURA 41105
|
||||
#define SPELL_DEFENSIVE_STANCE 53790
|
||||
enum
|
||||
{
|
||||
//Yell
|
||||
SAY_AGGRO = -1602000,
|
||||
SAY_SLAY_1 = -1602001,
|
||||
SAY_SLAY_2 = -1602002,
|
||||
SAY_SLAY_3 = -1602003,
|
||||
SAY_DEATH = -1602004,
|
||||
SAY_BATTLE_STANCE = -1602005,
|
||||
EMOTE_BATTLE_STANCE = -1602006,
|
||||
SAY_BERSEKER_STANCE = -1602007,
|
||||
EMOTE_BERSEKER_STANCE = -1602008,
|
||||
SAY_DEFENSIVE_STANCE = -1602009,
|
||||
EMOTE_DEFENSIVE_STANCE = -1602010,
|
||||
|
||||
//OTHER SPELLS
|
||||
#define SPELL_CHARGE_UP 52098
|
||||
#define SPELL_CLEAVE 15284
|
||||
#define SPELL_INTERCEPT 58769
|
||||
#define SPELL_IRONFORM 52022
|
||||
#define SPELL_KNOCK_AWAY 52029
|
||||
#define SPELL_MORTAL_STRIKE 15708
|
||||
#define SPELL_SLAM 52026
|
||||
#define SPELL_SPELL_REFLECTION 36096
|
||||
#define SPELL_WHIRLWIND 52027
|
||||
SPELL_DEFENSIVE_STANCE = 53790,
|
||||
//SPELL_DEFENSIVE_AURA = 41105,
|
||||
SPELL_SPELL_REFLECTION = 36096,
|
||||
SPELL_PUMMEL = 12555,
|
||||
SPELL_KNOCK_AWAY = 52029,
|
||||
SPELL_IRONFORM = 52022,
|
||||
|
||||
//Yell
|
||||
#define SAY_AGGRO -1602000
|
||||
#define SAY_SLAY_1 -1602001
|
||||
#define SAY_SLAY_2 -1602002
|
||||
#define SAY_SLAY_3 -1602003
|
||||
#define SAY_DEATH -1602004
|
||||
#define SAY_BATTLE_STANCE -1602005
|
||||
#define SAY_BERSEKER_STANCE -1602006
|
||||
#define SAY_DEFENSIVE_STANCE -1602007
|
||||
SPELL_BERSEKER_STANCE = 53791,
|
||||
//SPELL_BERSEKER_AURA = 41107,
|
||||
SPELL_INTERCEPT = 58769,
|
||||
SPELL_WHIRLWIND = 52027,
|
||||
SPELL_CLEAVE = 15284,
|
||||
|
||||
SPELL_BATTLE_STANCE = 53792,
|
||||
//SPELL_BATTLE_AURA = 41106,
|
||||
SPELL_MORTAL_STRIKE = 16856,
|
||||
SPELL_SLAM = 52026,
|
||||
|
||||
//OTHER SPELLS
|
||||
//SPELL_CHARGE_UP = 52098, // only used when starting walk from one platform to the other
|
||||
//SPELL_TEMPORARY_ELECTRICAL_CHARGE = 52092, // triggered part of above
|
||||
|
||||
NPC_STORMFORGED_LIEUTENANT = 29240,
|
||||
SPELL_ARC_WELD = 59085,
|
||||
SPELL_RENEW_STEEL_N = 52774,
|
||||
SPELL_RENEW_STEEL_H = 59160,
|
||||
|
||||
EQUIP_SWORD = 37871,
|
||||
EQUIP_SHIELD = 35642,
|
||||
EQUIP_MACE = 43623,
|
||||
|
||||
STANCE_DEFENSIVE = 0,
|
||||
STANCE_BERSERKER = 1,
|
||||
STANCE_BATTLE = 2
|
||||
};
|
||||
|
||||
/*######
|
||||
## boss_bjarngrim
|
||||
######*/
|
||||
|
||||
struct TRINITY_DLL_DECL boss_bjarngrimAI : public ScriptedAI
|
||||
{
|
||||
boss_bjarngrimAI(Creature *c) : ScriptedAI(c) {}
|
||||
boss_bjarngrimAI(Creature *pCreature) : ScriptedAI(pCreature)
|
||||
{
|
||||
m_pInstance = (ScriptedInstance*)pCreature->GetInstanceData();
|
||||
m_bIsHeroic = pCreature->GetMap()->IsHeroic();
|
||||
m_uiStance = STANCE_DEFENSIVE;
|
||||
Reset();
|
||||
}
|
||||
|
||||
uint32 whirlwind;
|
||||
ScriptedInstance* m_pInstance;
|
||||
|
||||
void Reset() {}
|
||||
void EnterCombat(Unit* who)
|
||||
bool m_bIsHeroic;
|
||||
bool m_bIsChangingStance;
|
||||
|
||||
uint8 m_uiChargingStatus;
|
||||
uint8 m_uiStance;
|
||||
|
||||
uint32 m_uiCharge_Timer;
|
||||
uint32 m_uiChangeStance_Timer;
|
||||
|
||||
uint32 m_uiReflection_Timer;
|
||||
uint32 m_uiKnockAway_Timer;
|
||||
uint32 m_uiPummel_Timer;
|
||||
uint32 m_uiIronform_Timer;
|
||||
|
||||
uint32 m_uiIntercept_Timer;
|
||||
uint32 m_uiWhirlwind_Timer;
|
||||
uint32 m_uiCleave_Timer;
|
||||
|
||||
uint32 m_uiMortalStrike_Timer;
|
||||
uint32 m_uiSlam_Timer;
|
||||
|
||||
uint64 m_uiStormforgedLieutenantGUID[2];
|
||||
|
||||
void Reset()
|
||||
{
|
||||
m_bIsChangingStance = false;
|
||||
|
||||
m_uiChargingStatus = 0;
|
||||
m_uiCharge_Timer = 1000;
|
||||
|
||||
m_uiChangeStance_Timer = 20000 + rand()%5000;
|
||||
|
||||
m_uiReflection_Timer = 8000;
|
||||
m_uiKnockAway_Timer = 20000;
|
||||
m_uiPummel_Timer = 10000;
|
||||
m_uiIronform_Timer = 25000;
|
||||
|
||||
m_uiIntercept_Timer = 5000;
|
||||
m_uiWhirlwind_Timer = 10000;
|
||||
m_uiCleave_Timer = 8000;
|
||||
|
||||
m_uiMortalStrike_Timer = 8000;
|
||||
m_uiSlam_Timer = 10000;
|
||||
|
||||
for(uint8 i = 0; i < 2; ++i)
|
||||
{
|
||||
if (Creature* pStormforgedLieutenant = ((Creature*)Unit::GetUnit((*m_creature), m_uiStormforgedLieutenantGUID[i])))
|
||||
{
|
||||
if (!pStormforgedLieutenant->isAlive())
|
||||
pStormforgedLieutenant->Respawn();
|
||||
}
|
||||
}
|
||||
|
||||
if (m_uiStance != STANCE_DEFENSIVE)
|
||||
{
|
||||
DoRemoveStanceAura(m_uiStance);
|
||||
DoCast(m_creature, SPELL_DEFENSIVE_STANCE);
|
||||
m_uiStance = STANCE_DEFENSIVE;
|
||||
}
|
||||
|
||||
SetEquipmentSlots(false, EQUIP_SWORD, EQUIP_SHIELD, EQUIP_NO_CHANGE);
|
||||
|
||||
if (m_pInstance)
|
||||
m_pInstance->SetData(TYPE_BJARNGRIM, NOT_STARTED);
|
||||
}
|
||||
|
||||
void EnterCombat(Unit* pWho)
|
||||
{
|
||||
DoScriptText(SAY_AGGRO, m_creature);
|
||||
|
||||
//must get both lieutenants here and make sure they are with him
|
||||
m_creature->CallForHelp(30.0f);
|
||||
|
||||
if (m_pInstance)
|
||||
m_pInstance->SetData(TYPE_BJARNGRIM, IN_PROGRESS);
|
||||
}
|
||||
void AttackStart(Unit* who) {}
|
||||
void MoveInLineOfSight(Unit* who) {}
|
||||
void UpdateAI(const uint32 diff)
|
||||
|
||||
void KilledUnit(Unit* pVictim)
|
||||
{
|
||||
switch(rand()%3)
|
||||
{
|
||||
case 0: DoScriptText(SAY_SLAY_1, m_creature); break;
|
||||
case 1: DoScriptText(SAY_SLAY_2, m_creature); break;
|
||||
case 2: DoScriptText(SAY_SLAY_3, m_creature); break;
|
||||
}
|
||||
}
|
||||
|
||||
void JustDied(Unit* pKiller)
|
||||
{
|
||||
DoScriptText(SAY_DEATH, m_creature);
|
||||
|
||||
if (m_pInstance)
|
||||
m_pInstance->SetData(TYPE_BJARNGRIM, DONE);
|
||||
}
|
||||
|
||||
//TODO: remove when removal is done by mangos
|
||||
void DoRemoveStanceAura(uint8 uiStance)
|
||||
{
|
||||
switch(uiStance)
|
||||
{
|
||||
case STANCE_DEFENSIVE:
|
||||
m_creature->RemoveAurasDueToSpell(SPELL_DEFENSIVE_STANCE);
|
||||
break;
|
||||
case STANCE_BERSERKER:
|
||||
m_creature->RemoveAurasDueToSpell(SPELL_BERSEKER_STANCE);
|
||||
break;
|
||||
case STANCE_BATTLE:
|
||||
m_creature->RemoveAurasDueToSpell(SPELL_BATTLE_STANCE);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void UpdateAI(const uint32 uiDiff)
|
||||
{
|
||||
//Return since we have no target
|
||||
if(!UpdateVictim())
|
||||
if (!UpdateVictim())
|
||||
return;
|
||||
|
||||
// Change stance
|
||||
if (m_uiChangeStance_Timer < uiDiff)
|
||||
{
|
||||
//wait for current spell to finish before change stance
|
||||
if (m_creature->IsNonMeleeSpellCasted(false))
|
||||
return;
|
||||
|
||||
DoRemoveStanceAura(m_uiStance);
|
||||
|
||||
int uiTempStance = rand()%(3-1);
|
||||
|
||||
if (uiTempStance >= m_uiStance)
|
||||
++uiTempStance;
|
||||
|
||||
m_uiStance = uiTempStance;
|
||||
|
||||
switch(m_uiStance)
|
||||
{
|
||||
case STANCE_DEFENSIVE:
|
||||
DoScriptText(SAY_DEFENSIVE_STANCE, m_creature);
|
||||
DoScriptText(EMOTE_DEFENSIVE_STANCE, m_creature);
|
||||
DoCast(m_creature, SPELL_DEFENSIVE_STANCE);
|
||||
SetEquipmentSlots(false, EQUIP_SWORD, EQUIP_SHIELD, EQUIP_NO_CHANGE);
|
||||
break;
|
||||
case STANCE_BERSERKER:
|
||||
DoScriptText(SAY_BERSEKER_STANCE, m_creature);
|
||||
DoScriptText(EMOTE_BERSEKER_STANCE, m_creature);
|
||||
DoCast(m_creature, SPELL_BERSEKER_STANCE);
|
||||
SetEquipmentSlots(false, EQUIP_SWORD, EQUIP_SWORD, EQUIP_NO_CHANGE);
|
||||
break;
|
||||
case STANCE_BATTLE:
|
||||
DoScriptText(SAY_BATTLE_STANCE, m_creature);
|
||||
DoScriptText(EMOTE_BATTLE_STANCE, m_creature);
|
||||
DoCast(m_creature, SPELL_BATTLE_STANCE);
|
||||
SetEquipmentSlots(false, EQUIP_MACE, EQUIP_UNEQUIP, EQUIP_NO_CHANGE);
|
||||
break;
|
||||
}
|
||||
|
||||
m_uiChangeStance_Timer = 20000 + rand()%5000;
|
||||
return;
|
||||
}
|
||||
else
|
||||
m_uiChangeStance_Timer -= uiDiff;
|
||||
|
||||
switch(m_uiStance)
|
||||
{
|
||||
case STANCE_DEFENSIVE:
|
||||
{
|
||||
if (m_uiReflection_Timer < uiDiff)
|
||||
{
|
||||
DoCast(m_creature, SPELL_SPELL_REFLECTION);
|
||||
m_uiReflection_Timer = 8000 + rand()%1000;
|
||||
}
|
||||
else
|
||||
m_uiReflection_Timer -= uiDiff;
|
||||
|
||||
if (m_uiKnockAway_Timer < uiDiff)
|
||||
{
|
||||
DoCast(m_creature, SPELL_KNOCK_AWAY);
|
||||
m_uiKnockAway_Timer = 20000 + rand()%1000;
|
||||
}
|
||||
else
|
||||
m_uiKnockAway_Timer -= uiDiff;
|
||||
|
||||
if (m_uiPummel_Timer < uiDiff)
|
||||
{
|
||||
DoCast(m_creature->getVictim(), SPELL_PUMMEL);
|
||||
m_uiPummel_Timer = 10000 + rand()%1000;
|
||||
}
|
||||
else
|
||||
m_uiPummel_Timer -= uiDiff;
|
||||
|
||||
if (m_uiIronform_Timer < uiDiff)
|
||||
{
|
||||
DoCast(m_creature, SPELL_IRONFORM);
|
||||
m_uiIronform_Timer = 25000 + rand()%1000;
|
||||
}
|
||||
else
|
||||
m_uiIronform_Timer -= uiDiff;
|
||||
|
||||
break;
|
||||
}
|
||||
case STANCE_BERSERKER:
|
||||
{
|
||||
if (m_uiIntercept_Timer < uiDiff)
|
||||
{
|
||||
//not much point is this, better random target and more often?
|
||||
DoCast(m_creature->getVictim(), SPELL_INTERCEPT);
|
||||
m_uiIntercept_Timer = 45000 + rand()%1000;
|
||||
}
|
||||
else
|
||||
m_uiIntercept_Timer -= uiDiff;
|
||||
|
||||
if (m_uiWhirlwind_Timer < uiDiff)
|
||||
{
|
||||
DoCast(m_creature, SPELL_WHIRLWIND);
|
||||
m_uiWhirlwind_Timer = 10000 + rand()%1000;
|
||||
}
|
||||
else
|
||||
m_uiWhirlwind_Timer -= uiDiff;
|
||||
|
||||
if (m_uiCleave_Timer < uiDiff)
|
||||
{
|
||||
DoCast(m_creature->getVictim(), SPELL_CLEAVE);
|
||||
m_uiCleave_Timer = 8000 + rand()%1000;
|
||||
}
|
||||
else
|
||||
m_uiCleave_Timer -= uiDiff;
|
||||
|
||||
break;
|
||||
}
|
||||
case STANCE_BATTLE:
|
||||
{
|
||||
if (m_uiMortalStrike_Timer < uiDiff)
|
||||
{
|
||||
DoCast(m_creature->getVictim(), SPELL_MORTAL_STRIKE);
|
||||
m_uiMortalStrike_Timer = 20000 + rand()%1000;
|
||||
}
|
||||
else
|
||||
m_uiMortalStrike_Timer -= uiDiff;
|
||||
|
||||
if (m_uiSlam_Timer < uiDiff)
|
||||
{
|
||||
DoCast(m_creature->getVictim(), SPELL_SLAM);
|
||||
m_uiSlam_Timer = 15000 + rand()%1000;
|
||||
}
|
||||
else
|
||||
m_uiSlam_Timer -= uiDiff;
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
DoMeleeAttackIfReady();
|
||||
}
|
||||
void JustDied(Unit* killer)
|
||||
};
|
||||
|
||||
/*######
|
||||
## mob_stormforged_lieutenant
|
||||
######*/
|
||||
|
||||
struct TRINITY_DLL_DECL mob_stormforged_lieutenantAI : public ScriptedAI
|
||||
{
|
||||
mob_stormforged_lieutenantAI(Creature *pCreature) : ScriptedAI(pCreature)
|
||||
{
|
||||
DoScriptText(SAY_DEATH, m_creature);
|
||||
m_pInstance = ((ScriptedInstance*)pCreature->GetInstanceData());
|
||||
m_bIsHeroic = pCreature->GetMap()->IsHeroic();
|
||||
Reset();
|
||||
}
|
||||
void KilledUnit(Unit *victim)
|
||||
|
||||
ScriptedInstance* m_pInstance;
|
||||
bool m_bIsHeroic;
|
||||
|
||||
uint32 m_uiArcWeld_Timer;
|
||||
uint32 m_uiRenewSteel_Timer;
|
||||
|
||||
void Reset()
|
||||
{
|
||||
if(victim == m_creature)
|
||||
return;
|
||||
switch(rand()%3)
|
||||
m_uiArcWeld_Timer = 20000 + rand()%1000;
|
||||
m_uiRenewSteel_Timer = 10000 + rand()%1000;
|
||||
}
|
||||
|
||||
void EnterCombat(Unit* pWho)
|
||||
{
|
||||
if (m_pInstance)
|
||||
{
|
||||
case 0: DoScriptText(SAY_SLAY_1, m_creature);break;
|
||||
case 1: DoScriptText(SAY_SLAY_2, m_creature);break;
|
||||
case 2: DoScriptText(SAY_SLAY_3, m_creature);break;
|
||||
if (Creature* pBjarngrim = m_pInstance->instance->GetCreature(m_pInstance->GetData64(DATA_BJARNGRIM)))
|
||||
{
|
||||
if (pBjarngrim->isAlive() && !pBjarngrim->getVictim())
|
||||
pBjarngrim->AI()->AttackStart(pWho);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void UpdateAI(const uint32 uiDiff)
|
||||
{
|
||||
//Return since we have no target
|
||||
if (!UpdateVictim())
|
||||
return;
|
||||
|
||||
if (m_uiArcWeld_Timer < uiDiff)
|
||||
{
|
||||
DoCast(m_creature->getVictim(), SPELL_ARC_WELD);
|
||||
m_uiArcWeld_Timer = 20000 + rand()%1000;
|
||||
}
|
||||
else
|
||||
m_uiArcWeld_Timer -= uiDiff;
|
||||
|
||||
if (m_uiRenewSteel_Timer < uiDiff)
|
||||
{
|
||||
if (m_pInstance)
|
||||
{
|
||||
if (Creature* pBjarngrim = m_pInstance->instance->GetCreature(m_pInstance->GetData64(DATA_BJARNGRIM)))
|
||||
{
|
||||
if (pBjarngrim->isAlive())
|
||||
DoCast(pBjarngrim, m_bIsHeroic ? SPELL_RENEW_STEEL_H : SPELL_RENEW_STEEL_N);
|
||||
}
|
||||
}
|
||||
m_uiRenewSteel_Timer = 10000 + rand()%4000;
|
||||
}
|
||||
else
|
||||
m_uiRenewSteel_Timer -= uiDiff;
|
||||
|
||||
DoMeleeAttackIfReady();
|
||||
}
|
||||
};
|
||||
|
||||
CreatureAI* GetAI_boss_bjarngrim(Creature *_Creature)
|
||||
CreatureAI* GetAI_boss_bjarngrim(Creature* pCreature)
|
||||
{
|
||||
return new boss_bjarngrimAI (_Creature);
|
||||
return new boss_bjarngrimAI(pCreature);
|
||||
}
|
||||
|
||||
CreatureAI* GetAI_mob_stormforged_lieutenant(Creature* pCreature)
|
||||
{
|
||||
return new mob_stormforged_lieutenantAI(pCreature);
|
||||
}
|
||||
|
||||
void AddSC_boss_bjarngrim()
|
||||
@@ -88,7 +431,12 @@ void AddSC_boss_bjarngrim()
|
||||
Script *newscript;
|
||||
|
||||
newscript = new Script;
|
||||
newscript->Name="boss_bjarngrim";
|
||||
newscript->Name = "boss_bjarngrim";
|
||||
newscript->GetAI = &GetAI_boss_bjarngrim;
|
||||
newscript->RegisterSelf();
|
||||
|
||||
newscript = new Script;
|
||||
newscript->Name = "mob_stormforged_lieutenant";
|
||||
newscript->GetAI = &GetAI_mob_stormforged_lieutenant;
|
||||
newscript->RegisterSelf();
|
||||
}
|
||||
|
||||
@@ -1,4 +1,34 @@
|
||||
/* 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_HALLS_OF_LIGHTNING_H
|
||||
#define DEF_HALLS_OF_LIGHTNING_H
|
||||
|
||||
enum
|
||||
{
|
||||
MAX_ENCOUNTER = 4,
|
||||
|
||||
DATA_BJARNGRIM = 1,
|
||||
DATA_IONAR = 2,
|
||||
DATA_LOKEN = 3,
|
||||
DATA_VOLKHAN = 4,
|
||||
|
||||
TYPE_BJARNGRIM = 10,
|
||||
TYPE_IONAR = 11,
|
||||
TYPE_LOKEN = 12,
|
||||
TYPE_VOLKHAN = 13,
|
||||
|
||||
NPC_BJARNGRIM = 28586,
|
||||
NPC_VOLKHAN = 28587,
|
||||
NPC_IONAR = 28546,
|
||||
NPC_LOKEN = 28923,
|
||||
|
||||
GO_BJARNGRIM_DOOR = 191416, //_doors10
|
||||
GO_VOLKHAN_DOOR = 191325, //_doors07
|
||||
GO_IONAR_DOOR = 191326, //_doors05
|
||||
GO_LOKEN_DOOR = 191324, //_doors02
|
||||
GO_LOKEN_THRONE = 192654
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
+177
-4
@@ -1,14 +1,187 @@
|
||||
/* 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_Halls_of_Lightning
|
||||
SD%Complete: 90%
|
||||
SDComment: All ready.
|
||||
SDCategory: Halls of Lightning
|
||||
EndScriptData */
|
||||
|
||||
#include "precompiled.h"
|
||||
#include "def_halls_of_lightning.h"
|
||||
|
||||
struct TRINITY_DLL_DECL instance_halls_of_lightning : public ScriptedInstance
|
||||
/* Halls of Lightning encounters:
|
||||
0 - General Bjarngrim
|
||||
1 - Volkhan
|
||||
2 - Ionar
|
||||
3 - Loken
|
||||
*/
|
||||
|
||||
struct MANGOS_DLL_DECL instance_halls_of_lightning : public ScriptedInstance
|
||||
{
|
||||
instance_halls_of_lightning(Map *Map) : ScriptedInstance(Map) {Initialize();};
|
||||
instance_halls_of_lightning(Map* pMap) : ScriptedInstance(pMap) {Initialize();};
|
||||
|
||||
uint32 m_auiEncounter[MAX_ENCOUNTER];
|
||||
|
||||
uint64 m_uiGeneralBjarngrimGUID;
|
||||
uint64 m_uiIonarGUID;
|
||||
uint64 m_uiLokenGUID;
|
||||
uint64 m_uiVolkhanGUID;
|
||||
|
||||
uint64 m_uiBjarngrimDoorGUID;
|
||||
uint64 m_uiVolkhanDoorGUID;
|
||||
uint64 m_uiIonarDoorGUID;
|
||||
uint64 m_uiLokenDoorGUID;
|
||||
uint64 m_uiLokenGlobeGUID;
|
||||
|
||||
void Initialize()
|
||||
{
|
||||
memset(&m_auiEncounter, 0, sizeof(m_auiEncounter));
|
||||
|
||||
m_uiGeneralBjarngrimGUID = 0;
|
||||
m_uiVolkhanGUID = 0;
|
||||
m_uiIonarGUID = 0;
|
||||
m_uiLokenGUID = 0;
|
||||
|
||||
m_uiBjarngrimDoorGUID = 0;
|
||||
m_uiVolkhanDoorGUID = 0;
|
||||
m_uiIonarDoorGUID = 0;
|
||||
m_uiLokenDoorGUID = 0;
|
||||
m_uiLokenGlobeGUID = 0;
|
||||
}
|
||||
|
||||
void OnCreatureCreate(Creature* pCreature, bool add)
|
||||
{
|
||||
switch(pCreature->GetEntry())
|
||||
{
|
||||
case NPC_BJARNGRIM:
|
||||
m_uiGeneralBjarngrimGUID = pCreature->GetGUID();
|
||||
break;
|
||||
case NPC_VOLKHAN:
|
||||
m_uiVolkhanGUID = pCreature->GetGUID();
|
||||
break;
|
||||
case NPC_IONAR:
|
||||
m_uiIonarGUID = pCreature->GetGUID();
|
||||
break;
|
||||
case NPC_LOKEN:
|
||||
m_uiLokenGUID = pCreature->GetGUID();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void OnGameObjectCreate(GameObject* pGo, bool add)
|
||||
{
|
||||
switch(pGo->GetEntry())
|
||||
{
|
||||
case GO_BJARNGRIM_DOOR:
|
||||
m_uiBjarngrimDoorGUID = pGo->GetGUID();
|
||||
if (m_auiEncounter[0] == DONE)
|
||||
pGo->SetGoState(GO_STATE_ACTIVE);
|
||||
break;
|
||||
case GO_VOLKHAN_DOOR:
|
||||
m_uiVolkhanDoorGUID = pGo->GetGUID();
|
||||
if (m_auiEncounter[1] == DONE)
|
||||
pGo->SetGoState(GO_STATE_ACTIVE);
|
||||
break;
|
||||
case GO_IONAR_DOOR:
|
||||
m_uiIonarDoorGUID = pGo->GetGUID();
|
||||
if (m_auiEncounter[2] == DONE)
|
||||
pGo->SetGoState(GO_STATE_ACTIVE);
|
||||
break;
|
||||
case GO_LOKEN_DOOR:
|
||||
m_uiLokenDoorGUID = pGo->GetGUID();
|
||||
if (m_auiEncounter[3] == DONE)
|
||||
pGo->SetGoState(GO_STATE_ACTIVE);
|
||||
break;
|
||||
case GO_LOKEN_THRONE:
|
||||
m_uiLokenGlobeGUID = pGo->GetGUID();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void SetData(uint32 uiType, uint32 uiData)
|
||||
{
|
||||
switch(uiType)
|
||||
{
|
||||
case TYPE_BJARNGRIM:
|
||||
if (uiData == DONE)
|
||||
DoUseDoorOrButton(m_uiBjarngrimDoorGUID);
|
||||
m_auiEncounter[0] = uiData;
|
||||
break;
|
||||
case TYPE_VOLKHAN:
|
||||
if (uiData == DONE)
|
||||
DoUseDoorOrButton(m_uiVolkhanDoorGUID);
|
||||
m_auiEncounter[1] = uiData;
|
||||
break;
|
||||
case TYPE_IONAR:
|
||||
if (uiData == DONE)
|
||||
DoUseDoorOrButton(m_uiIonarDoorGUID);
|
||||
m_auiEncounter[2] = uiData;
|
||||
break;
|
||||
case TYPE_LOKEN:
|
||||
if (uiData == DONE)
|
||||
{
|
||||
DoUseDoorOrButton(m_uiLokenDoorGUID);
|
||||
|
||||
//Appears to be type 5 GO with animation. Need to figure out how this work, code below only placeholder
|
||||
if (GameObject* pGlobe = instance->GetGameObject(m_uiLokenGlobeGUID))
|
||||
pGlobe->SetGoState(GO_STATE_ACTIVE);
|
||||
}
|
||||
m_auiEncounter[3] = uiData;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
uint32 GetData(uint32 uiType)
|
||||
{
|
||||
switch(uiType)
|
||||
{
|
||||
case TYPE_BJARNGRIM:
|
||||
return m_auiEncounter[0];
|
||||
case TYPE_VOLKHAN:
|
||||
return m_auiEncounter[1];
|
||||
case TYPE_IONAR:
|
||||
return m_auiEncounter[2];
|
||||
case TYPE_LOKEN:
|
||||
return m_auiEncounter[3];
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
uint64 GetData64(uint32 uiData)
|
||||
{
|
||||
switch(uiData)
|
||||
{
|
||||
case DATA_BJARNGRIM:
|
||||
return m_uiGeneralBjarngrimGUID;
|
||||
case DATA_VOLKHAN:
|
||||
return m_uiVolkhanGUID;
|
||||
case DATA_IONAR:
|
||||
return m_uiIonarGUID;
|
||||
case DATA_LOKEN:
|
||||
return m_uiLokenGUID;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
};
|
||||
|
||||
InstanceData* GetInstanceData_instance_halls_of_lightning(Map* map)
|
||||
InstanceData* GetInstanceData_instance_halls_of_lightning(Map* pMap)
|
||||
{
|
||||
return new instance_halls_of_lightning(map);
|
||||
return new instance_halls_of_lightning(pMap);
|
||||
}
|
||||
|
||||
void AddSC_instance_halls_of_lightning()
|
||||
|
||||
Reference in New Issue
Block a user