Merge [SD2]

r1026 Added save/load to blood furnace instance script.
r1027 Remove manual summons and teleport for boss morogrim, replace with proper spells. Apply sd2 code style.
r1028 Replace SetUInt32Value for display id with function SetDisplayId.
r1029 Simplify spawn of adds for hydross and use combatStartPosition instead of hard coded values for radius check. SD2 code style applied.
r1030 Remove call Aggro in AttackStart and start use EnterCombat AI function.
Note Aggro will still be called like normal, but no longer required defined in scripts.

--HG--
branch : trunk
This commit is contained in:
Kudlaty
2009-06-17 09:39:50 +02:00
parent fb26b41e33
commit 0085745c42
29 changed files with 469 additions and 529 deletions
@@ -33,6 +33,18 @@ void npc_escortAI::AttackStart(Unit *who)
}
}
void npc_escortAI::EnterCombat(Unit* pEnemy)
{
if (!pEnemy)
return;
Aggro(pEnemy);
}
void npc_escortAI::Aggro(Unit* pEnemy)
{
}
void npc_escortAI::MoveInLineOfSight(Unit *who)
{
if (IsBeingEscorted && !Attack)
@@ -34,12 +34,16 @@ struct TRINITY_DLL_DECL npc_escortAI : public ScriptedAI
// Pure Virtual Functions
virtual void WaypointReached(uint32) = 0;
virtual void Aggro(Unit*);
// CreatureAI functions
npc_escortAI(Creature *c) : ScriptedAI(c), IsBeingEscorted(false), PlayerTimer(1000), MaxPlayerDistance(DEFAULT_MAX_PLAYER_DISTANCE), CanMelee(true), DespawnAtEnd(true), DespawnAtFar(true)
{}
void AttackStart(Unit* who);
void EnterCombat(Unit*);
void MoveInLineOfSight(Unit* who);
void JustRespawned();
@@ -37,7 +37,7 @@ struct TRINITY_DLL_DECL instance_sethekk_halls : public ScriptedInstance
m_uiIkissDoorGUID = 0;
}
void OnObjectCreate(GameObject* pGo)
void OnGameObjectCreate(GameObject *pGo, bool add)
{
if (pGo->GetEntry() == IKISS_DOOR)
m_uiIkissDoorGUID = pGo->GetGUID();
@@ -565,7 +565,7 @@ struct TRINITY_DLL_DECL boss_illidan_stormrageAI : public ScriptedAI
{
GlaiveGUID[i] = Glaive->GetGUID();
Glaive->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
Glaive->SetUInt32Value(UNIT_FIELD_DISPLAYID, 11686);
Glaive->SetDisplayId(11686);
Glaive->setFaction(m_creature->getFaction());
DoCast(Glaive, SPELL_THROW_GLAIVE2);
}
@@ -581,7 +581,7 @@ struct TRINITY_DLL_DECL boss_illidan_stormrageAI : public ScriptedAI
{
GlaiveGUID[i] = Glaive->GetGUID();
Glaive->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
Glaive->SetUInt32Value(UNIT_FIELD_DISPLAYID, 11686);
Glaive->SetDisplayId(11686);
Glaive->setFaction(m_creature->getFaction());
DoCast(Glaive, SPELL_THROW_GLAIVE, true);
}
@@ -609,7 +609,7 @@ struct TRINITY_DLL_DECL boss_illidan_stormrageAI : public ScriptedAI
if(Glaive)
{
Glaive->CastSpell(m_creature, SPELL_GLAIVE_RETURNS, false); // Make it look like the Glaive flies back up to us
Glaive->SetUInt32Value(UNIT_FIELD_DISPLAYID, 11686); // disappear but not die for now
Glaive->SetDisplayId(11686); // disappear but not die for now
}
}
}
@@ -654,7 +654,7 @@ struct TRINITY_DLL_DECL boss_illidan_stormrageAI : public ScriptedAI
DoCast(m_creature, DemonTransformation[TransformCount].aura, true);
if(DemonTransformation[TransformCount].displayid)
m_creature->SetUInt32Value(UNIT_FIELD_DISPLAYID, DemonTransformation[TransformCount].displayid); // It's morphin time!
m_creature->SetDisplayId(DemonTransformation[TransformCount].displayid); // It's morphin time!
if(DemonTransformation[TransformCount].equip)
{
@@ -1100,7 +1100,7 @@ struct TRINITY_DLL_DECL npc_akama_illidanAI : public ScriptedAI
if(Creature* Channel = m_creature->SummonCreature(ILLIDAN_DOOR_TRIGGER, x, y, z+5, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 360000))
{
ChannelGUID = Channel->GetGUID();
Channel->SetUInt32Value(UNIT_FIELD_DISPLAYID, 11686); // Invisible but spell visuals can still be seen.
Channel->SetDisplayId(11686); // Invisible but spell visuals can still be seen.
m_creature->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
DoCast(Channel, SPELL_AKAMA_DOOR_FAIL);
}
@@ -1793,7 +1793,7 @@ struct TRINITY_DLL_DECL blade_of_azzinothAI : public NullCreatureAI
void SpellHit(Unit *caster, const SpellEntry *spell)
{
if(spell->Id == SPELL_THROW_GLAIVE2 || spell->Id == SPELL_THROW_GLAIVE)
me->SetUInt32Value(UNIT_FIELD_DISPLAYID, 21431);//appear when hit by Illidan's glaive
me->SetDisplayId(21431);//appear when hit by Illidan's glaive
}
};
@@ -1834,7 +1834,7 @@ void boss_illidan_stormrageAI::Reset()
FlightCount = 0;
TransformCount = 0;
m_creature->SetUInt32Value(UNIT_FIELD_DISPLAYID, 21135);
m_creature->SetDisplayId(21135);
m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_ATTACKABLE_2);
m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
@@ -240,7 +240,7 @@ struct TRINITY_DLL_DECL mob_illidari_councilAI : public ScriptedAI
m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
m_creature->SetUInt32Value(UNIT_FIELD_DISPLAYID, 11686);
m_creature->SetDisplayId(11686);
}
void EnterCombat(Unit *who) {}
@@ -72,7 +72,7 @@ struct TRINITY_DLL_DECL boss_gythAI : public ScriptedAI
Line2Count = 2;
//Invisible for event start
m_creature->SetUInt32Value(UNIT_FIELD_DISPLAYID, 11686);
m_creature->SetDisplayId(11686);
m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
}
@@ -112,7 +112,7 @@ struct TRINITY_DLL_DECL boss_gythAI : public ScriptedAI
{
bAggro = true;
// Visible now!
m_creature->SetUInt32Value(UNIT_FIELD_DISPLAYID, 9723);
m_creature->SetDisplayId(9723);
m_creature->setFaction(14);
m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
} else Aggro_Timer -= diff;
@@ -180,7 +180,7 @@ struct TRINITY_DLL_DECL boss_gythAI : public ScriptedAI
//Inturrupt any spell casting
m_creature->InterruptNonMeleeSpells(false);
//Gyth model
m_creature->SetUInt32Value(UNIT_FIELD_DISPLAYID, 9806);
m_creature->SetDisplayId(9806);
m_creature->SummonCreature(10429, m_creature->GetPositionX(), m_creature->GetPositionY(), m_creature->GetPositionZ(), 0, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 900000);
SummonedRend = true;
}
@@ -458,7 +458,7 @@ struct TRINITY_DLL_DECL boss_archimondeAI : public hyjal_trashAI
if (Unit *Nordrassil = Unit::GetUnit(*m_creature, WorldTreeGUID))
{
Nordrassil->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
Nordrassil->SetUInt32Value(UNIT_FIELD_DISPLAYID, 11686);
Nordrassil->SetDisplayId(11686);
DoCast(Nordrassil, SPELL_DRAIN_WORLD_TREE);
IsChanneling = true;
}
@@ -381,7 +381,7 @@ struct mob_giant_infernalAI : public hyjal_trashAI
Delay = rand()%30000;
m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
m_creature->SetUInt32Value(UNIT_FIELD_DISPLAYID, MODEL_INVIS);
m_creature->SetDisplayId(MODEL_INVIS);
go = false;
pos = 0;
Reset();
@@ -447,7 +447,7 @@ struct mob_giant_infernalAI : public hyjal_trashAI
{
m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
m_creature->SetUInt32Value(UNIT_FIELD_DISPLAYID, m_creature->GetUInt32Value(UNIT_FIELD_NATIVEDISPLAYID));
m_creature->SetDisplayId(m_creature->GetUInt32Value(UNIT_FIELD_NATIVEDISPLAYID));
CanMove = true;
if (pInstance)
{
@@ -209,7 +209,7 @@ struct TRINITY_DLL_DECL npc_thrall_old_hillsbradAI : public npc_escortAI
//m_creature->SetUInt32Value(UNIT_VIRTUAL_ITEM_INFO+3, 1038);
break;
case 10:
m_creature->SetUInt32Value(UNIT_FIELD_DISPLAYID, THRALL_MODEL_EQUIPPED);
m_creature->SetDisplayId(THRALL_MODEL_EQUIPPED);
break;
case 11:
SetRun();
@@ -375,7 +375,7 @@ struct TRINITY_DLL_DECL npc_thrall_old_hillsbradAI : public npc_escortAI
HadMount = false;
m_creature->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID, 0);
m_creature->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID+1, 0);
m_creature->SetUInt32Value(UNIT_FIELD_DISPLAYID, THRALL_MODEL_UNEQUIPPED);
m_creature->SetDisplayId(THRALL_MODEL_UNEQUIPPED);
}
if( IsBeingEscorted )
{
@@ -6,381 +6,321 @@
*
* 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
* 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
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
/* ScriptData
SDName: Boss_Hydross_The_Unstable
SD%Complete: 90
SDComment: Some details and adjustments left to do, probably nothing major. Spawns may be spawned in different way/location.
SDComment: Some details and adjustments left to do, probably nothing major. Spawns may be spawned in different way/location. code cleanup needed
SDCategory: Coilfang Resevoir, Serpent Shrine Cavern
EndScriptData */
#include "precompiled.h"
#include "def_serpent_shrine.h"
#define SAY_AGGRO -1548000
#define SAY_SWITCH_TO_CLEAN -1548001
#define SAY_CLEAN_SLAY1 -1548002
#define SAY_CLEAN_SLAY2 -1548003
#define SAY_CLEAN_DEATH -1548004
#define SAY_SWITCH_TO_CORRUPT -1548005
#define SAY_CORRUPT_SLAY1 -1548006
#define SAY_CORRUPT_SLAY2 -1548007
#define SAY_CORRUPT_DEATH -1548008
enum
{
SAY_AGGRO = -1548000,
SAY_SWITCH_TO_CLEAN = -1548001,
SAY_CLEAN_SLAY1 = -1548002,
SAY_CLEAN_SLAY2 = -1548003,
SAY_CLEAN_DEATH = -1548004,
SAY_SWITCH_TO_CORRUPT = -1548005,
SAY_CORRUPT_SLAY1 = -1548006,
SAY_CORRUPT_SLAY2 = -1548007,
SAY_CORRUPT_DEATH = -1548008,
#define SWITCH_RADIUS 18
SWITCH_RADIUS = 18,
#define MODEL_CORRUPT 20609
#define MODEL_CLEAN 20162
MODEL_CORRUPT = 20609,
MODEL_CLEAN = 20162,
#define SPELL_WATER_TOMB 38235
#define SPELL_MARK_OF_HYDROSS1 38215
#define SPELL_MARK_OF_HYDROSS2 38216
#define SPELL_MARK_OF_HYDROSS3 38217
#define SPELL_MARK_OF_HYDROSS4 38218
#define SPELL_MARK_OF_HYDROSS5 38231
#define SPELL_MARK_OF_HYDROSS6 40584
#define SPELL_MARK_OF_CORRUPTION1 38219
#define SPELL_MARK_OF_CORRUPTION2 38220
#define SPELL_MARK_OF_CORRUPTION3 38221
#define SPELL_MARK_OF_CORRUPTION4 38222
#define SPELL_MARK_OF_CORRUPTION5 38230
#define SPELL_MARK_OF_CORRUPTION6 40583
#define SPELL_VILE_SLUDGE 38246
#define SPELL_ENRAGE 27680 //this spell need verification
#define SPELL_SUMMON_WATER_ELEMENT 36459 //not in use yet(in use ever?)
#define SPELL_ELEMENTAL_SPAWNIN 25035
#define SPELL_BLUE_BEAM /*40227*/40227 //channeled Hydross Beam Helper (not in use yet)
SPELL_WATER_TOMB = 38235,
SPELL_MARK_OF_HYDROSS1 = 38215,
SPELL_MARK_OF_HYDROSS2 = 38216,
SPELL_MARK_OF_HYDROSS3 = 38217,
SPELL_MARK_OF_HYDROSS4 = 38218,
SPELL_MARK_OF_HYDROSS5 = 38231,
SPELL_MARK_OF_HYDROSS6 = 40584,
SPELL_MARK_OF_CORRUPTION1 = 38219,
SPELL_MARK_OF_CORRUPTION2 = 38220,
SPELL_MARK_OF_CORRUPTION3 = 38221,
SPELL_MARK_OF_CORRUPTION4 = 38222,
SPELL_MARK_OF_CORRUPTION5 = 38230,
SPELL_MARK_OF_CORRUPTION6 = 40583,
SPELL_VILE_SLUDGE = 38246,
SPELL_ENRAGE = 27680, //this spell need verification
SPELL_SUMMON_WATER_ELEMENT = 36459, //not in use yet(in use ever?)
SPELL_ELEMENTAL_SPAWNIN = 25035,
SPELL_BLUE_BEAM = 38015, //channeled Hydross Beam Helper (not in use yet)
#define ENTRY_PURE_SPAWN 22035
#define ENTRY_TAINTED_SPAWN 22036
#define ENTRY_BEAM_DUMMY 21934
NPC_PURE_SPAWN = 22035,
NPC_TAINTED_SPAWN = 22036
};
#define HYDROSS_X -239.439
#define HYDROSS_Y -363.481
#define SPAWN_X_DIFF1 6.934003
#define SPAWN_Y_DIFF1 -11.255012
#define SPAWN_X_DIFF2 -6.934003
#define SPAWN_Y_DIFF2 11.255012
#define SPAWN_X_DIFF3 -12.577011
#define SPAWN_Y_DIFF3 -4.72702
#define SPAWN_X_DIFF4 12.577011
#define SPAWN_Y_DIFF4 4.72702
const float afSpawnDiffs[4][2] =
{
{6.934003f , -11.255012f}, // diff 1
{-6.934003f , 11.255012f }, // diff 2
{-12.577011f, -4.72702f }, // diff 3
{12.577011f , 4.72702f } // diff 4
};
struct TRINITY_DLL_DECL boss_hydross_the_unstableAI : public ScriptedAI
{
boss_hydross_the_unstableAI(Creature *c) : ScriptedAI(c), Summons(m_creature)
boss_hydross_the_unstableAI(Creature *c) : ScriptedAI(c)
{
pInstance = c->GetInstanceData();
m_pInstance = c->GetInstanceData();
}
ScriptedInstance* pInstance;
uint64 beams[2];
uint32 PosCheck_Timer;
uint32 MarkOfHydross_Timer;
uint32 MarkOfCorruption_Timer;
uint32 WaterTomb_Timer;
uint32 VileSludge_Timer;
uint32 MarkOfHydross_Count;
uint32 MarkOfCorruption_Count;
uint32 EnrageTimer;
bool CorruptedForm;
bool beam;
SummonList Summons;
ScriptedInstance* m_pInstance; // the instance
uint32 m_uiPosCheck_Timer;
uint32 m_uiMarkOfHydross_Timer;
uint32 m_uiMarkOfCorruption_Timer;
uint32 m_uiWaterTomb_Timer;
uint32 m_uiVileSludge_Timer;
uint32 m_uiMarkOfHydross_Count;
uint32 m_uiMarkOfCorruption_Count;
uint32 m_uiEnrageTimer;
bool m_bCorruptedForm;
void Reset()
{
DeSummonBeams();
beams[0] = 0;
beams[1] = 0;
PosCheck_Timer = 2500;
MarkOfHydross_Timer = 15000;
MarkOfCorruption_Timer = 15000;
WaterTomb_Timer = 7000;
VileSludge_Timer = 7000;
MarkOfHydross_Count = 0;
MarkOfCorruption_Count = 0;
EnrageTimer = 600000;
m_uiPosCheck_Timer = 2500;
m_uiMarkOfHydross_Timer = 15000;
m_uiMarkOfCorruption_Timer = 15000;
m_uiWaterTomb_Timer = 7000;
m_uiVileSludge_Timer = 7000;
m_uiMarkOfHydross_Count = 0;
m_uiMarkOfCorruption_Count = 0;
m_uiEnrageTimer = 600000;
m_bCorruptedForm = false;
CorruptedForm = false;
m_creature->SetMeleeDamageSchool(SPELL_SCHOOL_FROST);
m_creature->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_FROST, true);
m_creature->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_NATURE, false);
m_creature->SetUInt32Value(UNIT_FIELD_DISPLAYID, MODEL_CLEAN);
m_creature->SetDisplayId(MODEL_CLEAN);
if (pInstance)
pInstance->SetData(DATA_HYDROSSTHEUNSTABLEEVENT, NOT_STARTED);
beam = false;
Summons.DespawnAll();
if (m_pInstance)
m_pInstance->SetData(DATA_HYDROSSTHEUNSTABLEEVENT, NOT_STARTED);
}
void SummonBeams()
{
Creature* beamer = m_creature->SummonCreature(ENTRY_BEAM_DUMMY,-258.333,-356.34,22.0499,5.90835,TEMPSUMMON_CORPSE_DESPAWN,0);
if(beamer)
{
beamer->CastSpell(m_creature,SPELL_BLUE_BEAM,true);
beamer->SetUInt32Value(UNIT_FIELD_DISPLAYID , 11686); //invisible
beamer->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
beams[0]=beamer->GetGUID();
}
beamer = beamer = m_creature->SummonCreature(ENTRY_BEAM_DUMMY,-219.918,-371.308,22.0042,2.73072,TEMPSUMMON_CORPSE_DESPAWN,0);
if(beamer)
{
beamer->CastSpell(m_creature,SPELL_BLUE_BEAM,true);
beamer->SetUInt32Value(UNIT_FIELD_DISPLAYID , 11686); //invisible
beamer->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
beams[1]=beamer->GetGUID();
}
}
void DeSummonBeams()
{
for(uint8 i=0;i<2;i++)
{
Creature* mob = Unit::GetCreature(*m_creature,beams[i]);
if(mob)
{
mob->setDeathState(DEAD);
mob->RemoveCorpse();
}
}
}
void EnterCombat(Unit *who)
void Aggro(Unit* pWho)
{
DoScriptText(SAY_AGGRO, m_creature);
if (pInstance)
pInstance->SetData(DATA_HYDROSSTHEUNSTABLEEVENT, IN_PROGRESS);
if (m_pInstance)
m_pInstance->SetData(DATA_HYDROSSTHEUNSTABLEEVENT, IN_PROGRESS);
}
void KilledUnit(Unit *victim)
void KilledUnit(Unit* pVictim)
{
if (CorruptedForm)
{
switch(rand()%2)
{
case 0: DoScriptText(SAY_CORRUPT_SLAY1, m_creature); break;
case 1: DoScriptText(SAY_CORRUPT_SLAY2, m_creature); break;
}
}
if (m_bCorruptedForm)
DoScriptText(urand(0,1) ? SAY_CORRUPT_SLAY1 : SAY_CORRUPT_SLAY2, m_creature);
else
{
switch(rand()%2)
{
case 0: DoScriptText(SAY_CLEAN_SLAY1, m_creature); break;
case 1: DoScriptText(SAY_CLEAN_SLAY2, m_creature); break;
}
}
DoScriptText(urand(0,1) ? SAY_CLEAN_SLAY1 : SAY_CLEAN_SLAY2, m_creature);
}
void JustSummoned(Creature* summoned)
void JustSummoned(Creature* pSummoned)
{
if (summoned->GetEntry() == ENTRY_PURE_SPAWN)
{
summoned->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_FROST, true);
summoned->CastSpell(summoned,SPELL_ELEMENTAL_SPAWNIN,true);
Summons.Summon(summoned);
}
if (summoned->GetEntry() == ENTRY_TAINTED_SPAWN)
{
summoned->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_NATURE, true);
summoned->CastSpell(summoned,SPELL_ELEMENTAL_SPAWNIN,true);
Summons.Summon(summoned);
}
if (pSummoned->GetEntry() == NPC_PURE_SPAWN)
pSummoned->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_FROST, true);
else if (pSummoned->GetEntry() == NPC_TAINTED_SPAWN)
pSummoned->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_NATURE, true);
pSummoned->CastSpell(pSummoned, SPELL_ELEMENTAL_SPAWNIN, true);
}
void SummonedCreatureDespawn(Creature *summon)
void JustDied(Unit* pVictim)
{
Summons.Despawn(summon);
DoScriptText(m_bCorruptedForm ? SAY_CORRUPT_DEATH : SAY_CLEAN_DEATH, m_creature);
if (m_pInstance)
m_pInstance->SetData(DATA_HYDROSSTHEUNSTABLEEVENT, NOT_STARTED);
}
void JustDied(Unit *victim)
void SpawnAdds()
{
if (CorruptedForm)
DoScriptText(SAY_CORRUPT_DEATH, m_creature);
uint32 uiAdd = 0;
if (m_bCorruptedForm)
uiAdd = NPC_TAINTED_SPAWN;
else
DoScriptText(SAY_CLEAN_DEATH, m_creature);
uiAdd = NPC_PURE_SPAWN;
if (pInstance)
pInstance->SetData(DATA_HYDROSSTHEUNSTABLEEVENT, DONE);
Summons.DespawnAll();
for(uint8 i = 0; i < 4; i++)
DoSpawnCreature(uiAdd, afSpawnDiffs[i][0], afSpawnDiffs[i][1], 0.0f, 0.0f, TEMPSUMMON_CORPSE_DESPAWN, 0);
}
void UpdateAI(const uint32 diff)
void UpdateAI(const uint32 uiDiff)
{
if(!beam)
{
SummonBeams();
beam=true;
}
//Return since we have no target
if (!UpdateVictim() )
if (!UpdateVictim())
return;
// corrupted form
if (CorruptedForm)
if (m_bCorruptedForm)
{
//MarkOfCorruption_Timer
if (MarkOfCorruption_Timer < diff)
if (m_uiMarkOfCorruption_Timer < uiDiff)
{
if (MarkOfCorruption_Count <= 5)
if (m_uiMarkOfCorruption_Count <= 5)
{
uint32 mark_spell;
uint32 uiMarkSpell = 0;
switch(MarkOfCorruption_Count)
switch(m_uiMarkOfCorruption_Count)
{
case 0: mark_spell = SPELL_MARK_OF_CORRUPTION1; break;
case 1: mark_spell = SPELL_MARK_OF_CORRUPTION2; break;
case 2: mark_spell = SPELL_MARK_OF_CORRUPTION3; break;
case 3: mark_spell = SPELL_MARK_OF_CORRUPTION4; break;
case 4: mark_spell = SPELL_MARK_OF_CORRUPTION5; break;
case 5: mark_spell = SPELL_MARK_OF_CORRUPTION6; break;
case 0: uiMarkSpell = SPELL_MARK_OF_CORRUPTION1; break;
case 1: uiMarkSpell = SPELL_MARK_OF_CORRUPTION2; break;
case 2: uiMarkSpell = SPELL_MARK_OF_CORRUPTION3; break;
case 3: uiMarkSpell = SPELL_MARK_OF_CORRUPTION4; break;
case 4: uiMarkSpell = SPELL_MARK_OF_CORRUPTION5; break;
case 5: uiMarkSpell = SPELL_MARK_OF_CORRUPTION6; break;
}
DoCast(m_creature->getVictim(), mark_spell);
DoCast(m_creature->getVictim(), uiMarkSpell);
if (MarkOfCorruption_Count < 5)
MarkOfCorruption_Count++;
if (m_uiMarkOfCorruption_Count < 5)
++m_uiMarkOfCorruption_Count;
}
MarkOfCorruption_Timer = 15000;
}else MarkOfCorruption_Timer -= diff;
m_uiMarkOfCorruption_Timer = 15000;
}else m_uiMarkOfCorruption_Timer -= uiDiff;
//VileSludge_Timer
if (VileSludge_Timer < diff)
if (m_uiVileSludge_Timer < uiDiff)
{
Unit *target = SelectUnit(SELECT_TARGET_RANDOM, 0);
if (target)
DoCast(target, SPELL_VILE_SLUDGE);
if (Unit* pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0))
DoCast(pTarget, SPELL_VILE_SLUDGE);
VileSludge_Timer = 15000;
}else VileSludge_Timer -= diff;
m_uiVileSludge_Timer = 15000;
}else m_uiVileSludge_Timer -= uiDiff;
//PosCheck_Timer
if (PosCheck_Timer < diff)
if (m_uiPosCheck_Timer < uiDiff)
{
if (m_creature->GetDistance2d(HYDROSS_X, HYDROSS_Y) < SWITCH_RADIUS)
{
// switch to clean form
m_creature->SetUInt32Value(UNIT_FIELD_DISPLAYID, MODEL_CLEAN);
CorruptedForm = false;
MarkOfHydross_Count = 0;
float fPosX, fPosY, fPosZ, fPosO;
m_creature->GetHomePosition(fPosX, fPosY, fPosZ, fPosO);
if (m_creature->GetDistance2d(fPosX, fPosY) < SWITCH_RADIUS)
{
DoScriptText(SAY_SWITCH_TO_CLEAN, m_creature);
// switch to clean form
m_creature->SetDisplayId(MODEL_CLEAN);
m_uiMarkOfHydross_Count = 0;
DoResetThreat();
SummonBeams();
// spawn 4 adds
DoSpawnCreature(ENTRY_PURE_SPAWN, SPAWN_X_DIFF1, SPAWN_Y_DIFF1, 3, 0, TEMPSUMMON_CORPSE_DESPAWN, 0);
DoSpawnCreature(ENTRY_PURE_SPAWN, SPAWN_X_DIFF2, SPAWN_Y_DIFF2, 3, 0, TEMPSUMMON_CORPSE_DESPAWN, 0);
DoSpawnCreature(ENTRY_PURE_SPAWN, SPAWN_X_DIFF3, SPAWN_Y_DIFF3, 3, 0, TEMPSUMMON_CORPSE_DESPAWN, 0);
DoSpawnCreature(ENTRY_PURE_SPAWN, SPAWN_X_DIFF4, SPAWN_Y_DIFF4, 3, 0, TEMPSUMMON_CORPSE_DESPAWN, 0);
SpawnAdds();
m_creature->SetMeleeDamageSchool(SPELL_SCHOOL_FROST);
m_creature->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_FROST, true);
m_creature->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_NATURE, false);
m_bCorruptedForm = false;
}
PosCheck_Timer = 2500;
}else PosCheck_Timer -=diff;
m_uiPosCheck_Timer = 2500;
}else m_uiPosCheck_Timer -=uiDiff;
}
// clean form
else
{
//MarkOfHydross_Timer
if (MarkOfHydross_Timer < diff)
if (m_uiMarkOfHydross_Timer < uiDiff)
{
if (MarkOfHydross_Count <= 5)
if (m_uiMarkOfHydross_Count <= 5)
{
uint32 mark_spell;
uint32 uiMarkSpell;
switch(MarkOfHydross_Count)
switch(m_uiMarkOfHydross_Count)
{
case 0: mark_spell = SPELL_MARK_OF_HYDROSS1; break;
case 1: mark_spell = SPELL_MARK_OF_HYDROSS2; break;
case 2: mark_spell = SPELL_MARK_OF_HYDROSS3; break;
case 3: mark_spell = SPELL_MARK_OF_HYDROSS4; break;
case 4: mark_spell = SPELL_MARK_OF_HYDROSS5; break;
case 5: mark_spell = SPELL_MARK_OF_HYDROSS6; break;
case 0: uiMarkSpell = SPELL_MARK_OF_HYDROSS1; break;
case 1: uiMarkSpell = SPELL_MARK_OF_HYDROSS2; break;
case 2: uiMarkSpell = SPELL_MARK_OF_HYDROSS3; break;
case 3: uiMarkSpell = SPELL_MARK_OF_HYDROSS4; break;
case 4: uiMarkSpell = SPELL_MARK_OF_HYDROSS5; break;
case 5: uiMarkSpell = SPELL_MARK_OF_HYDROSS6; break;
}
DoCast(m_creature->getVictim(), mark_spell);
DoCast(m_creature->getVictim(), uiMarkSpell);
if (MarkOfHydross_Count < 5)
MarkOfHydross_Count++;
if (m_uiMarkOfHydross_Count < 5)
++m_uiMarkOfHydross_Count;
}
MarkOfHydross_Timer = 15000;
}else MarkOfHydross_Timer -= diff;
m_uiMarkOfHydross_Timer = 15000;
}else m_uiMarkOfHydross_Timer -= uiDiff;
//WaterTomb_Timer
if (WaterTomb_Timer < diff)
if (m_uiWaterTomb_Timer < uiDiff)
{
Unit *target = SelectUnit(SELECT_TARGET_RANDOM, 0);
if (target)
DoCast(target, SPELL_WATER_TOMB);
if (Unit* pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0))
DoCast(pTarget, SPELL_WATER_TOMB);
WaterTomb_Timer = 7000;
}else WaterTomb_Timer -= diff;
m_uiWaterTomb_Timer = 7000;
}else m_uiWaterTomb_Timer -= uiDiff;
//PosCheck_Timer
if (PosCheck_Timer < diff)
if (m_uiPosCheck_Timer < uiDiff)
{
if (m_creature->GetDistance2d(HYDROSS_X, HYDROSS_Y) >= SWITCH_RADIUS)
{
// switch to corrupted form
m_creature->SetUInt32Value(UNIT_FIELD_DISPLAYID, MODEL_CORRUPT);
MarkOfCorruption_Count = 0;
CorruptedForm = true;
float fPosX, fPosY, fPosZ, fPosO;
m_creature->GetHomePosition(fPosX, fPosY, fPosZ, fPosO);
if (m_creature->GetDistance2d(fPosX, fPosY) >= SWITCH_RADIUS)
{
DoScriptText(SAY_SWITCH_TO_CORRUPT, m_creature);
// switch to corrupted form
m_creature->SetDisplayId(MODEL_CORRUPT);
m_uiMarkOfCorruption_Count = 0;
DoResetThreat();
DeSummonBeams();
// spawn 4 adds
DoSpawnCreature(ENTRY_TAINTED_SPAWN, SPAWN_X_DIFF1, SPAWN_Y_DIFF1, 3, 0, TEMPSUMMON_CORPSE_DESPAWN, 0);
DoSpawnCreature(ENTRY_TAINTED_SPAWN, SPAWN_X_DIFF2, SPAWN_Y_DIFF2, 3, 0, TEMPSUMMON_CORPSE_DESPAWN, 0);
DoSpawnCreature(ENTRY_TAINTED_SPAWN, SPAWN_X_DIFF3, SPAWN_Y_DIFF3, 3, 0, TEMPSUMMON_CORPSE_DESPAWN, 0);
DoSpawnCreature(ENTRY_TAINTED_SPAWN, SPAWN_X_DIFF4, SPAWN_Y_DIFF4, 3, 0, TEMPSUMMON_CORPSE_DESPAWN, 0);
SpawnAdds();
m_creature->SetMeleeDamageSchool(SPELL_SCHOOL_NATURE);
m_creature->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_NATURE, true);
m_creature->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_FROST, false);
m_bCorruptedForm = true;
}
PosCheck_Timer = 2500;
}else PosCheck_Timer -=diff;
m_uiPosCheck_Timer = 2500;
}else m_uiPosCheck_Timer -=uiDiff;
}
//EnrageTimer
if (EnrageTimer < diff)
if (m_uiEnrageTimer < uiDiff)
{
DoCast(m_creature, SPELL_ENRAGE);
EnrageTimer = 60000;
}else EnrageTimer -= diff;
m_uiEnrageTimer = 60000;
}else m_uiEnrageTimer -= uiDiff;
DoMeleeAttackIfReady();
}
};
CreatureAI* GetAI_boss_hydross_the_unstable(Creature *_Creature)
CreatureAI* GetAI_boss_hydross_the_unstable(Creature* pCreature)
{
return new boss_hydross_the_unstableAI (_Creature);
return new boss_hydross_the_unstableAI(pCreature);
}
void AddSC_boss_hydross_the_unstable()
{
Script *newscript;
newscript = new Script;
newscript->Name="boss_hydross_the_unstable";
newscript->Name = "boss_hydross_the_unstable";
newscript->GetAI = &GetAI_boss_hydross_the_unstable;
newscript->RegisterSelf();
}
@@ -890,7 +890,7 @@ struct TRINITY_DLL_DECL mob_shield_generator_channelAI : public ScriptedAI
{
Check_Timer = 0;
Casted = false;
m_creature->SetUInt32Value(UNIT_FIELD_DISPLAYID , 11686); //invisible
m_creature->SetDisplayId(11686); //invisible
m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
}
@@ -187,7 +187,7 @@ struct TRINITY_DLL_DECL boss_leotheras_the_blindAI : public ScriptedAI
EnrageUsed = false;
InnderDemon_Count = 0;
m_creature->SetSpeed( MOVE_RUN, 2.0f, true);
m_creature->SetUInt32Value(UNIT_FIELD_DISPLAYID, MODEL_NIGHTELF);
m_creature->SetDisplayId(MODEL_NIGHTELF);
m_creature->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID , 0);
m_creature->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID+1, 0);
m_creature->CastSpell(m_creature, SPELL_DUAL_WIELD, true);
@@ -270,7 +270,7 @@ struct TRINITY_DLL_DECL boss_leotheras_the_blindAI : public ScriptedAI
m_creature->ApplySpellImmune(AURA_BANISH, IMMUNITY_MECHANIC, MECHANIC_BANISH, true);
// changing model to bloodelf
m_creature->SetUInt32Value(UNIT_FIELD_DISPLAYID, MODEL_NIGHTELF);
m_creature->SetDisplayId(MODEL_NIGHTELF);
// and reseting equipment
m_creature->LoadEquipment(m_creature->GetEquipmentId());
@@ -292,7 +292,7 @@ struct TRINITY_DLL_DECL boss_leotheras_the_blindAI : public ScriptedAI
DoCast(m_creature, AURA_BANISH);
// changing model
m_creature->SetUInt32Value(UNIT_FIELD_DISPLAYID, MODEL_DEMON);
m_creature->SetDisplayId(MODEL_DEMON);
// and removing weapons
m_creature->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID , 0);
@@ -457,7 +457,7 @@ struct TRINITY_DLL_DECL boss_leotheras_the_blindAI : public ScriptedAI
{
//switch to demon form
m_creature->RemoveAurasDueToSpell(SPELL_WHIRLWIND,0);
m_creature->SetUInt32Value(UNIT_FIELD_DISPLAYID, MODEL_DEMON);
m_creature->SetDisplayId(MODEL_DEMON);
DoScriptText(SAY_SWITCH_TO_DEMON, m_creature);
m_creature->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID , 0);
m_creature->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID+1, 0);
@@ -534,7 +534,7 @@ struct TRINITY_DLL_DECL boss_leotheras_the_blindAI : public ScriptedAI
if(SwitchToHuman_Timer < diff)
{
//switch to nightelf form
m_creature->SetUInt32Value(UNIT_FIELD_DISPLAYID, MODEL_NIGHTELF);
m_creature->SetDisplayId(MODEL_NIGHTELF);
m_creature->LoadEquipment(m_creature->GetEquipmentId());
CastConsumingMadness();
@@ -563,7 +563,7 @@ struct TRINITY_DLL_DECL boss_leotheras_the_blindAI : public ScriptedAI
DemonForm = false;
DoScriptText(SAY_FINAL_FORM, m_creature);
m_creature->SetUInt32Value(UNIT_FIELD_DISPLAYID, MODEL_NIGHTELF);
m_creature->SetDisplayId(MODEL_NIGHTELF);
m_creature->LoadEquipment(m_creature->GetEquipmentId());
}
}
@@ -1,289 +1,240 @@
/* 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
*/
* 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_Morogrim_Tidewalker
SD%Complete: 90
SDComment: Water globules don't explode properly, remove hacks
SDComment:
SDCategory: Coilfang Resevoir, Serpent Shrine Cavern
EndScriptData */
#include "precompiled.h"
#include "def_serpent_shrine.h"
#define SAY_AGGRO -1548030
#define SAY_SUMMON1 -1548031
#define SAY_SUMMON2 -1548032
#define SAY_SUMMON_BUBL1 -1548033
#define SAY_SUMMON_BUBL2 -1548034
#define SAY_SLAY1 -1548035
#define SAY_SLAY2 -1548036
#define SAY_SLAY3 -1548037
#define SAY_DEATH -1548038
#define EMOTE_WATERY_GRAVE -1548039
#define EMOTE_EARTHQUAKE -1548040
#define EMOTE_WATERY_GLOBULES -1548041
#define SPELL_TIDAL_WAVE 37730
#define SPELL_WATERY_GRAVE 38049
#define SPELL_EARTHQUAKE 37764
#define SPELL_WATERY_GRAVE_EXPLOSION 37852
#define WATERY_GRAVE_X1 334.64
#define WATERY_GRAVE_Y1 -728.89
#define WATERY_GRAVE_Z1 -14.42
#define WATERY_GRAVE_X2 365.51
#define WATERY_GRAVE_Y2 -737.14
#define WATERY_GRAVE_Z2 -14.44
#define WATERY_GRAVE_X3 366.19
#define WATERY_GRAVE_Y3 -709.59
#define WATERY_GRAVE_Z3 -14.36
#define WATERY_GRAVE_X4 372.93
#define WATERY_GRAVE_Y4 -690.96
#define WATERY_GRAVE_Z4 -14.44
#define SPELL_WATERY_GRAVE_1 38023
#define SPELL_WATERY_GRAVE_2 38024
#define SPELL_WATERY_GRAVE_3 38025
#define SPELL_WATERY_GRAVE_4 37850
#define SPELL_SUMMON_WATER_GLOBULE_1 37854
#define SPELL_SUMMON_WATER_GLOBULE_2 37858
#define SPELL_SUMMON_WATER_GLOBULE_3 37860
#define SPELL_SUMMON_WATER_GLOBULE_4 37861
/*#define SPELL_SUMMON_MURLOC_A6 39813
#define SPELL_SUMMON_MURLOC_A7 39814
#define SPELL_SUMMON_MURLOC_A8 39815
#define SPELL_SUMMON_MURLOC_A9 39816
#define SPELL_SUMMON_MURLOC_A10 39817
#define SPELL_SUMMON_MURLOC_B6 39818
#define SPELL_SUMMON_MURLOC_B7 39819
#define SPELL_SUMMON_MURLOC_B8 39820
#define SPELL_SUMMON_MURLOC_B9 39821
#define SPELL_SUMMON_MURLOC_B10 39822*/
float MurlocCords[10][5] =
enum
{
{21920, 424.36, -715.4, -7.14, 0.124},
{21920, 425.13, -719.3, -7.14, 0.124},
{21920, 425.05, -724.23, -7.14, 0.124},
{21920, 424.91, -728.68, -7.14, 0.124},
{21920, 424.84, -732.18, -7.14, 0.124},
{21920, 321.05, -734.2, -13.15, 0.124},
{21920, 321.05, -729.4, -13.15, 0.124},
{21920, 321.05, -724.03, -13.15, 0.124},
{21920, 321.05, -718.73, -13.15, 0.124},
{21920, 321.05, -714.24, -13.15, 0.124}
};
SAY_AGGRO = -1548030,
SAY_SUMMON1 = -1548031,
SAY_SUMMON2 = -1548032,
SAY_SUMMON_BUBL1 = -1548033,
SAY_SUMMON_BUBL2 = -1548034,
SAY_SLAY1 = -1548035,
SAY_SLAY2 = -1548036,
SAY_SLAY3 = -1548037,
SAY_DEATH = -1548038,
EMOTE_WATERY_GRAVE = -1548039,
EMOTE_EARTHQUAKE = -1548040,
EMOTE_WATERY_GLOBULES = -1548041,
//Creatures
#define WATER_GLOBULE 21913
#define TIDEWALKER_LURKER 21920
SPELL_TIDAL_WAVE = 37730,
SPELL_EARTHQUAKE = 37764,
SPELL_WATERY_GRAVE_1 = 37850,
SPELL_WATERY_GRAVE_2 = 38023,
SPELL_WATERY_GRAVE_3 = 38024,
SPELL_WATERY_GRAVE_4 = 38025,
SPELL_SUMMON_MURLOC_A6 = 39813,
SPELL_SUMMON_MURLOC_A7 = 39814,
SPELL_SUMMON_MURLOC_A8 = 39815,
SPELL_SUMMON_MURLOC_A9 = 39816,
SPELL_SUMMON_MURLOC_A10 = 39817,
SPELL_SUMMON_MURLOC_B6 = 39818,
SPELL_SUMMON_MURLOC_B7 = 39819,
SPELL_SUMMON_MURLOC_B8 = 39820,
SPELL_SUMMON_MURLOC_B9 = 39821,
SPELL_SUMMON_MURLOC_B10 = 39822,
SPELL_SUMMON_GLOBULE_1 = 37854,
SPELL_SUMMON_GLOBULE_2 = 37858,
SPELL_SUMMON_GLOBULE_3 = 37860,
SPELL_SUMMON_GLOBULE_4 = 37861,
NPC_WATER_GLOBULE = 21913,
NPC_TIDEWALKER_LURKER = 21920
};
//Morogrim Tidewalker AI
struct TRINITY_DLL_DECL boss_morogrim_tidewalkerAI : public ScriptedAI
{
boss_morogrim_tidewalkerAI(Creature *c) : ScriptedAI(c)
boss_morogrim_tidewalkerAI(Creature* pCreature) : ScriptedAI(pCreature)
{
pInstance = c->GetInstanceData();
m_pInstance = ((ScriptedInstance*)pCreature->GetInstanceData());
}
ScriptedInstance* pInstance;
Map::PlayerList const *PlayerList;
ScriptedInstance* m_pInstance; // the instance
uint32 TidalWave_Timer;
uint32 WateryGrave_Timer;
uint32 Earthquake_Timer;
uint32 WateryGlobules_Timer;
uint32 globulespell[4];
int8 Playercount;
int8 counter;
// timers
uint32 m_uiTidalWave_Timer;
uint32 m_uiWateryGrave_Timer;
uint32 m_uiEarthquake_Timer;
uint32 m_uiWateryGlobules_Timer;
bool Earthquake;
bool Phase2;
bool m_bEarthquake;
bool m_bPhase2;
void Reset()
{
TidalWave_Timer = 10000;
WateryGrave_Timer = 30000;
Earthquake_Timer = 40000;
WateryGlobules_Timer = 0;
globulespell[0] = SPELL_SUMMON_WATER_GLOBULE_1;
globulespell[1] = SPELL_SUMMON_WATER_GLOBULE_2;
globulespell[2] = SPELL_SUMMON_WATER_GLOBULE_3;
globulespell[3] = SPELL_SUMMON_WATER_GLOBULE_4;
m_uiTidalWave_Timer = 10000;
m_uiWateryGrave_Timer = 30000;
m_uiEarthquake_Timer = 40000;
m_uiWateryGlobules_Timer = 0;
Earthquake = false;
Phase2 = false;
m_bEarthquake = false;
m_bPhase2 = false;
if (pInstance)
pInstance->SetData(DATA_MOROGRIMTIDEWALKEREVENT, NOT_STARTED);
if (m_pInstance)
m_pInstance->SetData(DATA_MOROGRIMTIDEWALKEREVENT, NOT_STARTED);
}
void StartEvent()
{
DoScriptText(SAY_AGGRO, m_creature);
if (pInstance)
pInstance->SetData(DATA_MOROGRIMTIDEWALKEREVENT, IN_PROGRESS);
}
void KilledUnit(Unit *victim)
void KilledUnit(Unit* pVictim)
{
switch(rand()%3)
{
case 0: DoScriptText(SAY_SLAY1, m_creature); break;
case 1: DoScriptText(SAY_SLAY2, m_creature); break;
case 2: DoScriptText(SAY_SLAY3, m_creature); break;
case 0: DoScriptText(SAY_SLAY1, m_creature); break;
case 1: DoScriptText(SAY_SLAY2, m_creature); break;
case 2: DoScriptText(SAY_SLAY3, m_creature); break;
}
}
void JustDied(Unit *victim)
void JustDied(Unit* pVictim)
{
DoScriptText(SAY_DEATH, m_creature);
if (pInstance)
pInstance->SetData(DATA_MOROGRIMTIDEWALKEREVENT, DONE);
if (m_pInstance)
m_pInstance->SetData(DATA_MOROGRIMTIDEWALKEREVENT, NOT_STARTED);
}
void EnterCombat(Unit *who)
void Aggro(Unit* pWho)
{
PlayerList = &m_creature->GetMap()->GetPlayers();
Playercount = PlayerList->getSize();
StartEvent();
DoScriptText(SAY_AGGRO, m_creature);
if (m_pInstance)
m_pInstance->SetData(DATA_MOROGRIMTIDEWALKEREVENT, IN_PROGRESS);
}
void ApplyWateryGrave(Unit *player, uint8 i)
void JustSummoned(Creature* pSummoned)
{
switch(i)
if (pSummoned->GetEntry() == NPC_TIDEWALKER_LURKER)
{
case 0: player->CastSpell(player, SPELL_WATERY_GRAVE_1, true); break;
case 1: player->CastSpell(player, SPELL_WATERY_GRAVE_2, true); break;
case 2: player->CastSpell(player, SPELL_WATERY_GRAVE_3, true); break;
case 3: player->CastSpell(player, SPELL_WATERY_GRAVE_4, true); break;
if (Unit* pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0))
pSummoned->AI()->AttackStart(pTarget);
}
if (pSummoned->GetEntry() == NPC_WATER_GLOBULE)
{
if (Unit* pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0))
pSummoned->GetMotionMaster()->MoveFollow(pTarget, 0.0f, 0.0f);
}
}
void UpdateAI(const uint32 diff)
void UpdateAI(const uint32 uiDiff)
{
//Return since we have no target
if (!UpdateVictim() )
if (!UpdateVictim())
return;
//Earthquake_Timer
if (Earthquake_Timer < diff)
//m_uiEarthquake_Timer
if (m_uiEarthquake_Timer < uiDiff)
{
if (!Earthquake)
if (!m_bEarthquake)
{
DoCast(m_creature->getVictim(), SPELL_EARTHQUAKE);
Earthquake = true;
Earthquake_Timer = 10000;
m_bEarthquake = true;
m_uiEarthquake_Timer = 5000;
}
else
{
switch(rand()%2)
{
case 0: DoScriptText(SAY_SUMMON1, m_creature); break;
case 1: DoScriptText(SAY_SUMMON2, m_creature); break;
}
DoScriptText(urand(0,1) ? SAY_SUMMON1 : SAY_SUMMON2, m_creature);
//north
m_creature->CastSpell(m_creature,SPELL_SUMMON_MURLOC_A6,true);
m_creature->CastSpell(m_creature,SPELL_SUMMON_MURLOC_A7,true);
m_creature->CastSpell(m_creature,SPELL_SUMMON_MURLOC_A8,true);
m_creature->CastSpell(m_creature,SPELL_SUMMON_MURLOC_A9,true);
m_creature->CastSpell(m_creature,SPELL_SUMMON_MURLOC_A10,true);
//south
m_creature->CastSpell(m_creature,SPELL_SUMMON_MURLOC_B6,true);
m_creature->CastSpell(m_creature,SPELL_SUMMON_MURLOC_B7,true);
m_creature->CastSpell(m_creature,SPELL_SUMMON_MURLOC_B8,true);
m_creature->CastSpell(m_creature,SPELL_SUMMON_MURLOC_B9,true);
m_creature->CastSpell(m_creature,SPELL_SUMMON_MURLOC_B10,true);
for(uint8 i = 0; i < 10; i++)
{
Unit* target = SelectUnit(SELECT_TARGET_RANDOM, 0);
Creature* Murloc = m_creature->SummonCreature(MurlocCords[i][0],MurlocCords[i][1],MurlocCords[i][2],MurlocCords[i][3],MurlocCords[i][4], TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 10000);
if(target && Murloc)
Murloc->AI()->AttackStart(target);
}
DoScriptText(EMOTE_EARTHQUAKE, m_creature);
Earthquake = false;
Earthquake_Timer = 40000+rand()%5000;
}
}else Earthquake_Timer -= diff;
//TidalWave_Timer
if (TidalWave_Timer < diff)
m_bEarthquake = false;
m_uiEarthquake_Timer = 40000+rand()%5000;
}
}else m_uiEarthquake_Timer -= uiDiff;
//m_uiTidalWave_Timer
if (m_uiTidalWave_Timer < uiDiff)
{
DoCast(m_creature->getVictim(), SPELL_TIDAL_WAVE);
TidalWave_Timer = 20000;
}else TidalWave_Timer -= diff;
m_uiTidalWave_Timer = 20000;
}else m_uiTidalWave_Timer -= uiDiff;
if (!Phase2)
if (!m_bPhase2)
{
//WateryGrave_Timer
if (WateryGrave_Timer < diff)
//m_uiWateryGrave_Timer
if (m_uiWateryGrave_Timer < uiDiff)
{
//Teleport 4 players under the waterfalls
Unit *target;
using std::set;
set<int>list;
set<int>::iterator itr;
for(uint8 i = 0; i < 4; i++)
{
counter = 0;
do{target = SelectTarget(SELECT_TARGET_RANDOM, 1, 50, true); //target players only
if(counter < Playercount)
break;
if(target) itr = list.find(target->GetGUID());
counter++;
}while(itr != list.end());
if(target){list.insert(target->GetGUID());
ApplyWateryGrave(target, i);
Unit* pTarget = SelectUnit(SELECT_TARGET_RANDOM, 1);
if (pTarget && pTarget->GetTypeId() == TYPEID_PLAYER && !pTarget->HasAuraType(SPELL_AURA_MOD_STUN) && pTarget->IsWithinDistInMap(m_creature, 45.0f))
{
switch(i)
{
case 0: m_creature->CastSpell(pTarget,SPELL_WATERY_GRAVE_1,false); break;
case 1: m_creature->CastSpell(pTarget,SPELL_WATERY_GRAVE_2,false); break;
case 2: m_creature->CastSpell(pTarget,SPELL_WATERY_GRAVE_3,false); break;
case 3: m_creature->CastSpell(pTarget,SPELL_WATERY_GRAVE_4,false); break;
}
}
}
switch(rand()%2)
{
case 0: DoScriptText(SAY_SUMMON_BUBL1, m_creature); break;
case 1: DoScriptText(SAY_SUMMON_BUBL2, m_creature); break;
}
DoScriptText(urand(0,1) ? SAY_SUMMON_BUBL1 : SAY_SUMMON_BUBL2, m_creature);
DoScriptText(EMOTE_WATERY_GRAVE, m_creature);
WateryGrave_Timer = 30000;
}else WateryGrave_Timer -= diff;
m_uiWateryGrave_Timer = 30000;
}else m_uiWateryGrave_Timer -= uiDiff;
//Start Phase2
if ((m_creature->GetHealth()*100 / m_creature->GetMaxHealth()) < 25)
Phase2 = true;
m_bPhase2 = true;
}
else
{
//WateryGlobules_Timer
if (WateryGlobules_Timer < diff)
//m_uiWateryGlobules_Timer
if (m_uiWateryGlobules_Timer < uiDiff)
{
Unit* globuletarget;
using std::set;
set<int>globulelist;
set<int>::iterator itr;
for (int8 g = 0; g < 4; g++) //one unit cant cast more than one spell per update, so some players have to cast for us XD
{
counter = 0;
do {globuletarget = SelectTarget(SELECT_TARGET_RANDOM, 0,50,true);
if(globuletarget) itr = globulelist.find(globuletarget->GetGUID());
if (counter > Playercount)
break;
counter++;
} while (itr != globulelist.end());
if(globuletarget)globulelist.insert(globuletarget->GetGUID());
globuletarget->CastSpell(globuletarget, globulespell[g], true);
}
DoScriptText(EMOTE_WATERY_GLOBULES, m_creature);
WateryGlobules_Timer = 25000;
}else WateryGlobules_Timer -= diff;
m_creature->CastSpell(m_creature,SPELL_SUMMON_GLOBULE_1,true);
m_creature->CastSpell(m_creature,SPELL_SUMMON_GLOBULE_2,true);
m_creature->CastSpell(m_creature,SPELL_SUMMON_GLOBULE_3,true);
m_creature->CastSpell(m_creature,SPELL_SUMMON_GLOBULE_4,false);
m_uiWateryGlobules_Timer = 25000;
}else m_uiWateryGlobules_Timer -= uiDiff;
}
DoMeleeAttackIfReady();
@@ -291,67 +242,63 @@ struct TRINITY_DLL_DECL boss_morogrim_tidewalkerAI : public ScriptedAI
};
//Water Globule AI
#define SPELL_GLOBULE_EXPLOSION 37871
struct TRINITY_DLL_DECL mob_water_globuleAI : public ScriptedAI
{
mob_water_globuleAI(Creature *c) : ScriptedAI(c) {}
mob_water_globuleAI(Creature* c) : ScriptedAI(c) { }
uint32 Check_Timer;
// timers
uint32 m_uiCheck_Timer;
void Reset()
{
Check_Timer = 1000;
m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
m_uiCheck_Timer = 1000;
m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
m_creature->setFaction(14);
}
void EnterCombat(Unit *who) {}
void Aggro(Unit* pWho) {}
void MoveInLineOfSight(Unit *who)
void MoveInLineOfSight(Unit* pWho)
{
if (!who || m_creature->getVictim())
if (!pWho || m_creature->getVictim())
return;
if (who->isTargetableForAttack() && who->isInAccessiblePlaceFor(m_creature) && m_creature->IsHostileTo(who))
if (pWho->isTargetableForAttack() && pWho->isInAccessiblePlaceFor(m_creature) && m_creature->IsHostileTo(pWho))
{
//no attack radius check - it attacks the first target that moves in his los
//who->RemoveSpellsCausingAura(SPELL_AURA_MOD_STEALTH);
AttackStart(who);
//pWho->RemoveSpellsCausingAura(SPELL_AURA_MOD_STEALTH);
AttackStart(pWho);
}
}
void UpdateAI(const uint32 diff)
void UpdateAI(const uint32 uiDiff)
{
//Return since we have no target
if (!UpdateVictim() )
if (!UpdateVictim())
return;
if (Check_Timer < diff)
if (m_uiCheck_Timer < uiDiff)
{
if (m_creature->IsWithinDistInMap(m_creature->getVictim(), 5))
{
DoCast(m_creature->getVictim(), SPELL_GLOBULE_EXPLOSION);
m_creature->DealDamage(m_creature->getVictim(), 4000+rand()%2000, NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_FROST, NULL, false);
//despawn
m_creature->DealDamage(m_creature, m_creature->GetHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false);
}
Check_Timer = 500;
}else Check_Timer -= diff;
m_uiCheck_Timer = 500;
}else m_uiCheck_Timer -= uiDiff;
//do NOT deal any melee damage to the target.
}
};
CreatureAI* GetAI_boss_morogrim_tidewalker(Creature *_Creature)
CreatureAI* GetAI_boss_morogrim_tidewalker(Creature* pCreature)
{
return new boss_morogrim_tidewalkerAI (_Creature);
return new boss_morogrim_tidewalkerAI (pCreature);
}
CreatureAI* GetAI_mob_water_globule(Creature *_Creature)
CreatureAI* GetAI_mob_water_globule(Creature* pCreature)
{
return new mob_water_globuleAI (_Creature);
return new mob_water_globuleAI (pCreature);
}
void AddSC_boss_morogrim_tidewalker()
@@ -359,13 +306,12 @@ void AddSC_boss_morogrim_tidewalker()
Script *newscript;
newscript = new Script;
newscript->Name="boss_morogrim_tidewalker";
newscript->Name = "boss_morogrim_tidewalker";
newscript->GetAI = &GetAI_boss_morogrim_tidewalker;
newscript->RegisterSelf();
newscript = new Script;
newscript->Name="mob_water_globule";
newscript->Name = "mob_water_globule";
newscript->GetAI = &GetAI_mob_water_globule;
newscript->RegisterSelf();
}
@@ -148,7 +148,7 @@ struct TRINITY_DLL_DECL npc_unworthy_initiateAI : public ScriptedAI
m_creature->setFaction(7);
m_creature->SetUInt32Value(UNIT_FIELD_BYTES_1, 8);
m_creature->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID , 0);
m_creature->SetUInt32Value(UNIT_FIELD_DISPLAYID, m_creature->GetNativeDisplayId());
m_creature->SetDisplayId(m_creature->GetNativeDisplayId());
event_starter = 0;
event_startet = false;
@@ -183,7 +183,7 @@ struct TRINITY_DLL_DECL npc_unworthy_initiateAI : public ScriptedAI
}
}
m_creature->SetUInt32Value(UNIT_FIELD_DISPLAYID, modelid_dk_armor[model_counter]);
m_creature->SetDisplayId(modelid_dk_armor[model_counter]);
m_creature->LoadEquipment(m_creature->GetEquipmentId());
}
@@ -53,6 +53,7 @@ struct TRINITY_DLL_DECL instance_blood_furnace : public ScriptedInstance
uint64 PrisonCell8GUID;
uint32 Encounter[ENCOUNTERS];
std::string str_data;
void Initialize()
{
@@ -158,6 +159,19 @@ struct TRINITY_DLL_DECL instance_blood_furnace : public ScriptedInstance
case TYPE_BROGGOK_EVENT: Encounter[1] = data; break;
case TYPE_KELIDAN_THE_BREAKER_EVENT: Encounter[2] = data; break;
}
if (data == DONE)
{
OUT_SAVE_INST_DATA;
std::ostringstream saveStream;
saveStream << Encounter[0] << " " << Encounter[1] << " " << Encounter[2];
str_data = saveStream.str();
SaveToDB();
OUT_SAVE_INST_DATA_COMPLETE;
}
}
uint32 GetData(uint32 data)
@@ -172,6 +186,30 @@ struct TRINITY_DLL_DECL instance_blood_furnace : public ScriptedInstance
return 0;
}
const char* Save()
{
return str_data.c_str();
}
void Load(const char* in)
{
if (!in)
{
OUT_LOAD_INST_DATA_FAIL;
return;
}
OUT_LOAD_INST_DATA(in);
std::istringstream loadStream(in);
loadStream >> Encounter[0] >> Encounter[1] >> Encounter[2];
for(uint8 i = 0; i < ENCOUNTERS; ++i)
if (Encounter[i] == IN_PROGRESS || Encounter[i] == FAIL)
Encounter[i] = NOT_STARTED;
OUT_LOAD_INST_DATA_COMPLETE;
}
};
@@ -111,7 +111,7 @@ struct TRINITY_DLL_DECL boss_midnightAI : public ScriptedAI
m_creature->GetMotionMaster()->MoveIdle();
if (Unit *pAttumen = Unit::GetUnit(*m_creature, Attumen))
{
pAttumen->SetUInt32Value(UNIT_FIELD_DISPLAYID, MOUNTED_DISPLAYID);
pAttumen->SetDisplayId(MOUNTED_DISPLAYID);
pAttumen->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
if(pAttumen->getVictim())
{
@@ -137,7 +137,7 @@ struct TRINITY_DLL_DECL netherspite_infernalAI : public ScriptedAI
{
if(spell->Id == SPELL_INFERNAL_RELAY)
{
m_creature->SetUInt32Value(UNIT_FIELD_DISPLAYID, m_creature->GetUInt32Value(UNIT_FIELD_NATIVEDISPLAYID));
m_creature->SetDisplayId(m_creature->GetUInt32Value(UNIT_FIELD_NATIVEDISPLAYID));
m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
HellfireTimer = 4000;
CleanupTimer = 170000;
@@ -368,7 +368,7 @@ struct TRINITY_DLL_DECL boss_malchezaarAI : public ScriptedAI
if (Infernal)
{
Infernal->SetUInt32Value(UNIT_FIELD_DISPLAYID, INFERNAL_MODEL_INVISIBLE);
Infernal->SetDisplayId(INFERNAL_MODEL_INVISIBLE);
Infernal->setFaction(m_creature->getFaction());
if(point)
CAST_AI(netherspite_infernalAI, Infernal->AI())->point=point;
@@ -82,7 +82,7 @@ struct TRINITY_DLL_DECL boss_noxxionAI : public ScriptedAI
m_creature->setFaction(14);
m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
//Noxxion model
m_creature->SetUInt32Value(UNIT_FIELD_DISPLAYID,11172);
m_creature->SetDisplayId(11172);
Invisible = false;
//m_creature->m_canMove = true;
} else if (Invisible)
@@ -119,7 +119,7 @@ struct TRINITY_DLL_DECL boss_noxxionAI : public ScriptedAI
m_creature->setFaction(35);
m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
// Invisible Model
m_creature->SetUInt32Value(UNIT_FIELD_DISPLAYID,11686);
m_creature->SetDisplayId(11686);
SummonAdds(m_creature->getVictim());
SummonAdds(m_creature->getVictim());
SummonAdds(m_creature->getVictim());
@@ -83,7 +83,7 @@ struct TRINITY_DLL_DECL boss_jandicebarovAI : public ScriptedAI
//Become visible again
m_creature->setFaction(14);
m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
m_creature->SetUInt32Value(UNIT_FIELD_DISPLAYID,11073); //Jandice Model
m_creature->SetDisplayId(11073); //Jandice Model
Invisible = false;
} else if (Invisible)
{
@@ -114,7 +114,7 @@ struct TRINITY_DLL_DECL boss_jandicebarovAI : public ScriptedAI
m_creature->InterruptNonMeleeSpells(false);
m_creature->setFaction(35);
m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
m_creature->SetUInt32Value(UNIT_FIELD_DISPLAYID,11686); // Invisible Model
m_creature->SetDisplayId(11686); // Invisible Model
DoModifyThreatPercent(m_creature->getVictim(),-99);
//Summon 10 Illusions attacking random gamers
@@ -1470,17 +1470,17 @@ struct TRINITY_DLL_DECL npc_lord_illidan_stormrageAI : public ScriptedAI
{
if(rand()%3 == 1 && FelguardCount<2)
{
Spawn->SetUInt32Value(UNIT_FIELD_DISPLAYID,18654);
Spawn->SetDisplayId(18654);
++FelguardCount;
}
else if(DreadlordCount < 3)
{
Spawn->SetUInt32Value(UNIT_FIELD_DISPLAYID,19991);
Spawn->SetDisplayId(19991);
++DreadlordCount;
}
else if(FelguardCount<2)
{
Spawn->SetUInt32Value(UNIT_FIELD_DISPLAYID,18654);
Spawn->SetDisplayId(18654);
++FelguardCount;
}
}
@@ -112,7 +112,7 @@ struct TRINITY_DLL_DECL boss_dathrohan_balnazzarAI : public ScriptedAI
// MindControl_Timer = 10000;
Transformed = false;
m_creature->SetUInt32Value(UNIT_FIELD_DISPLAYID,10545);
m_creature->SetDisplayId(10545);
m_creature->SetFloatValue(OBJECT_FIELD_SCALE_X, 1.00f);
}
@@ -207,7 +207,7 @@ struct TRINITY_DLL_DECL boss_dathrohan_balnazzarAI : public ScriptedAI
{
//Cast
DoCast(m_creature,SPELL_BALNAZZARTRANSFORM); //restore hp, mana and stun
m_creature->SetUInt32Value(UNIT_FIELD_DISPLAYID,10691); //then change disaply id
m_creature->SetDisplayId(10691); //then change disaply id
m_creature->SetFloatValue(OBJECT_FIELD_SCALE_X, 3.00f); //then, change size
Transformed = true;
}
@@ -56,9 +56,9 @@ struct TRINITY_DLL_DECL boss_magistrate_barthilasAI : public ScriptedAI
AngerCount = 0;
if (m_creature->isAlive())
m_creature->SetUInt32Value(UNIT_FIELD_DISPLAYID, MODEL_NORMAL);
m_creature->SetDisplayId(MODEL_NORMAL);
else
m_creature->SetUInt32Value(UNIT_FIELD_DISPLAYID, MODEL_HUMAN);
m_creature->SetDisplayId(MODEL_HUMAN);
}
void MoveInLineOfSight(Unit *who)
@@ -70,7 +70,7 @@ struct TRINITY_DLL_DECL boss_magistrate_barthilasAI : public ScriptedAI
void JustDied(Unit* Killer)
{
m_creature->SetUInt32Value(UNIT_FIELD_DISPLAYID, MODEL_HUMAN);
m_creature->SetDisplayId(MODEL_HUMAN);
}
void EnterCombat(Unit *who)
@@ -55,7 +55,7 @@ struct TRINITY_DLL_DECL boss_lajAI : public ScriptedAI
void Reset()
{
m_creature->SetUInt32Value(UNIT_FIELD_DISPLAYID,MODEL_DEFAULT);
m_creature->SetDisplayId(MODEL_DEFAULT);
m_creature->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_SHADOW, true);
m_creature->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_ARCANE, false);
m_creature->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_FIRE, false);
@@ -74,7 +74,7 @@ struct TRINITY_DLL_DECL boss_lajAI : public ScriptedAI
switch(rand()%5)
{
case 0:
m_creature->SetUInt32Value(UNIT_FIELD_DISPLAYID,MODEL_DEFAULT);
m_creature->SetDisplayId(MODEL_DEFAULT);
m_creature->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_SHADOW, true);
m_creature->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_ARCANE, false);
m_creature->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_FIRE, false);
@@ -82,7 +82,7 @@ struct TRINITY_DLL_DECL boss_lajAI : public ScriptedAI
m_creature->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_NATURE, false);
break;
case 1:
m_creature->SetUInt32Value(UNIT_FIELD_DISPLAYID,MODEL_ARCANE);
m_creature->SetDisplayId(MODEL_ARCANE);
m_creature->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_SHADOW, false);
m_creature->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_ARCANE, true);
m_creature->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_FIRE, false);
@@ -90,7 +90,7 @@ struct TRINITY_DLL_DECL boss_lajAI : public ScriptedAI
m_creature->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_NATURE, false);
break;
case 2:
m_creature->SetUInt32Value(UNIT_FIELD_DISPLAYID,MODEL_FIRE);
m_creature->SetDisplayId(MODEL_FIRE);
m_creature->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_SHADOW, false);
m_creature->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_ARCANE, false);
m_creature->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_FIRE, true);
@@ -98,7 +98,7 @@ struct TRINITY_DLL_DECL boss_lajAI : public ScriptedAI
m_creature->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_NATURE, false);
break;
case 3:
m_creature->SetUInt32Value(UNIT_FIELD_DISPLAYID,MODEL_FROST);
m_creature->SetDisplayId(MODEL_FROST);
m_creature->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_SHADOW, false);
m_creature->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_ARCANE, false);
m_creature->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_FIRE, false);
@@ -106,7 +106,7 @@ struct TRINITY_DLL_DECL boss_lajAI : public ScriptedAI
m_creature->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_NATURE, false);
break;
case 4:
m_creature->SetUInt32Value(UNIT_FIELD_DISPLAYID,MODEL_NATURE);
m_creature->SetDisplayId(MODEL_NATURE);
m_creature->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_SHADOW, false);
m_creature->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_ARCANE, false);
m_creature->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_FIRE, false);
@@ -129,7 +129,7 @@ struct TRINITY_DLL_DECL boss_high_astromancer_solarianAI : public ScriptedAI
m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
m_creature->SetVisibility(VISIBILITY_ON);
m_creature->SetFloatValue(OBJECT_FIELD_SCALE_X, defaultsize);
m_creature->SetUInt32Value(UNIT_FIELD_DISPLAYID, MODEL_HUMAN);
m_creature->SetDisplayId(MODEL_HUMAN);
Summons.DespawnAll();
}
@@ -155,7 +155,7 @@ struct TRINITY_DLL_DECL boss_high_astromancer_solarianAI : public ScriptedAI
void JustDied(Unit *victim)
{
m_creature->SetFloatValue(OBJECT_FIELD_SCALE_X, defaultsize);
m_creature->SetUInt32Value(UNIT_FIELD_DISPLAYID, MODEL_HUMAN);
m_creature->SetDisplayId(MODEL_HUMAN);
DoScriptText(SAY_DEATH, m_creature);
if(pInstance)
@@ -381,7 +381,7 @@ struct TRINITY_DLL_DECL boss_high_astromancer_solarianAI : public ScriptedAI
DoScriptText(SAY_VOIDA, m_creature);
DoScriptText(SAY_VOIDB, m_creature);
m_creature->SetArmor(WV_ARMOR);
m_creature->SetUInt32Value(UNIT_FIELD_DISPLAYID, MODEL_VOIDWALKER);
m_creature->SetDisplayId(MODEL_VOIDWALKER);
m_creature->SetFloatValue(OBJECT_FIELD_SCALE_X, defaultsize*2.5f);
}
@@ -89,7 +89,7 @@ struct TRINITY_DLL_DECL boss_ingvar_the_plundererAI : public ScriptedAI
void Reset()
{
if(undead) // Visual Hack
m_creature->SetUInt32Value(UNIT_FIELD_DISPLAYID, MODEL_INGVAR_HUMAN);
m_creature->SetDisplayId(MODEL_INGVAR_HUMAN);
undead = false;
event_inProgress = false;
@@ -362,7 +362,7 @@ struct TRINITY_DLL_DECL mob_annhylde_the_callerAI : public ScriptedAI
{
ingvar->RemoveAurasDueToSpell(SPELL_SCOURG_RESURRECTION_DUMMY);
//ingvar->CastSpell(ingvar,SPELL_INGVAR_TRANSFORM,false);
ingvar->SetUInt32Value(UNIT_FIELD_DISPLAYID, MODEL_INGVAR_UNDEAD); // Visual Hack - when he dies he becomes human model -> wrong
ingvar->SetDisplayId(MODEL_INGVAR_UNDEAD); // Visual Hack - when he dies he becomes human model -> wrong
Creature* c_ingvar = ingvar;
CAST_AI(boss_ingvar_the_plundererAI, (c_ingvar->AI()))->StartZombiePhase();
@@ -392,7 +392,7 @@ struct TRINITY_DLL_DECL boss_hex_lord_malacrassAI : public ScriptedAI
}
else
{
trigger->SetUInt32Value(UNIT_FIELD_DISPLAYID, 11686);
trigger->SetDisplayId(11686);
trigger->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
trigger->CastSpell(target, SPELL_SIPHON_SOUL, true);
trigger->GetMotionMaster()->MoveChase(m_creature);
@@ -73,7 +73,7 @@ struct TRINITY_DLL_DECL boss_arlokkAI : public ScriptedAI
PhaseTwo = false;
VanishedOnce = false;
m_creature->SetUInt32Value(UNIT_FIELD_DISPLAYID,15218);
m_creature->SetDisplayId(15218);
m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
}
@@ -85,7 +85,7 @@ struct TRINITY_DLL_DECL boss_arlokkAI : public ScriptedAI
void JustDied(Unit* Killer)
{
DoScriptText(SAY_DEATH, m_creature);
m_creature->SetUInt32Value(UNIT_FIELD_DISPLAYID,15218);
m_creature->SetDisplayId(15218);
m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
if(pInstance)
@@ -143,7 +143,7 @@ struct TRINITY_DLL_DECL boss_arlokkAI : public ScriptedAI
if (Vanish_Timer < diff)
{
//Invisble Model
m_creature->SetUInt32Value(UNIT_FIELD_DISPLAYID,11686);
m_creature->SetDisplayId(11686);
m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
//m_creature->CombatStop();
DoResetThreat();
@@ -159,7 +159,7 @@ struct TRINITY_DLL_DECL boss_arlokkAI : public ScriptedAI
Unit* target = NULL;
target = SelectUnit(SELECT_TARGET_RANDOM,0);
//The Panther Model
m_creature->SetUInt32Value(UNIT_FIELD_DISPLAYID,15215);
m_creature->SetDisplayId(15215);
m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
const CreatureInfo *cinfo = m_creature->GetCreatureInfo();
@@ -169,7 +169,7 @@ struct TRINITY_DLL_DECL boss_arlokkAI : public ScriptedAI
if(target)
AttackStart(target);
//The Panther Model
m_creature->SetUInt32Value(UNIT_FIELD_DISPLAYID,15215);
m_creature->SetDisplayId(15215);
m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
PhaseTwo = true;
}else Visible_Timer -= diff;
@@ -196,7 +196,7 @@ struct TRINITY_DLL_DECL boss_jeklikAI : public ScriptedAI
}
else
{
m_creature->SetUInt32Value(UNIT_FIELD_DISPLAYID,15219);
m_creature->SetDisplayId(15219);
DoResetThreat();
PhaseTwo = true;
}
@@ -187,7 +187,7 @@ struct TRINITY_DLL_DECL boss_marliAI : public ScriptedAI
if (TransformBack_Timer < diff)
{
m_creature->SetUInt32Value(UNIT_FIELD_DISPLAYID,15220);
m_creature->SetDisplayId(15220);
const CreatureInfo *cinfo = m_creature->GetCreatureInfo();
m_creature->SetBaseWeaponDamage(BASE_ATTACK, MINDAMAGE, (cinfo->mindmg +((cinfo->mindmg/100) * 1)));
m_creature->SetBaseWeaponDamage(BASE_ATTACK, MAXDAMAGE, (cinfo->maxdmg +((cinfo->maxdmg/100) * 1)));