951 lines
29 KiB
Lua
951 lines
29 KiB
Lua
local L = AceLibrary("AceLocale-2.2"):new("NampowerSettings")
|
|
|
|
-- No Nampower v2, no need for settings
|
|
if not GetNampowerVersion then
|
|
DEFAULT_CHAT_FRAME:AddMessage(L["|cffffcc00Nampower v2|cffffaaaa not present hiding settings."])
|
|
return
|
|
end
|
|
|
|
Nampower = AceLibrary("AceAddon-2.0"):new("AceEvent-2.0", "AceDebug-2.0", "AceModuleCore-2.0", "AceConsole-2.0", "AceDB-2.0", "AceHook-2.1")
|
|
Nampower:RegisterDB("NampowerSettingsDB")
|
|
Nampower:RegisterDefaults("profile", {
|
|
per_character_settings = false,
|
|
show_queued_spell = false,
|
|
queued_spell_posx = 0,
|
|
queued_spell_posy = 0,
|
|
queued_spell_size = 16,
|
|
queued_spell_enable_mouse = true,
|
|
})
|
|
Nampower.frame = CreateFrame("Frame", "Nampower", UIParent)
|
|
|
|
function Nampower:HasMinimumVersion(major, minor, patch)
|
|
if GetNampowerVersion then
|
|
local installedMajor, installedMinor, installedPatch = GetNampowerVersion()
|
|
|
|
if installedMajor > major then
|
|
return true
|
|
elseif installedMajor == major and installedMinor > minor then
|
|
return true
|
|
elseif installedMajor == major and installedMinor == minor and installedPatch >= patch then
|
|
return true
|
|
end
|
|
end
|
|
|
|
return false
|
|
end
|
|
|
|
-- check if they have the latest nampower dll
|
|
if not Nampower:HasMinimumVersion(2, 20, 0) then
|
|
DEFAULT_CHAT_FRAME:AddMessage(L["update available"])
|
|
end
|
|
|
|
-- setup queued spell frame
|
|
Nampower.queued_spell = CreateFrame("Frame", "Queued Spell", UIParent)
|
|
Nampower.queued_spell:SetFrameStrata("HIGH")
|
|
Nampower.queued_spell.texture = Nampower.queued_spell:CreateTexture(nil, "OVERLAY")
|
|
Nampower.queued_spell.texture:SetAllPoints()
|
|
Nampower.queued_spell.texture:SetTexCoord(.08, .92, .08, .92)
|
|
Nampower.queued_spell.texture:SetTexture("Interface\\Icons\\Spell_Nature_HealingWaveLesser") -- set test texture
|
|
|
|
-- setup dragging
|
|
Nampower.queued_spell:RegisterForDrag("LeftButton")
|
|
Nampower.queued_spell:SetMovable(true)
|
|
|
|
Nampower.queued_spell:SetScript("OnDragStart", function()
|
|
this:StartMoving()
|
|
end)
|
|
|
|
local function saveQueuedSpellPosition()
|
|
Nampower.db.profile.queued_spell_posx = Nampower.queued_spell:GetLeft()
|
|
Nampower.db.profile.queued_spell_posy = Nampower.queued_spell:GetTop()
|
|
end
|
|
|
|
Nampower.queued_spell:SetScript("OnDragStop", function()
|
|
this:StopMovingOrSizing()
|
|
saveQueuedSpellPosition()
|
|
end)
|
|
|
|
local ON_SWING_QUEUED = 0
|
|
local ON_SWING_QUEUE_POPPED = 1
|
|
local NORMAL_QUEUED = 2
|
|
local NORMAL_QUEUE_POPPED = 3
|
|
local NON_GCD_QUEUED = 4
|
|
local NON_GCD_QUEUE_POPPED = 5
|
|
|
|
local function spellQueueEvent(eventCode, spellId)
|
|
if eventCode == NORMAL_QUEUED or eventCode == NON_GCD_QUEUED then
|
|
local _, _, texture = SpellInfo(spellId) -- superwow function
|
|
Nampower.queued_spell.texture:SetTexture(texture)
|
|
Nampower.queued_spell:Show()
|
|
elseif eventCode == NORMAL_QUEUE_POPPED or eventCode == NON_GCD_QUEUE_POPPED then
|
|
Nampower.queued_spell:Hide()
|
|
end
|
|
end
|
|
|
|
local function toggleEventListener()
|
|
if Nampower.db.profile.show_queued_spell then
|
|
if SpellInfo then
|
|
Nampower:RegisterEvent("SPELL_QUEUE_EVENT", spellQueueEvent)
|
|
else
|
|
DEFAULT_CHAT_FRAME:AddMessage(L["Superwow required to display queued spells."])
|
|
if Nampower:IsEventRegistered("SPELL_QUEUE_EVENT") then
|
|
Nampower:UnregisterEvent("SPELL_QUEUE_EVENT")
|
|
end
|
|
end
|
|
else
|
|
if Nampower:IsEventRegistered("SPELL_QUEUE_EVENT") then
|
|
Nampower:UnregisterEvent("SPELL_QUEUE_EVENT")
|
|
end
|
|
end
|
|
end
|
|
|
|
-- used when turning on per character settings
|
|
function Nampower:SavePerCharacterSettings()
|
|
for settingKey, settingData in pairs(Nampower.cmdtable.args) do
|
|
if string.find(settingKey, "NP_") == 1 then
|
|
settingData.set(settingData.get()) -- trigger the set function for each setting with the current value
|
|
end
|
|
end
|
|
|
|
for settingKey, settingData in pairs(Nampower.cmdtable.args.queue_windows.args) do
|
|
if string.find(settingKey, "NP_") == 1 then
|
|
settingData.set(settingData.get()) -- trigger the set function for each setting with the current value
|
|
end
|
|
end
|
|
|
|
for settingKey, settingData in pairs(Nampower.cmdtable.args.advanced_options.args) do
|
|
if string.find(settingKey, "NP_") == 1 then
|
|
settingData.set(settingData.get()) -- trigger the set function for each setting with the current value
|
|
end
|
|
end
|
|
|
|
for settingKey, settingData in pairs(Nampower.cmdtable.args.qol_options.args) do
|
|
if string.find(settingKey, "NP_") == 1 then
|
|
settingData.set(settingData.get()) -- trigger the set function for each setting with the current value
|
|
end
|
|
end
|
|
end
|
|
|
|
function Nampower:ApplySavedSettings()
|
|
for settingKey, settingData in pairs(Nampower.cmdtable.args) do
|
|
-- only apply settings that are prefixed with NP_
|
|
if string.find(settingKey, "NP_") == 1 then
|
|
if Nampower.db.profile[settingKey]~= nil then
|
|
settingData.set(Nampower.db.profile[settingKey])
|
|
end
|
|
end
|
|
end
|
|
|
|
for settingKey, settingData in pairs(Nampower.cmdtable.args.queue_windows.args) do
|
|
-- only apply settings that are prefixed with NP_
|
|
if string.find(settingKey, "NP_") == 1 then
|
|
if Nampower.db.profile[settingKey]~= nil then
|
|
settingData.set(Nampower.db.profile[settingKey])
|
|
end
|
|
end
|
|
end
|
|
|
|
for settingKey, settingData in pairs(Nampower.cmdtable.args.advanced_options.args) do
|
|
-- only apply settings that are prefixed with NP_
|
|
if string.find(settingKey, "NP_") == 1 then
|
|
if Nampower.db.profile[settingKey]~= nil then
|
|
settingData.set(Nampower.db.profile[settingKey])
|
|
end
|
|
end
|
|
end
|
|
|
|
for settingKey, settingData in pairs(Nampower.cmdtable.args.qol_options.args) do
|
|
-- only apply settings that are prefixed with NP_
|
|
if string.find(settingKey, "NP_") == 1 then
|
|
if Nampower.db.profile[settingKey]~= nil then
|
|
settingData.set(Nampower.db.profile[settingKey])
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
function Nampower:OnEnable()
|
|
Nampower.queued_spell:EnableMouse(Nampower.db.profile.queued_spell_enable_mouse)
|
|
|
|
-- set scale
|
|
local x = Nampower.db.profile.queued_spell_posx
|
|
local y = Nampower.db.profile.queued_spell_posy
|
|
local size = Nampower.db.profile.queued_spell_size
|
|
|
|
-- set saved position
|
|
Nampower.queued_spell:ClearAllPoints()
|
|
Nampower.queued_spell:SetPoint("TOPLEFT", UIParent, "BOTTOMLEFT", x, y)
|
|
Nampower.queued_spell:SetWidth(size)
|
|
Nampower.queued_spell:SetHeight(size)
|
|
Nampower.queued_spell:Hide()
|
|
|
|
-- if per character settings are enabled, apply them
|
|
if Nampower.db.profile.per_character_settings then
|
|
Nampower:ApplySavedSettings()
|
|
end
|
|
|
|
toggleEventListener()
|
|
end
|
|
|
|
Nampower.cmdtable = {
|
|
type = "group",
|
|
handler = Nampower,
|
|
args = {
|
|
per_character_settings = {
|
|
type = "toggle",
|
|
name = L["Enable Per Character Settings"],
|
|
desc = L["Whether to use per character settings for all of the NP_ settings. This will cause settings saved in your character's NampowerSettings.lua to override any global settings in Config.wtf."],
|
|
order = 1,
|
|
get = function()
|
|
return Nampower.db.profile.per_character_settings
|
|
end,
|
|
set = function(v)
|
|
if v ~= Nampower.db.profile.per_character_settings then
|
|
Nampower.db.profile.per_character_settings = v
|
|
if v == true then
|
|
Nampower:SavePerCharacterSettings()
|
|
end
|
|
end
|
|
end,
|
|
},
|
|
NP_QueueCastTimeSpells = {
|
|
type = "toggle",
|
|
name = L["Queue Cast Time Spells"],
|
|
desc = L["Whether to enable spell queuing for spells with a cast time"],
|
|
order = 5,
|
|
get = function()
|
|
return GetCVar("NP_QueueCastTimeSpells") == "1"
|
|
end,
|
|
set = function(v)
|
|
Nampower.db.profile.NP_QueueCastTimeSpells = v
|
|
if v == true then
|
|
SetCVar("NP_QueueCastTimeSpells", "1")
|
|
else
|
|
SetCVar("NP_QueueCastTimeSpells", "0")
|
|
end
|
|
end,
|
|
},
|
|
NP_QueueInstantSpells = {
|
|
type = "toggle",
|
|
name = L["Queue Instant Spells"],
|
|
desc = L["Whether to enable spell queuing for instant cast spells tied to gcd"],
|
|
order = 10,
|
|
get = function()
|
|
return GetCVar("NP_QueueInstantSpells") == "1"
|
|
end,
|
|
set = function(v)
|
|
Nampower.db.profile.NP_QueueInstantSpells = v
|
|
if v == true then
|
|
SetCVar("NP_QueueInstantSpells", "1")
|
|
else
|
|
SetCVar("NP_QueueInstantSpells", "0")
|
|
end
|
|
end,
|
|
},
|
|
NP_QueueOnSwingSpells = {
|
|
type = "toggle",
|
|
name = L["Queue On Swing Spells"],
|
|
desc = L["Whether to enable on swing spell queuing"],
|
|
order = 15,
|
|
get = function()
|
|
return GetCVar("NP_QueueOnSwingSpells") == "1"
|
|
end,
|
|
set = function(v)
|
|
Nampower.db.profile.NP_QueueOnSwingSpells = v
|
|
if v == true then
|
|
SetCVar("NP_QueueOnSwingSpells", "1")
|
|
else
|
|
SetCVar("NP_QueueOnSwingSpells", "0")
|
|
end
|
|
end,
|
|
},
|
|
NP_QueueChannelingSpells = {
|
|
type = "toggle",
|
|
name = L["Queue Channeling Spells"],
|
|
desc = L["Whether to enable channeling spell queuing"],
|
|
order = 20,
|
|
get = function()
|
|
return GetCVar("NP_QueueChannelingSpells") == "1"
|
|
end,
|
|
set = function(v)
|
|
Nampower.db.profile.NP_QueueChannelingSpells = v
|
|
if v == true then
|
|
SetCVar("NP_QueueChannelingSpells", "1")
|
|
else
|
|
SetCVar("NP_QueueChannelingSpells", "0")
|
|
end
|
|
end,
|
|
},
|
|
NP_QueueTargetingSpells = {
|
|
type = "toggle",
|
|
name = L["Queue Targeting Spells"],
|
|
desc = L["Whether to enable terrain targeting spell queuing"],
|
|
order = 25,
|
|
get = function()
|
|
return GetCVar("NP_QueueTargetingSpells") == "1"
|
|
end,
|
|
set = function(v)
|
|
Nampower.db.profile.NP_QueueTargetingSpells = v
|
|
if v == true then
|
|
SetCVar("NP_QueueTargetingSpells", "1")
|
|
else
|
|
SetCVar("NP_QueueTargetingSpells", "0")
|
|
end
|
|
end,
|
|
},
|
|
NP_QueueSpellsOnCooldown = {
|
|
type = "toggle",
|
|
name = L["Queue Spells Coming Off Cooldown"],
|
|
desc = L["Whether to enable spell queuing for spells coming off cooldown"],
|
|
order = 30,
|
|
get = function()
|
|
return GetCVar("NP_QueueSpellsOnCooldown") == "1"
|
|
end,
|
|
set = function(v)
|
|
Nampower.db.profile.NP_QueueSpellsOnCooldown = v
|
|
if v == true then
|
|
SetCVar("NP_QueueSpellsOnCooldown", "1")
|
|
else
|
|
SetCVar("NP_QueueSpellsOnCooldown", "0")
|
|
end
|
|
end,
|
|
},
|
|
spacera = {
|
|
type = "header",
|
|
name = " ",
|
|
order = 31,
|
|
},
|
|
queue_windows = {
|
|
type = "group",
|
|
name = L["Queue Windows"],
|
|
desc = L["How much time in ms you have before a cast ends to queue different types of spells"],
|
|
order = 40,
|
|
args = {
|
|
NP_SpellQueueWindowMs = {
|
|
type = "range",
|
|
name = L["Spell Queue Window (ms)"],
|
|
desc = L["The window in ms before a cast finishes where the next will get queued"],
|
|
order = 40,
|
|
min = 0,
|
|
max = 5000,
|
|
step = 50,
|
|
get = function()
|
|
return GetCVar("NP_SpellQueueWindowMs")
|
|
end,
|
|
set = function(v)
|
|
Nampower.db.profile.NP_SpellQueueWindowMs = v
|
|
SetCVar("NP_SpellQueueWindowMs", v)
|
|
end,
|
|
},
|
|
NP_OnSwingBufferCooldownMs = {
|
|
type = "range",
|
|
name = L["On Swing Buffer Cooldown (ms)"],
|
|
desc = L["The cooldown time in ms after an on swing spell before you can queue on swing spells"],
|
|
order = 45,
|
|
min = 0,
|
|
max = 5000,
|
|
step = 50,
|
|
get = function()
|
|
return GetCVar("NP_OnSwingBufferCooldownMs")
|
|
end,
|
|
set = function(v)
|
|
Nampower.db.profile.NP_OnSwingBufferCooldownMs = v
|
|
SetCVar("NP_OnSwingBufferCooldownMs", v)
|
|
end,
|
|
},
|
|
NP_ChannelQueueWindowMs = {
|
|
type = "range",
|
|
name = L["Channel Queue Window (ms)"],
|
|
desc = L["The window in ms before a channel finishes where the next will get queued"],
|
|
order = 50,
|
|
min = 0,
|
|
max = 5000,
|
|
step = 50,
|
|
get = function()
|
|
return GetCVar("NP_ChannelQueueWindowMs")
|
|
end,
|
|
set = function(v)
|
|
Nampower.db.profile.NP_ChannelQueueWindowMs = v
|
|
SetCVar("NP_ChannelQueueWindowMs", v)
|
|
end,
|
|
},
|
|
NP_TargetingQueueWindowMs = {
|
|
type = "range",
|
|
name = L["Targeting Queue Window (ms)"],
|
|
desc = L["The window in ms before a terrain targeting spell finishes where the next will get queued"],
|
|
order = 55,
|
|
min = 0,
|
|
max = 5000,
|
|
step = 50,
|
|
get = function()
|
|
return GetCVar("NP_TargetingQueueWindowMs")
|
|
end,
|
|
set = function(v)
|
|
Nampower.db.profile.NP_TargetingQueueWindowMs = v
|
|
SetCVar("NP_TargetingQueueWindowMs", v)
|
|
end,
|
|
},
|
|
NP_CooldownQueueWindowMs = {
|
|
type = "range",
|
|
name = L["Cooldown Queue Window (ms)"],
|
|
desc = L["The window in ms before a spell coming off cooldown finishes where the next will get queued"],
|
|
order = 60,
|
|
min = 0,
|
|
max = 5000,
|
|
step = 50,
|
|
get = function()
|
|
return GetCVar("NP_CooldownQueueWindowMs")
|
|
end,
|
|
set = function(v)
|
|
Nampower.db.profile.NP_CooldownQueueWindowMs = v
|
|
SetCVar("NP_CooldownQueueWindowMs", v)
|
|
end,
|
|
}
|
|
},
|
|
},
|
|
spacerb = {
|
|
type = "header",
|
|
name = " ",
|
|
order = 50,
|
|
},
|
|
cast_options = {
|
|
type = "group",
|
|
name = L["Cast Options"],
|
|
desc = L["Options for controlling casting behavior"],
|
|
order = 55,
|
|
args = {
|
|
NP_QuickcastTargetingSpells = {
|
|
type = "toggle",
|
|
name = L["Quickcast Targeting Spells"],
|
|
desc = L["Whether to enable quick casting for ALL spells with terrain targeting"],
|
|
order = 5,
|
|
get = function()
|
|
return GetCVar("NP_QuickcastTargetingSpells") == "1"
|
|
end,
|
|
set = function(v)
|
|
Nampower.db.profile.NP_QuickcastTargetingSpells = v
|
|
if v == true then
|
|
SetCVar("NP_QuickcastTargetingSpells", "1")
|
|
else
|
|
SetCVar("NP_QuickcastTargetingSpells", "0")
|
|
end
|
|
end,
|
|
},
|
|
NP_DoubleCastToEndChannelEarly = {
|
|
type = "toggle",
|
|
name = L["Double Cast to End Channel Early"],
|
|
desc = L["Whether to allow double casting a spell within 350ms to end channeling on the next tick. Takes into account your ChannelLatencyReductionPercentage."],
|
|
order = 15,
|
|
get = function()
|
|
return GetCVar("NP_DoubleCastToEndChannelEarly") == "1"
|
|
end,
|
|
set = function(v)
|
|
Nampower.db.profile.NP_DoubleCastToEndChannelEarly = v
|
|
if v == true then
|
|
SetCVar("NP_DoubleCastToEndChannelEarly", "1")
|
|
else
|
|
SetCVar("NP_DoubleCastToEndChannelEarly", "0")
|
|
end
|
|
end,
|
|
},
|
|
},
|
|
},
|
|
spacerc2 = {
|
|
type = "header",
|
|
name = " ",
|
|
order = 58,
|
|
},
|
|
qol_options = {
|
|
type = "group",
|
|
name = L["QOL Options"],
|
|
desc = L["Quality of life options to prevent common issues"],
|
|
order = 59,
|
|
args = {
|
|
},
|
|
},
|
|
spacerc3 = {
|
|
type = "header",
|
|
name = " ",
|
|
order = 60,
|
|
},
|
|
advanced_options = {
|
|
type = "group",
|
|
name = L["Advanced options"],
|
|
desc = L["Collection of various advanced options"],
|
|
order = 65,
|
|
args = {
|
|
NP_InterruptChannelsOutsideQueueWindow = {
|
|
type = "toggle",
|
|
name = L["Interrupt Channels Outside Queue Window"],
|
|
desc = L["Whether to allow interrupting channels (the original client behavior) when trying to cast a spell outside the channeling queue window"],
|
|
order = 70,
|
|
get = function()
|
|
return GetCVar("NP_InterruptChannelsOutsideQueueWindow") == "1"
|
|
end,
|
|
set = function(v)
|
|
Nampower.db.profile.NP_InterruptChannelsOutsideQueueWindow = v
|
|
if v == true then
|
|
SetCVar("NP_InterruptChannelsOutsideQueueWindow", "1")
|
|
else
|
|
SetCVar("NP_InterruptChannelsOutsideQueueWindow", "0")
|
|
end
|
|
end,
|
|
},
|
|
NP_RetryServerRejectedSpells = {
|
|
type = "toggle",
|
|
name = L["Retry Server Rejected Spells"],
|
|
desc = L["Whether to retry spells that are rejected by the server for these reasons: SPELL_FAILED_ITEM_NOT_READY, SPELL_FAILED_NOT_READY, SPELL_FAILED_SPELL_IN_PROGRESS"],
|
|
order = 100,
|
|
get = function()
|
|
return GetCVar("NP_RetryServerRejectedSpells") == "1"
|
|
end,
|
|
set = function(v)
|
|
Nampower.db.profile.NP_RetryServerRejectedSpells = v
|
|
if v == true then
|
|
SetCVar("NP_RetryServerRejectedSpells", "1")
|
|
else
|
|
SetCVar("NP_RetryServerRejectedSpells", "0")
|
|
end
|
|
end,
|
|
},
|
|
NP_ReplaceMatchingNonGcdCategory = {
|
|
type = "toggle",
|
|
name = L["Replace Matching Non GCD Category"],
|
|
desc = L["Whether to replace any queued non gcd spell when a new non gcd spell with the same non zero StartRecoveryCategory is cast. Most trinkets and spells are category 0 which are ignored by this setting. The primary use case is to switch which potion you have queued."],
|
|
order = 110,
|
|
get = function()
|
|
return GetCVar("NP_ReplaceMatchingNonGcdCategory") == "1"
|
|
end,
|
|
set = function(v)
|
|
Nampower.db.profile.NP_ReplaceMatchingNonGcdCategory = v
|
|
if v == true then
|
|
SetCVar("NP_ReplaceMatchingNonGcdCategory", "1")
|
|
else
|
|
SetCVar("NP_ReplaceMatchingNonGcdCategory", "0")
|
|
end
|
|
end,
|
|
},
|
|
NP_OptimizeBufferUsingPacketTimings = {
|
|
type = "toggle",
|
|
name = L["Optimize Buffer Using Packet Timings"],
|
|
desc = L["Whether to attempt to optimize your buffer using your latency and server packet timings"],
|
|
order = 115,
|
|
get = function()
|
|
return GetCVar("NP_OptimizeBufferUsingPacketTimings") == "1"
|
|
end,
|
|
set = function(v)
|
|
Nampower.db.profile.NP_OptimizeBufferUsingPacketTimings = v
|
|
if v == true then
|
|
SetCVar("NP_OptimizeBufferUsingPacketTimings", "1")
|
|
else
|
|
SetCVar("NP_OptimizeBufferUsingPacketTimings", "0")
|
|
end
|
|
end,
|
|
},
|
|
NP_MinBufferTimeMs = {
|
|
type = "range",
|
|
name = L["Minimum Buffer Time (ms)"],
|
|
desc = L["The minimum buffer delay in ms added to each cast"],
|
|
order = 80,
|
|
min = 0,
|
|
max = 300,
|
|
step = 1,
|
|
get = function()
|
|
return GetCVar("NP_MinBufferTimeMs")
|
|
end,
|
|
set = function(v)
|
|
Nampower.db.profile.NP_MinBufferTimeMs = v
|
|
SetCVar("NP_MinBufferTimeMs", v)
|
|
end,
|
|
},
|
|
NP_NonGcdBufferTimeMs = {
|
|
type = "range",
|
|
name = L["Non GCD Buffer Time (ms)"],
|
|
desc = L["The buffer delay in ms added AFTER each cast that is not tied to the gcd"],
|
|
order = 85,
|
|
min = 0,
|
|
max = 300,
|
|
step = 1,
|
|
get = function()
|
|
return GetCVar("NP_NonGcdBufferTimeMs")
|
|
end,
|
|
set = function(v)
|
|
Nampower.db.profile.NP_NonGcdBufferTimeMs = v
|
|
SetCVar("NP_NonGcdBufferTimeMs", v)
|
|
end,
|
|
},
|
|
NP_MaxBufferIncreaseMs = {
|
|
type = "range",
|
|
name = L["Max Buffer Increase (ms)"],
|
|
desc = L["The maximum amount of time in ms to increase the buffer by when the server rejects a cast"],
|
|
order = 90,
|
|
min = 0,
|
|
max = 100,
|
|
step = 5,
|
|
get = function()
|
|
return GetCVar("NP_MaxBufferIncreaseMs")
|
|
end,
|
|
set = function(v)
|
|
Nampower.db.profile.NP_MaxBufferIncreaseMs = v
|
|
SetCVar("NP_MaxBufferIncreaseMs", v)
|
|
end,
|
|
},
|
|
NP_ChannelLatencyReductionPercentage = {
|
|
type = "range",
|
|
name = L["Channel Latency Reduction (%)"],
|
|
desc = L["The percentage of your latency to subtract from the end of a channel duration to optimize cast time while hopefully not losing any ticks"],
|
|
order = 125,
|
|
min = 0,
|
|
max = 100,
|
|
step = 1,
|
|
get = function()
|
|
return GetCVar("NP_ChannelLatencyReductionPercentage")
|
|
end,
|
|
set = function(v)
|
|
Nampower.db.profile.NP_ChannelLatencyReductionPercentage = v
|
|
SetCVar("NP_ChannelLatencyReductionPercentage", v)
|
|
end,
|
|
}
|
|
},
|
|
},
|
|
spacerc = {
|
|
type = "header",
|
|
name = " ",
|
|
order = 75,
|
|
},
|
|
queued_spell_options = {
|
|
type = "group",
|
|
name = L["Queued Spell Display Options"],
|
|
desc = L["Options for displaying an icon for the queued spell"],
|
|
order = 85,
|
|
args = {
|
|
enabled = {
|
|
type = "toggle",
|
|
name = L["Display queued spell icon"],
|
|
desc = L["Whether to display an icon of the queued spell"],
|
|
order = 5,
|
|
get = function()
|
|
return Nampower.db.profile.show_queued_spell
|
|
end,
|
|
set = function(v)
|
|
Nampower.db.profile.show_queued_spell = v
|
|
toggleEventListener()
|
|
end,
|
|
},
|
|
size = {
|
|
type = "range",
|
|
name = L["Icon size"],
|
|
desc = L["Change the spell icon size"],
|
|
order = 10,
|
|
min = 8,
|
|
max = 48,
|
|
step = 1,
|
|
get = function()
|
|
return Nampower.db.profile.queued_spell_size
|
|
end,
|
|
set = function(v)
|
|
Nampower.db.profile.queued_spell_size = v
|
|
Nampower.queued_spell:SetWidth(v)
|
|
Nampower.queued_spell:SetHeight(v)
|
|
end,
|
|
},
|
|
draggable = {
|
|
type = "toggle",
|
|
name = L["Allow dragging"],
|
|
desc = L["Whether to allow interaction with the queued spell icon so you can move it around"],
|
|
order = 15,
|
|
get = function()
|
|
return Nampower.db.profile.queued_spell_enable_mouse
|
|
end,
|
|
set = function(v)
|
|
Nampower.db.profile.queued_spell_enable_mouse = v
|
|
Nampower.queued_spell:EnableMouse(v)
|
|
end,
|
|
},
|
|
reset_position = {
|
|
type = "execute",
|
|
name = L["Reset Position"],
|
|
desc = L["Reset the position of the queued spell icon"],
|
|
order = 20,
|
|
func = function()
|
|
local scale = Nampower.queued_spell:GetEffectiveScale()
|
|
Nampower.queued_spell:ClearAllPoints()
|
|
Nampower.queued_spell:SetPoint("TOPLEFT", UIParent, "BOTTOMLEFT", 500 / scale, 500 / scale)
|
|
saveQueuedSpellPosition()
|
|
end,
|
|
},
|
|
test = {
|
|
type = "execute",
|
|
name = L["Show/Hide for positioning"],
|
|
desc = L["Test the queued spell icon and position it to your liking"],
|
|
order = 25,
|
|
func = function()
|
|
if Nampower.queued_spell:IsVisible() then
|
|
Nampower.queued_spell:Hide()
|
|
else
|
|
Nampower.queued_spell:Show()
|
|
end
|
|
end,
|
|
},
|
|
},
|
|
},
|
|
spacerd = {
|
|
type = "header",
|
|
name = " ",
|
|
order = 95,
|
|
},
|
|
},
|
|
}
|
|
|
|
if Nampower:HasMinimumVersion(2, 8, 6) then
|
|
Nampower.cmdtable.args.NP_NameplateDistance = {
|
|
type = "range",
|
|
name = L["Nameplate Distance"],
|
|
desc = L["The distance in yards to show nameplates"],
|
|
order = 115,
|
|
min = 5,
|
|
max = 200,
|
|
step = 1,
|
|
get = function()
|
|
return GetCVar("NP_NameplateDistance")
|
|
end,
|
|
set = function(v)
|
|
Nampower.db.profile.NP_NameplateDistance = v
|
|
SetCVar("NP_NameplateDistance", v)
|
|
end,
|
|
}
|
|
end
|
|
|
|
Nampower.cmdtable.args.qol_options.args.NP_PreventRightClickTargetChange = {
|
|
type = "toggle",
|
|
name = L["Prevent Right Click Target Change"],
|
|
desc = L["Whether to prevent right-clicking from changing your current target when in combat. If you don't have a target right click will still change your target even with this on. This is mainly to prevent accidentally changing targets in combat when trying to adjust your camera."],
|
|
order = 5,
|
|
get = function()
|
|
return GetCVar("NP_PreventRightClickTargetChange") == "1"
|
|
end,
|
|
set = function(v)
|
|
Nampower.db.profile.NP_PreventRightClickTargetChange = v
|
|
if v == true then
|
|
SetCVar("NP_PreventRightClickTargetChange", "1")
|
|
else
|
|
SetCVar("NP_PreventRightClickTargetChange", "0")
|
|
end
|
|
end,
|
|
}
|
|
|
|
if Nampower:HasMinimumVersion(2, 11, 0) then
|
|
Nampower.cmdtable.args.qol_options.args.NP_SpamProtectionEnabled = {
|
|
type = "toggle",
|
|
name = L["Spam Protection"],
|
|
desc = L["Whether to enable spam protection functionality that blocks spamming spells while waiting for the server to respond to your initial cast due to issues spamming can cause"],
|
|
order = 10,
|
|
get = function()
|
|
return GetCVar("NP_SpamProtectionEnabled") == "1"
|
|
end,
|
|
set = function(v)
|
|
Nampower.db.profile.NP_SpamProtectionEnabled = v
|
|
if v == true then
|
|
SetCVar("NP_SpamProtectionEnabled", "1")
|
|
else
|
|
SetCVar("NP_SpamProtectionEnabled", "0")
|
|
end
|
|
end,
|
|
}
|
|
|
|
Nampower.cmdtable.args.qol_options.args.NP_PreventRightClickPvPAttack = {
|
|
type = "toggle",
|
|
name = L["Prevent Right Click PvP Attack"],
|
|
desc = L["Whether to prevent right-clicking on PvP flagged players to avoid accidental PvP attacks"],
|
|
order = 15,
|
|
get = function()
|
|
return GetCVar("NP_PreventRightClickPvPAttack") == "1"
|
|
end,
|
|
set = function(v)
|
|
Nampower.db.profile.NP_PreventRightClickPvPAttack = v
|
|
if v == true then
|
|
SetCVar("NP_PreventRightClickPvPAttack", "1")
|
|
else
|
|
SetCVar("NP_PreventRightClickPvPAttack", "0")
|
|
end
|
|
end,
|
|
}
|
|
else
|
|
DEFAULT_CHAT_FRAME:AddMessage(L["update available"])
|
|
end
|
|
|
|
if Nampower:HasMinimumVersion(2, 15, 0) then
|
|
Nampower.cmdtable.args.cast_options.args.NP_QuickcastOnDoubleCast = {
|
|
type = "toggle",
|
|
name = L["Quickcast Targeting Spells on Double Cast"],
|
|
desc = L["Allows casting targeting spells by attempting to cast them twice as opposed to the default client behavior which cancels the targeting indicator"],
|
|
order = 10,
|
|
get = function()
|
|
return GetCVar("NP_QuickcastOnDoubleCast") == "1"
|
|
end,
|
|
set = function(v)
|
|
Nampower.db.profile.NP_QuickcastOnDoubleCast = v
|
|
if v == true then
|
|
SetCVar("NP_QuickcastOnDoubleCast", "1")
|
|
else
|
|
SetCVar("NP_QuickcastOnDoubleCast", "0")
|
|
end
|
|
end,
|
|
}
|
|
end
|
|
|
|
if Nampower:HasMinimumVersion(2, 20, 0) then
|
|
Nampower.cmdtable.args.qol_options.args.NP_PreventMountingWhenBuffCapped = {
|
|
type = "toggle",
|
|
name = L["Prevent Mounting When Buff Capped"],
|
|
desc = L["Whether to prevent mounting when you have 32 buffs (buff capped) and are not already mounted. This prevents the issue where you mount but cannot dismount because the mount aura fails to apply due to the buff cap. When blocked, displays an error message."],
|
|
order = 20,
|
|
get = function()
|
|
return GetCVar("NP_PreventMountingWhenBuffCapped") == "1"
|
|
end,
|
|
set = function(v)
|
|
Nampower.db.profile.NP_PreventMountingWhenBuffCapped = v
|
|
if v == true then
|
|
SetCVar("NP_PreventMountingWhenBuffCapped", "1")
|
|
else
|
|
SetCVar("NP_PreventMountingWhenBuffCapped", "0")
|
|
end
|
|
end,
|
|
}
|
|
|
|
Nampower.cmdtable.args.advanced_options.args.NP_EnableAuraCastEvents = {
|
|
type = "toggle",
|
|
name = L["Enable Aura Cast Events"],
|
|
desc = L["Whether to enable AURA_CAST_ON_SELF and AURA_CAST_ON_OTHER events."],
|
|
order = 155,
|
|
get = function()
|
|
return GetCVar("NP_EnableAuraCastEvents") == "1"
|
|
end,
|
|
set = function(v)
|
|
Nampower.db.profile.NP_EnableAuraCastEvents = v
|
|
if v == true then
|
|
SetCVar("NP_EnableAuraCastEvents", "1")
|
|
else
|
|
SetCVar("NP_EnableAuraCastEvents", "0")
|
|
end
|
|
end,
|
|
}
|
|
end
|
|
|
|
if Nampower:HasMinimumVersion(2, 24, 0) then
|
|
Nampower.cmdtable.args.advanced_options.args.NP_EnableAutoAttackEvents = {
|
|
type = "toggle",
|
|
name = L["Enable Auto Attack Events"],
|
|
desc = L["Whether to enable AUTO_ATTACK_SELF and AUTO_ATTACK_OTHER events."],
|
|
order = 160,
|
|
get = function()
|
|
return GetCVar("NP_EnableAutoAttackEvents") == "1"
|
|
end,
|
|
set = function(v)
|
|
Nampower.db.profile.NP_EnableAutoAttackEvents = v
|
|
if v == true then
|
|
SetCVar("NP_EnableAutoAttackEvents", "1")
|
|
else
|
|
SetCVar("NP_EnableAutoAttackEvents", "0")
|
|
end
|
|
end,
|
|
}
|
|
end
|
|
|
|
if Nampower:HasMinimumVersion(2, 25, 0) then
|
|
Nampower.cmdtable.args.advanced_options.args.NP_EnableSpellStartEvents = {
|
|
type = "toggle",
|
|
name = L["Enable Spell Start Events"],
|
|
desc = L["Whether to enable SPELL_START_SELF and SPELL_START_OTHER events."],
|
|
order = 165,
|
|
get = function()
|
|
return GetCVar("NP_EnableSpellStartEvents") == "1"
|
|
end,
|
|
set = function(v)
|
|
Nampower.db.profile.NP_EnableSpellStartEvents = v
|
|
if v == true then
|
|
SetCVar("NP_EnableSpellStartEvents", "1")
|
|
else
|
|
SetCVar("NP_EnableSpellStartEvents", "0")
|
|
end
|
|
end,
|
|
}
|
|
|
|
Nampower.cmdtable.args.advanced_options.args.NP_EnableSpellGoEvents = {
|
|
type = "toggle",
|
|
name = L["Enable Spell Go Events"],
|
|
desc = L["Whether to enable SPELL_GO_SELF and SPELL_GO_OTHER events."],
|
|
order = 170,
|
|
get = function()
|
|
return GetCVar("NP_EnableSpellGoEvents") == "1"
|
|
end,
|
|
set = function(v)
|
|
Nampower.db.profile.NP_EnableSpellGoEvents = v
|
|
if v == true then
|
|
SetCVar("NP_EnableSpellGoEvents", "1")
|
|
else
|
|
SetCVar("NP_EnableSpellGoEvents", "0")
|
|
end
|
|
end,
|
|
}
|
|
end
|
|
|
|
if Nampower:HasMinimumVersion(2, 26, 0) then
|
|
Nampower.cmdtable.args.advanced_options.args.NP_EnableSpellHealEvents = {
|
|
type = "toggle",
|
|
name = L["Enable Spell Heal Events"],
|
|
desc = L["Whether to enable SPELL_HEAL_BY_SELF, SPELL_HEAL_BY_OTHER, and SPELL_HEAL_ON_SELF events."],
|
|
order = 175,
|
|
get = function()
|
|
return GetCVar("NP_EnableSpellHealEvents") == "1"
|
|
end,
|
|
set = function(v)
|
|
Nampower.db.profile.NP_EnableSpellHealEvents = v
|
|
if v == true then
|
|
SetCVar("NP_EnableSpellHealEvents", "1")
|
|
else
|
|
SetCVar("NP_EnableSpellHealEvents", "0")
|
|
end
|
|
end,
|
|
}
|
|
|
|
Nampower.cmdtable.args.advanced_options.args.NP_EnableSpellEnergizeEvents = {
|
|
type = "toggle",
|
|
name = L["Enable Spell Energize Events"],
|
|
desc = L["Whether to enable SPELL_ENERGIZE_BY_SELF, SPELL_ENERGIZE_BY_OTHER, and SPELL_ENERGIZE_ON_SELF events."],
|
|
order = 180,
|
|
get = function()
|
|
return GetCVar("NP_EnableSpellEnergizeEvents") == "1"
|
|
end,
|
|
set = function(v)
|
|
Nampower.db.profile.NP_EnableSpellEnergizeEvents = v
|
|
if v == true then
|
|
SetCVar("NP_EnableSpellEnergizeEvents", "1")
|
|
else
|
|
SetCVar("NP_EnableSpellEnergizeEvents", "0")
|
|
end
|
|
end,
|
|
}
|
|
end
|
|
|
|
local deuce = Nampower:NewModule("Nampower Options Menu")
|
|
deuce.hasFuBar = IsAddOnLoaded("FuBar") and FuBar
|
|
deuce.consoleCmd = not deuce.hasFuBar
|
|
|
|
NampowerOptions = AceLibrary("AceAddon-2.0"):new("AceDB-2.0", "FuBarPlugin-2.0")
|
|
NampowerOptions.name = "FuBar - Nampower"
|
|
NampowerOptions.hasIcon = "Interface\\Icons\\inv_misc_book_04"
|
|
NampowerOptions.defaultMinimapPosition = 180
|
|
NampowerOptions.independentProfile = true
|
|
NampowerOptions.hideWithoutStandby = false
|
|
|
|
NampowerOptions:RegisterDB("NampowerSettingsDB")
|
|
|
|
NampowerOptions.OnMenuRequest = Nampower.cmdtable
|
|
local args = AceLibrary("FuBarPlugin-2.0"):GetAceOptionsDataTable(NampowerOptions)
|
|
for k, v in pairs(args) do
|
|
if NampowerOptions.OnMenuRequest.args[k] == nil then
|
|
NampowerOptions.OnMenuRequest.args[k] = v
|
|
end
|
|
end
|