vsab
Ultimate seasoned veteran member
- Joined
- Mar 19, 2019
- RedCents
- 1,946¢
Hi- my warrior (level 58) seems to constantly turn Infuriate on and turn it off, then back on again etc. on the Hidden Forest. (tbh haven't spent long enough on other emu's to check). How could I help debug this- I did notice that the text for the Infuriate disc was "unknown DB string" or similar (no copy paste in ROF2
). I couldn't find "Infuriate" anywhere in the class config either. I've put the config here (I have custom config based on the Lazarus ones as THF has renamed some of the spells).
It means he never engages defensive or any other disc. Any ideas would be great.
). I couldn't find "Infuriate" anywhere in the class config either. I've put the config here (I have custom config based on the Lazarus ones as THF has renamed some of the spells).It means he never engages defensive or any other disc. Any ideas would be great.
Lua:
local mq = require('mq')
local Config = require('utils.config')
local Globals = require("utils.globals")
local Core = require("utils.core")
local Targeting = require("utils.targeting")
local Casting = require("utils.casting")
local ItemManager = require("utils.item_manager")
local Logger = require("utils.logger")
local Set = require('mq.set')
local Combat = require("utils.combat")
local _ClassConfig = {
_version = "0.1 - The Hidden Forest",
-- Totally based on Algar,Derple Lazarus config
_author = "vsab",
['ModeChecks'] = {
IsTanking = function() return Core.IsModeActive("Tank") end,
},
['Modes'] = {
'Tank',
'DPS',
},
['Themes'] = {
['Tank'] = {
{ element = ImGuiCol.TitleBgActive, color = { r = 0.22, g = 0.25, b = 0.28, a = 0.8, }, },
{ element = ImGuiCol.TableHeaderBg, color = { r = 0.22, g = 0.25, b = 0.28, a = 0.8, }, },
{ element = ImGuiCol.Tab, color = { r = 0.09, g = 0.10, b = 0.11, a = 0.8, }, },
{ element = ImGuiCol.TabSelected, color = { r = 0.22, g = 0.25, b = 0.28, a = 0.8, }, },
{ element = ImGuiCol.TabHovered, color = { r = 0.22, g = 0.25, b = 0.28, a = 1.0, }, },
{ element = ImGuiCol.Header, color = { r = 0.09, g = 0.10, b = 0.11, a = 0.8, }, },
{ element = ImGuiCol.HeaderActive, color = { r = 0.22, g = 0.25, b = 0.28, a = 0.8, }, },
{ element = ImGuiCol.HeaderHovered, color = { r = 0.22, g = 0.25, b = 0.28, a = 1.0, }, },
{ element = ImGuiCol.FrameBgHovered, color = { r = 0.22, g = 0.25, b = 0.28, a = 0.7, }, },
{ element = ImGuiCol.Button, color = { r = 0.15, g = 0.17, b = 0.19, a = 0.8, }, },
{ element = ImGuiCol.ButtonActive, color = { r = 0.22, g = 0.25, b = 0.28, a = 0.8, }, },
{ element = ImGuiCol.ButtonHovered, color = { r = 0.22, g = 0.25, b = 0.28, a = 1.0, }, },
{ element = ImGuiCol.TextSelectedBg, color = { r = 0.22, g = 0.25, b = 0.28, a = 0.1, }, },
{ element = ImGuiCol.FrameBg, color = { r = 0.09, g = 0.10, b = 0.11, a = 0.8, }, },
{ element = ImGuiCol.SliderGrab, color = { r = 0.55, g = 0.60, b = 0.65, a = 0.8, }, },
{ element = ImGuiCol.SliderGrabActive, color = { r = 0.55, g = 0.60, b = 0.65, a = 0.9, }, },
{ element = ImGuiCol.FrameBgActive, color = { r = 0.22, g = 0.25, b = 0.28, a = 1.0, }, },
},
['DPS'] = {
{ element = ImGuiCol.TitleBgActive, color = { r = 0.35, g = 0.15, b = 0.10, a = 0.8, }, },
{ element = ImGuiCol.TableHeaderBg, color = { r = 0.35, g = 0.15, b = 0.10, a = 0.8, }, },
{ element = ImGuiCol.Tab, color = { r = 0.14, g = 0.06, b = 0.04, a = 0.8, }, },
{ element = ImGuiCol.TabSelected, color = { r = 0.35, g = 0.15, b = 0.10, a = 0.8, }, },
{ element = ImGuiCol.TabHovered, color = { r = 0.35, g = 0.15, b = 0.10, a = 1.0, }, },
{ element = ImGuiCol.Header, color = { r = 0.14, g = 0.06, b = 0.04, a = 0.8, }, },
{ element = ImGuiCol.HeaderActive, color = { r = 0.35, g = 0.15, b = 0.10, a = 0.8, }, },
{ element = ImGuiCol.HeaderHovered, color = { r = 0.35, g = 0.15, b = 0.10, a = 1.0, }, },
{ element = ImGuiCol.FrameBgHovered, color = { r = 0.35, g = 0.15, b = 0.10, a = 0.7, }, },
{ element = ImGuiCol.Button, color = { r = 0.23, g = 0.10, b = 0.07, a = 0.8, }, },
{ element = ImGuiCol.ButtonActive, color = { r = 0.35, g = 0.15, b = 0.10, a = 0.8, }, },
{ element = ImGuiCol.ButtonHovered, color = { r = 0.35, g = 0.15, b = 0.10, a = 1.0, }, },
{ element = ImGuiCol.TextSelectedBg, color = { r = 0.35, g = 0.15, b = 0.10, a = 0.1, }, },
{ element = ImGuiCol.FrameBg, color = { r = 0.14, g = 0.06, b = 0.04, a = 0.8, }, },
{ element = ImGuiCol.SliderGrab, color = { r = 0.80, g = 0.20, b = 0.15, a = 0.8, }, },
{ element = ImGuiCol.SliderGrabActive, color = { r = 0.80, g = 0.20, b = 0.15, a = 0.9, }, },
{ element = ImGuiCol.FrameBgActive, color = { r = 0.35, g = 0.15, b = 0.10, a = 1.0, }, },
},
},
['ItemSets'] = {
['Epic'] = {
"Kreljnok's Sword of Eternal Power",
"Champion's Sword of Eternal Power",
},
['OoW_Chest'] = {
"Armsmaster's Breastplate",
"Gladiator's Plate Chestguard of War",
},
['Coating'] = {
"Blood Drinker's Coating",
},
},
['AbilitySets'] = {
['StandDisc'] = { -- Timer 2
"Stonewall Discipline", -- Level 65, no lost movement on laz, more mitigation than defensive
"Defensive Discipline", -- Level 55
"Evasive Discipline", -- Level 52
},
['Fortitude'] = { -- Timer 3
"Fortitude Discipline", -- Level 59
"Furious Discipline", -- Level 56
},
['GroupACBuff'] = { -- Has Commanding Voice (Dodge Buff) baked in
"Field Armorer", -- Level 65
},
['AEBlades'] = {
"Vortex Blade", -- Level 69
"Cyclone Blade", -- Level 65
"Whirlwind Blade", -- Level 61
},
['AddHate'] = {
"Ancient: Chaos Cry", -- Level 65
"Bellow of the Mastruq", -- Level 65
"Incite", -- Level 63
"Berate", -- Level 56
"Bellow", -- Level 52
"Provoke", -- Level 20
},
['AbsorbTaunt'] = {
"Mock", -- Level 65
},
['Attention'] = {
"Unyielding Attention", -- Level 71
"Undivided Attention", -- Level 65
},
['Onslaught'] = {
"Brutal Onslaught Discipline", -- Level 68
"Savage Onslaught Discipline", -- Level 65
},
['StrikeDisc'] = {
"Fellstrike Discipline", -- Level 58
"Mighty Strike Discipline", -- Level 54
},
['Throat'] = {
"Throat Jab", -- Level 69
},
['ShockDisc'] = { -- Timer 7, defensive stun proc
"Shocking Defense Discipline", -- Level 70
},
},
['AASets'] = {
['AreaTaunt'] = {
"Enhanced Area Taunt",
"Area Taunt",
},
},
['Helpers'] = {
--function to make sure we don't have non-hostiles in range before we use AE damage or non-taunt AE hate abilities
--function to determine if we have enough mobs in range to use a defensive disc
DefensiveDiscCheck = function(printDebug)
local xtCount = mq.TLO.Me.XTarget() or 0
if xtCount < Config:GetSetting('DiscCount') then return false end
local haters = Set.new({})
for i = 1, xtCount do
local xtarg = mq.TLO.Me.XTarget(i)
if xtarg and xtarg.ID() > 0 and ((xtarg.Aggressive() or xtarg.TargetType():lower() == "auto hater")) and (xtarg.Distance() or 999) <= 30 then
if printDebug then
Logger.log_verbose("DefensiveDiscCheck(): XT(%d) Counting %s(%d) as a hater in range.", i, xtarg.CleanName() or "None", xtarg.ID())
end
haters:add(xtarg.ID())
end
if #haters:toList() >= Config:GetSetting('DiscCount') then return true end -- no need to keep counting once this threshold has been reached
end
return false
end,
BurnDiscCheck = function(self)
if mq.TLO.Me.ActiveDisc.Name() == "Fortitude Discipline" or mq.TLO.Me.PctHPs() < Config:GetSetting('EmergencyStart') then return false end
local burnDisc = { "Onslaught", "StrikeDisc", "ChargeDisc", }
for _, buffName in ipairs(burnDisc) do
local resolvedDisc = self:GetResolvedActionMapItem(buffName)
if resolvedDisc and resolvedDisc.RankName() == mq.TLO.Me.ActiveDisc.Name() then return false end
end
return true
end,
DefenseBuffCheck = function(self)
local standDisc = Core.GetResolvedActionMapItem('StandDisc')
if not standDisc then return false end
if standDisc() and mq.TLO.Me.ActiveDisc.Name() == standDisc.RankName() then return false end
local defBuff = { "Guardian's Boon", "Guardian's Bravery", "Warlord's Bravery", }
for _, buffName in ipairs(defBuff) do
if mq.TLO.Me.Buff(buffName)() then return false end
end
return true
end,
},
['RotationOrder'] = {
{ --Self Buffs
name = 'Downtime',
targetId = function(self) return { mq.TLO.Me.ID(), } end,
cond = function(self, combat_state)
return combat_state == "Downtime" and Casting.OkayToBuff() and Casting.AmIBuffable()
end,
},
{ --Actions to lock down xtarg haters
name = 'HateTools(AggroTarget)',
state = 1,
steps = 1,
doFullRotation = true,
load_cond = function() return Core.IsTanking() and Config:GetSetting('TankAggroScan') end,
targetId = function(self) return Targeting.CheckForAggroTargetID() end,
cond = function(self, combat_state)
if mq.TLO.Me.PctHPs() <= Config:GetSetting('HPCritical') then return false end
return combat_state == "Combat"
end,
},
{ --Actions that establish or maintain hatred
name = 'HateTools(AutoTarget)',
state = 1,
steps = 1,
doFullRotation = true,
load_cond = function() return Core.IsTanking() end,
targetId = function(self) return Targeting.CheckForAutoTargetID() end,
cond = function(self, combat_state)
if mq.TLO.Me.PctHPs() <= Config:GetSetting('HPCritical') then return false end
return combat_state == "Combat" and Targeting.HateToolsNeeded()
end,
},
{ --Actions that establish or maintain hatred
name = 'AEHateTools',
state = 1,
steps = 1,
timer = 1, -- Don't check this more often than once a second to avoid blowing every ability at once (aggro takes time to update)
doFullRotation = true,
load_cond = function()
return Core.IsTanking() and Config:GetSetting('DoAETaunt') and
(Casting.CanUseAA("Area Taunt") or Core.GetResolvedActionMapItem("Epic") or Core.GetResolvedActionMapItem("AEBlades"))
end,
targetId = function(self) return Targeting.CheckForAutoTargetID() end,
cond = function(self, combat_state)
if mq.TLO.Me.PctHPs() <= Config:GetSetting('HPCritical') then return false end
return combat_state == "Combat" and Combat.AETauntCheck(true)
end,
},
{ --Dynamic weapon swapping if UseBandolier is toggled
name = 'Weapon Management',
state = 1,
steps = 1,
load_cond = function() return Config:GetSetting('UseBandolier') end,
targetId = function(self) return Targeting.CheckForAutoTargetID() end,
cond = function(self, combat_state)
return combat_state == "Combat"
end,
},
{ --Defensive actions triggered by low HP
name = 'EmergencyDefenses',
state = 1,
steps = 1,
doFullRotation = true,
targetId = function(self) return Targeting.CheckForAutoTargetID() end,
cond = function(self, combat_state)
return combat_state == "Combat" and mq.TLO.Me.PctHPs() <= Config:GetSetting('EmergencyStart')
end,
},
{ --Defensive actions used proactively to prevent emergencies
name = 'Defenses',
state = 1,
steps = 1,
targetId = function(self) return Targeting.CheckForAutoTargetID() end,
cond = function(self, combat_state)
return combat_state == "Combat" and Targeting.IHaveAggro(100) and
-- we are under our defense start HP
(mq.TLO.Me.PctHPs() <= Config:GetSetting('DefenseStart') or
-- we have met our defense count threshold
self.Helpers.DefensiveDiscCheck(true) or
-- we are fighting a named and we are (presumably) tanking it
(Globals.AutoTargetIsNamed and Targeting.GetAutoTargetAggroPct() >= 100))
end,
},
{ --Offensive actions to temporarily boost damage dealt
name = 'Burn',
state = 1,
steps = 4,
targetId = function(self) return Targeting.CheckForAutoTargetID() end,
cond = function(self, combat_state)
if mq.TLO.Me.PctHPs() <= Config:GetSetting('EmergencyStart') then return false end
return combat_state == "Combat" and Casting.BurnCheck()
end,
},
{ --Non-threat combat actions
name = 'Combat',
state = 1,
steps = 1,
targetId = function(self) return Targeting.CheckForAutoTargetID() end,
cond = function(self, combat_state)
if mq.TLO.Me.PctHPs() <= Config:GetSetting('EmergencyStart') then return false end
return combat_state == "Combat"
end,
},
},
['Rotations'] = {
['Downtime'] = {
{
name = "GroupACBuff",
type = "Disc",
active_cond = function(self, discSpell)
return Casting.IHaveBuff(discSpell)
end,
cond = function(self, discSpell)
return Casting.SelfBuffCheck(discSpell)
end,
},
{
name = "Infused by Rage",
type = "AA",
cond = function(self, aaName)
return Core.IsTanking() and Casting.SelfBuffAACheck(aaName)
end,
},
},
['HateTools(AggroTarget)'] = {
{ --more valuable on laz because we have less hate tools and no other hatelist + 1 abilities
name = "Taunt",
type = "Ability",
cond = function(self, abilityName, target)
return Targeting.GetTargetDistance(target) < 30
end,
},
{
name = "Attention",
type = "Disc",
},
{
name = "Blast of Anger",
type = "AA",
},
{
name = "AddHate",
type = "Disc",
cond = function(self, discSpell)
return Casting.DetSpellCheck(discSpell)
end,
},
},
['HateTools(AutoTarget)'] = {
{ --more valuable on laz because we have less hate tools and no other hatelist + 1 abilities
name = "Taunt",
type = "Ability",
cond = function(self, abilityName, target)
return Targeting.LostAutoTargetAggro() and Targeting.GetTargetDistance(target) < 30
end,
},
{ --8min reuse, save for we still can't get a mob back after trying to taunt, try not to use it on the pull
name = "Ageless Enmity",
type = "AA",
cond = function(self, aaName, target)
return (Globals.AutoTargetIsNamed or Targeting.GetAutoTargetPctHPs() < 90) and Targeting.LostAutoTargetAggro()
end,
},
{ --used to jumpstart hatred on named from the outset and prevent early rips from burns
name = "Attention",
type = "Disc",
cond = function(self, discSpell, target)
return Globals.AutoTargetIsNamed
end,
},
{
name = "Blast of Anger",
type = "AA",
},
{
name = "AddHate",
type = "Disc",
cond = function(self, discSpell)
return Casting.DetSpellCheck(discSpell)
end,
},
{
name = "Projection of Fury",
type = "AA",
cond = function(self, aaName, target)
return Globals.AutoTargetIsNamed
end,
},
},
['AEHateTools'] = {
{
name = "Epic",
type = "Item",
cond = function(self, itemName)
if not Config:GetSetting('DoEpic') then return false end
return Config:GetSetting('DoAEDamage')
end,
},
{
name = "AEBlades",
type = "Disc",
cond = function(self, discSpell)
return Config:GetSetting('DoAEDamage')
end,
},
{
name = "AreaTaunt",
type = "AA",
},
},
['EmergencyDefenses'] = {
--Note that in Tank Mode, defensive discs are preemptively cycled on named in the (non-emergency) Defenses rotation
--Abilities should be placed in order of lowest to highest triggered HP thresholds
{
name = "Armor of Experience",
type = "AA",
load_cond = function(self) return Config:GetSetting('DoVetAA') end,
cond = function(self)
return mq.TLO.Me.PctHPs() <= Config:GetSetting('HPCritical')
end,
},
{
name = "Fortitude",
type = "Disc",
cond = function(self, discSpell)
return Casting.NoDiscActive()
end,
},
{
name = "Warlord's Tenacity",
type = "AA",
},
{
name = "Warlord's Resurgence",
type = "AA",
},
{
name = "Mark of the Mage Hunter",
type = "AA",
},
{ --here for use in emergencies regarldless of ability staggering below
name = "StandDisc",
type = "Disc",
cond = function(self, discSpell)
return Core.IsTanking() and Casting.NoDiscActive()
end,
},
},
['Weapon Management'] = {
{
name = "Equip Shield",
type = "CustomFunc",
active_cond = function(self, target)
return mq.TLO.Me.Bandolier("Shield").Active()
end,
cond = function()
if mq.TLO.Me.Bandolier("Shield").Active() then return false end
return (mq.TLO.Me.PctHPs() <= Config:GetSetting('EquipShield')) or (Globals.AutoTargetIsNamed and Config:GetSetting('NamedShieldLock'))
end,
custom_func = function(self) return ItemManager.BandolierSwap("Shield") end,
},
{
name = "Equip DW",
type = "CustomFunc",
active_cond = function(self, target)
return mq.TLO.Me.Bandolier("DW").Active()
end,
cond = function()
if mq.TLO.Me.Bandolier("DW").Active() then return false end
return mq.TLO.Me.PctHPs() >= Config:GetSetting('EquipDW') and not (Globals.AutoTargetIsNamed and Config:GetSetting('NamedShieldLock'))
end,
custom_func = function(self) return ItemManager.BandolierSwap("DW") end,
},
},
['Defenses'] = {
{ --shares effect with OoW Chest and Warlord's Bravery
name = "StandDisc",
type = "Disc",
cond = function(self, discSpell)
return self.Helpers.DefenseBuffCheck(self)
end,
},
{ --shares effect with StandDisc and Warlord's Bravery
name = "OoW_Chest",
type = "Item",
cond = function(self, itemName)
return self.Helpers.DefenseBuffCheck(self)
end,
},
{ --shares effect with StandDisc and OoW_Chest
name = "Warlord's Bravery",
type = "AA",
cond = function(self, aaName)
return self.Helpers.DefenseBuffCheck(self)
end,
},
{
name = "Hold the Line",
type = "AA",
cond = function(self, aaName)
return Casting.SelfBuffAACheck(aaName)
end,
},
{
name = "Coating",
type = "Item",
cond = function(self, itemName, target)
if not Config:GetSetting('DoCoating') then return false end
return Casting.SelfBuffItemCheck(itemName)
end,
},
},
['Burn'] = {
{
name_func = function(self)
return string.format("Fundament: %s Spire of the Warlord", Core.IsTanking() and "Third" or "Second")
end,
type = "AA",
},
{
name = "Onslaught",
type = "Disc",
cond = function(self, discSpell)
return not Core.IsTanking() and self.Helpers.BurnDiscCheck(self)
end,
},
{
name = "StrikeDisc",
type = "Disc",
cond = function(self, discSpell)
return not Core.IsTanking() and self.Helpers.BurnDiscCheck(self)
end,
},
{
name = "Vehement Rage",
type = "AA",
cond = function(self, aaName)
return not Core.IsTanking()
end,
},
{
name = "Rage of Rallos Zek",
type = "AA",
},
{
name = "Warlord's Fury",
type = "AA",
cond = function(self, aaName, target)
return Core.IsTanking() and Casting.SelfBuffAACheck(aaName)
end,
},
{
name = "Battered Smuggler's Barrel",
type = "Item",
},
{
name = "Resplendent Glory",
type = "AA",
cond = function(self, aaName)
return Core.IsTanking()
end,
},
{
name = "Intensity of the Resolute",
type = "AA",
load_cond = function(self) return Config:GetSetting('DoVetAA') end,
},
},
['Combat'] = {
{
name = "Battle Leap",
type = "AA",
cond = function(self, aaName, target)
if not Config:GetSetting('DoBattleLeap') then return false end
return not Casting.IHaveBuff(aaName) and not Casting.IHaveBuff('Group Bestial Alignment')
and not mq.TLO.Me.HeadWet() --Stops Leap from launching us above the water's surface
end,
},
{
name = "AbsorbTaunt",
type = "Disc",
cond = function(self, discSpell, target)
return Core.IsTanking()
end,
},
{
name = "Gut Punch",
type = "AA",
cond = function(self, aaName, target)
return Core.IsTanking()
end,
},
{
name = "Knee Strike",
type = "AA",
},
{
name = "Throat",
type = "Disc",
},
{
name = "Rampage",
type = "AA",
cond = function(self, aaName, target)
if not Config:GetSetting("DoAEDamage") or Config:GetSetting('UseRampage') == 1 then return false end
return (Config:GetSetting('UseRampage') == 3 or (Config:GetSetting('UseRampage') == 2 and Casting.BurnCheck())) and Combat.AETargetCheck(true)
end,
},
{
name = "Call of Challenge",
type = "AA",
cond = function(self, aaName, target)
if not Config:GetSetting('DoSnare') then return false end
return Casting.DetAACheck(aaName) and not Casting.SnareImmuneTarget(target)
end,
},
{
name = "Press the Attack",
type = "AA",
cond = function(self, aaName, target)
if not Config:GetSetting("DoPress") then return false end
return Core.IsTanking()
end,
},
{
name = "Bash",
type = "Ability",
cond = function(self, abilityName, target)
return Core.ShieldEquipped()
end,
},
{
name = "Slam",
type = "Ability",
load_cond = function(self) return mq.TLO.Me.Ability("Slam")() end,
},
{
name = "Kick",
type = "Ability",
},
},
},
['DefaultConfig'] = {
['Mode'] = {
DisplayName = "Mode",
Category = "Combat",
Tooltip = "Select the Combat Mode for this Toon",
Type = "Custom",
RequiresLoadoutChange = true,
Default = 1,
Min = 1,
Max = 2,
FAQ = "What do the different Modes Do?",
Answer = "Tank Mode is for when you are the main tank. DPS Mode is for when you are not the main tank and want to focus on damage.",
},
--Abilities
['DoBattleLeap'] = {
DisplayName = "Do Battle Leap",
Group = "Abilities",
Header = "Damage",
Category = "Direct",
Tooltip = "Do Battle Leap",
Default = true,
},
['DoPress'] = {
DisplayName = "Do Press the Attack",
Group = "Abilities",
Header = "Debuffs",
Category = "Stun",
Tooltip = "Use the Press to Attack stun/push AA.",
Default = false,
},
['DoSnare'] = {
DisplayName = "Use Snares",
Group = "Abilities",
Header = "Debuffs",
Category = "Snare",
Tooltip = "Use Call of Challenge to snare enemies.",
Default = true,
},
['DoVetAA'] = {
DisplayName = "Use Vet AA",
Group = "Abilities",
Header = "Buffs",
Category = "Self",
Index = 104,
Tooltip = "Use Veteran AA such as Intensity of the Resolute or Armor of Experience as necessary.",
Default = true,
ConfigType = "Advanced",
RequiresLoadoutChange = true,
},
-- AE Damage
['UseRampage'] = {
DisplayName = "Rampage Use:",
Group = "Abilities",
Header = "Damage",
Category = "AE",
Index = 105,
Tooltip = "Use Rampage 1-Never 2-Burns 3-Always",
Type = "Combo",
ComboOptions = { 'Never', 'Burns Only', 'All Combat', },
Default = 3,
Min = 1,
Max = 3,
ConfigType = "Advanced",
},
--Hate Tools
['DoAETaunt'] = {
DisplayName = "Do AE Taunts",
Group = "Abilities",
Header = "Tanking",
Category = "Hate Tools",
Index = 101,
Tooltip = "Use AE hatred Discs and AA (see FAQ for specifics).",
Default = false,
},
--Defenses
['DiscCount'] = {
DisplayName = "Def. Disc. Count",
Group = "Abilities",
Header = "Tanking",
Category = "Defenses",
Index = 101,
Tooltip = "Number of mobs around you before you use preemptively use Defensive Discs.",
Default = 4,
Min = 1,
Max = 10,
ConfigType = "Advanced",
},
['DefenseStart'] = {
DisplayName = "Defense HP",
Group = "Abilities",
Header = "Tanking",
Category = "Defenses",
Index = 102,
Tooltip = "The HP % where we will use defensive actions like discs, epics, etc.\nNote that fighting a named will also trigger these actions.",
Default = 60,
Min = 1,
Max = 100,
ConfigType = "Advanced",
},
['EmergencyStart'] = {
DisplayName = "Emergency Start",
Group = "Abilities",
Header = "Tanking",
Category = "Defenses",
Index = 103,
Tooltip = "The HP % before all but essential rotations are cut in favor of emergency or defensive abilities.",
Default = 40,
Min = 1,
Max = 100,
ConfigType = "Advanced",
},
['HPCritical'] = {
DisplayName = "HP Critical",
Group = "Abilities",
Header = "Tanking",
Category = "Defenses",
Index = 104,
Tooltip =
"The HP % that most other rotations are cut to give our full focus to survival.",
Default = 20,
Min = 1,
Max = 100,
ConfigType = "Advanced",
},
--Equipment
['DoEpic'] = {
DisplayName = "Do Epic",
Group = "Items",
Header = "Clickies",
Category = "Class Config Clickies",
Index = 101,
Tooltip = "Click your Epic Weapon when AE Threat is needed. Also relies on Do AE Damage setting.",
Default = false,
},
['DoCoating'] = {
DisplayName = "Use Coating",
Group = "Items",
Header = "Clickies",
Category = "Class Config Clickies",
Index = 102,
Tooltip = "Click your Blood Drinker's Coating when defenses are triggered.",
Default = false,
},
['UseBandolier'] = {
DisplayName = "Dynamic Weapon Swap",
Group = "Items",
Header = "Bandolier",
Category = "Bandolier",
Index = 101,
Tooltip = "Enable 1H+S/2H swapping based off of current health. ***YOU MUST HAVE BANDOLIER ENTRIES NAMED \"Shield\" and \"DW\" TO USE THIS FUNCTION.***",
RequiresLoadoutChange = true,
Default = false,
},
['EquipShield'] = {
DisplayName = "Equip Shield",
Group = "Items",
Header = "Bandolier",
Category = "Bandolier",
Index = 102,
Tooltip = "Under this HP%, you will swap to your \"Shield\" bandolier entry. (Dynamic Bandolier Enabled Only)",
Default = 50,
Min = 1,
Max = 100,
},
['EquipDW'] = {
DisplayName = "Equip DW",
Group = "Items",
Header = "Bandolier",
Category = "Bandolier",
Index = 103,
Tooltip = "Over this HP%, you will swap to your \"DW\" bandolier entry. (Dynamic Bandolier Enabled Only)",
Default = 75,
Min = 1,
Max = 100,
},
['NamedShieldLock'] = {
DisplayName = "Shield on Named",
Group = "Items",
Header = "Bandolier",
Category = "Bandolier",
Index = 104,
Tooltip = "Keep Shield equipped for mobs detected as 'named' by RGMercs (see Named tab).",
Default = true,
FAQ = "Why does my WAR switch to a Shield on puny gray named?",
Answer = "The Shield on Named option doesn't check levels, so feel free to disable this setting (or Bandolier swapping entirely) if you are farming fodder.",
},
},
['ClassFAQ'] = {
{
Question = "What is the current status of this class config?",
Answer = "This class config is a beta release customized specifically for The Hidden Forest server, based off Algar and Derple's Lazarus config.",
Settings_Used = "",
},
},
}
return _ClassConfig

