diff options
| -rw-r--r-- | doc/EventAI.txt | 2 | ||||
| -rw-r--r-- | doc/HowToScript.txt | 27 | ||||
| -rw-r--r-- | doc/Text-tables.txt | 87 | ||||
| -rw-r--r-- | src/game/Player.cpp | 2 | ||||
| -rw-r--r-- | src/game/SpellEffects.cpp | 13 | ||||
| -rw-r--r-- | src/scripts/northrend/naxxramas/boss_thaddius.cpp | 314 | ||||
| -rw-r--r-- | src/scripts/northrend/naxxramas/instance_naxxramas.cpp | 14 | ||||
| -rw-r--r-- | src/scripts/northrend/naxxramas/naxxramas.h | 11 |
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 |
