*Merged with 464.
--HG-- branch : trunk
This commit is contained in:
@@ -364,6 +364,10 @@ struct TRINITY_DLL_DECL boss_illidan_stormrageAI : public ScriptedAI
|
||||
{
|
||||
pInstance = ((ScriptedInstance*)c->GetInstanceData());
|
||||
Reset();
|
||||
|
||||
SpellEntry *TempSpell = (SpellEntry*)GetSpellStore()->LookupEntry(SPELL_SHADOWFIEND_PASSIVE);
|
||||
if(TempSpell)
|
||||
TempSpell->EffectApplyAuraName[0] = 4; // proc debuff, and summon infinite fiends
|
||||
}
|
||||
|
||||
ScriptedInstance* pInstance;
|
||||
@@ -1736,14 +1740,14 @@ struct TRINITY_DLL_DECL mob_parasitic_shadowfiendAI : public ScriptedAI
|
||||
DoCast(m_creature, SPELL_SHADOWFIEND_PASSIVE, true);
|
||||
}
|
||||
|
||||
void Aggro(Unit* who) {}
|
||||
void MoveInLineOfSight(Unit *who){}
|
||||
void Aggro(Unit* who) { DoZoneInCombat(); }
|
||||
|
||||
void DoMeleeAttackIfReady()
|
||||
{
|
||||
if( m_creature->isAttackReady() && m_creature->IsWithinMeleeRange(m_creature->getVictim()))
|
||||
{
|
||||
if(!m_creature->getVictim()->HasAura(SPELL_PARASITIC_SHADOWFIEND, 0) && !m_creature->getVictim()->HasAura(SPELL_PARASITIC_SHADOWFIEND2, 0))
|
||||
if(!m_creature->getVictim()->HasAura(SPELL_PARASITIC_SHADOWFIEND, 0)
|
||||
&& !m_creature->getVictim()->HasAura(SPELL_PARASITIC_SHADOWFIEND2, 0))
|
||||
{
|
||||
m_creature->CastSpell(m_creature->getVictim(), SPELL_PARASITIC_SHADOWFIEND2, true, 0, 0, IllidanGUID); //do not stack
|
||||
}
|
||||
@@ -1756,16 +1760,15 @@ struct TRINITY_DLL_DECL mob_parasitic_shadowfiendAI : public ScriptedAI
|
||||
{
|
||||
if(!m_creature->getVictim())
|
||||
{
|
||||
if(GETCRE(Illidan, IllidanGUID))
|
||||
if(Unit *target = SelectUnit(SELECT_TARGET_RANDOM, 0, 999, true))
|
||||
AttackStart(target);
|
||||
else
|
||||
{
|
||||
if(Illidan->getVictim() && !Illidan->getVictim()->HasAura(SPELL_PARASITIC_SHADOWFIEND, 0))
|
||||
AttackStart(Illidan->getVictim());
|
||||
else
|
||||
AttackStart(((boss_illidan_stormrageAI*)Illidan->AI())->SelectUnit(SELECT_TARGET_RANDOM, 1));
|
||||
m_creature->SetVisibility(VISIBILITY_OFF);
|
||||
m_creature->setDeathState(JUST_DIED);
|
||||
return;
|
||||
}
|
||||
}
|
||||
else
|
||||
DoMeleeAttackIfReady();
|
||||
|
||||
if(CheckTimer < diff)
|
||||
{
|
||||
@@ -1777,6 +1780,8 @@ struct TRINITY_DLL_DECL mob_parasitic_shadowfiendAI : public ScriptedAI
|
||||
return;
|
||||
}else CheckTimer = 5000;
|
||||
}else CheckTimer -= diff;
|
||||
|
||||
DoMeleeAttackIfReady();
|
||||
}
|
||||
};
|
||||
|
||||
@@ -1866,13 +1871,19 @@ void boss_illidan_stormrageAI::JustSummoned(Creature* summon)
|
||||
switch(summon->GetEntry())
|
||||
{
|
||||
case PARASITIC_SHADOWFIEND:
|
||||
case SHADOW_DEMON:
|
||||
{
|
||||
if(Unit *target = SelectUnit(SELECT_TARGET_RANDOM, 0, 999, true)) // only on players.
|
||||
{
|
||||
summon->AddThreat(target, 5000000.0f);
|
||||
Unit *target = SelectUnit(SELECT_TARGET_TOPAGGRO, 0, 999, true);
|
||||
if(!target || target->HasAura(SPELL_PARASITIC_SHADOWFIEND, 0)
|
||||
|| target->HasAura(SPELL_PARASITIC_SHADOWFIEND2, 0))
|
||||
target = SelectUnit(SELECT_TARGET_RANDOM, 0, 999, true);
|
||||
if(target)
|
||||
summon->AI()->AttackStart(target);
|
||||
}
|
||||
}break;
|
||||
case SHADOW_DEMON:
|
||||
if(Unit *target = SelectUnit(SELECT_TARGET_RANDOM, 0, 999, true)) // only on players.
|
||||
{
|
||||
summon->AddThreat(target, 5000000.0f);
|
||||
summon->AI()->AttackStart(target);
|
||||
}break;
|
||||
case MAIEV_SHADOWSONG:
|
||||
{
|
||||
|
||||
+1
@@ -26,4 +26,5 @@
|
||||
#define DATA_FATHOMLORDKARATHRESSEVENT 19
|
||||
#define DATA_LEOTHERAS 20
|
||||
#define DATA_LEOTHERAS_EVENT_STARTER 21
|
||||
#define DATA_CONTROL_CONSOLE 22
|
||||
#endif
|
||||
|
||||
+89
-24
@@ -35,9 +35,22 @@ EndScriptData */
|
||||
5 - Lady Vashj Event
|
||||
*/
|
||||
|
||||
bool GOHello_go_bridge_console(Player *player, GameObject* _GO)
|
||||
{
|
||||
ScriptedInstance* pInstance = (ScriptedInstance*)_GO->GetInstanceData();
|
||||
|
||||
if(!pInstance)
|
||||
return false;
|
||||
|
||||
if (pInstance)
|
||||
pInstance->SetData(DATA_CONTROL_CONSOLE, DONE);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
struct TRINITY_DLL_DECL instance_serpentshrine_cavern : public ScriptedInstance
|
||||
{
|
||||
instance_serpentshrine_cavern(Map *Map) : ScriptedInstance(Map) {Initialize();};
|
||||
instance_serpentshrine_cavern(Map *map) : ScriptedInstance(map) {Initialize();};
|
||||
|
||||
uint64 LurkerBelow;
|
||||
uint64 Sharkkis;
|
||||
@@ -46,12 +59,13 @@ struct TRINITY_DLL_DECL instance_serpentshrine_cavern : public ScriptedInstance
|
||||
uint64 LadyVashj;
|
||||
uint64 Karathress;
|
||||
uint64 KarathressEvent_Starter;
|
||||
|
||||
uint64 LeotherasTheBlind;
|
||||
uint64 LeotherasEventStarter;
|
||||
|
||||
bool ShieldGeneratorDeactivated[4];
|
||||
uint64 ControlConsole;
|
||||
uint64 BridgePart[3];
|
||||
|
||||
bool ShieldGeneratorDeactivated[4];
|
||||
bool Encounters[ENCOUNTERS];
|
||||
|
||||
void Initialize()
|
||||
@@ -63,10 +77,14 @@ struct TRINITY_DLL_DECL instance_serpentshrine_cavern : public ScriptedInstance
|
||||
LadyVashj = 0;
|
||||
Karathress = 0;
|
||||
KarathressEvent_Starter = 0;
|
||||
|
||||
LeotherasTheBlind = 0;
|
||||
LeotherasEventStarter = 0;
|
||||
|
||||
ControlConsole = 0;
|
||||
BridgePart[0] = 0;
|
||||
BridgePart[1] = 0;
|
||||
BridgePart[2] = 0;
|
||||
|
||||
ShieldGeneratorDeactivated[0] = false;
|
||||
ShieldGeneratorDeactivated[1] = false;
|
||||
ShieldGeneratorDeactivated[2] = false;
|
||||
@@ -84,6 +102,38 @@ struct TRINITY_DLL_DECL instance_serpentshrine_cavern : public ScriptedInstance
|
||||
return false;
|
||||
}
|
||||
|
||||
void OnObjectCreate(GameObject *go)
|
||||
{
|
||||
switch(go->GetEntry())
|
||||
{
|
||||
case 184568:
|
||||
ControlConsole = go->GetGUID();
|
||||
go->setActive(true);
|
||||
break;
|
||||
|
||||
case 184203:
|
||||
BridgePart[0] = go->GetGUID();
|
||||
go->setActive(true);
|
||||
break;
|
||||
|
||||
case 184204:
|
||||
BridgePart[1] = go->GetGUID();
|
||||
go->setActive(true);
|
||||
break;
|
||||
|
||||
case 184205:
|
||||
BridgePart[2] = go->GetGUID();
|
||||
go->setActive(true);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void OpenDoor(uint64 DoorGUID, bool open)
|
||||
{
|
||||
if(GameObject *Door = instance->GetGameObjectInMap(DoorGUID))
|
||||
Door->SetUInt32Value(GAMEOBJECT_STATE, open ? 0 : 1);
|
||||
}
|
||||
|
||||
void OnCreatureCreate(Creature *creature, uint32 creature_entry)
|
||||
{
|
||||
switch(creature_entry)
|
||||
@@ -126,26 +176,35 @@ struct TRINITY_DLL_DECL instance_serpentshrine_cavern : public ScriptedInstance
|
||||
{
|
||||
switch(type)
|
||||
{
|
||||
case DATA_HYDROSSTHEUNSTABLEEVENT: Encounters[0] = data; break;
|
||||
case DATA_LEOTHERASTHEBLINDEVENT: Encounters[1] = data; break;
|
||||
case DATA_THELURKERBELOWEVENT: Encounters[2] = data; break;
|
||||
case DATA_KARATHRESSEVENT: Encounters[3] = data; break;
|
||||
case DATA_MOROGRIMTIDEWALKEREVENT: Encounters[4] = data; break;
|
||||
//Lady Vashj
|
||||
case DATA_LADYVASHJEVENT:
|
||||
if(data == NOT_STARTED)
|
||||
{
|
||||
ShieldGeneratorDeactivated[0] = false;
|
||||
ShieldGeneratorDeactivated[1] = false;
|
||||
ShieldGeneratorDeactivated[2] = false;
|
||||
ShieldGeneratorDeactivated[3] = false;
|
||||
}
|
||||
Encounters[5] = data; break;
|
||||
case DATA_SHIELDGENERATOR1:ShieldGeneratorDeactivated[0] = (data) ? true : false; break;
|
||||
case DATA_SHIELDGENERATOR2:ShieldGeneratorDeactivated[1] = (data) ? true : false; break;
|
||||
case DATA_SHIELDGENERATOR3:ShieldGeneratorDeactivated[2] = (data) ? true : false; break;
|
||||
case DATA_SHIELDGENERATOR4:ShieldGeneratorDeactivated[3] = (data) ? true : false; break;
|
||||
}
|
||||
case DATA_CONTROL_CONSOLE:
|
||||
if(data = DONE)
|
||||
{
|
||||
OpenDoor(BridgePart[0], true);
|
||||
OpenDoor(BridgePart[1], true);
|
||||
OpenDoor(BridgePart[2], true);
|
||||
}
|
||||
ControlConsole = data;
|
||||
case DATA_HYDROSSTHEUNSTABLEEVENT: Encounters[0] = data; break;
|
||||
case DATA_LEOTHERASTHEBLINDEVENT: Encounters[1] = data; break;
|
||||
case DATA_THELURKERBELOWEVENT: Encounters[2] = data; break;
|
||||
case DATA_KARATHRESSEVENT: Encounters[3] = data; break;
|
||||
case DATA_MOROGRIMTIDEWALKEREVENT: Encounters[4] = data; break;
|
||||
//Lady Vashj
|
||||
case DATA_LADYVASHJEVENT:
|
||||
if(data == NOT_STARTED)
|
||||
{
|
||||
ShieldGeneratorDeactivated[0] = false;
|
||||
ShieldGeneratorDeactivated[1] = false;
|
||||
ShieldGeneratorDeactivated[2] = false;
|
||||
ShieldGeneratorDeactivated[3] = false;
|
||||
}
|
||||
Encounters[5] = data; break;
|
||||
case DATA_SHIELDGENERATOR1:ShieldGeneratorDeactivated[0] = (data) ? true : false; break;
|
||||
case DATA_SHIELDGENERATOR2:ShieldGeneratorDeactivated[1] = (data) ? true : false; break;
|
||||
case DATA_SHIELDGENERATOR3:ShieldGeneratorDeactivated[2] = (data) ? true : false; break;
|
||||
case DATA_SHIELDGENERATOR4:ShieldGeneratorDeactivated[3] = (data) ? true : false; break;
|
||||
}
|
||||
|
||||
if(data = DONE)
|
||||
SaveToDB();
|
||||
}
|
||||
@@ -212,8 +271,14 @@ InstanceData* GetInstanceData_instance_serpentshrine_cavern(Map* map)
|
||||
void AddSC_instance_serpentshrine_cavern()
|
||||
{
|
||||
Script *newscript;
|
||||
|
||||
newscript = new Script;
|
||||
newscript->Name = "instance_serpent_shrine";
|
||||
newscript->GetInstanceData = GetInstanceData_instance_serpentshrine_cavern;
|
||||
newscript->RegisterSelf();
|
||||
|
||||
newscript = new Script;
|
||||
newscript->Name="go_bridge_console";
|
||||
newscript->pGOHello = &GOHello_go_bridge_console;
|
||||
newscript->RegisterSelf();
|
||||
}
|
||||
|
||||
@@ -279,7 +279,7 @@ struct TRINITY_DLL_DECL boss_felblood_kaelthasAI : public ScriptedAI
|
||||
data.append(i_pl->GetPackGUID());
|
||||
data << uint32(0);
|
||||
i_pl->SendMessageToSet(&data, true);
|
||||
i_pl->SetSpeed(MOVE_FLY, 2.0f);
|
||||
i_pl->SetSpeed(MOVE_FLIGHT, 2.0f);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user