*Merge
--HG-- branch : trunk
This commit is contained in:
@@ -0,0 +1,15 @@
|
||||
DELETE FROM `spell_pet_auras` WHERE `spell` IN(56314, 56315, 56316, 56317, 56318);
|
||||
INSERT INTO `spell_pet_auras` VALUES
|
||||
(56314,0,57447),
|
||||
(56315,0,57482),
|
||||
(56316,0,57453),
|
||||
(56317,0,57457),
|
||||
(56318,0,57458);
|
||||
|
||||
DELETE FROM `spell_linked_spell` WHERE `spell_trigger` IN(57447, 57482, 57453, 57457, 57458);
|
||||
INSERT INTO `spell_linked_spell` (`spell_trigger`, `spell_effect`, `type`, `comment`) VALUES
|
||||
(57447,57485,2,'Kindred Spirits'),
|
||||
(57482,57484,2,'Kindred Spirits'),
|
||||
(57453,57483,2,'Kindred Spirits'),
|
||||
(57457,57482,2,'Kindred Spirits'),
|
||||
(57458,57475,2,'Kindred Spirits');
|
||||
+6
-1
@@ -14318,7 +14318,12 @@ INSERT INTO `spell_pet_auras` VALUES
|
||||
(23822,17252,35703),
|
||||
(23823,17252,35704),
|
||||
(23824,17252,35705),
|
||||
(23825,17252,35706);
|
||||
(23825,17252,35706),
|
||||
(56314,0,57447),
|
||||
(56315,0,57482),
|
||||
(56316,0,57453),
|
||||
(56317,0,57457),
|
||||
(56318,0,57458);
|
||||
/*!40000 ALTER TABLE `spell_pet_auras` ENABLE KEYS */;
|
||||
UNLOCK TABLES;
|
||||
|
||||
|
||||
@@ -33,7 +33,7 @@ INSERT INTO `spell_linked_spell` (`spell_trigger`, `spell_effect`, `type`, `comm
|
||||
(-49011, 49009, 0, 'Wyvern Sting'),
|
||||
(-49012, 49010, 0, 'Wyvern Sting'),
|
||||
( 47585, 60069, 0, 'Dispersion (transform/regen)'),
|
||||
(-47953, 60406, 0, 'Divine hymn buff to enemies'),
|
||||
# (-47953, 60406, 0, 'Divine hymn buff to enemies'), removed in 313
|
||||
( 48265, 49772, 2, 'Unholy Presence'),
|
||||
( 49772, 55222, 2, 'Unholy Presence'),
|
||||
( 48263, 61261, 2, 'Frost Presence'),
|
||||
@@ -50,11 +50,11 @@ INSERT INTO `spell_linked_spell` (`spell_trigger`, `spell_effect`, `type`, `comm
|
||||
( 17767, 54501, 2, 'Consume Shadows - Rank 1'),
|
||||
( 53563, 53651, 2, 'Beacon of Light'),
|
||||
( 16857, 60089, 0, 'Faerie Fire (Feral) Rank 1'),
|
||||
( 17390, 60089, 0, 'Faerie Fire (Feral) Rank 2'),
|
||||
( 17391, 60089, 0, 'Faerie Fire (Feral) Rank 3'),
|
||||
( 17392, 60089, 0, 'Faerie Fire (Feral) Rank 4'),
|
||||
( 27011, 60089, 0, 'Faerie Fire (Feral) Rank 5'),
|
||||
( 48475, 60089, 0, 'Faerie Fire (Feral) Rank 6'),
|
||||
# ( 17390, 60089, 0, 'Faerie Fire (Feral) Rank 2'), removed in 313
|
||||
# ( 17391, 60089, 0, 'Faerie Fire (Feral) Rank 3'),
|
||||
# ( 17392, 60089, 0, 'Faerie Fire (Feral) Rank 4'),
|
||||
# ( 27011, 60089, 0, 'Faerie Fire (Feral) Rank 5'),
|
||||
# ( 48475, 60089, 0, 'Faerie Fire (Feral) Rank 6'),
|
||||
( 781, 56446, 0, 'Disengage'),
|
||||
( 57635, 57636, 0, 'Disengage'),
|
||||
( 60932, 60934, 0, 'Disengage'),
|
||||
@@ -74,6 +74,11 @@ INSERT INTO `spell_linked_spell` (`spell_trigger`, `spell_effect`, `type`, `comm
|
||||
( -52610, -62071, 0, 'Savage Roar'),
|
||||
(51209, 55095, 1, 'Hungering cold - frost fever'),
|
||||
(50334, 58923, 2, 'Berserk - modify target number aura'),
|
||||
(57447,57485,2,'Kindred Spirits'),
|
||||
(57482,57484,2,'Kindred Spirits'),
|
||||
(57453,57483,2,'Kindred Spirits'),
|
||||
(57457,57482,2,'Kindred Spirits'),
|
||||
(57458,57475,2,'Kindred Spirits'),
|
||||
|
||||
-- Creature
|
||||
( 36574, 36650, 0, 'Apply Phase Slip Vulnerability'),
|
||||
|
||||
@@ -71,7 +71,7 @@ void SummonList::DespawnAll()
|
||||
erase(begin());
|
||||
summon->SetVisibility(VISIBILITY_OFF);
|
||||
if(summon->isSummon() && !summon->isPet())
|
||||
((TempSummon*)summon)->UnSummon();
|
||||
CAST_SUM(summon)->UnSummon();
|
||||
else
|
||||
summon->setDeathState(JUST_DIED);
|
||||
summon->RemoveCorpse();
|
||||
|
||||
@@ -13,18 +13,15 @@
|
||||
#include "CreatureAIImpl.h"
|
||||
#include "InstanceData.h"
|
||||
|
||||
#define USE_DYNAMIC_CAST
|
||||
#ifdef USE_DYNAMIC_CAST
|
||||
#define CAST_PLR(a) (dynamic_cast<Player*>(a))
|
||||
#define CAST_CRE(a) (dynamic_cast<Creature*>(a))
|
||||
#define CAST_VEH(a) (dynamic_cast<Vehicle*>(a))
|
||||
#define CAST_AI(a,b) (dynamic_cast<a*>(b))
|
||||
#else
|
||||
#define CAST_PLR(a) (static_cast<Player*>(a))
|
||||
#define CAST_CRE(a) (static_cast<Creature*>(a))
|
||||
#define CAST_VEH(a) (static_cast<Vehicle*>(a))
|
||||
#define CAST_AI(a,b) (static_cast<a*>(b))
|
||||
#endif
|
||||
#define SCRIPT_CAST_TYPE dynamic_cast
|
||||
//#define SCRIPT_CAST_TYPE static_cast
|
||||
|
||||
#define CAST_PLR(a) (SCRIPT_CAST_TYPE<Player*>(a))
|
||||
#define CAST_CRE(a) (SCRIPT_CAST_TYPE<Creature*>(a))
|
||||
#define CAST_VEH(a) (SCRIPT_CAST_TYPE<Vehicle*>(a))
|
||||
#define CAST_SUM(a) (SCRIPT_CAST_TYPE<TempSummon*>(a))
|
||||
#define CAST_PET(a) (SCRIPT_CAST_TYPE<Pet*>(a))
|
||||
#define CAST_AI(a,b) (SCRIPT_CAST_TYPE<a*>(b))
|
||||
|
||||
#define GET_SPELL(a) (const_cast<SpellEntry*>(GetSpellStore()->LookupEntry(a)))
|
||||
|
||||
@@ -84,10 +81,10 @@ struct TRINITY_DLL_DECL ScriptedAI : public CreatureAI
|
||||
void SummonedCreatureDespawn(Creature* /*unit*/) {}
|
||||
|
||||
// Called when hit by a spell
|
||||
void SpellHit(Unit* caster, const SpellEntry*) {}
|
||||
void SpellHit(Unit* caster, const SpellEntry *spell) {}
|
||||
|
||||
// Called when spell hits a target
|
||||
void SpellHitTarget(Unit* target, const SpellEntry*) {}
|
||||
void SpellHitTarget(Unit* target, const SpellEntry *spell) {}
|
||||
|
||||
//Called at waypoint reached or PointMovement end
|
||||
void MovementInform(uint32 type, uint32 id){}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,223 +0,0 @@
|
||||
/* Copyright (C) 2006 - 2008 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
|
||||
* This program is free software licensed under GPL version 2
|
||||
* Please see the included DOCS/LICENSE.TXT for more information */
|
||||
|
||||
#ifndef SC_EVENTAI_H
|
||||
#define SC_EVENTAI_H
|
||||
|
||||
#define MAX_ACTIONS 3
|
||||
|
||||
enum Event_Types
|
||||
{
|
||||
EVENT_T_TIMER = 0, //InitialMin, InitialMax, RepeatMin, RepeatMax
|
||||
EVENT_T_TIMER_OOC = 1, //InitialMin, InitialMax, RepeatMin, RepeatMax
|
||||
EVENT_T_HP = 2, //HPMax%, HPMin%, RepeatMin, RepeatMax
|
||||
EVENT_T_MANA = 3, //ManaMax%,ManaMin% RepeatMin, RepeatMax
|
||||
EVENT_T_AGGRO = 4, //NONE
|
||||
EVENT_T_KILL = 5, //RepeatMin, RepeatMax
|
||||
EVENT_T_DEATH = 6, //NONE
|
||||
EVENT_T_EVADE = 7, //NONE
|
||||
EVENT_T_SPELLHIT = 8, //SpellID, School, RepeatMin, RepeatMax
|
||||
EVENT_T_RANGE = 9, //MinDist, MaxDist, RepeatMin, RepeatMax
|
||||
EVENT_T_OOC_LOS = 10, //NoHostile, NoFriendly, RepeatMin, RepeatMax
|
||||
EVENT_T_SPAWNED = 11, //NONE
|
||||
EVENT_T_TARGET_HP = 12, //HPMax%, HPMin%, RepeatMin, RepeatMax
|
||||
EVENT_T_TARGET_CASTING = 13, //RepeatMin, RepeatMax
|
||||
EVENT_T_FRIENDLY_HP = 14, //HPDeficit, Radius, RepeatMin, RepeatMax
|
||||
EVENT_T_FRIENDLY_IS_CC = 15, //DispelType, Radius, RepeatMin, RepeatMax
|
||||
EVENT_T_FRIENDLY_MISSING_BUFF = 16, //SpellId, Radius, RepeatMin, RepeatMax
|
||||
EVENT_T_SUMMONED_UNIT = 17, //CreatureId, RepeatMin, RepeatMax
|
||||
EVENT_T_TARGET_MANA = 18, //ManaMax%, ManaMin%, RepeatMin, RepeatMax
|
||||
EVENT_T_QUEST_ACCEPT = 19, //QuestID
|
||||
EVENT_T_QUEST_COMPLETE = 20, //
|
||||
EVENT_T_REACHED_HOME = 21, //NONE
|
||||
|
||||
EVENT_T_END,
|
||||
};
|
||||
|
||||
enum Action_Types
|
||||
{
|
||||
ACTION_T_NONE = 0, //No action
|
||||
ACTION_T_TEXT = 1, //-TextId1, optionally -TextId2, optionally -TextId3(if -TextId2 exist). If more than just -TextId1 is defined, randomize. Negative values.
|
||||
ACTION_T_SET_FACTION = 2, //FactionId (or 0 for default)
|
||||
ACTION_T_MORPH_TO_ENTRY_OR_MODEL = 3, //Creature_template entry(param1) OR ModelId (param2) (or 0 for both to demorph)
|
||||
ACTION_T_SOUND = 4, //SoundId
|
||||
ACTION_T_EMOTE = 5, //EmoteId
|
||||
ACTION_T_RANDOM_SAY = 6, //UNUSED
|
||||
ACTION_T_RANDOM_YELL = 7, //UNUSED
|
||||
ACTION_T_RANDOM_TEXTEMOTE = 8, //UNUSED
|
||||
ACTION_T_RANDOM_SOUND = 9, //SoundId1, SoundId2, SoundId3 (-1 in any field means no output if randomed that field)
|
||||
ACTION_T_RANDOM_EMOTE = 10, //EmoteId1, EmoteId2, EmoteId3 (-1 in any field means no output if randomed that field)
|
||||
ACTION_T_CAST = 11, //SpellId, Target, CastFlags
|
||||
ACTION_T_SUMMON = 12, //CreatureID, Target, Duration in ms
|
||||
ACTION_T_THREAT_SINGLE_PCT = 13, //Threat%, Target
|
||||
ACTION_T_THREAT_ALL_PCT = 14, //Threat%
|
||||
ACTION_T_QUEST_EVENT = 15, //QuestID, Target
|
||||
ACTION_T_CASTCREATUREGO = 16, //QuestID, SpellId, Target
|
||||
ACTION_T_SET_UNIT_FIELD = 17, //Field_Number, Value, Target
|
||||
ACTION_T_SET_UNIT_FLAG = 18, //Flags (may be more than one field OR'd together), Target
|
||||
ACTION_T_REMOVE_UNIT_FLAG = 19, //Flags (may be more than one field OR'd together), Target
|
||||
ACTION_T_AUTO_ATTACK = 20, //AllowAttackState (0 = stop attack, anything else means continue attacking)
|
||||
ACTION_T_COMBAT_MOVEMENT = 21, //AllowCombatMovement (0 = stop combat based movement, anything else continue attacking)
|
||||
ACTION_T_SET_PHASE = 22, //Phase
|
||||
ACTION_T_INC_PHASE = 23, //Value (may be negative to decrement phase, should not be 0)
|
||||
ACTION_T_EVADE = 24, //No Params
|
||||
ACTION_T_FLEE = 25, //No Params
|
||||
ACTION_T_QUEST_EVENT_ALL = 26, //QuestID
|
||||
ACTION_T_CASTCREATUREGO_ALL = 27, //QuestId, SpellId
|
||||
ACTION_T_REMOVEAURASFROMSPELL = 28, //Target, Spellid
|
||||
ACTION_T_RANGED_MOVEMENT = 29, //Distance, Angle
|
||||
ACTION_T_RANDOM_PHASE = 30, //PhaseId1, PhaseId2, PhaseId3
|
||||
ACTION_T_RANDOM_PHASE_RANGE = 31, //PhaseMin, PhaseMax
|
||||
ACTION_T_SUMMON_ID = 32, //CreatureId, Target, SpawnId
|
||||
ACTION_T_KILLED_MONSTER = 33, //CreatureId, Target
|
||||
ACTION_T_SET_INST_DATA = 34, //Field, Data
|
||||
ACTION_T_SET_INST_DATA64 = 35, //Field, Target
|
||||
ACTION_T_UPDATE_TEMPLATE = 36, //Entry, Team
|
||||
ACTION_T_DIE = 37, //No Params
|
||||
ACTION_T_ZONE_COMBAT_PULSE = 38, //No Params
|
||||
|
||||
ACTION_T_SET_ACTIVE = 101, //Apply
|
||||
ACTION_T_SET_AGGRESSIVE = 102, //Apply
|
||||
ACTION_T_ATTACK_START_PULSE = 103, //Distance
|
||||
ACTION_T_SUMMON_GO = 104, //GameObjectID, DespawnTime in ms
|
||||
|
||||
ACTION_T_END,
|
||||
};
|
||||
|
||||
enum Target
|
||||
{
|
||||
//Self (m_creature)
|
||||
TARGET_T_SELF = 0, //Self cast
|
||||
|
||||
//Hostile targets (if pet then returns pet owner)
|
||||
TARGET_T_HOSTILE, //Our current target (ie: highest aggro)
|
||||
TARGET_T_HOSTILE_SECOND_AGGRO, //Second highest aggro (generaly used for cleaves and some special attacks)
|
||||
TARGET_T_HOSTILE_LAST_AGGRO, //Dead last on aggro (no idea what this could be used for)
|
||||
TARGET_T_HOSTILE_RANDOM, //Just any random target on our threat list
|
||||
TARGET_T_HOSTILE_RANDOM_NOT_TOP, //Any random target except top threat
|
||||
|
||||
//Invoker targets (if pet then returns pet owner)
|
||||
TARGET_T_ACTION_INVOKER, //Unit who caused this Event to occur (only works for EVENT_T_AGGRO, EVENT_T_KILL, EVENT_T_DEATH, EVENT_T_SPELLHIT, EVENT_T_OOC_LOS, EVENT_T_FRIENDLY_HP, EVENT_T_FRIENDLY_IS_CC, EVENT_T_FRIENDLY_MISSING_BUFF)
|
||||
|
||||
//Hostile targets (including pets)
|
||||
TARGET_T_HOSTILE_WPET, //Current target (can be a pet)
|
||||
TARGET_T_HOSTILE_WPET_SECOND_AGGRO, //Second highest aggro (generaly used for cleaves and some special attacks)
|
||||
TARGET_T_HOSTILE_WPET_LAST_AGGRO, //Dead last on aggro (no idea what this could be used for)
|
||||
TARGET_T_HOSTILE_WPET_RANDOM, //Just any random target on our threat list
|
||||
TARGET_T_HOSTILE_WPET_RANDOM_NOT_TOP, //Any random target except top threat
|
||||
|
||||
TARGET_T_ACTION_INVOKER_WPET,
|
||||
|
||||
TARGET_T_END
|
||||
};
|
||||
|
||||
enum CastFlags
|
||||
{
|
||||
CAST_INTURRUPT_PREVIOUS = 0x01, //Interrupt any spell casting
|
||||
CAST_TRIGGERED = 0x02, //Triggered (this makes spell cost zero mana and have no cast time)
|
||||
CAST_FORCE_CAST = 0x04, //Forces cast even if creature is out of mana or out of range
|
||||
CAST_NO_MELEE_IF_OOM = 0x08, //Prevents creature from entering melee if out of mana or out of range
|
||||
CAST_FORCE_TARGET_SELF = 0x10, //Forces the target to cast this spell on itself
|
||||
CAST_AURA_NOT_PRESENT = 0x20, //Only casts the spell if the target does not have an aura from the spell
|
||||
};
|
||||
|
||||
enum EventFlags
|
||||
{
|
||||
EFLAG_REPEATABLE = 0x01, //Event repeats
|
||||
EFLAG_NORMAL = 0x02, //Event only occurs in Normal instance difficulty
|
||||
EFLAG_HEROIC = 0x04, //Event only occurs in Heroic instance difficulty
|
||||
EFLAG_RESERVED_3 = 0x08,
|
||||
EFLAG_RESERVED_4 = 0x10,
|
||||
EFLAG_RESERVED_5 = 0x20,
|
||||
EFLAG_RESERVED_6 = 0x40,
|
||||
EFLAG_DEBUG_ONLY = 0x80, //Event only occurs in debug build of SD2 only
|
||||
};
|
||||
|
||||
struct EventAI_Event
|
||||
{
|
||||
uint32 event_id;
|
||||
|
||||
uint32 creature_id;
|
||||
|
||||
uint16 event_type;
|
||||
uint32 event_inverse_phase_mask;
|
||||
uint8 event_chance;
|
||||
uint8 event_flags;
|
||||
union
|
||||
{
|
||||
uint32 event_param1;
|
||||
int32 event_param1_s;
|
||||
};
|
||||
union
|
||||
{
|
||||
uint32 event_param2;
|
||||
int32 event_param2_s;
|
||||
};
|
||||
union
|
||||
{
|
||||
uint32 event_param3;
|
||||
int32 event_param3_s;
|
||||
};
|
||||
union
|
||||
{
|
||||
uint32 event_param4;
|
||||
int32 event_param4_s;
|
||||
};
|
||||
|
||||
struct _action
|
||||
{
|
||||
uint16 type;
|
||||
union
|
||||
{
|
||||
uint32 param1;
|
||||
int32 param1_s;
|
||||
};
|
||||
union
|
||||
{
|
||||
uint32 param2;
|
||||
int32 param2_s;
|
||||
};
|
||||
union
|
||||
{
|
||||
uint32 param3;
|
||||
int32 param3_s;
|
||||
};
|
||||
}action[MAX_ACTIONS];
|
||||
};
|
||||
|
||||
//Event_Map
|
||||
extern UNORDERED_MAP<uint32, std::vector<EventAI_Event> > EventAI_Event_Map;
|
||||
|
||||
struct EventAI_Summon
|
||||
{
|
||||
uint32 id;
|
||||
|
||||
float position_x;
|
||||
float position_y;
|
||||
float position_z;
|
||||
float orientation;
|
||||
uint32 SpawnTimeSecs;
|
||||
};
|
||||
|
||||
//EventSummon_Map
|
||||
extern UNORDERED_MAP<uint32, EventAI_Summon> EventAI_Summon_Map;
|
||||
|
||||
//EventAI Error handling
|
||||
extern uint32 EAI_ErrorLevel;
|
||||
/*
|
||||
|
||||
struct EventAI_CreatureError
|
||||
{
|
||||
bool ListEmpty;
|
||||
bool NoInstance;
|
||||
};
|
||||
|
||||
//Error prevention list
|
||||
extern UNORDERED_MAP<uint32, EventAI_CreatureError> EventAI_CreatureErrorPreventionList;
|
||||
|
||||
//Defines
|
||||
#define EVENTAI_EMPTY_EVENTLIST "TSCR: Eventlist for Creature %i is empty but creature is using Mob_EventAI. Preventing EventAI on this creature."
|
||||
*/
|
||||
#endif
|
||||
|
||||
@@ -103,7 +103,7 @@ struct TRINITY_DLL_DECL npc_testAI : public npc_escortAI
|
||||
npc_escortAI::UpdateAI(diff);
|
||||
|
||||
//Combat check
|
||||
if (InCombat && m_creature->getVictim())
|
||||
if (m_creature->isInCombat() && m_creature->getVictim())
|
||||
{
|
||||
if (DeathCoilTimer < diff)
|
||||
{
|
||||
|
||||
@@ -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)
|
||||
@@ -115,7 +127,7 @@ void npc_escortAI::UpdateAI(const uint32 diff)
|
||||
|
||||
m_creature->setDeathState(JUST_DIED);
|
||||
m_creature->SetHealth(0);
|
||||
m_creature->CombatStop();
|
||||
m_creature->CombatStop(true);
|
||||
m_creature->DeleteThreatList();
|
||||
m_creature->Respawn();
|
||||
m_creature->GetMotionMaster()->Clear(true);
|
||||
@@ -161,7 +173,7 @@ void npc_escortAI::UpdateAI(const uint32 diff)
|
||||
|
||||
m_creature->setDeathState(JUST_DIED);
|
||||
m_creature->SetHealth(0);
|
||||
m_creature->CombatStop();
|
||||
m_creature->CombatStop(true);
|
||||
m_creature->DeleteThreatList();
|
||||
m_creature->Respawn();
|
||||
m_creature->GetMotionMaster()->Clear(true);
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -43,12 +43,11 @@ EndContentData */
|
||||
# npc_chicken_cluck
|
||||
#########*/
|
||||
|
||||
#define EMOTE_A_HELLO -1070004
|
||||
#define EMOTE_H_HELLO -1070005
|
||||
#define EMOTE_CLUCK_TEXT2 -1070006
|
||||
#define EMOTE_HELLO -1070004
|
||||
#define EMOTE_CLUCK_TEXT -1070006
|
||||
|
||||
#define QUEST_CLUCK 3861
|
||||
#define FACTION_FRIENDLY 84
|
||||
#define FACTION_FRIENDLY 35
|
||||
#define FACTION_CHICKEN 31
|
||||
|
||||
struct TRINITY_DLL_DECL npc_chicken_cluckAI : public ScriptedAI
|
||||
@@ -60,7 +59,6 @@ struct TRINITY_DLL_DECL npc_chicken_cluckAI : public ScriptedAI
|
||||
void Reset()
|
||||
{
|
||||
ResetFlagTimer = 120000;
|
||||
|
||||
m_creature->setFaction(FACTION_CHICKEN);
|
||||
m_creature->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_QUESTGIVER);
|
||||
}
|
||||
@@ -85,31 +83,24 @@ struct TRINITY_DLL_DECL npc_chicken_cluckAI : public ScriptedAI
|
||||
|
||||
void ReceiveEmote( Player *player, uint32 emote )
|
||||
{
|
||||
if( emote == TEXTEMOTE_CHICKEN )
|
||||
switch( emote )
|
||||
{
|
||||
if( player->GetTeam() == ALLIANCE )
|
||||
{
|
||||
if( rand()%30 == 1 )
|
||||
{
|
||||
if( player->GetQuestStatus(QUEST_CLUCK) == QUEST_STATUS_NONE )
|
||||
case TEXTEMOTE_CHICKEN:
|
||||
if( player->GetQuestStatus(QUEST_CLUCK) == QUEST_STATUS_NONE && rand()%30 == 1 )
|
||||
{
|
||||
m_creature->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_QUESTGIVER);
|
||||
m_creature->setFaction(FACTION_FRIENDLY);
|
||||
DoScriptText(EMOTE_A_HELLO, m_creature);
|
||||
DoScriptText(EMOTE_HELLO, m_creature);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
DoScriptText(EMOTE_H_HELLO,m_creature);
|
||||
}
|
||||
if( emote == TEXTEMOTE_CHEER && player->GetTeam() == ALLIANCE )
|
||||
{
|
||||
break;
|
||||
case TEXTEMOTE_CHEER:
|
||||
if( player->GetQuestStatus(QUEST_CLUCK) == QUEST_STATUS_COMPLETE )
|
||||
{
|
||||
m_creature->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_QUESTGIVER);
|
||||
m_creature->setFaction(FACTION_FRIENDLY);
|
||||
DoScriptText(EMOTE_CLUCK_TEXT2, m_creature);
|
||||
DoScriptText(EMOTE_CLUCK_TEXT, m_creature);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
@@ -350,8 +350,6 @@ struct TRINITY_DLL_DECL mob_ethereal_apprenticeAI : public ScriptedAI
|
||||
isFireboltTurn = true;
|
||||
}
|
||||
|
||||
void Aggro(Unit* who) {}
|
||||
|
||||
void UpdateAI(const uint32 diff)
|
||||
{
|
||||
if(!UpdateVictim())
|
||||
|
||||
+1
-1
@@ -54,7 +54,7 @@ struct TRINITY_DLL_DECL boss_talon_king_ikissAI : public ScriptedAI
|
||||
{
|
||||
boss_talon_king_ikissAI(Creature *c) : ScriptedAI(c)
|
||||
{
|
||||
pInstance = (c->GetInstanceData());
|
||||
pInstance = c->GetInstanceData();
|
||||
}
|
||||
|
||||
ScriptedInstance* pInstance;
|
||||
|
||||
+7
-11
@@ -30,21 +30,17 @@ struct TRINITY_DLL_DECL instance_sethekk_halls : public ScriptedInstance
|
||||
{
|
||||
instance_sethekk_halls(Map *map) : ScriptedInstance(map) {Initialize();};
|
||||
|
||||
GameObject *IkissDoor;
|
||||
uint64 m_uiIkissDoorGUID;
|
||||
|
||||
void Initialize()
|
||||
{
|
||||
IkissDoor = NULL;
|
||||
m_uiIkissDoorGUID = 0;
|
||||
}
|
||||
|
||||
void OnGameObjectCreate(GameObject *go, bool add)
|
||||
void OnGameObjectCreate(GameObject *pGo, bool add)
|
||||
{
|
||||
switch(go->GetEntry())
|
||||
{
|
||||
case IKISS_DOOR:
|
||||
IkissDoor = go;
|
||||
break;
|
||||
}
|
||||
if (pGo->GetEntry() == IKISS_DOOR)
|
||||
m_uiIkissDoorGUID = pGo->GetGUID();
|
||||
}
|
||||
|
||||
void SetData(uint32 type, uint32 data)
|
||||
@@ -52,8 +48,8 @@ struct TRINITY_DLL_DECL instance_sethekk_halls : public ScriptedInstance
|
||||
switch(type)
|
||||
{
|
||||
case DATA_IKISSDOOREVENT:
|
||||
if( IkissDoor )
|
||||
IkissDoor->SetGoState(GO_STATE_ACTIVE);
|
||||
if (data == DONE)
|
||||
DoUseDoorOrButton(m_uiIkissDoorGUID,DAY*IN_MILISECONDS);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -46,7 +46,7 @@ struct TRINITY_DLL_DECL boss_ambassador_hellmawAI : public ScriptedAI
|
||||
{
|
||||
boss_ambassador_hellmawAI(Creature *c) : ScriptedAI(c)
|
||||
{
|
||||
pInstance = (c->GetInstanceData());
|
||||
pInstance = c->GetInstanceData();
|
||||
HeroicMode = m_creature->GetMap()->IsHeroic();
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -55,7 +55,7 @@ struct TRINITY_DLL_DECL boss_blackheart_the_inciterAI : public ScriptedAI
|
||||
{
|
||||
boss_blackheart_the_inciterAI(Creature *c) : ScriptedAI(c)
|
||||
{
|
||||
pInstance = (c->GetInstanceData());
|
||||
pInstance = c->GetInstanceData();
|
||||
}
|
||||
|
||||
ScriptedInstance *pInstance;
|
||||
|
||||
+1
-1
@@ -126,7 +126,7 @@ struct TRINITY_DLL_DECL boss_grandmaster_vorpilAI : public ScriptedAI
|
||||
{
|
||||
boss_grandmaster_vorpilAI(Creature *c) : ScriptedAI(c)
|
||||
{
|
||||
pInstance = (c->GetInstanceData());
|
||||
pInstance = c->GetInstanceData();
|
||||
HeroicMode = m_creature->GetMap()->IsHeroic();
|
||||
Intro = false;
|
||||
}
|
||||
|
||||
+12
-25
@@ -73,8 +73,16 @@ struct TRINITY_DLL_DECL instance_shadow_labyrinth : public ScriptedInstance
|
||||
{
|
||||
switch(go->GetEntry())
|
||||
{
|
||||
case REFECTORY_DOOR: RefectoryDoorGUID = go->GetGUID(); break;
|
||||
case SCREAMING_HALL_DOOR: ScreamingHallDoorGUID = go->GetGUID(); break;
|
||||
case REFECTORY_DOOR:
|
||||
RefectoryDoorGUID = go->GetGUID();
|
||||
if (Encounter[2] == DONE)
|
||||
DoUseDoorOrButton(RefectoryDoorGUID);
|
||||
break;
|
||||
case SCREAMING_HALL_DOOR:
|
||||
ScreamingHallDoorGUID = go->GetGUID();
|
||||
if (Encounter[3] == DONE)
|
||||
DoUseDoorOrButton(ScreamingHallDoorGUID);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -92,23 +100,6 @@ struct TRINITY_DLL_DECL instance_shadow_labyrinth : public ScriptedInstance
|
||||
}
|
||||
}
|
||||
|
||||
Player* GetPlayerInMap()
|
||||
{
|
||||
Map::PlayerList const& players = instance->GetPlayers();
|
||||
|
||||
if (!players.isEmpty())
|
||||
{
|
||||
for(Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr)
|
||||
{
|
||||
if (Player* plr = itr->getSource())
|
||||
return plr;
|
||||
}
|
||||
}
|
||||
|
||||
debug_log("TSCR: Instance Shadow Labyrinth: GetPlayerInMap, but PlayerList is empty!");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void SetData(uint32 type, uint32 data)
|
||||
{
|
||||
switch(type)
|
||||
@@ -134,17 +125,13 @@ struct TRINITY_DLL_DECL instance_shadow_labyrinth : public ScriptedInstance
|
||||
|
||||
case DATA_BLACKHEARTTHEINCITEREVENT:
|
||||
if( data == DONE )
|
||||
{
|
||||
HandleGameObject(RefectoryDoorGUID, true);
|
||||
}
|
||||
DoUseDoorOrButton(RefectoryDoorGUID);
|
||||
Encounter[2] = data;
|
||||
break;
|
||||
|
||||
case DATA_GRANDMASTERVORPILEVENT:
|
||||
if( data == DONE )
|
||||
{
|
||||
HandleGameObject(ScreamingHallDoorGUID, true);
|
||||
}
|
||||
DoUseDoorOrButton(ScreamingHallDoorGUID);
|
||||
Encounter[3] = data;
|
||||
break;
|
||||
|
||||
|
||||
@@ -50,7 +50,7 @@ struct TRINITY_DLL_DECL boss_elder_nadoxAI : public ScriptedAI
|
||||
{
|
||||
boss_elder_nadoxAI(Creature *c) : ScriptedAI(c)
|
||||
{
|
||||
pInstance = (c->GetInstanceData());
|
||||
pInstance = c->GetInstanceData();
|
||||
HeroicMode = c->GetMap()->IsHeroic();
|
||||
}
|
||||
|
||||
@@ -182,7 +182,7 @@ struct TRINITY_DLL_DECL mob_ahnkahar_nerubianAI : public ScriptedAI
|
||||
{
|
||||
mob_ahnkahar_nerubianAI(Creature *c) : ScriptedAI(c)
|
||||
{
|
||||
pInstance = (c->GetInstanceData());
|
||||
pInstance = c->GetInstanceData();
|
||||
Reset();
|
||||
}
|
||||
|
||||
|
||||
@@ -159,7 +159,7 @@ struct TRINITY_DLL_DECL npc_draenei_survivorAI : public ScriptedAI
|
||||
m_creature->GetMotionMaster()->MoveIdle();
|
||||
m_creature->setDeathState(JUST_DIED);
|
||||
m_creature->SetHealth(0);
|
||||
m_creature->CombatStop();
|
||||
m_creature->CombatStop(true);
|
||||
m_creature->DeleteThreatList();
|
||||
m_creature->RemoveCorpse();
|
||||
}else RunAwayTimer -= diff;
|
||||
@@ -582,8 +582,6 @@ struct TRINITY_DLL_DECL npc_nestlewood_owlkinAI : public ScriptedAI
|
||||
m_creature->SetVisibility(VISIBILITY_ON);
|
||||
}
|
||||
|
||||
void Aggro(Unit *who) {}
|
||||
|
||||
void UpdateAI(const uint32 diff)
|
||||
{
|
||||
//timer gets adjusted by the triggered aura effect
|
||||
@@ -595,7 +593,7 @@ struct TRINITY_DLL_DECL npc_nestlewood_owlkinAI : public ScriptedAI
|
||||
m_creature->SetVisibility(VISIBILITY_OFF);
|
||||
m_creature->setDeathState(JUST_DIED);
|
||||
m_creature->SetHealth(0);
|
||||
m_creature->CombatStop();
|
||||
m_creature->CombatStop(true);
|
||||
m_creature->DeleteThreatList();
|
||||
m_creature->RemoveCorpse();
|
||||
}else DespawnTimer -= diff;
|
||||
@@ -624,7 +622,7 @@ bool EffectDummyCreature_npc_nestlewood_owlkin(Unit *pCaster, uint32 spellId, ui
|
||||
pCreatureTarget->UpdateEntry(ENTRY_OWLKIN_INOC);
|
||||
|
||||
//set despawn timer, since we want to remove creature after a short time
|
||||
((npc_nestlewood_owlkinAI*)pCreatureTarget->AI())->DespawnTimer = 15000;
|
||||
CAST_AI(npc_nestlewood_owlkinAI, pCreatureTarget->AI())->DespawnTimer = 15000;
|
||||
|
||||
//always return true when we are handling this spell and effect
|
||||
return true;
|
||||
|
||||
@@ -120,7 +120,7 @@ struct TRINITY_DLL_DECL npc_taskmaster_fizzuleAI : public ScriptedAI
|
||||
{
|
||||
m_creature->RemoveAllAuras();
|
||||
m_creature->DeleteThreatList();
|
||||
m_creature->CombatStop();
|
||||
m_creature->CombatStop(true);
|
||||
|
||||
m_creature->StopMoving();
|
||||
m_creature->GetMotionMaster()->MoveIdle();
|
||||
|
||||
@@ -92,7 +92,7 @@ struct TRINITY_DLL_DECL mob_doom_blossomAI : public ScriptedAI
|
||||
CheckTeronTimer = 5000;
|
||||
}else CheckTeronTimer -= diff;
|
||||
|
||||
if(ShadowBoltTimer < diff && InCombat)
|
||||
if(ShadowBoltTimer < diff && m_creature->isInCombat())
|
||||
{
|
||||
DoCast(SelectUnit(SELECT_TARGET_RANDOM, 0), SPELL_SHADOWBOLT);
|
||||
ShadowBoltTimer = 10000;
|
||||
@@ -255,7 +255,7 @@ struct TRINITY_DLL_DECL boss_teron_gorefiendAI : public ScriptedAI
|
||||
m_creature->AddThreat(who, 1.0f);
|
||||
}
|
||||
|
||||
if(!InCombat && !Intro && m_creature->IsWithinDistInMap(who, 60.0f) && (who->GetTypeId() == TYPEID_PLAYER))
|
||||
if(!m_creature->isInCombat() && !Intro && m_creature->IsWithinDistInMap(who, 60.0f) && (who->GetTypeId() == TYPEID_PLAYER))
|
||||
{
|
||||
if(pInstance)
|
||||
pInstance->SetData(DATA_TERONGOREFIENDEVENT, IN_PROGRESS);
|
||||
@@ -427,7 +427,6 @@ struct TRINITY_DLL_DECL boss_teron_gorefiendAI : public ScriptedAI
|
||||
DoomBlossom->setFaction(m_creature->getFaction());
|
||||
DoomBlossom->AddThreat(target, 1.0f);
|
||||
((mob_doom_blossomAI*)DoomBlossom->AI())->SetTeronGUID(m_creature->GetGUID());
|
||||
((mob_doom_blossomAI*)DoomBlossom->AI())->InCombat = true;
|
||||
SetThreatList(DoomBlossom);
|
||||
SummonDoomBlossomTimer = 35000;
|
||||
}
|
||||
|
||||
@@ -67,7 +67,7 @@ struct TRINITY_DLL_DECL boss_gurtogg_bloodboilAI : public ScriptedAI
|
||||
{
|
||||
boss_gurtogg_bloodboilAI(Creature *c) : ScriptedAI(c)
|
||||
{
|
||||
pInstance = (c->GetInstanceData());
|
||||
pInstance = c->GetInstanceData();
|
||||
}
|
||||
|
||||
ScriptedInstance* pInstance;
|
||||
|
||||
@@ -24,7 +24,7 @@ EndScriptData */
|
||||
#include "precompiled.h"
|
||||
#include "def_black_temple.h"
|
||||
|
||||
#define GETGO(obj, guid) GameObject* obj = GameObject::GetGameObject(*m_creature, guid)
|
||||
#define GETGO(obj, guid) GameObject* obj = pInstance->instance->GetGameObject(pInstance->GetData64(guid))
|
||||
#define GETUNIT(unit, guid) Unit* unit = Unit::GetUnit(*m_creature, guid)
|
||||
#define GETCRE(cre, guid) Creature* cre = Unit::GetCreature(*m_creature, guid)
|
||||
#define HPPCT(unit) unit->GetHealth()*100 / unit->GetMaxHealth()
|
||||
@@ -366,7 +366,7 @@ struct TRINITY_DLL_DECL boss_illidan_stormrageAI : public ScriptedAI
|
||||
{
|
||||
boss_illidan_stormrageAI(Creature* c) : ScriptedAI(c), Summons(m_creature)
|
||||
{
|
||||
pInstance = (c->GetInstanceData());
|
||||
pInstance = c->GetInstanceData();
|
||||
m_creature->CastSpell(m_creature, SPELL_DUAL_WIELD, true);
|
||||
|
||||
SpellEntry *TempSpell = GET_SPELL(SPELL_SHADOWFIEND_PASSIVE);
|
||||
@@ -459,9 +459,8 @@ struct TRINITY_DLL_DECL boss_illidan_stormrageAI : public ScriptedAI
|
||||
|
||||
for(uint8 i = DATA_GAMEOBJECT_ILLIDAN_DOOR_R; i < DATA_GAMEOBJECT_ILLIDAN_DOOR_L + 1; ++i)
|
||||
{
|
||||
GameObject* Door = GameObject::GetGameObject((*m_creature), pInstance->GetData64(i));
|
||||
if(Door)
|
||||
Door->SetGoState(GO_STATE_ACTIVE); // Open Doors
|
||||
if (GameObject* pDoor = pInstance->instance->GetGameObject(pInstance->GetData64(i)))
|
||||
pDoor->SetGoState(GO_STATE_ACTIVE); // Open Doors
|
||||
}
|
||||
}
|
||||
|
||||
@@ -566,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);
|
||||
}
|
||||
@@ -582,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);
|
||||
}
|
||||
@@ -610,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
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -655,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)
|
||||
{
|
||||
@@ -973,7 +972,7 @@ struct TRINITY_DLL_DECL npc_akama_illidanAI : public ScriptedAI
|
||||
{
|
||||
npc_akama_illidanAI(Creature* c) : ScriptedAI(c)
|
||||
{
|
||||
pInstance = (c->GetInstanceData());
|
||||
pInstance = c->GetInstanceData();
|
||||
}
|
||||
|
||||
ScriptedInstance* pInstance;
|
||||
@@ -1038,10 +1037,9 @@ struct TRINITY_DLL_DECL npc_akama_illidanAI : public ScriptedAI
|
||||
// Do not call reset in Akama's evade mode, as this will stop him from summoning minions after he kills the first bit
|
||||
void EnterEvadeMode()
|
||||
{
|
||||
m_creature->InterruptNonMeleeSpells(true);
|
||||
m_creature->RemoveAllAuras();
|
||||
m_creature->DeleteThreatList();
|
||||
m_creature->CombatStop();
|
||||
m_creature->CombatStop(true);
|
||||
}
|
||||
|
||||
void EnterCombat(Unit *who) {}
|
||||
@@ -1102,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);
|
||||
}
|
||||
@@ -1630,7 +1628,7 @@ struct TRINITY_DLL_DECL cage_trap_triggerAI : public ScriptedAI
|
||||
DespawnTimer = 5000;
|
||||
if(who->HasAura(SPELL_ENRAGE))
|
||||
who->RemoveAurasDueToSpell(SPELL_ENRAGE); // Dispel his enrage
|
||||
//if(GameObject* CageTrap = GameObject::GetGameObject(*m_creature, CageTrapGUID))
|
||||
//if(GameObject* CageTrap = pInstance->instance->GetGameObject(pInstance->GetData64(CageTrapGUID)))
|
||||
// CageTrap->SetLootState(GO_JUST_DEACTIVATED);
|
||||
}
|
||||
}
|
||||
@@ -1725,7 +1723,7 @@ struct TRINITY_DLL_DECL mob_parasitic_shadowfiendAI : public ScriptedAI
|
||||
{
|
||||
mob_parasitic_shadowfiendAI(Creature* c) : ScriptedAI(c)
|
||||
{
|
||||
pInstance = (c->GetInstanceData());
|
||||
pInstance = c->GetInstanceData();
|
||||
}
|
||||
|
||||
ScriptedInstance* pInstance;
|
||||
@@ -1795,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
|
||||
}
|
||||
};
|
||||
|
||||
@@ -1836,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);
|
||||
|
||||
@@ -80,7 +80,7 @@ struct TRINITY_DLL_DECL boss_shahrazAI : public ScriptedAI
|
||||
{
|
||||
boss_shahrazAI(Creature *c) : ScriptedAI(c)
|
||||
{
|
||||
pInstance = (c->GetInstanceData());
|
||||
pInstance = c->GetInstanceData();
|
||||
}
|
||||
|
||||
ScriptedInstance* pInstance;
|
||||
|
||||
@@ -120,7 +120,7 @@ struct TRINITY_DLL_DECL boss_reliquary_of_soulsAI : public ScriptedAI
|
||||
{
|
||||
boss_reliquary_of_soulsAI(Creature *c) : ScriptedAI(c)
|
||||
{
|
||||
pInstance = (c->GetInstanceData());
|
||||
pInstance = c->GetInstanceData();
|
||||
EssenceGUID = 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -167,7 +167,7 @@ struct TRINITY_DLL_DECL boss_shade_of_akamaAI : public ScriptedAI
|
||||
{
|
||||
boss_shade_of_akamaAI(Creature* c) : ScriptedAI(c), summons(m_creature)
|
||||
{
|
||||
pInstance = (c->GetInstanceData());
|
||||
pInstance = c->GetInstanceData();
|
||||
AkamaGUID = pInstance ? pInstance->GetData64(DATA_AKAMA_SHADE) : 0;
|
||||
m_creature->setActive(true);//if view distance is too low
|
||||
m_creature->ApplySpellImmune(0, IMMUNITY_STATE, SPELL_AURA_MOD_TAUNT, true);
|
||||
@@ -257,19 +257,14 @@ struct TRINITY_DLL_DECL boss_shade_of_akamaAI : public ScriptedAI
|
||||
{
|
||||
Channeler->RemoveCorpse();
|
||||
Channeler->Respawn();
|
||||
Channeler->InterruptNonMeleeSpells(true);
|
||||
Channeler->RemoveAurasDueToSpell(SPELL_SHADE_SOUL_CHANNEL);
|
||||
}
|
||||
|
||||
if (Channeler->isAlive())
|
||||
{
|
||||
Channeler->CastSpell(m_creature, SPELL_SHADE_SOUL_CHANNEL, true);
|
||||
Channeler->CastSpell(m_creature, SPELL_SHADE_SOUL_CHANNEL_2, true);
|
||||
Channeler->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
|
||||
GridSearcherSucceeded = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}else error_log("SD2 ERROR: No Channelers are stored in the list. This encounter will not work properly");
|
||||
}
|
||||
}
|
||||
@@ -507,7 +502,7 @@ struct TRINITY_DLL_DECL npc_akamaAI : public ScriptedAI
|
||||
{
|
||||
ShadeHasDied = false;
|
||||
StartCombat = false;
|
||||
pInstance = (c->GetInstanceData());
|
||||
pInstance = c->GetInstanceData();
|
||||
ShadeGUID = pInstance ? pInstance->GetData64(DATA_SHADEOFAKAMA) : NOT_STARTED;
|
||||
m_creature->setActive(true);
|
||||
EventBegun = false;
|
||||
|
||||
@@ -67,7 +67,7 @@ struct TRINITY_DLL_DECL boss_supremusAI : public ScriptedAI
|
||||
{
|
||||
boss_supremusAI(Creature *c) : ScriptedAI(c), summons(m_creature)
|
||||
{
|
||||
pInstance = (c->GetInstanceData());
|
||||
pInstance = c->GetInstanceData();
|
||||
}
|
||||
|
||||
ScriptedInstance* pInstance;
|
||||
@@ -105,10 +105,12 @@ struct TRINITY_DLL_DECL boss_supremusAI : public ScriptedAI
|
||||
|
||||
void ToggleDoors(bool close)
|
||||
{
|
||||
if(GameObject* Doors = GameObject::GetGameObject(*m_creature, pInstance->GetData64(DATA_GAMEOBJECT_SUPREMUS_DOORS)))
|
||||
if(GameObject* Doors = pInstance->instance->GetGameObject(pInstance->GetData64(DATA_GAMEOBJECT_SUPREMUS_DOORS)))
|
||||
{
|
||||
if(close) Doors->SetGoState(GO_STATE_READY); // Closed
|
||||
else Doors->SetGoState(GO_STATE_ACTIVE); // Open
|
||||
if(close)
|
||||
Doors->SetGoState(GO_STATE_READY); // Closed
|
||||
else
|
||||
Doors->SetGoState(GO_STATE_ACTIVE); // Open
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -197,7 +197,7 @@ struct TRINITY_DLL_DECL boss_teron_gorefiendAI : public ScriptedAI
|
||||
{
|
||||
boss_teron_gorefiendAI(Creature *c) : ScriptedAI(c)
|
||||
{
|
||||
pInstance = (c->GetInstanceData());
|
||||
pInstance = c->GetInstanceData();
|
||||
}
|
||||
|
||||
ScriptedInstance* pInstance;
|
||||
|
||||
@@ -62,7 +62,7 @@ struct TRINITY_DLL_DECL boss_najentusAI : public ScriptedAI
|
||||
{
|
||||
boss_najentusAI(Creature *c) : ScriptedAI(c)
|
||||
{
|
||||
pInstance = (c->GetInstanceData());
|
||||
pInstance = c->GetInstanceData();
|
||||
}
|
||||
|
||||
ScriptedInstance* pInstance;
|
||||
|
||||
@@ -192,7 +192,7 @@ struct TRINITY_DLL_DECL mob_illidari_councilAI : public ScriptedAI
|
||||
{
|
||||
mob_illidari_councilAI(Creature *c) : ScriptedAI(c)
|
||||
{
|
||||
pInstance = (c->GetInstanceData());
|
||||
pInstance = c->GetInstanceData();
|
||||
for(uint8 i = 0; i < 4; ++i)
|
||||
Council[i] = 0;
|
||||
}
|
||||
@@ -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) {}
|
||||
@@ -348,7 +348,7 @@ struct TRINITY_DLL_DECL boss_illidari_councilAI : public ScriptedAI
|
||||
{
|
||||
boss_illidari_councilAI(Creature* c) : ScriptedAI(c)
|
||||
{
|
||||
pInstance = (c->GetInstanceData());
|
||||
pInstance = c->GetInstanceData();
|
||||
for(uint8 i = 0; i < 4; ++i)
|
||||
Council[i] = 0;
|
||||
LoadedGUIDs = false;
|
||||
|
||||
@@ -91,7 +91,7 @@ struct TRINITY_DLL_DECL npc_grimstoneAI : public npc_escortAI
|
||||
{
|
||||
npc_grimstoneAI(Creature *c) : npc_escortAI(c)
|
||||
{
|
||||
pInstance = (c->GetInstanceData());
|
||||
pInstance = c->GetInstanceData();
|
||||
MobSpawnId = rand()%6;
|
||||
}
|
||||
|
||||
@@ -622,7 +622,7 @@ struct TRINITY_DLL_DECL npc_marshal_windsorAI : public npc_escortAI
|
||||
{
|
||||
npc_marshal_windsorAI(Creature *c) : npc_escortAI(c)
|
||||
{
|
||||
pInstance = (c->GetInstanceData());
|
||||
pInstance = c->GetInstanceData();
|
||||
}
|
||||
|
||||
void WaypointReached(uint32 i)
|
||||
@@ -1079,7 +1079,7 @@ struct TRINITY_DLL_DECL npc_rocknotAI : public npc_escortAI
|
||||
{
|
||||
npc_rocknotAI(Creature *c) : npc_escortAI(c)
|
||||
{
|
||||
pInstance = (c->GetInstanceData());
|
||||
pInstance = c->GetInstanceData();
|
||||
}
|
||||
|
||||
ScriptedInstance* pInstance;
|
||||
@@ -1098,7 +1098,7 @@ struct TRINITY_DLL_DECL npc_rocknotAI : public npc_escortAI
|
||||
|
||||
void DoGo(uint32 id, uint32 state)
|
||||
{
|
||||
if (GameObject *go = GameObject::GetGameObject(*m_creature,pInstance->GetData64(id)))
|
||||
if (GameObject *go = pInstance->instance->GetGameObject(pInstance->GetData64(id)))
|
||||
go->SetGoState((GOState)state);
|
||||
}
|
||||
|
||||
|
||||
@@ -114,23 +114,6 @@ struct TRINITY_DLL_DECL instance_blackrock_depths : public ScriptedInstance
|
||||
Encounter[i] = NOT_STARTED;
|
||||
}
|
||||
|
||||
Player* GetPlayerInMap()
|
||||
{
|
||||
Map::PlayerList const& players = instance->GetPlayers();
|
||||
|
||||
if (!players.isEmpty())
|
||||
{
|
||||
for(Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr)
|
||||
{
|
||||
if (Player* plr = itr->getSource())
|
||||
return plr;
|
||||
}
|
||||
}
|
||||
|
||||
debug_log("TSCR: Instance Blackrock Depths: GetPlayerInMap, but PlayerList is empty!");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void OnCreatureCreate(Creature *creature, bool add)
|
||||
{
|
||||
switch(creature->GetEntry())
|
||||
@@ -166,14 +149,6 @@ struct TRINITY_DLL_DECL instance_blackrock_depths : public ScriptedInstance
|
||||
|
||||
void SetData(uint32 type, uint32 data)
|
||||
{
|
||||
Player *player = GetPlayerInMap();
|
||||
|
||||
if (!player)
|
||||
{
|
||||
debug_log("TSCR: Instance Blackrock Depths: SetData (Type: %u Data %u) cannot find any player.", type, data);
|
||||
return;
|
||||
}
|
||||
|
||||
debug_log("TSCR: Instance Blackrock Depths: SetData update (Type: %u Data %u)", type, data);
|
||||
|
||||
switch(type)
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -42,7 +42,7 @@ struct TRINITY_DLL_DECL boss_aeonusAI : public ScriptedAI
|
||||
{
|
||||
boss_aeonusAI(Creature *c) : ScriptedAI(c)
|
||||
{
|
||||
pInstance = (c->GetInstanceData());
|
||||
pInstance = c->GetInstanceData();
|
||||
HeroicMode = m_creature->GetMap()->IsHeroic();
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -42,7 +42,7 @@ struct TRINITY_DLL_DECL boss_chrono_lord_dejaAI : public ScriptedAI
|
||||
{
|
||||
boss_chrono_lord_dejaAI(Creature *c) : ScriptedAI(c)
|
||||
{
|
||||
pInstance = (c->GetInstanceData());
|
||||
pInstance = c->GetInstanceData();
|
||||
HeroicMode = m_creature->GetMap()->IsHeroic();
|
||||
}
|
||||
|
||||
|
||||
@@ -41,7 +41,7 @@ struct TRINITY_DLL_DECL boss_temporusAI : public ScriptedAI
|
||||
{
|
||||
boss_temporusAI(Creature *c) : ScriptedAI(c)
|
||||
{
|
||||
pInstance = (c->GetInstanceData());
|
||||
pInstance = c->GetInstanceData();
|
||||
HeroicMode = m_creature->GetMap()->IsHeroic();
|
||||
}
|
||||
|
||||
|
||||
@@ -58,7 +58,7 @@ struct TRINITY_DLL_DECL npc_medivh_bmAI : public ScriptedAI
|
||||
{
|
||||
npc_medivh_bmAI(Creature *c) : ScriptedAI(c)
|
||||
{
|
||||
pInstance = (c->GetInstanceData());
|
||||
pInstance = c->GetInstanceData();
|
||||
}
|
||||
|
||||
ScriptedInstance *pInstance;
|
||||
@@ -244,7 +244,7 @@ struct TRINITY_DLL_DECL npc_time_riftAI : public ScriptedAI
|
||||
{
|
||||
npc_time_riftAI(Creature *c) : ScriptedAI(c)
|
||||
{
|
||||
pInstance = (c->GetInstanceData());
|
||||
pInstance = c->GetInstanceData();
|
||||
}
|
||||
|
||||
ScriptedInstance *pInstance;
|
||||
|
||||
+35
-52
@@ -95,23 +95,6 @@ struct TRINITY_DLL_DECL instance_dark_portal : public ScriptedInstance
|
||||
NextPortal_Timer = 0;
|
||||
}
|
||||
|
||||
Player* GetPlayerInMap()
|
||||
{
|
||||
Map::PlayerList const& players = instance->GetPlayers();
|
||||
|
||||
if (!players.isEmpty())
|
||||
{
|
||||
for(Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr)
|
||||
{
|
||||
if (Player* plr = itr->getSource())
|
||||
return plr;
|
||||
}
|
||||
}
|
||||
|
||||
debug_log("TSCR: Instance Black Portal: GetPlayerInMap, but PlayerList is empty!");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void UpdateBMWorldState(uint32 id, uint32 state)
|
||||
{
|
||||
Map::PlayerList const& players = instance->GetPlayers();
|
||||
@@ -158,7 +141,7 @@ struct TRINITY_DLL_DECL instance_dark_portal : public ScriptedInstance
|
||||
//what other conditions to check?
|
||||
bool CanProgressEvent()
|
||||
{
|
||||
if (!GetPlayerInMap())
|
||||
if (instance->GetPlayers().isEmpty())
|
||||
return false;
|
||||
|
||||
return true;
|
||||
@@ -183,14 +166,6 @@ struct TRINITY_DLL_DECL instance_dark_portal : public ScriptedInstance
|
||||
|
||||
void SetData(uint32 type, uint32 data)
|
||||
{
|
||||
Player *player = GetPlayerInMap();
|
||||
|
||||
if (!player)
|
||||
{
|
||||
debug_log("TSCR: Instance Black Portal: SetData (Type: %u Data %u) cannot find any player.", type, data);
|
||||
return;
|
||||
}
|
||||
|
||||
switch(type)
|
||||
{
|
||||
case TYPE_MEDIVH:
|
||||
@@ -201,11 +176,11 @@ struct TRINITY_DLL_DECL instance_dark_portal : public ScriptedInstance
|
||||
|
||||
if (!mShieldPercent)
|
||||
{
|
||||
if (Unit *medivh = Unit::GetUnit(*player,MedivhGUID))
|
||||
if (Creature* pMedivh = instance->GetCreature(MedivhGUID))
|
||||
{
|
||||
if (medivh->isAlive())
|
||||
if (pMedivh->isAlive())
|
||||
{
|
||||
medivh->DealDamage(medivh, medivh->GetHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false);
|
||||
pMedivh->DealDamage(pMedivh, pMedivh->GetHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false);
|
||||
Encounter[0] = FAIL;
|
||||
Encounter[1] = NOT_STARTED;
|
||||
}
|
||||
@@ -225,11 +200,22 @@ struct TRINITY_DLL_DECL instance_dark_portal : public ScriptedInstance
|
||||
if (data == DONE)
|
||||
{
|
||||
//this may be completed further out in the post-event
|
||||
if (Unit *medivh = Unit::GetUnit(*player,MedivhGUID))
|
||||
{
|
||||
debug_log("TSCR: Instance Dark Portal: Event completed.");
|
||||
player->GroupEventHappens(QUEST_OPENING_PORTAL,medivh);
|
||||
player->GroupEventHappens(QUEST_MASTER_TOUCH,medivh);
|
||||
Map::PlayerList const& players = instance->GetPlayers();
|
||||
|
||||
if (!players.isEmpty())
|
||||
{
|
||||
for(Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr)
|
||||
{
|
||||
if (Player* pPlayer = itr->getSource())
|
||||
{
|
||||
if (pPlayer->GetQuestStatus(QUEST_OPENING_PORTAL) == QUEST_STATUS_INCOMPLETE)
|
||||
pPlayer->AreaExploredOrEventHappens(QUEST_OPENING_PORTAL);
|
||||
|
||||
if (pPlayer->GetQuestStatus(QUEST_MASTER_TOUCH) == QUEST_STATUS_INCOMPLETE)
|
||||
pPlayer->AreaExploredOrEventHappens(QUEST_MASTER_TOUCH);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -272,24 +258,25 @@ struct TRINITY_DLL_DECL instance_dark_portal : public ScriptedInstance
|
||||
return 0;
|
||||
}
|
||||
|
||||
Unit* SummonedPortalBoss(Unit* source)
|
||||
Creature* SummonedPortalBoss(Creature* pSource)
|
||||
{
|
||||
uint32 entry = RiftWaves[GetRiftWaveId()].PortalBoss;
|
||||
|
||||
if (entry == RIFT_BOSS)
|
||||
entry = RandRiftBoss();
|
||||
|
||||
float x,y,z;
|
||||
source->GetRandomPoint(source->GetPositionX(),source->GetPositionY(),source->GetPositionZ(),10.0f,x,y,z);
|
||||
pSource->GetRandomPoint(pSource->GetPositionX(),pSource->GetPositionY(),pSource->GetPositionZ(),10.0f,x,y,z);
|
||||
//normalize Z-level if we can, if rift is not at ground level.
|
||||
z = std::max(instance->GetHeight(x, y, MAX_HEIGHT), instance->GetWaterLevel(x, y));
|
||||
|
||||
debug_log("TSCR: Instance Dark Portal: Summoning rift boss entry %u.",entry);
|
||||
|
||||
Unit *Summon = source->SummonCreature(entry,x,y,z,source->GetOrientation(),
|
||||
Creature* pSummoned = pSource->SummonCreature(entry,x,y,z,pSource->GetOrientation(),
|
||||
TEMPSUMMON_TIMED_OR_DEAD_DESPAWN,600000);
|
||||
|
||||
if (Summon)
|
||||
return Summon;
|
||||
if (pSummoned)
|
||||
return pSummoned;
|
||||
|
||||
debug_log("TSCR: Instance Dark Portal: what just happened there? No boss, no loot, no fun...");
|
||||
return NULL;
|
||||
@@ -297,11 +284,7 @@ struct TRINITY_DLL_DECL instance_dark_portal : public ScriptedInstance
|
||||
|
||||
void DoSpawnPortal()
|
||||
{
|
||||
Player *player = GetPlayerInMap();
|
||||
if (!player)
|
||||
return;
|
||||
|
||||
if (Unit *medivh = Unit::GetUnit(*player,MedivhGUID))
|
||||
if (Creature* pMedivh = instance->GetCreature(MedivhGUID))
|
||||
{
|
||||
int tmp = rand()%(4-1);
|
||||
|
||||
@@ -311,26 +294,26 @@ struct TRINITY_DLL_DECL instance_dark_portal : public ScriptedInstance
|
||||
|
||||
CurrentRiftId = tmp;
|
||||
|
||||
Unit *temp = medivh->SummonCreature(C_TIME_RIFT,
|
||||
Creature* pTemp = pMedivh->SummonCreature(C_TIME_RIFT,
|
||||
PortalLocation[tmp][0],PortalLocation[tmp][1],PortalLocation[tmp][2],PortalLocation[tmp][3],
|
||||
TEMPSUMMON_CORPSE_DESPAWN,0);
|
||||
if (temp)
|
||||
if (pTemp)
|
||||
{
|
||||
|
||||
temp->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
|
||||
temp->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
|
||||
pTemp->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
|
||||
pTemp->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
|
||||
|
||||
|
||||
if (Unit* boss = SummonedPortalBoss(temp))
|
||||
if (Creature* pBoss = SummonedPortalBoss(pTemp))
|
||||
{
|
||||
if (boss->GetEntry() == C_AEONUS)
|
||||
if (pBoss->GetEntry() == C_AEONUS)
|
||||
{
|
||||
boss->AddThreat(medivh,0.0f);
|
||||
pBoss->AddThreat(pMedivh,0.0f);
|
||||
}
|
||||
else
|
||||
{
|
||||
boss->AddThreat(temp,0.0f);
|
||||
temp->CastSpell(boss,SPELL_RIFT_CHANNEL,false);
|
||||
pBoss->AddThreat(pTemp,0.0f);
|
||||
pTemp->CastSpell(pBoss,SPELL_RIFT_CHANNEL,false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -40,7 +40,7 @@ struct TRINITY_DLL_DECL boss_anetheronAI : public hyjal_trashAI
|
||||
{
|
||||
boss_anetheronAI(Creature *c) : hyjal_trashAI(c)
|
||||
{
|
||||
pInstance = (c->GetInstanceData());
|
||||
pInstance = c->GetInstanceData();
|
||||
go = false;
|
||||
pos = 0;
|
||||
SpellEntry *TempSpell = GET_SPELL(SPELL_SLEEP);
|
||||
@@ -225,7 +225,7 @@ struct TRINITY_DLL_DECL mob_towering_infernalAI : public ScriptedAI
|
||||
{
|
||||
mob_towering_infernalAI(Creature *c) : ScriptedAI(c)
|
||||
{
|
||||
pInstance = (c->GetInstanceData());
|
||||
pInstance = c->GetInstanceData();
|
||||
if(pInstance)
|
||||
AnetheronGUID = pInstance->GetData64(DATA_ANETHERON);
|
||||
}
|
||||
|
||||
@@ -76,7 +76,7 @@ struct mob_ancient_wispAI : public ScriptedAI
|
||||
{
|
||||
mob_ancient_wispAI(Creature* c) : ScriptedAI(c)
|
||||
{
|
||||
pInstance = (c->GetInstanceData());
|
||||
pInstance = c->GetInstanceData();
|
||||
}
|
||||
|
||||
ScriptedInstance* pInstance;
|
||||
@@ -206,7 +206,7 @@ struct TRINITY_DLL_DECL boss_archimondeAI : public hyjal_trashAI
|
||||
{
|
||||
boss_archimondeAI(Creature *c) : hyjal_trashAI(c)
|
||||
{
|
||||
pInstance = (c->GetInstanceData());
|
||||
pInstance = c->GetInstanceData();
|
||||
}
|
||||
|
||||
ScriptedInstance* pInstance;
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -31,7 +31,7 @@ struct TRINITY_DLL_DECL boss_azgalorAI : public hyjal_trashAI
|
||||
{
|
||||
boss_azgalorAI(Creature *c) : hyjal_trashAI(c)
|
||||
{
|
||||
pInstance = (c->GetInstanceData());
|
||||
pInstance = c->GetInstanceData();
|
||||
go = false;
|
||||
pos = 0;
|
||||
SpellEntry *TempSpell = GET_SPELL(SPELL_HOWL_OF_AZGALOR);
|
||||
@@ -187,7 +187,7 @@ struct TRINITY_DLL_DECL mob_lesser_doomguardAI : public hyjal_trashAI
|
||||
{
|
||||
mob_lesser_doomguardAI(Creature *c) : hyjal_trashAI(c)
|
||||
{
|
||||
pInstance = (c->GetInstanceData());
|
||||
pInstance = c->GetInstanceData();
|
||||
if(pInstance)
|
||||
AzgalorGUID = pInstance->GetData64(DATA_AZGALOR);
|
||||
}
|
||||
|
||||
@@ -28,7 +28,7 @@ struct TRINITY_DLL_DECL boss_kazrogalAI : public hyjal_trashAI
|
||||
{
|
||||
boss_kazrogalAI(Creature *c) : hyjal_trashAI(c)
|
||||
{
|
||||
pInstance = (c->GetInstanceData());
|
||||
pInstance = c->GetInstanceData();
|
||||
go = false;
|
||||
pos = 0;
|
||||
SpellEntry *TempSpell = GET_SPELL(SPELL_MARK);
|
||||
|
||||
@@ -34,7 +34,7 @@ struct TRINITY_DLL_DECL boss_rage_winterchillAI : public hyjal_trashAI
|
||||
{
|
||||
boss_rage_winterchillAI(Creature *c) : hyjal_trashAI(c)
|
||||
{
|
||||
pInstance = (c->GetInstanceData());
|
||||
pInstance = c->GetInstanceData();
|
||||
go = false;
|
||||
pos = 0;
|
||||
}
|
||||
|
||||
@@ -308,7 +308,7 @@ float HordeFirePos[65][8]=//spawn points for the fire visuals (GO) in the horde
|
||||
|
||||
hyjalAI::hyjalAI(Creature *c) : npc_escortAI(c), Summons(m_creature)
|
||||
{
|
||||
pInstance = (c->GetInstanceData());
|
||||
pInstance = c->GetInstanceData();
|
||||
VeinsSpawned[0] = false;
|
||||
VeinsSpawned[1] = false;
|
||||
for(uint8 i=0;i<14;i++)
|
||||
@@ -409,11 +409,10 @@ void hyjalAI::Reset()
|
||||
|
||||
void hyjalAI::EnterEvadeMode()
|
||||
{
|
||||
m_creature->InterruptNonMeleeSpells(true);
|
||||
if(m_creature->GetEntry() != JAINA)
|
||||
m_creature->RemoveAllAuras();
|
||||
m_creature->DeleteThreatList();
|
||||
m_creature->CombatStop();
|
||||
m_creature->CombatStop(true);
|
||||
m_creature->LoadCreaturesAddon();
|
||||
|
||||
if(m_creature->isAlive())
|
||||
@@ -728,8 +727,7 @@ void hyjalAI::DeSpawnVeins()
|
||||
if(!ai)return;
|
||||
for (uint8 i = 0; i<7; i++)
|
||||
{
|
||||
GameObject* gem = GameObject::GetGameObject((*m_creature), ai->VeinGUID[i]);
|
||||
if(gem)
|
||||
if (GameObject* gem = pInstance->instance->GetGameObject(pInstance->GetData64(ai->VeinGUID[i])))
|
||||
gem->RemoveFromWorld();
|
||||
}
|
||||
}else if (Faction)
|
||||
@@ -740,8 +738,7 @@ void hyjalAI::DeSpawnVeins()
|
||||
if(!ai)return;
|
||||
for (uint8 i = 7; i<14; i++)
|
||||
{
|
||||
GameObject* gem = GameObject::GetGameObject((*m_creature), ai->VeinGUID[i]);
|
||||
if(gem)
|
||||
if(GameObject* gem = pInstance->instance->GetGameObject(pInstance->GetData64(ai->VeinGUID[i])))
|
||||
gem->RemoveFromWorld();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -141,7 +141,7 @@ float HordeOverrunWP[21][3]=//waypoints in the horde base used in the end in the
|
||||
|
||||
hyjal_trashAI::hyjal_trashAI(Creature *c) : npc_escortAI(c)
|
||||
{
|
||||
pInstance = (c->GetInstanceData());
|
||||
pInstance = c->GetInstanceData();
|
||||
IsEvent = false;
|
||||
Delay = 0;
|
||||
LastOverronPos = 0;
|
||||
@@ -375,13 +375,13 @@ struct mob_giant_infernalAI : public hyjal_trashAI
|
||||
{
|
||||
mob_giant_infernalAI(Creature* c) : hyjal_trashAI(c)
|
||||
{
|
||||
pInstance = (c->GetInstanceData());
|
||||
pInstance = c->GetInstanceData();
|
||||
meteor = false;//call once!
|
||||
CanMove = false;
|
||||
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)
|
||||
{
|
||||
@@ -509,7 +509,7 @@ struct mob_abominationAI : public hyjal_trashAI
|
||||
{
|
||||
mob_abominationAI(Creature* c) : hyjal_trashAI(c)
|
||||
{
|
||||
pInstance = (c->GetInstanceData());
|
||||
pInstance = c->GetInstanceData();
|
||||
go = false;
|
||||
pos = 0;
|
||||
Reset();
|
||||
@@ -604,7 +604,7 @@ struct mob_ghoulAI : public hyjal_trashAI
|
||||
{
|
||||
mob_ghoulAI(Creature* c) : hyjal_trashAI(c)
|
||||
{
|
||||
pInstance = (c->GetInstanceData());
|
||||
pInstance = c->GetInstanceData();
|
||||
go = false;
|
||||
pos = 0;
|
||||
Reset();
|
||||
@@ -707,7 +707,7 @@ struct mob_necromancerAI : public hyjal_trashAI
|
||||
{
|
||||
mob_necromancerAI(Creature* c) : hyjal_trashAI(c), summons(m_creature)
|
||||
{
|
||||
pInstance = (c->GetInstanceData());
|
||||
pInstance = c->GetInstanceData();
|
||||
go = false;
|
||||
pos = 0;
|
||||
Reset();
|
||||
@@ -825,7 +825,7 @@ struct mob_bansheeAI : public hyjal_trashAI
|
||||
{
|
||||
mob_bansheeAI(Creature* c) : hyjal_trashAI(c)
|
||||
{
|
||||
pInstance = (c->GetInstanceData());
|
||||
pInstance = c->GetInstanceData();
|
||||
go = false;
|
||||
pos = 0;
|
||||
Reset();
|
||||
@@ -924,7 +924,7 @@ struct mob_crypt_fiendAI : public hyjal_trashAI
|
||||
{
|
||||
mob_crypt_fiendAI(Creature* c) : hyjal_trashAI(c)
|
||||
{
|
||||
pInstance = (c->GetInstanceData());
|
||||
pInstance = c->GetInstanceData();
|
||||
go = false;
|
||||
pos = 0;
|
||||
Reset();
|
||||
@@ -1010,7 +1010,7 @@ struct mob_fel_stalkerAI : public hyjal_trashAI
|
||||
{
|
||||
mob_fel_stalkerAI(Creature* c) : hyjal_trashAI(c)
|
||||
{
|
||||
pInstance = (c->GetInstanceData());
|
||||
pInstance = c->GetInstanceData();
|
||||
go = false;
|
||||
pos = 0;
|
||||
Reset();
|
||||
@@ -1096,7 +1096,7 @@ struct mob_frost_wyrmAI : public hyjal_trashAI
|
||||
{
|
||||
mob_frost_wyrmAI(Creature* c) : hyjal_trashAI(c)
|
||||
{
|
||||
pInstance = (c->GetInstanceData());
|
||||
pInstance = c->GetInstanceData();
|
||||
go = false;
|
||||
pos = 0;
|
||||
Reset();
|
||||
@@ -1207,7 +1207,7 @@ struct mob_gargoyleAI : public hyjal_trashAI
|
||||
{
|
||||
mob_gargoyleAI(Creature* c) : hyjal_trashAI(c)
|
||||
{
|
||||
pInstance = (c->GetInstanceData());
|
||||
pInstance = c->GetInstanceData();
|
||||
go = false;
|
||||
pos = 0;
|
||||
DummyTarget[0] = 0;DummyTarget[1] = 0;DummyTarget[2] = 0;
|
||||
|
||||
+1
-1
@@ -42,7 +42,7 @@ struct TRINITY_DLL_DECL boss_captain_skarlocAI : public ScriptedAI
|
||||
{
|
||||
boss_captain_skarlocAI(Creature *c) : ScriptedAI(c)
|
||||
{
|
||||
pInstance = (c->GetInstanceData());
|
||||
pInstance = c->GetInstanceData();
|
||||
}
|
||||
|
||||
ScriptedInstance *pInstance;
|
||||
|
||||
+1
-1
@@ -44,7 +44,7 @@ struct TRINITY_DLL_DECL boss_epoch_hunterAI : public ScriptedAI
|
||||
{
|
||||
boss_epoch_hunterAI(Creature *c) : ScriptedAI(c)
|
||||
{
|
||||
pInstance = (c->GetInstanceData());
|
||||
pInstance = c->GetInstanceData();
|
||||
}
|
||||
|
||||
ScriptedInstance *pInstance;
|
||||
|
||||
@@ -177,7 +177,7 @@ struct TRINITY_DLL_DECL npc_thrall_old_hillsbradAI : public npc_escortAI
|
||||
{
|
||||
npc_thrall_old_hillsbradAI(Creature *c) : npc_escortAI(c)
|
||||
{
|
||||
pInstance = (c->GetInstanceData());
|
||||
pInstance = c->GetInstanceData();
|
||||
m_creature->setActive(true);
|
||||
}
|
||||
|
||||
@@ -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 )
|
||||
{
|
||||
@@ -581,7 +581,7 @@ struct TRINITY_DLL_DECL npc_tarethaAI : public npc_escortAI
|
||||
{
|
||||
npc_tarethaAI(Creature *c) : npc_escortAI(c)
|
||||
{
|
||||
pInstance = (c->GetInstanceData());
|
||||
pInstance = c->GetInstanceData();
|
||||
}
|
||||
|
||||
ScriptedInstance *pInstance;
|
||||
|
||||
+4
-4
@@ -95,7 +95,7 @@ struct TRINITY_DLL_DECL boss_fathomlord_karathressAI : public ScriptedAI
|
||||
{
|
||||
boss_fathomlord_karathressAI(Creature *c) : ScriptedAI(c)
|
||||
{
|
||||
pInstance = (c->GetInstanceData());
|
||||
pInstance = c->GetInstanceData();
|
||||
Advisors[0] = 0;
|
||||
Advisors[1] = 0;
|
||||
Advisors[2] = 0;
|
||||
@@ -305,7 +305,7 @@ struct TRINITY_DLL_DECL boss_fathomguard_sharkkisAI : public ScriptedAI
|
||||
{
|
||||
boss_fathomguard_sharkkisAI(Creature *c) : ScriptedAI(c)
|
||||
{
|
||||
pInstance = (c->GetInstanceData());
|
||||
pInstance = c->GetInstanceData();
|
||||
}
|
||||
|
||||
ScriptedInstance* pInstance;
|
||||
@@ -449,7 +449,7 @@ struct TRINITY_DLL_DECL boss_fathomguard_tidalvessAI : public ScriptedAI
|
||||
{
|
||||
boss_fathomguard_tidalvessAI(Creature *c) : ScriptedAI(c)
|
||||
{
|
||||
pInstance = (c->GetInstanceData());
|
||||
pInstance = c->GetInstanceData();
|
||||
}
|
||||
|
||||
ScriptedInstance* pInstance;
|
||||
@@ -564,7 +564,7 @@ struct TRINITY_DLL_DECL boss_fathomguard_caribdisAI : public ScriptedAI
|
||||
{
|
||||
boss_fathomguard_caribdisAI(Creature *c) : ScriptedAI(c)
|
||||
{
|
||||
pInstance = (c->GetInstanceData());
|
||||
pInstance = c->GetInstanceData();
|
||||
}
|
||||
|
||||
ScriptedInstance* pInstance;
|
||||
|
||||
+174
-234
@@ -17,370 +17,310 @@
|
||||
/* 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();
|
||||
}
|
||||
|
||||
|
||||
+10
-13
@@ -132,7 +132,7 @@ struct TRINITY_DLL_DECL boss_lady_vashjAI : public ScriptedAI
|
||||
{
|
||||
boss_lady_vashjAI (Creature *c) : ScriptedAI(c)
|
||||
{
|
||||
pInstance = (c->GetInstanceData());
|
||||
pInstance = c->GetInstanceData();
|
||||
Intro = false;
|
||||
JustCreated = true;
|
||||
m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); //set it only once on creature create (no need do intro if wiped)
|
||||
@@ -158,7 +158,6 @@ struct TRINITY_DLL_DECL boss_lady_vashjAI : public ScriptedAI
|
||||
uint8 Phase;
|
||||
|
||||
bool Entangle;
|
||||
bool InCombat;
|
||||
bool Intro;
|
||||
bool CanAttack;
|
||||
bool JustCreated;
|
||||
@@ -181,7 +180,6 @@ struct TRINITY_DLL_DECL boss_lady_vashjAI : public ScriptedAI
|
||||
Phase = 0;
|
||||
|
||||
Entangle = false;
|
||||
InCombat = false;
|
||||
if(JustCreated)
|
||||
{
|
||||
CanAttack = false;
|
||||
@@ -241,7 +239,6 @@ struct TRINITY_DLL_DECL boss_lady_vashjAI : public ScriptedAI
|
||||
case 3: DoScriptText(SAY_AGGRO4, m_creature); break;
|
||||
}
|
||||
|
||||
InCombat = true;
|
||||
Phase = 1;
|
||||
|
||||
if(pInstance)
|
||||
@@ -266,7 +263,7 @@ struct TRINITY_DLL_DECL boss_lady_vashjAI : public ScriptedAI
|
||||
if(Phase != 2)
|
||||
AttackStart(who);
|
||||
|
||||
if(!InCombat)
|
||||
if(!m_creature->isInCombat())
|
||||
StartEvent();
|
||||
}
|
||||
|
||||
@@ -293,7 +290,7 @@ struct TRINITY_DLL_DECL boss_lady_vashjAI : public ScriptedAI
|
||||
if(Phase != 2)
|
||||
AttackStart(who);
|
||||
|
||||
if(!InCombat)
|
||||
if(!m_creature->isInCombat())
|
||||
StartEvent();
|
||||
}
|
||||
}
|
||||
@@ -340,7 +337,7 @@ struct TRINITY_DLL_DECL boss_lady_vashjAI : public ScriptedAI
|
||||
}
|
||||
}
|
||||
//to prevent abuses during phase 2
|
||||
if(Phase == 2 && !m_creature->getVictim() && InCombat)
|
||||
if(Phase == 2 && !m_creature->getVictim() && m_creature->isInCombat())
|
||||
{
|
||||
EnterEvadeMode();
|
||||
return;
|
||||
@@ -583,7 +580,7 @@ struct TRINITY_DLL_DECL mob_enchanted_elementalAI : public ScriptedAI
|
||||
{
|
||||
mob_enchanted_elementalAI(Creature *c) : ScriptedAI(c)
|
||||
{
|
||||
pInstance = (c->GetInstanceData());
|
||||
pInstance = c->GetInstanceData();
|
||||
}
|
||||
|
||||
ScriptedInstance *pInstance;
|
||||
@@ -672,7 +669,7 @@ struct TRINITY_DLL_DECL mob_enchanted_elementalAI : public ScriptedAI
|
||||
m_creature->DealDamage(m_creature, m_creature->GetMaxHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false);
|
||||
}
|
||||
}
|
||||
if(CAST_AI(boss_lady_vashjAI, Vashj->AI())->InCombat == false || CAST_AI(boss_lady_vashjAI, Vashj->AI())->Phase != 2 || Vashj->isDead())
|
||||
if(!Vashj->isInCombat() || CAST_AI(boss_lady_vashjAI, Vashj->AI())->Phase != 2 || Vashj->isDead())
|
||||
{
|
||||
//call Unsummon()
|
||||
m_creature->DealDamage(m_creature, m_creature->GetMaxHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false);
|
||||
@@ -688,7 +685,7 @@ struct TRINITY_DLL_DECL mob_tainted_elementalAI : public ScriptedAI
|
||||
{
|
||||
mob_tainted_elementalAI(Creature *c) : ScriptedAI(c)
|
||||
{
|
||||
pInstance = (c->GetInstanceData());
|
||||
pInstance = c->GetInstanceData();
|
||||
}
|
||||
|
||||
ScriptedInstance *pInstance;
|
||||
@@ -751,7 +748,7 @@ struct TRINITY_DLL_DECL mob_toxic_sporebatAI : public ScriptedAI
|
||||
{
|
||||
mob_toxic_sporebatAI(Creature *c) : ScriptedAI(c)
|
||||
{
|
||||
pInstance = (c->GetInstanceData());
|
||||
pInstance = c->GetInstanceData();
|
||||
EnterEvadeMode();
|
||||
}
|
||||
|
||||
@@ -883,7 +880,7 @@ struct TRINITY_DLL_DECL mob_shield_generator_channelAI : public ScriptedAI
|
||||
{
|
||||
mob_shield_generator_channelAI(Creature *c) : ScriptedAI(c)
|
||||
{
|
||||
pInstance = (c->GetInstanceData());
|
||||
pInstance = c->GetInstanceData();
|
||||
}
|
||||
|
||||
ScriptedInstance *pInstance;
|
||||
@@ -893,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);
|
||||
}
|
||||
|
||||
+8
-8
@@ -140,7 +140,7 @@ struct TRINITY_DLL_DECL boss_leotheras_the_blindAI : public ScriptedAI
|
||||
boss_leotheras_the_blindAI(Creature *c) : ScriptedAI(c)
|
||||
{
|
||||
m_creature->GetPosition(x,y,z);
|
||||
pInstance = (c->GetInstanceData());
|
||||
pInstance = c->GetInstanceData();
|
||||
Demon = 0;
|
||||
|
||||
for(uint8 i = 0; i < 3; i++)//clear guids
|
||||
@@ -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());
|
||||
}
|
||||
}
|
||||
@@ -640,7 +640,7 @@ struct TRINITY_DLL_DECL mob_greyheart_spellbinderAI : public ScriptedAI
|
||||
{
|
||||
mob_greyheart_spellbinderAI(Creature *c) : ScriptedAI(c)
|
||||
{
|
||||
pInstance = (c->GetInstanceData());;
|
||||
pInstance = c->GetInstanceData();;
|
||||
leotherasGUID = 0;
|
||||
AddedBanish = false;
|
||||
}
|
||||
|
||||
+1
-1
@@ -76,7 +76,7 @@ struct TRINITY_DLL_DECL boss_the_lurker_belowAI : public Scripted_NoMovementAI
|
||||
{
|
||||
boss_the_lurker_belowAI(Creature *c) : Scripted_NoMovementAI(c), Summons(m_creature)
|
||||
{
|
||||
pInstance = (c->GetInstanceData());
|
||||
pInstance = c->GetInstanceData();
|
||||
SpellEntry *TempSpell = GET_SPELL(SPELL_SPOUT_ANIM);
|
||||
if(TempSpell)
|
||||
{
|
||||
|
||||
+198
-252
@@ -1,149 +1,107 @@
|
||||
/* 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)
|
||||
{
|
||||
@@ -153,137 +111,130 @@ struct TRINITY_DLL_DECL boss_morogrim_tidewalkerAI : public ScriptedAI
|
||||
}
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
if (pSummoned->GetEntry() == NPC_TIDEWALKER_LURKER)
|
||||
{
|
||||
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 uiDiff)
|
||||
{
|
||||
//Return since we have no target
|
||||
if (!UpdateVictim())
|
||||
return;
|
||||
|
||||
//m_uiEarthquake_Timer
|
||||
if (m_uiEarthquake_Timer < uiDiff)
|
||||
{
|
||||
if (!m_bEarthquake)
|
||||
{
|
||||
DoCast(m_creature->getVictim(), SPELL_EARTHQUAKE);
|
||||
m_bEarthquake = true;
|
||||
m_uiEarthquake_Timer = 5000;
|
||||
}
|
||||
else
|
||||
{
|
||||
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);
|
||||
|
||||
DoScriptText(EMOTE_EARTHQUAKE, m_creature);
|
||||
|
||||
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);
|
||||
m_uiTidalWave_Timer = 20000;
|
||||
}else m_uiTidalWave_Timer -= uiDiff;
|
||||
|
||||
if (!m_bPhase2)
|
||||
{
|
||||
//m_uiWateryGrave_Timer
|
||||
if (m_uiWateryGrave_Timer < uiDiff)
|
||||
{
|
||||
//Teleport 4 players under the waterfalls
|
||||
for(uint8 i = 0; i < 4; 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: 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;
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void UpdateAI(const uint32 diff)
|
||||
{
|
||||
//Return since we have no target
|
||||
if (!UpdateVictim() )
|
||||
return;
|
||||
|
||||
//Earthquake_Timer
|
||||
if (Earthquake_Timer < diff)
|
||||
{
|
||||
if (!Earthquake)
|
||||
{
|
||||
DoCast(m_creature->getVictim(), SPELL_EARTHQUAKE);
|
||||
Earthquake = true;
|
||||
Earthquake_Timer = 10000;
|
||||
}
|
||||
else
|
||||
{
|
||||
switch(rand()%2)
|
||||
{
|
||||
case 0: DoScriptText(SAY_SUMMON1, m_creature); break;
|
||||
case 1: DoScriptText(SAY_SUMMON2, m_creature); break;
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
DoCast(m_creature->getVictim(), SPELL_TIDAL_WAVE);
|
||||
TidalWave_Timer = 20000;
|
||||
}else TidalWave_Timer -= diff;
|
||||
|
||||
if (!Phase2)
|
||||
{
|
||||
//WateryGrave_Timer
|
||||
if (WateryGrave_Timer < diff)
|
||||
{
|
||||
//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);
|
||||
}
|
||||
}
|
||||
|
||||
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();
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -45,7 +45,7 @@ struct TRINITY_DLL_DECL boss_thespiaAI : public ScriptedAI
|
||||
{
|
||||
boss_thespiaAI(Creature *c) : ScriptedAI(c)
|
||||
{
|
||||
pInstance = (c->GetInstanceData());
|
||||
pInstance = c->GetInstanceData();
|
||||
HeroicMode = m_creature->GetMap()->IsHeroic();
|
||||
}
|
||||
|
||||
|
||||
+2
-2
@@ -50,7 +50,7 @@ struct TRINITY_DLL_DECL boss_mekgineer_steamriggerAI : public ScriptedAI
|
||||
{
|
||||
boss_mekgineer_steamriggerAI(Creature *c) : ScriptedAI(c)
|
||||
{
|
||||
pInstance = (c->GetInstanceData());
|
||||
pInstance = c->GetInstanceData();
|
||||
HeroicMode = m_creature->GetMap()->IsHeroic();
|
||||
}
|
||||
|
||||
@@ -199,7 +199,7 @@ struct TRINITY_DLL_DECL mob_steamrigger_mechanicAI : public ScriptedAI
|
||||
{
|
||||
mob_steamrigger_mechanicAI(Creature *c) : ScriptedAI(c)
|
||||
{
|
||||
pInstance = (c->GetInstanceData());
|
||||
pInstance = c->GetInstanceData();
|
||||
HeroicMode = m_creature->GetMap()->IsHeroic();
|
||||
}
|
||||
|
||||
|
||||
+2
-2
@@ -44,7 +44,7 @@ struct TRINITY_DLL_DECL mob_naga_distillerAI : public ScriptedAI
|
||||
{
|
||||
mob_naga_distillerAI(Creature *c) : ScriptedAI(c)
|
||||
{
|
||||
pInstance = (c->GetInstanceData());
|
||||
pInstance = c->GetInstanceData();
|
||||
}
|
||||
|
||||
ScriptedInstance *pInstance;
|
||||
@@ -90,7 +90,7 @@ struct TRINITY_DLL_DECL boss_warlord_kalithreshAI : public ScriptedAI
|
||||
{
|
||||
boss_warlord_kalithreshAI(Creature *c) : ScriptedAI(c)
|
||||
{
|
||||
pInstance = (c->GetInstanceData());
|
||||
pInstance = c->GetInstanceData();
|
||||
}
|
||||
|
||||
ScriptedInstance *pInstance;
|
||||
|
||||
+4
-29
@@ -88,23 +88,6 @@ struct TRINITY_DLL_DECL instance_steam_vault : public ScriptedInstance
|
||||
return false;
|
||||
}
|
||||
|
||||
Player* GetPlayerInMap()
|
||||
{
|
||||
Map::PlayerList const& players = instance->GetPlayers();
|
||||
|
||||
if (!players.isEmpty())
|
||||
{
|
||||
for(Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr)
|
||||
{
|
||||
if (Player* plr = itr->getSource())
|
||||
return plr;
|
||||
}
|
||||
}
|
||||
|
||||
debug_log("TSCR: Instance Steamvault: GetPlayerInMap, but PlayerList is empty!");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void OnCreatureCreate(Creature *creature, bool add)
|
||||
{
|
||||
switch(creature->GetEntry())
|
||||
@@ -127,25 +110,17 @@ struct TRINITY_DLL_DECL instance_steam_vault : public ScriptedInstance
|
||||
|
||||
void SetData(uint32 type, uint32 data)
|
||||
{
|
||||
Player *player = GetPlayerInMap();
|
||||
|
||||
if (!player)
|
||||
{
|
||||
debug_log("TSCR: Instance Steamvault: SetData (Type: %u Data %u) cannot find any player.", type, data);
|
||||
return;
|
||||
}
|
||||
|
||||
switch(type)
|
||||
{
|
||||
case TYPE_HYDROMANCER_THESPIA:
|
||||
if (data == SPECIAL)
|
||||
{
|
||||
if (GameObject *_go = GameObject::GetGameObject(*player,AccessPanelHydro))
|
||||
if (GameObject *_go = instance->GetGameObject(AccessPanelHydro))
|
||||
_go->SetGoState(GO_STATE_ACTIVE);
|
||||
|
||||
if (GetData(TYPE_MEKGINEER_STEAMRIGGER) == SPECIAL)
|
||||
{
|
||||
if (GameObject *_go = GameObject::GetGameObject(*player,MainChambersDoor))
|
||||
if (GameObject *_go = instance->GetGameObject(MainChambersDoor))
|
||||
_go->SetGoState(GO_STATE_ACTIVE);
|
||||
}
|
||||
debug_log("TSCR: Instance Steamvault: Access panel used.");
|
||||
@@ -155,12 +130,12 @@ struct TRINITY_DLL_DECL instance_steam_vault : public ScriptedInstance
|
||||
case TYPE_MEKGINEER_STEAMRIGGER:
|
||||
if (data == SPECIAL)
|
||||
{
|
||||
if (GameObject *_go = GameObject::GetGameObject(*player,AccessPanelMek))
|
||||
if (GameObject *_go = instance->GetGameObject(AccessPanelMek))
|
||||
_go->SetGoState(GO_STATE_ACTIVE);
|
||||
|
||||
if (GetData(TYPE_HYDROMANCER_THESPIA) == SPECIAL)
|
||||
{
|
||||
if (GameObject *_go = GameObject::GetGameObject(*player,MainChambersDoor))
|
||||
if (GameObject *_go = instance->GetGameObject(MainChambersDoor))
|
||||
_go->SetGoState(GO_STATE_ACTIVE);
|
||||
}
|
||||
debug_log("TSCR: Instance Steamvault: Access panel used.");
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
|
||||
@@ -281,8 +281,7 @@ void npc_unworthy_initiateAI::UpdateAI(const uint32 diff)
|
||||
Creature* trigger = m_creature->SummonCreature(29521,x,y,z,0,TEMPSUMMON_MANUAL_DESPAWN,100);
|
||||
if(trigger)
|
||||
{
|
||||
GameObject* go_prison = GameObject::GetGameObject((*m_creature),nearest_prison);
|
||||
if(go_prison)
|
||||
if(GameObject* go_prison = GameObject::GetGameObject((*m_creature),nearest_prison))
|
||||
go_prison->ResetDoorOrButton();
|
||||
|
||||
CAST_AI(npc_unworthy_initiate_anchorAI, trigger->AI())->SetTarget(m_creature->GetGUID());
|
||||
@@ -533,9 +532,7 @@ struct TRINITY_DLL_DECL npc_salanar_the_horsemanAI : public ScriptedAI
|
||||
return;
|
||||
}
|
||||
CAST_PLR(charmer)->ExitVehicle();
|
||||
//without this we can see npc kill the horse
|
||||
who->setDeathState(DEAD);
|
||||
CAST_CRE(who)->Respawn();
|
||||
CAST_CRE(who)->Respawn(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -555,18 +552,6 @@ struct TRINITY_DLL_DECL npc_ros_dark_riderAI : public ScriptedAI
|
||||
{
|
||||
npc_ros_dark_riderAI(Creature *c) : ScriptedAI(c) {}
|
||||
|
||||
void MoveInLineOfSight(Unit *who)
|
||||
{
|
||||
if(me->getVictim())
|
||||
return;
|
||||
|
||||
// this should be before next one otherwise he may enter vehicle again
|
||||
if(!me->m_Vehicle && who->GetEntry() == 28782 && CAST_CRE(who)->isVehicle() && CAST_VEH(who)->HasEmptySeat(0))
|
||||
me->EnterVehicle((Vehicle*)who);
|
||||
|
||||
ScriptedAI::MoveInLineOfSight(who);
|
||||
}
|
||||
|
||||
void EnterCombat(Unit *who)
|
||||
{
|
||||
me->ExitVehicle();
|
||||
|
||||
@@ -53,7 +53,7 @@ struct TRINITY_DLL_DECL boss_gruulAI : public ScriptedAI
|
||||
{
|
||||
boss_gruulAI(Creature *c) : ScriptedAI(c)
|
||||
{
|
||||
pInstance = (c->GetInstanceData());
|
||||
pInstance = c->GetInstanceData();
|
||||
}
|
||||
|
||||
ScriptedInstance *pInstance;
|
||||
@@ -111,8 +111,7 @@ struct TRINITY_DLL_DECL boss_gruulAI : public ScriptedAI
|
||||
{
|
||||
pInstance->SetData(DATA_GRUULEVENT, DONE);
|
||||
|
||||
GameObject* EncounterDoor = GameObject::GetGameObject((*m_creature), pInstance->GetData64(DATA_GRUULDOOR));
|
||||
if (EncounterDoor)
|
||||
if (GameObject* EncounterDoor = pInstance->instance->GetGameObject(pInstance->GetData64(DATA_GRUULDOOR)))
|
||||
EncounterDoor->SetGoState(GO_STATE_ACTIVE); // Open the encounter door
|
||||
}
|
||||
}
|
||||
|
||||
@@ -108,7 +108,7 @@ struct TRINITY_DLL_DECL boss_high_king_maulgarAI : public ScriptedAI
|
||||
{
|
||||
boss_high_king_maulgarAI(Creature *c) : ScriptedAI(c)
|
||||
{
|
||||
pInstance = (c->GetInstanceData());
|
||||
pInstance = c->GetInstanceData();
|
||||
for(uint8 i = 0; i < 4; ++i)
|
||||
Council[i] = 0;
|
||||
}
|
||||
@@ -304,7 +304,7 @@ struct TRINITY_DLL_DECL boss_olm_the_summonerAI : public ScriptedAI
|
||||
{
|
||||
boss_olm_the_summonerAI(Creature *c) : ScriptedAI(c)
|
||||
{
|
||||
pInstance = (c->GetInstanceData());
|
||||
pInstance = c->GetInstanceData();
|
||||
}
|
||||
|
||||
uint32 DarkDecay_Timer;
|
||||
@@ -406,7 +406,7 @@ struct TRINITY_DLL_DECL boss_kiggler_the_crazedAI : public ScriptedAI
|
||||
{
|
||||
boss_kiggler_the_crazedAI(Creature *c) : ScriptedAI(c)
|
||||
{
|
||||
pInstance = (c->GetInstanceData());
|
||||
pInstance = c->GetInstanceData();
|
||||
}
|
||||
|
||||
uint32 GreaterPolymorph_Timer;
|
||||
@@ -516,7 +516,7 @@ struct TRINITY_DLL_DECL boss_blindeye_the_seerAI : public ScriptedAI
|
||||
{
|
||||
boss_blindeye_the_seerAI(Creature *c) : ScriptedAI(c)
|
||||
{
|
||||
pInstance = (c->GetInstanceData());
|
||||
pInstance = c->GetInstanceData();
|
||||
}
|
||||
|
||||
uint32 GreaterPowerWordShield_Timer;
|
||||
@@ -614,7 +614,7 @@ struct TRINITY_DLL_DECL boss_krosh_firehandAI : public ScriptedAI
|
||||
{
|
||||
boss_krosh_firehandAI(Creature *c) : ScriptedAI(c)
|
||||
{
|
||||
pInstance = (c->GetInstanceData());
|
||||
pInstance = c->GetInstanceData();
|
||||
}
|
||||
|
||||
uint32 GreaterFireball_Timer;
|
||||
|
||||
@@ -24,21 +24,22 @@ EndScriptData */
|
||||
#include "precompiled.h"
|
||||
#include "def_blood_furnace.h"
|
||||
|
||||
enum
|
||||
{
|
||||
SAY_AGGRO = -1542008,
|
||||
|
||||
#define SAY_AGGRO -1542008
|
||||
SPELL_SLIME_SPRAY = 30913,
|
||||
SPELL_POISON_CLOUD = 30916,
|
||||
SPELL_POISON_BOLT = 30917,
|
||||
|
||||
#define SPELL_SLIME_SPRAY 30913
|
||||
#define SPELL_POISON_CLOUD 30916
|
||||
#define SPELL_POISON_BOLT 30917
|
||||
|
||||
#define SPELL_POISON 30914
|
||||
SPELL_POISON = 30914
|
||||
};
|
||||
|
||||
struct TRINITY_DLL_DECL boss_broggokAI : public ScriptedAI
|
||||
{
|
||||
boss_broggokAI(Creature *c) : ScriptedAI(c)
|
||||
{
|
||||
pInstance = ((ScriptedInstance*)c->GetInstanceData());
|
||||
Reset();
|
||||
pInstance = c->GetInstanceData();
|
||||
}
|
||||
|
||||
ScriptedInstance* pInstance;
|
||||
@@ -111,7 +112,7 @@ struct TRINITY_DLL_DECL boss_broggokAI : public ScriptedAI
|
||||
{
|
||||
if (pInstance)
|
||||
{
|
||||
if (GameObject* Doors = GameObject::GetGameObject(*m_creature, pInstance->GetData64(DOOR)))
|
||||
if (GameObject* Doors = pInstance->instance->GetGameObject(pInstance->GetData64(DOOR)))
|
||||
{
|
||||
if (close == 1)
|
||||
Doors->SetGoState(GO_STATE_READY); // Closed
|
||||
|
||||
+33
-27
@@ -29,29 +29,32 @@ EndContentData */
|
||||
#include "precompiled.h"
|
||||
#include "def_blood_furnace.h"
|
||||
|
||||
#define SAY_WAKE -1542000
|
||||
enum
|
||||
{
|
||||
SAY_WAKE = -1542000,
|
||||
SAY_ADD_AGGRO_1 = -1542001,
|
||||
SAY_ADD_AGGRO_2 = -1542002,
|
||||
SAY_ADD_AGGRO_3 = -1542003,
|
||||
SAY_KILL_1 = -1542004,
|
||||
SAY_KILL_2 = -1542005,
|
||||
SAY_NOVA = -1542006,
|
||||
SAY_DIE = -1542007,
|
||||
|
||||
#define SAY_ADD_AGGRO_1 -1542001
|
||||
#define SAY_ADD_AGGRO_2 -1542002
|
||||
#define SAY_ADD_AGGRO_3 -1542003
|
||||
SPELL_CORRUPTION = 30938,
|
||||
SPELL_EVOCATION = 30935,
|
||||
|
||||
#define SAY_KILL_1 -1542004
|
||||
#define SAY_KILL_2 -1542005
|
||||
#define SAY_NOVA -1542006
|
||||
#define SAY_DIE -1542007
|
||||
SPELL_FIRE_NOVA = 33132,
|
||||
H_SPELL_FIRE_NOVA = 37371,
|
||||
|
||||
#define SPELL_CORRUPTION 30938
|
||||
#define SPELL_EVOCATION 30935
|
||||
#define SPELL_BURNING_NOVA 30940
|
||||
SPELL_SHADOW_BOLT_VOLLEY = 28599,
|
||||
H_SPELL_SHADOW_BOLT_VOLLEY = 40070,
|
||||
|
||||
#define SPELL_FIRE_NOVA 33132
|
||||
#define H_SPELL_FIRE_NOVA 37371
|
||||
SPELL_BURNING_NOVA = 30940,
|
||||
SPELL_VORTEX = 37370,
|
||||
|
||||
#define SPELL_SHADOW_BOLT_VOLLEY 28599
|
||||
#define H_SPELL_SHADOW_BOLT_VOLLEY 40070
|
||||
|
||||
#define ENTRY_KELIDAN 17377
|
||||
#define ENTRY_CHANNELER 17653
|
||||
ENTRY_KELIDAN = 17377,
|
||||
ENTRY_CHANNELER = 17653
|
||||
};
|
||||
|
||||
const float ShadowmoonChannelers[5][4]=
|
||||
{
|
||||
@@ -66,8 +69,8 @@ struct TRINITY_DLL_DECL boss_kelidan_the_breakerAI : public ScriptedAI
|
||||
{
|
||||
boss_kelidan_the_breakerAI(Creature *c) : ScriptedAI(c)
|
||||
{
|
||||
pInstance = (c->GetInstanceData());
|
||||
HeroicMode = m_creature->GetMap()->IsHeroic();
|
||||
pInstance = c->GetInstanceData();
|
||||
HeroicMode = c->GetMap()->IsHeroic();
|
||||
for(int i=0; i<5; ++i)
|
||||
Channelers[i] = 0;
|
||||
}
|
||||
@@ -261,7 +264,7 @@ struct TRINITY_DLL_DECL boss_kelidan_the_breakerAI : public ScriptedAI
|
||||
{
|
||||
if (pInstance)
|
||||
{
|
||||
if (GameObject* Doors = GameObject::GetGameObject(*m_creature, pInstance->GetData64(DOOR)))
|
||||
if (GameObject* Doors = pInstance->instance->GetGameObject(pInstance->GetData64(DOOR)))
|
||||
{
|
||||
if (close == 1)
|
||||
Doors->SetGoState(GO_STATE_READY); // Closed
|
||||
@@ -281,18 +284,21 @@ CreatureAI* GetAI_boss_kelidan_the_breaker(Creature *_Creature)
|
||||
## mob_shadowmoon_channeler
|
||||
######*/
|
||||
|
||||
#define SPELL_SHADOW_BOLT 12739
|
||||
#define H_SPELL_SHADOW_BOLT 15472
|
||||
enum
|
||||
{
|
||||
SPELL_SHADOW_BOLT = 12739,
|
||||
H_SPELL_SHADOW_BOLT = 15472,
|
||||
|
||||
#define SPELL_MARK_OF_SHADOW 30937
|
||||
#define SPELL_CHANNELING 39123
|
||||
SPELL_MARK_OF_SHADOW = 30937,
|
||||
SPELL_CHANNELING = 39123
|
||||
};
|
||||
|
||||
struct TRINITY_DLL_DECL mob_shadowmoon_channelerAI : public ScriptedAI
|
||||
{
|
||||
mob_shadowmoon_channelerAI(Creature *c) : ScriptedAI(c)
|
||||
{
|
||||
pInstance = (c->GetInstanceData());
|
||||
HeroicMode = m_creature->GetMap()->IsHeroic();
|
||||
pInstance = c->GetInstanceData();
|
||||
HeroicMode = c->GetMap()->IsHeroic();
|
||||
}
|
||||
|
||||
ScriptedInstance* pInstance;
|
||||
|
||||
+15
-13
@@ -24,24 +24,26 @@ EndScriptData */
|
||||
#include "precompiled.h"
|
||||
#include "def_blood_furnace.h"
|
||||
|
||||
#define SAY_AGGRO_1 -1542009
|
||||
#define SAY_AGGRO_2 -1542010
|
||||
#define SAY_AGGRO_3 -1542011
|
||||
#define SAY_KILL_1 -1542012
|
||||
#define SAY_KILL_2 -1542013
|
||||
#define SAY_DIE -1542014
|
||||
enum
|
||||
{
|
||||
SAY_AGGRO_1 = -1542009,
|
||||
SAY_AGGRO_2 = -1542010,
|
||||
SAY_AGGRO_3 = -1542011,
|
||||
SAY_KILL_1 = -1542012,
|
||||
SAY_KILL_2 = -1542013,
|
||||
SAY_DIE = -1542014,
|
||||
|
||||
#define SPELL_ACID_SPRAY 38153 // heroic 38973 ??? 38153
|
||||
#define SPELL_EXPLODING_BREAKER 30925
|
||||
#define SPELL_KNOCKDOWN 20276
|
||||
#define SPELL_DOMINATION 25772 // ???
|
||||
SPELL_ACID_SPRAY = 38153, // heroic 38973 ??? 38153
|
||||
SPELL_EXPLODING_BREAKER = 30925,
|
||||
SPELL_KNOCKDOWN = 20276,
|
||||
SPELL_DOMINATION = 25772 // ???
|
||||
};
|
||||
|
||||
struct TRINITY_DLL_DECL boss_the_makerAI : public ScriptedAI
|
||||
{
|
||||
boss_the_makerAI(Creature *c) : ScriptedAI(c)
|
||||
{
|
||||
pInstance = ((ScriptedInstance*)c->GetInstanceData());
|
||||
Reset();
|
||||
pInstance = c->GetInstanceData();
|
||||
}
|
||||
|
||||
ScriptedInstance* pInstance;
|
||||
@@ -139,7 +141,7 @@ struct TRINITY_DLL_DECL boss_the_makerAI : public ScriptedAI
|
||||
{
|
||||
if (pInstance)
|
||||
{
|
||||
if (GameObject* Doors = GameObject::GetGameObject(*m_creature, pInstance->GetData64(DOOR)))
|
||||
if (GameObject* Doors = pInstance->instance->GetGameObject(pInstance->GetData64(DOOR)))
|
||||
{
|
||||
if (close == 1)
|
||||
Doors->SetGoState(GO_STATE_READY); // Closed
|
||||
|
||||
+38
@@ -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;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
|
||||
+1
-21
@@ -51,26 +51,7 @@ struct TRINITY_DLL_DECL instance_ramparts : public ScriptedInstance
|
||||
}
|
||||
}
|
||||
|
||||
Player* GetFirstPlayerInInstance()
|
||||
{
|
||||
Map::PlayerList const& pPlayers = instance->GetPlayers();
|
||||
|
||||
if (!pPlayers.isEmpty())
|
||||
{
|
||||
for(Map::PlayerList::const_iterator itr = pPlayers.begin(); itr != pPlayers.end(); ++itr)
|
||||
{
|
||||
if (Player* pPlr = itr->getSource())
|
||||
return pPlr;
|
||||
}
|
||||
}
|
||||
|
||||
debug_log("TSCR: Instance Ramparts: GetFirstPlayerInInstance, but PlayerList is empty.");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void DoRespawnChest()
|
||||
{
|
||||
if (Player* pPlayer = GetFirstPlayerInInstance())
|
||||
{
|
||||
uint64 uiChest;
|
||||
|
||||
@@ -79,7 +60,7 @@ struct TRINITY_DLL_DECL instance_ramparts : public ScriptedInstance
|
||||
else
|
||||
uiChest = m_uiChestNGUID;
|
||||
|
||||
if (GameObject* pGo = GameObject::GetGameObject(*pPlayer,uiChest))
|
||||
if (GameObject* pGo = instance->GetGameObject(uiChest))
|
||||
{
|
||||
if (pGo->isSpawned())
|
||||
return;
|
||||
@@ -87,7 +68,6 @@ struct TRINITY_DLL_DECL instance_ramparts : public ScriptedInstance
|
||||
pGo->SetRespawnTime(HOUR*IN_MILISECONDS);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void SetData(uint32 uiType, uint32 uiData)
|
||||
{
|
||||
|
||||
+1
-1
@@ -189,7 +189,7 @@ struct TRINITY_DLL_DECL instance_magtheridons_lair : public ScriptedInstance
|
||||
case DATA_COLLAPSE:
|
||||
// true - collapse / false - reset
|
||||
for(std::set<uint64>::iterator i = ColumnGUID.begin(); i != ColumnGUID.end(); ++i)
|
||||
HandleGameObject(*i, data);
|
||||
DoUseDoorOrButton(*i);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
||||
+3
-4
@@ -77,7 +77,7 @@ struct TRINITY_DLL_DECL boss_grand_warlock_nethekurseAI : public ScriptedAI
|
||||
{
|
||||
boss_grand_warlock_nethekurseAI(Creature *c) : ScriptedAI(c)
|
||||
{
|
||||
pInstance = (c->GetInstanceData());
|
||||
pInstance = c->GetInstanceData();
|
||||
HeroicMode = m_creature->GetMap()->IsHeroic();
|
||||
}
|
||||
|
||||
@@ -235,7 +235,7 @@ struct TRINITY_DLL_DECL boss_grand_warlock_nethekurseAI : public ScriptedAI
|
||||
|
||||
if (pInstance->GetData64(DATA_NETHEKURSE_DOOR))
|
||||
{
|
||||
if (GameObject *Door = GameObject::GetGameObject(*m_creature,pInstance->GetData64(DATA_NETHEKURSE_DOOR)))
|
||||
if (GameObject *Door = pInstance->instance->GetGameObject(pInstance->GetData64(DATA_NETHEKURSE_DOOR)))
|
||||
Door->SetGoState(GO_STATE_ACTIVE);
|
||||
}
|
||||
}
|
||||
@@ -304,7 +304,7 @@ struct TRINITY_DLL_DECL mob_fel_orc_convertAI : public ScriptedAI
|
||||
{
|
||||
mob_fel_orc_convertAI(Creature *c) : ScriptedAI(c)
|
||||
{
|
||||
pInstance = (c->GetInstanceData());
|
||||
pInstance = c->GetInstanceData();
|
||||
}
|
||||
|
||||
ScriptedInstance* pInstance;
|
||||
@@ -318,7 +318,6 @@ struct TRINITY_DLL_DECL mob_fel_orc_convertAI : public ScriptedAI
|
||||
|
||||
void MoveInLineOfSight(Unit *who)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
void EnterCombat(Unit* who)
|
||||
|
||||
+1
-1
@@ -128,7 +128,7 @@ struct TRINITY_DLL_DECL boss_warbringer_omroggAI : public ScriptedAI
|
||||
{
|
||||
boss_warbringer_omroggAI(Creature *c) : ScriptedAI(c)
|
||||
{
|
||||
pInstance = (c->GetInstanceData());
|
||||
pInstance = c->GetInstanceData();
|
||||
HeroicMode = m_creature->GetMap()->IsHeroic();
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -52,7 +52,7 @@ struct TRINITY_DLL_DECL boss_warchief_kargath_bladefistAI : public ScriptedAI
|
||||
{
|
||||
boss_warchief_kargath_bladefistAI(Creature *c) : ScriptedAI(c)
|
||||
{
|
||||
pInstance = (c->GetInstanceData());
|
||||
pInstance = c->GetInstanceData();
|
||||
HeroicMode = m_creature->GetMap()->IsHeroic();
|
||||
}
|
||||
|
||||
|
||||
@@ -90,7 +90,7 @@ struct TRINITY_DLL_DECL npc_aeranasAI : public ScriptedAI
|
||||
m_creature->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_QUESTGIVER);
|
||||
m_creature->RemoveAllAuras();
|
||||
m_creature->DeleteThreatList();
|
||||
m_creature->CombatStop();
|
||||
m_creature->CombatStop(true);
|
||||
DoScriptText(SAY_FREE, m_creature);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -69,7 +69,7 @@ struct TRINITY_DLL_DECL npc_converted_sentryAI : public ScriptedAI
|
||||
|
||||
DoCast(m_creature, SPELL_CONVERT_CREDIT);
|
||||
if(m_creature->isPet())
|
||||
((Pet*)m_creature)->SetDuration(7500);
|
||||
CAST_PET(m_creature)->SetDuration(7500);
|
||||
Credit = true;
|
||||
}else Timer -= diff;
|
||||
}
|
||||
|
||||
@@ -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())
|
||||
{
|
||||
|
||||
@@ -66,7 +66,7 @@ struct TRINITY_DLL_DECL boss_moroesAI : public ScriptedAI
|
||||
{
|
||||
AddId[i] = 0;
|
||||
}
|
||||
pInstance = (c->GetInstanceData());
|
||||
pInstance = c->GetInstanceData();
|
||||
}
|
||||
|
||||
ScriptedInstance *pInstance;
|
||||
@@ -340,7 +340,7 @@ struct TRINITY_DLL_DECL boss_moroes_guestAI : public ScriptedAI
|
||||
for(uint8 i = 0; i < 4; ++i)
|
||||
GuestGUID[i] = 0;
|
||||
|
||||
pInstance = (c->GetInstanceData());
|
||||
pInstance = c->GetInstanceData();
|
||||
}
|
||||
|
||||
void Reset()
|
||||
|
||||
@@ -60,7 +60,7 @@ struct TRINITY_DLL_DECL boss_nightbaneAI : public ScriptedAI
|
||||
{
|
||||
boss_nightbaneAI(Creature* c) : ScriptedAI(c)
|
||||
{
|
||||
pInstance = (c->GetInstanceData());
|
||||
pInstance = c->GetInstanceData();
|
||||
Intro = true;
|
||||
}
|
||||
|
||||
@@ -138,9 +138,9 @@ struct TRINITY_DLL_DECL boss_nightbaneAI : public ScriptedAI
|
||||
|
||||
void HandleTerraceDoors(bool open)
|
||||
{
|
||||
if(GameObject *Door = GameObject::GetGameObject((*m_creature),pInstance->GetData64(DATA_MASTERS_TERRACE_DOOR_1)))
|
||||
if(GameObject *Door = pInstance->instance->GetGameObject(pInstance->GetData64(DATA_MASTERS_TERRACE_DOOR_1)))
|
||||
Door->SetGoState(open ? GO_STATE_ACTIVE : GO_STATE_READY);
|
||||
if(GameObject *Door = GameObject::GetGameObject((*m_creature),pInstance->GetData64(DATA_MASTERS_TERRACE_DOOR_2)))
|
||||
if(GameObject *Door = pInstance->instance->GetGameObject(pInstance->GetData64(DATA_MASTERS_TERRACE_DOOR_2)))
|
||||
Door->SetGoState(open ? GO_STATE_ACTIVE : GO_STATE_READY);
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
@@ -157,7 +157,7 @@ struct TRINITY_DLL_DECL boss_malchezaarAI : public ScriptedAI
|
||||
{
|
||||
boss_malchezaarAI(Creature *c) : ScriptedAI(c)
|
||||
{
|
||||
pInstance = (c->GetInstanceData());
|
||||
pInstance = c->GetInstanceData();
|
||||
}
|
||||
|
||||
ScriptedInstance *pInstance;
|
||||
@@ -208,13 +208,10 @@ struct TRINITY_DLL_DECL boss_malchezaarAI : public ScriptedAI
|
||||
|
||||
if(pInstance)
|
||||
{
|
||||
GameObject* Door = GameObject::GetGameObject((*m_creature),pInstance->GetData64(DATA_GAMEOBJECT_NETHER_DOOR));
|
||||
if(Door)
|
||||
{
|
||||
if(GameObject* Door = pInstance->instance->GetGameObject(pInstance->GetData64(DATA_GAMEOBJECT_NETHER_DOOR)))
|
||||
Door->SetGoState(GO_STATE_ACTIVE);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void KilledUnit(Unit *victim)
|
||||
{
|
||||
@@ -240,13 +237,10 @@ struct TRINITY_DLL_DECL boss_malchezaarAI : public ScriptedAI
|
||||
|
||||
if(pInstance)
|
||||
{
|
||||
GameObject* Door = GameObject::GetGameObject((*m_creature),pInstance->GetData64(DATA_GAMEOBJECT_NETHER_DOOR));
|
||||
if(Door)
|
||||
{
|
||||
if(GameObject* Door = pInstance->instance->GetGameObject(pInstance->GetData64(DATA_GAMEOBJECT_NETHER_DOOR)))
|
||||
Door->SetGoState(GO_STATE_ACTIVE);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void EnterCombat(Unit *who)
|
||||
{
|
||||
@@ -254,13 +248,10 @@ struct TRINITY_DLL_DECL boss_malchezaarAI : public ScriptedAI
|
||||
|
||||
if(pInstance)
|
||||
{
|
||||
GameObject* Door = GameObject::GetGameObject((*m_creature),pInstance->GetData64(DATA_GAMEOBJECT_NETHER_DOOR));
|
||||
if(Door)
|
||||
{
|
||||
if(GameObject* Door = pInstance->instance->GetGameObject(pInstance->GetData64(DATA_GAMEOBJECT_NETHER_DOOR)))
|
||||
Door->SetGoState(GO_STATE_READY);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void InfernalCleanup()
|
||||
{
|
||||
@@ -377,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;
|
||||
|
||||
@@ -83,7 +83,7 @@ struct TRINITY_DLL_DECL boss_aranAI : public ScriptedAI
|
||||
{
|
||||
boss_aranAI(Creature *c) : ScriptedAI(c)
|
||||
{
|
||||
pInstance = (c->GetInstanceData());
|
||||
pInstance = c->GetInstanceData();
|
||||
}
|
||||
|
||||
ScriptedInstance* pInstance;
|
||||
@@ -142,7 +142,7 @@ struct TRINITY_DLL_DECL boss_aranAI : public ScriptedAI
|
||||
// Not in progress
|
||||
pInstance->SetData(DATA_SHADEOFARAN_EVENT, NOT_STARTED);
|
||||
|
||||
if(GameObject* Door = GameObject::GetGameObject(*m_creature, pInstance->GetData64(DATA_GAMEOBJECT_LIBRARY_DOOR)))
|
||||
if(GameObject* Door = pInstance->instance->GetGameObject(pInstance->GetData64(DATA_GAMEOBJECT_LIBRARY_DOOR)))
|
||||
Door->SetGoState(GO_STATE_ACTIVE);
|
||||
}
|
||||
}
|
||||
@@ -164,7 +164,7 @@ struct TRINITY_DLL_DECL boss_aranAI : public ScriptedAI
|
||||
{
|
||||
pInstance->SetData(DATA_SHADEOFARAN_EVENT, DONE);
|
||||
|
||||
if(GameObject* Door = GameObject::GetGameObject(*m_creature, pInstance->GetData64(DATA_GAMEOBJECT_LIBRARY_DOOR)))
|
||||
if(GameObject* Door = pInstance->instance->GetGameObject(pInstance->GetData64(DATA_GAMEOBJECT_LIBRARY_DOOR)))
|
||||
Door->SetGoState(GO_STATE_ACTIVE);
|
||||
}
|
||||
}
|
||||
@@ -181,7 +181,7 @@ struct TRINITY_DLL_DECL boss_aranAI : public ScriptedAI
|
||||
if(pInstance)
|
||||
{
|
||||
pInstance->SetData(DATA_SHADEOFARAN_EVENT, IN_PROGRESS);
|
||||
if(GameObject* Door = GameObject::GetGameObject(*m_creature, pInstance->GetData64(DATA_GAMEOBJECT_LIBRARY_DOOR)))
|
||||
if(GameObject* Door = pInstance->instance->GetGameObject(pInstance->GetData64(DATA_GAMEOBJECT_LIBRARY_DOOR)))
|
||||
Door->SetGoState(GO_STATE_READY);
|
||||
}
|
||||
}
|
||||
@@ -232,7 +232,7 @@ struct TRINITY_DLL_DECL boss_aranAI : public ScriptedAI
|
||||
{
|
||||
if(pInstance)
|
||||
{
|
||||
if(GameObject* Door = GameObject::GetGameObject(*m_creature, pInstance->GetData64(DATA_GAMEOBJECT_LIBRARY_DOOR)))
|
||||
if(GameObject* Door = pInstance->instance->GetGameObject(pInstance->GetData64(DATA_GAMEOBJECT_LIBRARY_DOOR)))
|
||||
Door->SetGoState(GO_STATE_READY);
|
||||
CloseDoorTimer = 0;
|
||||
}
|
||||
|
||||
@@ -65,7 +65,7 @@ struct TRINITY_DLL_DECL mob_kilrekAI : public ScriptedAI
|
||||
{
|
||||
mob_kilrekAI(Creature *c) : ScriptedAI(c)
|
||||
{
|
||||
pInstance = (c->GetInstanceData());
|
||||
pInstance = c->GetInstanceData();
|
||||
}
|
||||
|
||||
ScriptedInstance* pInstance;
|
||||
@@ -157,7 +157,7 @@ struct TRINITY_DLL_DECL boss_terestianAI : public ScriptedAI
|
||||
{
|
||||
for(uint8 i = 0; i < 2; ++i)
|
||||
PortalGUID[i] = 0;
|
||||
pInstance = (c->GetInstanceData());
|
||||
pInstance = c->GetInstanceData();
|
||||
}
|
||||
|
||||
ScriptedInstance *pInstance;
|
||||
|
||||
@@ -104,7 +104,7 @@ struct TRINITY_DLL_DECL boss_dorotheeAI : public ScriptedAI
|
||||
{
|
||||
boss_dorotheeAI(Creature* c) : ScriptedAI(c)
|
||||
{
|
||||
pInstance = (c->GetInstanceData());
|
||||
pInstance = c->GetInstanceData();
|
||||
}
|
||||
|
||||
ScriptedInstance* pInstance;
|
||||
@@ -258,7 +258,7 @@ struct TRINITY_DLL_DECL boss_strawmanAI : public ScriptedAI
|
||||
{
|
||||
boss_strawmanAI(Creature* c) : ScriptedAI(c)
|
||||
{
|
||||
pInstance = (c->GetInstanceData());
|
||||
pInstance = c->GetInstanceData();
|
||||
}
|
||||
|
||||
ScriptedInstance* pInstance;
|
||||
@@ -355,7 +355,7 @@ struct TRINITY_DLL_DECL boss_tinheadAI : public ScriptedAI
|
||||
{
|
||||
boss_tinheadAI(Creature* c) : ScriptedAI(c)
|
||||
{
|
||||
pInstance = (c->GetInstanceData());
|
||||
pInstance = c->GetInstanceData();
|
||||
}
|
||||
|
||||
ScriptedInstance* pInstance;
|
||||
@@ -448,7 +448,7 @@ struct TRINITY_DLL_DECL boss_roarAI : public ScriptedAI
|
||||
{
|
||||
boss_roarAI(Creature* c) : ScriptedAI(c)
|
||||
{
|
||||
pInstance = (c->GetInstanceData());
|
||||
pInstance = c->GetInstanceData();
|
||||
}
|
||||
|
||||
ScriptedInstance* pInstance;
|
||||
@@ -540,7 +540,7 @@ struct TRINITY_DLL_DECL boss_croneAI : public ScriptedAI
|
||||
{
|
||||
boss_croneAI(Creature* c) : ScriptedAI(c)
|
||||
{
|
||||
pInstance = (c->GetInstanceData());
|
||||
pInstance = c->GetInstanceData();
|
||||
}
|
||||
|
||||
ScriptedInstance* pInstance;
|
||||
@@ -573,11 +573,11 @@ struct TRINITY_DLL_DECL boss_croneAI : public ScriptedAI
|
||||
{
|
||||
pInstance->SetData(DATA_OPERA_EVENT, DONE);
|
||||
|
||||
if (GameObject* lDoor = GameObject::GetGameObject((*m_creature), pInstance->GetData64(DATA_GAMEOBJECT_STAGEDOORLEFT)))
|
||||
if (GameObject* lDoor = pInstance->instance->GetGameObject(pInstance->GetData64(DATA_GAMEOBJECT_STAGEDOORLEFT)))
|
||||
lDoor->SetGoState(GO_STATE_ACTIVE);
|
||||
if (GameObject* rDoor = GameObject::GetGameObject((*m_creature), pInstance->GetData64(DATA_GAMEOBJECT_STAGEDOORRIGHT)))
|
||||
if (GameObject* rDoor = pInstance->instance->GetGameObject(pInstance->GetData64(DATA_GAMEOBJECT_STAGEDOORRIGHT)))
|
||||
rDoor->SetGoState(GO_STATE_ACTIVE);
|
||||
if (GameObject* pSideEntrance = GameObject::GetGameObject((*m_creature), pInstance->GetData64(DATA_GO_SIDE_ENTRANCE_DOOR)))
|
||||
if (GameObject* pSideEntrance = pInstance->instance->GetGameObject(pInstance->GetData64(DATA_GO_SIDE_ENTRANCE_DOOR)))
|
||||
pSideEntrance->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_LOCKED);
|
||||
}
|
||||
}
|
||||
@@ -729,7 +729,7 @@ struct TRINITY_DLL_DECL boss_bigbadwolfAI : public ScriptedAI
|
||||
{
|
||||
boss_bigbadwolfAI(Creature* c) : ScriptedAI(c)
|
||||
{
|
||||
pInstance = (c->GetInstanceData());
|
||||
pInstance = c->GetInstanceData();
|
||||
}
|
||||
|
||||
ScriptedInstance* pInstance;
|
||||
@@ -768,11 +768,11 @@ struct TRINITY_DLL_DECL boss_bigbadwolfAI : public ScriptedAI
|
||||
{
|
||||
pInstance->SetData(DATA_OPERA_EVENT, DONE);
|
||||
|
||||
if (GameObject* lDoor = GameObject::GetGameObject((*m_creature), pInstance->GetData64(DATA_GAMEOBJECT_STAGEDOORLEFT)))
|
||||
if (GameObject* lDoor = pInstance->instance->GetGameObject(pInstance->GetData64(DATA_GAMEOBJECT_STAGEDOORLEFT)))
|
||||
lDoor->SetGoState(GO_STATE_ACTIVE);
|
||||
if (GameObject* rDoor = GameObject::GetGameObject((*m_creature), pInstance->GetData64(DATA_GAMEOBJECT_STAGEDOORRIGHT)))
|
||||
if (GameObject* rDoor = pInstance->instance->GetGameObject(pInstance->GetData64(DATA_GAMEOBJECT_STAGEDOORRIGHT)))
|
||||
rDoor->SetGoState(GO_STATE_ACTIVE);
|
||||
if (GameObject* pSideEntrance = GameObject::GetGameObject((*m_creature), pInstance->GetData64(DATA_GO_SIDE_ENTRANCE_DOOR)))
|
||||
if (GameObject* pSideEntrance = pInstance->instance->GetGameObject(pInstance->GetData64(DATA_GO_SIDE_ENTRANCE_DOOR)))
|
||||
pSideEntrance->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_LOCKED);
|
||||
}
|
||||
}
|
||||
@@ -920,7 +920,7 @@ struct TRINITY_DLL_DECL boss_julianneAI : public ScriptedAI
|
||||
{
|
||||
boss_julianneAI(Creature* c) : ScriptedAI(c)
|
||||
{
|
||||
pInstance = (c->GetInstanceData());
|
||||
pInstance = c->GetInstanceData();
|
||||
EntryYellTimer = 1000;
|
||||
AggroYellTimer = 10000;
|
||||
}
|
||||
@@ -1015,11 +1015,11 @@ struct TRINITY_DLL_DECL boss_julianneAI : public ScriptedAI
|
||||
{
|
||||
pInstance->SetData(DATA_OPERA_EVENT, DONE);
|
||||
|
||||
if (GameObject* lDoor = GameObject::GetGameObject((*m_creature), pInstance->GetData64(DATA_GAMEOBJECT_STAGEDOORLEFT)))
|
||||
if (GameObject* lDoor = pInstance->instance->GetGameObject(pInstance->GetData64(DATA_GAMEOBJECT_STAGEDOORLEFT)))
|
||||
lDoor->SetGoState(GO_STATE_ACTIVE);
|
||||
if (GameObject* rDoor = GameObject::GetGameObject((*m_creature), pInstance->GetData64(DATA_GAMEOBJECT_STAGEDOORRIGHT)))
|
||||
if (GameObject* rDoor = pInstance->instance->GetGameObject(pInstance->GetData64(DATA_GAMEOBJECT_STAGEDOORRIGHT)))
|
||||
rDoor->SetGoState(GO_STATE_ACTIVE);
|
||||
if (GameObject* pSideEntrance = GameObject::GetGameObject((*m_creature), pInstance->GetData64(DATA_GO_SIDE_ENTRANCE_DOOR)))
|
||||
if (GameObject* pSideEntrance = pInstance->instance->GetGameObject(pInstance->GetData64(DATA_GO_SIDE_ENTRANCE_DOOR)))
|
||||
pSideEntrance->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_LOCKED);
|
||||
}
|
||||
}
|
||||
@@ -1036,7 +1036,7 @@ struct TRINITY_DLL_DECL boss_romuloAI : public ScriptedAI
|
||||
{
|
||||
boss_romuloAI(Creature* c) : ScriptedAI(c)
|
||||
{
|
||||
pInstance = (c->GetInstanceData());
|
||||
pInstance = c->GetInstanceData();
|
||||
EntryYellTimer = 8000;
|
||||
AggroYellTimer = 15000;
|
||||
}
|
||||
@@ -1104,11 +1104,11 @@ struct TRINITY_DLL_DECL boss_romuloAI : public ScriptedAI
|
||||
{
|
||||
pInstance->SetData(DATA_OPERA_EVENT, DONE);
|
||||
|
||||
if (GameObject* lDoor = GameObject::GetGameObject((*m_creature), pInstance->GetData64(DATA_GAMEOBJECT_STAGEDOORLEFT)))
|
||||
if (GameObject* lDoor = pInstance->instance->GetGameObject(pInstance->GetData64(DATA_GAMEOBJECT_STAGEDOORLEFT)))
|
||||
lDoor->SetGoState(GO_STATE_ACTIVE);
|
||||
if (GameObject* rDoor = GameObject::GetGameObject((*m_creature), pInstance->GetData64(DATA_GAMEOBJECT_STAGEDOORRIGHT)))
|
||||
if (GameObject* rDoor = pInstance->instance->GetGameObject(pInstance->GetData64(DATA_GAMEOBJECT_STAGEDOORRIGHT)))
|
||||
rDoor->SetGoState(GO_STATE_ACTIVE);
|
||||
if (GameObject* pSideEntrance = GameObject::GetGameObject((*m_creature), pInstance->GetData64(DATA_GO_SIDE_ENTRANCE_DOOR)))
|
||||
if (GameObject* pSideEntrance = pInstance->instance->GetGameObject(pInstance->GetData64(DATA_GO_SIDE_ENTRANCE_DOOR)))
|
||||
pSideEntrance->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_LOCKED);
|
||||
}
|
||||
}
|
||||
@@ -1161,7 +1161,7 @@ void boss_julianneAI::DamageTaken(Unit* done_by, uint32 &damage)
|
||||
Romulo->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
|
||||
Romulo->GetMotionMaster()->Clear();
|
||||
Romulo->setDeathState(JUST_DIED);
|
||||
Romulo->CombatStop();
|
||||
Romulo->CombatStop(true);
|
||||
Romulo->DeleteThreatList();
|
||||
Romulo->SetUInt32Value(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_LOOTABLE);
|
||||
}
|
||||
@@ -1216,7 +1216,7 @@ void boss_romuloAI::DamageTaken(Unit* done_by, uint32 &damage)
|
||||
Julianne->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
|
||||
Julianne->GetMotionMaster()->Clear();
|
||||
Julianne->setDeathState(JUST_DIED);
|
||||
Julianne->CombatStop();
|
||||
Julianne->CombatStop(true);
|
||||
Julianne->DeleteThreatList();
|
||||
Julianne->SetUInt32Value(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_LOOTABLE);
|
||||
}
|
||||
|
||||
@@ -115,7 +115,7 @@ struct TRINITY_DLL_DECL npc_barnesAI : public npc_escortAI
|
||||
npc_barnesAI(Creature* c) : npc_escortAI(c)
|
||||
{
|
||||
RaidWiped = false;
|
||||
pInstance = (c->GetInstanceData());
|
||||
pInstance = c->GetInstanceData();
|
||||
}
|
||||
|
||||
ScriptedInstance* pInstance;
|
||||
@@ -148,10 +148,10 @@ struct TRINITY_DLL_DECL npc_barnesAI : public npc_escortAI
|
||||
|
||||
Event = pInstance->GetData(DATA_OPERA_PERFORMANCE);
|
||||
|
||||
if (GameObject* Door = GameObject::GetGameObject((*m_creature), pInstance->GetData64(DATA_GAMEOBJECT_STAGEDOORLEFT)))
|
||||
if (GameObject* Door = pInstance->instance->GetGameObject(pInstance->GetData64(DATA_GAMEOBJECT_STAGEDOORLEFT)))
|
||||
Door->SetGoState(GO_STATE_READY);
|
||||
|
||||
if (GameObject* Curtain = GameObject::GetGameObject((*m_creature), pInstance->GetData64(DATA_GAMEOBJECT_CURTAINS)))
|
||||
if (GameObject* Curtain = pInstance->instance->GetGameObject(pInstance->GetData64(DATA_GAMEOBJECT_CURTAINS)))
|
||||
Curtain->SetGoState(GO_STATE_READY);
|
||||
}
|
||||
}
|
||||
@@ -180,7 +180,7 @@ struct TRINITY_DLL_DECL npc_barnesAI : public npc_escortAI
|
||||
case 5:
|
||||
if(pInstance)
|
||||
{
|
||||
if (GameObject* Door = GameObject::GetGameObject((*m_creature), pInstance->GetData64(DATA_GAMEOBJECT_STAGEDOORLEFT)))
|
||||
if (GameObject* Door = pInstance->instance->GetGameObject(pInstance->GetData64(DATA_GAMEOBJECT_STAGEDOORLEFT)))
|
||||
Door->SetGoState(GO_STATE_READY);
|
||||
}
|
||||
IsBeingEscorted = false;
|
||||
@@ -261,7 +261,7 @@ struct TRINITY_DLL_DECL npc_barnesAI : public npc_escortAI
|
||||
if(!pInstance)
|
||||
return;
|
||||
|
||||
if (GameObject* Curtain = GameObject::GetGameObject((*m_creature), pInstance->GetData64(DATA_GAMEOBJECT_CURTAINS)))
|
||||
if (GameObject* Curtain = pInstance->instance->GetGameObject(pInstance->GetData64(DATA_GAMEOBJECT_CURTAINS)))
|
||||
Curtain->SetGoState(GO_STATE_ACTIVE);
|
||||
|
||||
CurtainTimer = 0;
|
||||
@@ -315,7 +315,7 @@ struct TRINITY_DLL_DECL npc_barnesAI : public npc_escortAI
|
||||
|
||||
pInstance->SetData(DATA_OPERA_EVENT, IN_PROGRESS);
|
||||
|
||||
if (GameObject* Door = GameObject::GetGameObject((*m_creature), pInstance->GetData64(DATA_GAMEOBJECT_STAGEDOORLEFT)))
|
||||
if (GameObject* Door = pInstance->instance->GetGameObject(pInstance->GetData64(DATA_GAMEOBJECT_STAGEDOORLEFT)))
|
||||
Door->SetGoState(GO_STATE_ACTIVE);
|
||||
|
||||
m_creature->CastSpell(m_creature, SPELL_TUXEDO, true);
|
||||
@@ -486,7 +486,7 @@ struct TRINITY_DLL_DECL npc_image_of_medivhAI : public ScriptedAI
|
||||
{
|
||||
npc_image_of_medivhAI(Creature* c) : ScriptedAI(c)
|
||||
{
|
||||
pInstance = (c->GetInstanceData());
|
||||
pInstance = c->GetInstanceData();
|
||||
}
|
||||
|
||||
ScriptedInstance *pInstance;
|
||||
|
||||
@@ -79,7 +79,7 @@ struct TRINITY_DLL_DECL boss_felblood_kaelthasAI : public ScriptedAI
|
||||
{
|
||||
boss_felblood_kaelthasAI(Creature* c) : ScriptedAI(c)
|
||||
{
|
||||
pInstance = (c->GetInstanceData()); Heroic = c->GetMap()->IsHeroic();
|
||||
pInstance = c->GetInstanceData(); Heroic = c->GetMap()->IsHeroic();
|
||||
}
|
||||
|
||||
ScriptedInstance* pInstance;
|
||||
@@ -130,8 +130,7 @@ struct TRINITY_DLL_DECL boss_felblood_kaelthasAI : public ScriptedAI
|
||||
if (pInstance)
|
||||
pInstance->SetData(DATA_KAELTHAS_EVENT, 0);
|
||||
|
||||
GameObject* Door = GameObject::GetGameObject(*m_creature, pInstance->GetData64(DATA_KAEL_DOOR));
|
||||
if (Door)
|
||||
if (GameObject* Door = pInstance->instance->GetGameObject(pInstance->GetData64(DATA_KAEL_DOOR)))
|
||||
Door->SetGoState(GO_STATE_ACTIVE); // Open the big encounter door. Close it in Aggro and open it only in JustDied(and here)
|
||||
// Small door opened after event are expected to be closed by default
|
||||
}
|
||||
@@ -139,8 +138,7 @@ struct TRINITY_DLL_DECL boss_felblood_kaelthasAI : public ScriptedAI
|
||||
void JustDied(Unit *killer)
|
||||
{
|
||||
DoScriptText(SAY_DEATH, m_creature);
|
||||
GameObject* EncounterDoor = GameObject::GetGameObject((*m_creature), pInstance->GetData64(DATA_KAEL_DOOR));
|
||||
if (EncounterDoor)
|
||||
if (GameObject* EncounterDoor = pInstance->instance->GetGameObject(pInstance->GetData64(DATA_KAEL_DOOR)))
|
||||
EncounterDoor->SetGoState(GO_STATE_ACTIVE); // Open the encounter door
|
||||
}
|
||||
|
||||
@@ -154,8 +152,7 @@ struct TRINITY_DLL_DECL boss_felblood_kaelthasAI : public ScriptedAI
|
||||
{
|
||||
if (pInstance)
|
||||
{
|
||||
GameObject* EncounterDoor = GameObject::GetGameObject(*m_creature, pInstance->GetData64(DATA_KAEL_DOOR));
|
||||
if (EncounterDoor)
|
||||
if (GameObject* EncounterDoor = pInstance->instance->GetGameObject(pInstance->GetData64(DATA_KAEL_DOOR)))
|
||||
EncounterDoor->SetGoState(GO_STATE_READY); //Close the encounter door, open it in JustDied/Reset
|
||||
}
|
||||
}
|
||||
@@ -347,10 +344,10 @@ struct TRINITY_DLL_DECL boss_felblood_kaelthasAI : public ScriptedAI
|
||||
|
||||
if (pInstance)
|
||||
{
|
||||
GameObject* KaelLeft = GameObject::GetGameObject(*m_creature, pInstance->GetData64(DATA_KAEL_STATUE_LEFT));
|
||||
if (KaelLeft) KaelLeft->SetGoState(GO_STATE_ACTIVE);
|
||||
GameObject* KaelRight = GameObject::GetGameObject(*m_creature, pInstance->GetData64(DATA_KAEL_STATUE_RIGHT));
|
||||
if (KaelRight) KaelRight->SetGoState(GO_STATE_ACTIVE);
|
||||
if (GameObject* KaelLeft = pInstance->instance->GetGameObject(pInstance->GetData64(DATA_KAEL_STATUE_LEFT)))
|
||||
KaelLeft->SetGoState(GO_STATE_ACTIVE);
|
||||
if (GameObject* KaelRight = pInstance->instance->GetGameObject(pInstance->GetData64(DATA_KAEL_STATUE_RIGHT)))
|
||||
KaelRight->SetGoState(GO_STATE_ACTIVE);
|
||||
}
|
||||
}else
|
||||
{
|
||||
@@ -450,7 +447,7 @@ struct TRINITY_DLL_DECL mob_felkael_phoenixAI : public ScriptedAI
|
||||
{
|
||||
mob_felkael_phoenixAI(Creature* c) : ScriptedAI(c)
|
||||
{
|
||||
pInstance = (c->GetInstanceData());
|
||||
pInstance = c->GetInstanceData();
|
||||
}
|
||||
|
||||
ScriptedInstance* pInstance;
|
||||
|
||||
@@ -96,7 +96,7 @@ struct TRINITY_DLL_DECL boss_priestess_delrissaAI : public ScriptedAI
|
||||
{
|
||||
boss_priestess_delrissaAI(Creature* c) : ScriptedAI(c)
|
||||
{
|
||||
pInstance = (c->GetInstanceData());
|
||||
pInstance = c->GetInstanceData();
|
||||
Heroic = c->GetMap()->IsHeroic();
|
||||
}
|
||||
|
||||
@@ -231,7 +231,7 @@ struct TRINITY_DLL_DECL boss_priestess_delrissaAI : public ScriptedAI
|
||||
|
||||
pInstance->SetData(DATA_DELRISSA_EVENT, DONE);
|
||||
|
||||
if (GameObject* Door = GameObject::GetGameObject(*m_creature, pInstance->GetData64(DATA_DELRISSA_DOOR)))
|
||||
if (GameObject* Door = pInstance->instance->GetGameObject(pInstance->GetData64(DATA_DELRISSA_DOOR)))
|
||||
Door->SetGoState(GO_STATE_ACTIVE);
|
||||
}
|
||||
|
||||
@@ -358,7 +358,7 @@ struct TRINITY_DLL_DECL boss_priestess_guestAI : public ScriptedAI
|
||||
boss_priestess_guestAI(Creature* c) : ScriptedAI(c)
|
||||
{
|
||||
Group.clear();
|
||||
pInstance = (c->GetInstanceData());
|
||||
pInstance = c->GetInstanceData();
|
||||
AcquireGUIDs();
|
||||
}
|
||||
|
||||
|
||||
@@ -53,7 +53,7 @@ struct TRINITY_DLL_DECL boss_selin_fireheartAI : public ScriptedAI
|
||||
{
|
||||
boss_selin_fireheartAI(Creature* c) : ScriptedAI(c)
|
||||
{
|
||||
pInstance = (c->GetInstanceData());
|
||||
pInstance = c->GetInstanceData();
|
||||
|
||||
Crystals.clear();
|
||||
//GUIDs per instance is static, so we only need to load them once.
|
||||
@@ -105,8 +105,7 @@ struct TRINITY_DLL_DECL boss_selin_fireheartAI : public ScriptedAI
|
||||
}
|
||||
}
|
||||
|
||||
GameObject* Door = GameObject::GetGameObject(*m_creature, pInstance->GetData64(DATA_SELIN_ENCOUNTER_DOOR));
|
||||
if (Door)
|
||||
if (GameObject* Door = pInstance->instance->GetGameObject(pInstance->GetData64(DATA_SELIN_ENCOUNTER_DOOR)))
|
||||
Door->SetGoState(GO_STATE_ACTIVE); // Open the big encounter door. Close it in Aggro and open it only in JustDied(and here)
|
||||
// Small door opened after event are expected to be closed by default
|
||||
// Set Inst data for encounter
|
||||
@@ -187,8 +186,7 @@ struct TRINITY_DLL_DECL boss_selin_fireheartAI : public ScriptedAI
|
||||
|
||||
if (pInstance)
|
||||
{
|
||||
GameObject* EncounterDoor = GameObject::GetGameObject(*m_creature, pInstance->GetData64(DATA_SELIN_ENCOUNTER_DOOR));
|
||||
if (EncounterDoor)
|
||||
if (GameObject* EncounterDoor = pInstance->instance->GetGameObject(pInstance->GetData64(DATA_SELIN_ENCOUNTER_DOOR)))
|
||||
EncounterDoor->SetGoState(GO_STATE_READY); //Close the encounter door, open it in JustDied/Reset
|
||||
}
|
||||
}
|
||||
@@ -236,12 +234,10 @@ struct TRINITY_DLL_DECL boss_selin_fireheartAI : public ScriptedAI
|
||||
|
||||
pInstance->SetData(DATA_SELIN_EVENT, DONE); // Encounter complete!
|
||||
|
||||
GameObject* EncounterDoor = GameObject::GetGameObject((*m_creature), pInstance->GetData64(DATA_SELIN_ENCOUNTER_DOOR));
|
||||
if (EncounterDoor)
|
||||
if (GameObject* EncounterDoor = pInstance->instance->GetGameObject(pInstance->GetData64(DATA_SELIN_ENCOUNTER_DOOR)))
|
||||
EncounterDoor->SetGoState(GO_STATE_ACTIVE); // Open the encounter door
|
||||
|
||||
GameObject* ContinueDoor = GameObject::GetGameObject(*m_creature, pInstance->GetData64(DATA_SELIN_DOOR));
|
||||
if (ContinueDoor)
|
||||
if (GameObject* ContinueDoor = pInstance->instance->GetGameObject(pInstance->GetData64(DATA_SELIN_DOOR)))
|
||||
ContinueDoor->SetGoState(GO_STATE_ACTIVE); // Open the door leading further in
|
||||
|
||||
ShatterRemainingCrystals();
|
||||
|
||||
@@ -53,7 +53,7 @@ struct TRINITY_DLL_DECL boss_vexallusAI : public ScriptedAI
|
||||
{
|
||||
boss_vexallusAI(Creature *c) : ScriptedAI(c)
|
||||
{
|
||||
pInstance = (c->GetInstanceData()); Heroic = c->GetMap()->IsHeroic();
|
||||
pInstance = c->GetInstanceData(); Heroic = c->GetMap()->IsHeroic();
|
||||
Heroic = c->GetMap()->IsHeroic();
|
||||
}
|
||||
|
||||
@@ -91,7 +91,7 @@ struct TRINITY_DLL_DECL boss_vexallusAI : public ScriptedAI
|
||||
{
|
||||
pInstance->SetData(DATA_VEXALLUS_EVENT, DONE);
|
||||
|
||||
if (GameObject* Door = GameObject::GetGameObject((*m_creature), pInstance->GetData64(DATA_VEXALLUS_DOOR)))
|
||||
if (GameObject* Door = pInstance->instance->GetGameObject(pInstance->GetData64(DATA_VEXALLUS_DOOR)))
|
||||
Door->SetGoState(GO_STATE_ACTIVE);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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());
|
||||
|
||||
@@ -40,7 +40,7 @@ struct TRINITY_DLL_DECL boss_golemaggAI : public ScriptedAI
|
||||
{
|
||||
boss_golemaggAI(Creature *c) : ScriptedAI(c)
|
||||
{
|
||||
pInstance = (c->GetInstanceData());
|
||||
pInstance = c->GetInstanceData();
|
||||
}
|
||||
ScriptedInstance *pInstance;
|
||||
|
||||
@@ -118,7 +118,7 @@ struct TRINITY_DLL_DECL mob_core_ragerAI : public ScriptedAI
|
||||
{
|
||||
mob_core_ragerAI(Creature *c) : ScriptedAI(c)
|
||||
{
|
||||
pInstance = (c->GetInstanceData());
|
||||
pInstance = c->GetInstanceData();
|
||||
}
|
||||
|
||||
uint32 Mangle_Timer;
|
||||
|
||||
@@ -55,7 +55,7 @@ struct TRINITY_DLL_DECL boss_majordomoAI : public ScriptedAI
|
||||
{
|
||||
boss_majordomoAI(Creature *c) : ScriptedAI(c)
|
||||
{
|
||||
pInstance = (c->GetInstanceData());
|
||||
pInstance = c->GetInstanceData();
|
||||
}
|
||||
|
||||
ScriptedInstance* pInstance;
|
||||
|
||||
@@ -39,7 +39,7 @@ struct TRINITY_DLL_DECL boss_sulfuronAI : public ScriptedAI
|
||||
{
|
||||
boss_sulfuronAI(Creature *c) : ScriptedAI(c)
|
||||
{
|
||||
pInstance = (c->GetInstanceData());
|
||||
pInstance = c->GetInstanceData();
|
||||
}
|
||||
|
||||
uint32 Darkstrike_Timer;
|
||||
@@ -126,7 +126,7 @@ struct TRINITY_DLL_DECL mob_flamewaker_priestAI : public ScriptedAI
|
||||
{
|
||||
mob_flamewaker_priestAI(Creature *c) : ScriptedAI(c)
|
||||
{
|
||||
pInstance = (c->GetInstanceData());
|
||||
pInstance = c->GetInstanceData();
|
||||
}
|
||||
|
||||
uint32 Heal_Timer;
|
||||
|
||||
@@ -93,8 +93,6 @@ struct TRINITY_DLL_DECL npc_kyle_frenziedAI : public ScriptedAI
|
||||
m_creature->UpdateEntry(NPC_KYLE_FRENZIED);
|
||||
}
|
||||
|
||||
void Aggro(Unit* who) { }
|
||||
|
||||
void SpellHit(Unit* pCaster, SpellEntry const* pSpell)
|
||||
{
|
||||
if (!m_creature->isInCombat() && !bEvent && pSpell->Id == SPELL_LUNCH)
|
||||
@@ -152,8 +150,8 @@ struct TRINITY_DLL_DECL npc_kyle_frenziedAI : public ScriptedAI
|
||||
case 3:
|
||||
uiEventTimer = 5000;
|
||||
|
||||
if (Unit* pUnit = Unit::GetUnit(*m_creature,uiPlayerGUID))
|
||||
((Player*)pUnit)->TalkedToCreature(m_creature->GetEntry(), m_creature->GetGUID());
|
||||
if (Player* pUnit = Unit::GetPlayer(uiPlayerGUID))
|
||||
pUnit->TalkedToCreature(m_creature->GetEntry(), m_creature->GetGUID());
|
||||
|
||||
m_creature->UpdateEntry(NPC_KYLE_FRIENDLY);
|
||||
break;
|
||||
|
||||
@@ -109,6 +109,17 @@ struct TRINITY_DLL_DECL mob_lumpAI : public ScriptedAI
|
||||
m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
|
||||
}
|
||||
|
||||
void AttackedBy(Unit* pAttacker)
|
||||
{
|
||||
if (m_creature->getVictim())
|
||||
return;
|
||||
|
||||
if (m_creature->IsFriendlyTo(pAttacker))
|
||||
return;
|
||||
|
||||
AttackStart(pAttacker);
|
||||
}
|
||||
|
||||
void DamageTaken(Unit *done_by, uint32 & damage)
|
||||
{
|
||||
if (done_by->GetTypeId() == TYPEID_PLAYER && (m_creature->GetHealth() - damage)*100 / m_creature->GetMaxHealth() < 30)
|
||||
@@ -122,7 +133,7 @@ struct TRINITY_DLL_DECL mob_lumpAI : public ScriptedAI
|
||||
m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
|
||||
m_creature->RemoveAllAuras();
|
||||
m_creature->DeleteThreatList();
|
||||
m_creature->CombatStop();
|
||||
m_creature->CombatStop(true);
|
||||
m_creature->setFaction(1080); //friendly
|
||||
m_creature->SetStandState(UNIT_STAND_STATE_SIT);
|
||||
DoScriptText(LUMP_DEFEAT, m_creature);
|
||||
|
||||
@@ -276,7 +276,7 @@ struct TRINITY_DLL_DECL mob_gothik_minionAI : public SpellAI
|
||||
{
|
||||
if(me->isSummon())
|
||||
{
|
||||
if(Unit *owner = ((TempSummon*)me)->GetSummoner())
|
||||
if(Unit *owner = CAST_SUM(me)->GetSummoner())
|
||||
SpellAI::JustDied(owner);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -74,7 +74,7 @@ struct TRINITY_DLL_DECL boss_highlord_mograineAI : public ScriptedAI
|
||||
|
||||
void InitialYell()
|
||||
{
|
||||
if(!InCombat)
|
||||
if(!m_creature->isInCombat())
|
||||
{
|
||||
switch(rand()%3)
|
||||
{
|
||||
|
||||
@@ -82,7 +82,7 @@ struct TRINITY_DLL_DECL boss_anomalusAI : public ScriptedAI
|
||||
pInstance->SetData(DATA_ANOMALUS_EVENT, NOT_STARTED);
|
||||
}
|
||||
|
||||
void Aggro(Unit* who)
|
||||
void EnterCombat(Unit* who)
|
||||
{
|
||||
DoScriptText(SAY_AGGRO, m_creature);
|
||||
}
|
||||
|
||||
@@ -94,7 +94,7 @@ struct TRINITY_DLL_DECL boss_keristraszaAI : public ScriptedAI
|
||||
}
|
||||
}
|
||||
|
||||
void Aggro(Unit* who)
|
||||
void EnterCombat(Unit* who)
|
||||
{
|
||||
DoScriptText(SAY_AGGRO, m_creature);
|
||||
DoCast(m_creature, SPELL_INTENSE_COLD);
|
||||
|
||||
@@ -105,7 +105,7 @@ struct TRINITY_DLL_DECL boss_magus_telestraAI : public ScriptedAI
|
||||
pInstance->SetData(DATA_MAGUS_TELESTRA_EVENT, NOT_STARTED);
|
||||
}
|
||||
|
||||
void Aggro(Unit* who)
|
||||
void EnterCombat(Unit* who)
|
||||
{
|
||||
DoScriptText(SAY_AGGRO, m_creature);
|
||||
}
|
||||
|
||||
@@ -89,7 +89,7 @@ struct TRINITY_DLL_DECL boss_ormorokAI : public ScriptedAI
|
||||
pInstance->SetData(DATA_ORMOROK_EVENT, NOT_STARTED);
|
||||
}
|
||||
|
||||
void Aggro(Unit* who)
|
||||
void EnterCombat(Unit* who)
|
||||
{
|
||||
DoScriptText(SAY_AGGRO, m_creature);
|
||||
}
|
||||
|
||||
@@ -101,7 +101,7 @@ struct TRINITY_DLL_DECL npc_shenthulAI : public ScriptedAI
|
||||
{
|
||||
if (Reset_Timer < diff)
|
||||
{
|
||||
if (Player* pPlayer = (Player*)Unit::GetUnit((*m_creature),playerGUID))
|
||||
if (Player* pPlayer = Unit::GetPlayer(playerGUID))
|
||||
{
|
||||
if (pPlayer->GetTypeId() == TYPEID_PLAYER && pPlayer->GetQuestStatus(QUEST_SHATTERED_SALUTE) == QUEST_STATUS_INCOMPLETE)
|
||||
pPlayer->FailQuest(QUEST_SHATTERED_SALUTE);
|
||||
|
||||
@@ -76,7 +76,7 @@ struct TRINITY_DLL_DECL instance_razorfen_kraul : public ScriptedInstance
|
||||
return;
|
||||
}
|
||||
|
||||
if (GameObject *go = GameObject::GetGameObject(*player,guid))
|
||||
if (GameObject *go = instance->GetGameObject(guid))
|
||||
go->SetGoState(GOState(state));
|
||||
}
|
||||
|
||||
|
||||
@@ -143,7 +143,7 @@ struct TRINITY_DLL_DECL npc_deaths_head_ward_keeperAI : public ScriptedAI
|
||||
{
|
||||
npc_deaths_head_ward_keeperAI(Creature *c) : ScriptedAI(c)
|
||||
{
|
||||
pInstance = ((ScriptedInstance*)c->GetInstanceData());
|
||||
pInstance = c->GetInstanceData();
|
||||
Reset();
|
||||
}
|
||||
|
||||
@@ -155,10 +155,6 @@ struct TRINITY_DLL_DECL npc_deaths_head_ward_keeperAI : public ScriptedAI
|
||||
QuillboarChanneling_Timer = 1500;
|
||||
}
|
||||
|
||||
void Aggro(Unit *who)
|
||||
{
|
||||
}
|
||||
|
||||
void UpdateAI(const uint32 diff)
|
||||
{
|
||||
if (!m_creature->isAlive())
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user