void DoNormalAttack(uint32 diff) { opponent = me->GetVictim(); if (opponent) { if (!IsCasting()) StartAttack(opponent); } else return; //TODO: add more damage spells if (fear_cd <= diff && GC_Timer <= diff) { CheckFear(); fear_cd = 2000; } if (RAIN_OF_FIRE && Rain_of_fire_cd <= diff && GC_Timer <= diff && !me->isMoving() && Rand() < 25) { Unit* blizztarget = FindAOETarget(35, true); if (blizztarget && doCast(blizztarget, RAIN_OF_FIRE)) { Rain_of_fire_cd = 5000; return; } Rain_of_fire_cd = 2000;//fail } float dist = me->GetExactDist(opponent); if (CURSE_OF_THE_ELEMENTS && GC_Timer <= diff && dist < 40 && Rand() < 15 && !HasAuraName(opponent, CURSE_OF_THE_ELEMENTS) && doCast(opponent, CURSE_OF_THE_ELEMENTS)) { GC_Timer = 800; return; } if (CORRUPTION && GC_Timer <= diff && dist < 40 && Rand() < 25 && !opponent->HasAura(CORRUPTION, me->GetGUID()) && doCast(opponent, CORRUPTION)) return; if (HAUNT && Haunt_cd <= diff && GC_Timer <= diff && dist < 40 && Rand() < 25 && !opponent->HasAura(HAUNT, me->GetGUID()) && doCast(opponent, HAUNT)) { Haunt_cd = 8000; return; } if (GC_Timer <= diff && dist < 40 && Rand() < 15 && !Afflicted(opponent)) { if (IMMOLATE && (!CONFLAGRATE || conflagarate_cd <= 8000) && doCast(opponent, IMMOLATE)) return; else if (UNSTABLE_AFFLICTION && doCast(opponent, UNSTABLE_AFFLICTION)) return; } if (CONFLAGRATE && conflagarate_cd <= diff && GC_Timer <= diff && dist < 40 && Rand() < 35 && HasAuraName(opponent, IMMOLATE) && doCast(opponent, CONFLAGRATE)) { conflagarate_cd = 8000; return; } if (CHAOS_BOLT && chaos_bolt_cd <= diff && GC_Timer <= diff && dist < 40 && Rand() < 50 && doCast(opponent, CHAOS_BOLT)) { chaos_bolt_cd = me->getLevel() < 80 ? 10000 : 8000; return; } if (SHADOW_BOLT && GC_Timer <= diff && dist < 40 && doCast(opponent, SHADOW_BOLT)) return; }
void DoNormalAttack(uint32 diff) { opponent = me->GetVictim(); if (opponent) { if (!IsCasting()) StartAttack(opponent); } else return; //TODO: add more damage spells if (feartimer <= diff && GC_Timer <= diff) { CheckFear(); feartimer = 2000; } if (IsSpellReady(RAIN_OF_FIRE_1, diff) && !me->isMoving() && HasRole(BOT_ROLE_DPS) && Rand() < 25) { Unit* blizztarget = FindAOETarget(30, true); if (blizztarget && doCast(blizztarget, GetSpell(RAIN_OF_FIRE_1))) return; SetSpellCooldown(RAIN_OF_FIRE_1, 2000);//fail } float dist = me->GetExactDist(opponent); if (IsSpellReady(CURSE_OF_THE_ELEMENTS_1, diff) && dist < 30 && Rand() < 15 && !HasAuraName(opponent, CURSE_OF_THE_ELEMENTS_1) && doCast(opponent, GetSpell(CURSE_OF_THE_ELEMENTS_1))) { GC_Timer = 800; return; } if (IsSpellReady(CORRUPTION_1, diff) && HasRole(BOT_ROLE_DPS) && dist < 30 && Rand() < 25 && !opponent->HasAura(GetSpell(CORRUPTION_1), me->GetGUID()) && doCast(opponent, GetSpell(CORRUPTION_1))) return; if (IsSpellReady(HAUNT_1, diff) && HasRole(BOT_ROLE_DPS) && dist < 30 && Rand() < 25 && !opponent->HasAura(GetSpell(HAUNT_1), me->GetGUID()) && doCast(opponent, GetSpell(HAUNT_1))) return; if (GC_Timer <= diff && HasRole(BOT_ROLE_DPS) && dist < 30 && Rand() < 15 && !Afflicted(opponent)) { if (GetSpellCooldown(CONFLAGRATE_1) <= 8000 && doCast(opponent, GetSpell(IMMOLATE_1))) return; else if (doCast(opponent, GetSpell(UNSTABLE_AFFLICTION_1))) return; } if (IsSpellReady(CONFLAGRATE_1, diff) && HasRole(BOT_ROLE_DPS) && dist < 30 && Rand() < 35 && HasAuraName(opponent, IMMOLATE_1) && doCast(opponent, GetSpell(CONFLAGRATE_1))) return; if (IsSpellReady(CHAOS_BOLT_1, diff) && HasRole(BOT_ROLE_DPS) && dist < 30 && Rand() < 50 && doCast(opponent, GetSpell(CHAOS_BOLT_1))) return; if (IsSpellReady(SHADOW_BOLT_1, diff) && HasRole(BOT_ROLE_DPS) && dist < 30 && doCast(opponent, GetSpell(SHADOW_BOLT_1))) return; }