Salut a tous voici un script de freya , inspiré d'Hellscream
[code=cpp]/* Copyright klaas*/
#include "precompiled.h"
#include "def_ulduar.h"
#define SP_ATTUNED_TO_NATURE 62519
#define SP_TOUCH_OF_EONAR 62528
#define H_SP_TOUCH_OF_EONAR 62892
#define SP_SUNBEAM 62623
#define H_SP_SUNBEAM 62872
#define SP_GROUND_TREMOR 62437
#define H_SP_GROUND_TREMOR 62859
#define SP_BERSERK 47008
#define CR_DETONATING_LASHER 32918
#define CR_ANCIENT_CONSERVATOR 33203
#define CR_WATER_SPIRIT 33202
#define CR_STORM_LASHER 32919
#define CR_SNAPLASHER 32916
class MANGOS_DLL_DECL boss_freyaAI : public ScriptedAI
{
boss_freyaAI(Creature* pCreature) : ScriptedAI(pCreature)
{
pInstance = (ScriptedInstance*)pCreature->GetInstanceData();
bool Regular = pCreature->GetMap()->IsRegularDifficulty();
Reset();
}
ScriptedInstance *pInstance;
uint32 SummonTimer;
uint32 WaveNumber;
uint32 WaveType;
uint32 TouchOfEonarTimer;
uint32 SunbeamTimer;
uint32 GroundTremorTimer;
uint32 BerserkTimer;
uint32 WaveNumber;
bool Regular;
ScriptedInstance *pInstance;
void Reset()
{
SummonTimer = 15000;
TouchOfEonarTimer = 6000;//1 Minute dans la phase 1
SunbeamTimer = 4000 + rand()%10000;
GroundTremorTimer = 6000 + rand()%150000;
BerserkTimer = 600000; //10 minutes
WaveNumber = 0;
}
void Aggro(Unit *who)
{
pCreature->AddAura(SP_ATTUNED_TO_NATURE);
pCreature->GetAura(SP_ATTUNED_TO_NATURE , EFFECT_INDEX_0)->SetStackAmount(150);
if(pInstance) pInstance->SetData(TYPE_FREYA,IN_PROGRESS);
}
void JustDied(Unit *killer)
{
if(pInstance) pInstance->SetData(TYPE_FREYA, DONE);
}
void Phase1()
{
if(TouchOfEonarTimer < diff)
{
if( Unit *target = m_creature->SelectAttackingTarget(ATTACKING_TARGET_RANDOM, 0))
DoCast(target, Regular ? SP_TOUCH_OF_EONAR : H_SP_TOUCH_OF_EONAR);
TouchOfEonarTimer = 6000;
}else TouchOfEonarTimer -= diff;
if(WaveNumber < 6)
{
if(SummonTimer < diff)
{
switch(WaveType)
{
case 0: SummonLashers(); break;
case 1: SummonConservator(); break;
case 2: SummonElementals(); break;
}
WaveType = (WaveType + WaveTypeInc) % 3;
++WaveNumber;
SummonTimer = 60000;
}
else SummonTimer -= diff;
}
}
void SummonLashers()
{
int i;
float x,y;
for(i=0; i<10; ++i)
{
x = (rand_norm() * 30.0f) - 15.0f;
y = (rand_norm() * 30.0f) - 15.0f;
Creature *lasher = DoSpawnCreature(CR_DETONATING_LASHER, x, y, 0, 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 2000);
Unit *target = m_creature->SelectAttackingTarget(ATTACKING_TARGET_RANDOM, 0);
if(lasher && target)
lasher->AddThreat(target, 1.0f);
}
}
void SummonConservator()
{
float x = (rand_norm() * 30.0f) - 15.0f;
float y = (rand_norm() * 30.0f) - 15.0f;
Creature *add = DoSpawnCreature(CR_ANCIENT_CONSERVATOR, x, y, 0, 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 2000);
Unit *target = m_creature->SelectAttackingTarget(ATTACKING_TARGET_RANDOM, 0);
if(add && target)
add->AddThreat(target, 1.0f);
}
void SummonElementals()
{
Creature *add;
Unit *target;
add = DoSpawnCreature(CR_WATER_SPIRIT, 0, 0, 0, 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 2000);
target = m_creature->SelectAttackingTarget(ATTACKING_TARGET_RANDOM, 0);
if(add && target)
add->AddThreat(target, 1.0f);
add = DoSpawnCreature(CR_STORM_LASHER, 0, 0, 0, 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 2000);
target = m_creature->SelectAttackingTarget(ATTACKING_TARGET_RANDOM, 0);
if(add && target)
add->AddThreat(target, 1.0f);
add = DoSpawnCreature(CR_SNAPLASHER, 0, 0, 0, 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 2000);
target = m_creature->SelectAttackingTarget(ATTACKING_TARGET_RANDOM, 0);
if(add && target)
add->AddThreat(target, 1.0f);
}
void SummonedCreatureDespawn(Creature* mob)
{
if(!m_creature->HasAura(SP_ATTUNED_TO_NATURE, EFFECT_INDEX_0)) return;
switch(mob->GetEntry())
{
case CR_DETONATING_LASHER:
if(m_creature->GetAura(SP_ATTUNED_TO_NATURE, EFFECT_INDEX_0)->modStackAmount(-2))
m_creature->RemoveAurasDueToSpell(SP_ATTUNED_TO_NATURE);
break;
case CR_ANCIENT_CONSERVATOR:
if(m_creature->GetAura(SP_ATTUNED_TO_NATURE, EFFECT_INDEX_0)->modStackAmount(-25))
m_creature->RemoveAurasDueToSpell(SP_ATTUNED_TO_NATURE);
break;
case CR_SNAPLASHER:
case CR_STORM_LASHER:
case CR_WATER_SPIRIT:
if(m_creature->GetAura(SP_ATTUNED_TO_NATURE, EFFECT_INDEX_0)->modStackAmount(-10))
m_creature->RemoveAurasDueToSpell(SP_ATTUNED_TO_NATURE);
}
}
void UpdateAI(const uint32 diff)
{
if (!m_creature->SelectHostileTarget() || !m_creature->getVictim())
return;
if(SunbeamTimer < diff)
{
if(Unit *target = m_creature->SelectAttackingTarget (ATTACKING_TARGET_RANDOM , 0))
DoCast(taret, Rgular ? SP_SUNBEAM : H_SP_SUNBEAM);
SunbeamTimer = 4000 + rand()%10000;
}else SunbeamTimer -= diff;
if(GroundTremorTimer < diff)
{
if(Unit *target = m_creature->SelectAttackingTarget (ATTACKING_TARGET_RANDOM , 0))
DoCast(target , Regular ? SP_GROUND_TREMOR : H_SP_GROUND_TREMOR);
GroundTremorTimer = 6000 + rand()%10000;
}else GroundTremorTimer -= diff;
if(EnrageTimer < diff)
{
DoCast(m_creature, SP_BERSERK);
EnrageTimer = 30000;
}
else EnrageTimer -= diff;
if(m_creature->StackAmount == 0)
{
Phase2();
}
DoMeleeAttackIfReady();
}
};
CreatureAI* GetAI_boss_freya(Creature* pCreature)
{
return new boss_freyaAI(pCreature);
}
void AddSC_boss_freya()
{
Script *newscript;
newscript = new Script;
newscript->Name = "boss_freya";
newscript->GetAI = &GetAI_boss_freya;
newscript->RegisterSelf();
}[/code]