/branches
</Anchors> |
<Scripts> |
<OnLoad> |
UIDropDownMenu_Initialize(this, NeedToKnow.BarMenu_Initialize, "MENU"); |
UIDropDownMenu_Initialize(self, NeedToKnow.BarMenu_Initialize, "MENU"); |
</OnLoad> |
<OnShow> |
UIDropDownMenu_Initialize(this, NeedToKnow.BarMenu_Initialize, "MENU"); |
UIDropDownMenu_Initialize(self, NeedToKnow.BarMenu_Initialize, "MENU"); |
</OnShow> |
</Scripts> |
</Frame> |
</Anchors> |
</Texture> |
</Layer> |
<Layer level="ARTWORK"> |
<Layer level="BORDER"> |
<Texture name="$parentTexture"> |
<Anchors> |
<Anchor point="TOPLEFT" relativeTo="$parent" relativePoint="TOPLEFT"> |
</Anchor> |
</Anchors> |
</Texture> |
</Layer> |
<Layer level="OVERLAY"> |
<FontString name="$parentText" inherits="GameFontHighlight" justifyH="LEFT"> |
<Size> |
<AbsDimension x="180" y="16"/> |
</Anchor> |
</Anchors> |
</FontString> |
</Layer> |
<Layer level="OVERLAY"> |
<Texture name="$parentSpark" file="Interface\CastingBar\UI-CastingBar-Spark" alphaMode="ADD"> |
<Size> |
<AbsDimension x="32" y="60"/> |
self:RegisterForDrag("LeftButton"); |
</OnLoad> |
<OnEnter> |
NeedToKnow.Bar_OnEnter(self, motion); |
local tooltip = _G["GameTooltip"]; |
tooltip:SetOwner(self:GetParent(), "ANCHOR_TOPLEFT"); |
tooltip:AddLine(NEEDTOKNOW.BAR_TOOLTIP1, HIGHLIGHT_FONT_COLOR.r, HIGHLIGHT_FONT_COLOR.g, HIGHLIGHT_FONT_COLOR.b, 1); |
tooltip:AddLine(NEEDTOKNOW.BAR_TOOLTIP2, NORMAL_FONT_COLOR.r, NORMAL_FONT_COLOR.g, NORMAL_FONT_COLOR.b, 1); |
tooltip:Show(); |
</OnEnter> |
<OnLeave> |
GameTooltip:Hide(); |
-- --------------------- |
-- ---------------------- |
-- NeedToKnow |
-- by Nephthys of Hyjal |
-- updated by |
-- kitjan |
-- Bilt of Lightninghoof |
-- lieandswell@yahoo.com |
-- --------------------- |
-- by Kitjan, lieandswell |
-- ---------------------- |
if not trace then trace = print end |
-- NEEDTOKNOW = {} is defined in the localization file, which must be loaded before this file |
NEEDTOKNOW.VERSION = "3.1.1" |
NEEDTOKNOW.VERSION = "3.1.7" |
NEEDTOKNOW.MAXGROUPS = 4 |
NEEDTOKNOW.MAXBARS = 6 |
NEEDTOKNOW.UPDATE_INTERVAL = 0.05 |
vct_extra = 0, |
bDetectExtends = false, |
show_text = true, |
show_count = true, |
show_time = true, |
show_spark = true, |
show_icon = false, |
show_mypip = false, |
show_all_stacks = false, |
show_text_user = "", |
blink_enabled = false, |
blink_ooc = true, |
blink_boss = false, |
-- SharedMedia Support |
-- ------------------- |
NeedToKnow.LSM = LibStub("LibSharedMedia-3.0", true) |
if not NeedToKnow.LSM:Fetch("statusbar", "Aluminum", true) then NeedToKnow.LSM:Register("statusbar", "Aluminum", [[Interface\Addons\NeedToKnow\Textures\Aluminum.tga]]) end |
NeedToKnow.guidPlayer = UnitGUID("player") |
NEEDTOKNOW.CURRENTSPEC = GetActiveTalentGroup() |
local _, player_CLASS = UnitClass("player") |
if player_CLASS == "DEATHKNIGHT" then |
NeedToKnow.is_DK = 1 |
end |
NeedToKnow.Update() |
NeedToKnow.UIPanel_Update() |
end |
end |
local function SetStatusBarValue(bar,texture,value) |
local function SetStatusBarValue(bar,texture,value,value0) |
local pct0 = 0 |
if value0 then |
pct0 = value0 / bar.max_value |
if pct0 > 1 then pct0 = 1 end |
end |
local pct = value / bar.max_value |
texture.cur_value = value |
if pct > 1 then pct = 1 end |
local w = pct * bar:GetWidth() |
local w = (pct-pct0) * bar:GetWidth() |
if w < 1 then |
texture:Hide() |
else |
texture:SetWidth(pct * bar:GetWidth()) |
texture:SetTexCoord(0,0,0,1,pct,0,pct,1) |
texture:SetWidth(w) |
texture:SetTexCoord(pct0,0, pct0,1, pct,0, pct,1) |
texture:Show() |
end |
end |
then |
barSettings.Unit = "player" |
end |
-- Look for certain magic "spell" names |
-- Split the spell names |
bar.spells = {} |
for barSpell in bar.auraName:gmatch("([^,]+),*") do |
barSpell = strtrim(barSpell) |
table.insert(bar.spells, barSpell) |
end |
-- split the user name overrides |
bar.spell_names = {} |
for un in barSettings.show_text_user:gmatch("([^,]+),*") do |
un = strtrim(un) |
table.insert(bar.spell_names, un) |
end |
-- Look for certain special "spell" names |
barSettings.bAutoShot = nil |
if ( barSettings.BuffOrDebuff == "CASTCD" ) then |
local startIndex=1 |
local lastBuff = -1 |
if bar.auraName:len() > 0 then |
_ , lastBuff = string.gsub(bar.auraName, "," , ",") |
end |
for idxBuff=0, lastBuff do |
local endIndex = bar.auraName:find(",",startIndex,true) or (string.len(bar.auraName)+1) |
local barSpell = strtrim(string.sub(bar.auraName, startIndex, endIndex-1)) |
startIndex = endIndex+1 |
for idx, barSpell in ipairs(bar.spells) do |
if ( barSpell == "Auto Shot" or |
barSpell == NEEDTOKNOW.AUTO_SHOT or |
barSpell == "75" ) |
then |
barSettings.bAutoShot = true |
end |
end |
end |
end |
bar.settings = barSettings |
if ( barSettings.show_mypip ) then |
txt = txt.."* " |
end |
if ( barSettings.show_text ) then |
txt = txt .. bar.auraName |
if "" ~= barSettings.show_text_user then |
txt = barSettings.show_text_user |
else |
txt = txt .. bar.auraName |
end |
if ( barSettings.append_cd |
and (barSettings.BuffOrDebuff == "CASTCD" |
or barSettings.BuffOrDebuff == "BUFFCD") ) |
then |
txt = txt .. " CD" |
elseif ( barSettings.append_usable |
and barSettings.BuffOrDebuff == "USABLE" ) |
then |
txt = txt .. " Usable" |
end |
if ( barSettings.bDetectExtends == true ) then |
txt = txt .. " + 3s" |
end |
end |
if ( barSettings.append_cd |
and (barSettings.BuffOrDebuff == "CASTCD" |
or barSettings.BuffOrDebuff == "BUFFCD") ) |
then |
txt = txt .. " CD" |
elseif ( barSettings.append_usable |
and barSettings.BuffOrDebuff == "USABLE" ) |
then |
txt = txt .. " Usable" |
end |
bar.text:SetText(txt) |
if ( barSettings.Enabled ) then |
end |
end |
if bar.settings.bDetectExtends then |
if bar.settings.bDetectExtends or NeedToKnow.is_DK then |
bar:RegisterEvent("UNIT_SPELLCAST_SENT") |
end |
if not bar.settings.blink_ooc then |
function NeedToKnow.Bar_OnSizeChanged(self) |
if (self.bar1.cur_value) then SetStatusBarValue(self, self.bar1, self.bar1.cur_value) end |
if (self.bar2) then SetStatusBarValue(self, self.bar2, self.bar2.cur_value) end |
if (self.bar2) then SetStatusBarValue(self, self.bar2, self.bar2.cur_value, self.bar1.cur_value) end |
end |
function NeedToKnow.Bar_OnEvent(self, event, ...) |
elseif ( event == "UNIT_TARGET" and select(1, ...) == "target" ) then |
NeedToKnow.Bar_AuraCheck(self) |
elseif ( event == "UNIT_SPELLCAST_SENT" ) then |
local unit, spell = select(1, ...) |
if ( self.settings.bDetectExtends ) then |
local unit, spell = select(1, ...) |
if unit == "player" and self.buffName == spell then |
local r = NeedToKnow.last_cast[spell] |
if ( r and r.state == 0 ) then |
end |
end |
end |
if NeedToKnow.is_DK then |
-- TODO: I hate that DKs have to pay this memory cost for every "spell" they ever cast |
if unit == "player" then |
if not NeedToKnow.last_sent then |
NeedToKnow.last_sent = {} |
end |
NeedToKnow.last_sent[spell] = GetTime() |
end |
end |
elseif ( event == "START_AUTOREPEAT_SPELL" ) then |
self:RegisterEvent("UNIT_SPELLCAST_SUCCEEDED") |
elseif ( event == "STOP_AUTOREPEAT_SPELL" ) then |
elseif ( event == "UNIT_SPELLCAST_SUCCEEDED" ) then |
local caster, spell = select(1,...) |
if ( self.settings.bAutoShot and caster == "player" and spell == NEEDTOKNOW.AUTO_SHOT ) then |
local interval = UnitRangedDamage("player") |
self.tAutoShotCD = interval |
local interval = UnitRangedDamage("player") |
self.tAutoShotCD = interval |
self.tAutoShotExpires = GetTime() + interval |
NeedToKnow.Bar_AuraCheck(self) |
end |
function NeedToKnow.CreateBar2(bar) |
if ( not bar.bar2 ) then |
local n = bar:GetName() .. "Bar2" |
bar.bar2 = bar:CreateTexture(n, "ARTWORK") |
bar.bar2:SetPoint("TOPLEFT", bar, "TOPLEFT") |
bar.bar2 = bar:CreateTexture(n, "BORDER") |
bar.bar2:SetPoint("TOPLEFT", bar.bar1, "TOPRIGHT") |
bar.bar2:SetPoint("BOTTOM", bar, "BOTTOM") |
bar.bar2:SetWidth(bar:GetWidth()) |
end |
end |
if ( bar.settings.show_text ) then |
txt = txt .. NeedToKnow.ComputeBarText(bar.buffName, count, extended) |
local n = bar.buffName |
if "" ~= bar.settings.show_text_user then |
local idx=bar.idxName |
if idx > #bar.spell_names then idx = #bar.spell_names end |
n = bar.spell_names[idx] |
end |
local c = count |
if not bar.settings.show_count then |
c = 1 |
end |
txt = txt .. NeedToKnow.ComputeBarText(n, c, extended) |
end |
if ( bar.settings.append_cd |
and (bar.settings.BuffOrDebuff == "CASTCD" |
-- Is this an aura with a finite duration? |
local vct_width = 0 |
if ( bar.duration > 0 ) then |
-- Configure the main status bar |
-- Configure the main status bar |
local duration = bar.fixedDuration or bar.duration |
bar.max_value = duration |
local tt = CreateFrame("GameTooltip", ttname) |
tt:SetOwner(UIParent, "ANCHOR_NONE") |
tt.left = {} |
tt.right = tt:CreateFontString() |
tt.right:SetFontObject(GameFontNormal) |
-- Most of the tooltip lines share the same text widget, |
-- But we need to query the third one for cooldown info |
tt.right1 = tt:CreateFontString() |
tt.right1:SetFontObject(GameFontNormal) |
tt.right3 = tt:CreateFontString() |
tt.right3:SetFontObject(GameFontNormal) |
for i = 1, 30 do |
tt.left[i] = tt:CreateFontString() |
tt.left[i]:SetFontObject(GameFontNormal) |
tt:AddFontStrings(tt.left[i], tt.right) |
if i ~= 3 then |
tt:AddFontStrings(tt.left[i], tt.right1) |
else |
tt:AddFontStrings(tt.left[i], tt.right3) |
end |
end |
end |
end |
local tt1,tt2 = NeedToKnow_Tooltip1, NeedToKnow_Tooltip2 |
tt1:ClearLines() |
tt2:ClearLines() |
return tt1,tt2 |
end |
end |
-- Looks at the tooltip for the given spell to see if a cooldown |
-- is listed with a duration in seconds. Longer cooldowns don't |
-- need this logic, so we don't need to do unit conversion |
function NeedToKnow.DetermineShortCooldownFromTooltip(spell) |
if not NeedToKnow.short_cds then |
NeedToKnow.short_cds = {} |
end |
if not NeedToKnow.short_cds[spell] then |
-- Figure out what a cooldown in seconds should look like |
local ref = SecondsToTime(10):lower() |
local unit_ref = ref:match("10 (.+)") |
-- Get the number and unit of the cooldown from the tooltip |
local tt1 = NeedToKnow.GetUtilityTooltips() |
tt1:SetHyperlink( GetSpellLink(spell) ) |
local cd = tt1.right3:GetText() |
local n_cd, unit_cd |
if cd then |
cd = cd:lower() |
n_cd, unit_cd = cd:match("(%d+) (.+) ") |
end |
-- unit_ref will be "|4sec:sec;" in english, so do a find rather than a == |
if not n_cd then |
-- If we couldn't parse the tooltip, assume there's no cd |
NeedToKnow.short_cds[spell] = 0 |
elseif unit_ref:find(unit_cd) then |
NeedToKnow.short_cds[spell] = tonumber(n_cd) |
else |
-- Not a short cooldown. Record it as a minute |
NeedToKnow.short_cds[spell] = 60 |
end |
end |
return NeedToKnow.short_cds[spell] |
end |
-- Called whenever the state of auras on the bar's unit may have changed |
function NeedToKnow.Bar_AuraCheck(bar) |
local buffName, count, duration, expirationTime, caster, iconPath |
local idxName = 0 |
local all_stacks |
local settings = bar.settings |
local bUnitExists, isWeapon |
end |
end |
local startIndex=1 |
local lastBuff = -1 |
if bar.auraName:len() > 0 then |
_ , lastBuff = string.gsub(bar.auraName, "," , ",") |
end |
for idxBuff=0, lastBuff do |
local endIndex = bar.auraName:find(",",startIndex,true) or (string.len(bar.auraName)+1) |
local barSpell = strtrim(string.sub(bar.auraName, startIndex, endIndex-1)) |
for idx, barSpell in ipairs(bar.spells) do |
idxName = idx |
local filter = settings.BuffOrDebuff |
local _, nDigits = barSpell:find("^[0-9]+") |
local _, nDigits = barSpell:find("^%d+") |
local isSpellID = ( nDigits == barSpell:len() ) |
if ( settings.BuffOrDebuff == "TOTEM" ) then |
caster = "player" |
end |
elseif settings.BuffOrDebuff == "CASTCD" then |
local spellName=barSpell, spellRank, spellIconPath |
local spellPower=0 |
if isSpellID or NeedToKnow.is_DK then |
spellName, spellRank, spellIconPath, _, _, spellPower = GetSpellInfo(barSpell) |
end |
if ( settings.bAutoShot and (barSpell == "Auto Shot" or barSpell == NEEDTOKNOW.AUTO_SHOT or barSpell == "75") ) then |
local tNow = GetTime() |
if ( bar.tAutoShotExpires and bar.tAutoShotExpires > tNow ) then |
caster = "player" |
end |
else |
local start, cd_len = GetSpellCooldown(barSpell) |
local tNow = GetTime() |
local start, cd_len, should_cooldown = GetSpellCooldown(barSpell) |
local is_spell = true |
if not start then |
start, cd_len = GetItemCooldown(barSpell) |
is_spell = false |
end |
local tNow = GetTime() |
if start and cd_len and cd_len > 1.5 then |
if is_spell and start and start > 0 then |
if 0 == should_cooldown then |
-- Filter out conditions like Stealth while stealthed |
start = nil |
elseif spellPower == 5 then -- Rune |
-- Filter out rune cooldown artificially extending the cd |
if cd_len <= 10 then |
if bar.expirationTime and tNow < bar.expirationTime then |
-- We've already seen the correct CD for this; keep using it |
start = bar.expirationTime - bar.duration |
cd_len = bar.duration |
elseif NeedToKnow.last_sent and NeedToKnow.last_sent[barSpell] and NeedToKnow.last_sent[barSpell] > (tNow - 1.5) then |
-- We think the spell was just cast, and a CD just started but it's short. |
-- Look at the tooltip to tell what the correct CD should be. If it's supposed |
-- to be short (Ghoul Frenzy, Howling Blast), then start a CD bar |
cd_len = NeedToKnow.DetermineShortCooldownFromTooltip(barSpell) |
if cd_len == 0 or cd_len > 10 then |
start = nil |
end |
else |
start = nil |
end |
end |
end |
end |
-- filter out the GCD, we only care about actual spell CDs |
if cd_len <= 1.5 then |
if not bar.expirationTime or bar.expirationTime < tNow then |
start = nil |
else |
start = bar.expirationTime - bar.duration |
cd_len = bar.duration |
end |
end |
if start and cd_len then |
local tEnd = start + cd_len |
if ( tEnd > tNow + 0.1 ) then |
if is_spell then |
end |
end |
elseif settings.BuffOrDebuff == "USABLE" then |
local _, nDigits = barSpell:find("^[0-9]+") |
local _, nDigits = barSpell:find("^%d+") |
local isSpellID = ( nDigits == barSpell:len() ) |
local key = barSpell |
if ( isSpellID ) then key = tonumber(barSpell) end |
all_stacks.total = all_stacks.total + count |
if ( 0 == all_stacks.min.expirationTime or all_stacks.min.expirationTime > expirationTime ) then |
all_stacks.min.idxName = idxName |
all_stacks.min.buffName = buffName |
all_stacks.min.caster = caster |
all_stacks.min.duration = duration |
break |
end |
end |
startIndex = endIndex+1 |
end |
end |
if ( all_stacks ) then |
idxName = all_stacks.min.idxName |
buffName = all_stacks.min.buffName |
caster = all_stacks.min.caster |
duration = all_stacks.max.duration |
bar.duration = duration |
bar.expirationTime = expirationTime |
bar.idxName = idxName |
bar.buffName = buffName |
bar.iconPath = iconPath |
if ( all_stacks and all_stacks.max.expirationTime ~= expirationTime ) then |
end |
-- Mark the bar as not blinking before calling ConfigureVisibleBar, |
-- since it calls OnUpdate which checks bar.blink |
-- since it calls OnUpdate which checks bar.blink |
bar.blink=false |
NeedToKnow.ConfigureVisibleBar(bar, count, extended) |
bar:Show() |
local now = GetTime() |
if ( now > self.nextUpdate ) then |
self.nextUpdate = now + NEEDTOKNOW.UPDATE_INTERVAL |
if ( self.blink ) then |
self.blink_phase = self.blink_phase + NEEDTOKNOW.UPDATE_INTERVAL |
if ( self.blink_phase >= 2 ) then |
if ( self.duration > 0 ) then |
local duration = self.fixedDuration or self.duration |
local timeLeft = self.expirationTime - GetTime() |
if ( timeLeft < 0 ) then |
local bar1_timeLeft = self.expirationTime - GetTime() |
if ( bar1_timeLeft < 0 ) then |
if ( self.settings.BuffOrDebuff == "CASTCD" or |
self.settings.BuffOrDebuff == "BUFFCD" ) |
then |
NeedToKnow.Bar_AuraCheck(self) |
return |
end |
timeLeft = 0 |
bar1_timeLeft = 0 |
end |
SetStatusBarValue(self, self.bar1, timeLeft); |
SetStatusBarValue(self, self.bar1, bar1_timeLeft); |
if ( self.settings.show_time ) then |
local fn = NeedToKnow[self.settings.TimeFormat] |
local oldText = self.time:GetText() |
local newText |
if ( fn ) then |
newText = fn(timeLeft) |
newText = fn(bar1_timeLeft) |
else |
newText = string.format(SecondsToTimeAbbrev(timeLeft)) |
newText = string.format(SecondsToTimeAbbrev(bar1_timeLeft)) |
end |
if ( newText ~= oldText ) then |
self.time:SetText("") |
end |
if ( self.settings.show_spark and timeLeft <= duration ) then |
self.spark:SetPoint("CENTER", self, "LEFT", self:GetWidth()*timeLeft/duration, 0) |
if ( self.settings.show_spark and bar1_timeLeft <= duration ) then |
self.spark:SetPoint("CENTER", self, "LEFT", self:GetWidth()*bar1_timeLeft/duration, 0) |
self.spark:Show() |
else |
self.spark:Hide() |
end |
if ( self.max_expirationTime ) then |
local timeLeft = self.max_expirationTime - GetTime() |
SetStatusBarValue(self, self.bar2, timeLeft) |
local bar2_timeLeft = self.max_expirationTime - GetTime() |
SetStatusBarValue(self, self.bar2, bar2_timeLeft, bar1_timeLeft) |
end |
if ( self.vct_refresh ) then |
## Interface: 30300 |
## X-Compatible-With: 40000 |
## Title: NeedToKnow |
## Author: Kitjan |
## Version: 3.1.1 |
## Notes: Buff/debuff timer bars, original code by Nephthys of Hyjal-US. Additional work by lieandswell and Bilt |
## Author: Kitjan, lieandswell |
## Version: 3.1.7 |
## Notes: Timer bars for buffs, debuffs, cooldowns, etc. |
## X-Credits: Bilt, Fxfighter EU-Echsenkessel, metalchoir, sp00n, Vlakarados, wowui.cn |
## X-Category: Buffs, Combat |
## OptionalDeps: LibStub,LibSharedMedia-3.0 |
## DefaultState: Enabled |
## LoadOnDemand: 0 |
## DefaultState: enabled |
## SavedVariablesPerCharacter: NeedToKnow_Settings |
libs\LibStub\LibStub.lua |
libs\CallbackHandler-1.0\CallbackHandler-1.0.lua |
 |
-- If you want to be super helpful, you can translate this stuff into whatever non-enUS language you happen to know. Email them to me and I'll credit you. ZOMG 15 minutes of fame. Neph <lieandswell@yahoo.com> |
--[[ |
If you want to be super helpful, you can translate this stuff into whatever non-enUS language you happen to know and we'll credit you. Please post the translations as a ticket on CurseForge.com (http://wow.curseforge.com/addons/need-to-know/tickets/) or email them to us (lieandswell@yahoo.com). |
Thanks a bunch! |
--]] |
NEEDTOKNOW = {}; |
-- Untranslated defaults |
-- Define defaults in enUS |
NEEDTOKNOW.BAR_TOOLTIP1 = "NeedToKnow"; |
NEEDTOKNOW.BAR_TOOLTIP2 = "Right click bars to configure. More options in the Blizzard interface options menu. Type /needtoknow to lock and enable."; |
NEEDTOKNOW.RESIZE_TOOLTIP = "Click and drag to change size"; |
NEEDTOKNOW.BARMENU_ENABLE = "Enable bar"; |
NEEDTOKNOW.BARMENU_CHOOSENAME = "Choose buff/debuff to time"; |
NEEDTOKNOW.CHOOSENAME_DIALOG = "Enter the name of the buff or debuff to time with this bar" |
NEEDTOKNOW.CHOOSE_OVERRIDE_TEXT = "Normally, the name of the aura/item/spell that activated the bar is displayed. By entering text here, you can override that text with something else. Leave this blank to use the default behavior." |
NEEDTOKNOW.BARMENU_CHOOSEUNIT = "Unit to monitor"; |
NEEDTOKNOW.BARMENU_PLAYER = "Player"; |
NEEDTOKNOW.BARMENU_TARGET = "Target"; |
NEEDTOKNOW.BARMENU_FOCUS = "Focus"; |
NEEDTOKNOW.BARMENU_PET = "Pet"; |
NEEDTOKNOW.BARMENU_VEHICLE = "Vehicle"; |
NEEDTOKNOW.BARMENU_TARGETTARGET = "Target of Target"; |
NEEDTOKNOW.BARMENU_BUFFORDEBUFF = "Bar Type"; |
NEEDTOKNOW.BARMENU_SPELLID = "Use SpellID"; |
NEEDTOKNOW.BARMENU_HELPFUL = "Buff"; |
NEEDTOKNOW.BARMENU_HARMFUL = "Debuff"; |
NEEDTOKNOW.BARMENU_ONLYMINE = "Only show if cast by self"; |
NEEDTOKNOW.BARMENU_BARCOLOR = "Bar color"; |
NEEDTOKNOW.BARMENU_CLEARSETTINGS = "Clear settings"; |
NEEDTOKNOW.UIPANEL_SUBTEXT1 = "These options allow you to customize NeedToKnow's timer bars."; |
-- NEEDTOKNOW.UIPANEL_SUBTEXT2 = "Bars work when locked. When unlocked, you can move/size bar groups and right click individual bars for more settings. You can also type '/needtoknow' or '/ntk' to lock/unlock."; |
NEEDTOKNOW.UIPANEL_BARGROUP = "Group "; |
NEEDTOKNOW.UIPANEL_NUMBERBARS = "Number of bars"; |
NEEDTOKNOW.UIPANEL_FIXEDDURATION = "Max bar duration"; |
NEEDTOKNOW.UIPANEL_LOCK = "Lock"; |
NEEDTOKNOW.UIPANEL_UNLOCK = "Unlock"; |
NEEDTOKNOW.UIPANEL_TOOLTIP_ENABLEGROUP = "Show and enable this group of bars"; |
NEEDTOKNOW.UIPANEL_TOOLTIP_FIXEDDURATION = "Set the maximum length of bars for this group (in seconds). Leave empty to set dynamically per bar."; |
NEEDTOKNOW.UIPANEL_TOOLTIP_BARTEXTURE = "Choose the texture graphic for timer bars"; |
NEEDTOKNOW.CMD_RESET = "reset"; |
NEEDTOKNOW.UIPANEL_CONFIGMODE = "Config mode"; |
NEEDTOKNOW.UIPANEL_CONFIGMODE_TOOLTIP = "Unlock timer bars and make them configurable"; |
NEEDTOKNOW.UIPANEL_PLAYMODE = "Play mode"; |
NEEDTOKNOW.UIPANEL_PLAYMODE_TOOLTIP = "Lock and enable timer bars, making them click-through"; |
NEEDTOKNOW.UIPANEL_APPEARANCE = "Appearance"; |
NEEDTOKNOW.UIPANEL_BACKGROUNDCOLOR = "Background color"; |
NEEDTOKNOW.UIPANEL_BARSPACING = "Bar spacing"; |
NEEDTOKNOW.UIPANEL_BARPADDING = "Bar padding"; |
NEEDTOKNOW.UIPANEL_BARTEXTURE = "Bar texture"; |
NEEDTOKNOW.UIPANEL_BARFONT = "Bar font"; |
NEEDTOKNOW.UIPANEL_FONT = "Font"; |
NEEDTOKNOW.BARMENU_TOTEM = "Totem"; |
NEEDTOKNOW.BARMENU_CASTCD = "Spell Cooldown"; |
NEEDTOKNOW.BARMENU_BUFFCD = "Internal Cooldown"; |
NEEDTOKNOW.USABLE_DURATION_DIALOG = "Enter the cooldown duration triggered by the abilities watched by this bar."; |
-- replace with translations, if available |
if ( GetLocale() == "deDE" ) then |
-- Thanks, sp00n & Fxfighter EU-Echsenkessel! |
-- by sp00n and Fxfighter EU-Echsenkessel |
NEEDTOKNOW.BAR_TOOLTIP1 = "NeedToKnow"; |
NEEDTOKNOW.BAR_TOOLTIP2 = "Rechtsklick auf einen Balken für Einstellungen. Mehr Optionen sind im Blizzard Interface vorhanden. Zum Festsetzen und Aktivieren /needtoknow oder /ntk eingeben."; |
NEEDTOKNOW.RESIZE_TOOLTIP = "Klicken und ziehen, um die GröÃe zu ändern"; |
NEEDTOKNOW.CMD_RESET = "reset"; |
elseif ( GetLocale() == "koKR" ) then |
-- Thanks, metalchoir! |
-- by metalchoir |
NEEDTOKNOW.BAR_TOOLTIP1 = "NeedToKnow"; |
NEEDTOKNOW.BAR_TOOLTIP2 = "ì°?�ë¦: ë©ë´ ë¶ë¬ì¤ê¸°\nì¸ë¶ìµì ? �기본 ?�í°í?ï¿½ì¤ ì¤ì ?�ì ê°ë¥\n/ntk ëª ë ¹ì´ë¡ ì ê·¼ í? �ì ëì¨ ì¬ì©ê°ë¥"; |
NEEDTOKNOW.RESIZE_TOOLTIP = "ëëê·¸: ?�기 ë³ê²½"; |
NEEDTOKNOW.CMD_RESET = "ì´ê¸°í"; |
elseif ( GetLocale() == "ruRU" ) then |
-- Thanks, Vlakarados! |
-- by Vlakarados |
NEEDTOKNOW.BAR_TOOLTIP1 = "NeedToKnow"; |
NEEDTOKNOW.BAR_TOOLTIP2 = "Ðлик пÑавой кнопкой мÑÑи по поло?�е дл? �на?�ÑÑойки. ÐолÑÑе на?�ÑÑоек в ÐнÑеÑÑей? / �ÐодиÑикаÑии / NeedToKnow менÑ. Ðве?�Ñи /needtoknow или /ntk дл? �блокиÑовки и вклÑÑени?."; |
NEEDTOKNOW.RESIZE_TOOLTIP = "�ÐликнÑÑÑ Ð¸ ÑаÑиÑÑ Ð´Ð»? �изменени? �ÑазмеÑа"; |
NEEDTOKNOW.BARMENU_ENABLE = "ÐклÑÑиÑÑ Ð¿Ð¾Ð»Ð¾?�Ñ"; |
NEEDTOKNOW.BARMENU_CHOOSENAME = "ÐÑбÑаÑÑ Ð±Ð°ÑÑ/дебаÑÑ Ð´Ð»? �?�лежени?"; |
NEEDTOKNOW.CHOOSENAME_DIALOG = "�ÐведиÑе название баÑÑа/дебаÑÑа дл? �?�лежени?" |
NEEDTOKNOW.BARMENU_CHOOSEUNIT = "ï¿½Ð®Ð½Ð¸Ñ ?�лежени?"; |
NEEDTOKNOW.BARMENU_PLAYER = "�ÐгÑок"; |
NEEDTOKNOW.BAR_TOOLTIP2 = "Ðлик пÑавой кнопкой мÑÑи по полоÑе Ð´Ð»Ñ Ð½Ð°ÑÑÑойки. ÐолÑÑе наÑÑÑоек в ÐнÑеÑÑÐµÐ¹Ñ / ÐодиÑикаÑии / NeedToKnow менÑ. ÐвеÑÑи /needtoknow или /ntk Ð´Ð»Ñ Ð±Ð»Ð¾ÐºÐ¸Ñовки и вклÑÑениÑ."; |
NEEDTOKNOW.RESIZE_TOOLTIP = "ÐликнÑÑÑ Ð¸ ÑаÑиÑÑ Ð´Ð»Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ ÑазмеÑа"; |
NEEDTOKNOW.BARMENU_ENABLE = "ÐклÑÑиÑÑ Ð¿Ð¾Ð»Ð¾ÑÑ"; |
NEEDTOKNOW.BARMENU_CHOOSENAME = "ÐÑбÑаÑÑ Ð±Ð°ÑÑ/дебаÑÑ Ð´Ð»Ñ ÑлежениÑ"; |
NEEDTOKNOW.CHOOSENAME_DIALOG = "ÐведиÑе название баÑÑа/дебаÑÑа Ð´Ð»Ñ ÑлежениÑ" |
NEEDTOKNOW.BARMENU_CHOOSEUNIT = "Ð®Ð½Ð¸Ñ ÑлежениÑ"; |
NEEDTOKNOW.BARMENU_PLAYER = "ÐгÑок"; |
NEEDTOKNOW.BARMENU_TARGET = "ЦелÑ"; |
NEEDTOKNOW.BARMENU_FOCUS = "ФокÑ?"; |
NEEDTOKNOW.BARMENU_PET = "�ÐиÑомеÑ"; |
NEEDTOKNOW.BARMENU_VEHICLE = "СÑед?�Ñво пеÑедвижени?"; |
NEEDTOKNOW.BARMENU_TARGETTARGET = "ï¿½Ð¦ÐµÐ»Ñ Ñели"; |
NEEDTOKNOW.BARMENU_FOCUS = "ФокÑÑ"; |
NEEDTOKNOW.BARMENU_PET = "ÐиÑомеÑ"; |
NEEDTOKNOW.BARMENU_VEHICLE = "СÑедÑÑво пеÑедвижениÑ"; |
NEEDTOKNOW.BARMENU_TARGETTARGET = "Ð¦ÐµÐ»Ñ Ñели"; |
NEEDTOKNOW.BARMENU_BUFFORDEBUFF = "ÐаÑÑ Ð¸Ð»Ð¸ дебаÑÑ?"; |
NEEDTOKNOW.BARMENU_SPELLID = "Ð?�полÑзÑйÑе Ñдо?�ÑовеÑение лиÑно?�Ñи пÑоизноÑени? �по бÑквам"; |
NEEDTOKNOW.BARMENU_SPELLID = "ÐÑполÑзÑйÑе ÑдоÑÑовеÑение лиÑноÑÑи пÑоизноÑÐµÐ½Ð¸Ñ Ð¿Ð¾ бÑквам"; |
NEEDTOKNOW.BARMENU_HELPFUL = "ÐаÑÑ"; |
NEEDTOKNOW.BARMENU_HARMFUL = "ÐебаÑÑ"; |
NEEDTOKNOW.BARMENU_ONLYMINE = "ÐоказÑваÑÑ ÑолÑко наложеннÑе мной"; |
NEEDTOKNOW.BARMENU_BARCOLOR = "Ð¦Ð²ÐµÑ Ð¿Ð¾Ð»Ð¾?�Ñ"; |
NEEDTOKNOW.BARMENU_CLEARSETTINGS = "ÐÑи?�ÑиÑÑ Ð½Ð°?�ÑÑойки"; |
NEEDTOKNOW.UIPANEL_SUBTEXT1 = "ÐÑи на?�ÑÑойки позвол?�ÑÑ Ð½Ð°?�ÑÑоиÑÑ Ð±Ð°ÑÑ/дебаÑÑ Ð¿Ð¾Ð»Ð¾?ï¿½Ñ ?�лежени?."; |
NEEDTOKNOW.UIPANEL_SUBTEXT2 = "�Ðоло?ï¿½Ñ ÑабоÑаÑÑ ÑолÑко когда заблокиÑÐ¾Ð²Ð°Ð½Ñ Ð³ÑÑппÑ. Ðожно мен?�ÑÑ ÑÐ°Ð·Ð¼ÐµÑ Ð¸ пеÑемеÑаÑÑ Ð³ÑÑÐ¿Ð¿Ñ Ð¿Ð¾Ð»Ð¾? �и кликнÑÑÑ Ð¿Ñавой кнопкой мÑÑи дл? �изменени? �индивидÑалÑнÑÑ Ð½Ð°?�ÑÑоек. Ðве?�Ñи '/needtoknow' или '/ntk' to блокиÑовки/ÑазблокиÑовки."; |
NEEDTOKNOW.BARMENU_BARCOLOR = "Ð¦Ð²ÐµÑ Ð¿Ð¾Ð»Ð¾ÑÑ"; |
NEEDTOKNOW.BARMENU_CLEARSETTINGS = "ÐÑиÑÑиÑÑ Ð½Ð°ÑÑÑойки"; |
NEEDTOKNOW.UIPANEL_SUBTEXT1 = "ÐÑи наÑÑÑойки позволÑÑÑ Ð½Ð°ÑÑÑоиÑÑ Ð±Ð°ÑÑ/дебаÑÑ Ð¿Ð¾Ð»Ð¾ÑÑ ÑлежениÑ."; |
NEEDTOKNOW.UIPANEL_SUBTEXT2 = "ÐолоÑÑ ÑабоÑаÑÑ ÑолÑко когда заблокиÑÐ¾Ð²Ð°Ð½Ñ Ð³ÑÑппÑ. Ðожно менÑÑÑ ÑÐ°Ð·Ð¼ÐµÑ Ð¸ пеÑемеÑаÑÑ Ð³ÑÑÐ¿Ð¿Ñ Ð¿Ð¾Ð»Ð¾Ñ Ð¸ кликнÑÑÑ Ð¿Ñавой кнопкой мÑÑи Ð´Ð»Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð¸Ð½Ð´Ð¸Ð²Ð¸Ð´ÑалÑнÑÑ Ð½Ð°ÑÑÑоек. ÐвеÑÑи '/needtoknow' или '/ntk' to блокиÑовки/ÑазблокиÑовки."; |
NEEDTOKNOW.UIPANEL_BARGROUP = "ÐÑÑппа "; |
NEEDTOKNOW.UIPANEL_NUMBERBARS = "ÐолиÑе?�Ñво поло?"; |
NEEDTOKNOW.UIPANEL_FIXEDDURATION = "�Ðак?�ималÑное вÑем? �на поло?�е"; |
NEEDTOKNOW.UIPANEL_BARTEXTURE = "Тек?�ÑÑÑа поло?"; |
NEEDTOKNOW.UIPANEL_BARSPACING = "�ÐÑомежÑÑок поло?"; |
NEEDTOKNOW.UIPANEL_BARPADDING = "�УплоÑнение поло?"; |
NEEDTOKNOW.UIPANEL_BACKGROUNDCOLOR = "ï¿½Ð¦Ð²ÐµÑ Ñона"; |
NEEDTOKNOW.UIPANEL_NUMBERBARS = "ÐолиÑеÑÑво полоÑ"; |
NEEDTOKNOW.UIPANEL_FIXEDDURATION = "ÐакÑималÑное вÑÐµÐ¼Ñ Ð½Ð° полоÑе"; |
NEEDTOKNOW.UIPANEL_BARTEXTURE = "ТекcÑÑÑа полоc"; |
NEEDTOKNOW.UIPANEL_BARSPACING = "ÐÑомежÑÑок полоc"; |
NEEDTOKNOW.UIPANEL_BARPADDING = "УплоÑнение полоc"; |
NEEDTOKNOW.UIPANEL_BACKGROUNDCOLOR = "Ð¦Ð²ÐµÑ Ñона"; |
NEEDTOKNOW.UIPANEL_LOCK = "ÐаблокиÑоваÑÑ"; |
NEEDTOKNOW.UIPANEL_UNLOCK = "РазблокиÑоваÑÑ"; |
NEEDTOKNOW.UIPANEL_TOOLTIP_ENABLEGROUP = "ÐоказаÑÑ Ð¸ вклÑÑиÑÑ ?�ÑÑ Ð³ÑÑÐ¿Ð¿Ñ Ð¿Ð¾Ð»Ð¾?"; |
NEEDTOKNOW.UIPANEL_TOOLTIP_FIXEDDURATION = "�УказаÑÑ Ð¼Ð°Ðº?�ималÑное вÑем? �пÑобега поло?ï¿½Ñ Ð² ?�екÑÐ½Ð´Ð°Ñ . Ð?�ÑавиÑÑ Ð¿Ñ?�ÑÑм дл? �динамиÑе?�кого вÑемени дл? �каждой поло?ï¿½Ñ (полное вÑем? = �длиÑелÑно?�ÑÑ Ð±Ð°ÑÑа/дебаÑÑа)."; |
NEEDTOKNOW.UIPANEL_TOOLTIP_BARTEXTURE = "ÐÑбÑаÑÑ Ñек?�ÑÑÑÑ Ð´Ð»? �поло?."; |
NEEDTOKNOW.CMD_RESET = "�?�бÑо?"; |
NEEDTOKNOW.UIPANEL_TOOLTIP_ENABLEGROUP = "ÐоказаÑÑ Ð¸ вклÑÑиÑÑ ÑÑÑ Ð³ÑÑÐ¿Ð¿Ñ Ð¿Ð¾Ð»Ð¾Ñ"; |
NEEDTOKNOW.UIPANEL_TOOLTIP_FIXEDDURATION = "УказаÑÑ Ð¼Ð°ÐºÑималÑное вÑÐµÐ¼Ñ Ð¿Ñобега полоÑÑ Ð² ÑекÑÐ½Ð´Ð°Ñ . ÐÑÑавиÑÑ Ð¿ÑÑÑÑм Ð´Ð»Ñ Ð´Ð¸Ð½Ð°Ð¼Ð¸ÑеÑкого вÑемени Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ Ð¿Ð¾Ð»Ð¾Ð¹Ñ (полное вÑÐµÐ¼Ñ = длиÑелÑноÑÑÑ Ð±Ð°ÑÑа/дебаÑÑа)."; |
NEEDTOKNOW.UIPANEL_TOOLTIP_BARTEXTURE = "ÐÑбÑаÑÑ ÑекÑÑÑÑÑ Ð´Ð»Ñ Ð¿Ð¾Ð»Ð¾Ñ."; |
NEEDTOKNOW.CMD_RESET = "СбÑоÑ"; |
else |
elseif ( GetLocale() == "zhCN" ) then |
-- by wowui.cn |
NEEDTOKNOW.BAR_TOOLTIP1 = "NeedToKnow"; |
NEEDTOKNOW.BAR_TOOLTIP2 = "å³é®ç¹å»è®¡æ¶æ¡é ç½®. æ´å¤çé项å¨æ´éªçé¢é项èåé. è¾å ¥ /needtoknow æ¥éå®å¹¶å¯ç¨."; |
NEEDTOKNOW.RESIZE_TOOLTIP = "ç¹å»åæå¨æ¥ä¿®æ¹è®¡æ¶æ¡å°ºå¯¸"; |
NEEDTOKNOW.BARMENU_ENABLE = "å¯ç¨è®¡æ¶æ¡"; |
NEEDTOKNOW.BARMENU_CHOOSENAME = "éæ©éè¦è®¡æ¶çBuff/Debuff"; |
NEEDTOKNOW.CHOOSENAME_DIALOG = "è¾å ¥å¨è¿ä¸ªè®¡æ¶æ¡å 计æ¶çBuffæDebuffç精确åå" |
NEEDTOKNOW.BARMENU_CHOOSEUNIT = "éè¦çè§çåä½"; |
NEEDTOKNOW.BARMENU_PLAYER = "ç©å®¶"; |
NEEDTOKNOW.BARMENU_TARGET = "ç®æ "; |
NEEDTOKNOW.BARMENU_FOCUS = "ç¦ç¹"; |
NEEDTOKNOW.BARMENU_PET = "å® ç©"; |
NEEDTOKNOW.BARMENU_VEHICLE = "è½½å ·"; |
NEEDTOKNOW.BARMENU_TARGETTARGET = "ç®æ çç®æ "; |
NEEDTOKNOW.BARMENU_BUFFORDEBUFF = "Buffè¿æ¯Debuff?"; |
NEEDTOKNOW.BARMENU_BUFF = "Buff"; |
NEEDTOKNOW.BARMENU_DEBUFF = "Debuff"; |
NEEDTOKNOW.BARMENU_ONLYMINE = "ä» æ¾ç¤ºèªèº«æ½æ¾ç"; |
NEEDTOKNOW.BARMENU_BARCOLOR = "计æ¶æ¡é¢è²"; |
NEEDTOKNOW.BARMENU_CLEARSETTINGS = "æ¸ é¤è®¾ç½®"; |
NEEDTOKNOW.UIPANEL_SUBTEXT1 = "è¿äºé项å è®¸ä½ èªå®ä¹Buff/Debuff计æ¶æ¡."; |
NEEDTOKNOW.UIPANEL_SUBTEXT2 = "计æ¶æ¡éå®åæè½æ£å¸¸å·¥ä½. å½è§£éæ¶, ä½ å¯ä»¥ç§»å¨æä¿®æ¹è®¡æ¶æ¡åç»ç大å°, å³é®ç¹å»åç¬ç计æ¶æ¡å¯ä»¥è¿è¡æ´å¤ç设置. ä½ ä¹å¯ä»¥è¾å ¥ '/needtoknow' æ '/ntk' æ¥éå®/解é."; |
NEEDTOKNOW.UIPANEL_BARGROUP = "åç» "; |
NEEDTOKNOW.UIPANEL_NUMBERBARS = "计æ¶æ¡æ°é"; |
NEEDTOKNOW.UIPANEL_FIXEDDURATION = "计æ¶æ¡æ大æç»æ¶é´"; |
NEEDTOKNOW.UIPANEL_BARTEXTURE = "计æ¶æ¡æè´¨"; |
NEEDTOKNOW.UIPANEL_BARSPACING = "计æ¶æ¡ç©ºè·"; |
NEEDTOKNOW.UIPANEL_BARPADDING = "计æ¶æ¡é´è·"; |
NEEDTOKNOW.UIPANEL_BACKGROUNDCOLOR = "èæ¯é¢è²"; |
NEEDTOKNOW.UIPANEL_LOCK = "éå®"; |
NEEDTOKNOW.UIPANEL_UNLOCK = "解é"; |
NEEDTOKNOW.UIPANEL_TOOLTIP_ENABLEGROUP = "æ¾ç¤ºå¹¶å¯ç¨è¿ä¸ªåç»ç计æ¶æ¡"; |
NEEDTOKNOW.UIPANEL_TOOLTIP_FIXEDDURATION = "设置è¿ä¸ªåç»è®¡æ¶æ¡çæ大é¿åº¦ (æç§æ°). ç空为æ¯ä¸ªè®¡æ¶æ¡è®¾ç½®ä¸åçæ°å¼."; |
NEEDTOKNOW.UIPANEL_TOOLTIP_BARTEXTURE = "éæ©è®¡æ¶æ¡çæè´¨å¾å."; |
NEEDTOKNOW.CMD_RESET = "éç½®"; |
elseif ( GetLocale() == "zhTW" ) then |
-- by wowui.cn |
NEEDTOKNOW.BAR_TOOLTIP1 = "NeedToKnow"; |
NEEDTOKNOW.BAR_TOOLTIP2 = "Right click bars to configure. More options in the Blizzard interface options menu. Type /needtoknow to lock and enable."; |
NEEDTOKNOW.RESIZE_TOOLTIP = "Click and drag to change size"; |
NEEDTOKNOW.BARMENU_ENABLE = "Enable bar"; |
NEEDTOKNOW.BARMENU_CHOOSENAME = "Choose buff/debuff to time"; |
NEEDTOKNOW.CHOOSENAME_DIALOG = "Enter the name of the buff or debuff to time with this bar" |
NEEDTOKNOW.BARMENU_CHOOSEUNIT = "Unit to monitor"; |
NEEDTOKNOW.BARMENU_PLAYER = "Player"; |
NEEDTOKNOW.BARMENU_TARGET = "Target"; |
NEEDTOKNOW.BARMENU_FOCUS = "Focus"; |
NEEDTOKNOW.BARMENU_PET = "Pet"; |
NEEDTOKNOW.BARMENU_VEHICLE = "Vehicle"; |
NEEDTOKNOW.BARMENU_TARGETTARGET = "Target of Target"; |
NEEDTOKNOW.BARMENU_BUFFORDEBUFF = "Bar Type"; |
NEEDTOKNOW.BARMENU_SPELLID = "Use SpellID"; |
NEEDTOKNOW.BARMENU_HELPFUL = "Buff"; |
NEEDTOKNOW.BARMENU_HARMFUL = "Debuff"; |
NEEDTOKNOW.BARMENU_ONLYMINE = "Only show if cast by self"; |
NEEDTOKNOW.BARMENU_BARCOLOR = "Bar color"; |
NEEDTOKNOW.BARMENU_CLEARSETTINGS = "Clear settings"; |
NEEDTOKNOW.UIPANEL_SUBTEXT1 = "These options allow you to customize the buff/debuff timer bars."; |
NEEDTOKNOW.UIPANEL_SUBTEXT2 = "Bars work when locked. When unlocked, you can move/size bar groups and right click individual bars for more settings. You can also type '/needtoknow' or '/ntk' to lock/unlock."; |
NEEDTOKNOW.UIPANEL_BARGROUP = "Group "; |
NEEDTOKNOW.UIPANEL_NUMBERBARS = "Number of bars"; |
NEEDTOKNOW.UIPANEL_FIXEDDURATION = "Max bar duration"; |
NEEDTOKNOW.UIPANEL_BARTEXTURE = "Bar texture"; |
NEEDTOKNOW.UIPANEL_BARSPACING = "Bar spacing"; |
NEEDTOKNOW.UIPANEL_BARPADDING = "Bar padding"; |
NEEDTOKNOW.UIPANEL_BACKGROUNDCOLOR = "Background color"; |
NEEDTOKNOW.UIPANEL_LOCK = "Lock"; |
NEEDTOKNOW.UIPANEL_UNLOCK = "Unlock"; |
NEEDTOKNOW.UIPANEL_TOOLTIP_ENABLEGROUP = "Show and enable this group of bars"; |
NEEDTOKNOW.UIPANEL_TOOLTIP_FIXEDDURATION = "Set the maximum length of bars for this group (in seconds). Leave empty to set dynamically per bar."; |
NEEDTOKNOW.UIPANEL_TOOLTIP_BARTEXTURE = "Choose the texture graphic for timer bars"; |
NEEDTOKNOW.CMD_RESET = "reset"; |
NEEDTOKNOW.BAR_TOOLTIP2 = "å³éµé»æè¨ææ¢é ç½®. æ´å¤çé¸é å¨æ´éªä»é¢é¸é èå®è£. è¼¸å ¥ /needtoknow ä¾éå®ä¸¦åç¨."; |
NEEDTOKNOW.RESIZE_TOOLTIP = "é»æåæåä¾ä¿®æ¹è¨ææ¢å°ºå¯¸"; |
NEEDTOKNOW.BARMENU_ENABLE = "åç¨è¨ææ¢"; |
NEEDTOKNOW.BARMENU_CHOOSENAME = "é¸æéè¦è¨æçBuff/Debuff"; |
NEEDTOKNOW.CHOOSENAME_DIALOG = "è¼¸å ¥å¨éåè¨ææ¢å §è¨æçBuffæDebuffç精確åå" |
NEEDTOKNOW.BARMENU_CHOOSEUNIT = "éè¦ç£è¦çå®ä½"; |
NEEDTOKNOW.BARMENU_PLAYER = "ç©å®¶"; |
NEEDTOKNOW.BARMENU_TARGET = "ç®æ¨"; |
NEEDTOKNOW.BARMENU_FOCUS = "ç¦é»"; |
NEEDTOKNOW.BARMENU_PET = "寵ç©"; |
NEEDTOKNOW.BARMENU_VEHICLE = "è¼å ·"; |
NEEDTOKNOW.BARMENU_TARGETTARGET = "ç®æ¨çç®æ¨"; |
NEEDTOKNOW.BARMENU_BUFFORDEBUFF = "Bufféæ¯Debuff?"; |
NEEDTOKNOW.BARMENU_BUFF = "Buff"; |
NEEDTOKNOW.BARMENU_DEBUFF = "Debuff"; |
NEEDTOKNOW.BARMENU_ONLYMINE = "å 顯示èªèº«æ½æ¾ç"; |
NEEDTOKNOW.BARMENU_BARCOLOR = "è¨ææ¢é¡è²"; |
NEEDTOKNOW.BARMENU_CLEARSETTINGS = "æ¸ é¤è¨ç½®"; |
NEEDTOKNOW.UIPANEL_SUBTEXT1 = "éäºé¸é å 許妳èªå®ç¾©Buff/Debuffè¨ææ¢."; |
NEEDTOKNOW.UIPANEL_SUBTEXT2 = "è¨ææ¢éå®å¾æè½æ£å¸¸å·¥ä½. ç¶è§£éæ, 妳å¯ä»¥ç§»åæä¿®æ¹è¨ææ¢åçµç大å°, å³éµé»æå®ç¨çè¨ææ¢å¯ä»¥é²è¡æ´å¤çè¨ç½®. 妳ä¹å¯ä»¥è¼¸å ¥ '/needtoknow' æ '/ntk' ä¾éå®/解é."; |
NEEDTOKNOW.UIPANEL_BARGROUP = "åçµ "; |
NEEDTOKNOW.UIPANEL_NUMBERBARS = "è¨ææ¢æ¸é"; |
NEEDTOKNOW.UIPANEL_FIXEDDURATION = "è¨ææ¢æ大æçºæé"; |
NEEDTOKNOW.UIPANEL_BARTEXTURE = "è¨ææ¢æ質"; |
NEEDTOKNOW.UIPANEL_BARSPACING = "è¨ææ¢ç©ºè·"; |
NEEDTOKNOW.UIPANEL_BARPADDING = "è¨ææ¢éè·"; |
NEEDTOKNOW.UIPANEL_BACKGROUNDCOLOR = "èæ¯é¡è²"; |
NEEDTOKNOW.UIPANEL_LOCK = "éå®"; |
NEEDTOKNOW.UIPANEL_UNLOCK = "解é"; |
NEEDTOKNOW.UIPANEL_TOOLTIP_ENABLEGROUP = "顯示並åç¨éååçµçè¨ææ¢"; |
NEEDTOKNOW.UIPANEL_TOOLTIP_FIXEDDURATION = "è¨ç½®éååçµè¨ææ¢çæ大é·åº¦ (æç§æ¸). ç空çºæ¯åè¨ææ¢è¨ç½®ä¸åçæ¸å¼."; |
NEEDTOKNOW.UIPANEL_TOOLTIP_BARTEXTURE = "é¸æè¨ææ¢çæ質åå."; |
NEEDTOKNOW.CMD_RESET = "éç½®"; |
end |
NeedToKnow.GroupEnableButton_OnClick(self); |
</OnClick> |
<OnEnter> |
GameTooltip:SetOwner(this, "ANCHOR_TOPLEFT"); |
GameTooltip:SetOwner(self, "ANCHOR_TOPLEFT"); |
GameTooltip:SetText(NEEDTOKNOW.UIPANEL_TOOLTIP_ENABLEGROUP, nil, nil, nil, nil, 1); |
</OnEnter> |
<OnLeave> |
</Layers> |
<Scripts> |
<OnEnter> |
GameTooltip:SetOwner(this, "ANCHOR_TOPLEFT"); |
GameTooltip:SetOwner(self, "ANCHOR_TOPLEFT"); |
GameTooltip:SetText(NEEDTOKNOW.UIPANEL_TOOLTIP_FIXEDDURATION, nil, nil, nil, nil, 1); |
</OnEnter> |
<OnLeave> |
</Anchor> |
</Anchors> |
</FontString> |
<FontString name="$parentSubText2" inherits="GameFontHighlightSmall" nonspacewrap="false" justifyH="LEFT" justifyV="BOTTOM"> |
<Size> |
<AbsDimension x="0" y="48"/> |
</Size> |
<Anchors> |
<Anchor point="BOTTOMLEFT" relativeTo="$parent" relativePoint="BOTTOMLEFT"> |
<Offset> |
<AbsDimension x="128" y="16"/> |
</Offset> |
</Anchor> |
<Anchor point="RIGHT"> |
<Offset> |
<AbsDimension x="-24" y="0"/> |
</Offset> |
</Anchor> |
</Anchors> |
</FontString> |
<FontString name="$parentNumberbarsLabel" inherits="GameFontNormalSmall"> |
<Anchors> |
<Anchor point="BOTTOM" relativeTo="$parentSubText1" relativePoint="BOTTOMLEFT"> |
</Layers> |
<Scripts> |
<OnLoad> |
this.name = "NeedToKnow"; |
this.default = NeedToKnow.Reset; |
this.cancel = NeedToKnow.Cancel; |
self.name = "NeedToKnow"; |
self.default = NeedToKnow.Reset; |
self.cancel = NeedToKnow.Cancel; |
InterfaceOptions_AddCategory(self); |
NeedToKnow.UIPanel_OnLoad(self); |
</OnLoad> |
NeedToKnow_OldSettings = CopyTable(NeedToKnow_Settings); |
NeedToKnow.UIPanel_OnShow(); |
</OnShow> |
<OnHide> |
NeedToKnow.UIPanel_OnHide(); |
</OnHide> |
</Scripts> |
<Frames> |
<Frame name="$parentGroup1" inherits="NeedToKnow_GroupOptionsTemplate" id="1"> |
</Anchor> |
</Anchors> |
</Frame> |
<Slider name="$parentBarSpacingSlider" inherits="OptionsSliderTemplate"> |
<Button name="$parentConfigModeButton" inherits="UIPanelButtonTemplate"> |
<Size> |
<AbsDimension x="128" y="22"/> |
</Size> |
<Anchors> |
<Anchor point="BOTTOMLEFT" relativeTo="$parent" relativePoint="BOTTOMLEFT"> |
<Offset> |
<AbsDimension x="24" y="24"/> |
</Offset> |
</Anchor> |
</Anchors> |
<Scripts> |
<OnLoad> |
_G[self:GetName().."Text"]:SetText(NEEDTOKNOW.UIPANEL_CONFIGMODE); |
</OnLoad> |
<OnClick> |
PlaySound("gsTitleOptionOK"); |
NeedToKnow_Settings["Locked"] = false; |
NeedToKnow.Update(); |
</OnClick> |
<OnEnter> |
GameTooltip:SetOwner(self, "ANCHOR_RIGHT"); |
GameTooltip:SetText(NEEDTOKNOW.UIPANEL_CONFIGMODE_TOOLTIP, nil, nil, nil, nil, 1); |
</OnEnter> |
<OnLeave function="GameTooltip_Hide"/> |
</Scripts> |
<NormalFont inherits="GameFontNormalSmall"/> |
<HighlightFont inherits="GameFontHighlightSmall"/> |
</Button> |
<Button name="$parentPlayModeButton" inherits="UIPanelButtonTemplate"> |
<Size> |
<AbsDimension x="128" y="22"/> |
</Size> |
<Anchors> |
<Anchor point="BOTTOMRIGHT" relativeTo="$parent" relativePoint="BOTTOMRIGHT"> |
<Offset> |
<AbsDimension x="-24" y="24"/> |
</Offset> |
</Anchor> |
</Anchors> |
<Scripts> |
<OnLoad> |
_G[self:GetName().."Text"]:SetText(NEEDTOKNOW.UIPANEL_PLAYMODE); |
</OnLoad> |
<OnClick> |
PlaySound("gsTitleOptionOK"); |
NeedToKnow_Settings["Locked"] = true; |
NeedToKnow.Update(); |
</OnClick> |
<OnEnter> |
GameTooltip:SetOwner(self, "ANCHOR_RIGHT"); |
GameTooltip:SetText(NEEDTOKNOW.UIPANEL_PLAYMODE_TOOLTIP, nil, nil, nil, nil, 1); |
</OnEnter> |
<OnLeave function="GameTooltip_Hide"/> |
</Scripts> |
<NormalFont inherits="GameFontNormalSmall"/> |
<HighlightFont inherits="GameFontHighlightSmall"/> |
</Button> |
</Frames> |
</Frame> |
<Frame name="InterfaceOptionsNeedToKnowAppearancePanel" hidden="true" parent="InterfaceOptionsFramePanelContainer"> |
<Layers> |
<Layer level="ARTWORK"> |
<FontString name="$parentTitle" text="NeedToKnow" inherits="GameFontNormalLarge" justifyH="LEFT" justifyV="TOP"> |
<Anchors> |
<Anchor point="TOPLEFT"> |
<Offset> |
<AbsDimension x="16" y="-16"/> |
</Offset> |
</Anchor> |
</Anchors> |
</FontString> |
<FontString name="$parentVersion" inherits="GameFontNormalLarge" justifyH="LEFT" justifyV="TOP"> |
<Anchors> |
<Anchor point="LEFT" relativeTo="$parentTitle" relativePoint="RIGHT"> |
<Offset> |
<AbsDimension x="4" y="-0"/> |
</Offset> |
</Anchor> |
</Anchors> |
</FontString> |
<FontString name="$parentSubText1" inherits="GameFontHighlightSmall" nonspacewrap="true" maxLines="3" justifyH="LEFT" justifyV="TOP"> |
<Size> |
<AbsDimension y="24" x="0"/> |
</Size> |
<Anchors> |
<Anchor point="TOPLEFT" relativeTo="$parentTitle" relativePoint="BOTTOMLEFT"> |
<Offset> |
<AbsDimension x="0" y="-8"/> |
</Offset> |
</Anchor> |
<Anchor point="RIGHT"> |
<Offset> |
<AbsDimension x="-24" y="0"/> |
</Offset> |
</Anchor> |
</Anchors> |
</FontString> |
</Layer> |
</Layers> |
<Scripts> |
<OnLoad> |
self.name = NEEDTOKNOW.UIPANEL_APPEARANCE; |
self.parent = "NeedToKnow"; |
self.default = NeedToKnow.Reset; |
-- self.cancel = NeedToKnow.Cancel; |
-- need different way to handle cancel? users might open appearance panel without opening main panel |
InterfaceOptions_AddCategory(self); |
NeedToKnow.UIPanel_Appearance_OnLoad(self) |
</OnLoad> |
<OnShow> |
NeedToKnow.UIPanel_Appearance_OnShow(); |
</OnShow> |
<OnHide> |
</OnHide> |
</Scripts> |
<Frames> |
<Button name="$parentBackgroundColorButton" inherits="NeedToKnow_ColorButtonTemplate"> |
<Anchors> |
<Anchor point="TOPLEFT" relativeTo="$parentSubText1" relativePoint="BOTTOMLEFT"> |
<Offset> |
<AbsDimension x="16" y="-208"/> |
<AbsDimension x="16" y="-16"/> |
</Offset> |
</Anchor> |
</Anchors> |
<Scripts> |
<OnLoad> |
getglobal(self:GetName().."Text"):SetText(NEEDTOKNOW.UIPANEL_BARSPACING); |
_G[self:GetName().."Label"]:SetText(NEEDTOKNOW.UIPANEL_BACKGROUNDCOLOR); |
self:RegisterForClicks("LeftButtonUp"); |
</OnLoad> |
<OnClick> |
NeedToKnow.ChooseColor("BkgdColor"); |
</OnClick> |
</Scripts> |
</Button> |
<Slider name="$parentBarSpacingSlider" inherits="OptionsSliderTemplate"> |
<Anchors> |
<Anchor point="TOPLEFT" relativeTo="$parentBackgroundColorButton" relativePoint="BOTTOMLEFT"> |
<Offset> |
<AbsDimension x="0" y="-32"/> |
</Offset> |
</Anchor> |
</Anchors> |
<Scripts> |
<OnLoad> |
_G[self:GetName().."Text"]:SetText(NEEDTOKNOW.UIPANEL_BARSPACING); |
</OnLoad> |
<OnValueChanged> |
NeedToKnow_Settings["BarSpacing"] = value; |
NeedToKnow.Update(); |
</Anchors> |
<Scripts> |
<OnLoad> |
getglobal(self:GetName().."Text"):SetText(NEEDTOKNOW.UIPANEL_BARPADDING); |
_G[self:GetName().."Text"]:SetText(NEEDTOKNOW.UIPANEL_BARPADDING); |
</OnLoad> |
<OnValueChanged> |
NeedToKnow_Settings["BarPadding"] = value; |
</Scripts> |
</Slider> |
<Button name="$parentBackgroundColorButton" inherits="NeedToKnow_ColorButtonTemplate"> |
<Button name="$parentConfigModeButton" inherits="UIPanelButtonTemplate"> |
<Size> |
<AbsDimension x="128" y="22"/> |
</Size> |
<Anchors> |
<Anchor point="TOPLEFT" relativeTo="$parentGroup4" relativePoint="BOTTOMLEFT"> |
<Anchor point="BOTTOMLEFT" relativeTo="$parent" relativePoint="BOTTOMLEFT"> |
<Offset> |
<AbsDimension x="80" y="-8"/> |
<AbsDimension x="24" y="24"/> |
</Offset> |
</Anchor> |
</Anchors> |
<Scripts> |
<OnLoad> |
self:RegisterForClicks("LeftButtonUp"); |
_G[self:GetName().."Text"]:SetText(NEEDTOKNOW.UIPANEL_CONFIGMODE); |
</OnLoad> |
<OnClick> |
NeedToKnow.ChooseColor("BkgdColor"); |
PlaySound("gsTitleOptionOK"); |
NeedToKnow_Settings["Locked"] = false; |
NeedToKnow.Update(); |
</OnClick> |
<OnEnter> |
GameTooltip:SetOwner(self, "ANCHOR_RIGHT"); |
GameTooltip:SetText(NEEDTOKNOW.UIPANEL_CONFIGMODE_TOOLTIP, nil, nil, nil, nil, 1); |
</OnEnter> |
<OnLeave function="GameTooltip_Hide"/> |
</Scripts> |
<NormalFont inherits="GameFontNormalSmall"/> |
<HighlightFont inherits="GameFontHighlightSmall"/> |
</Button> |
<Button name="$parentLockUnlockButton" inherits="UIPanelButtonTemplate"> |
<Button name="$parentPlayModeButton" inherits="UIPanelButtonTemplate"> |
<Size> |
<AbsDimension x="96" y="22"/> |
<AbsDimension x="128" y="22"/> |
</Size> |
<Anchors> |
<Anchor point="BOTTOMLEFT"> |
<Anchor point="BOTTOMRIGHT" relativeTo="$parent" relativePoint="BOTTOMRIGHT"> |
<Offset> |
<AbsDimension x="16" y="16"/> |
<AbsDimension x="-24" y="24"/> |
</Offset> |
</Anchor> |
</Anchors> |
<Scripts> |
<OnLoad> |
_G[self:GetName().."Text"]:SetText(NEEDTOKNOW.UIPANEL_PLAYMODE); |
</OnLoad> |
<OnClick> |
PlaySound("gsTitleOptionOK"); |
NeedToKnow.LockToggle(); |
NeedToKnow.LockUnlockButton_Update(); |
NeedToKnow_Settings["Locked"] = true; |
NeedToKnow.Update(); |
</OnClick> |
<OnEnter> |
GameTooltip:SetOwner(self, "ANCHOR_RIGHT"); |
GameTooltip:SetText(NEEDTOKNOW.UIPANEL_PLAYMODE_TOOLTIP, nil, nil, nil, nil, 1); |
</OnEnter> |
<OnLeave function="GameTooltip_Hide"/> |
</Scripts> |
<NormalFont inherits="GameFontNormalSmall"/> |
<HighlightFont inherits="GameFontHighlightSmall"/> |
-- -------------------------------------- |
-- TellMeWhen |
-- by Nephthys <Drunken Monkeys> of Hyjal |
-- -------------------------------------- |
NEEDTOKNOW.MAXBARSPACING = 24; |
NEEDTOKNOW.MAXBARPADDING = 12; |
end |
end |
function NeedToKnow.LockToggle() |
if ( NeedToKnow_Settings["Locked"] ) then |
NeedToKnow_Settings["Locked"] = false; |
else |
NeedToKnow_Settings["Locked"] = true; |
end |
NeedToKnow.Show(true); |
PlaySound("UChatScrollButton"); |
NeedToKnow.last_cast = {}; |
NeedToKnow.Update(); |
end |
-- ----------------------- |
-- INTERFACE OPTIONS PANEL |
-- ----------------------- |
-- ----------------------------- |
-- INTERFACE OPTIONS PANEL: MAIN |
-- ----------------------------- |
function NeedToKnow.UIPanel_OnLoad(self) |
local panelName = self:GetName(); |
local versionText = getglobal(panelName.."Version"); |
local subText1 = getglobal(panelName.."SubText1"); |
local subText2 = getglobal(panelName.."SubText2"); |
local numberbarsLabel = getglobal(panelName.."NumberbarsLabel"); |
local fixedDurationLabel = getglobal(panelName.."FixedDurationLabel"); |
local barTextureLabel = getglobal(panelName.."BarTextureSliderLabel"); |
local barFontLabel = getglobal(panelName.."BarFontSliderLabel"); |
local backgroundColorLabel = getglobal(panelName.."BackgroundColorButtonLabel"); |
versionText:SetText(NEEDTOKNOW.VERSION); |
subText1:SetText(NEEDTOKNOW.UIPANEL_SUBTEXT1); |
subText2:SetText(NEEDTOKNOW.UIPANEL_SUBTEXT2); |
local numberbarsLabel = _G[panelName.."NumberbarsLabel"]; |
local fixedDurationLabel = _G[panelName.."FixedDurationLabel"]; |
_G[panelName.."Version"]:SetText(NEEDTOKNOW.VERSION); |
_G[panelName.."SubText1"]:SetText(NEEDTOKNOW.UIPANEL_SUBTEXT1); |
numberbarsLabel:SetText(NEEDTOKNOW.UIPANEL_NUMBERBARS); |
numberbarsLabel:SetWidth(50); |
fixedDurationLabel:SetText(NEEDTOKNOW.UIPANEL_FIXEDDURATION); |
fixedDurationLabel:SetWidth(50); |
barTextureLabel:SetText(NEEDTOKNOW.UIPANEL_BARTEXTURE); |
barFontLabel:SetText("Bar Font"); -- FIXME: Localize |
backgroundColorLabel:SetText(NEEDTOKNOW.UIPANEL_BACKGROUNDCOLOR); |
end |
function NeedToKnow.UIPanel_OnShow() |
NeedToKnow_OldSettings = CopyTable(NeedToKnow_Settings); |
NeedToKnow.bUIPanelVisible = true; |
NeedToKnow.UIPanel_Update() |
NeedToKnow.UIPanel_Update(); |
end |
function NeedToKnow.UIPanel_OnHide() |
NeedToKnow.bUIPanelVisible = nil; |
end |
function NeedToKnow.UIPanel_Update() |
if ( not NeedToKnow.bUIPanelVisible ) then return ; end |
local settings = NeedToKnow_Settings; |
local panelName = "InterfaceOptionsNeedToKnowPanel"; |
if not _G[panelName]:IsVisible() then return end |
local settings = NeedToKnow_Settings; |
for groupID = 1, NEEDTOKNOW.MAXGROUPS do |
NeedToKnow.GroupEnableButton_Update(groupID); |
NeedToKnow.NumberbarsWidget_Update(groupID); |
_G[panelName.."Group"..groupID.."FixedDurationBox"]:SetText(settings["Spec"][NEEDTOKNOW.CURRENTSPEC]["Groups"][groupID]["FixedDuration"] or ""); |
end |
_G[panelName.."BackgroundColorButtonNormalTexture"]:SetVertexColor(unpack(NeedToKnow_Settings["BkgdColor"])); |
local barSpacingSlider = _G[panelName.."BarSpacingSlider"]; |
barSpacingSlider:SetMinMaxValues(0, NEEDTOKNOW.MAXBARSPACING); |
barSpacingSlider:SetValue(settings.BarSpacing); |
local barTextureSlider = _G[panelName.."BarTextureSlider"]; |
barTextureSlider:SetMinMaxValues(1, #(textureList)); |
barTextureSlider:SetValueStep(1); |
getglobal(panelName.."BarTextureSliderLow"):SetText(''); |
getglobal(panelName.."BarTextureSliderHigh"):SetText(''); |
local textureLabel = getglobal(panelName.."BarTextureSliderLabel"); |
textureLabel:SetText(settings["BarTexture"]); |
local fn = textureLabel:GetFont(); |
textureLabel:SetFont(fn, 10); -- There's got to be some way to say this in the xml |
getglobal(panelName.."BarTextureSliderText"):SetText('Bar Texture'); |
for i=1, #(textureList) do |
if textureList[i] == settings.BarTexture then |
barTextureSlider:SetValue(i); |
end |
end |
local barFontSlider = _G[panelName.."BarFontSlider"]; |
barFontSlider:SetMinMaxValues(1, #(fontList)); |
barFontSlider:SetValueStep(1); |
getglobal(panelName.."BarFontSliderLow"):SetText(''); |
getglobal(panelName.."BarFontSliderHigh"):SetText(''); |
getglobal(panelName.."BarFontSliderText"):SetText('Bar Font'); -- Fixme: Localize? What does this do? |
for i=1, #(fontList) do |
if ( LSM:Fetch("font", fontList[i]) == settings.BarFont ) then |
barFontSlider:SetValue(i); |
local lbl = getglobal(panelName.."BarFontSliderLabel"); |
lbl:SetText(fontList[i]); |
lbl:SetFont(fn, 10); |
end |
end |
local barPaddingSlider = _G[panelName.."BarPaddingSlider"]; |
barPaddingSlider:SetMinMaxValues(0, NEEDTOKNOW.MAXBARPADDING); |
barPaddingSlider:SetValue(settings.BarPadding); |
NeedToKnow.LockUnlockButton_Update(); |
end |
function NeedToKnow.GroupEnableButton_Update(groupID) |
function NeedToKnow.NumberbarsWidget_Update(groupID) |
local widgetName = "InterfaceOptionsNeedToKnowPanelGroup"..groupID.."NumberbarsWidget"; |
local text = getglobal(widgetName.."Text"); |
local leftButton = getglobal(widgetName.."LeftButton"); |
local rightButton = getglobal(widgetName.."RightButton"); |
local text = _G[widgetName.."Text"]; |
local leftButton = _G[widgetName.."LeftButton"]; |
local rightButton = _G[widgetName.."RightButton"]; |
local numberBars = NeedToKnow_Settings["Spec"][NEEDTOKNOW.CURRENTSPEC]["Groups"][groupID]["NumberBars"]; |
text:SetText(numberBars); |
leftButton:Enable(); |
NeedToKnow.Update(); |
end |
function NeedToKnow.Reset() |
NeedToKnow_Settings = CopyTable(NEEDTOKNOW.DEFAULTS); |
NeedToKnow_Settings["Spec"][1]["Groups"][1]["Enabled"] = true; |
NeedToKnow_Settings["Spec"][2]["Groups"][1]["Enabled"] = true; |
for groupID = 1, NEEDTOKNOW.MAXGROUPS do |
local group = _G["NeedToKnow_Group"..groupID]; |
group:ClearAllPoints(); |
group:SetPoint("TOPLEFT", "UIParent", "TOPLEFT", 100, -100 - 100*groupID); |
end |
NeedToKnow.Update(); |
NeedToKnow.UIPanel_Update(); |
NeedToKnow.UIPanel_Appearance_Update(); |
end |
function NeedToKnow.Cancel() |
NeedToKnow_Settings = CopyTable(NeedToKnow_OldSettings); |
NeedToKnow.Update(); |
end |
-- ----------------------------------- |
-- INTERFACE OPTIONS PANEL: APPEARANCE |
-- ----------------------------------- |
function NeedToKnow.UIPanel_Appearance_OnLoad(self) |
local panelName = self:GetName(); |
_G[panelName.."Version"]:SetText(NEEDTOKNOW.VERSION); |
_G[panelName.."SubText1"]:SetText(NEEDTOKNOW.UIPANEL_SUBTEXT1); |
end |
function NeedToKnow.UIPanel_Appearance_OnShow() |
NeedToKnow.UIPanel_Appearance_Update(); |
end |
function NeedToKnow.UIPanel_Appearance_Update() |
local panelName = "InterfaceOptionsNeedToKnowAppearancePanel"; |
if not _G[panelName]:IsVisible() then return end |
local settings = NeedToKnow_Settings; |
local barSpacingSlider = _G[panelName.."BarSpacingSlider"]; |
local barPaddingSlider = _G[panelName.."BarPaddingSlider"]; |
-- Mimic the behavior of the context menu, and force the alpha to one in the swatch |
local r,g,b = unpack(settings.BkgdColor); |
_G[panelName.."BackgroundColorButtonNormalTexture"]:SetVertexColor(r,g,b,1); |
barSpacingSlider:SetMinMaxValues(0, NEEDTOKNOW.MAXBARSPACING); |
barSpacingSlider:SetValue(settings.BarSpacing); |
barPaddingSlider:SetMinMaxValues(0, NEEDTOKNOW.MAXBARPADDING); |
barPaddingSlider:SetValue(settings.BarPadding); |
NeedToKnow.UpdateBarTextureDropDown(panelName); |
NeedToKnow.UpdateBarFontDropDown(panelName); |
end |
function NeedToKnow.UpdateBarTextureSlider(info, value) |
getglobal(info:GetName().."Label"):SetText(textureList[value]); |
NeedToKnow_Settings["BarTexture"] = textureList[value]; |
getglobal(info:GetName().."Label"):SetText(fontName); |
NeedToKnow_Settings["BarFont"] = fontPath; |
NeedToKnow.Update(); |
NeedToKnow.UIPanel_Appearance_Update(); |
end |
function NeedToKnow.ChooseColor(variable) |
info = UIDropDownMenu_CreateInfo(); |
info.r, info.g, info.b, info.opacity = unpack(NeedToKnow_Settings[variable]); |
NeedToKnow_Settings[variable][2] = g; |
NeedToKnow_Settings[variable][3] = b; |
NeedToKnow.Update(); |
NeedToKnow.UIPanel_Update(); |
NeedToKnow.UIPanel_Appearance_Update(); |
end |
function NeedToKnow.SetOpacity() |
local variable = ColorPickerFrame.extraInfo; |
NeedToKnow_Settings[variable][4] = 1 - OpacitySliderFrame:GetValue(); |
NeedToKnow.Update(); |
NeedToKnow.UIPanel_Update(); |
NeedToKnow.UIPanel_Appearance_Update(); |
end |
function NeedToKnow.CancelColor(previousValues) |
local variable = ColorPickerFrame.extraInfo; |
NeedToKnow_Settings[variable] = {previousValues.r, previousValues.g, previousValues.b, previousValues.opacity}; |
NeedToKnow.Update(); |
NeedToKnow.UIPanel_Update(); |
NeedToKnow.UIPanel_Appearance_Update(); |
end |
end |
function NeedToKnow.LockUnlockButton_Update() |
local text = getglobal("InterfaceOptionsNeedToKnowPanelLockUnlockButtonText"); |
if ( NeedToKnow_Settings["Locked"] ) then |
text:SetText(NEEDTOKNOW.UIPANEL_UNLOCK); |
else |
text:SetText(NEEDTOKNOW.UIPANEL_LOCK); |
function NeedToKnow.UpdateBarTextureDropDown(panelName) |
local barTextureSlider = _G[panelName.."BarTextureSlider"]; |
barTextureSlider:SetMinMaxValues(1, #(textureList)); |
barTextureSlider:SetValueStep(1); |
getglobal(panelName.."BarTextureSliderLow"):SetText(''); |
getglobal(panelName.."BarTextureSliderHigh"):SetText(''); |
local textureLabel = getglobal(panelName.."BarTextureSliderLabel"); |
textureLabel:SetText(NeedToKnow_Settings["BarTexture"]); |
local fn = textureLabel:GetFont(); |
textureLabel:SetFont(fn, 10); -- There's got to be some way to say this in the xml |
getglobal(panelName.."BarTextureSliderText"):SetText(NEEDTOKNOW.UIPANEL_BARTEXTURE); |
for i=1, #(textureList) do |
if textureList[i] == NeedToKnow_Settings.BarTexture then |
barTextureSlider:SetValue(i); |
end |
end |
end |
function NeedToKnow.LockToggle() |
if ( NeedToKnow_Settings["Locked"] ) then |
NeedToKnow_Settings["Locked"] = false; |
else |
NeedToKnow_Settings["Locked"] = true; |
function NeedToKnow.UpdateBarFontDropDown(panelName) |
local barFontSlider = _G[panelName.."BarFontSlider"]; |
barFontSlider:SetMinMaxValues(1, #(fontList)); |
barFontSlider:SetValueStep(1); |
getglobal(panelName.."BarFontSliderLow"):SetText(''); |
getglobal(panelName.."BarFontSliderHigh"):SetText(''); |
getglobal(panelName.."BarFontSliderText"):SetText(NEEDTOKNOW.UIPANEL_BARFONT); |
for i=1, #(fontList) do |
if ( LSM:Fetch("font", fontList[i]) == NeedToKnow_Settings.BarFont ) then |
barFontSlider:SetValue(i); |
local lbl = getglobal(panelName.."BarFontSliderLabel"); |
lbl:SetText(fontList[i]); |
lbl:SetFont(NeedToKnow_Settings.BarFont, 10); |
end |
end |
NeedToKnow.Show(true); |
PlaySound("UChatScrollButton"); |
NeedToKnow.last_cast = {}; |
NeedToKnow.Update(); |
end |
function NeedToKnow.Reset() |
NeedToKnow_Settings = CopyTable(NEEDTOKNOW.DEFAULTS); |
NeedToKnow_Settings["Spec"][1]["Groups"][1]["Enabled"] = true; |
NeedToKnow_Settings["Spec"][2]["Groups"][1]["Enabled"] = true; |
for groupID = 1, NEEDTOKNOW.MAXGROUPS do |
local group = getglobal("NeedToKnow_Group"..groupID); |
group:ClearAllPoints(); |
group:SetPoint("TOPLEFT", "UIParent", "TOPLEFT", 100, -100 - 100*groupID); |
end |
NeedToKnow.Update(); |
NeedToKnow.UIPanel_Update(); |
end |
function NeedToKnow.Cancel() |
NeedToKnow_Settings = CopyTable(NeedToKnow_OldSettings); |
NeedToKnow.Update(); |
end |
-- -------- |
-- BAR GUI |
-- -------- |
button2 = CANCEL, |
hasEditBox = 1, |
maxLetters = 255, |
OnAccept = function(iconNumber) |
local text = getglobal(this:GetParent():GetName().."EditBox"):GetText(); |
local variable = this:GetParent().variable; |
OnAccept = function(self) |
local text = self.editBox:GetText(); |
local variable = self.variable; |
if ( nil ~= variable ) then |
NeedToKnow.BarMenu_ChooseName(text, variable); |
end |
end, |
EditBoxOnEnterPressed = function(iconNumber) |
local text = getglobal(this:GetParent():GetName().."EditBox"):GetText(); |
local variable = this:GetParent().variable; |
EditBoxOnEnterPressed = function(self) |
local text = self:GetParent().editBox:GetText(); |
local variable = self:GetParent().variable; |
if ( nil ~= variable ) then |
NeedToKnow.BarMenu_ChooseName(text, variable); |
end |
this:GetParent():Hide(); |
self:GetParent():Hide(); |
end, |
EditBoxOnEscapePressed = function() |
this:GetParent():Hide(); |
EditBoxOnEscapePressed = function(self) |
self:GetParent():Hide(); |
end, |
OnHide = function() |
if ( ChatFrameEditBox:IsVisible() ) then |
ChatFrameEditBox:SetFocus(); |
end |
getglobal(this:GetName().."EditBox"):SetText(""); |
OnHide = function(self) |
-- Removed for wow 3.3.5, it seems like there is a focu stack |
-- now that obsoletes this anyway. If not, there isn't a |
-- single ChatFrameEditBox anymore, there's ChatFrame1EditBox etc. |
-- if ( ChatFrameEditBox:IsVisible() ) then |
-- ChatFrameEditBox:SetFocus(); |
-- end |
self.editBox:SetText(""); |
end, |
timeout = 0, |
whileDead = 1, |
Show = { |
{ VariableName = "show_icon", MenuText = "Icon" }, |
{ VariableName = "show_text", MenuText = "Aura Name" }, |
{ VariableName = "show_count", MenuText = "Stack Count" }, |
{ VariableName = "show_time", MenuText = "Time Remaining" }, |
{ VariableName = "show_spark", MenuText = "Spark" }, |
{ VariableName = "show_mypip", MenuText = "Indicator if mine" }, |
{ VariableName = "show_text_user", MenuText = "Override Aura Name", Type = "Dialog", DialogText = "CHOOSE_OVERRIDE_TEXT", Checked = function(settings) return "" ~= settings.show_text_user end }, |
}, |
BlinkSettings = { |
{ VariableName = "blink_enabled", MenuText = NEEDTOKNOW.BARMENU_VCT_ENABLE }, |
{ VariableName = "blink_boss", MenuText = "Blink only for bosses" }, -- FIXME: Localization |
}, |
}; |
NeedToKnow.BarMenu_SubMenus.Opt_HARMFUL = NeedToKnow.BarMenu_SubMenus.Opt_HELPFUL; |
function NeedToKnow.Bar_OnEnter(self) |
local tooltip = getglobal("GameTooltip"); |
GameTooltip_SetDefaultAnchor(tooltip, self); |
tooltip:AddLine(NEEDTOKNOW.BAR_TOOLTIP1, HIGHLIGHT_FONT_COLOR.r, HIGHLIGHT_FONT_COLOR.g, HIGHLIGHT_FONT_COLOR.b, 1); |
tooltip:AddLine(NEEDTOKNOW.BAR_TOOLTIP2, NORMAL_FONT_COLOR.r, NORMAL_FONT_COLOR.g, NORMAL_FONT_COLOR.b, 1); |
tooltip:Show(); |
end |
function NeedToKnow.Bar_OnMouseUp(self, button) |
if ( button == "RightButton" ) then |
PlaySound("UChatScrollButton"); |
function NeedToKnow.BarMenu_AddButton(barSettings, i_desc, i_parent) |
info = UIDropDownMenu_CreateInfo(); |
local type = i_desc["Type"]; |
local item_type = i_desc["Type"]; |
info.text = i_desc["MenuText"]; |
info.value = i_desc["VariableName"]; |
if ( nil == info.value and nil ~= i_desc["Setting"]) then |
info.value = i_parent; |
type = "SetVar"; |
item_type = "SetVar"; |
end; |
local varSettings = barSettings[info.value]; |
if ( not varSettings and (type == "Check" or type == "Color") ) then |
if ( not varSettings and (item_type == "Check" or item_type == "Color") ) then |
print (string.format("NTK: Could not find %s in", info.value), barSettings); |
return |
end |
info.hasArrow = false; |
info.checked = false; |
local b = i_desc["Checked"] |
if b then |
if type(b) == "function" then |
info.checked = b(barSettings) |
else |
info.checked = b |
end |
end |
--info.notCheckable = true; -- Doesn't prevent checking, just formats the line differently |
info.keepShownOnClick = true; |
if ( not type and not text and not info.value ) then |
if ( not item_type and not text and not info.value ) then |
info.func = NeedToKnow.BarMenu_IgnoreToggle; |
info.disabled = true; |
elseif ( nil == type or type == "Check" ) then |
elseif ( nil == item_type or item_type == "Check" ) then |
info.func = NeedToKnow.BarMenu_ToggleSetting; |
info.checked = (nil ~= varSettings and varSettings); |
info.notCheckable = false; |
elseif ( type == "SetVar" ) then |
elseif ( item_type == "SetVar" ) then |
info.func = NeedToKnow.BarMenu_ChooseSetting; |
info.value = i_desc["Setting"]; |
info.checked = (varSettings == info.value); |
info.notCheckable = false; |
info.keepShownOnClick = false; |
elseif ( type == "Submenu" ) then |
elseif ( item_type == "Submenu" ) then |
info.hasArrow = true; |
--info.notCheckable = true; |
-- The above doesn't really do what we want, so do it ourselves |
info.func = NeedToKnow.BarMenu_IgnoreToggle; |
elseif ( type == "Dialog" ) then |
elseif ( item_type == "Dialog" ) then |
info.func = NeedToKnow.BarMenu_ShowNameDialog; |
info.keepShownOnClick = false; |
info.value = {variable = i_desc.VariableName, text = i_desc.DialogText, numeric = i_desc.Numeric }; |
elseif ( type == "Color" ) then |
elseif ( item_type == "Color" ) then |
info.hasColorSwatch = 1; |
info.hasOpacity = true; |
info.r = varSettings.r; |
UIDropDownMenu_AddButton(info, UIDROPDOWNMENU_MENU_LEVEL); |
if ( type == "Color" ) then |
if ( item_type == "Color" ) then |
-- Sadly, extraInfo isn't a field propogated to the button |
-- Code to get the button copied from UIDropDownMenu_AddButton |
local level = UIDROPDOWNMENU_MENU_LEVEL; |
local listFrame = _G["DropDownList"..level]; |
local index = listFrame and (listFrame.numButtons) or 1; |
local listFrameName = listFrame:GetName(); |
local button = getglobal(listFrameName.."Button"..index); |
local button = _G[listFrameName.."Button"..index]; |
button.extraInfo = info.value; |
end |
end |
local button = NeedToKnow.BarMenu_GetItem(NeedToKnow.BarMenu_GetItemLevel(self), self.value); |
if ( button ) then |
local checkName = button:GetName() .. "Check"; |
getglobal(checkName):Hide(); |
_G[checkName]:Hide(); |
button.checked = false; |
end |
end |
local listFrameName = listFrame:GetName(); |
local n = listFrame.numButtons; |
for index=1,n do |
local button = getglobal(listFrameName.."Button"..index); |
local button = _G[listFrameName.."Button"..index]; |
local txt = button.value; |
if ( txt == i_valueName ) then |
return button; |
local button = NeedToKnow.BarMenu_GetItem(i_level, i_valueName); |
if ( button ) then |
local checkName = button:GetName() .. "Check"; |
local check = getglobal(checkName); |
local check = _G[checkName]; |
if ( i_bCheck ) then |
check:Show(); |
button.checked = true; |
NeedToKnow.BarMenu_SubMenus.Options = Opt; |
local button = NeedToKnow.BarMenu_GetItem(1, "Options"); |
if button then |
local arrow = getglobal(button:GetName().."ExpandArrow") |
local arrow = _G[button:GetName().."ExpandArrow"] |
local lbl = "" |
if #Opt == 0 then |
lbl = lbl .. "No " |
local groupID = NeedToKnow.CurrentBar["groupID"]; |
local barID = NeedToKnow.CurrentBar["barID"]; |
local barSettings = NeedToKnow_Settings["Spec"][NEEDTOKNOW.CURRENTSPEC]["Groups"][groupID]["Bars"][barID] |
barSettings[UIDROPDOWNMENU_MENU_VALUE] = this.value; |
barSettings[UIDROPDOWNMENU_MENU_VALUE] = self.value; |
NeedToKnow.Bar_Update(groupID, barID); |
if ( UIDROPDOWNMENU_MENU_VALUE == "BuffOrDebuff" ) then |
end |
function NeedToKnow.BarMenu_ShowNameDialog(self, a1, a2, checked) |
StaticPopupDialogs["NEEDTOKNOW.CHOOSENAME_DIALOG"].text = NEEDTOKNOW[this.value.text]; |
StaticPopupDialogs["NEEDTOKNOW.CHOOSENAME_DIALOG"].text = NEEDTOKNOW[self.value.text]; |
local dialog = StaticPopup_Show("NEEDTOKNOW.CHOOSENAME_DIALOG"); |
dialog.variable = this.value.variable; |
dialog.variable = self.value.variable; |
local edit = getglobal(dialog:GetName().."EditBox"); |
local edit = _G[dialog:GetName().."EditBox"]; |
local groupID = NeedToKnow.CurrentBar["groupID"]; |
local barID = NeedToKnow.CurrentBar["barID"]; |
local barSettings = NeedToKnow_Settings["Spec"][NEEDTOKNOW.CURRENTSPEC]["Groups"][groupID]["Bars"][barID]; |
-- curval = NeedToKnow.ExportSettingsToString(barSettings); |
end |
local numeric = this.value.numeric or false; |
local numeric = self.value.numeric or false; |
-- TODO: There has to be a better way to do this, this has pretty bad user feel |
if ( nil == NeedToKnow.EditBox_Original_OnTextChanged ) then |
NeedToKnow.EditBox_Original_OnTextChanged = edit:GetScript("OnTextChanged"); |
-- ------------- |
function NeedToKnow.Resizebutton_OnEnter(self) |
local tooltip = getglobal("GameTooltip"); |
local tooltip = _G["GameTooltip"]; |
GameTooltip_SetDefaultAnchor(tooltip, self); |
tooltip:AddLine(NEEDTOKNOW.RESIZE_TOOLTIP, NORMAL_FONT_COLOR.r, NORMAL_FONT_COLOR.g, NORMAL_FONT_COLOR.b, 1); |
tooltip:Show(); |
-- group:ClearAllPoints(); |
-- group:SetPoint("TOPLEFT", UIParent, "BOTTOMLEFT", group.oldX, group.oldY); |
self.oldCursorX, self.oldCursorY = GetCursorPosition(UIParent); |
self.oldWidth = getglobal(group:GetName().."Bar1"):GetWidth(); |
self.oldWidth = _G[group:GetName().."Bar1"]:GetWidth(); |
self:SetScript("OnUpdate", NeedToKnow.Sizing_OnUpdate); |
end |
-- calculate & set new scale |
local newYScale = group.oldScale * (cursorY/uiScale - group.oldY*group.oldScale) / (self.oldCursorY/uiScale - group.oldY*group.oldScale) ; |
local newScale = max(0.6, newYScale); |
-- clamp the scale so the group is a whole number of pixels tall |
local bar1 = _G[group:GetName().."Bar1"] |
local barHeight = bar1:GetHeight() |
local newHeight = newScale * barHeight |
newHeight = math.floor(newHeight + 0.0002) |
newScale = newHeight / barHeight |
group:SetScale(newScale); |
-- set new frame coords to keep same on-screen position |
function NeedToKnow.SetWidth(groupID, width) |
for barID = 1, NeedToKnow_Settings["Spec"][NEEDTOKNOW.CURRENTSPEC]["Groups"][groupID]["NumberBars"] do |
local bar = getglobal("NeedToKnow_Group"..groupID.."Bar"..barID); |
local background = getglobal(bar:GetName().."Background"); |
local text = getglobal(bar:GetName().."Text"); |
local bar = _G["NeedToKnow_Group"..groupID.."Bar"..barID]; |
local background = _G[bar:GetName().."Background"]; |
local text = _G[bar:GetName().."Text"]; |
bar:SetWidth(width); |
text:SetWidth(width-60); |
background:SetWidth(width + 2*NeedToKnow_Settings["BarPadding"]); |
NeedToKnow.SizeBackground(bar, bar.settings.show_icon); |
end |
NeedToKnow_Settings["Spec"][NEEDTOKNOW.CURRENTSPEC]["Groups"][groupID]["Width"] = width; -- move this to StopSizing? |
end |