You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1154 lines
52 KiB

ConRO.Hunter = {};
ConRO.Hunter.CheckTalents = function()
end
ConRO.Hunter.CheckPvPTalents = function()
end
local ConRO_Hunter, ids = ...;
function ConRO:EnableRotationModule(mode)
mode = mode or 0;
self.ModuleOnEnable = ConRO.Hunter.CheckTalents;
self.ModuleOnEnable = ConRO.Hunter.CheckPvPTalents;
if mode == 0 then
self.Description = "Hunter [No Specialization Under 10]";
self.NextSpell = ConRO.Hunter.Under10;
self.ToggleHealer();
end;
if mode == 1 then
self.Description = 'Hunter [Beast Mastery - Ranged]';
if ConRO.db.profile._Spec_1_Enabled then
self.NextSpell = ConRO.Hunter.BeastMastery;
self.ToggleDamage();
ConROWindow:SetAlpha(ConRO.db.profile.transparencyWindow);
ConRODefenseWindow:SetAlpha(ConRO.db.profile.transparencyWindow);
else
self.NextSpell = ConRO.Hunter.Disabled;
self.ToggleHealer();
ConROWindow:SetAlpha(0);
ConRODefenseWindow:SetAlpha(0);
end
end;
if mode == 2 then
self.Description = 'Hunter [Marksmanship - Ranged]';
if ConRO.db.profile._Spec_2_Enabled then
self.NextSpell = ConRO.Hunter.Marksmanship;
self.ToggleDamage();
ConROWindow:SetAlpha(ConRO.db.profile.transparencyWindow);
ConRODefenseWindow:SetAlpha(ConRO.db.profile.transparencyWindow);
else
self.NextSpell = ConRO.Hunter.Disabled;
self.ToggleHealer();
ConROWindow:SetAlpha(0);
ConRODefenseWindow:SetAlpha(0);
end
end;
if mode == 3 then
self.Description = 'Hunter [Survival - Melee]';
if ConRO.db.profile._Spec_3_Enabled then
self.NextSpell = ConRO.Hunter.Survival;
self.ToggleDamage();
ConROWindow:SetAlpha(ConRO.db.profile.transparencyWindow);
ConRODefenseWindow:SetAlpha(ConRO.db.profile.transparencyWindow);
else
self.NextSpell = ConRO.Hunter.Disabled;
self.ToggleHealer();
ConROWindow:SetAlpha(0);
ConRODefenseWindow:SetAlpha(0);
end
end;
self:RegisterEvent('UNIT_SPELLCAST_SUCCEEDED');
self.lastSpellId = 0;
end
function ConRO:EnableDefenseModule(mode)
mode = mode or 0;
if mode == 0 then
self.NextDef = ConRO.Hunter.Under10Def;
end;
if mode == 1 then
if ConRO.db.profile._Spec_1_Enabled then
self.NextDef = ConRO.Hunter.BeastMasteryDef;
else
self.NextDef = ConRO.Hunter.Disabled;
end
end;
if mode == 2 then
if ConRO.db.profile._Spec_2_Enabled then
self.NextDef = ConRO.Hunter.MarksmanshipDef;
else
self.NextDef = ConRO.Hunter.Disabled;
end
end;
if mode == 3 then
if ConRO.db.profile._Spec_3_Enabled then
self.NextDef = ConRO.Hunter.SurvivalDef;
else
self.NextDef = ConRO.Hunter.Disabled;
end
end;
end
function ConRO:UNIT_SPELLCAST_SUCCEEDED(event, unitID, lineID, spellID)
if unitID == 'player' and spellID ~= 75 then
self.lastSpellId = spellID;
end
end
function ConRO.Hunter.Disabled(_, timeShift, currentSpell, gcd, tChosen, pvpChosen)
return nil;
end
function ConRO.Hunter.Under10(_, timeShift, currentSpell, gcd, tChosen, pvpChosen)
--Info
local _Player_Level = UnitLevel("player");
local _Player_Percent_Health = ConRO:PercentHealth('player');
local _is_PvP = ConRO:IsPvP();
local _in_combat = UnitAffectingCombat('player');
local _party_size = GetNumGroupMembers();
local _is_PC = UnitPlayerControlled("target");
local _is_Enemy = ConRO:TarHostile();
local _Target_Health = UnitHealth('target');
local _Target_Percent_Health = ConRO:PercentHealth('target');
--Resources
--Racials
local _AncestralCall, _AncestralCall_RDY = ConRO:AbilityReady(ids.Racial.AncestralCall, timeShift);
local _ArcanePulse, _ArcanePulse_RDY = ConRO:AbilityReady(ids.Racial.ArcanePulse, timeShift);
local _Berserking, _Berserking_RDY = ConRO:AbilityReady(ids.Racial.Berserking, timeShift);
local _ArcaneTorrent, _ArcaneTorrent_RDY = ConRO:AbilityReady(ids.Racial.ArcaneTorrent, timeShift);
--Abilities
--Conditions
local _is_moving = ConRO:PlayerSpeed();
local _enemies_in_melee, _target_in_melee = ConRO:Targets("Melee");
local _target_in_10yrds = CheckInteractDistance("target", 3);
--Warnings
--Rotations
return nil;
end
function ConRO.Hunter.Under10Def(_, timeShift, currentSpell, gcd, tChosen, pvpChosen)
--Info
local _Player_Level = UnitLevel("player");
local _Player_Percent_Health = ConRO:PercentHealth('player');
local _is_PvP = ConRO:IsPvP();
local _in_combat = UnitAffectingCombat('player');
local _party_size = GetNumGroupMembers();
local _is_PC = UnitPlayerControlled("target");
local _is_Enemy = ConRO:TarHostile();
local _Target_Health = UnitHealth('target');
local _Target_Percent_Health = ConRO:PercentHealth('target');
--Resources
--Racials
local _AncestralCall, _AncestralCall_RDY = ConRO:AbilityReady(ids.Racial.AncestralCall, timeShift);
local _ArcanePulse, _ArcanePulse_RDY = ConRO:AbilityReady(ids.Racial.ArcanePulse, timeShift);
local _Berserking, _Berserking_RDY = ConRO:AbilityReady(ids.Racial.Berserking, timeShift);
local _ArcaneTorrent, _ArcaneTorrent_RDY = ConRO:AbilityReady(ids.Racial.ArcaneTorrent, timeShift);
--Abilities
--Conditions
local _is_moving = ConRO:PlayerSpeed();
local _enemies_in_melee, _target_in_melee = ConRO:Targets("Melee");
local _target_in_10yrds = CheckInteractDistance("target", 3);
--Warnings
--Rotations
return nil;
end
function ConRO.Hunter.BeastMastery(_, timeShift, currentSpell, gcd, tChosen, pvpChosen)
--Info
local _Player_Level = UnitLevel("player");
local _Player_Percent_Health = ConRO:PercentHealth('player');
local _is_PvP = ConRO:IsPvP();
local _in_combat = UnitAffectingCombat('player');
local _party_size = GetNumGroupMembers();
local _is_PC = UnitPlayerControlled("target");
local _is_Enemy = ConRO:TarHostile();
local _Target_Health = UnitHealth('target');
local _Target_Percent_Health = ConRO:PercentHealth('target');
--Resources
local _Focus, _Focus_Max = ConRO:PlayerPower('Focus');
local _Heroism_BUFF, _Sated_DEBUFF = ConRO:Heroism();
--Racials
local _AncestralCall, _AncestralCall_RDY = ConRO:AbilityReady(ids.Racial.AncestralCall, timeShift);
local _ArcanePulse, _ArcanePulse_RDY = ConRO:AbilityReady(ids.Racial.ArcanePulse, timeShift);
local _Berserking, _Berserking_RDY = ConRO:AbilityReady(ids.Racial.Berserking, timeShift);
local _ArcaneTorrent, _ArcaneTorrent_RDY = ConRO:AbilityReady(ids.Racial.ArcaneTorrent, timeShift);
--Abilities
local _ArcaneShot, _ArcaneShot_RDY = ConRO:AbilityReady(ids.BM_Ability.ArcaneShot, timeShift);
local _AspectoftheWild, _AspectoftheWild_RDY, _AspectoftheWild_CD = ConRO:AbilityReady(ids.BM_Ability.AspectoftheWild, timeShift);
local _AspectoftheWild_BUFF = ConRO:Aura(ids.BM_Buff.AspectoftheWild, timeShift);
local _BarbedShot, _BarbedShot_RDY, _BarbedShot_CD = ConRO:AbilityReady(ids.BM_Ability.BarbedShot, timeShift);
local _BarbedShot_CHARGES, _BarbedShot_MaxCHARGES, _BarbedShot_CCD, _BarbedShot_MCCD = ConRO:SpellCharges(ids.BM_Ability.BarbedShot);
local _Frenzy_BUFF, _Frenzy_COUNT, _Frenzy_DUR = ConRO:UnitAura(ids.BM_Buff.Frenzy, timeShift, 'pet');
local _BestialWrath, _BestialWrath_RDY, _BestialWrath_CD = ConRO:AbilityReady(ids.BM_Ability.BestialWrath, timeShift);
local _BestialWrath_BUFF = ConRO:Aura(ids.BM_Buff.BestialWrath, timeShift);
local _CallPet, _CallPet_RDY = ConRO:AbilityReady(ids.BM_Ability.CallPetOne, timeShift);
local _CobraShot, _CobraShot_RDY = ConRO:AbilityReady(ids.BM_Ability.CobraShot, timeShift);
local _CommandPet, _CommandPet_RDY = ConRO:AbilityReady(ids.BM_Ability.CommandPet, timeShift);
local _CounterShot, _CounterShot_RDY = ConRO:AbilityReady(ids.BM_Ability.CounterShot, timeShift);
local _Flare, _Flare_RDY = ConRO:AbilityReady(ids.BM_Ability.Flare, timeShift);
local _FreezingTrap, _FreezingTrap_RDY = ConRO:AbilityReady(ids.BM_Ability.FreezingTrap, timeShift);
local _HuntersMark, _HuntersMark_RDY = ConRO:AbilityReady(ids.BM_Ability.HuntersMark, timeShift);
local _HuntersMark_DEBUFF = ConRO:PersistentDebuff(ids.BM_Debuff.HuntersMark);
local _KillCommand, _KillCommand_RDY, _KillCommand_CD = ConRO:AbilityReady(ids.BM_Ability.KillCommand, timeShift);
local _KillShot, _KillShot_RDY = ConRO:AbilityReady(ids.BM_Ability.KillShot, timeShift);
local _MultiShot, _MultiShot_RDY = ConRO:AbilityReady(ids.BM_Ability.MultiShot, timeShift);
local _BeastCleave_BUFF, _, _BeastCleave_DUR = ConRO:Aura(ids.BM_Buff.BeastCleave, timeShift + 1);
local _TarTrap, _TarTrap_RDY = ConRO:AbilityReady(ids.BM_Ability.TarTrap, timeShift);
local _TarTrap_DEBUFF = ConRO:TargetAura(ids.BM_Debuff.TarTrap, timeShift);
local _TranquilizingShot, _TranquilizingShot_RDY = ConRO:AbilityReady(ids.BM_Ability.TranquilizingShot, timeShift);
local _AMurderofCrows, _AMurderofCrows_RDY = ConRO:AbilityReady(ids.BM_Talent.AMurderofCrows, timeShift);
local _Barrage, _Barrage_RDY = ConRO:AbilityReady(ids.BM_Talent.Barrage, timeShift);
local _Bloodshed, _Bloodshed_RDY = ConRO:AbilityReady(ids.BM_Talent.Bloodshed, timeShift);
local _ChimaeraShot, _ChimaeraShot_RDY = ConRO:AbilityReady(ids.BM_Talent.ChimaeraShot, timeShift);
local _DireBeast, _DireBeast_RDY, _DireBeast_CD = ConRO:AbilityReady(ids.BM_Talent.DireBeast, timeShift);
local _Stampede, _Stampede_RDY = ConRO:AbilityReady(ids.BM_Talent.Stampede, timeShift);
local _DeathChakram, _DeathChakram_RDY = ConRO:AbilityReady(ids.Covenant_Ability.DeathChakram, timeShift);
local _FlayedShot, _FlayedShot_RDY = ConRO:AbilityReady(ids.Covenant_Ability.FlayedShot, timeShift);
local _FlayersMark_BUFF = ConRO:Aura(ids.Covenant_Buff.FlayersMark, timeShift);
local _ResonatingArrow, _ResonatingArrow_RDY = ConRO:AbilityReady(ids.Covenant_Ability.ResonatingArrow, timeShift);
local _Soulshape, _Soulshape_RDY = ConRO:AbilityReady(ids.Covenant_Ability.Soulshape, timeShift);
local _WildSpirits, _WildSpirits_RDY = ConRO:AbilityReady(ids.Covenant_Ability.WildSpirits, timeShift);
local _NesingwarysTrappingApparatus_EQUIPPED = ConRO:ItemEquipped(ids.Legendary.NesingwarysTrappingApparatus_Feet) or ConRO:ItemEquipped(ids.Legendary.NesingwarysTrappingApparatus_Waist);
local _SoulforgeEmbers_EQUIPPED = ConRO:ItemEquipped(ids.Legendary.SoulforgeEmbers_Head) or ConRO:ItemEquipped(ids.Legendary.SoulforgeEmbers_Shoulder);
local _SoulforgeEmbers_DEBUFF = ConRO:TargetAura(ids.Legendary_Debuff.SoulforgeEmbers, timeShift);
--Conditions
local _is_moving = ConRO:PlayerSpeed();
local _enemies_in_melee, _target_in_melee = ConRO:Targets("Melee");
local _target_in_10yrds = CheckInteractDistance("target", 3);
local _can_execute = _Target_Percent_Health <= 20;
local _Pet_summoned = ConRO:CallPet();
local _Pet_assist = ConRO:PetAssist();
local _Pet_Percent_Health = ConRO:PercentHealth('pet');
--Indicators
ConRO:AbilityInterrupt(_CounterShot, _CounterShot_RDY and ConRO:Interrupt());
ConRO:AbilityPurge(_ArcaneTorrent, _ArcaneTorrent_RDY and _target_in_melee and ConRO:Purgable());
ConRO:AbilityPurge(_TranquilizingShot, _TranquilizingShot_RDY and ConRO:Purgable());
ConRO:AbilityMovement(_Soulshape, _Soulshape_RDY and _target_in_melee);
ConRO:AbilityBurst(_AspectoftheWild, _AspectoftheWild_RDY and ConRO:BurstMode(_AspectoftheWild));
ConRO:AbilityBurst(_BestialWrath, _BestialWrath_RDY and (_AspectoftheWild_BUFF or _AspectoftheWild_CD > 20) and ConRO:BurstMode(_BestialWrath));
ConRO:AbilityBurst(_Stampede, _Stampede_RDY and ((_BestialWrath_BUFF and _AspectoftheWild_BUFF) or (_AspectoftheWild_BUFF and _in_combat)) and ConRO:BurstMode(_Stampede));
ConRO:AbilityBurst(_Bloodshed, _Bloodshed_RDY and ConRO:BurstMode(_Bloodshed));
ConRO:AbilityBurst(_AMurderofCrows, _AMurderofCrows_RDY and ConRO:BurstMode(_AMurderofCrows));
ConRO:AbilityBurst(_ResonatingArrow, _ResonatingArrow_RDY and ConRO:BurstMode(_ResonatingArrow));
ConRO:AbilityBurst(_DeathChakram, _DeathChakram_RDY and ConRO:BurstMode(_DeathChakram));
ConRO:AbilityBurst(_WildSpirits, _WildSpirits_RDY and ConRO:BurstMode(_WildSpirits));
ConRO:AbilityBurst(_TarTrap, _TarTrap_RDY and _Flare_RDY and _SoulforgeEmbers_EQUIPPED and not _SoulforgeEmbers_DEBUFF and ConRO:BurstMode(_TarTrap));
ConRO:AbilityBurst(_Flare, _Flare_RDY and _SoulforgeEmbers_EQUIPPED and not _TarTrap_RDY and not _SoulforgeEmbers_DEBUFF);
--Warnings
ConRO:Warnings("Call your pet!", _CallPet_RDY and not _Pet_summoned);
--Rotations
if not _in_combat then
if _AspectoftheWild_RDY and (_BestialWrath_RDY or _BestialWrath_CD > 15) and ConRO:FullMode(_AspectoftheWild) then
return _AspectoftheWild;
end
if _TarTrap_RDY and _Flare_RDY and _SoulforgeEmbers_EQUIPPED and not _SoulforgeEmbers_DEBUFF and ConRO:FullMode(_TarTrap) then
return _TarTrap;
end
if _BarbedShot_RDY and _BarbedShot_CHARGES >= 1 and tChosen[ids.BM_Talent.ScentofBlood] and _BestialWrath_RDY and not _BestialWrath_BUFF and (_AspectoftheWild_BUFF or _AspectoftheWild_CD > 15) and ConRO:FullMode(_BestialWrath) then
return _BarbedShot;
end
if _BestialWrath_RDY and not _BestialWrath_BUFF and (_AspectoftheWild_BUFF or _AspectoftheWild_CD > 15) and ConRO:FullMode(_BestialWrath) then
return _BestialWrath;
end;
if _BarbedShot_RDY and (not _Frenzy_BUFF or (_Frenzy_BUFF and _Frenzy_DUR < 1.5)) then
return _BarbedShot;
end
if _ChimaeraShot_RDY and ConRO_AoEButton:IsVisible() then
return _ChimaeraShot;
end
if _KillCommand_RDY then
return _KillCommand;
end
end
if _BarbedShot_RDY and (_BarbedShot_CHARGES == 2 or (_Frenzy_BUFF and _Frenzy_DUR < 2 and _Frenzy_DUR > .25)) then
return _BarbedShot;
end
if _MultiShot_RDY and not _BeastCleave_BUFF and ConRO_AoEButton:IsVisible() then
return _MultiShot;
end
if _Bloodshed_RDY and ConRO:FullMode(_Bloodshed) then
return _Bloodshed;
end
if _Stampede_RDY and _BestialWrath_BUFF and _AspectoftheWild_BUFF and ConRO:FullMode(_Stampede) then
return _Stampede;
end
if _Barrage_RDY and ConRO_AoEButton:IsVisible() then
return _Barrage;
end
if _TarTrap_RDY and _Flare_RDY and _SoulforgeEmbers_EQUIPPED and not _SoulforgeEmbers_DEBUFF and ConRO_AoEButton:IsVisible() and ConRO:FullMode(_TarTrap) then
return _TarTrap;
end
if _AspectoftheWild_RDY and (_BestialWrath_RDY or _BestialWrath_CD > 15) and ConRO:FullMode(_AspectoftheWild) then
return _AspectoftheWild;
end
if _TarTrap_RDY and _Flare_RDY and _SoulforgeEmbers_EQUIPPED and not _SoulforgeEmbers_DEBUFF and ConRO:FullMode(_TarTrap) then
return _TarTrap;
end
if _WildSpirits_RDY and ConRO:FullMode(_WildSpirits) then
return _WildSpirits;
end
if _BarbedShot_RDY and _BarbedShot_CHARGES >= 1 and tChosen[ids.BM_Talent.ScentofBlood] and _BestialWrath_RDY and not _BestialWrath_BUFF and (_AspectoftheWild_BUFF or _AspectoftheWild_CD > 15) and ConRO:FullMode(_BestialWrath) then
return _BarbedShot;
end
if _BestialWrath_RDY and not _BestialWrath_BUFF and (_AspectoftheWild_BUFF or _AspectoftheWild_CD > 15) and ConRO:FullMode(_BestialWrath) then
return _BestialWrath;
end
if _ResonatingArrow_RDY and ConRO:FullMode(_ResonatingArrow) then
return _ResonatingArrow;
end
if _FlayedShot_RDY then
return _FlayedShot;
end
if _DeathChakram_RDY and ConRO:FullMode(_DeathChakram) then
return _DeathChakram;
end
if _ChimaeraShot_RDY and ConRO_AoEButton:IsVisible() then
return _ChimaeraShot;
end
if _KillShot_RDY and (_can_execute or _FlayersMark_BUFF) then
return _KillShot;
end
if _KillCommand_RDY then
return _KillCommand;
end
if _ChimaeraShot_RDY then
return _ChimaeraShot;
end
if _AMurderofCrows_RDY and ConRO:FullMode(_AMurderofCrows) then
return _AMurderofCrows;
end
if _DireBeast_RDY then
return _DireBeast;
end
if _BarbedShot_RDY and _BarbedShot_CHARGES == 1 and _BarbedShot_CCD <= 1.5 then
return _BarbedShot;
end
if _Barrage_RDY then
return _Barrage;
end
if _CobraShot_RDY and (((_KillCommand_CD >= 2 or _Focus >= _Focus_Max - 15) and ConRO_SingleButton:IsVisible()) or (_Focus >= 90 and _BeastCleave_BUFF and ConRO_AoEButton:IsVisible())) then
return _CobraShot;
end
if _NesingwarysTrappingApparatus_EQUIPPED and _Focus < 50 and ConRO.lastSpellId ~= _TarTrap and ConRO.lastSpellId ~= _FreezingTrap then
if _TarTrap_RDY then
return _TarTrap;
end
if _FreezingTrap_RDY then
return _FreezingTrap;
end
end
return nil;
end
function ConRO.Hunter.BeastMasteryDef(_, timeShift, currentSpell, gcd, tChosen, pvpChosen)
--Info
local _Player_Level = UnitLevel("player");
local _Player_Percent_Health = ConRO:PercentHealth('player');
local _is_PvP = ConRO:IsPvP();
local _in_combat = UnitAffectingCombat('player');
local _party_size = GetNumGroupMembers();
local _is_PC = UnitPlayerControlled("target");
local _is_Enemy = ConRO:TarHostile();
local _Target_Health = UnitHealth('target');
local _Target_Percent_Health = ConRO:PercentHealth('target');
--Resources
local _Focus, _Focus_Max = ConRO:PlayerPower('Focus');
local _Heroism_BUFF, _Sated_DEBUFF = ConRO:Heroism();
--Abilities
local _Exhilaration, _Exhilaration_RDY = ConRO:AbilityReady(ids.BM_Ability.Exhilaration, timeShift);
local _AspectoftheTurtle, _AspectoftheTurtle_RDY = ConRO:AbilityReady(ids.BM_Ability.AspectoftheTurtle, timeShift);
local _MendPet, _MendPet_RDY = ConRO:AbilityReady(ids.BM_Ability.MendPet, timeShift);
local _FeedPet, _FeedPet_RDY = ConRO:AbilityReady(ids.BM_Ability.FeedPet, timeShift);
local _Fleshcraft, _Fleshcraft_RDY = ConRO:AbilityReady(ids.Covenant_Ability.Fleshcraft, timeShift);
local _PhialofSerenity, _PhialofSerenity_RDY = ConRO:ItemReady(ids.Covenant_Ability.PhialofSerenity, timeShift);
--Conditions
local _is_moving = ConRO:PlayerSpeed();
local _enemies_in_melee, _target_in_melee = ConRO:Targets("Melee");
local _target_in_10yrds = CheckInteractDistance("target", 3);
local _Pet_summoned = ConRO:CallPet();
local _Pet_assist = ConRO:PetAssist();
local _Pet_Percent_Health = ConRO:PercentHealth('pet');
--Rotations
if _Fleshcraft_RDY and not _in_combat then
return _Fleshcraft;
end
if _FeedPet_RDY and not _in_combat and _Pet_summoned and _Pet_Percent_Health <= 60 then
return _FeedPet;
end
if _Exhilaration_RDY and (_Player_Percent_Health <= 50 or _Pet_Percent_Health <= 20) then
return _Exhilaration;
end
if _PhialofSerenity_RDY and _Player_Percent_Health <= 80 then
return _PhialofSerenity;
end
if _MendPet_RDY and _Pet_summoned and _Pet_Percent_Health <= 60 then
return _MendPet;
end
if _AspectoftheTurtle_RDY then
return _AspectoftheTurtle;
end
if _Fleshcraft_RDY then
return _Fleshcraft;
end
return nil;
end
function ConRO.Hunter.Marksmanship(_, timeShift, currentSpell, gcd, tChosen, pvpChosen)
--Info
local _Player_Level = UnitLevel("player");
local _Player_Percent_Health = ConRO:PercentHealth('player');
local _is_PvP = ConRO:IsPvP();
local _in_combat = UnitAffectingCombat('player');
local _party_size = GetNumGroupMembers();
local _is_PC = UnitPlayerControlled("target");
local _is_Enemy = ConRO:TarHostile();
local _Target_Health = UnitHealth('target');
local _Target_Percent_Health = ConRO:PercentHealth('target');
--Resources
local _Focus, _Focus_Max = ConRO:PlayerPower('Focus');
local _Heroism_BUFF, _Sated_DEBUFF = ConRO:Heroism();
--Racials
local _AncestralCall, _AncestralCall_RDY = ConRO:AbilityReady(ids.Racial.AncestralCall, timeShift);
local _ArcanePulse, _ArcanePulse_RDY = ConRO:AbilityReady(ids.Racial.ArcanePulse, timeShift);
local _Berserking, _Berserking_RDY = ConRO:AbilityReady(ids.Racial.Berserking, timeShift);
local _ArcaneTorrent, _ArcaneTorrent_RDY = ConRO:AbilityReady(ids.Racial.ArcaneTorrent, timeShift);
--Abilities
local _AimedShot, _AimedShot_RDY = ConRO:AbilityReady(ids.MM_Ability.AimedShot, timeShift);
local _AimedShot_CHARGES, _, _AimedShot_CCD, _AimedShot_MCCD = ConRO:SpellCharges(ids.MM_Ability.AimedShot);
local _PreciseShots_BUFF = ConRO:Aura(ids.MM_Buff.PreciseShots, timeShift);
local _LockandLoad_BUFF = ConRO:Aura(ids.MM_Buff.LockandLoad, timeShift);
local _ArcaneShot, _ArcaneShot_RDY = ConRO:AbilityReady(ids.MM_Ability.ArcaneShot, timeShift);
local _CounterShot, _CounterShot_RDY = ConRO:AbilityReady(ids.MM_Ability.CounterShot, timeShift);
local _Disengage, _Disengage_RDY = ConRO:AbilityReady(ids.MM_Ability.Disengage, timeShift);
local _Flare, _Flare_RDY = ConRO:AbilityReady(ids.MM_Ability.Flare, timeShift);
local _FreezingTrap, _FreezingTrap_RDY = ConRO:AbilityReady(ids.MM_Ability.FreezingTrap, timeShift);
local _HuntersMark, _HuntersMark_RDY = ConRO:AbilityReady(ids.MM_Ability.HuntersMark, timeShift);
local _HuntersMark_DEBUFF = ConRO:PersistentDebuff(ids.MM_Debuff.HuntersMark);
local _KillShot, _KillShot_RDY = ConRO:AbilityReady(ids.MM_Ability.KillShot, timeShift);
local _DeadEye_BUFF = ConRO:Aura(ids.MM_Buff.DeadEye, timeShift);
local _MultiShot, _MultiShot_RDY = ConRO:AbilityReady(ids.MM_Ability.MultiShot, timeShift);
local _TrickShots_BUFF = ConRO:Aura(ids.MM_Buff.TrickShots, timeShift);
local _RapidFire, _RapidFire_RDY = ConRO:AbilityReady(ids.MM_Ability.RapidFire, timeShift);
local _SteadyShot, _SteadyShot_RDY = ConRO:AbilityReady(ids.MM_Ability.SteadyShot, timeShift);
local _LethalShots_BUFF = ConRO:Aura(ids.MM_Buff.LethalShots, timeShift);
local _SteadyFocus_BUFF, _, _SteadyFocus_DUR = ConRO:Aura(ids.MM_Buff.SteadyFocus, timeShift);
local _TarTrap, _TarTrap_RDY = ConRO:AbilityReady(ids.MM_Ability.TarTrap, timeShift);
local _TarTrap_DEBUFF = ConRO:TargetAura(ids.MM_Debuff.TarTrap, timeShift);
local _TranquilizingShot, _TranquilizingShot_RDY = ConRO:AbilityReady(ids.MM_Ability.TranquilizingShot, timeShift);
local _Trueshot, _Trueshot_RDY = ConRO:AbilityReady(ids.MM_Ability.Trueshot, timeShift);
local _Trueshot_BUFF, _, _Trueshot_DUR = ConRO:Aura(ids.MM_Buff.Trueshot, timeShift);
local _AMurderofCrows, _AMurderofCrows_RDY = ConRO:AbilityReady(ids.MM_Talent.AMurderofCrows, timeShift);
local _Barrage, _Barrage_RDY = ConRO:AbilityReady(ids.MM_Talent.Barrage, timeShift);
local _ChimaeraShot, _ChimaeraShot_RDY = ConRO:AbilityReady(ids.MM_Talent.ChimaeraShot, timeShift);
local _DoubleTap, _DoubleTap_RDY = ConRO:AbilityReady(ids.MM_Talent.DoubleTap, timeShift);
local _DoubleTap_BUFF = ConRO:Aura(ids.MM_Buff.DoubleTap, timeShift);
local _ExplosiveShot, _ExplosiveShot_RDY = ConRO:AbilityReady(ids.MM_Talent.ExplosiveShot, timeShift);
local _SerpentSting, _SerpentSting_RDY = ConRO:AbilityReady(ids.MM_Talent.SerpentSting, timeShift);
local _SerpentSting_DEBUFF = ConRO:TargetAura(ids.MM_Debuff.SerpentSting, timeShift + 5);
local _Volley, _Volley_RDY = ConRO:AbilityReady(ids.MM_Talent.Volley, timeShift);
local _Volley_BUFF = ConRO:TargetAura(ids.MM_Debuff.Volley, timeShift);
local _SniperShot, _SniperShot_RDY = ConRO:AbilityReady(ids.MM_PvPTalent.SniperShot, timeShift);
local _DeathChakram, _DeathChakram_RDY = ConRO:AbilityReady(ids.Covenant_Ability.DeathChakram, timeShift);
local _FlayedShot, _FlayedShot_RDY = ConRO:AbilityReady(ids.Covenant_Ability.FlayedShot, timeShift);
local _FlayersMark_BUFF = ConRO:Aura(ids.Covenant_Buff.FlayersMark, timeShift);
local _ResonatingArrow, _ResonatingArrow_RDY = ConRO:AbilityReady(ids.Covenant_Ability.ResonatingArrow, timeShift);
local _Soulshape, _Soulshape_RDY = ConRO:AbilityReady(ids.Covenant_Ability.Soulshape, timeShift);
local _WildSpirits, _WildSpirits_RDY = ConRO:AbilityReady(ids.Covenant_Ability.WildSpirits, timeShift);
local _NesingwarysTrappingApparatus_EQUIPPED = ConRO:ItemEquipped(ids.Legendary.NesingwarysTrappingApparatus_Feet) or ConRO:ItemEquipped(ids.Legendary.NesingwarysTrappingApparatus_Waist);
local _SoulforgeEmbers_EQUIPPED = ConRO:ItemEquipped(ids.Legendary.SoulforgeEmbers_Head) or ConRO:ItemEquipped(ids.Legendary.SoulforgeEmbers_Shoulder);
local _SoulforgeEmbers_DEBUFF = ConRO:TargetAura(ids.Legendary_Debuff.SoulforgeEmbers, timeShift);
--Conditions
local _is_moving = ConRO:PlayerSpeed();
local _enemies_in_melee, _target_in_melee = ConRO:Targets("Melee");
local _target_in_10yrds = CheckInteractDistance("target", 3);
local _can_execute = _Target_Percent_Health <= 20;
local _Pet_summoned = ConRO:CallPet();
local _Pet_assist = ConRO:PetAssist();
local _Pet_Percent_Health = ConRO:PercentHealth('pet');
local _, _, _, _AimedShot_timemil = GetSpellInfo(_AimedShot);
local _AimedShot_time = _AimedShot_timemil*.001;
local _AimedShot_Error = 0.3;
if currentSpell == _AimedShot then
_Focus = _Focus - 35;
_AimedShot_CHARGES = _AimedShot_CHARGES - 1;
end
if _LockandLoad_BUFF then
_AimedShot_time = gcd;
end
local _RapidFire_Threshold = 70
if tChosen[ids.MM_Talent.Streamline] then
_RapidFire_Threshold = 64;
end
--Indicators
ConRO:AbilityInterrupt(_CounterShot, _CounterShot_RDY and ConRO:Interrupt());
ConRO:AbilityPurge(_ArcaneTorrent, _ArcaneTorrent_RDY and _target_in_melee and ConRO:Purgable());
ConRO:AbilityPurge(_TranquilizingShot, _TranquilizingShot_RDY and ConRO:Purgable());
ConRO:AbilityMovement(_Disengage, _Disengage_RDY and _target_in_melee);
ConRO:AbilityMovement(_Soulshape, _Soulshape_RDY and _target_in_melee);
ConRO:AbilityBurst(_Trueshot, _Trueshot_RDY and _AimedShot_CHARGES >= 1 and ConRO:BurstMode(_Trueshot));
ConRO:AbilityBurst(_AMurderofCrows, _AMurderofCrows_RDY and ConRO_SingleButton:IsVisible() and ConRO:BurstMode(_AMurderofCrows));
ConRO:AbilityBurst(_DoubleTap, _DoubleTap_RDY and not _RapidFire_RDY and _AimedShot_RDY and ConRO:BurstMode(_DoubleTap));
ConRO:AbilityBurst(_Volley, _Volley_RDY and (_RapidFire_RDY or _AimedShot_RDY) and ConRO:BurstMode(_Volley));
ConRO:AbilityBurst(_ResonatingArrow, _ResonatingArrow_RDY and ConRO:BurstMode(_ResonatingArrow));
ConRO:AbilityBurst(_DeathChakram, _DeathChakram_RDY and ConRO:BurstMode(_DeathChakram));
ConRO:AbilityBurst(_WildSpirits, _WildSpirits_RDY and ConRO:BurstMode(_WildSpirits));
ConRO:AbilityBurst(_TarTrap, _TarTrap_RDY and _Flare_RDY and _SoulforgeEmbers_EQUIPPED and not _SoulforgeEmbers_DEBUFF and ConRO:BurstMode(_TarTrap));
ConRO:AbilityBurst(_Flare, _Flare_RDY and _SoulforgeEmbers_EQUIPPED and not _TarTrap_RDY and not _SoulforgeEmbers_DEBUFF);
--Warnings
--Rotations
if not _in_combat then
if _DoubleTap_RDY and (ConRO:CovenantChosen(ids.Covenant.Venthyr) or ConRO:CovenantChosen(ids.Covenant.Necrolord)) and ConRO:FullMode(_DoubleTap) then
return _DoubleTap;
end
if _AimedShot_RDY and currentSpell ~= _AimedShot then
return _AimedShot;
end
if _DoubleTap_RDY and ConRO:FullMode(_DoubleTap) then
return _DoubleTap;
end
if _SteadyShot_RDY and tChosen[ids.MM_Talent.SteadyFocus] and not _SteadyFocus_BUFF then
return _SteadyShot;
end
if _ExplosiveShot_RDY and ConRO_AoEButton:IsVisible() then
return _ExplosiveShot;
end
if _Volley_RDY and ConRO_AoEButton:IsVisible() then
return _Volley;
end
if _RapidFire_RDY then
return _RapidFire;
end
end
if _SteadyShot_RDY and currentSpell == _SteadyShot and ConRO.lastSpellId ~= _SteadyShot and tChosen[ids.MM_Talent.SteadyFocus] and (not _SteadyFocus_BUFF or _SteadyFocus_DUR <= 4 or _Trueshot_BUFF) then
return _SteadyShot;
end
if _KillShot_RDY and (_can_execute or _FlayersMark_BUFF) and not _DeadEye_BUFF then
return _KillShot;
end
if _DoubleTap_RDY and not _RapidFire_RDY and _AimedShot_RDY and ConRO:FullMode(_DoubleTap) then
return _DoubleTap;
end
if _TarTrap_RDY and _Flare_RDY and _SoulforgeEmbers_EQUIPPED and not _SoulforgeEmbers_DEBUFF and ConRO:FullMode(_TarTrap) then
return _TarTrap;
end
if _SteadyShot_RDY and tChosen[ids.MM_Talent.SteadyFocus] and not _SteadyFocus_BUFF and currentSpell ~= _SteadyShot then
return _SteadyShot;
end
if _SerpentSting_RDY and not _SerpentSting_DEBUFF and ConRO_SingleButton:IsVisible() then
return _SerpentSting;
end
if _AMurderofCrows_RDY and ConRO_SingleButton:IsVisible() and ConRO:FullMode(_AMurderofCrows) then
return _AMurderofCrows;
end
if _ExplosiveShot_RDY then
return _ExplosiveShot;
end
if _WildSpirits_RDY and ConRO:FullMode(_WildSpirits) then
return _WildSpirits;
end
if _ResonatingArrow_RDY and ConRO:FullMode(_ResonatingArrow) then
return _ResonatingArrow;
end
if _Volley_RDY and (_RapidFire_RDY or _AimedShot_RDY) and ConRO:FullMode(_Volley) then
return _Volley;
end
if _FlayedShot_RDY and ConRO_SingleButton:IsVisible() then
return _FlayedShot;
end
if _DeathChakram_RDY and ConRO_SingleButton:IsVisible() and ConRO:FullMode(_DeathChakram) then
return _DeathChakram;
end
if _Trueshot_RDY and _AimedShot_CHARGES >= 1 and ConRO_FullButton:IsVisible() then
return _Trueshot;
end
if ConRO_AoEButton:IsVisible() then
if _TrickShots_BUFF then
if _RapidFire_RDY and tChosen[ids.MM_Talent.Streamline] then
return _RapidFire;
end
if _AimedShot_RDY and (_AimedShot_CHARGES == 2 or (_AimedShot_CHARGES == 1 and _AimedShot_CCD <= _AimedShot_time + .5) or (_LockandLoad_BUFF and not _PreciseShots_BUFF) or _DoubleTap_BUFF) and currentSpell ~= _AimedShot then
return _AimedShot;
end
if _RapidFire_RDY then
return _RapidFire;
end
end
if _Barrage_RDY then
return _Barrage;
end
else
if _AimedShot_RDY and (_AimedShot_CHARGES == 2 or (_AimedShot_CHARGES == 1 and _AimedShot_CCD <= _AimedShot_time + .5) or (_LockandLoad_BUFF and not _PreciseShots_BUFF) or _DoubleTap_BUFF) and currentSpell ~= _AimedShot then
return _AimedShot;
end
if _RapidFire_RDY then
return _RapidFire;
end
end
if ConRO_AoEButton:IsVisible() then
if _MultiShot_RDY and (_PreciseShots_BUFF or currentSpell == _AimedShot) then
return _MultiShot;
end
else
if tChosen[ids.MM_Talent.ChimaeraShot] then
if _ChimaeraShot_RDY and (_PreciseShots_BUFF or currentSpell == _AimedShot) then
return _ChimaeraShot;
end
else
if _ArcaneShot_RDY and (_PreciseShots_BUFF or currentSpell == _AimedShot) then
return _ArcaneShot;
end
end
end
if _DeathChakram_RDY and ConRO_AoEButton:IsVisible() and ConRO:FullMode(_DeathChakram) then
return _DeathChakram;
end
if _AimedShot_RDY and not _PreciseShots_BUFF and _AimedShot_CHARGES >= 1 then
return _AimedShot;
end
if _FlayedShot_RDY and ConRO_AoEButton:IsVisible() then
return _FlayedShot;
end
if _NesingwarysTrappingApparatus_EQUIPPED and _Focus < 50 and ConRO.lastSpellId ~= _TarTrap and ConRO.lastSpellId ~= _FreezingTrap then
if _TarTrap_RDY then
return _TarTrap;
end
if _FreezingTrap_RDY then
return _FreezingTrap;
end
end
if _SteadyShot_RDY then
return _SteadyShot;
end
return nil;
end
function ConRO.Hunter.MarksmanshipDef(_, timeShift, currentSpell, gcd, tChosen, pvpChosen)
--Info
local _Player_Level = UnitLevel("player");
local _Player_Percent_Health = ConRO:PercentHealth('player');
local _is_PvP = ConRO:IsPvP();
local _in_combat = UnitAffectingCombat('player');
local _party_size = GetNumGroupMembers();
local _is_PC = UnitPlayerControlled("target");
local _is_Enemy = ConRO:TarHostile();
local _Target_Health = UnitHealth('target');
local _Target_Percent_Health = ConRO:PercentHealth('target');
--Resources
local _Focus, _Focus_Max = ConRO:PlayerPower('Focus');
local _Heroism_BUFF, _Sated_DEBUFF = ConRO:Heroism();
--Abilities
local _Exhilaration, _Exhilaration_RDY = ConRO:AbilityReady(ids.MM_Ability.Exhilaration, timeShift);
local _AspectoftheTurtle, _AspectoftheTurtle_RDY = ConRO:AbilityReady(ids.MM_Ability.AspectoftheTurtle, timeShift);
local _SurvivaloftheFittestLW, _SurvivaloftheFittestLW_RDY = ConRO:AbilityReady(ids.MM_Ability.SurvivaloftheFittestLW, timeShift);
local _LoneWolf_FORM = ConRO:Form(ids.MM_Form.LoneWolf);
local _MendPet, _MendPet_RDY = ConRO:AbilityReady(ids.MM_Ability.MendPet, timeShift);
local _FeedPet, _FeedPet_RDY = ConRO:AbilityReady(ids.MM_Ability.FeedPet, timeShift);
local _Fleshcraft, _Fleshcraft_RDY = ConRO:AbilityReady(ids.Covenant_Ability.Fleshcraft, timeShift);
local _PhialofSerenity, _PhialofSerenity_RDY = ConRO:ItemReady(ids.Covenant_Ability.PhialofSerenity, timeShift);
--Conditions
local _is_moving = ConRO:PlayerSpeed();
local _enemies_in_melee, _target_in_melee = ConRO:Targets("Melee");
local _target_in_10yrds = CheckInteractDistance("target", 3);
local _Pet_summoned = ConRO:CallPet();
local _Pet_assist = ConRO:PetAssist();
local _Pet_Percent_Health = ConRO:PercentHealth('pet');
--Rotations
if _Fleshcraft_RDY and not _in_combat then
return ids.Covenant_Ability.Fleshcraft;
end
if _FeedPet_RDY and _Pet_summoned and not _in_combat and _Pet_Percent_Health <= 60 then
return ids.MM_Ability.FeedPet;
end
if _Exhilaration_RDY and (_Player_Percent_Health <= 50 or _Pet_Percent_Health <= 20) then
return ids.MM_Ability.Exhilaration;
end
if _PhialofSerenity_RDY and _Player_Percent_Health <= 80 then
return _PhialofSerenity;
end
if _MendPet_RDY and _Pet_summoned and _Pet_Percent_Health <= 60 then
return ids.MM_Ability.MendPet;
end
if _AspectoftheTurtle_RDY then
return ids.MM_Ability.AspectoftheTurtle;
end
if _SurvivaloftheFittestLW_RDY and _LoneWolf_FORM and _in_combat then
return ids.MM_Ability.SurvivaloftheFittestLW;
end
if _Fleshcraft_RDY then
return ids.Covenant_Ability.Fleshcraft;
end
return nil;
end
function ConRO.Hunter.Survival(_, timeShift, currentSpell, gcd, tChosen, pvpChosen)
--Info
local _Player_Level = UnitLevel("player");
local _Player_Percent_Health = ConRO:PercentHealth('player');
local _is_PvP = ConRO:IsPvP();
local _in_combat = UnitAffectingCombat('player');
local _party_size = GetNumGroupMembers();
local _is_PC = UnitPlayerControlled("target");
local _is_Enemy = ConRO:TarHostile();
local _Target_Health = UnitHealth('target');
local _Target_Percent_Health = ConRO:PercentHealth('target');
--Resources
local _Focus, _Focus_Max = ConRO:PlayerPower('Focus');
local _Heroism_BUFF, _Sated_DEBUFF = ConRO:Heroism();
--Racials
local _AncestralCall, _AncestralCall_RDY = ConRO:AbilityReady(ids.Racial.AncestralCall, timeShift);
local _ArcanePulse, _ArcanePulse_RDY = ConRO:AbilityReady(ids.Racial.ArcanePulse, timeShift);
local _Berserking, _Berserking_RDY = ConRO:AbilityReady(ids.Racial.Berserking, timeShift);
local _ArcaneTorrent, _ArcaneTorrent_RDY = ConRO:AbilityReady(ids.Racial.ArcaneTorrent, timeShift);
--Abilities
local _AspectoftheEagle, _AspectoftheEagle_RDY = ConRO:AbilityReady(ids.Surv_Ability.AspectoftheEagle, timeShift);
local _AspectoftheEagle_BUFF = ConRO:Aura(ids.Surv_Buff.AspectoftheEagle, timeShift);
local _CallPet, _CallPet_RDY = ConRO:AbilityReady(ids.Surv_Ability.CallPetOne, timeShift);
local _Carve, _Carve_RDY = ConRO:AbilityReady(ids.Surv_Ability.Carve, timeShift);
local _CommandPet, _CommandPet_RDY = ConRO:AbilityReady(ids.Surv_Ability.CommandPet, timeShift);
local _CoordinatedAssault, _CoordinatedAssault_RDY = ConRO:AbilityReady(ids.Surv_Ability.CoordinatedAssault, timeShift);
local _CoordinatedAssault_BUFF = ConRO:Aura(ids.Surv_Buff.CoordinatedAssault, timeShift);
local _Flare, _Flare_RDY = ConRO:AbilityReady(ids.Surv_Ability.Flare, timeShift);
local _FreezingTrap, _FreezingTrap_RDY = ConRO:AbilityReady(ids.Surv_Ability.FreezingTrap, timeShift);
local _Harpoon, _Harpoon_RDY = ConRO:AbilityReady(ids.Surv_Ability.Harpoon, timeShift);
local _, _Harpoon_RANGE = ConRO:Targets(ids.Surv_Ability.Harpoon);
local _KillCommand, _KillCommand_RDY = ConRO:AbilityReady(ids.Surv_Ability.KillCommand, timeShift);
local _KillCommand_CHARGES, _, _KillCommand_CCD = ConRO:SpellCharges(ids.Surv_Ability.KillCommand);
local _, _TipoftheSpear_COUNT = ConRO:Aura(ids.Surv_Buff.TipoftheSpear, timeShift);
local _KillShot, _KillShot_RDY = ConRO:AbilityReady(ids.Surv_Ability.KillShot, timeShift);
local _Muzzle, _Muzzle_RDY = ConRO:AbilityReady(ids.Surv_Ability.Muzzle, timeShift);
local _RaptorStrike, _RaptorStrike_RDY = ConRO:AbilityReady(ids.Surv_Ability.RaptorStrike, timeShift);
local _VipersVenom_BUFF = ConRO:Aura(ids.Surv_Buff.VipersVenom, timeShift);
local _SerpentSting, _SerpentSting_RDY = ConRO:AbilityReady(ids.Surv_Ability.SerpentSting, timeShift);
local _SerpentSting_DEBUFF, _, _SerpentSting_DUR = ConRO:TargetAura(ids.Surv_Debuff.SerpentSting, timeShift + 2);
local _TranquilizingShot, _TranquilizingShot_RDY = ConRO:AbilityReady(ids.Surv_Ability.TranquilizingShot, timeShift);
local _WildfireBomb, _WildfireBomb_RDY = ConRO:AbilityReady(ids.Surv_Ability.WildfireBomb, timeShift);
local _WildfireBomb_CHARGES, _, _WildfireBomb_CCD = ConRO:SpellCharges(ids.Surv_Ability.WildfireBomb);
local _WildfireBomb_DEBUFF = ConRO:TargetAura(ids.Surv_Debuff.WildfireBomb, timeShift + 1);
local _PheromoneBomb, _PheromoneBomb_RDY = ConRO:AbilityReady(ids.Surv_Talent.PheromoneBomb, timeShift);
local _PheromoneBomb_DEBUFF = ConRO:TargetAura(ids.Surv_Debuff.PheromoneBomb, timeShift + 1);
local _ShrapnelBomb, _ShrapnelBomb_RDY = ConRO:AbilityReady(ids.Surv_Talent.ShrapnelBomb, timeShift);
local _InternalBleeding_DEBUFF, _InternalBleeding_COUNT, _InternalBleeding_DUR = ConRO:TargetAura(ids.Surv_Debuff.InternalBleeding, timeShift + 1);
local _ShrapnelBomb_DEBUFF = ConRO:TargetAura(ids.Surv_Debuff.ShrapnelBomb, timeShift + 1);
local _TarTrap, _TarTrap_RDY = ConRO:AbilityReady(ids.Surv_Ability.TarTrap, timeShift);
local _TarTrap_DEBUFF = ConRO:TargetAura(ids.Surv_Debuff.TarTrap, timeShift);
local _VolatileBomb, _VolatileBomb_RDY = ConRO:AbilityReady(ids.Surv_Talent.VolatileBomb, timeShift);
local _VolatileBomb_DEBUFF = ConRO:TargetAura(ids.Surv_Debuff.VolatileBomb, timeShift + 1);
local _AMurderofCrows, _AMurderofCrows_RDY = ConRO:AbilityReady(ids.Surv_Talent.AMurderofCrows, timeShift);
local _Butchery, _Butchery_RDY = ConRO:AbilityReady(ids.Surv_Talent.Butchery, timeShift);
local _Chakrams, _Chakrams_RDY = ConRO:AbilityReady(ids.Surv_Talent.Chakrams, timeShift);
local _FlankingStrike, _FlankingStrike_RDY = ConRO:AbilityReady(ids.Surv_Talent.FlankingStrike, timeShift);
local _MongooseBite, _MongooseBite_RDY = ConRO:AbilityReady(ids.Surv_Talent.MongooseBite, timeShift);
local _MongooseFury_BUFF, _MongooseFury_COUNT, _MongooseFury_DUR = ConRO:Aura(ids.Surv_Buff.MongooseFury, timeShift);
local _SteelTrap, _SteelTrap_RDY = ConRO:AbilityReady(ids.Surv_Talent.SteelTrap, timeShift);
local _DeathChakram, _DeathChakram_RDY = ConRO:AbilityReady(ids.Covenant_Ability.DeathChakram, timeShift);
local _FlayedShot, _FlayedShot_RDY = ConRO:AbilityReady(ids.Covenant_Ability.FlayedShot, timeShift);
local _FlayersMark_BUFF = ConRO:Aura(ids.Covenant_Buff.FlayersMark, timeShift);
local _ResonatingArrow, _ResonatingArrow_RDY = ConRO:AbilityReady(ids.Covenant_Ability.ResonatingArrow, timeShift);
local _Soulshape, _Soulshape_RDY = ConRO:AbilityReady(ids.Covenant_Ability.Soulshape, timeShift);
local _WildSpirits, _WildSpirits_RDY = ConRO:AbilityReady(ids.Covenant_Ability.WildSpirits, timeShift);
local _NesingwarysTrappingApparatus_EQUIPPED = ConRO:ItemEquipped(ids.Legendary.NesingwarysTrappingApparatus_Feet) or ConRO:ItemEquipped(ids.Legendary.NesingwarysTrappingApparatus_Waist);
local _SoulforgeEmbers_EQUIPPED = ConRO:ItemEquipped(ids.Legendary.SoulforgeEmbers_Head) or ConRO:ItemEquipped(ids.Legendary.SoulforgeEmbers_Shoulder);
local _SoulforgeEmbers_DEBUFF = ConRO:TargetAura(ids.Legendary_Debuff.SoulforgeEmbers, timeShift);
--Conditions
local _is_moving = ConRO:PlayerSpeed();
local _enemies_in_melee, _target_in_melee = ConRO:Targets("Melee");
local _target_in_10yrds = CheckInteractDistance("target", 3);
local _can_execute = _Target_Percent_Health <= 20;
local _Pet_summoned = ConRO:CallPet();
local _Pet_assist = ConRO:PetAssist();
local _Pet_Percent_Health = ConRO:PercentHealth('pet');
if ConRO:FindCurrentSpell(_ShrapnelBomb) then
_ShrapnelBomb_RDY = _WildfireBomb_RDY;
_WildfireBomb = _ShrapnelBomb;
end
if ConRO:FindCurrentSpell(_PheromoneBomb) then
_PheromoneBomb_RDY = _WildfireBomb_RDY;
_WildfireBomb = _PheromoneBomb;
end
if ConRO:FindCurrentSpell(_VolatileBomb) then
_VolatileBomb_RDY = _WildfireBomb_RDY;
_WildfireBomb = _VolatileBomb;
end
if _AspectoftheEagle_BUFF then
_RaptorStrike = ids.Surv_Ability.RaptorStrikeRanged;
_MongooseBite = ids.Surv_Talent.MongooseBiteRanged;
end
--Indicators
ConRO:AbilityInterrupt(_Muzzle, _Muzzle_RDY and ConRO:Interrupt());
ConRO:AbilityPurge(_ArcaneTorrent, _ArcaneTorrent_RDY and _target_in_melee and ConRO:Purgable());
ConRO:AbilityPurge(_TranquilizingShot, _TranquilizingShot_RDY and ConRO:Purgable());
ConRO:AbilityMovement(_Harpoon, _Harpoon_RDY and _Harpoon_RANGE and not _target_in_melee);
ConRO:AbilityMovement(_Soulshape, _Soulshape_RDY and not _target_in_melee);
ConRO:AbilityBurst(_CoordinatedAssault, _CoordinatedAssault_RDY and ConRO:BurstMode(_CoordinatedAssault));
ConRO:AbilityBurst(_AspectoftheEagle, _AspectoftheEagle_RDY and not _target_in_melee);
ConRO:AbilityBurst(_AMurderofCrows, _AMurderofCrows_RDY and ConRO:FullMode(_AMurderofCrows));
ConRO:AbilityBurst(_ResonatingArrow, _ResonatingArrow_RDY and ConRO:BurstMode(_ResonatingArrow));
ConRO:AbilityBurst(_DeathChakram, _DeathChakram_RDY and ConRO:BurstMode(_DeathChakram));
ConRO:AbilityBurst(_WildSpirits, _WildSpirits_RDY and ConRO:BurstMode(_WildSpirits));
ConRO:AbilityBurst(_TarTrap, _TarTrap_RDY and _Flare_RDY and _SoulforgeEmbers_EQUIPPED and not _SoulforgeEmbers_DEBUFF and ConRO:BurstMode(_TarTrap));
ConRO:AbilityBurst(_Flare, _Flare_RDY and _SoulforgeEmbers_EQUIPPED and not _TarTrap_RDY and not _SoulforgeEmbers_DEBUFF);
--Warnings
ConRO:Warnings("Call your pet!", _CallPet_RDY and not _Pet_summoned);
--Rotations
if not _in_combat then
if _TarTrap_RDY and _Flare_RDY and _SoulforgeEmbers_EQUIPPED and not _SoulforgeEmbers_DEBUFF and ConRO:FullMode(_TarTrap) then
return _TarTrap;
end
if _CoordinatedAssault_RDY and ConRO:FullMode(_CoordinatedAssault) then
return _CoordinatedAssault;
end
end
if _TarTrap_RDY and _Flare_RDY and _SoulforgeEmbers_EQUIPPED and not _SoulforgeEmbers_DEBUFF and ConRO:FullMode(_TarTrap) then
return _TarTrap;
end
if _CoordinatedAssault_RDY and ConRO:FullMode(_CoordinatedAssault) then
return _CoordinatedAssault;
end
if _KillShot_RDY and (_can_execute or _FlayersMark_BUFF) then
return _KillShot;
end
if _WildSpirits_RDY and ConRO:FullMode(_WildSpirits) then
return _WildSpirits;
end
if _ResonatingArrow_RDY and ConRO:FullMode(_ResonatingArrow) then
return _ResonatingArrow;
end
if _FlayedShot_RDY then
return _FlayedShot;
end
if _DeathChakram_RDY and _Focus <= 60 and ConRO:FullMode(_DeathChakram) then
return _DeathChakram;
end
if _MongooseBite_RDY and _MongooseFury_DUR >= .5 and _MongooseFury_COUNT >= 1 then
return _MongooseBite;
end
if not tChosen[ids.Surv_Talent.MongooseBite] then
if _RaptorStrike_RDY and _TipoftheSpear_COUNT >= 3 then
return _RaptorStrike;
end
end
if (ConRO_AutoButton:IsVisible() and _enemies_in_melee >= 2) or ConRO_AoEButton:IsVisible() then
if tChosen[ids.Surv_Talent.Butchery] then
if _Butchery_RDY then
return _Butchery;
end
else
if _Carve_RDY then
return _Carve;
end
end
end
if _ShrapnelBomb_RDY and (_Focus >= 50 or _InternalBleeding_COUNT == 3) then
return _ShrapnelBomb;
end
if _NesingwarysTrappingApparatus_EQUIPPED and _Focus < 50 and ConRO.lastSpellId ~= _SteelTrap and ConRO.lastSpellId ~= _TarTrap and ConRO.lastSpellId ~= _FreezingTrap then
if _SteelTrap_RDY then
return _SteelTrap;
end
if _TarTrap_RDY then
return _TarTrap;
end
if _FreezingTrap_RDY then
return _FreezingTrap;
end
end
if _KillCommand_RDY and _Focus <= 80 then
return _KillCommand;
end
if not tChosen[ids.Surv_Talent.MongooseBite] then
if _RaptorStrike_RDY and _ShrapnelBomb_DEBUFF or ConRO:FindCurrentSpell(_PheromoneBomb) then
return _RaptorStrike;
end
end
if _SerpentSting_RDY and not _SerpentSting_DEBUFF and ConRO.lastSpellId ~= _SerpentSting then
return _SerpentSting;
end
if _VolatileBomb_RDY and _SerpentSting_DUR <= 4 then
return _VolatileBomb;
end
if _WildfireBomb_RDY and (_WildfireBomb_CHARGES == 2 or (_WildfireBomb_CHARGES == 1 and _WildfireBomb_CCD <= 1)) then
return _WildfireBomb;
end
if _Chakrams_RDY then
return _Chakrams;
end
if _SteelTrap_RDY then
return _SteelTrap;
end
if _AMurderofCrows_RDY and ConRO:FullMode(_AMurderofCrows) then
return _AMurderofCrows;
end
if _Harpoon_RDY and tChosen[ids.Surv_Talent.TermsofEngagement] then
return _Harpoon;
end
if _FlankingStrike_RDY and _Focus <= 50 then
return _FlankingStrike;
end
if not tChosen[ids.Surv_Talent.WildfireInfusion] then
if _WildfireBomb_RDY then
return _WildfireBomb;
end
end
if tChosen[ids.Surv_Talent.MongooseBite] then
if _MongooseBite_RDY and _Focus >= 60 then
return _MongooseBite;
end
else
if _RaptorStrike_RDY and _Focus >= 60 then
return _RaptorStrike;
end
end
return nil;
end
function ConRO.Hunter.SurvivalDef(_, timeShift, currentSpell, gcd, tChosen, pvpChosen)
--Info
local _Player_Level = UnitLevel("player");
local _Player_Percent_Health = ConRO:PercentHealth('player');
local _is_PvP = ConRO:IsPvP();
local _in_combat = UnitAffectingCombat('player');
local _party_size = GetNumGroupMembers();
local _is_PC = UnitPlayerControlled("target");
local _is_Enemy = ConRO:TarHostile();
local _Target_Health = UnitHealth('target');
local _Target_Percent_Health = ConRO:PercentHealth('target');
--Resources
local _Focus, _Focus_Max = ConRO:PlayerPower('Focus');
local _Heroism_BUFF, _Sated_DEBUFF = ConRO:Heroism();
--Abilities
local _Exhilaration, _Exhilaration_RDY = ConRO:AbilityReady(ids.Surv_Ability.Exhilaration, timeShift);
local _AspectoftheTurtle, _AspectoftheTurtle_RDY = ConRO:AbilityReady(ids.Surv_Ability.AspectoftheTurtle, timeShift);
local _MendPet, _MendPet_RDY = ConRO:AbilityReady(ids.Surv_Ability.MendPet, timeShift);
local _FeedPet, _FeedPet_RDY = ConRO:AbilityReady(ids.Surv_Ability.FeedPet, timeShift);
local _Fleshcraft, _Fleshcraft_RDY = ConRO:AbilityReady(ids.Covenant_Ability.Fleshcraft, timeShift);
local _PhialofSerenity, _PhialofSerenity_RDY = ConRO:ItemReady(ids.Covenant_Ability.PhialofSerenity, timeShift);
--Conditions
local _is_moving = ConRO:PlayerSpeed();
local _enemies_in_melee, _target_in_melee = ConRO:Targets("Melee");
local _target_in_10yrds = CheckInteractDistance("target", 3);
local _Pet_summoned = ConRO:CallPet();
local _Pet_assist = ConRO:PetAssist();
local _Pet_Percent_Health = ConRO:PercentHealth('pet');
--Rotations
if _Fleshcraft_RDY and not _in_combat then
return _Fleshcraft;
end
if _FeedPet_RDY and _Pet_summoned and not _in_combat and _Pet_Percent_Health <= 60 then
return _FeedPet;
end
if _Exhilaration_RDY and (_Player_Percent_Health <= 50 or _Pet_Percent_Health <= 20) then
return _Exhilaration;
end
if _PhialofSerenity_RDY and _Player_Percent_Health <= 80 then
return _PhialofSerenity;
end
if _MendPet_RDY and _Pet_summoned and _Pet_Percent_Health <= 60 then
return _MendPet;
end
if _AspectoftheTurtle_RDY then
return _AspectoftheTurtle;
end
if _Fleshcraft_RDY then
return _Fleshcraft;
end
return nil;
end