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
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
|