aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doc/EventAI.txt2
-rw-r--r--doc/HowToScript.txt27
-rw-r--r--doc/Text-tables.txt87
-rw-r--r--src/game/Player.cpp2
-rw-r--r--src/game/SpellEffects.cpp13
-rw-r--r--src/scripts/northrend/naxxramas/boss_thaddius.cpp314
-rw-r--r--src/scripts/northrend/naxxramas/instance_naxxramas.cpp14
-rw-r--r--src/scripts/northrend/naxxramas/naxxramas.h11
8 files changed, 385 insertions, 85 deletions
diff --git a/doc/EventAI.txt b/doc/EventAI.txt
index cf385643ba0..7d0294da05f 100644
--- a/doc/EventAI.txt
+++ b/doc/EventAI.txt
@@ -84,7 +84,7 @@ Some events such as EVENT_T_AGGRO, EVENT_T_DEATH, EVENT_T_SPAWNED, and EVENT_T_E
22 EVENT_T_RECEIVE_EMOTE EmoteId, Condition, CondValue1, CondValue2 Expires when a creature receives an emote with emote text id (enum TextEmotes) in (Param1). Conditions can be defined (Param2) with optional values (Param3,Param4), see enum ConditionType.
23 EVENT_T_BUFFED SpellID, AmmountInStack, RepeatMin, RepeatMax Expires when a creature has spell (Param1) auras applied in a stack greater or equal to value provided in (Param2). Will repeat every (Param3) and (Param4).
24 EVENT_T_TARGET_BUFFED SpellID, AmmountInStack, RepeatMin, RepeatMax Expires when a target unit has spell (Param1) auras applied in a stack greater or equal to value provided in (Param2). Will repeat every (Param3) and (Param4).
-
+35 EVENT_T_RESET NONE Expires when creature leaves combat, spawns or respawns.
=========================================
Action Types
diff --git a/doc/HowToScript.txt b/doc/HowToScript.txt
new file mode 100644
index 00000000000..73968a08b19
--- /dev/null
+++ b/doc/HowToScript.txt
@@ -0,0 +1,27 @@
+
+** HOW TO SCRIPT IN C++ **
+
+1 - create a file myscript.cpp in scripts folder.
+2 - copy the content of script_default.cpp, it as the structure on how the scripting fuctions are organized.
+ dont forget to change the name of fuctions, like GossipHello_default to GossipHello_myscript.
+
+3 - in fuction AddSC_default change to AddSC_myscript.
+4 - newscript->Name="default"; change the string to "myscript" this name is the one to be called from the db
+5 - dont forget to change the name in here to newscript->pGossipHello = &GossipHello_default; this is where the scripted fuctions are stored.
+6 - and last thing is in ScriptMgr.cpp
+
+add your AddSC_myscript in here
+
+// -- Scripts to be added --
+extern void AddSC_default();
+// -------------------
+
+and here
+
+// -- Inicialize the Scripts to be Added --
+ AddSC_default();
+// ----------------------------------------
+
+now start using the player fuctions to script ;)
+
+hope it helps, any question use our forum. \ No newline at end of file
diff --git a/doc/Text-tables.txt b/doc/Text-tables.txt
new file mode 100644
index 00000000000..eac63384785
--- /dev/null
+++ b/doc/Text-tables.txt
@@ -0,0 +1,87 @@
+=========================================
+Texts Documentation
+=========================================
+
+Scriptdev2 Revision 695 introduces a new format for using texts in EventAI and SD2 Scripts.
+This information relates to the *_texts tables located in the ScriptDev Database.
+
+Any script can at any time access and use text from any of the three text tables, as long as the entry does in fact exist.
+Custom scripters are adviced to store their text data in custom_texts.
+
+The different tables has ranges of entries allowed for that table.
+Reserved EventAI in Mangos entry -1 -> -999999
+script_texts: entry -1000000 -> -1999999
+custom_texts: entry -2000000 -> -2999999
+Any entry out of range for that table will display a startup error.
+
+
+=========================================
+Basic Structure of script_texts and custom_texts
+=========================================
+Below is a the list of current fields within the texts tables.
+
+Field_Name Description
+-----------------------------------------------------------
+entry This value is mearly an NEGATIVE identifier of the current text number. Required for sql queries.
+content_default This is the actual text presented in the default language (English).
+
+content_loc1 This is the actual text presented in the Localization #1 Clients (Korean)
+content_loc2 This is the actual text presented in the Localization #2 Clients (French)
+content_loc3 This is the actual text presented in the Localization #3 Clients (German)
+content_loc4 This is the actual text presented in the Localization #4 Clients (Chinese)
+content_loc5 This is the actual text presented in the Localization #5 Clients (Taiwanese)
+content_loc6 This is the actual text presented in the Localization #6 Clients (Spanish)
+content_loc7 This is the actual text presented in the Localization #7 Clients (Spanish Mexico)
+content_loc8 This is the actual text presented in the Localization #8 Clients (Russian)
+
+sound This value is the Sound ID that corresponds to the actual text used (Defined in SoundEntries.dbc).
+type Variables used to define type of text (Say/Yell/Textemote/Whisper).
+language This value is the Language that the text is native in (Defined in Languages.dbc).
+emote Value from enum Emote (defined in Emotes.dbc). Only source of text will play this emote (not target, if target are defined in DoScriptText)
+comment This is a comment regarding the text entry (For ACID, accepted format is to use Creature ID of NPC using it).
+
+Note: Fields `content_loc1` to `content_loc8` are NULL values by default and are handled by seperate localization projects.
+
+
+=========================================
+Text Types (type)
+=========================================
+Below is the list of current Text types that texts tables can handle. These were previously seperate Actions in ACID.
+
+# Internal Name Description
+-----------------------------------------------------------
+0 CHAT_TYPE_SAY This type sets the text to be displayed as a Say (Speech Bubble).
+1 CHAT_TYPE_YELL This type sets the text to be displayed as a Yell (Red Speech Bubble) and usually has a matching Sound ID.
+2 CHAT_TYPE_TEXT_EMOTE This type sets the text to be displayed as a text emote in orange in the chat log.
+3 CHAT_TYPE_BOSS_EMOTE This type sets the text to be displayed as a text emote in orange in the chat log (Used only for specific Bosses).
+4 CHAT_TYPE_WHISPER This type sets the text to be displayed as a whisper to the player in the chat log.
+5 CHAT_TYPE_BOSS_WHISPER This type sets the text to be displayed as a whisper to the player in the chat log (Used only for specific Bosses).
+6 CHAT_TYPE_ZONE_YELL Same as CHAT_TYPE_YELL but will display to all players in current zone.
+
+
+=========================================
+Language Types (language)
+=========================================
+Below is the list of current Language types that are allowed.
+This is the Race Language that the text is native to (So it will display properly)
+
+# Internal Name Description
+-----------------------------------------------------------
+0 UNIVERSAL Text in this language is understood by ALL Races.
+1 ORCISH Text in this language is understood ONLY by Horde Races.
+2 DARNASSIAN Text in this language is understood ONLY by the Night Elf Race.
+3 TAURAHE Text in this language is understood ONLY by the Tauren Race.
+6 DWARVISH Text in this language is understood ONLY by the Dwarf Race.
+7 COMMON Text in this language is understood ONLY by Alliance Races.
+8 DEMONIC Text in this language is understood ONLY by the Demon Race (Not Implimented).
+9 TITAN This language was used by Sargeras to speak with other Titians (Not Implemented).
+10 THALASSIAN Text in this language is understood ONLY by the Blood Elf Race.
+11 DRACONIC Text in this language is understood ONLY by the Dragon Race.
+12 KALIMAG Text will display as Kalimag (not readable by players, language of all elementals)
+13 GNOMISH Text in this language is understood ONLY by the Gnome Race.
+14 TROLL Text in this language is understood ONLY by the Troll Race.
+33 GUTTERSPEAK Text in this language is understood ONLY by the Undead Race.
+35 DRAENEI Text in this language is understood ONLY by the Draenai Race.
+36 ZOMBIE (not currently used?)
+37 GNOMISH BINARY Binary language used by Alliance when drinking Binary Brew
+38 GOBLIN BINARY Binary language used by Horce when drinking Binary Brew \ No newline at end of file
diff --git a/src/game/Player.cpp b/src/game/Player.cpp
index 472a5017b35..b6e996f050c 100644
--- a/src/game/Player.cpp
+++ b/src/game/Player.cpp
@@ -18186,7 +18186,7 @@ void Player::VehicleSpellInitialize()
data << uint16(0) << uint8(0) << uint8(i+8);
}
else
- data << uint16(spellId) << uint8(0) << uint8(i+8);
+ data << uint32(MAKE_UNIT_ACTION_BUTTON(spellId,i+8));
}
for (uint32 i = CREATURE_MAX_SPELLS; i < MAX_SPELL_CONTROL_BAR; ++i)
diff --git a/src/game/SpellEffects.cpp b/src/game/SpellEffects.cpp
index efe742087c6..ca0e13d6277 100644
--- a/src/game/SpellEffects.cpp
+++ b/src/game/SpellEffects.cpp
@@ -2680,7 +2680,18 @@ void Spell::EffectSendEvent(uint32 EffectIndex)
we do not handle a flag dropping or clicking on flag in battleground by sendevent system
*/
sLog.outDebug("Spell ScriptStart %u for spellid %u in EffectSendEvent ", m_spellInfo->EffectMiscValue[EffectIndex], m_spellInfo->Id);
- m_caster->GetMap()->ScriptsStart(sEventScripts, m_spellInfo->EffectMiscValue[EffectIndex], m_caster, focusObject);
+
+ Object *pTarget;
+ if (focusObject)
+ pTarget = focusObject;
+ else if (unitTarget)
+ pTarget = unitTarget;
+ else if (gameObjTarget)
+ pTarget = gameObjTarget;
+ else
+ pTarget = NULL;
+
+ m_caster->GetMap()->ScriptsStart(sEventScripts, m_spellInfo->EffectMiscValue[EffectIndex], m_caster, pTarget);
}
void Spell::EffectPowerBurn(uint32 i)
diff --git a/src/scripts/northrend/naxxramas/boss_thaddius.cpp b/src/scripts/northrend/naxxramas/boss_thaddius.cpp
index fa685759e83..b2a4b16b2a7 100644
--- a/src/scripts/northrend/naxxramas/boss_thaddius.cpp
+++ b/src/scripts/northrend/naxxramas/boss_thaddius.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008 - 2009 Trinity <http://www.trinitycore.org/>
+ * Copyright (C) 2008 - 2010 Trinity <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -18,19 +18,22 @@
#include "ScriptedPch.h"
#include "naxxramas.h"
+#include "SpellId.h"
//Stalagg
enum StalaggYells
{
SAY_STAL_AGGRO = -1533023, //not used
SAY_STAL_SLAY = -1533024, //not used
- SAY_STAL_DEATH = -1533025 //not used
+ SAY_STAL_DEATH = -1533025 //not used
};
enum StalagSpells
{
- SPELL_POWERSURGE = 54529,
- H_SPELL_POWERSURGE = 28134
+ SPELL_POWERSURGE = SPELL_POWER_SURGE_28134,
+ H_SPELL_POWERSURGE = SPELL_POWER_SURGE_54529,
+ SPELL_MAGNETIC_PULL = SPELL_MAGNETIC_PULL_28338,
+ SPELL_STALAGG_TESLA = SPELL_STALAGG_TESLA_PASSIVE_28097
};
//Feugen
@@ -43,8 +46,18 @@ enum FeugenYells
enum FeugenSpells
{
- SPELL_STATICFIELD = 28135,
- H_SPELL_STATICFIELD = 54528
+ SPELL_STATICFIELD = SPELL_STATIC_FIELD_28135,
+ H_SPELL_STATICFIELD = SPELL_STATIC_FIELD_54528,
+ SPELL_FEUGEN_TESLA = SPELL_FEUGEN_TESLA_PASSIVE_28109
+};
+
+// Thaddius DoAction
+enum ThaddiusActions
+{
+ ACTION_FEUGEN_RESET,
+ ACTION_FEUGEN_DIED,
+ ACTION_STALAGG_RESET,
+ ACTION_STALAGG_DIED
};
//generic
@@ -68,11 +81,11 @@ enum ThaddiusYells
enum ThaddiusSpells
{
- SPELL_POLARITY_SHIFT = 28089,
- SPELL_BALL_LIGHTNING = 28299,
- SPELL_CHAIN_LIGHTNING = 28167,
- H_SPELL_CHAIN_LIGHTNING = 54531,
- SPELL_BERSERK = 27680
+ SPELL_POLARITY_SHIFT = SPELL_POLARITY_SHIFT_28089,
+ SPELL_BALL_LIGHTNING = SPELL_BALL_LIGHTNING_28299,
+ SPELL_CHAIN_LIGHTNING = SPELL_CHAIN_LIGHTNING_28167,
+ H_SPELL_CHAIN_LIGHTNING = SPELL_CHAIN_LIGHTNING_54531,
+ SPELL_BERSERK = SPELL_BERSERK_27680
};
enum Events
@@ -83,17 +96,39 @@ enum Events
EVENT_BERSERK,
};
-bool CheckStalaggAlive = true;
-bool CheckFeugenAlive = true;
-
struct TRINITY_DLL_DECL boss_thaddiusAI : public BossAI
{
boss_thaddiusAI(Creature *c) : BossAI(c, BOSS_THADDIUS)
{
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_OOC_NOT_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_STUNNED);
- me->SetReactState(REACT_PASSIVE);
+ // init is a bit tricky because thaddius shall track the life of both adds, but not if there was a wipe
+ // and, in particular, if there was a crash after both adds were killed (should not respawn)
+
+ // Moreover, the adds may not yet be spawn. So just track down the status if mob is spawn
+ // and each mob will send its status at reset (meaning that it is alive)
+ checkFeugenAlive = false;
+ if (Creature *pFeugen = m_creature->GetCreature(*m_creature, instance->GetData64(DATA_FEUGEN)))
+ checkFeugenAlive = pFeugen->isAlive();
+
+ checkStalaggAlive = false;
+ if (Creature *pStalagg = m_creature->GetCreature(*m_creature, instance->GetData64(DATA_STALAGG)))
+ checkStalaggAlive = pStalagg->isAlive();
+
+ if (!checkFeugenAlive && !checkStalaggAlive)
+ {
+ me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_OOC_NOT_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_STUNNED);
+ me->SetReactState(REACT_AGGRESSIVE);
+ }
+ else
+ {
+ me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_OOC_NOT_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_STUNNED);
+ me->SetReactState(REACT_PASSIVE);
+ }
}
+ bool checkStalaggAlive;
+ bool checkFeugenAlive;
+ uint32 uiAddsTimer;
+
void KilledUnit(Unit* victim)
{
if (!(rand()%5))
@@ -106,6 +141,37 @@ struct TRINITY_DLL_DECL boss_thaddiusAI : public BossAI
DoScriptText(SAY_DEATH, me);
}
+ void DoAction(const int32 action)
+ {
+ switch(action)
+ {
+ case ACTION_FEUGEN_RESET:
+ checkFeugenAlive = true;
+ break;
+ case ACTION_FEUGEN_DIED:
+ checkFeugenAlive = false;
+ break;
+ case ACTION_STALAGG_RESET:
+ checkStalaggAlive = true;
+ break;
+ case ACTION_STALAGG_DIED:
+ checkStalaggAlive = false;
+ break;
+ }
+
+ if (!checkFeugenAlive && !checkStalaggAlive)
+ {
+ me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_OOC_NOT_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_STUNNED);
+ // REACT_AGGRESSIVE only reset when he takes damage.
+ DoZoneInCombat();
+ }
+ else
+ {
+ me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_OOC_NOT_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_STUNNED);
+ me->SetReactState(REACT_PASSIVE);
+ }
+ }
+
void EnterCombat(Unit *who)
{
_EnterCombat();
@@ -115,17 +181,40 @@ struct TRINITY_DLL_DECL boss_thaddiusAI : public BossAI
events.ScheduleEvent(EVENT_BERSERK, 360000);
}
+ void DamageTaken(Unit *pDoneBy, uint32 &uiDamage)
+ {
+ me->SetReactState(REACT_AGGRESSIVE);
+ }
+
void UpdateAI(const uint32 diff)
{
- if (CheckStalaggAlive == false && CheckFeugenAlive == false) {
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_OOC_NOT_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_STUNNED);
- me->SetReactState(REACT_AGGRESSIVE);
- }
+ if (checkFeugenAlive && checkStalaggAlive)
+ uiAddsTimer = 0;
- if (!UpdateVictim())
- return;
+ if (checkStalaggAlive != checkFeugenAlive)
+ {
+ uiAddsTimer += diff;
+ if (uiAddsTimer > 5000)
+ {
+ if (!checkStalaggAlive)
+ {
+ if (instance)
+ if (Creature *pStalagg = m_creature->GetCreature(*m_creature, instance->GetData64(DATA_STALAGG)))
+ pStalagg->Respawn();
+ }
+ else
+ {
+ if (instance)
+ if (Creature *pFeugen = m_creature->GetCreature(*m_creature, instance->GetData64(DATA_FEUGEN)))
+ pFeugen->Respawn();
+ }
+ }
+ }
+
+ if (!UpdateVictim())
+ return;
- events.Update(diff);
+ events.Update(diff);
if (me->hasUnitState(UNIT_STAT_CASTING))
return;
@@ -162,29 +251,76 @@ CreatureAI* GetAI_boss_thaddius(Creature* pCreature)
struct TRINITY_DLL_DECL mob_stalaggAI : public ScriptedAI
{
- mob_stalaggAI(Creature *c) : ScriptedAI(c) {}
-
- uint32 PowerSurgeTimer;
-
- void reset()
- {
- PowerSurgeTimer = urand(20000,25000);
- }
-
- void JustDied(Unit *killer)
- {
- CheckStalaggAlive = false;
- }
-
- void UpdateAI(const uint32 uiDiff)
- {
- if (PowerSurgeTimer <= uiDiff)
- {
- DoCast(m_creature, RAID_MODE(SPELL_POWERSURGE, H_SPELL_POWERSURGE));
- PowerSurgeTimer = urand(15000,20000);
- } else PowerSurgeTimer -= uiDiff;
- DoMeleeAttackIfReady();
- }
+ mob_stalaggAI(Creature *c) : ScriptedAI(c)
+ {
+ pInstance = c->GetInstanceData();
+ }
+
+ ScriptedInstance* pInstance;
+
+ uint32 powerSurgeTimer;
+ uint32 magneticPullTimer;
+
+ void Reset()
+ {
+ if (pInstance)
+ if (Creature *pThaddius = m_creature->GetCreature(*m_creature, pInstance->GetData64(DATA_THADDIUS)))
+ if (pThaddius->AI())
+ pThaddius->AI()->DoAction(ACTION_STALAGG_RESET);
+ powerSurgeTimer = urand(20000,25000);
+ magneticPullTimer = 20000;
+ }
+
+ void EnterCombat(Unit *pWho)
+ {
+ DoCast(SPELL_STALAGG_TESLA);
+ }
+
+ void JustDied(Unit *killer)
+ {
+ if (pInstance)
+ if (Creature *pThaddius = m_creature->GetCreature(*m_creature, pInstance->GetData64(DATA_THADDIUS)))
+ if (pThaddius->AI())
+ pThaddius->AI()->DoAction(ACTION_STALAGG_DIED);
+ }
+
+ void UpdateAI(const uint32 uiDiff)
+ {
+ if (!UpdateVictim())
+ return;
+
+ if (magneticPullTimer <= uiDiff)
+ {
+ if (Creature *pFeugen = m_creature->GetCreature(*m_creature, pInstance->GetData64(DATA_FEUGEN)))
+ {
+ Unit* pStalaggVictim = m_creature->getVictim();
+ Unit* pFeugenVictim = pFeugen->getVictim();
+
+ if (pFeugenVictim && pStalaggVictim)
+ {
+ // magnetic pull is not working. So just jump.
+
+ // reset aggro to be sure that feugen will not follow the jump
+ pFeugen->getThreatManager().modifyThreatPercent(pFeugenVictim, -100);
+ pFeugenVictim->JumpTo(m_creature, 0.3f);
+
+ m_creature->getThreatManager().modifyThreatPercent(pStalaggVictim, -100);
+ pStalaggVictim->JumpTo(pFeugen, 0.3f);
+ }
+ }
+
+ magneticPullTimer = 20000;
+ }
+ else magneticPullTimer -= uiDiff;
+
+ if (powerSurgeTimer <= uiDiff)
+ {
+ DoCast(m_creature, RAID_MODE(SPELL_POWERSURGE, H_SPELL_POWERSURGE));
+ powerSurgeTimer = urand(15000,20000);
+ } else powerSurgeTimer -= uiDiff;
+
+ DoMeleeAttackIfReady();
+ }
};
CreatureAI* GetAI_mob_stalagg(Creature* pCreature)
@@ -194,35 +330,55 @@ CreatureAI* GetAI_mob_stalagg(Creature* pCreature)
struct TRINITY_DLL_DECL mob_feugenAI : public ScriptedAI
{
- mob_feugenAI(Creature *c) : ScriptedAI(c) {}
-
- uint32 StaticFieldTimer;
- uint32 Checktimer;
-
- void reset()
- {
- StaticFieldTimer = 5000;
- }
-
- void JustDied(Unit *killer)
- {
- CheckFeugenAlive = false;
- }
-
- void UpdateAI(const uint32 uiDiff)
- {
- if (StaticFieldTimer <= uiDiff)
- {
- DoCast(m_creature, RAID_MODE(SPELL_STATICFIELD, H_SPELL_STATICFIELD));
- StaticFieldTimer = 5000;
- } else StaticFieldTimer -= uiDiff;
- DoMeleeAttackIfReady();
- }
+ mob_feugenAI(Creature *c) : ScriptedAI(c)
+ {
+ pInstance = c->GetInstanceData();
+ }
+
+ ScriptedInstance* pInstance;
+
+ uint32 staticFieldTimer;
+
+ void Reset()
+ {
+ if (pInstance)
+ if (Creature *pThaddius = m_creature->GetCreature(*m_creature, pInstance->GetData64(DATA_THADDIUS)))
+ if (pThaddius->AI())
+ pThaddius->AI()->DoAction(ACTION_FEUGEN_RESET);
+ staticFieldTimer = 5000;
+ }
+
+ void EnterCombat(Unit *pWho)
+ {
+ DoCast(SPELL_FEUGEN_TESLA);
+ }
+
+ void JustDied(Unit *killer)
+ {
+ if (pInstance)
+ if (Creature *pThaddius = m_creature->GetCreature(*m_creature, pInstance->GetData64(DATA_THADDIUS)))
+ if (pThaddius->AI())
+ pThaddius->AI()->DoAction(ACTION_FEUGEN_DIED);
+ }
+
+ void UpdateAI(const uint32 uiDiff)
+ {
+ if (!UpdateVictim())
+ return;
+
+ if (staticFieldTimer <= uiDiff)
+ {
+ DoCast(m_creature, RAID_MODE(SPELL_STATICFIELD, H_SPELL_STATICFIELD));
+ staticFieldTimer = 5000;
+ } else staticFieldTimer -= uiDiff;
+
+ DoMeleeAttackIfReady();
+ }
};
CreatureAI* GetAI_mob_feugen(Creature* pCreature)
{
- return new mob_feugenAI(pCreature);
+ return new mob_feugenAI(pCreature);
}
void AddSC_boss_thaddius()
@@ -233,13 +389,13 @@ void AddSC_boss_thaddius()
newscript->GetAI = &GetAI_boss_thaddius;
newscript->RegisterSelf();
- newscript = new Script;
- newscript->Name = "mob_stalagg";
- newscript->GetAI = &GetAI_mob_stalagg;
- newscript->RegisterSelf();
+ newscript = new Script;
+ newscript->Name = "mob_stalagg";
+ newscript->GetAI = &GetAI_mob_stalagg;
+ newscript->RegisterSelf();
- newscript = new Script;
- newscript->Name = "mob_feugen";
- newscript->GetAI = &GetAI_mob_feugen;
- newscript->RegisterSelf();
+ newscript = new Script;
+ newscript->Name = "mob_feugen";
+ newscript->GetAI = &GetAI_mob_feugen;
+ newscript->RegisterSelf();
}
diff --git a/src/scripts/northrend/naxxramas/instance_naxxramas.cpp b/src/scripts/northrend/naxxramas/instance_naxxramas.cpp
index 103dba7e4b8..19a330b58d6 100644
--- a/src/scripts/northrend/naxxramas/instance_naxxramas.cpp
+++ b/src/scripts/northrend/naxxramas/instance_naxxramas.cpp
@@ -1,4 +1,4 @@
-/* Copyright (C) 2008 - 2009 Trinity <http://www.trinitycore.org/>
+/* Copyright (C) 2008 - 2010 Trinity <http://www.trinitycore.org/>
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
@@ -115,6 +115,9 @@ struct TRINITY_DLL_DECL instance_naxxramas : public InstanceData
uint64 uiBaron;
uint64 uiSir;
+ uint64 uiThaddius;
+ uint64 uiFeugen;
+ uint64 uiStalagg;
void OnCreatureCreate(Creature* pCreature, bool add)
{
@@ -126,6 +129,9 @@ struct TRINITY_DLL_DECL instance_naxxramas : public InstanceData
case 16065: uiLady = pCreature->GetGUID(); return;
case 30549: uiBaron = pCreature->GetGUID(); return;
case 16063: uiSir = pCreature->GetGUID(); return;
+ case 15928: uiThaddius = pCreature->GetGUID(); return;
+ case 15930: uiFeugen = pCreature->GetGUID(); return;
+ case 15929: uiStalagg = pCreature->GetGUID(); return;
}
AddMinion(pCreature, add);
@@ -180,6 +186,12 @@ struct TRINITY_DLL_DECL instance_naxxramas : public InstanceData
return uiBaron;
if (id == DATA_SIR)
return uiSir;
+ if (id == DATA_THADDIUS)
+ return uiThaddius;
+ if (id == DATA_FEUGEN)
+ return uiFeugen;
+ if (id == DATA_STALAGG)
+ return uiStalagg;
return 0;
}
diff --git a/src/scripts/northrend/naxxramas/naxxramas.h b/src/scripts/northrend/naxxramas/naxxramas.h
index 6f4dcae41a7..48121ff1309 100644
--- a/src/scripts/northrend/naxxramas/naxxramas.h
+++ b/src/scripts/northrend/naxxramas/naxxramas.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008 - 2009 Trinity <http://www.trinitycore.org/>
+ * Copyright (C) 2008 - 2010 Trinity <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -44,11 +44,18 @@ enum Data
DATA_HEIGAN_ERUPT,
DATA_GOTHIK_GATE,
DATA_SAPPHIRON_BIRTH,
+};
+
+enum Data64
+{
DATA_FAERLINA,
DATA_THANE,
DATA_LADY,
DATA_BARON,
- DATA_SIR
+ DATA_SIR,
+ DATA_THADDIUS,
+ DATA_FEUGEN,
+ DATA_STALAGG
};
#define GO_BIRTH 181356