rendered paste body
#include "../../sc_defines.h"
#include "../../../../../game/Pet.h"
#include "../../../../../game/GameObject.h"
/* ##### SPELLS ##### */
#define SPELL_ENRAGE 8269 /* Agathelos the Raging */
/* ##### QUOTES(TEXT) ##### */
#define SAY_TECH1 "I am a BOT. I have tons of information. To find out what I know whisper me."
/* ##### QUOTES(SOUND) ##### */
#define SOUND_ALERT 5805
int ScenarioRFK = 0;
GameObject *RFKDoor = NULL;
/*
Razorfen Kraul
*/
struct MANGOS_DLL_DECL razorfen_kraulAI : public ScriptedAI
{
razorfen_kraulAI(Creature *c) : ScriptedAI(c) {
friend1 = NULL;
friend2 = NULL;
friend3 = NULL;
friend4 = NULL;
Aggro = NULL;
EnterEvadeMode();}
uint32 Cast1_Timer;
uint32 Cast2_Timer;
uint32 OffHand;
int Aggro;
int Entry;
int zapominalka;
float temp;
float temp2;
float x;
float y;
float z;
Unit* friend1;
Unit* friend2;
Unit* friend3;
Unit* friend4;
Pet* pet;
Creature* Summoned;
bool triggered;
bool InCombat;
void EnterEvadeMode()
{
Aggro = NULL;
Cast1_Timer = 5000;
Cast2_Timer = 10000;
OffHand = 0;
pet = m_creature->GetPet();
if(pet)
if(!pet->isAlive())
zapominalka = NULL;
InCombat = false;
m_creature->RemoveAllAuras();
m_creature->DeleteThreatList();
m_creature->CombatStop();
DoGoHome();
}
void AttackStart(Unit *who)
{
if (!who)
return;
if (who->isTargetableForAttack() && who!= m_creature)
{
if(!InCombat)
{
InCombat = true;
}
DoStartMeleeAttack(who);
}
}
void MoveInLineOfSight(Unit *who)
{
if(!who)
return;
if(m_creature->IsFriendlyTo(who) && who->IsFriendlyTo(m_creature) && who != m_creature && who->isTargetableForAttack() && who->isInAccessablePlaceFor(m_creature) && m_creature->IsWithinDistInMap(who, 15))
{
if(!friend1 && friend2 != who && friend3 != who && friend4 != who)
friend1 = who;
if(!friend2 && friend1 != who && friend3 != who && friend4 != who)
friend2 = who;
if(!friend3 && friend1 != who && friend2 != who && friend4 != who)
friend3 = who;
if(!friend4 && friend1 != who && friend2 != who && friend3 != who)
friend4 = who;
}
if (m_creature->getVictim())
return;
if (who->isTargetableForAttack() && who->isInAccessablePlaceFor(m_creature) && m_creature->IsHostileTo(who))
{
float attackRadius = m_creature->GetAttackDistance(who);
if (m_creature->IsWithinDistInMap(who, attackRadius) && m_creature->GetDistanceZ(who) <= CREATURE_Z_ATTACK_RANGE && m_creature->IsWithinLOSInMap(who))
{
if(who->HasStealthAura())
who->RemoveSpellsCausingAura(SPELL_AURA_MOD_STEALTH);
DoStartMeleeAttack(who);
}
}
}
void KilledUnit(Unit *who)
{
/* Charlga Razorflank */
if(m_creature->GetEntry() == 4421)
{
DoYell("Who is next?!",LANG_UNIVERSAL,NULL);
DoPlaySoundToSet(m_creature,5814);
}
}
void JustDied(Unit*)
{
Aggro = NULL;
zapominalka = NULL;
friend1 = NULL;
friend2 = NULL;
friend3 = NULL;
friend4 = NULL;
Cast1_Timer = 5000;
Cast2_Timer = 10000;
OffHand = 0;
if(m_creature->GetEntry() == 4625)
{
ScenarioRFK += 1;
if(ScenarioRFK == 2)
{
ScriptedInstance* pInstance = ((ScriptedInstance*)m_creature->GetInstanceData());
pInstance->SetData(NULL,1);
ScenarioRFK = 0;
}
}
}
void DamageDeal(Unit *done_to, uint32 &damage)
{
if(m_creature->GetEntry() == 4420 || (m_creature->GetEntry() == 4436 || m_creature->GetEntry() == 4623))
{
temp = m_creature->GetPower(POWER_RAGE);
temp2 = 0;
temp2 = temp;
switch(rand()%4)
{
case 0:temp = temp2 + 80;break;
case 1:temp = temp2 + 90;break;
case 2:temp = temp2 + 100;break;
case 3:temp = temp2 + 110;break;
}
if(temp < 1001)
m_creature->SetPower(POWER_RAGE,temp);
else
m_creature->SetPower(POWER_RAGE,1000);
}
}
void DamageTaken(Unit *done_by, uint32 &damage)
{
if(m_creature->GetEntry() == 4420 || (m_creature->GetEntry() == 4436 || m_creature->GetEntry() == 4623))
{
temp = m_creature->GetPower(POWER_RAGE);
temp2 = 0;
temp2 = temp;
switch(rand()%4)
{
case 0:temp = temp2 + 40;break;
case 1:temp = temp2 + 50;break;
case 2:temp = temp2 + 60;break;
case 3:temp = temp2 + 70;break;
}
if(temp < 1001)
m_creature->SetPower(POWER_RAGE,temp);
else
m_creature->SetPower(POWER_RAGE,1000);
}
}
void UpdateAI(const uint32 diff)
{
Entry = m_creature->GetEntry();
if(m_creature->getVictim() && m_creature->IsNonMeleeSpellCasted(false))
if(!m_creature->getVictim()->isAlive() || !m_creature->IsWithinDistInMap(m_creature->getVictim(), 20))
m_creature->InterruptSpell(CURRENT_GENERIC_SPELL);
if(!m_creature->isAlive())
return;
if(Entry == 4625 && zapominalka != 1)
{
m_creature->HandleEmoteCommand(EMOTE_STATE_SPELLPRECAST);
zapominalka = 1;
}
if(Entry == 6035 && !m_creature->HasAura(22766,0) && !InCombat)
{
DoCast(m_creature,22766);
}
/* Razorfen Handler */
if(Entry == 4530 && zapominalka != 1)
{
zapominalka = 1;
DoCast(m_creature,8274);
}
/* Razorfen Beast Trainer */
if(Entry == 4531 && zapominalka != 1)
{
zapominalka = 1;
DoCast(m_creature,8274);
}
/* Razorfen Geomancer */
if(Entry == 4520 && zapominalka != 1)
{
zapominalka = 1;
DoCast(m_creature,8270);
}
/* Razorfen Beastmaster */
if(Entry == 4532 && zapominalka != 1)
{
zapominalka = 1;
DoCast(m_creature,8276);
}
/* Razorfen Beastmaster */
if(Entry == 4842 && zapominalka != 1)
{
zapominalka = 1;
DoCast(m_creature,7144);
}
/* Razorfen Dustweaver */
if(Entry == 4522 && zapominalka != 1)
{
zapominalka = 1;
DoCast(m_creature,8271);
}
/* Overlord Ramtusk */
if((Entry == 4420 || Entry == 4436) && m_creature->GetPower(POWER_RAGE) > 0)
if(!m_creature->SelectHostilTarget() && !m_creature->getVictim())
{
temp = m_creature->GetPower(POWER_RAGE);
temp -= 3;
if(temp > 0)
m_creature->SetPower(POWER_RAGE,temp);
else
m_creature->SetPower(POWER_RAGE,0);
m_creature->ApplySpellImmune(0, IMMUNITY_MECHANIC, MECHANIC_FEAR, true);
}
/* Charlga Razorflank */
if(Entry == 4421 && zapominalka != 1)
{
zapominalka = 1;
m_creature->ApplySpellImmune(0, IMMUNITY_SCHOOL, IMMUNE_SCHOOL_SHADOW, true);
m_creature->ApplySpellImmune(0, IMMUNITY_MECHANIC, MECHANIC_STUN, true);
m_creature->ApplySpellImmune(0, IMMUNITY_MECHANIC, MECHANIC_SILENCE, true);
}
if((Entry == 4436 || Entry == 4623) && !m_creature->HasAura(1032,0) && !m_creature->IsNonMeleeSpellCasted(false))
DoCast(m_creature,1032);
if (!m_creature->SelectHostilTarget() || !m_creature->getVictim())
return;
if (OffHand > diff)
OffHand -= diff;
else OffHand = 0;
if(OffHand > 0 && OffHand < 500 && m_creature->IsWithinDistInMap(m_creature->getVictim(), ATTACK_DISTANCE))
{
m_creature->HandleEmoteCommand(EMOTE_ONESHOT_ATTACKOFF);
m_creature->AttackerStateUpdate(m_creature->getVictim());
m_creature->resetAttackTimer();
OffHand = 0;
}
if(Entry == 4531)
{
if(Cast1_Timer < diff && !m_creature->IsNonMeleeSpellCasted(false) && m_creature->isAttackReady())
{
DoCast(m_creature->getVictim(),6984);
Cast1_Timer = 9000;
}else Cast1_Timer -= diff;
}
if(Entry == 6035)
{
if(Cast1_Timer < diff && !m_creature->IsNonMeleeSpellCasted(false) && m_creature->isAttackReady())
{
DoCast(m_creature,7159);
Cast1_Timer = 9000;
}else Cast1_Timer -= diff;
}
if(Entry == 4442)
{
if(zapominalka != 1)
{
DoCast(m_creature,3248);
zapominalka = 1;
}
if(Cast1_Timer < diff && !m_creature->IsNonMeleeSpellCasted(false) && m_creature->isAttackReady())
{
DoCast(m_creature->getVictim(),11972);
Cast1_Timer = 9000 + rand()%5000;
}else Cast1_Timer -= diff;
}
/* Razorfen Quilguard, Champion */
if(Entry == 4436 || Entry == 4623)
{
if(Aggro != 1 && Aggro != 2)
{
Aggro = 1;
m_creature->setPowerType(POWER_RAGE);
m_creature->SetMaxPower(POWER_RAGE,1000);
m_creature->SetPower(POWER_RAGE,0);
}
if(!m_creature->HasAura(71,0))
DoCast(m_creature,71);
if(Cast1_Timer < diff && !m_creature->IsNonMeleeSpellCasted(false) && m_creature->isAttackReady())
{
if(Entry == 4436)
DoCast(m_creature->getVictim(),8205);
else DoCast(m_creature->getVictim(),11596);
Cast1_Timer = 9000;
}else Cast1_Timer -= diff;
}
/* Razorfen Handler */
if(Entry == 4530)
{
pet = m_creature->GetPet();
if(pet)
if(pet->isAlive() && !pet->getVictim())
((CreatureAI*)pet->AI())->AttackStart(m_creature->getVictim());
}
/* Aggem thorn curse */
if(Entry == 4424)
{
if(Cast1_Timer > diff)
Cast1_Timer -= diff;
else Cast1_Timer = 0;
if(Cast2_Timer > diff)
Cast2_Timer -= diff;
else Cast2_Timer = 0;
if(friend1 && friend1->IsInWorld())
{
if(!friend1->isAlive() || !friend1->isInCombat())
friend1 = NULL;
}else friend1 = NULL;
if(friend2 && friend2->IsInWorld())
{
if(!friend2->isAlive() || !friend2->isInCombat())
friend2 = NULL;
}else friend2 = NULL;
if(friend3 && friend3->IsInWorld())
{
if(!friend3->isAlive() || !friend3->isInCombat())
friend3 = NULL;
}else friend3 = NULL;
if(friend4 && friend4->IsInWorld())
{
if(!friend4->isAlive() || !friend4->isInCombat())
friend4 = NULL;
}else friend4 = NULL;
if(friend1 && Aggro != 1)
{
if(friend1->GetEntry() == 6021)
{
friend1->HandleStatModifier(UNIT_MOD_DAMAGE_MAINHAND,BASE_VALUE,+50,true);
Aggro = 1;
}
if(friend2)
if(friend2->GetEntry() == 6021)
{
friend2->HandleStatModifier(UNIT_MOD_DAMAGE_MAINHAND,BASE_VALUE,+50,true);
Aggro = 1;
}
if(friend3)
if(friend3->GetEntry() == 6021)
{
friend3->HandleStatModifier(UNIT_MOD_DAMAGE_MAINHAND,BASE_VALUE,+50,true);
Aggro = 1;
}
if(friend4)
if(friend4->GetEntry() == 6021)
{
friend4->HandleStatModifier(UNIT_MOD_DAMAGE_MAINHAND,BASE_VALUE,+50,true);
Aggro = 1;
}
}
if(Cast1_Timer < diff && !m_creature->IsNonMeleeSpellCasted(false) && m_creature->isAttackReady())
{
DoCast(m_creature,8286);
Cast1_Timer = 60000;
}
if(!m_creature->HasAura(6192,0))
{
m_creature->SetMaxPower(POWER_RAGE,100);
m_creature->SetPower(POWER_RAGE,100);
DoCast(m_creature,6192);
}
if(m_creature->GetHealth()*100 / m_creature->GetMaxHealth() < 60 && Cast2_Timer < diff && !m_creature->IsNonMeleeSpellCasted(false) && m_creature->isAttackReady())
{
DoCast(m_creature,10622);
Cast2_Timer = 5000;
}
else
{
if(friend1)
if(friend1->GetMaxHealth() > 0)
if(friend1->GetHealth()*100 / friend1->GetMaxHealth() < 60 && m_creature->IsWithinDistInMap(friend1, 15))
{
DoCast(friend1,10622);
Cast2_Timer = 5000;
}
if(friend2)
if(friend2->GetMaxHealth() > 0)
if(friend2->GetHealth()*100 / friend2->GetMaxHealth() < 60 && m_creature->IsWithinDistInMap(friend2, 15))
{
DoCast(friend2,10622);
Cast2_Timer = 5000;
}
if(friend3)
if(friend3->GetMaxHealth() > 0)
if(friend3->GetHealth()*100 / friend3->GetMaxHealth() < 60 && m_creature->IsWithinDistInMap(friend3, 15))
{
DoCast(friend3,10622);
Cast2_Timer = 5000;
}
if(friend4)
if(friend4->GetMaxHealth() > 0)
if(friend4->GetHealth()*100 / friend4->GetMaxHealth() < 60 && m_creature->IsWithinDistInMap(friend4, 15))
{
DoCast(friend4,10622);
Cast2_Timer = 5000;
}
}
}
/* Razorfen Geomancer */
if(Entry == 4520)
{
pet = m_creature->GetPet();
if(pet)
if(pet->isAlive() && !pet->getVictim())
((CreatureAI*)pet->AI())->AttackStart(m_creature->getVictim());
if(Cast1_Timer < diff && !m_creature->IsNonMeleeSpellCasted(false) && m_creature->isAttackReady())
{
DoCast(m_creature->getVictim(),943);
Cast1_Timer = 9000 + rand()%5000;
}else Cast1_Timer -= diff;
}
/* Agam`an, Rooting, Ragging */
if((Entry == 4511 || Entry == 4512) || Entry == 4514)
{
if(Entry == 4511 && !m_creature->HasAura(8260,0))
DoCast(m_creature,8260);
if(Entry == 4512 && !m_creature->getVictim()->HasAura(8267,0))
DoCast(m_creature->getVictim(),8267);
if(Entry == 4514 && !m_creature->HasAura(8269,0))
DoCast(m_creature,8269);
}
/* Razorfen Spearhide */
if(Entry == 4438)
{
if(!m_creature->HasAura(16610,0))
DoCast(m_creature,16610);
if(Cast1_Timer < diff && !m_creature->IsNonMeleeSpellCasted(false) && m_creature->isAttackReady())
{
DoCast(m_creature,8259);
Cast1_Timer = 9000;
}else Cast1_Timer -= diff;
}
/* Death's Head Priest, Ward Guardian */
if(Entry == 4517 || Entry == 4427)
{
if(friend1 && friend1->IsInWorld())
{
if(!friend1->isAlive() || !friend1->isInCombat())
friend1 = NULL;
}else friend1 = NULL;
if(friend2 && friend2->IsInWorld())
{
if(!friend2->isAlive() || !friend2->isInCombat())
friend2 = NULL;
}else friend2 = NULL;
if(friend3 && friend3->IsInWorld())
{
if(!friend3->isAlive() || !friend3->isInCombat())
friend3 = NULL;
}else friend3 = NULL;
if(friend4 && friend4->IsInWorld())
{
if(!friend4->isAlive() || !friend4->isInCombat())
friend4 = NULL;
}else friend4 = NULL;
if( (int) (m_creature->GetHealth()*2 / m_creature->GetMaxHealth() +1) > 1)
{
if(Cast1_Timer < diff && !m_creature->IsNonMeleeSpellCasted(false) && m_creature->isAttackReady())
{
if(friend1)
if(friend1->GetMaxHealth() > 0)
if(friend1->GetHealth()*100 / friend1->GetMaxHealth() < 50 && m_creature->IsWithinDistInMap(friend1, 15))
{
if(Entry == 4517)
DoCast(friend1,2055);
else DoCast(friend1,939);
Cast1_Timer = 3000;
}else
{
if(friend2)
if(friend2->GetMaxHealth() > 0)
if(friend2->GetHealth()*100 / friend2->GetMaxHealth() < 50 && m_creature->IsWithinDistInMap(friend2, 15))
{
if(Entry == 4517)
DoCast(friend2,2055);
else DoCast(friend2,939);
Cast1_Timer = 3000;
}else
{
if(friend3)
if(friend3->GetMaxHealth() > 0)
if(friend3->GetHealth()*100 / friend3->GetMaxHealth() < 50 && m_creature->IsWithinDistInMap(friend3, 15))
{
if(Entry == 4517)
DoCast(friend3,2055);
else DoCast(friend3,939);
Cast1_Timer = 3000;
}else
{
if(friend4)
if(friend4->GetMaxHealth() > 0)
if(friend4->GetHealth()*100 / friend4->GetMaxHealth() < 50 && m_creature->IsWithinDistInMap(friend4, 15))
{
if(Entry == 4517)
DoCast(friend4,2055);
else DoCast(friend4,939);
Cast1_Timer = 3000;
}else
if(Entry == 4517)
{
DoCast(m_creature->getVictim(),11659);
}
}//end friend 4
}//end friend 3
}//end friend 2
}else Cast1_Timer -= diff;
}else
{
if(Cast1_Timer < diff && !m_creature->IsNonMeleeSpellCasted(false) && m_creature->isAttackReady())
{
if(Entry == 4517)
DoCast(m_creature,2055);
else DoCast(m_creature,939);
Cast1_Timer = 3000;
}else Cast1_Timer -= diff;
}
}
/* Death`s head acolyte */
if(Entry == 4515)
{
if(friend1 && friend1->IsInWorld())
{
if(!friend1->isAlive() || !friend1->isInCombat())
friend1 = NULL;
}else friend1 = NULL;
if(friend2 && friend2->IsInWorld())
{
if(!friend2->isAlive() || !friend2->isInCombat())
friend2 = NULL;
}else friend2 = NULL;
if(friend3 && friend3->IsInWorld())
{
if(!friend3->isAlive() || !friend3->isInCombat())
friend3 = NULL;
}else friend3 = NULL;
if(friend4 && friend4->IsInWorld())
{
if(!friend4->isAlive() || !friend4->isInCombat())
friend4 = NULL;
}else friend4 = NULL;
if( (int) (m_creature->GetHealth()*2 / m_creature->GetMaxHealth() +1) > 1)
{
if(Cast1_Timer < diff)
{
if(friend1)
if(friend1->GetMaxHealth() > 0)
if(friend1->GetHealth()*100 / friend1->GetMaxHealth() < 50 && m_creature->IsWithinDistInMap(friend1, 15))
{
DoCast(friend1,6077);
Cast1_Timer = 3000;
}else
{
if(friend2)
if(friend2->GetMaxHealth() > 0)
if(friend2->GetHealth()*100 / friend2->GetMaxHealth() < 50 && m_creature->IsWithinDistInMap(friend2, 15))
{
DoCast(friend2,6077);
Cast1_Timer = 3000;
}else
{
if(friend3)
if(friend3->GetMaxHealth() > 0)
if(friend3->GetHealth()*100 / friend3->GetMaxHealth() < 50 && m_creature->IsWithinDistInMap(friend3, 15))
{
DoCast(friend3,6077);
Cast1_Timer = 3000;
}else
{
if(friend4)
if(friend4->GetMaxHealth() > 0)
if(friend4->GetHealth()*100 / friend4->GetMaxHealth() < 50 && m_creature->IsWithinDistInMap(friend4, 15))
{
DoCast(friend4,6077);
Cast1_Timer = 3000;
}
else
{
for(int i = 0; i < 6;i++)
{
Unit *target = SelectUnit(SELECT_TARGET_TOPAGGRO,i);
if(target && target->isAlive())
if(target->GetPower(POWER_MANA) > 300)
{
DoCast(target,10876);
Cast1_Timer = 8000;
return;
}
}
}
}//end friend 4
}//end friend 3
}//end friend 2
}else Cast1_Timer -= diff;
}else
{
if(Cast1_Timer < diff && !m_creature->HasAura(6077,0) && !m_creature->IsNonMeleeSpellCasted(false) && m_creature->isAttackReady())
{
DoCast(m_creature,6077);
Cast1_Timer = 3000;
}else Cast1_Timer -= diff;
}
}
/* Razorfen Totemic, Death's Head Sage, Seer, Earthcaller halmgar */
if((Entry == 4440 || Entry == 4518) || (Entry == 4519 || Entry == 4842))
{
if (Cast2_Timer > diff)
Cast2_Timer -= diff;
else Cast2_Timer = 0;
if (Cast1_Timer > diff)
Cast1_Timer -= diff;
else Cast1_Timer = 0;
if(Entry == 4440 && Cast1_Timer < diff && !m_creature->IsNonMeleeSpellCasted(false) && m_creature->isAttackReady())
{
DoCast(m_creature,8376);
Cast1_Timer = 15000;
}
if(Entry == 4842 && Cast1_Timer < diff && !m_creature->IsNonMeleeSpellCasted(false) && m_creature->isAttackReady())
{
DoCast(m_creature->getVictim(),943);
Cast1_Timer = 15000;
}
if(Entry == 4518 && Cast1_Timer < diff && !m_creature->IsNonMeleeSpellCasted(false) && m_creature->isAttackReady())
{
DoCast(m_creature,8262);
Cast1_Timer = 15000;
}
if(Entry == 4519 && Cast1_Timer < diff && !m_creature->IsNonMeleeSpellCasted(false) && m_creature->isAttackReady())
{
DoCast(m_creature,8264);
Cast1_Timer = 15000;
}
if(Cast2_Timer < diff && !m_creature->IsNonMeleeSpellCasted(false) && m_creature->isAttackReady())
{
if(Entry != 4842)DoCast(m_creature,4971);
else DoCast(m_creature,2484);
Cast2_Timer = 30000;
}
}
/* Razorfen Beastmaster */
if(Entry == 4532)
{
pet = m_creature->GetPet();
if(pet)
if(pet->isAlive() && !pet->getVictim())
((CreatureAI*)pet->AI())->AttackStart(m_creature->getVictim());
if(Cast1_Timer < diff && !m_creature->IsNonMeleeSpellCasted(false) && m_creature->isAttackReady())
{
DoCast(m_creature->getVictim(),8275);
Cast1_Timer = 9000 + rand()%5000;
}else Cast1_Timer -= diff;
}
/* Razorfen Dustweaver */
if(Entry == 4522)
{
pet = m_creature->GetPet();
if(pet)
if(pet->isAlive() && !pet->getVictim())
((CreatureAI*)pet->AI())->AttackStart(m_creature->getVictim());
}
/* Greater Kraul Bat */
if(Entry == 4539)
{
if(Cast1_Timer < diff && !m_creature->IsNonMeleeSpellCasted(false) && m_creature->isAttackReady())
{
DoCast(m_creature,8281);
Cast1_Timer = 12000;
}else Cast1_Timer -= diff;
}
/* Agathelos the Raging */
if(Entry == 4422)
{
if (Cast2_Timer > diff)
Cast2_Timer -= diff;
else Cast2_Timer = 0;
if(Aggro != 1 && Aggro != 2)
{
Aggro = 1;
m_creature->SetArmor(3493);
}
if( (int) (m_creature->GetHealth()*5 / m_creature->GetMaxHealth() +1) < 4 && Aggro != 2)
{
Aggro = 2;
DoCast(m_creature,SPELL_ENRAGE);
}
if(Cast1_Timer < diff && !m_creature->IsNonMeleeSpellCasted(false) && m_creature->isAttackReady())
{
DoCast(m_creature,8285);
Cast1_Timer = 12000;
}else Cast1_Timer -= diff;
if(Cast2_Timer < diff && !m_creature->IsNonMeleeSpellCasted(false) && m_creature->isAttackReady())
{
DoCast(m_creature->getVictim(),8555);
Cast2_Timer = 10000;
}
}
/* Death Speaker Jargba */
if(Entry == 4428)
{
if (Cast2_Timer > diff)
Cast2_Timer -= diff;
else Cast2_Timer = 0;
if(Cast2_Timer < diff && !m_creature->IsNonMeleeSpellCasted(false) && m_creature->isAttackReady())
{
for(int i = 0; i < 6;i++)
{
Unit *target = SelectUnit(SELECT_TARGET_TOPAGGRO,i);
if(target && target->isAlive())
if(!target->HasAura(14515,0))
{
DoCast(target,14515);
Cast2_Timer = 10000;
return;
}
}
}
if( (int) (m_creature->GetHealth()*2 / m_creature->GetMaxHealth() +1) > 1)
{
if(Cast1_Timer < diff && !m_creature->IsNonMeleeSpellCasted(false) && m_creature->isAttackReady() )
{
DoCast(m_creature->getVictim(),11659);
Cast1_Timer = 9000;
}else Cast1_Timer -= diff;
}else
{
if(Cast1_Timer < diff && !m_creature->IsNonMeleeSpellCasted(false) && m_creature->isAttackReady())
{
DoCast(m_creature,6063);
Cast1_Timer = 3000;
}else Cast1_Timer -= diff;
}
}
/* Overlord Ramtusk */
if(Entry == 4420)
{
if(Aggro != 1 && Aggro != 2)
{
Aggro = 1;
m_creature->setPowerType(POWER_RAGE);
m_creature->SetMaxPower(POWER_RAGE,1000);
m_creature->SetPower(POWER_RAGE,0);
DoCast(m_creature,2457);
DoYell("For Victory! For Agamaggan!",LANG_UNIVERSAL,NULL);
DoPlaySoundToSet(m_creature,5812);
}
if(!m_creature->HasAura(11550,0))
DoCast(m_creature,11550);
if(Cast1_Timer < diff && m_creature->GetPower(POWER_RAGE) > 100 && !m_creature->IsNonMeleeSpellCasted(false) && m_creature->isAttackReady())
{
DoCast(m_creature->getVictim(),8205);
Cast1_Timer = 8000;
}else Cast1_Timer -= diff;
//Two-Hand Fight
if( m_creature->IsWithinDistInMap(m_creature->getVictim(), ATTACK_DISTANCE))
{
if( m_creature->isAttackReady() && !m_creature->IsNonMeleeSpellCasted(false))
{
m_creature->AttackerStateUpdate(m_creature->getVictim());
m_creature->resetAttackTimer();
OffHand = 1000;
}
}
//End Two-Hand Fight
}
/* Charlga Razorflank */
if(Entry == 4421)
{
if(Aggro != 1 && Aggro != 2 && Aggro != 3 && Aggro != 4)
{
Aggro = 1;
DoYell("Troublesome whelp.I`ll teach you to interfere!",LANG_UNIVERSAL,NULL);
DoPlaySoundToSet(m_creature,5813);
}
if(m_creature->GetPower(POWER_MANA) < 500)
{
DoCast(m_creature,29166);
m_creature->SetPower(POWER_MANA,2889);
}
if( (int) (m_creature->GetHealth()*4 / m_creature->GetMaxHealth() +1) > 4)
{
if(Cast1_Timer < diff && !m_creature->IsNonMeleeSpellCasted(false) && m_creature->isAttackReady())
{
switch(rand()%2)
{
case 0:
DoCast(m_creature->getVictim(),2860);//29166
Cast1_Timer = 8000;
break;
case 1:
DoCast(m_creature,8361);//29166
Cast1_Timer = 3000;
break;
}
}else Cast1_Timer -= diff;
}else
{
if( (int) (m_creature->GetHealth()*4 / m_creature->GetMaxHealth() +1) > 3)
{
if(Aggro < 2)
{
Aggro = 2;
DoYell("Your outsiders will pay for encroaching on our land!",LANG_UNIVERSAL,NULL);
DoPlaySoundToSet(m_creature,5815);
}
if(Cast2_Timer < diff && !m_creature->HasAura(25222,0))
{
DoCast(m_creature,25222);
Cast2_Timer = 10000;
}else Cast2_Timer -= diff;
if(Cast1_Timer < diff)
{
switch(rand()%2)
{
case 0:
DoCast(m_creature->getVictim(),2860);//29166
Cast1_Timer = 8000;
break;
case 1:
DoCast(m_creature,8361);//29166
Cast1_Timer = 3000;
break;
}
}else Cast1_Timer -= diff;
}else{
if(Aggro < 3)
{
Aggro = 3;
DoYell("Bah!My power rules here!",LANG_UNIVERSAL,NULL);
DoPlaySoundToSet(m_creature,5816);
}
if( (int) (m_creature->GetHealth()*4 / m_creature->GetMaxHealth() +1) > 2)
{
if(Cast2_Timer < diff && !m_creature->HasAura(25222,0))
{
DoCast(m_creature,25222);
Cast2_Timer = 10000;
}else Cast2_Timer -= diff;
if(Cast1_Timer < diff)
{
switch(rand()%2)
{
case 0:
DoCast(m_creature->getVictim(),2860);//29166
Cast1_Timer = 8000;
break;
case 1:
DoCast(m_creature,8361);//29166
Cast1_Timer = 3000;
break;
}
}else Cast1_Timer -= diff;
}else
{
if(Aggro < 4)
{
Aggro = 4;
DoYell("Our new allies will avenge us!",LANG_UNIVERSAL,NULL);
DoPlaySoundToSet(m_creature,5818);
}
if(Cast2_Timer < diff && !m_creature->HasAura(25222,0))
{
DoCast(m_creature,25222);
Cast2_Timer = 10000;
}else Cast2_Timer -= diff;
if(Cast1_Timer < diff)
{
switch(rand()%2)
{
case 0:
DoCast(m_creature->getVictim(),2860);//29166
Cast1_Timer = 8000;
break;
case 1:
DoCast(m_creature,8361);//29166
Cast1_Timer = 3000;
break;
}
}else Cast1_Timer -= diff;
}
}
}
}
if(Entry != 4420)
DoMeleeAttackIfReady();
}
};
struct MANGOS_DLL_DECL scenario_rfk : public ScriptedInstance
{
scenario_rfk(Map *Map) : ScriptedInstance(Map) {
Initialize();
ScenarioRFK = 0;
};
void OnObjectCreate (GameObject* go)
{
switch(go->GetEntry())
{
case 21099:
RFKDoor = go;
RFKDoor->SetUInt32Value(GAMEOBJECT_FLAGS, 33);
RFKDoor->SetUInt32Value(GAMEOBJECT_STATE, 1);
break;
}
}
void OpenDoor()
{
RFKDoor->SetUInt32Value(GAMEOBJECT_FLAGS, 33);
RFKDoor->SetUInt32Value(GAMEOBJECT_STATE, 0);
}
void SetData (char *type, uint32 data)
{
if(data==1)
OpenDoor();
}
};
CreatureAI* GetAI_razorfen_kraul(Creature *_Creature)
{
return new razorfen_kraulAI (_Creature);
}
InstanceData* GetInstanceData_scenario_rfk(Map* map)
{
return new scenario_rfk(map);
}
void AddSC_razorfen_kraul()
{
Script *newscript;
newscript = new Script;
newscript->Name="razorfen_kraul";
newscript->GetAI = GetAI_razorfen_kraul;
m_scripts[nrscripts++] = newscript;
newscript = new Script;
newscript->Name = "scenario_rfk";
newscript->GetInstanceData = GetInstanceData_scenario_rfk;
m_scripts[nrscripts++] = newscript;
}