*Merged with 464.

--HG--
branch : trunk
This commit is contained in:
Blaymoira
2008-12-12 20:34:51 +01:00
87 changed files with 980 additions and 821 deletions
@@ -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:
{
@@ -26,4 +26,5 @@
#define DATA_FATHOMLORDKARATHRESSEVENT 19
#define DATA_LEOTHERAS 20
#define DATA_LEOTHERAS_EVENT_STARTER 21
#define DATA_CONTROL_CONSOLE 22
#endif
@@ -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);
}
}
}