mirror of
https://github.com/brues-code/pfUI.git
synced 2026-10-09 15:10:00 +00:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
721ecce59d | ||
|
|
73b409fb88 | ||
|
|
0665764610 | ||
|
|
3faf06141f | ||
|
|
0c06401ec4 | ||
|
|
c68e48111d | ||
|
|
6936fd894b | ||
|
|
b5277ea457 | ||
|
|
63f0dcbf7a | ||
|
|
0344bff471 | ||
|
|
1510969105 | ||
|
|
6e7361c543 | ||
|
|
2e20a03cbd | ||
|
|
7389c241a4 | ||
|
|
fb5230828c | ||
|
|
7aee348a70 | ||
|
|
2a5f480839 | ||
|
|
23d1ab840c | ||
|
|
13a08b0ea3 | ||
|
|
a2177fbf49 | ||
|
|
9cd83e90ad | ||
|
|
9bcc11e64f | ||
|
|
acab272ec0 | ||
|
|
61c2f996fa | ||
|
|
59ce6d9e74 | ||
|
|
967487e283 | ||
|
|
ab11096b01 | ||
|
|
0402db380a | ||
|
|
68fe7e22db | ||
|
|
a93e9f530c | ||
|
|
3be0585039 | ||
|
|
ee7c729bcb | ||
|
|
62e0d4eb07 | ||
|
|
a4ceb8ba53 | ||
|
|
80b677a6f8 | ||
|
|
f6683b31af |
+50
-22
@@ -548,36 +548,54 @@ end
|
|||||||
-- 'script' [string] the handler to hook
|
-- 'script' [string] the handler to hook
|
||||||
-- 'func' [function] the function that should be added
|
-- 'func' [function] the function that should be added
|
||||||
function HookScript(f, script, func)
|
function HookScript(f, script, func)
|
||||||
local prev = f:GetScript(script)
|
f:HookScript(script, func)
|
||||||
f:SetScript(script, function(a1,a2,a3,a4,a5,a6,a7,a8,a9)
|
end
|
||||||
if prev then prev(a1,a2,a3,a4,a5,a6,a7,a8,a9) end
|
|
||||||
func(a1,a2,a3,a4,a5,a6,a7,a8,a9)
|
function hooksecurefunc(tbl, name, func)
|
||||||
end)
|
if type(tbl) == "string" then tbl, name, func = _G, tbl, name end
|
||||||
|
if not tbl or type(tbl[name]) ~= "function" then return end
|
||||||
|
return _G.hooksecurefunc(tbl, name, func)
|
||||||
end
|
end
|
||||||
|
|
||||||
-- [ HookAddonOrVariable ]
|
-- [ HookAddonOrVariable ]
|
||||||
-- Sets a function to be called automatically once an addon gets loaded
|
-- Sets a function to be called automatically once an addon gets loaded
|
||||||
-- 'addon' [string] addon or variable name
|
-- 'addon' [string] addon or variable name
|
||||||
-- 'func' [function] function that should run
|
-- 'func' [function] function that should run
|
||||||
function pfUI.api.HookAddonOrVariable(addon, func)
|
do
|
||||||
local lurker = CreateFrame("Frame", nil)
|
local lurker
|
||||||
lurker.func = func
|
local pending = {}
|
||||||
lurker:RegisterEvent("ADDON_LOADED")
|
|
||||||
lurker:RegisterEvent("VARIABLES_LOADED")
|
local function ProcessPending()
|
||||||
lurker:RegisterEvent("PLAYER_ENTERING_WORLD")
|
if not lurker.foundConfig then return end
|
||||||
lurker:SetScript("OnEvent",function()
|
for i = table.getn(pending), 1, -1 do
|
||||||
-- only run when config is available
|
local hook = pending[i]
|
||||||
if event == "ADDON_LOADED" and not this.foundConfig then
|
if IsAddOnLoaded(hook.addon) or _G[hook.addon] then
|
||||||
return
|
hook.func()
|
||||||
elseif event == "VARIABLES_LOADED" then
|
table.remove(pending, i)
|
||||||
this.foundConfig = true
|
end
|
||||||
|
end
|
||||||
|
if table.getn(pending) == 0 then
|
||||||
|
lurker:UnregisterAllEvents()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function pfUI.api.HookAddonOrVariable(addon, func)
|
||||||
|
if not lurker then
|
||||||
|
lurker = CreateFrame("Frame", nil)
|
||||||
|
lurker:SetScript("OnEvent", function()
|
||||||
|
if event == "VARIABLES_LOADED" or event == "PLAYER_ENTERING_WORLD" then
|
||||||
|
this.foundConfig = true
|
||||||
|
end
|
||||||
|
ProcessPending()
|
||||||
|
end)
|
||||||
end
|
end
|
||||||
|
|
||||||
if IsAddOnLoaded(addon) or _G[addon] then
|
table.insert(pending, { addon = addon, func = func })
|
||||||
this:func()
|
lurker:RegisterEvent("ADDON_LOADED")
|
||||||
this:UnregisterAllEvents()
|
lurker:RegisterEvent("VARIABLES_LOADED")
|
||||||
end
|
lurker:RegisterEvent("PLAYER_ENTERING_WORLD")
|
||||||
end)
|
ProcessPending()
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
-- [ QueueFunction ]
|
-- [ QueueFunction ]
|
||||||
@@ -1559,6 +1577,16 @@ end
|
|||||||
-- 'arg1' [string]
|
-- 'arg1' [string]
|
||||||
-- return object
|
-- return object
|
||||||
function pfUI.api.GetNoNameObject(frame, objtype, layer, arg1, arg2)
|
function pfUI.api.GetNoNameObject(frame, objtype, layer, arg1, arg2)
|
||||||
|
-- A nil/non-frame parent otherwise dies on frame:GetRegions()/:GetChildren()
|
||||||
|
-- below, and the traceback stops here — useless, since all callers share this
|
||||||
|
-- line. pfUI shadows Lua's `error` (dropping the level arg and not throwing),
|
||||||
|
-- so fold the caller frame in via debugstack to name the offending skin, then
|
||||||
|
-- bail so we don't fall through and crash on frame:GetRegions() anyway.
|
||||||
|
if type(frame) ~= "table" or not frame.GetRegions then
|
||||||
|
error("GetNoNameObject: invalid parent frame\n" .. debugstack(2, 3, 0))
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
local arg1 = arg1 and gsub(arg1, "([%+%-%*%(%)%?%[%]%^])", "%%%1")
|
local arg1 = arg1 and gsub(arg1, "([%+%-%*%(%)%?%[%]%^])", "%%%1")
|
||||||
local arg2 = arg2 and gsub(arg2, "([%+%-%*%(%)%?%[%]%^])", "%%%1")
|
local arg2 = arg2 and gsub(arg2, "([%+%-%*%(%)%?%[%]%^])", "%%%1")
|
||||||
|
|
||||||
|
|||||||
+9
-1
@@ -196,6 +196,8 @@ function pfUI:LoadConfig()
|
|||||||
pfUI:UpdateConfig("loot", nil, "rollannounce", "0")
|
pfUI:UpdateConfig("loot", nil, "rollannounce", "0")
|
||||||
pfUI:UpdateConfig("loot", nil, "raritytimer", "1")
|
pfUI:UpdateConfig("loot", nil, "raritytimer", "1")
|
||||||
|
|
||||||
|
pfUI:UpdateConfig("loothistory", nil, "autoshow", "0")
|
||||||
|
|
||||||
pfUI:UpdateConfig("unitframes", nil, "disable", "0")
|
pfUI:UpdateConfig("unitframes", nil, "disable", "0")
|
||||||
pfUI:UpdateConfig("unitframes", nil, "pastel", "1")
|
pfUI:UpdateConfig("unitframes", nil, "pastel", "1")
|
||||||
pfUI:UpdateConfig("unitframes", nil, "custom", "0")
|
pfUI:UpdateConfig("unitframes", nil, "custom", "0")
|
||||||
@@ -714,9 +716,11 @@ function pfUI:LoadConfig()
|
|||||||
pfUI:UpdateConfig("castbar", "player", "txtleftoffy", "0")
|
pfUI:UpdateConfig("castbar", "player", "txtleftoffy", "0")
|
||||||
pfUI:UpdateConfig("castbar", "player", "showlag", "0")
|
pfUI:UpdateConfig("castbar", "player", "showlag", "0")
|
||||||
pfUI:UpdateConfig("castbar", "player", "showrank", "0")
|
pfUI:UpdateConfig("castbar", "player", "showrank", "0")
|
||||||
pfUI:UpdateConfig("castbar", "player", "mergetradeskill", "1")
|
pfUI:UpdateConfig("castbar", "player", "mergetradeskill", "0")
|
||||||
pfUI:UpdateConfig("castbar", "player", "txtrightoffx", "0")
|
pfUI:UpdateConfig("castbar", "player", "txtrightoffx", "0")
|
||||||
pfUI:UpdateConfig("castbar", "player", "txtrightoffy", "0")
|
pfUI:UpdateConfig("castbar", "player", "txtrightoffy", "0")
|
||||||
|
pfUI:UpdateConfig("castbar", "player", "namealign", "LEFT")
|
||||||
|
pfUI:UpdateConfig("castbar", "player", "timealign", "RIGHT")
|
||||||
pfUI:UpdateConfig("castbar", "target", "hide_pfui", "0")
|
pfUI:UpdateConfig("castbar", "target", "hide_pfui", "0")
|
||||||
pfUI:UpdateConfig("castbar", "target", "width", "-1")
|
pfUI:UpdateConfig("castbar", "target", "width", "-1")
|
||||||
pfUI:UpdateConfig("castbar", "target", "height", "-1")
|
pfUI:UpdateConfig("castbar", "target", "height", "-1")
|
||||||
@@ -729,6 +733,8 @@ function pfUI:LoadConfig()
|
|||||||
pfUI:UpdateConfig("castbar", "target", "showrank", "0")
|
pfUI:UpdateConfig("castbar", "target", "showrank", "0")
|
||||||
pfUI:UpdateConfig("castbar", "target", "txtrightoffx", "0")
|
pfUI:UpdateConfig("castbar", "target", "txtrightoffx", "0")
|
||||||
pfUI:UpdateConfig("castbar", "target", "txtrightoffy", "0")
|
pfUI:UpdateConfig("castbar", "target", "txtrightoffy", "0")
|
||||||
|
pfUI:UpdateConfig("castbar", "target", "namealign", "LEFT")
|
||||||
|
pfUI:UpdateConfig("castbar", "target", "timealign", "RIGHT")
|
||||||
pfUI:UpdateConfig("castbar", "focus", "hide_pfui", "0")
|
pfUI:UpdateConfig("castbar", "focus", "hide_pfui", "0")
|
||||||
pfUI:UpdateConfig("castbar", "focus", "width", "-1")
|
pfUI:UpdateConfig("castbar", "focus", "width", "-1")
|
||||||
pfUI:UpdateConfig("castbar", "focus", "height", "-1")
|
pfUI:UpdateConfig("castbar", "focus", "height", "-1")
|
||||||
@@ -741,6 +747,8 @@ function pfUI:LoadConfig()
|
|||||||
pfUI:UpdateConfig("castbar", "focus", "showrank", "0")
|
pfUI:UpdateConfig("castbar", "focus", "showrank", "0")
|
||||||
pfUI:UpdateConfig("castbar", "focus", "txtrightoffx", "0")
|
pfUI:UpdateConfig("castbar", "focus", "txtrightoffx", "0")
|
||||||
pfUI:UpdateConfig("castbar", "focus", "txtrightoffy", "0")
|
pfUI:UpdateConfig("castbar", "focus", "txtrightoffy", "0")
|
||||||
|
pfUI:UpdateConfig("castbar", "focus", "namealign", "LEFT")
|
||||||
|
pfUI:UpdateConfig("castbar", "focus", "timealign", "RIGHT")
|
||||||
pfUI:UpdateConfig("castbar", nil, "use_unitfonts", "0")
|
pfUI:UpdateConfig("castbar", nil, "use_unitfonts", "0")
|
||||||
|
|
||||||
pfUI:UpdateConfig("tooltip", nil, "position", "chat")
|
pfUI:UpdateConfig("tooltip", nil, "position", "chat")
|
||||||
|
|||||||
+3
-5
@@ -569,7 +569,7 @@ end
|
|||||||
-- 'frame' [frame] the modelframe that should be used
|
-- 'frame' [frame] the modelframe that should be used
|
||||||
function pfUI.api.EnableClickRotate(frame)
|
function pfUI.api.EnableClickRotate(frame)
|
||||||
frame:EnableMouse(true)
|
frame:EnableMouse(true)
|
||||||
HookScript(frame, "OnUpdate", function()
|
frame:HookScript("OnUpdate", function()
|
||||||
if this.rotate then
|
if this.rotate then
|
||||||
local x,_ = GetCursorPosition()
|
local x,_ = GetCursorPosition()
|
||||||
if this.curx > x then
|
if this.curx > x then
|
||||||
@@ -582,14 +582,14 @@ function pfUI.api.EnableClickRotate(frame)
|
|||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
|
|
||||||
HookScript(frame, "OnMouseDown", function()
|
frame:HookScript("OnMouseDown", function()
|
||||||
if arg1 == "LeftButton" then
|
if arg1 == "LeftButton" then
|
||||||
this.rotate = true
|
this.rotate = true
|
||||||
this.curx, this.cury = GetCursorPosition()
|
this.curx, this.cury = GetCursorPosition()
|
||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
|
|
||||||
HookScript(frame, "OnMouseUp", function()
|
frame:HookScript("OnMouseUp", function()
|
||||||
this.rotate, this.curx, this.cury = nil, nil, nil
|
this.rotate, this.curx, this.cury = nil, nil, nil
|
||||||
end)
|
end)
|
||||||
end
|
end
|
||||||
@@ -615,7 +615,6 @@ function pfUI.api.SetHighlight(frame, cr, cg, cb)
|
|||||||
frame.rr, frame.rg, frame.rb, frame.ra = GetStringColor(pfUI_config.appearance.border.color)
|
frame.rr, frame.rg, frame.rb, frame.ra = GetStringColor(pfUI_config.appearance.border.color)
|
||||||
|
|
||||||
if not frame.pfEnterLeave then
|
if not frame.pfEnterLeave then
|
||||||
if not frame.HookScript then frame.HookScript = HookScript end
|
|
||||||
local enter, leave = frame:GetScript("OnEnter"), frame:GetScript("OnLeave")
|
local enter, leave = frame:GetScript("OnEnter"), frame:GetScript("OnLeave")
|
||||||
|
|
||||||
if enter then
|
if enter then
|
||||||
@@ -844,7 +843,6 @@ function pfUI.api.SkinScrollbar(frame, always)
|
|||||||
-- always show parent frame
|
-- always show parent frame
|
||||||
if always then
|
if always then
|
||||||
RunOOC(function()
|
RunOOC(function()
|
||||||
if not parent.HookScript then parent.HookScript = HookScript end
|
|
||||||
parent:HookScript("OnHide", function() this:Show() end)
|
parent:HookScript("OnHide", function() this:Show() end)
|
||||||
end)
|
end)
|
||||||
end
|
end
|
||||||
|
|||||||
+6
-14
@@ -19,10 +19,9 @@ function pfUI.uf.ClearGuidTracking()
|
|||||||
end
|
end
|
||||||
|
|
||||||
-- slash command to toggle unitframe test mode
|
-- slash command to toggle unitframe test mode
|
||||||
_G.SLASH_PFTEST1, _G.SLASH_PFTEST2 = "/pftest", "/pfuftest"
|
pfUI.api.RegisterSlashCommand("PFTEST", { "/pftest", "/pfuftest" }, function()
|
||||||
_G.SlashCmdList.PFTEST = function()
|
|
||||||
pfUI.uf.showall = not pfUI.uf.showall
|
pfUI.uf.showall = not pfUI.uf.showall
|
||||||
end
|
end, true)
|
||||||
|
|
||||||
-- HoT buff indicators that need name verification because their icons are
|
-- HoT buff indicators that need name verification because their icons are
|
||||||
-- reused by other spells. Maps icon (lowercased) → expected aura name +
|
-- reused by other spells. Maps icon (lowercased) → expected aura name +
|
||||||
@@ -778,8 +777,7 @@ function pfUI.uf:UpdateConfig()
|
|||||||
invert_v * (i-1-row*perrow)*(multiply*default_border + f.config.buffsize + 1),
|
invert_v * (i-1-row*perrow)*(multiply*default_border + f.config.buffsize + 1),
|
||||||
invert_h * (row*(multiply*default_border + f.config.buffsize + 1) + (multiply*default_border + 1)))
|
invert_h * (row*(multiply*default_border + f.config.buffsize + 1) + (multiply*default_border + 1)))
|
||||||
|
|
||||||
f.buffs[i]:SetWidth(f.config.buffsize)
|
f.buffs[i]:SetSize(f.config.buffsize, f.config.buffsize)
|
||||||
f.buffs[i]:SetHeight(f.config.buffsize)
|
|
||||||
|
|
||||||
-- Create CD frame if it doesn't exist
|
-- Create CD frame if it doesn't exist
|
||||||
if not f.buffs[i].cd then
|
if not f.buffs[i].cd then
|
||||||
@@ -808,11 +806,7 @@ function pfUI.uf:UpdateConfig()
|
|||||||
|
|
||||||
-- immediately show/hide existing cooldown text
|
-- immediately show/hide existing cooldown text
|
||||||
if f.buffs[i].cd.pfCooldownText then
|
if f.buffs[i].cd.pfCooldownText then
|
||||||
if cooldown_text == 1 then
|
f.buffs[i].cd.pfCooldownText:SetShown(cooldown_text == 1)
|
||||||
f.buffs[i].cd.pfCooldownText:Show()
|
|
||||||
else
|
|
||||||
f.buffs[i].cd.pfCooldownText:Hide()
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
f.buffs[i].id = i
|
f.buffs[i].id = i
|
||||||
@@ -3020,9 +3014,7 @@ end
|
|||||||
-- ============================================================================
|
-- ============================================================================
|
||||||
-- Slash Commands for Stats Frame
|
-- Slash Commands for Stats Frame
|
||||||
-- ============================================================================
|
-- ============================================================================
|
||||||
_G.SLASH_PFUISTATS1 = "/pfuistats"
|
pfUI.api.RegisterSlashCommand("PFUISTATS", { "/pfuistats", "/ufstats" }, function(msg)
|
||||||
_G.SLASH_PFUISTATS2 = "/ufstats"
|
|
||||||
_G.SlashCmdList["PFUISTATS"] = function(msg)
|
|
||||||
msg = string.lower(msg or "")
|
msg = string.lower(msg or "")
|
||||||
|
|
||||||
if not pfUI.uf.stats then
|
if not pfUI.uf.stats then
|
||||||
@@ -3074,4 +3066,4 @@ _G.SlashCmdList["PFUISTATS"] = function(msg)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end, true)
|
||||||
@@ -28,17 +28,6 @@ ACTIONBAR_SECURE_TEMPLATE_BUTTON = nil
|
|||||||
UNITFRAME_SECURE_TEMPLATE = nil
|
UNITFRAME_SECURE_TEMPLATE = nil
|
||||||
|
|
||||||
--[[ Vanilla API Extensions ]]--
|
--[[ Vanilla API Extensions ]]--
|
||||||
-- Safe post-hook helper. The global `hooksecurefunc` belongs to ClassicAPI
|
|
||||||
-- (its C implementation); this wrapper only adds pfUI's missing-target guard:
|
|
||||||
-- ClassicAPI errors when target[name] isn't a function, whereas a lot of our
|
|
||||||
-- call sites hook optional/late-loaded frames and rely on a silent no-op.
|
|
||||||
-- Normalizes the string form, skips when the target is absent, then delegates
|
|
||||||
-- to the C version (uncapped args, callback-pcall, taint parity).
|
|
||||||
function pfUI.hooksecurefunc(tbl, name, func)
|
|
||||||
if type(tbl) == "string" then tbl, name, func = _G, tbl, name end
|
|
||||||
if not tbl or type(tbl[name]) ~= "function" then return end
|
|
||||||
return _G.hooksecurefunc(tbl, name, func)
|
|
||||||
end
|
|
||||||
|
|
||||||
do -- GetItemInfo
|
do -- GetItemInfo
|
||||||
local name, link, rarity, minlevel, itype, isubtype, stack
|
local name, link, rarity, minlevel, itype, isubtype, stack
|
||||||
|
|||||||
Vendored
-55
@@ -2417,58 +2417,3 @@ pfSellData = {
|
|||||||
[23725]=2600, [23727]=2600, [23728]=2600, [23743]=11, [24071]=393470, [24101]=400000,
|
[23725]=2600, [23727]=2600, [23728]=2600, [23743]=11, [24071]=393470, [24101]=400000,
|
||||||
[24102]=400000, [24222]=221054, [24231]=211, [24232]=900, [24281]=1210, [24282]=18250,
|
[24102]=400000, [24222]=221054, [24231]=211, [24232]=900, [24281]=1210, [24282]=18250,
|
||||||
[24283]=152345, [24358]=365815 }
|
[24283]=152345, [24358]=365815 }
|
||||||
pfMapOverlayData = {
|
|
||||||
["Alterac"] = {"CHILLWINDPOINT:308:250:660:261", "CORRAHNSDAGGER:173:277:411:391", "CRUSHRIDGEHOLD:269:230:339:167:283:0", "DALARAN:277:283:39:275", "DANDREDSFOLD:273:224:282:0", "GALLOWSCORNER:183:185:415:287", "GAVINSNAZE:140:161:235:486", "GROWLESSCAVE:175:156:327:382", "LORDAMEREINTERNMENTCAMP:315:255:55:413", "MISTYSHORE:204:268:207:139", "RUINSOFALTERAC:252:249:274:201", "RAVENHOLDTMANOR:217:165:737:452", "SOFERASNAZE:241:312:469:311", "STRAHNBRAD:355:289:555:110", "THEHEADLAND:142:187:325:481", "THEUPLANDS:219:183:470:84",},
|
|
||||||
["AlteracValley"] = {"DUNBALDAR:254:228:356:18:3299:3318", "FROSTWOLFKEEP:220:278:408:382:3299:3318", "ICEBLOODGARRISON:286:288:343:179:3299:3318",},
|
|
||||||
["Arathi"] = {"BOULDERFISTHALL:190:214:442:371", "BOULDERGOR:222:214:244:167", "CIRCLEOFEASTBINDING:140:213:568:125", "CIRCLEOFINNERBINDING:186:164:302:321", "CIRCLEOFOUTERBINDING:149:137:429:301", "CIRCLEOFWESTBINDING:156:189:152:71", "DABYRIESFARMSTEAD:160:171:482:197", "FALDIRSCOVE:247:197:180:428", "FARWELLSTEAD:112:128:267:31", "GOSHEKFARM:208:177:539:284", "HAMMERFALL:182:235:665:128:318:0", "NORTHFOLDMANOR:202:205:204:119", "REFUGEPOINT:157:189:380:214", "RUINSOFZULRASAZ:160:160:346:29", "STROMGARDEKEEP:220:213:122:295", "THANDOLSPAN:175:198:369:424", "THORADINSWALL:173:225:103:148", "WITHERBARKVILLAGE:197:194:566:339", "WILDTUSKVILLAGE:183:102:379:145",},
|
|
||||||
["Ashenvale"] = {"ASTRANAAR:190:173:281:259", "BOUGHSHADOW:140:190:862:157", "FALLENSKYLAKE:219:190:555:433:432:0", "FELFIREHILL:241:244:720:349", "FIRESCARSHRINE:153:161:194:332", "FORESTSONG:162:142:817:232", "IRISLAKE:185:190:401:226", "LAKEFALATHIM:115:181:138:144", "MAESTRASPOST:198:290:216:46", "MYSTRALLAKE:262:228:363:354:420:2359", "NIGHTRUN:212:244:604:263:431:0", "RAYNEWOODRETREAT:165:235:527:243", "SATYRNAAR:163:172:702:230", "THEHOWLINGVALE:196:172:471:147", "THERUINSOFSTARDUST:141:135:268:382", "THESHRINEOFAESSINA:205:179:113:268", "THEZORAMSTRAND:228:235:26:33", "THISTLEFURVILLAGE:243:184:210:164", "WARSONGLUMBERCAMP:185:146:804:319",},
|
|
||||||
["Aszhara"] = {"BAYOFSTORMS:257:285:486:208", "BITTERREACHES:231:173:651:46", "FORLORNRIDGE:210:247:198:373", "HALDARRENCAMPMENT:191:138:83:339", "JAGGEDREEF:556:153:373:9", "LAKEMENNAR:301:184:302:437", "LEGASHENCAMPMENT:224:131:484:49", "RAVENCRESTMONUMENT:227:115:559:506", "RUINSOFELDARATH:251:268:246:228", "SHADOWSONGSHRINE:213:170:43:428", "SOUTHRIDGEBEACH:355:207:397:360", "TEMPLEOFARKKORAN:177:187:689:160", "THALASSIANBASECAMP:224:144:507:126", "THERUINEDREACHES:384:116:403:549", "THESHATTEREDSTRAND:148:199:412:202", "TIMBERMAWHOLD:209:194:258:175", "TOWEROFELDARA:107:145:824:114", "URSOLAN:219:212:327:94", "VALORMOK:201:158:93:236",},
|
|
||||||
["Badlands"] = {"AGMONDSEND:249:256:354:396", "ANGORFORTRESS:186:241:327:101", "APOCRYPHANSREST:251:195:20:315", "CAMPBOFF:195:207:506:361", "CAMPCAGG:247:205:15:432:347:0", "CAMPKOSH:214:211:556:56", "CRYSTALLINEPINNACLE:140:155:609:337", "DUSTWINDGULCH:229:190:506:216", "HAMMERTOESDIGSITE:185:177:455:131", "KARGATH:232:245:0:154", "LETHLORRAVINE:344:395:627:173", "MIRAGEFLATS:276:229:153:387", "REDBRANDSDIGSITE:325:155:496:454", "RUINSOFCORTHAN:210:200:203:124", "SCALEBANERIDGE:205:179:751:142", "THEDUSTBOWL:253:266:166:203", "THEMAKERSTERRACE:230:172:399:16:1517:0", "VALLEYOFFANGS:215:215:358:265",},
|
|
||||||
["Balor"] = {"BILGERATCOMPOUND:174:141:323:76", "CROAKINGPLATEAU:371:154:397:201", "GRAHANESTATE:93:116:306:392", "GULLWINGWRECKAGE:110:105:221:34", "LANGSTONORCHARD:102:129:410:346", "RUINSOFBREEZEHAVEN:163:141:450:256", "SCURRYINGTHICKET:144:158:283:161", "SIOUTPOST:175:232:597:389", "SORROWMORELAKE:174:140:303:277", "STORMBREAKERPOINT:243:197:583:212", "STORMREAVERSPIRE:151:119:491:429", "STORMWROUGHTCASTLE:202:166:458:332", "TREACHEROUSCRAGS:243:171:381:457", "VANDERFARMSTEAD:146:140:330:372", "WINDROCKCLIFFS:192:279:256:303",},
|
|
||||||
["Barrens"] = {"AGAMAGOR:183:173:348:242", "ANCHORSEDGE:118:83:690:300", "BAELMODAN:120:123:435:482", "BLACKTHORNRIDGE:140:123:340:465", "BOULDERLODEMINE:109:105:560:0", "BRAMBLESCAR:112:152:446:304", "CAMPTAURAJO:130:113:370:355", "DREADMISTPEAK:121:93:423:68", "FARWATCHPOST:85:152:572:58", "FIELDOFGIANTS:194:137:363:410", "GROLDOMFARM:112:107:499:67", "HONORSSTAND:128:128:306:130", "LUSHWATEROASIS:160:169:372:186", "NORTHWATCHFOLD:134:107:533:310", "RAPTORGROUNDS:101:99:512:299", "RATCHET:116:118:556:190", "RAZORFENDOWNS:137:106:414:562", "RAZORFENKRAUL:116:123:345:539", "THECROSSROADS:142:140:436:127", "THEDRYHILLS:185:134:324:36", "THEFORGOTTENPOOLS:104:116:391:120", "THEMERCHANTCOAST:80:123:584:249", "THEMORSHANRAMPART:118:91:418:0", "THESLUDGEFEN:153:113:463:0", "THESTAGNANTOASIS:147:126:484:211", "THORNHILL:128:120:502:123",},
|
|
||||||
["BlackstoneIsland"] = {"BLACKASHCOALPITS:303:474:209:178", "BLACKASHMINE:251:204:397:222", "GAZZIKSWORKSHOP:329:247:439:403", "RUSTGATELUMBERYARD:217:245:551:241", "RUSTGATERIDGE:396:226:372:360", "THEWATERHOLE:386:239:382:43", "VENTURECOSLUMS:270:192:498:129",},
|
|
||||||
["BlastedLands"] = {"ALTAROFSTORMS:169:142:318:141", "DARKPORTAL:254:208:460:265", "DREADMAULHOLD:200:171:351:21", "DREADMAULPOST:228:183:370:204", "GARRISONARMORY:155:192:480:15", "NETHERGARDEKEEP:169:178:567:35", "RISEOFTHEDEFILER:150:131:414:131", "SERPENTSCOIL:211:155:510:148", "THETAINTEDSCAR:370:438:220:184",},
|
|
||||||
["BurningSteppes"] = {"ALTAROFSTORMS:215:210:41:114", "BLACKROCKMOUNTAIN:249:272:178:104", "BLACKROCKPASS:259:299:597:285", "BLACKROCKSTRONGHOLD:232:258:342:120", "DRACODAR:405:309:61:262", "DREADMAULROCK:203:214:717:174", "MORGANSVIGIL:287:265:715:311", "PILLAROFASH:313:261:382:289", "RUINSOFTHAURISSAN:258:275:521:105", "TERRORWINGPATH:271:296:730:52",},
|
|
||||||
["Darkshore"] = {"AMETHARAN:163:178:340:323", "AUBERDINE:134:179:323:191", "BASHALARAN:153:171:379:199", "CLIFFSPRINGRIVER:205:161:391:112:445:0", "GROVEOFTHEANCIENTS:180:138:314:436", "REMTRAVELSEXCAVATION:148:164:245:504", "RUINSOFMATHYSTRA:176:205:519:3", "THEMASTERSGLAIVE:146:139:346:529", "TOWEROFALTHALAXX:142:159:484:110",},
|
|
||||||
["DeadwindPass"] = {"DEADMANSCROSSING:368:353:257:81:2938:0", "KARAZHAN:287:234:277:342", "THEVICE:254:257:433:305",},
|
|
||||||
["Desolace"] = {"ETHELRETHOR:189:237:318:68", "GELKISVILLAGE:181:235:300:433", "KODOGRAVEYARD:253:237:396:251", "KOLKARVILLAGE:206:208:615:221", "KORMEKSHUT:156:147:562:187", "MAGRAMVILLAGE:182:272:606:373", "MANNOROCCOVEN:270:271:408:385", "NIJELSPOINT:188:246:561:0", "RANAZJARISLE:88:89:248:11", "SARGERON:274:237:632:38", "SHADOWBREAKRAVINE:190:181:698:454", "SHADOWPREYVILLAGE:215:218:175:395", "TETHRISARAN:185:137:440:0", "THUNDERAXEFORTRESS:174:207:455:108", "VALLEYOFSPEARS:234:274:217:221",},
|
|
||||||
["DunMorogh"] = {"AMBERSTILLRANCH:105:104:582:288", "ANVILMAR:209:159:167:414:77:0", "BREWNALLVILLAGE:94:102:263:256", "CHILLBREEZEVALLEY:160:113:281:304", "COLDRIDGEPASS:134:123:300:387", "FROSTMANEHOLD:112:118:225:291", "GNOMERAGON:158:176:178:164", "GOLBOLARQUARRY:144:149:619:301", "HELMSBEDLAKE:131:153:706:284:716:0", "ICEFLOWLAKE:117:167:286:173", "IRONFORGE:291:187:414:166", "IRONFORGEAIRFIELDS:213:233:582:100", "KHARANOS:175:186:397:296:189:0", "MISTYPINEREFUGE:117:155:507:224", "NORTHERNGATEOUTPOST:115:155:766:177", "RUGFORDSMOUNTAINREST:199:114:739:406", "SHIMMERRIDGE:115:173:355:169", "SOUTHERNGATEOUTPOST:113:106:800:284", "THEGRIZZLEDDEN:178:155:321:328", "THETUNDRIDHILLS:135:115:531:328",},
|
|
||||||
["Durotar"] = {"DRYGULCHRAVINE:139:134:438:92:410:0", "ECHOISLES:175:236:561:432", "KOLKARCRAG:131:96:426:487", "ORGRIMMAR:427:150:251:0", "RAZORHILL:188:207:445:182", "RAZORMANEGROUNDS:196:202:318:204", "SENJINVILLAGE:133:167:485:398", "SKULLROCK:118:79:469:51", "SPARKWATERPORT:122:134:522:94", "THUNDERRIDGE:156:174:341:72", "TIRAGARDEKEEP:160:148:477:300", "VALLEYOFTRIALS:186:184:370:335",},
|
|
||||||
["Duskwood"] = {"ADDLESSTEAD:255:231:67:353", "BRIGHTWOODGROVE:191:315:520:131", "DARKSHIRE:291:259:644:173:576:0", "MANORMISTMANTLE:174:150:668:134", "RAVENHILL:166:115:117:317", "RAVENHILLCEMETARY:323:276:99:165:243:0", "THEDARKENEDBANK:886:184:105:44", "THEHUSHEDBANK:136:306:29:143", "THEROTTINGORCHARD:231:210:549:380", "THEYORGENFARMSTEAD:211:235:403:393", "TRANQUILGARDENSCEMETARY:204:196:692:363", "TWILIGHTGROVE:327:384:314:99", "VULGOLOGREMOUND:231:266:259:365",},
|
|
||||||
["Dustwallow"] = {"ALCAZISLAND:176:179:671:29", "BACKBAYWETLANDS:384:243:248:196", "BRACKENWALLVILLAGE:264:264:239:2:507:0", "THEDENOFFLAME:246:235:264:320", "THERAMOREISLE:214:187:542:232", "THEWYRMBOG:263:229:372:387", "WITCHHILL:230:311:431:1:518:0", "WESTHAVENHOLLOW:166:149:603:428",},
|
|
||||||
["EasternPlaguelands"] = {"BLACKWOODLAKE:217:221:451:207", "CORINSCROSSING:153:146:544:373", "CROWNGUARDTOWER:193:152:299:408", "DARROWSHIRE:195:167:316:497", "EASTWALLTOWER:164:143:600:250", "FORLORNSUMMIT:192:185:64:225", "LAKEMERELDAR:240:164:543:469", "LIGHTSHOPECHAPEL:165:238:721:304", "NORTHDALE:172:191:628:135", "NORTHPASSTOWER:228:178:465:118", "PESTILENTSCAR:189:241:416:349", "PLAGUEWOOD:346:258:178:92", "QUELLITHIENLODGE:216:136:430:44", "STRATHOLME:227:189:202:15", "TERRORDALE:175:129:86:137", "THEFUNGALVALE:202:199:277:267", "THEINFECTISSCAR:183:262:628:298", "THEMARRISSTEAD:182:194:164:367", "THENOXIOUSGLADE:211:202:730:172", "THEUNDERCROFT:171:136:178:484", "THONDRORILRIVER:210:348:12:235", "TYRSHAND:201:159:724:475", "ZULMASHAR:189:152:621:36",},
|
|
||||||
["Elwynn"] = {"BRACKWELLPUMPKINPATCH:222:223:592:431", "CRYSTALLAKE:196:192:435:345", "EASTVALELOGGINGCAMP:237:190:713:339", "FARGODEEPMINE:238:230:247:438:63:64", "FORESTSEDGE:242:335:132:333:120:0", "GOLDSHIRE:219:199:261:280", "JERODSLANDING:206:212:437:445", "NORTHSHIREVALLEY:237:244:390:154", "RIDGEPOINTTOWER:287:207:710:445", "STONECAIRNLAKE:278:230:601:203", "STORMWIND:452:392:21:3", "TOWEROFAZORA:232:226:561:303:54:0",},
|
|
||||||
["Felwood"] = {"BLOODVENOMFALLS:225:132:297:269", "DEADWOODVILLAGE:162:129:415:539", "EMERALDSANCTUARY:171:150:411:436", "FELPAWVILLAGE:224:138:489:0:1769:0", "IRONTREEWOODS:200:203:426:60", "JADEFIREGLEN:151:145:339:469", "JADEFIRERUN:181:159:338:35", "JAEDENAR:236:122:275:333", "MORLOSARAN:129:151:503:515", "RUINSOFCONSTELLAS:224:142:303:387", "SHATTERSCARVALE:218:186:315:130", "TALONBRANCHGLADE:145:130:554:97",},
|
|
||||||
["Feralas"] = {"CAMPMOJACHE:146:148:694:238", "CHIMAERAROOSTVALE:106:150:785:321", "DIREMAUL:214:180:461:208", "DREAMBOUGH:141:122:459:0", "FERALSCARVALE:103:104:491:335", "FRAYFEATHERHIGHLANDS:101:163:485:391", "GORDUNNIOUTPOST:154:128:697:148", "GRIMTOTEMCOMPOUND:110:186:630:172", "ISLEOFDREAD:205:285:197:381", "LOWERWILDS:214:152:756:204", "ONEIROS:101:103:499:74", "RUINSOFISILDIEN:179:241:547:326", "RUINSOFRAVENWIND:178:149:310:0", "SARDORISLE:167:168:216:241", "THEFORGOTTENCOAST:132:316:409:258", "THETWINCOLOSSALS:278:235:323:78", "THEWRITHINGDEEP:214:205:625:305:2519:0",},
|
|
||||||
["Gillijim"] = {"DEEPTIDESANCTUM:204:117:199:512", "DISTILLERYISLE:90:69:234:216", "FAELONSFOLLY:108:103:331:304", "GILLIJIMSTRAND:108:324:641:160", "JADEMINE:141:149:500:256", "KALKORPOINT:123:115:421:210", "KAZONISLAND:194:113:432:51", "MAULOGGPOST:137:227:512:401", "MAULOGGREFUGE:231:132:615:465", "RUINSOFZULRAZAR:215:136:369:384", "SILVERCOAST:245:184:311:386", "SILVERSANDBAR:47:128:256:398", "SOUTHSEASANDBAR:125:172:178:63", "TANGLEWOOD:135:188:576:297", "ZULRAZAR:137:168:375:282",},
|
|
||||||
["Gilneas"] = {"BLACKTHORNSCAMP:160:163:32:171", "BROLOKMOUND:140:120:467:349", "DAWNSTONEMINE:130:144:292:155", "FREYSHEARKEEP:72:70:624:405", "GILNEASCITY:295:242:89:105", "GLAYMORESTEAD:140:127:483:129", "GREYMANESWATCH:119:158:580:311", "HOLLOWWEBCEMETARY:180:167:215:395", "HOLLOWWEBWOODS:171:118:341:452", "NORTHGATETOWER:130:137:397:172", "OLDROCKPASS:155:165:290:37", "RAVENSHIRE:194:237:472:431", "RAVENWOODKEEP:253:174:496:494", "ROSEWICKPLANTATION:134:140:331:155", "RUINSOFGREYSHIRE:192:144:230:260", "SHADEMORETAVERN:117:120:279:336", "SOUTHMIREORCHARD:202:133:302:354", "STILLWARDCHURCH:213:166:471:220", "THEDRYROCKMINE:129:127:145:262", "THEDRYROCKPIT:230:217:69:295", "THEGREYMANEWALL:131:173:412:48", "THEOVERGROWNACRE:134:154:390:269",},
|
|
||||||
["GrimReaches"] = {"BAGGOTHSRAMPART:112:113:399:238", "BARLEYCRESTFARMSTEAD:116:88:499:222", "BRANGARSFOLLY:108:123:568:33", "DUNKITHAS:137:95:470:329", "EASTRIDGEOUTPOST:166:107:374:165", "GETHKAR:118:124:444:84", "GROLDANSEXCAVATION:125:117:567:231", "LAKEKITHAS:217:150:481:270", "RUINSOFSTOLGAZKEEP:134:146:366:53", "SALGAZMINES:150:119:535:380", "SHATTERBLADEPOST:186:130:512:126", "SLATEBEARDSFORGE:136:99:457:404", "THEGRIMHOLLOW:288:200:396:463", "THEHIGHPASS:97:141:409:315", "ZARMGETHPOINT:143:76:405:16", "ZARMGETHSTRONGHOLD:120:150:487:17",},
|
|
||||||
["Hilsbrad"] = {"AZURELOADMINE:146:174:188:288", "DARROWHILL:173:132:426:164", "DUNGAROK:225:257:644:305", "DURNHOLDEKEEP:367:347:614:82", "EASTERNSTRAND:208:301:537:350", "HILLSBRADFIELDS:282:257:211:166", "NETHANDERSTEAD:190:215:554:249", "PURGATIONISLE:120:94:111:485", "SOUTHPOINTTOWER:271:207:11:203", "SOUTHSHORE:219:245:423:213", "TARRENMILL:195:291:524:9", "WESTERNSTRAND:272:139:215:377",},
|
|
||||||
["Hinterlands"] = {"AERIEPEAK:240:195:20:250", "AGOLWATHA:188:180:382:173", "HIRIWATHA:201:118:188:314", "JINTHAALOR:223:277:514:338", "PLAGUEMISTRAVINE:124:203:170:158", "QUELDANILLODGE:168:181:248:194", "SERADANE:260:263:519:25", "SHADRAALOR:181:170:247:394", "SHAOLWATHA:265:190:580:247", "SKULKROCK:148:133:520:241", "THEALTAROFZUL:186:153:382:371", "THECREEPINGRUIN:168:157:417:268", "THEOVERLOOKCLIFFS:153:299:702:309", "THERASAZTRAILS:118:133:210:381", "VALORWINDLAKE:153:160:329:309",},
|
|
||||||
["Hyjal"] = {"BARKSKINPLATEAU:207:167:390:297", "BARKSKINVILLAGE:502:293:417:346", "BLEAKHOLLOWCRATER:297:335:401:20", "CIRCLEOFPOWER:277:331:203:63", "DARKHOLLOWPASS:214:237:342:389", "NORDANAAR:139:146:778:118", "NORDRASSILGLADE:418:408:578:0", "RUINSOFTELENNAS:165:193:141:236", "THEEMERALDGATEWAY:309:244:109:353", "ZULHATHA:191:210:3:194",},
|
|
||||||
["Icepoint"] = {"KANEQNUUN:512:430:237:129",},
|
|
||||||
["Lapidis"] = {"BRIGHTCOAST:298:213:237:246", "CAELANSREST:147:111:517:230", "CROWNISLAND:140:95:512:33", "GORDOSHHEIGHTS:253:243:256:89", "HAZURRIGLADE:87:82:486:306", "SHANKSREEF:207:90:446:109", "THEROCK:74:72:687:149", "TOWEROFLAPIDIS:203:118:487:175", "WALLOWINGCOAST:240:184:505:326", "ZULHAZU:227:178:348:407",},
|
|
||||||
["LochModan"] = {"GRIZZLEPAWRIDGE:262:343:326:325", "IRONBANDSEXCAVATIONSITE:321:294:491:276", "MOGROSHSTRONGHOLD:287:265:558:61", "NORTHGATEPASS:195:273:143:24:925:0", "SILVERSTREAMMINE:201:243:247:25", "STONESPLINTERVALLEY:226:255:230:363", "STONEWROUGHTDAM:260:149:354:23", "THEFARSTRIDERLODGE:162:182:741:298", "THELOCH:288:380:367:99", "THELSAMAR:243:205:225:214", "VALLEYOFKINGS:166:224:123:382",},
|
|
||||||
["Moonglade"] = {"LAKEELUNEARA:530:484:256:101:2361:0",},
|
|
||||||
["Moonwhisper"] = {"ANSHESRESPITE:170:120:398:81", "ANCESTRALGROUNDS:164:82:295:88", "BLACKROOTHOLD:162:137:495:465", "BLACKROOTVILLAGE:224:143:411:525", "FOULHEARTSANCTUM:157:149:496:232", "GROVEOFTHEMOON:152:146:464:347", "LUNARCLAWDEN:84:60:674:376", "MARASETHIL:96:94:640:417", "MOONHOOFRETREAT:172:144:419:167", "MOONHOOFVILLAGE:163:157:570:188", "MOONSILKHOLLOW:125:114:577:458", "MOROGAIVILLAGE:133:127:571:372", "NARVALISPOINT:162:139:503:118", "RUINSOFNENDIS:183:130:584:275", "STARSHARDCRADLE:122:109:334:121", "TYRANDAS:158:169:580:61", "VYSNAGOSASREST:163:102:420:8",},
|
|
||||||
["Mulgore"] = {"BAELDUNDIGSITE:175:151:269:227", "BLOODHOOFVILLAGE:236:182:378:311", "PALEMANEROCK:102:183:315:317", "RAVAGEDCARAVAN:110:100:482:269", "REDCLOUDMESA:436:231:285:437:221:0", "REDROCKS:154:138:522:92", "SUNTAILPASS:129:116:533:18", "THEGOLDENPLAINS:184:217:441:91", "THEROLLINGPLAINS:231:166:536:369", "THEVENTURECOMINE:187:204:549:251", "THUNDERBLUFF:254:217:264:70", "THUNDERHORNWATERWELL:118:137:384:248", "WILDMANEWATERWELL:152:111:299:10", "WINDFURYRIDGE:182:119:405:2", "WINTERHOOFWATERWELL:144:107:470:379",},
|
|
||||||
["Northwind"] = {"ABBEYGARDENS:250:224:512:33", "AMBERSHIRE:234:215:334:278", "AMBERWOODKEEP:243:205:187:308", "BLACKROCKBREACH:255:201:721:222", "BRISTLEWHISKERCAVERN:197:185:568:232", "CINDERFALLPASS:229:229:733:348", "CRAWFORDWINERY:160:222:513:285", "CRYSTALFALLS:320:205:627:464", "GRIMMENLAKE:218:210:550:352", "MERCHANTSHIGHROAD:353:249:256:420", "NORTHRIDGEPOINT:298:314:349:31", "NORTHWINDLOGGINGCAMP:224:185:258:171", "RUINSOFBIRKHAVEN:180:208:645:116", "SHERWOODQUARRY:293:287:702:1", "STILLHEARTPORT:174:155:116:217", "TOWEROFMAGILOU:181:223:189:169", "WITCHCOVEN:147:162:257:81",},
|
|
||||||
["Redridge"] = {"ALTHERSMILL:222:260:407:134", "GALARDELLVALLEY:234:240:661:168:96:0", "LAKEEVERSTILL:522:260:140:249", "LAKERIDGEHIGHWAY:411:274:196:341", "LAKESHIRE:325:179:92:204", "REDRIDGECANYONS:345:232:132:79:98:0", "RENDERSCAMP:264:248:284:4:998:0", "RENDERSVALLEY:453:248:491:365", "REDWALLKEEP:162:110:830:466", "STONEWATCH:243:289:507:221:999:0", "STONEWATCHFALLS:308:200:601:325", "THREECORNERS:360:337:0:288",},
|
|
||||||
["SearingGorge"] = {"BLACKCHARCAVE:264:224:84:371", "DUSTFIREVALLEY:446:355:428:11", "FIREWATCHRIDGE:385:413:95:39", "GRIMSILTDIGSITE:292:210:501:306", "TANNERCAMP:292:215:552:413", "THECAULDRON:414:310:257:178", "THESEAOFCINDERS:345:273:256:395",},
|
|
||||||
["Silithus"] = {"HIVEASHI:431:276:305:34:3426:0", "HIVEREGAL:469:335:262:333:3427:0", "HIVEZORA:343:424:117:188", "SOUTHWINDVILLAGE:346:348:519:83:3077:0", "THECRYSTALVALE:285:274:121:31", "THESCARABWALL:271:145:125:523:2741:0", "TWILIGHTBASECAMP:297:238:355:206:3097:2739",},
|
|
||||||
["Silverpine"] = {"AMBERMILL:204:210:512:279", "BERENSPERIL:206:146:508:433", "DEEPELEMMINE:127:143:484:274", "FENRISISLE:234:187:593:88:232:0", "MALDENSORCHARD:228:138:479:9:239:0", "NORTHTIDESHOLLOW:152:104:337:141", "OLSENSFARTHING:128:152:401:267", "PYREWOODVILLAGE:122:108:405:456", "SHADOWFANGKEEP:185:131:380:373", "THEDEADFIELD:141:134:419:82", "THEDECREPITFERRY:144:156:475:160", "THEGREYMANEWALL:175:185:398:465", "THESEPULCHER:193:135:360:184", "THESHININGSTRAND:225:192:475:27:227:0", "THESKITTERINGDARK:160:165:302:18",},
|
|
||||||
["StonetalonMountains"] = {"AMANIALOR:504:252:8:5", "BAELHARDUL:357:252:512:257", "BLACKSANDOILFIELDS:504:504:8:5", "BOULDERSLIDERAVINE:90:76:586:547", "BRAMBLETHORNPASS:382:359:512:257", "BROKENCLIFFMINE:252:504:260:5", "CAMPAPARAJE:222:100:670:552", "GRIMTOTEMPOST:146:77:675:519", "MALAKAJIN:137:86:662:562", "MIRKFALLONLAKE:504:504:260:5", "POWDERTOWN:252:252:260:257", "SISHIRCANYON:252:264:512:257", "STONETALONPEAK:258:252:260:5", "SUNROCKRETREAT:504:252:260:257", "THECHARREDVALE:252:308:260:257", "THEEARTHENRING:504:252:260:257", "VENTURECOMPANYCAMP:252:504:260:5", "WEBWINDERPATH:256:324:512:256", "WINDSHEARCRAG:256:256:512:256:1277:0",},
|
|
||||||
["Stranglethorn"] = {"BALALRUINS:83:65:245:101", "BALIAMAHRUINS:100:133:376:133", "BLOODSAILCOMPOUND:154:163:201:291", "BOOTYBAY:137:125:207:435:312:0", "CRYSTALVEINMINE:111:114:350:280", "GROMGOLBASECAMP:101:98:265:137", "JAGUEROISLE:132:107:319:498", "KALAIRUINS:86:89:303:93", "KURZENSCOMPOUND:141:139:394:5", "LAKENAZFERITI:124:120:332:60", "MISTVALEVALLEY:120:116:283:372", "MIZJAHRUINS:93:102:315:133", "MOSHOGGOGREMOUND:123:168:435:96", "NEKMANIWELLSPRING:80:102:215:365", "NESINGWARYSEXPEDITION:128:98:274:29", "REBELCAMP:164:86:289:0", "RUINSOFABORAZ:87:87:356:340", "RUINSOFJUBUWAL:100:105:312:304", "RUINSOFZULKUNDA:113:132:201:8", "RUINSOFZULMAMWE:162:122:397:213", "THEARENA:186:176:241:194", "THEVILEREEF:177:160:159:98", "VENTURECOBASECAMP:96:120:391:66", "WILDSHORE:151:175:237:431", "ZIATAJAIRUINS:127:120:364:231", "ZULGURUB:230:213:489:12", "ZUULDAIARUINS:103:105:160:47",},
|
|
||||||
["SwampOfSorrows"] = {"FALLOWSANCTUARY:348:292:501:0", "ITHARIUSSCAVE:230:232:0:270", "MISTYREEDSTRAND:250:664:752:0:1978:0", "MISTYVALLEY:211:179:29:148", "POOLOFTEARS:280:256:576:227", "SORROWMURK:199:351:734:128", "SPLINTERSPEARJUNCTION:258:222:138:245", "STAGALBOG:328:238:561:386", "STONARD:343:303:287:244", "SORROWGUARDKEEP:220:174:0:266", "THEHARBORAGE:216:187:182:157", "THESHIFTINGMIRE:303:221:294:118",},
|
|
||||||
["Tanaris"] = {"ABYSSALSANDS:194:159:376:207", "BROKENPILLAR:93:165:481:243", "CAVERNSOFTIME:139:132:567:262", "DUNEMAULCOMPOUND:186:127:337:298", "EASTMOONRUINS:143:130:405:355", "GADGETZAN:156:149:430:102", "LANDSENDBEACH:184:148:456:514", "LOSTRIGGERCOVE:141:173:635:230", "NOONSHADERUINS:129:191:530:43", "SANDSORROWWATCH:175:157:311:111", "SOUTHBREAKSHORE:192:151:510:304", "SOUTHMOONRUINS:185:196:324:366", "STEAMWHEEDLEPORT:136:129:599:86", "SLICKWICKOILRIG:237:181:129:436", "THEGAPINGCHASM:198:188:458:380", "THENOXIOUSLAIR:155:180:265:209", "THISTLESHRUBVALLEY:166:234:217:294", "VALLEYOFTHEWATCHERS:125:115:311:470", "WATERSPRINGFIELD:145:164:516:177", "ZALASHJISDEN:90:127:619:157", "ZULFARRAK:191:166:265:5",},
|
|
||||||
["TelAbim"] = {"BIXXLESSTOREHOUSE:300:127:368:178", "HIGHVALERISE:191:187:468:248", "TAZZOSSHACK:229:232:453:391", "TELCOBASECAMP:184:183:342:440", "THEDERELICTCAMP:165:205:364:273", "THEJAGGEDISLES:313:256:385:16",},
|
|
||||||
["Teldrassil"] = {"BANETHILHOLLOW:136:191:392:289", "DARNASSUS:294:252:110:251", "DOLANAAR:170:119:469:327", "GNARLPINEHOLD:230:158:316:417", "LAKEALAMETH:237:163:445:388", "POOLSOFARLITHRIEN:125:180:337:314", "RUTTHERANVILLAGE:110:91:504:548", "SHADOWGLEN:198:201:504:164", "STARBREEZEVILLAGE:153:175:588:303", "THEORACLEGLADE:150:223:279:135", "URSANHEIGHTS:229:154:243:423", "WELLSPRINGLAKE:166:245:383:98:265:0",},
|
|
||||||
["ThalassianHighlands"] = {"ALAHTHALAS:470:276:429:38", "ANASTERIANPARK:229:219:385:256", "BRINTHILIEN:180:211:395:450", "FELSTRIDERRETREAT:201:207:165:428", "ISLEOFETERNALAUTUMN:204:167:236:117", "RUINSOFNASHALARAN:249:266:36:151", "SILVERSUNMINE:208:189:288:373", "THEFARSTRIDE:230:199:212:255", "THELASTRUNESTONE:179:203:507:379",},
|
|
||||||
["ThousandNeedles"] = {"CAMPETHOK:289:300:7:1:2237:0", "DARKCLOUDPINNACLE:189:182:267:138", "FREEWINDPOST:193:173:366:273", "HIGHPERCH:178:174:39:164", "SPLITHOOFCRAG:193:175:400:203", "THEGREATLIFT:191:163:213:78", "THESCREECHINGCANYON:240:231:187:206", "THESHIMMERINGFLATS:312:355:612:308", "WINDBREAKCANYON:225:213:501:249",},
|
|
||||||
["Tirisfal"] = {"AGAMANDMILLS:244:191:342:148", "BALNIRFARMSTEAD:179:153:639:335", "BRIGHTWATERLAKE:176:280:598:143", "BRILL:121:144:540:305", "BULWARK:184:169:712:374", "COLDHEARTHMANOR:136:125:479:328", "CRUSADEROUTPOST:154:121:701:293", "DEATHKNELL:210:186:236:337", "GARRENSHAUNT:148:199:507:154", "GLENSHIRE:163:161:157:393:5033:5039", "MONASTARY:175:157:762:139:161:0", "NIGHTMAREVALE:209:151:370:355", "RUINSOFLORDAERON:299:216:469:370", "SCARLETWATCHPOST:141:223:701:113", "SOLLIDENFARMSTEAD:225:138:247:259", "STEEPCLIFFPORT:121:120:5:350", "STILLWATERPOND:168:123:401:279", "THECORINTHFARMSTEAD:116:152:73:402:5041:0", "THEWHISPERINGFOREST:243:175:86:263:5035:0", "VENOMWEBVALE:199:183:776:225",},
|
|
||||||
["UngoroCrater"] = {"FIREPLUMERIDGE:277:258:377:185", "GOLAKKAHOTSPRINGS:299:334:133:158", "IRONSTONEPLATEAU:276:281:588:69", "LAKKARITARPITS:553:255:170:13", "TERRORRUN:333:275:166:375", "THEMARSHLANDS:295:341:568:247", "THESLITHERINGSCAR:326:260:378:403",},
|
|
||||||
["WesternPlaguelands"] = {"CAERDARROW:158:150:608:421", "DALSONSTEARS:209:138:388:271", "DARROWMERELAKE:359:261:510:348", "FELSTONEFIELD:149:119:306:315", "GAHRRONSWITHERING:165:191:527:257", "HEARTHGLEN:331:280:312:20", "NORTHRIDGELUMBERCAMP:205:168:390:170", "RUINSOFANDORHOL:275:219:265:360", "SORROWHILL:290:201:360:467", "THEBULWARK:216:172:143:300", "THEWEEPINGCAVE:148:192:572:203", "THEWRITHINGHAUNT:159:177:457:329", "THONDRORILRIVER:193:326:597:94",},
|
|
||||||
["Westfall"] = {"ALEXSTONFARMSTEAD:275:182:220:274", "DEMONTSPLACE:166:155:226:391", "FURLBROWSPUMPKINFARM:186:191:399:24", "GOLDCOASTQUARRY:194:241:234:113", "JANGOLODEMINE:185:187:323:44", "MOONBROOK:208:174:317:349:919:0", "SALDEANSFARM:191:184:478:119", "SENTINELHILL:161:210:461:259", "THEDAGGERHILLS:235:149:349:430", "THEDEADACRE:164:213:542:267", "THEDUSTPLAINS:260:204:538:393", "THEJANSENSTEAD:143:183:498:6", "THEMOLSENFARM:199:180:342:161", "WESTFALLLIGHTHOUSE:306:161:171:482",},
|
|
||||||
["Wetlands"] = {"ANGERFANGENCAMPMENT:196:150:364:241", "BLACKCHANNELMARSH:213:173:95:260", "BLUEGILLMARSH:195:165:111:157", "DIREFORGEHILL:233:225:515:128", "DUNMODR:173:147:419:42", "DUNAGRATH:222:190:97:335", "GRIMBATOL:317:331:623:242:1037:0", "HAWKSVIGIL:170:162:264:353", "IRONBEARDSTOMB:165:156:368:135", "MENETHILHARBOR:156:116:27:321", "MOSSHIDEFEN:215:224:539:277", "RAPTORRIDGE:159:115:640:191", "SALTSPRAYGLEN:170:214:254:58", "SUNDOWNMARSH:265:212:113:100", "THEGREENBELT:153:209:473:143", "THELGANROCK:207:165:478:383:836:0", "WHELGARSEXCAVATIONSITE:172:156:264:224",},
|
|
||||||
["Winterspring"] = {"DARKWHISPERGORGE:247:191:452:447", "EVERLOOK:151:189:516:114", "FROSTFIREHOTSPRINGS:226:124:231:180", "FROSTSABERROCK:240:172:375:11", "FROSTWHISPERGORGE:184:144:531:383", "ICETHISTLEHILLS:116:155:617:247", "LAKEKELTHERIL:203:176:409:205", "MAZTHORIL:174:169:499:265", "OWLWINGTHICKET:149:127:600:348", "STARFALLVILLAGE:174:148:399:143", "THEHIDDENGROVE:162:174:562:33", "TIMBERMAWPOST:223:112:235:248", "WINTERFALLVILLAGE:133:120:622:163",},
|
|
||||||
}
|
|
||||||
|
|||||||
Vendored
-1
@@ -138,7 +138,6 @@ pfUI_translation["deDE"] = {
|
|||||||
["Combat Timer"] = nil,
|
["Combat Timer"] = nil,
|
||||||
["Combopoint Height"] = nil,
|
["Combopoint Height"] = nil,
|
||||||
["Combopoint Width"] = nil,
|
["Combopoint Width"] = nil,
|
||||||
["Compare Item Base Stats"] = nil,
|
|
||||||
["Components"] = nil,
|
["Components"] = nil,
|
||||||
["Config UI Settings"] = nil,
|
["Config UI Settings"] = nil,
|
||||||
["Configuration"] = nil,
|
["Configuration"] = nil,
|
||||||
|
|||||||
Vendored
+13
-1
@@ -19,6 +19,7 @@ pfUI_translation["enUS"] = {
|
|||||||
["Align Chat Windows"] = nil,
|
["Align Chat Windows"] = nil,
|
||||||
["Aligned Position"] = nil,
|
["Aligned Position"] = nil,
|
||||||
["All messages will be forwarded to:"] = nil,
|
["All messages will be forwarded to:"] = nil,
|
||||||
|
["All players passed"] = nil,
|
||||||
["Alt-Click Action"] = nil,
|
["Alt-Click Action"] = nil,
|
||||||
["Always Allow Drag Via Shift Key"] = nil,
|
["Always Allow Drag Via Shift Key"] = nil,
|
||||||
["Always Show"] = nil,
|
["Always Show"] = nil,
|
||||||
@@ -119,6 +120,7 @@ pfUI_translation["enUS"] = {
|
|||||||
["Chat Bubble Transparency"] = nil,
|
["Chat Bubble Transparency"] = nil,
|
||||||
["Chat Default Brackets"] = nil,
|
["Chat Default Brackets"] = nil,
|
||||||
["Class"] = nil,
|
["Class"] = nil,
|
||||||
|
["Clear"] = nil,
|
||||||
["Clear Rolls"] = nil,
|
["Clear Rolls"] = nil,
|
||||||
["Click Action"] = nil,
|
["Click Action"] = nil,
|
||||||
["Click Casting"] = nil,
|
["Click Casting"] = nil,
|
||||||
@@ -138,7 +140,6 @@ pfUI_translation["enUS"] = {
|
|||||||
["Combat Timer"] = nil,
|
["Combat Timer"] = nil,
|
||||||
["Combopoint Height"] = nil,
|
["Combopoint Height"] = nil,
|
||||||
["Combopoint Width"] = nil,
|
["Combopoint Width"] = nil,
|
||||||
["Compare Item Base Stats"] = nil,
|
|
||||||
["Components"] = nil,
|
["Components"] = nil,
|
||||||
["Config UI Settings"] = nil,
|
["Config UI Settings"] = nil,
|
||||||
["Configuration"] = nil,
|
["Configuration"] = nil,
|
||||||
@@ -195,6 +196,7 @@ pfUI_translation["enUS"] = {
|
|||||||
["Deficit"] = nil,
|
["Deficit"] = nil,
|
||||||
["Delete profile"] = nil,
|
["Delete profile"] = nil,
|
||||||
["Delete / Reset"] = nil,
|
["Delete / Reset"] = nil,
|
||||||
|
["Dependencies"] = nil,
|
||||||
["Descending"] = nil,
|
["Descending"] = nil,
|
||||||
["Description Font"] = nil,
|
["Description Font"] = nil,
|
||||||
["Description Font Size"] = nil,
|
["Description Font Size"] = nil,
|
||||||
@@ -477,6 +479,7 @@ pfUI_translation["enUS"] = {
|
|||||||
["Look & Feel"] = nil,
|
["Look & Feel"] = nil,
|
||||||
["Loot"] = nil,
|
["Loot"] = nil,
|
||||||
["Loot & Spam"] = nil,
|
["Loot & Spam"] = nil,
|
||||||
|
["Loot History"] = nil,
|
||||||
["Macro Text Color"] = nil,
|
["Macro Text Color"] = nil,
|
||||||
["Macro Text Size"] = nil,
|
["Macro Text Size"] = nil,
|
||||||
["Main Actionbar"] = nil,
|
["Main Actionbar"] = nil,
|
||||||
@@ -499,6 +502,7 @@ pfUI_translation["enUS"] = {
|
|||||||
["Menu Font Size"] = nil,
|
["Menu Font Size"] = nil,
|
||||||
["Messages are no longer forwarded to:"] = nil,
|
["Messages are no longer forwarded to:"] = nil,
|
||||||
["Middle Mouse Button"] = nil,
|
["Middle Mouse Button"] = nil,
|
||||||
|
["Missing"] = nil,
|
||||||
["Minimap"] = nil,
|
["Minimap"] = nil,
|
||||||
["Minimap Panel"] = nil,
|
["Minimap Panel"] = nil,
|
||||||
["Minimap Size (|cffffaaaaExperimental|r)"] = nil,
|
["Minimap Size (|cffffaaaaExperimental|r)"] = nil,
|
||||||
@@ -552,6 +556,7 @@ pfUI_translation["enUS"] = {
|
|||||||
["Only Show Own Debuffs (|cffffaaaaExperimental|r)"] = nil,
|
["Only Show Own Debuffs (|cffffaaaaExperimental|r)"] = nil,
|
||||||
["Only Show Target Castbar"] = nil,
|
["Only Show Target Castbar"] = nil,
|
||||||
["On State Change"] = nil,
|
["On State Change"] = nil,
|
||||||
|
["Optional Dependencies"] = nil,
|
||||||
["Options"] = nil,
|
["Options"] = nil,
|
||||||
["Orientation"] = nil,
|
["Orientation"] = nil,
|
||||||
["Other Panel: Minimap"] = nil,
|
["Other Panel: Minimap"] = nil,
|
||||||
@@ -645,6 +650,7 @@ pfUI_translation["enUS"] = {
|
|||||||
["Resting"] = nil,
|
["Resting"] = nil,
|
||||||
["Reveal Unexplored Areas"] = nil,
|
["Reveal Unexplored Areas"] = nil,
|
||||||
["Switch to current zone"] = nil,
|
["Switch to current zone"] = nil,
|
||||||
|
["Retrieving item information..."] = nil,
|
||||||
["Right"] = nil,
|
["Right"] = nil,
|
||||||
["Right Actionbar"] = nil,
|
["Right Actionbar"] = nil,
|
||||||
["Right Anchor"] = nil,
|
["Right Anchor"] = nil,
|
||||||
@@ -750,6 +756,9 @@ pfUI_translation["enUS"] = {
|
|||||||
["Show Totems Indicators"] = nil,
|
["Show Totems Indicators"] = nil,
|
||||||
["Shrink & Return"] = nil,
|
["Shrink & Return"] = nil,
|
||||||
["Size"] = nil,
|
["Size"] = nil,
|
||||||
|
["Spell Name Alignment"] = nil,
|
||||||
|
["Spell Name X Offset"] = nil,
|
||||||
|
["Spell Name Y Offset"] = nil,
|
||||||
["Skin"] = nil,
|
["Skin"] = nil,
|
||||||
["Skins"] = nil,
|
["Skins"] = nil,
|
||||||
["Slow"] = nil,
|
["Slow"] = nil,
|
||||||
@@ -798,6 +807,9 @@ pfUI_translation["enUS"] = {
|
|||||||
["Threshold To Trust Health Estimation"] = nil,
|
["Threshold To Trust Health Estimation"] = nil,
|
||||||
["Time"] = nil,
|
["Time"] = nil,
|
||||||
["Timer"] = nil,
|
["Timer"] = nil,
|
||||||
|
["Timer Alignment"] = nil,
|
||||||
|
["Timer X Offset"] = nil,
|
||||||
|
["Timer Y Offset"] = nil,
|
||||||
["Time Remaining"] = nil,
|
["Time Remaining"] = nil,
|
||||||
["Timer In Minutes"] = nil,
|
["Timer In Minutes"] = nil,
|
||||||
["Timestamp Brackets"] = nil,
|
["Timestamp Brackets"] = nil,
|
||||||
|
|||||||
Vendored
-1
@@ -138,7 +138,6 @@ pfUI_translation["esES"] = {
|
|||||||
["Combat Timer"] = "Temporizador de combate",
|
["Combat Timer"] = "Temporizador de combate",
|
||||||
["Combopoint Height"] = nil,
|
["Combopoint Height"] = nil,
|
||||||
["Combopoint Width"] = nil,
|
["Combopoint Width"] = nil,
|
||||||
["Compare Item Base Stats"] = "Comparar estadísticas bases de objetos",
|
|
||||||
["Components"] = "Componentes",
|
["Components"] = "Componentes",
|
||||||
["Config UI Settings"] = nil,
|
["Config UI Settings"] = nil,
|
||||||
["Configuration"] = "Configuración",
|
["Configuration"] = "Configuración",
|
||||||
|
|||||||
Vendored
-1
@@ -138,7 +138,6 @@ pfUI_translation["frFR"] = {
|
|||||||
["Combat Timer"] = "Chronomètre de combat",
|
["Combat Timer"] = "Chronomètre de combat",
|
||||||
["Combopoint Height"] = nil,
|
["Combopoint Height"] = nil,
|
||||||
["Combopoint Width"] = nil,
|
["Combopoint Width"] = nil,
|
||||||
["Compare Item Base Stats"] = "Compare les stats de base d'un objet",
|
|
||||||
["Components"] = "Composants",
|
["Components"] = "Composants",
|
||||||
["Config UI Settings"] = nil,
|
["Config UI Settings"] = nil,
|
||||||
["Configuration"] = "Configuration",
|
["Configuration"] = "Configuration",
|
||||||
|
|||||||
Vendored
-1
@@ -138,7 +138,6 @@ pfUI_translation["koKR"] = {
|
|||||||
["Combat Timer"] = "전투 타이머",
|
["Combat Timer"] = "전투 타이머",
|
||||||
["Combopoint Height"] = nil,
|
["Combopoint Height"] = nil,
|
||||||
["Combopoint Width"] = nil,
|
["Combopoint Width"] = nil,
|
||||||
["Compare Item Base Stats"] = nil,
|
|
||||||
["Components"] = nil,
|
["Components"] = nil,
|
||||||
["Config UI Settings"] = nil,
|
["Config UI Settings"] = nil,
|
||||||
["Configuration"] = "구성",
|
["Configuration"] = "구성",
|
||||||
|
|||||||
Vendored
-1
@@ -138,7 +138,6 @@ pfUI_translation["ruRU"] = {
|
|||||||
["Combat Timer"] = "Таймер боя",
|
["Combat Timer"] = "Таймер боя",
|
||||||
["Combopoint Height"] = nil,
|
["Combopoint Height"] = nil,
|
||||||
["Combopoint Width"] = nil,
|
["Combopoint Width"] = nil,
|
||||||
["Compare Item Base Stats"] = "Сравнивать базовые характеристики предмета",
|
|
||||||
["Components"] = "Компоненты",
|
["Components"] = "Компоненты",
|
||||||
["Config UI Settings"] = "Настройка параметров пользовательского интерфейса",
|
["Config UI Settings"] = "Настройка параметров пользовательского интерфейса",
|
||||||
["Configuration"] = "Конфигурация",
|
["Configuration"] = "Конфигурация",
|
||||||
|
|||||||
Vendored
-1
@@ -138,7 +138,6 @@ pfUI_translation["zhCN"] = {
|
|||||||
["Combat Timer"] = "战斗计时器",
|
["Combat Timer"] = "战斗计时器",
|
||||||
["Combopoint Height"] = "连击点高度",
|
["Combopoint Height"] = "连击点高度",
|
||||||
["Combopoint Width"] = "连击点宽度",
|
["Combopoint Width"] = "连击点宽度",
|
||||||
["Compare Item Base Stats"] = "基于属性的装备对比",
|
|
||||||
["Components"] = "组件",
|
["Components"] = "组件",
|
||||||
["Config UI Settings"] = "界面设置",
|
["Config UI Settings"] = "界面设置",
|
||||||
["Configuration"] = "配置",
|
["Configuration"] = "配置",
|
||||||
|
|||||||
Vendored
-1
@@ -138,7 +138,6 @@ pfUI_translation["zhTW"] = {
|
|||||||
["Combat Timer"] = "戰鬥計時器",
|
["Combat Timer"] = "戰鬥計時器",
|
||||||
["Combopoint Height"] = nil,
|
["Combopoint Height"] = nil,
|
||||||
["Combopoint Width"] = nil,
|
["Combopoint Width"] = nil,
|
||||||
["Compare Item Base Stats"] = "基於屬性的裝備對比",
|
|
||||||
["Components"] = "組件",
|
["Components"] = "組件",
|
||||||
["Config UI Settings"] = nil,
|
["Config UI Settings"] = nil,
|
||||||
["Configuration"] = "配置",
|
["Configuration"] = "配置",
|
||||||
|
|||||||
@@ -4,7 +4,6 @@
|
|||||||
<Include file="..\libs\libdebuff.lua"/>
|
<Include file="..\libs\libdebuff.lua"/>
|
||||||
<Include file="..\libs\librange.lua"/>
|
<Include file="..\libs\librange.lua"/>
|
||||||
<Include file="..\libs\libunitscan.lua"/>
|
<Include file="..\libs\libunitscan.lua"/>
|
||||||
<Include file="..\libs\libtooltip.lua"/>
|
|
||||||
<Include file="..\libs\libhealth.lua"/>
|
<Include file="..\libs\libhealth.lua"/>
|
||||||
<Include file="..\libs\libtotem.lua"/>
|
<Include file="..\libs\libtotem.lua"/>
|
||||||
<Include file="..\libs\libthrottle.lua"/>
|
<Include file="..\libs\libthrottle.lua"/>
|
||||||
|
|||||||
@@ -78,4 +78,5 @@
|
|||||||
<Include file="..\modules\unitxp.lua"/>
|
<Include file="..\modules\unitxp.lua"/>
|
||||||
<Include file="..\modules\bgscore.lua"/>
|
<Include file="..\modules\bgscore.lua"/>
|
||||||
<Include file="..\modules\equipmentmanager.lua"/>
|
<Include file="..\modules\equipmentmanager.lua"/>
|
||||||
|
<Include file="..\modules\loothistory.lua"/>
|
||||||
</Ui>
|
</Ui>
|
||||||
@@ -1,5 +1,6 @@
|
|||||||
<Ui xmlns="http://www.blizzard.com/wow/ui/">
|
<Ui xmlns="http://www.blizzard.com/wow/ui/">
|
||||||
<Include file="..\skins\blizzard\character.lua"/>
|
<Include file="..\skins\blizzard\character.lua"/>
|
||||||
|
<Include file="..\skins\blizzard\inspect.lua"/>
|
||||||
<Include file="..\skins\blizzard\spellbook.lua"/>
|
<Include file="..\skins\blizzard\spellbook.lua"/>
|
||||||
<Include file="..\skins\blizzard\friends.lua"/>
|
<Include file="..\skins\blizzard\friends.lua"/>
|
||||||
<Include file="..\skins\blizzard\talents.lua"/>
|
<Include file="..\skins\blizzard\talents.lua"/>
|
||||||
|
|||||||
+7
-8
@@ -511,8 +511,7 @@ function libpredict:ParseComm(sender, msg)
|
|||||||
|
|
||||||
local unit = senderUnit()
|
local unit = senderUnit()
|
||||||
if not unit then return end
|
if not unit then return end
|
||||||
local startMs = select(4, C_Spell.UnitCastingInfo(unit))
|
local _, _, _, startMs, endMs = C_Spell.UnitCastingInfo(unit)
|
||||||
local endMs = select(5, C_Spell.UnitCastingInfo(unit))
|
|
||||||
if not startMs or not endMs then return end
|
if not startMs or not endMs then return end
|
||||||
time = (endMs - startMs) / 1000
|
time = (endMs - startMs) / 1000
|
||||||
elseif msgtype == 1 then
|
elseif msgtype == 1 then
|
||||||
@@ -523,8 +522,7 @@ function libpredict:ParseComm(sender, msg)
|
|||||||
target = {strsplit(":", string.sub(msg,9, -1))}
|
target = {strsplit(":", string.sub(msg,9, -1))}
|
||||||
local unit = senderUnit()
|
local unit = senderUnit()
|
||||||
if not unit then return end
|
if not unit then return end
|
||||||
local startMs = select(4, C_Spell.UnitCastingInfo(unit))
|
local _, _, _, startMs, endMs = C_Spell.UnitCastingInfo(unit)
|
||||||
local endMs = select(5, C_Spell.UnitCastingInfo(unit))
|
|
||||||
if not startMs or not endMs then return end
|
if not startMs or not endMs then return end
|
||||||
time = (endMs - startMs) / 1000
|
time = (endMs - startMs) / 1000
|
||||||
end
|
end
|
||||||
@@ -899,7 +897,7 @@ local INSTANT_HOT_COOLDOWN = 1.0 -- 1 Sekunde Cooldown (GCD ist 1.5s)
|
|||||||
local pendingHots = {}
|
local pendingHots = {}
|
||||||
|
|
||||||
-- Gather Data by User Actions
|
-- Gather Data by User Actions
|
||||||
pfUI.hooksecurefunc("CastSpell", function(id, bookType)
|
hooksecurefunc("CastSpell", function(id, bookType)
|
||||||
if not libpredict.sender.enabled then return end
|
if not libpredict.sender.enabled then return end
|
||||||
local effect, rank = libspell.GetSpellInfo(id, bookType)
|
local effect, rank = libspell.GetSpellInfo(id, bookType)
|
||||||
if not effect then return end
|
if not effect then return end
|
||||||
@@ -952,7 +950,7 @@ pfUI.hooksecurefunc("CastSpell", function(id, bookType)
|
|||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
|
|
||||||
pfUI.hooksecurefunc("CastSpellByName", function(effect, target)
|
hooksecurefunc("CastSpellByName", function(effect, target)
|
||||||
if not libpredict.sender.enabled then return end
|
if not libpredict.sender.enabled then return end
|
||||||
local effect, rank = libspell.GetSpellInfo(effect)
|
local effect, rank = libspell.GetSpellInfo(effect)
|
||||||
if not effect then return end
|
if not effect then return end
|
||||||
@@ -1016,13 +1014,14 @@ pfUI.hooksecurefunc("CastSpellByName", function(effect, target)
|
|||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
|
|
||||||
pfUI.hooksecurefunc("UseAction", function(slot, target, selfcast)
|
hooksecurefunc("UseAction", function(slot, target, selfcast)
|
||||||
if not libpredict.sender.enabled then return end
|
if not libpredict.sender.enabled then return end
|
||||||
if not IsCurrentAction(slot) then return end
|
if not IsCurrentAction(slot) then return end
|
||||||
local kind, id = GetActionInfo(slot)
|
local kind, id = GetActionInfo(slot)
|
||||||
local effect, rank
|
local effect, rank
|
||||||
if kind == "spell" then
|
if kind == "spell" then
|
||||||
effect, rank = GetSpellInfo(id)
|
local spellInfo = C_Spell.GetSpellInfo(id)
|
||||||
|
effect, rank = spellInfo.name, spellInfo.rank
|
||||||
elseif kind == "macro" then
|
elseif kind == "macro" then
|
||||||
effect, rank = GetMacroSpell(id)
|
effect, rank = GetMacroSpell(id)
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -1,59 +0,0 @@
|
|||||||
-- load pfUI environment
|
|
||||||
setfenv(1, pfUI:GetEnvironment())
|
|
||||||
|
|
||||||
--[[ libtooltip ]]--
|
|
||||||
-- A pfUI library that provides additional GameTooltip information.
|
|
||||||
--
|
|
||||||
-- libtooltip:GetItemID()
|
|
||||||
-- returns the itemID of the current GameTooltip
|
|
||||||
-- `nil` when no item is displayed
|
|
||||||
--
|
|
||||||
-- libtooltip:GetItemLink()
|
|
||||||
-- returns the itemLink of the current GameTooltip
|
|
||||||
-- `nil` when no item is displayed
|
|
||||||
--
|
|
||||||
-- libtooltip:GetItemCount()
|
|
||||||
-- returns the item count (bags) of the current GameTooltip
|
|
||||||
-- `nil` when no item is displayed
|
|
||||||
|
|
||||||
-- return instantly when another libtooltip is already active
|
|
||||||
if pfUI.api.libtooltip then return end
|
|
||||||
|
|
||||||
local libtooltip = CreateFrame("Frame" , "pfLibTooltip", GameTooltip)
|
|
||||||
|
|
||||||
libtooltip:SetScript("OnShow", function()
|
|
||||||
if this:GetParent():HasItem() then
|
|
||||||
libtooltip.itemName, libtooltip.itemLink, libtooltip.itemID = this:GetParent():GetItem()
|
|
||||||
end
|
|
||||||
end)
|
|
||||||
|
|
||||||
libtooltip:SetScript("OnHide", function()
|
|
||||||
this.itemID = nil
|
|
||||||
this.itemLink = nil
|
|
||||||
this.itemCount = nil
|
|
||||||
this.itemName = nil
|
|
||||||
end)
|
|
||||||
|
|
||||||
-- core functions
|
|
||||||
libtooltip.GetItemID = function(self)
|
|
||||||
if not libtooltip.itemLink then return end
|
|
||||||
if not libtooltip.itemID then
|
|
||||||
libtooltip.itemID = C_Item.GetItemInfoInstant(libtooltip.itemLink)
|
|
||||||
end
|
|
||||||
|
|
||||||
return libtooltip.itemID
|
|
||||||
end
|
|
||||||
|
|
||||||
libtooltip.GetItemLink = function(self)
|
|
||||||
return libtooltip.itemLink
|
|
||||||
end
|
|
||||||
|
|
||||||
libtooltip.GetItemCount = function(self)
|
|
||||||
return libtooltip.itemCount
|
|
||||||
end
|
|
||||||
|
|
||||||
pfUI.api.libtooltip = libtooltip
|
|
||||||
|
|
||||||
pfUI.hooksecurefunc(GameTooltip, "SetBagItem", function(self, container, slot)
|
|
||||||
_, libtooltip.itemCount = GetContainerItemInfo(container, slot)
|
|
||||||
end)
|
|
||||||
+7
-6
@@ -228,8 +228,8 @@ pfUI.libdebuff_spell_go_hooks["libtotem"] = function(spellId)
|
|||||||
-- use pending name/icon if available (set by CastSpellByName hook), else GetSpellInfo
|
-- use pending name/icon if available (set by CastSpellByName hook), else GetSpellInfo
|
||||||
local name = active[slot].pending_name
|
local name = active[slot].pending_name
|
||||||
local icon = active[slot].pending_icon
|
local icon = active[slot].pending_icon
|
||||||
if not name and GetSpellInfo then
|
if not name then
|
||||||
name = GetSpellInfo(spellId)
|
name = C_Spell.GetSpellName(spellId)
|
||||||
end
|
end
|
||||||
active[slot].name = name
|
active[slot].name = name
|
||||||
active[slot].duration = data.duration
|
active[slot].duration = data.duration
|
||||||
@@ -241,14 +241,14 @@ pfUI.libdebuff_spell_go_hooks["libtotem"] = function(spellId)
|
|||||||
end
|
end
|
||||||
|
|
||||||
-- Hook CastSpellByName to store pending name/icon per slot
|
-- Hook CastSpellByName to store pending name/icon per slot
|
||||||
pfUI.hooksecurefunc("CastSpellByName", function(effect, target)
|
hooksecurefunc("CastSpellByName", function(effect, target)
|
||||||
local name, rank, icon, _, _, _, spellId = libspell.GetSpellInfo(effect)
|
local name, rank, icon, _, _, _, spellId = libspell.GetSpellInfo(effect)
|
||||||
if not name then return end
|
if not name then return end
|
||||||
libtotem:CheckAddQueue(name, rank, icon, spellId)
|
libtotem:CheckAddQueue(name, rank, icon, spellId)
|
||||||
end)
|
end)
|
||||||
|
|
||||||
-- Hook CastSpell to store pending name/icon per slot
|
-- Hook CastSpell to store pending name/icon per slot
|
||||||
pfUI.hooksecurefunc("CastSpell", function(id, bookType)
|
hooksecurefunc("CastSpell", function(id, bookType)
|
||||||
if not id or not bookType then return end
|
if not id or not bookType then return end
|
||||||
if bookType ~= BOOKTYPE_SPELL and bookType ~= BOOKTYPE_PET then return end
|
if bookType ~= BOOKTYPE_SPELL and bookType ~= BOOKTYPE_PET then return end
|
||||||
local name, rank, icon, _, _, _, spellId = libspell.GetSpellInfo(id, bookType)
|
local name, rank, icon, _, _, _, spellId = libspell.GetSpellInfo(id, bookType)
|
||||||
@@ -259,13 +259,14 @@ end)
|
|||||||
-- Hook UseAction. GetActionInfo + GetMacroSpell give us the spellID
|
-- Hook UseAction. GetActionInfo + GetMacroSpell give us the spellID
|
||||||
-- directly for both spell-action and macro-action slots, so the
|
-- directly for both spell-action and macro-action slots, so the
|
||||||
-- tooltip-scan fallback (and the "no spellId available" caveat) goes away.
|
-- tooltip-scan fallback (and the "no spellId available" caveat) goes away.
|
||||||
pfUI.hooksecurefunc("UseAction", function(slot, target, selfcast)
|
hooksecurefunc("UseAction", function(slot, target, selfcast)
|
||||||
if not IsCurrentAction(slot) then return end
|
if not IsCurrentAction(slot) then return end
|
||||||
local kind, id = GetActionInfo(slot)
|
local kind, id = GetActionInfo(slot)
|
||||||
local name, rank, spellID
|
local name, rank, spellID
|
||||||
if kind == "spell" then
|
if kind == "spell" then
|
||||||
spellID = id
|
spellID = id
|
||||||
name, rank = GetSpellInfo(id)
|
local spellInfo = C_Spell.GetSpellInfo(id)
|
||||||
|
name, rank = spellInfo.name, spellInfo.rank
|
||||||
elseif kind == "macro" then
|
elseif kind == "macro" then
|
||||||
name, rank, spellID = GetMacroSpell(id)
|
name, rank, spellID = GetMacroSpell(id)
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -335,8 +335,7 @@ pfUI:RegisterModule("actionbar", function ()
|
|||||||
local slfcast = C.bars.altself == "1" and IsAltKeyDown() and true or self.slfcast
|
local slfcast = C.bars.altself == "1" and IsAltKeyDown() and true or self.slfcast
|
||||||
slfcast = C.bars.rightself == "1" and arg1 and arg1 == "RightButton" and true or slfcast
|
slfcast = C.bars.rightself == "1" and arg1 and arg1 == "RightButton" and true or slfcast
|
||||||
self.slfcast = nil
|
self.slfcast = nil
|
||||||
|
if ( C.bars.keydown == "1" and keystate == "down" and not drag_active ) or (C.bars.keydown == "0" and keystate == "up" or drag_active ) or self.bar == 11 or mouse then
|
||||||
if ( pfUI_config.bars.keydown == "1" and keystate == "down" and not drag_active ) or (pfUI_config.bars.keydown == "0" and keystate == "up" or drag_active ) or self.bar == 11 or mouse then
|
|
||||||
if self.bar == 11 then
|
if self.bar == 11 then
|
||||||
CastShapeshiftForm(self.id)
|
CastShapeshiftForm(self.id)
|
||||||
elseif grid == 1 then
|
elseif grid == 1 then
|
||||||
@@ -1356,6 +1355,7 @@ pfUI:RegisterModule("actionbar", function ()
|
|||||||
|
|
||||||
-- make stance bar dodge by default
|
-- make stance bar dodge by default
|
||||||
bars[i]:SetScript("OnShow", function()
|
bars[i]:SetScript("OnShow", function()
|
||||||
|
if pfUI.unlock and pfUI.unlock:IsShown() then return end
|
||||||
if bars[11] and bars[11]:IsShown() then
|
if bars[11] and bars[11]:IsShown() then
|
||||||
bars[11]:ClearAllPoints()
|
bars[11]:ClearAllPoints()
|
||||||
bars[11]:SetPoint("BOTTOM", bars[12], "TOP", 0, 3*border)
|
bars[11]:SetPoint("BOTTOM", bars[12], "TOP", 0, 3*border)
|
||||||
@@ -1365,6 +1365,7 @@ pfUI:RegisterModule("actionbar", function ()
|
|||||||
|
|
||||||
-- restore old stance bar position
|
-- restore old stance bar position
|
||||||
bars[i]:SetScript("OnHide", function()
|
bars[i]:SetScript("OnHide", function()
|
||||||
|
if pfUI.unlock and pfUI.unlock:IsShown() then return end
|
||||||
if bars[11] and bars[11]:IsShown() then
|
if bars[11] and bars[11]:IsShown() then
|
||||||
bars[11]:ClearAllPoints()
|
bars[11]:ClearAllPoints()
|
||||||
bars[11]:SetPoint("BOTTOM", bars[6], "TOP", 0, 3*border)
|
bars[11]:SetPoint("BOTTOM", bars[6], "TOP", 0, 3*border)
|
||||||
|
|||||||
@@ -440,6 +440,5 @@ pfUI:RegisterModule("addonbuttons", function ()
|
|||||||
|
|
||||||
pfUI.addonbuttons:UpdateConfig()
|
pfUI.addonbuttons:UpdateConfig()
|
||||||
|
|
||||||
_G.SLASH_PFABP1, _G.SLASH_PFABP2 = "/abp", "/pfabp"
|
pfUI.api.RegisterSlashCommand("PFABP", { "/abp", "/pfabp" }, ManualAddOrRemove, true)
|
||||||
_G.SlashCmdList.PFABP = ManualAddOrRemove
|
|
||||||
end)
|
end)
|
||||||
|
|||||||
@@ -217,6 +217,21 @@ pfUI:RegisterModule("addons", function ()
|
|||||||
pfUI.addons.list:RegisterEvent("PLAYER_ENTERING_WORLD")
|
pfUI.addons.list:RegisterEvent("PLAYER_ENTERING_WORLD")
|
||||||
pfUI.addons.list:SetHeight(GetNumAddOns() * 25 + 26)
|
pfUI.addons.list:SetHeight(GetNumAddOns() * 25 + 26)
|
||||||
|
|
||||||
|
local function AddDependencyLines(header, deps)
|
||||||
|
if not deps or table.getn(deps) == 0 then return end
|
||||||
|
GameTooltip:AddLine(" ")
|
||||||
|
GameTooltip:AddLine(header .. ":", .2, 1, .8)
|
||||||
|
for _, dep in ipairs(deps) do
|
||||||
|
if IsAddOnLoaded(dep) then
|
||||||
|
GameTooltip:AddLine(" " .. dep, .5, 1, .5)
|
||||||
|
elseif C_AddOns.DoesAddOnExist(dep) then
|
||||||
|
GameTooltip:AddLine(" " .. dep, 1, .82, 0)
|
||||||
|
else
|
||||||
|
GameTooltip:AddLine(" " .. dep .. " (" .. T["Missing"] .. ")", 1, .4, .4)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
local function AddonOnEnter()
|
local function AddonOnEnter()
|
||||||
this:SetBackdropBorderColor(1,1,1,.08)
|
this:SetBackdropBorderColor(1,1,1,.08)
|
||||||
|
|
||||||
@@ -231,6 +246,8 @@ pfUI:RegisterModule("addons", function ()
|
|||||||
end
|
end
|
||||||
|
|
||||||
GameTooltip:AddLine(this.anote, .75,.75,.75,1)
|
GameTooltip:AddLine(this.anote, .75,.75,.75,1)
|
||||||
|
AddDependencyLines(T["Dependencies"], this.adeps)
|
||||||
|
AddDependencyLines(T["Optional Dependencies"], this.aoptdeps)
|
||||||
GameTooltip:SetWidth(180)
|
GameTooltip:SetWidth(180)
|
||||||
GameTooltip:Show()
|
GameTooltip:Show()
|
||||||
end
|
end
|
||||||
@@ -272,6 +289,8 @@ pfUI:RegisterModule("addons", function ()
|
|||||||
frame.anote = anote
|
frame.anote = anote
|
||||||
frame.aauthor = aauthor
|
frame.aauthor = aauthor
|
||||||
frame.aversion = aversion
|
frame.aversion = aversion
|
||||||
|
frame.adeps = { GetAddOnDependencies(i) } -- required (.toc Dependencies)
|
||||||
|
frame.aoptdeps = { C_AddOns.GetAddOnOptionalDependencies(i) } -- optional (.toc OptionalDeps)
|
||||||
|
|
||||||
frame:SetWidth(340)
|
frame:SetWidth(340)
|
||||||
frame:SetHeight(25)
|
frame:SetHeight(25)
|
||||||
|
|||||||
+4
-5
@@ -1,5 +1,4 @@
|
|||||||
pfUI:RegisterModule("afkcam", function ()
|
pfUI:RegisterModule("afkcam", function ()
|
||||||
local MARKED_AFK_CAPTURE = SanitizePattern(MARKED_AFK_MESSAGE)
|
|
||||||
local social_chats = {
|
local social_chats = {
|
||||||
"CHAT_MSG_SAY",
|
"CHAT_MSG_SAY",
|
||||||
"CHAT_MSG_WHISPER",
|
"CHAT_MSG_WHISPER",
|
||||||
@@ -165,10 +164,10 @@ pfUI:RegisterModule("afkcam", function ()
|
|||||||
end)
|
end)
|
||||||
|
|
||||||
afkcam:SetScript("OnEvent", function()
|
afkcam:SetScript("OnEvent", function()
|
||||||
if event == "CHAT_MSG_SYSTEM" then
|
if event == "PLAYER_FLAGS_CHANGED" then
|
||||||
if (arg1 == _G.MARKED_AFK) or strfind(arg1, MARKED_AFK_CAPTURE) then
|
if UnitIsAFK('player') then
|
||||||
delay:Show()
|
delay:Show()
|
||||||
elseif (arg1 == _G.CLEARED_AFK) then
|
elseif delay:IsVisible() then
|
||||||
delay:Hide()
|
delay:Hide()
|
||||||
this:stop()
|
this:stop()
|
||||||
end
|
end
|
||||||
@@ -180,7 +179,7 @@ pfUI:RegisterModule("afkcam", function ()
|
|||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
|
|
||||||
afkcam:RegisterEvent("CHAT_MSG_SYSTEM")
|
afkcam:RegisterEvent("PLAYER_FLAGS_CHANGED")
|
||||||
afkcam:RegisterEvent("PLAYER_REGEN_DISABLED")
|
afkcam:RegisterEvent("PLAYER_REGEN_DISABLED")
|
||||||
afkcam:RegisterEvent("PLAYER_LEAVING_WORLD") -- reseting cvars on PLAYER_LOGOUT crashes the client ¯\_(ツ)_/¯
|
afkcam:RegisterEvent("PLAYER_LEAVING_WORLD") -- reseting cvars on PLAYER_LOGOUT crashes the client ¯\_(ツ)_/¯
|
||||||
end)
|
end)
|
||||||
|
|||||||
+7
-4
@@ -193,7 +193,7 @@ pfUI:RegisterModule("castbar", function ()
|
|||||||
cb.bar.left:SetFontObject(GameFontWhite)
|
cb.bar.left:SetFontObject(GameFontWhite)
|
||||||
cb.bar.left:SetTextColor(1,1,1,1)
|
cb.bar.left:SetTextColor(1,1,1,1)
|
||||||
cb.bar.left:SetFont(font, font_size, "OUTLINE")
|
cb.bar.left:SetFont(font, font_size, "OUTLINE")
|
||||||
cb.bar.left:SetJustifyH("left")
|
cb.bar.left:SetJustifyH(C.castbar[unitstr].namealign or "LEFT")
|
||||||
|
|
||||||
-- text right
|
-- text right
|
||||||
cb.bar.right = cb.bar:CreateFontString("Status", "DIALOG", "GameFontNormal")
|
cb.bar.right = cb.bar:CreateFontString("Status", "DIALOG", "GameFontNormal")
|
||||||
@@ -204,7 +204,7 @@ pfUI:RegisterModule("castbar", function ()
|
|||||||
cb.bar.right:SetFontObject(GameFontWhite)
|
cb.bar.right:SetFontObject(GameFontWhite)
|
||||||
cb.bar.right:SetTextColor(1,1,1,1)
|
cb.bar.right:SetTextColor(1,1,1,1)
|
||||||
cb.bar.right:SetFont(font, font_size, "OUTLINE")
|
cb.bar.right:SetFont(font, font_size, "OUTLINE")
|
||||||
cb.bar.right:SetJustifyH("right")
|
cb.bar.right:SetJustifyH(C.castbar[unitstr].timealign or "RIGHT")
|
||||||
|
|
||||||
cb.bar.lag = cb.bar:CreateTexture(nil, "OVERLAY")
|
cb.bar.lag = cb.bar:CreateTexture(nil, "OVERLAY")
|
||||||
cb.bar.lag:SetPoint("TOPRIGHT", cb.bar, "TOPRIGHT", 0, 0)
|
cb.bar.lag:SetPoint("TOPRIGHT", cb.bar, "TOPRIGHT", 0, 0)
|
||||||
@@ -241,7 +241,10 @@ pfUI:RegisterModule("castbar", function ()
|
|||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
if not this.endTime then return end
|
if not this.endTime then
|
||||||
|
if this:GetAlpha() ~= 0 then this:SetAlpha(0) end
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
-- Non-player bars: if the unit disappears (target died / detarget),
|
-- Non-player bars: if the unit disappears (target died / detarget),
|
||||||
-- drop the bar immediately.
|
-- drop the bar immediately.
|
||||||
@@ -487,7 +490,7 @@ pfUI:RegisterModule("castbar", function ()
|
|||||||
-- (the config knob is read at event time so toggling takes effect on the
|
-- (the config knob is read at event time so toggling takes effect on the
|
||||||
-- next craft without a /reload). DoTradeSkill is synchronous; the server
|
-- next craft without a /reload). DoTradeSkill is synchronous; the server
|
||||||
-- roundtrip to SPELLCAST_START gives us plenty of time after this hook.
|
-- roundtrip to SPELLCAST_START gives us plenty of time after this hook.
|
||||||
pfUI.hooksecurefunc("DoTradeSkill", function(index, num)
|
hooksecurefunc("DoTradeSkill", function(index, num)
|
||||||
if pfUI.castbar.player then
|
if pfUI.castbar.player then
|
||||||
pfUI.castbar.player.pendingTradeskillCount = tonumber(num) or 1
|
pfUI.castbar.player.pendingTradeskillCount = tonumber(num) or 1
|
||||||
end
|
end
|
||||||
|
|||||||
+2
-2
@@ -24,7 +24,7 @@ pfUI:RegisterModule("chat", function ()
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
pfUI.hooksecurefunc("UnitPopup_OnClick", function(self)
|
hooksecurefunc("UnitPopup_OnClick", function(self)
|
||||||
if this.value == "IGNORE_PLAYER" then
|
if this.value == "IGNORE_PLAYER" then
|
||||||
AddIgnore(_G[UIDROPDOWNMENU_INIT_MENU].name)
|
AddIgnore(_G[UIDROPDOWNMENU_INIT_MENU].name)
|
||||||
end
|
end
|
||||||
@@ -449,7 +449,7 @@ pfUI:RegisterModule("chat", function ()
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
pfUI.hooksecurefunc("FCF_SaveDock", pfUI.chat.RefreshChat)
|
hooksecurefunc("FCF_SaveDock", pfUI.chat.RefreshChat)
|
||||||
|
|
||||||
if C.chat.global.tabmouse == "1" then
|
if C.chat.global.tabmouse == "1" then
|
||||||
pfUI.chat.mouseovertab = CreateFrame("Frame")
|
pfUI.chat.mouseovertab = CreateFrame("Frame")
|
||||||
|
|||||||
@@ -136,5 +136,5 @@ pfUI:RegisterModule("cooldown", function ()
|
|||||||
|
|
||||||
-- vanilla does not have a cooldown frame type, so we hook the
|
-- vanilla does not have a cooldown frame type, so we hook the
|
||||||
-- regular SetTimer function that each one is calling.
|
-- regular SetTimer function that each one is calling.
|
||||||
pfUI.hooksecurefunc("CooldownFrame_SetTimer", SetCooldown)
|
hooksecurefunc("CooldownFrame_SetTimer", SetCooldown)
|
||||||
end)
|
end)
|
||||||
@@ -8,9 +8,9 @@ pfUI:RegisterModule("easteregg", function ()
|
|||||||
local pvpking = CreateFrame("Frame", "pfPvPKing", UIParent)
|
local pvpking = CreateFrame("Frame", "pfPvPKing", UIParent)
|
||||||
pvpking:Hide()
|
pvpking:Hide()
|
||||||
|
|
||||||
pvpking:RegisterEvent("CHAT_MSG_SYSTEM")
|
pvpking:RegisterEvent("PLAYER_FLAGS_CHANGED")
|
||||||
pvpking:SetScript("OnEvent", function()
|
pvpking:SetScript("OnEvent", function()
|
||||||
if strfind(arg1, "You are now", 1) and strfind(arg1, "(AFK)", 1) then
|
if UnitIsAFK('player') then
|
||||||
_G.CHAT_FLAG_AFK = title .. " "
|
_G.CHAT_FLAG_AFK = title .. " "
|
||||||
this.time = GetTime()
|
this.time = GetTime()
|
||||||
this:Show()
|
this:Show()
|
||||||
@@ -61,14 +61,13 @@ pfUI:RegisterModule("easteregg", function ()
|
|||||||
end)
|
end)
|
||||||
|
|
||||||
-- trigger fireworks when being AFK
|
-- trigger fireworks when being AFK
|
||||||
fireworks:RegisterEvent("CHAT_MSG_SYSTEM")
|
fireworks:RegisterEvent("PLAYER_FLAGS_CHANGED")
|
||||||
fireworks:SetScript("OnEvent", function()
|
fireworks:SetScript("OnEvent", function()
|
||||||
if strfind(arg1, _G.MARKED_AFK) or strfind(arg1, _G.MARKED_AFK_MESSAGE) then
|
local isAFK = UnitIsAFK('player')
|
||||||
|
if isAFK then
|
||||||
this:SetAlpha(0)
|
this:SetAlpha(0)
|
||||||
this:Show()
|
|
||||||
elseif strfind(arg1, _G.CLEARED_AFK) then
|
|
||||||
this:Hide()
|
|
||||||
end
|
end
|
||||||
|
this:SetShown(isAFK)
|
||||||
end)
|
end)
|
||||||
|
|
||||||
-- basic explosion animation
|
-- basic explosion animation
|
||||||
|
|||||||
@@ -88,7 +88,7 @@ pfUI:RegisterModule("eqcompare", function ()
|
|||||||
|
|
||||||
local prevMerchant = ShoppingTooltip1.SetMerchantCompareItem
|
local prevMerchant = ShoppingTooltip1.SetMerchantCompareItem
|
||||||
local function SetMerchantCompareItem(self, index, compareItem)
|
local function SetMerchantCompareItem(self, index, compareItem)
|
||||||
if C.tooltip.compare.basestats == "1" and compareItem == 1 then
|
if compareItem == 1 then
|
||||||
ShowCompareItem(nil, GetMerchantItemLink(index), 1)
|
ShowCompareItem(nil, GetMerchantItemLink(index), 1)
|
||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
@@ -97,7 +97,7 @@ pfUI:RegisterModule("eqcompare", function ()
|
|||||||
|
|
||||||
local prevAuction = ShoppingTooltip1.SetAuctionCompareItem
|
local prevAuction = ShoppingTooltip1.SetAuctionCompareItem
|
||||||
local function SetAuctionCompareItem(self, type, index, compareItem)
|
local function SetAuctionCompareItem(self, type, index, compareItem)
|
||||||
if C.tooltip.compare.basestats == "1" and compareItem == 1 then
|
if compareItem == 1 then
|
||||||
ShowCompareItem(nil, GetAuctionItemLink(type, index), 1)
|
ShowCompareItem(nil, GetAuctionItemLink(type, index), 1)
|
||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
@@ -132,15 +132,13 @@ pfUI:RegisterModule("eqcompare", function ()
|
|||||||
|
|
||||||
local function makeHook(getter)
|
local function makeHook(getter)
|
||||||
return function(tooltip, arg1, arg2, arg3)
|
return function(tooltip, arg1, arg2, arg3)
|
||||||
if C.tooltip.compare.basestats == "1" then
|
ShowCompareItem(tooltip, getter(arg1, arg2, arg3))
|
||||||
ShowCompareItem(tooltip, getter(arg1, arg2, arg3))
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
local function HookTooltip(tooltip)
|
local function HookTooltip(tooltip)
|
||||||
for setter, getter in pairs(TooltipHooks) do
|
for setter, getter in pairs(TooltipHooks) do
|
||||||
pfUI.hooksecurefunc(tooltip, setter, makeHook(getter))
|
hooksecurefunc(tooltip, setter, makeHook(getter))
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -940,10 +940,10 @@ pfUI:RegisterModule("equipmentmanager", function()
|
|||||||
|
|
||||||
-- Tie popout visibility to the EM sidecar. They appear when the
|
-- Tie popout visibility to the EM sidecar. They appear when the
|
||||||
-- sidecar opens, hide when it closes, and the flyout closes too.
|
-- sidecar opens, hide when it closes, and the flyout closes too.
|
||||||
HookScript(frame, "OnShow", function()
|
frame:HookScript("OnShow", function()
|
||||||
for _, b in ipairs(popoutButtons) do b:Show() end
|
for _, b in ipairs(popoutButtons) do b:Show() end
|
||||||
end)
|
end)
|
||||||
HookScript(frame, "OnHide", function()
|
frame:HookScript("OnHide", function()
|
||||||
for _, b in ipairs(popoutButtons) do b:Hide() end
|
for _, b in ipairs(popoutButtons) do b:Hide() end
|
||||||
if flyout then flyout:Hide() end
|
if flyout then flyout:Hide() end
|
||||||
end)
|
end)
|
||||||
|
|||||||
@@ -25,8 +25,7 @@ pfUI:RegisterModule("farmmode", function ()
|
|||||||
Minimap_ZoomOut()
|
Minimap_ZoomOut()
|
||||||
end
|
end
|
||||||
|
|
||||||
_G.SLASH_PFFARMMAP1, _G.SLASH_PFFARMMAP2 = "/farm", "/farmmode"
|
pfUI.api.RegisterSlashCommand("PFFARMMAP", { "/farm", "/farmmode" }, ToggleFarmMode, true)
|
||||||
_G.SlashCmdList.PFFARMMAP = ToggleFarmMode
|
|
||||||
|
|
||||||
pfUI.farmmap = CreateFrame("Minimap", "pfFarmMap", UIParent)
|
pfUI.farmmap = CreateFrame("Minimap", "pfFarmMap", UIParent)
|
||||||
pfUI.farmmap:Hide()
|
pfUI.farmmap:Hide()
|
||||||
|
|||||||
+6
-9
@@ -30,8 +30,7 @@ end)
|
|||||||
-- /focusname is pfUI-specific because the engine has no name→GUID
|
-- /focusname is pfUI-specific because the engine has no name→GUID
|
||||||
-- lookup for off-screen units — we resolve via a short target-swap.
|
-- lookup for off-screen units — we resolve via a short target-swap.
|
||||||
|
|
||||||
SLASH_PFFOCUSNAME1, SLASH_PFFOCUSNAME2 = '/focusname', '/pffocusname'
|
pfUI.api.RegisterSlashCommand("PFFOCUSNAME", { '/focusname', '/pffocusname' }, function(msg)
|
||||||
function SlashCmdList.PFFOCUSNAME(msg)
|
|
||||||
if msg == "" then return end
|
if msg == "" then return end
|
||||||
|
|
||||||
local prevGUID = UnitGUID("target")
|
local prevGUID = UnitGUID("target")
|
||||||
@@ -61,10 +60,9 @@ function SlashCmdList.PFFOCUSNAME(msg)
|
|||||||
else
|
else
|
||||||
ClearTarget()
|
ClearTarget()
|
||||||
end
|
end
|
||||||
end
|
end, true)
|
||||||
|
|
||||||
SLASH_PFCASTFOCUS1, SLASH_PFCASTFOCUS2 = '/castfocus', '/pfcastfocus'
|
pfUI.api.RegisterSlashCommand("PFCASTFOCUS", { '/castfocus', '/pfcastfocus' }, function(msg)
|
||||||
function SlashCmdList.PFCASTFOCUS(msg)
|
|
||||||
local focusGUID = UnitGUID("focus")
|
local focusGUID = UnitGUID("focus")
|
||||||
if not focusGUID or focusGUID == "0x0000000000000000" then
|
if not focusGUID or focusGUID == "0x0000000000000000" then
|
||||||
UIErrorsFrame:AddMessage(SPELL_FAILED_BAD_TARGETS, 1, 0, 0)
|
UIErrorsFrame:AddMessage(SPELL_FAILED_BAD_TARGETS, 1, 0, 0)
|
||||||
@@ -105,10 +103,9 @@ function SlashCmdList.PFCASTFOCUS(msg)
|
|||||||
else
|
else
|
||||||
TargetLastTarget()
|
TargetLastTarget()
|
||||||
end
|
end
|
||||||
end
|
end, true)
|
||||||
|
|
||||||
SLASH_PFSWAPFOCUS1, SLASH_PFSWAPFOCUS2 = '/swapfocus', '/pfswapfocus'
|
pfUI.api.RegisterSlashCommand("PFSWAPFOCUS", { '/swapfocus', '/pfswapfocus' }, function(msg)
|
||||||
function SlashCmdList.PFSWAPFOCUS(msg)
|
|
||||||
local targetGUID = UnitGUID("target")
|
local targetGUID = UnitGUID("target")
|
||||||
local oldFocusGUID = UnitGUID("focus")
|
local oldFocusGUID = UnitGUID("focus")
|
||||||
|
|
||||||
@@ -118,4 +115,4 @@ function SlashCmdList.PFSWAPFOCUS(msg)
|
|||||||
TargetUnit(oldFocusGUID)
|
TargetUnit(oldFocusGUID)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end, true)
|
||||||
|
|||||||
+2
-2
@@ -150,7 +150,7 @@ pfUI:RegisterSkin("Friends", function ()
|
|||||||
end
|
end
|
||||||
|
|
||||||
-- set positions
|
-- set positions
|
||||||
pfUI.hooksecurefunc("WhoList_Update", function()
|
hooksecurefunc("WhoList_Update", function()
|
||||||
for i = 1, WHOS_TO_DISPLAY do
|
for i = 1, WHOS_TO_DISPLAY do
|
||||||
local level = _G["WhoFrameButton"..i.."Level"]
|
local level = _G["WhoFrameButton"..i.."Level"]
|
||||||
level:ClearAllPoints()
|
level:ClearAllPoints()
|
||||||
@@ -231,7 +231,7 @@ pfUI:RegisterSkin("Friends", function ()
|
|||||||
end
|
end
|
||||||
|
|
||||||
-- set positions
|
-- set positions
|
||||||
pfUI.hooksecurefunc("GuildStatus_Update", function()
|
hooksecurefunc("GuildStatus_Update", function()
|
||||||
for i = 1, GUILDMEMBERS_TO_DISPLAY do
|
for i = 1, GUILDMEMBERS_TO_DISPLAY do
|
||||||
local level = _G["GuildFrameButton"..i.."Level"]
|
local level = _G["GuildFrameButton"..i.."Level"]
|
||||||
level:ClearAllPoints()
|
level:ClearAllPoints()
|
||||||
|
|||||||
+1
-1
@@ -86,7 +86,7 @@ pfUI:RegisterModule("gm", function ()
|
|||||||
-- pet dropdown
|
-- pet dropdown
|
||||||
-- table.insert(UnitPopupMenus["PET"], "GM_HEADER")
|
-- table.insert(UnitPopupMenus["PET"], "GM_HEADER")
|
||||||
|
|
||||||
pfUI.hooksecurefunc("UnitPopup_OnClick", function()
|
hooksecurefunc("UnitPopup_OnClick", function()
|
||||||
local dropdownFrame = _G[UIDROPDOWNMENU_INIT_MENU]
|
local dropdownFrame = _G[UIDROPDOWNMENU_INIT_MENU]
|
||||||
local button = this.value
|
local button = this.value
|
||||||
local unit = dropdownFrame.unit
|
local unit = dropdownFrame.unit
|
||||||
|
|||||||
+31
-32
@@ -912,6 +912,11 @@ pfUI:RegisterModule("gui", function ()
|
|||||||
"1:" .. T["1 Decimal (2.1)"],
|
"1:" .. T["1 Decimal (2.1)"],
|
||||||
"2:" .. T["2 Decimals (2.14)"],
|
"2:" .. T["2 Decimals (2.14)"],
|
||||||
},
|
},
|
||||||
|
["castbaralign"] = {
|
||||||
|
"LEFT:" .. T["Left"],
|
||||||
|
"CENTER:" .. T["Center"],
|
||||||
|
"RIGHT:" .. T["Right"],
|
||||||
|
},
|
||||||
["orientation"] = {
|
["orientation"] = {
|
||||||
"HORIZONTAL:" .. T["Horizontal"],
|
"HORIZONTAL:" .. T["Horizontal"],
|
||||||
"VERTICAL:" .. T["Vertical"],
|
"VERTICAL:" .. T["Vertical"],
|
||||||
@@ -2754,76 +2759,70 @@ pfUI:RegisterModule("gui", function ()
|
|||||||
CreateConfig(nil, T["Show Movement Speed"], C.tooltip, "movespeed", "checkbox")
|
CreateConfig(nil, T["Show Movement Speed"], C.tooltip, "movespeed", "checkbox")
|
||||||
CreateConfig(nil, T["Custom Transparency"], C.tooltip, "alpha")
|
CreateConfig(nil, T["Custom Transparency"], C.tooltip, "alpha")
|
||||||
CreateConfig(nil, T["Status Bar Texture"], C.tooltip.statusbar, "texture", "dropdown", pfUI.gui.dropdowns.uf_bartexture)
|
CreateConfig(nil, T["Status Bar Texture"], C.tooltip.statusbar, "texture", "dropdown", pfUI.gui.dropdowns.uf_bartexture)
|
||||||
CreateConfig(nil, T["Compare Item Base Stats"], C.tooltip.compare, "basestats", "checkbox")
|
CreateConfig(nil, T["Always Show Item Comparison"], C.tooltip.compare, "showalways", "checkbox")
|
||||||
local showAlways = CreateConfig(nil, T["Always Show Item Comparison"], C.tooltip.compare, "showalways", "checkbox")
|
|
||||||
local function gate()
|
|
||||||
local on = C.tooltip.compare.basestats == "1"
|
|
||||||
if on then
|
|
||||||
showAlways.input:Enable()
|
|
||||||
showAlways.caption:SetTextColor(1, 1, 1)
|
|
||||||
else
|
|
||||||
showAlways.input:Disable()
|
|
||||||
showAlways.caption:SetTextColor(0.5, 0.5, 0.5)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
gate()
|
|
||||||
pfUI.events:RegisterCallback("config:changed", function(_, cat, key)
|
|
||||||
if cat == C.tooltip.compare and key == "basestats" then gate() end
|
|
||||||
end, "eqcompare-showalways-gate")
|
|
||||||
CreateConfig(nil, T["Always Show Extended Vendor Values"], C.tooltip.vendor, "showalways", "checkbox")
|
CreateConfig(nil, T["Always Show Extended Vendor Values"], C.tooltip.vendor, "showalways", "checkbox")
|
||||||
CreateConfig(U["questitem"], T["Show Related Quest On Questitems"], C.tooltip.questitem, "showquest", "checkbox")
|
CreateConfig(U["questitem"], T["Show Related Quest On Questitems"], C.tooltip.questitem, "showquest", "checkbox")
|
||||||
CreateConfig(U["questitem"], T["Show Required Questitem Count"], C.tooltip.questitem, "showcount", "checkbox")
|
CreateConfig(U["questitem"], T["Show Required Questitem Count"], C.tooltip.questitem, "showcount", "checkbox")
|
||||||
end)
|
end)
|
||||||
|
|
||||||
CreateGUIEntry(T["Castbar"], nil, function()
|
CreateGUIEntry(T["Castbar"], T["General"], function()
|
||||||
CreateConfig(nil, T["Use Unit Fonts"], C.castbar, "use_unitfonts", "checkbox")
|
CreateConfig(nil, T["Use Unit Fonts"], C.castbar, "use_unitfonts", "checkbox")
|
||||||
CreateConfig(nil, T["Casting Color"], C.appearance.castbar, "castbarcolor", "color")
|
CreateConfig(nil, T["Casting Color"], C.appearance.castbar, "castbarcolor", "color")
|
||||||
CreateConfig(nil, T["Channeling Color"], C.appearance.castbar, "channelcolor", "color")
|
CreateConfig(nil, T["Channeling Color"], C.appearance.castbar, "channelcolor", "color")
|
||||||
CreateConfig(nil, T["Castbar Texture"], C.appearance.castbar, "texture", "dropdown", pfUI.gui.dropdowns.uf_bartexture)
|
CreateConfig(nil, T["Castbar Texture"], C.appearance.castbar, "texture", "dropdown", pfUI.gui.dropdowns.uf_bartexture)
|
||||||
CreateConfig(nil, T["Disable Blizzard Castbar"], C.castbar.player, "hide_blizz", "checkbox")
|
CreateConfig(nil, T["Disable Blizzard Castbar"], C.castbar.player, "hide_blizz", "checkbox")
|
||||||
|
end)
|
||||||
|
|
||||||
CreateConfig(nil, T["Player Castbar"], nil, nil, "header")
|
CreateGUIEntry(T["Castbar"], T["Player"], function()
|
||||||
CreateConfig(nil, T["Disable Player Castbar"], C.castbar.player, "hide_pfui", "checkbox")
|
CreateConfig(nil, T["Disable Player Castbar"], C.castbar.player, "hide_pfui", "checkbox")
|
||||||
CreateConfig(nil, T["Castbar Width"], C.castbar.player, "width")
|
CreateConfig(nil, T["Castbar Width"], C.castbar.player, "width")
|
||||||
CreateConfig(nil, T["Castbar Height"], C.castbar.player, "height")
|
CreateConfig(nil, T["Castbar Height"], C.castbar.player, "height")
|
||||||
CreateConfig(nil, T["Show Spell Icon"], C.castbar.player, "showicon", "checkbox")
|
CreateConfig(nil, T["Show Spell Icon"], C.castbar.player, "showicon", "checkbox")
|
||||||
CreateConfig(nil, T["Show Spell Name"], C.castbar.player, "showname", "checkbox")
|
CreateConfig(nil, T["Show Spell Name"], C.castbar.player, "showname", "checkbox")
|
||||||
|
CreateConfig(nil, T["Spell Name Alignment"], C.castbar.player, "namealign", "dropdown", pfUI.gui.dropdowns.castbaralign)
|
||||||
|
CreateConfig(nil, T["Spell Name X Offset"], C.castbar.player, "txtleftoffx")
|
||||||
|
CreateConfig(nil, T["Spell Name Y Offset"], C.castbar.player, "txtleftoffy")
|
||||||
CreateConfig(nil, T["Show Timer"], C.castbar.player, "showtimer", "checkbox")
|
CreateConfig(nil, T["Show Timer"], C.castbar.player, "showtimer", "checkbox")
|
||||||
CreateConfig(nil, T["Left Text X Offset"], C.castbar.player, "txtleftoffx")
|
CreateConfig(nil, T["Timer Alignment"], C.castbar.player, "timealign", "dropdown", pfUI.gui.dropdowns.castbaralign)
|
||||||
CreateConfig(nil, T["Left Text Y Offset"], C.castbar.player, "txtleftoffy")
|
CreateConfig(nil, T["Timer X Offset"], C.castbar.player, "txtrightoffx")
|
||||||
|
CreateConfig(nil, T["Timer Y Offset"], C.castbar.player, "txtrightoffy")
|
||||||
CreateConfig(nil, T["Show Lag"], C.castbar.player, "showlag", "checkbox")
|
CreateConfig(nil, T["Show Lag"], C.castbar.player, "showlag", "checkbox")
|
||||||
CreateConfig(nil, T["Show Rank"], C.castbar.player, "showrank", "checkbox")
|
CreateConfig(nil, T["Show Rank"], C.castbar.player, "showrank", "checkbox")
|
||||||
CreateConfig(nil, T["Merge Tradeskill Casts"], C.castbar.player, "mergetradeskill", "checkbox")
|
CreateConfig(nil, T["Merge Tradeskill Casts"], C.castbar.player, "mergetradeskill", "checkbox")
|
||||||
CreateConfig(nil, T["Right Text X Offset"], C.castbar.player, "txtrightoffx")
|
end)
|
||||||
CreateConfig(nil, T["Right Text Y Offset"], C.castbar.player, "txtrightoffy")
|
|
||||||
|
|
||||||
CreateConfig(nil, T["Target Castbar"], nil, nil, "header")
|
CreateGUIEntry(T["Castbar"], T["Target"], function()
|
||||||
CreateConfig(nil, T["Disable Target Castbar"], C.castbar.target, "hide_pfui", "checkbox")
|
CreateConfig(nil, T["Disable Target Castbar"], C.castbar.target, "hide_pfui", "checkbox")
|
||||||
CreateConfig(nil, T["Castbar Width"], C.castbar.target, "width")
|
CreateConfig(nil, T["Castbar Width"], C.castbar.target, "width")
|
||||||
CreateConfig(nil, T["Castbar Height"], C.castbar.target, "height")
|
CreateConfig(nil, T["Castbar Height"], C.castbar.target, "height")
|
||||||
CreateConfig(nil, T["Show Spell Icon"], C.castbar.target, "showicon", "checkbox")
|
CreateConfig(nil, T["Show Spell Icon"], C.castbar.target, "showicon", "checkbox")
|
||||||
CreateConfig(nil, T["Show Spell Name"], C.castbar.target, "showname", "checkbox")
|
CreateConfig(nil, T["Show Spell Name"], C.castbar.target, "showname", "checkbox")
|
||||||
|
CreateConfig(nil, T["Spell Name Alignment"], C.castbar.target, "namealign", "dropdown", pfUI.gui.dropdowns.castbaralign)
|
||||||
|
CreateConfig(nil, T["Spell Name X Offset"], C.castbar.target, "txtleftoffx")
|
||||||
|
CreateConfig(nil, T["Spell Name Y Offset"], C.castbar.target, "txtleftoffy")
|
||||||
CreateConfig(nil, T["Show Timer"], C.castbar.target, "showtimer", "checkbox")
|
CreateConfig(nil, T["Show Timer"], C.castbar.target, "showtimer", "checkbox")
|
||||||
CreateConfig(nil, T["Left Text X Offset"], C.castbar.target, "txtleftoffx")
|
CreateConfig(nil, T["Timer Alignment"], C.castbar.target, "timealign", "dropdown", pfUI.gui.dropdowns.castbaralign)
|
||||||
CreateConfig(nil, T["Left Text Y Offset"], C.castbar.target, "txtleftoffy")
|
CreateConfig(nil, T["Timer X Offset"], C.castbar.target, "txtrightoffx")
|
||||||
|
CreateConfig(nil, T["Timer Y Offset"], C.castbar.target, "txtrightoffy")
|
||||||
CreateConfig(nil, T["Show Lag"], C.castbar.target, "showlag", "checkbox")
|
CreateConfig(nil, T["Show Lag"], C.castbar.target, "showlag", "checkbox")
|
||||||
CreateConfig(nil, T["Show Rank"], C.castbar.target, "showrank", "checkbox")
|
CreateConfig(nil, T["Show Rank"], C.castbar.target, "showrank", "checkbox")
|
||||||
CreateConfig(nil, T["Right Text X Offset"], C.castbar.target, "txtrightoffx")
|
end)
|
||||||
CreateConfig(nil, T["Right Text Y Offset"], C.castbar.target, "txtrightoffy")
|
|
||||||
|
|
||||||
CreateConfig(nil, T["Focus Castbar"], nil, nil, "header")
|
CreateGUIEntry(T["Castbar"], T["Focus"], function()
|
||||||
CreateConfig(nil, T["Disable Focus Castbar"], C.castbar.focus, "hide_pfui", "checkbox")
|
CreateConfig(nil, T["Disable Focus Castbar"], C.castbar.focus, "hide_pfui", "checkbox")
|
||||||
CreateConfig(nil, T["Castbar Width"], C.castbar.focus, "width")
|
CreateConfig(nil, T["Castbar Width"], C.castbar.focus, "width")
|
||||||
CreateConfig(nil, T["Castbar Height"], C.castbar.focus, "height")
|
CreateConfig(nil, T["Castbar Height"], C.castbar.focus, "height")
|
||||||
CreateConfig(nil, T["Show Spell Icon"], C.castbar.focus, "showicon", "checkbox")
|
CreateConfig(nil, T["Show Spell Icon"], C.castbar.focus, "showicon", "checkbox")
|
||||||
CreateConfig(nil, T["Show Spell Name"], C.castbar.focus, "showname", "checkbox")
|
CreateConfig(nil, T["Show Spell Name"], C.castbar.focus, "showname", "checkbox")
|
||||||
|
CreateConfig(nil, T["Spell Name Alignment"], C.castbar.focus, "namealign", "dropdown", pfUI.gui.dropdowns.castbaralign)
|
||||||
|
CreateConfig(nil, T["Spell Name X Offset"], C.castbar.focus, "txtleftoffx")
|
||||||
|
CreateConfig(nil, T["Spell Name Y Offset"], C.castbar.focus, "txtleftoffy")
|
||||||
CreateConfig(nil, T["Show Timer"], C.castbar.focus, "showtimer", "checkbox")
|
CreateConfig(nil, T["Show Timer"], C.castbar.focus, "showtimer", "checkbox")
|
||||||
CreateConfig(nil, T["Left Text X Offset"], C.castbar.focus, "txtleftoffx")
|
CreateConfig(nil, T["Timer Alignment"], C.castbar.focus, "timealign", "dropdown", pfUI.gui.dropdowns.castbaralign)
|
||||||
CreateConfig(nil, T["Left Text Y Offset"], C.castbar.focus, "txtleftoffy")
|
CreateConfig(nil, T["Timer X Offset"], C.castbar.focus, "txtrightoffx")
|
||||||
|
CreateConfig(nil, T["Timer Y Offset"], C.castbar.focus, "txtrightoffy")
|
||||||
CreateConfig(nil, T["Show Lag"], C.castbar.focus, "showlag", "checkbox")
|
CreateConfig(nil, T["Show Lag"], C.castbar.focus, "showlag", "checkbox")
|
||||||
CreateConfig(nil, T["Show Rank"], C.castbar.focus, "showrank", "checkbox")
|
CreateConfig(nil, T["Show Rank"], C.castbar.focus, "showrank", "checkbox")
|
||||||
CreateConfig(nil, T["Right Text X Offset"], C.castbar.focus, "txtrightoffx")
|
|
||||||
CreateConfig(nil, T["Right Text Y Offset"], C.castbar.focus, "txtrightoffy")
|
|
||||||
end)
|
end)
|
||||||
|
|
||||||
CreateGUIEntry(T["Chat"], nil, function()
|
CreateGUIEntry(T["Chat"], nil, function()
|
||||||
|
|||||||
@@ -2,7 +2,6 @@
|
|||||||
-- Announces Innervate casts via raid/party/battleground chat
|
-- Announces Innervate casts via raid/party/battleground chat
|
||||||
-- Registers AURA_CAST events directly - zero polling, pure event-driven
|
-- Registers AURA_CAST events directly - zero polling, pure event-driven
|
||||||
|
|
||||||
pfUI:RegisterNewModule("innervatecall", "Innervate Callout", "DRUID")
|
|
||||||
pfUI:RegisterModule("innervatecall", function ()
|
pfUI:RegisterModule("innervatecall", function ()
|
||||||
-- Requires Nampower for AURA_CAST events
|
-- Requires Nampower for AURA_CAST events
|
||||||
if not GetNampowerVersion then return end
|
if not GetNampowerVersion then return end
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ pfUI:RegisterModule("itemcount", function ()
|
|||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
|
|
||||||
pfUI.hooksecurefunc("SetItemRef", function()
|
hooksecurefunc("SetItemRef", function()
|
||||||
if ItemRefTooltip:HasItem() then
|
if ItemRefTooltip:HasItem() then
|
||||||
local _, _, id = ItemRefTooltip:GetItem()
|
local _, _, id = ItemRefTooltip:GetItem()
|
||||||
if id then AddCounts(ItemRefTooltip, id) end
|
if id then AddCounts(ItemRefTooltip, id) end
|
||||||
|
|||||||
+2
-2
@@ -392,7 +392,7 @@ pfUI:RegisterModule("loot", function ()
|
|||||||
end
|
end
|
||||||
pfUI.loot:RemoveMasterlootMenus() -- remove then add to ensure no duplicate menus
|
pfUI.loot:RemoveMasterlootMenus() -- remove then add to ensure no duplicate menus
|
||||||
pfUI.loot:AddMasterLootMenus()
|
pfUI.loot:AddMasterLootMenus()
|
||||||
pfUI.hooksecurefunc("UnitPopup_OnClick",function()
|
hooksecurefunc("UnitPopup_OnClick",function()
|
||||||
local dropdownFrame = _G[UIDROPDOWNMENU_INIT_MENU]
|
local dropdownFrame = _G[UIDROPDOWNMENU_INIT_MENU]
|
||||||
if not dropdownFrame then return end
|
if not dropdownFrame then return end
|
||||||
local button = this.value
|
local button = this.value
|
||||||
@@ -405,7 +405,7 @@ pfUI:RegisterModule("loot", function ()
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
pfUI.hooksecurefunc("UnitPopup_HideButtons",function()
|
hooksecurefunc("UnitPopup_HideButtons",function()
|
||||||
local dropdownFrame = _G[UIDROPDOWNMENU_INIT_MENU]
|
local dropdownFrame = _G[UIDROPDOWNMENU_INIT_MENU]
|
||||||
local unit = dropdownFrame.unit
|
local unit = dropdownFrame.unit
|
||||||
local name = dropdownFrame.name
|
local name = dropdownFrame.name
|
||||||
|
|||||||
@@ -0,0 +1,388 @@
|
|||||||
|
pfUI:RegisterModule("loothistory", function ()
|
||||||
|
local rawborder, border = GetBorderSize()
|
||||||
|
|
||||||
|
-- Layout
|
||||||
|
local ITEM_H, PLAYER_H = 24, 18
|
||||||
|
local ITEM_W, PLAYER_W = 350, 330
|
||||||
|
|
||||||
|
-- rollType constants returned by C_LootHistory.GetPlayerInfo (0/1/2; vanilla
|
||||||
|
-- has no disenchant roll).
|
||||||
|
local ROLL_PASS, ROLL_NEED, ROLL_GREED = 0, 1, 2
|
||||||
|
local ROLL_TEX = {
|
||||||
|
[ROLL_NEED] = "Interface\\Buttons\\UI-GroupLoot-Dice-Up",
|
||||||
|
[ROLL_GREED] = "Interface\\Buttons\\UI-GroupLoot-Coin-Up",
|
||||||
|
[ROLL_PASS] = "Interface\\Buttons\\UI-GroupLoot-Pass-Up",
|
||||||
|
}
|
||||||
|
local WINMARK = "Interface\\Buttons\\UI-CheckBox-Check"
|
||||||
|
local QUESTIONMARK = "Interface\\Icons\\INV_Misc_QuestionMark"
|
||||||
|
|
||||||
|
local function ClassColor(class)
|
||||||
|
local c = class and RAID_CLASS_COLORS[class]
|
||||||
|
if c then return c.r, c.g, c.b end
|
||||||
|
return 1, 1, 1
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Paint an item row's icon/name/quality from a loaded Item mixin.
|
||||||
|
local function RenderItemVisual(f, item)
|
||||||
|
local r, g, b = 1, 1, 1
|
||||||
|
local qc = item:GetItemQualityColor()
|
||||||
|
if qc then r, g, b = qc.r, qc.g, qc.b end
|
||||||
|
f.icon:SetTexture(item:GetItemIcon())
|
||||||
|
f.iconbg:SetBackdropBorderColor(r, g, b, 1)
|
||||||
|
f.name:SetText(item:GetItemName() or UNKNOWN)
|
||||||
|
f.name:SetTextColor(r, g, b)
|
||||||
|
end
|
||||||
|
|
||||||
|
local function ShowRetrieving(f)
|
||||||
|
f.icon:SetTexture(QUESTIONMARK)
|
||||||
|
f.iconbg:SetBackdropBorderColor(1, .3, .3, 1)
|
||||||
|
f.name:SetText(T["Retrieving item information..."])
|
||||||
|
f.name:SetTextColor(1, .3, .3)
|
||||||
|
end
|
||||||
|
|
||||||
|
-- expansion state keyed on the stable rollID (survives ring-index shifts)
|
||||||
|
local expanded = {}
|
||||||
|
|
||||||
|
-- ==========================================================================
|
||||||
|
-- Window
|
||||||
|
-- ==========================================================================
|
||||||
|
pfUI.loothistory = CreateFrame("Frame", "pfLootHistory", UIParent)
|
||||||
|
pfUI.loothistory:SetFrameStrata("DIALOG")
|
||||||
|
pfUI.loothistory:SetSize(380, 490)
|
||||||
|
pfUI.loothistory:SetPoint("CENTER", 0, 0)
|
||||||
|
pfUI.loothistory:SetMovable(true)
|
||||||
|
pfUI.loothistory:EnableMouse(true)
|
||||||
|
pfUI.loothistory:RegisterForDrag("LeftButton")
|
||||||
|
pfUI.loothistory:SetScript("OnDragStart", function() this:StartMoving() end)
|
||||||
|
pfUI.loothistory:SetScript("OnDragStop", function() this:StopMovingOrSizing() end)
|
||||||
|
pfUI.loothistory:Hide()
|
||||||
|
|
||||||
|
CreateBackdrop(pfUI.loothistory, nil, true, .75)
|
||||||
|
CreateBackdropShadow(pfUI.loothistory)
|
||||||
|
tinsert(UISpecialFrames, "pfLootHistory")
|
||||||
|
|
||||||
|
pfUI.loothistory.caption = pfUI.loothistory:CreateFontString("Status", "LOW", "GameFontNormal")
|
||||||
|
pfUI.loothistory.caption:SetFont(pfUI.font_default, C.global.font_size + 4, "OUTLINE")
|
||||||
|
pfUI.loothistory.caption:SetTextColor(.2, 1, .8, 1)
|
||||||
|
pfUI.loothistory.caption:SetPoint("TOP", 0, -10)
|
||||||
|
pfUI.loothistory.caption:SetText(T["Loot History"])
|
||||||
|
|
||||||
|
-- close button
|
||||||
|
pfUI.loothistory.close = CreateFrame("Button", nil, pfUI.loothistory)
|
||||||
|
pfUI.loothistory.close:SetPoint("TOPRIGHT", -border*2, -border*2)
|
||||||
|
CreateBackdrop(pfUI.loothistory.close)
|
||||||
|
pfUI.loothistory.close:SetSize(15, 15)
|
||||||
|
pfUI.loothistory.close.texture = pfUI.loothistory.close:CreateTexture("pfLootHistoryClose")
|
||||||
|
pfUI.loothistory.close.texture:SetTexture(pfUI.media["img:close"])
|
||||||
|
pfUI.loothistory.close.texture:SetPoint("TOPLEFT", pfUI.loothistory.close, "TOPLEFT", 4, -4)
|
||||||
|
pfUI.loothistory.close.texture:SetPoint("BOTTOMRIGHT", pfUI.loothistory.close, "BOTTOMRIGHT", -4, 4)
|
||||||
|
pfUI.loothistory.close.texture:SetVertexColor(1, .25, .25, 1)
|
||||||
|
pfUI.loothistory.close:SetScript("OnEnter", function()
|
||||||
|
CreateBackdrop(pfUI.loothistory.close)
|
||||||
|
pfUI.loothistory.close.backdrop:SetBackdropBorderColor(1, .25, .25, 1)
|
||||||
|
end)
|
||||||
|
pfUI.loothistory.close:SetScript("OnLeave", function() CreateBackdrop(pfUI.loothistory.close) end)
|
||||||
|
pfUI.loothistory.close:SetScript("OnClick", function() pfUI.loothistory:Hide() end)
|
||||||
|
|
||||||
|
-- clear button
|
||||||
|
pfUI.loothistory.clear = CreateFrame("Button", nil, pfUI.loothistory, "UIPanelButtonTemplate")
|
||||||
|
SkinButton(pfUI.loothistory.clear)
|
||||||
|
pfUI.loothistory.clear:SetSize(60, 16)
|
||||||
|
pfUI.loothistory.clear:SetPoint("TOPLEFT", 10, -8)
|
||||||
|
pfUI.loothistory.clear:SetText(T["Clear"])
|
||||||
|
pfUI.loothistory.clear:SetScript("OnClick", function() C_LootHistory.Clear() end)
|
||||||
|
|
||||||
|
-- scroll frame
|
||||||
|
pfUI.loothistory.scroll = CreateScrollFrame("pfLootHistoryScroll", pfUI.loothistory)
|
||||||
|
pfUI.loothistory.scroll:SetSize(360, 440)
|
||||||
|
pfUI.loothistory.scroll:SetPoint("BOTTOM", 0, 10)
|
||||||
|
|
||||||
|
pfUI.loothistory.scroll.backdrop = CreateFrame("Frame", nil, pfUI.loothistory.scroll)
|
||||||
|
pfUI.loothistory.scroll.backdrop:SetFrameLevel(1)
|
||||||
|
pfUI.loothistory.scroll.backdrop:SetPoint("TOPLEFT", pfUI.loothistory.scroll, "TOPLEFT", -5, 5)
|
||||||
|
pfUI.loothistory.scroll.backdrop:SetPoint("BOTTOMRIGHT", pfUI.loothistory.scroll, "BOTTOMRIGHT", 5, -5)
|
||||||
|
CreateBackdrop(pfUI.loothistory.scroll.backdrop, nil, true)
|
||||||
|
|
||||||
|
local list = CreateScrollChild("pfLootHistoryList", pfUI.loothistory.scroll)
|
||||||
|
pfUI.loothistory.list = list
|
||||||
|
|
||||||
|
-- ==========================================================================
|
||||||
|
-- Frame pools
|
||||||
|
-- ==========================================================================
|
||||||
|
local itemFrames = {}
|
||||||
|
local usedPlayers, freePlayers = {}, {}
|
||||||
|
|
||||||
|
local FullUpdate -- forward declaration (toggle handlers call it)
|
||||||
|
|
||||||
|
local function CreateItemFrame()
|
||||||
|
local f = CreateFrame("Button", nil, list)
|
||||||
|
f:SetSize(ITEM_W, ITEM_H)
|
||||||
|
f:SetBackdrop(pfUI.backdrop_hover)
|
||||||
|
f:SetBackdropBorderColor(1, 1, 1, .04)
|
||||||
|
f:EnableMouse(1)
|
||||||
|
|
||||||
|
-- expand / collapse toggle
|
||||||
|
f.toggle = CreateFrame("Button", nil, f)
|
||||||
|
f.toggle:SetSize(14, 14)
|
||||||
|
f.toggle:SetPoint("LEFT", 4, 0)
|
||||||
|
f.toggle:SetScript("OnClick", function()
|
||||||
|
local id = f.rollID
|
||||||
|
if id then expanded[id] = not expanded[id]; FullUpdate() end
|
||||||
|
end)
|
||||||
|
|
||||||
|
-- icon + quality-colored border
|
||||||
|
f.iconbg = CreateFrame("Frame", nil, f)
|
||||||
|
f.iconbg:SetSize(ITEM_H - 8, ITEM_H - 8)
|
||||||
|
f.iconbg:SetPoint("LEFT", f.toggle, "RIGHT", 4, 0)
|
||||||
|
CreateBackdrop(f.iconbg, nil, true)
|
||||||
|
f.icon = f.iconbg:CreateTexture(nil, "ARTWORK")
|
||||||
|
f.icon:SetPoint("TOPLEFT", f.iconbg, "TOPLEFT", 2, -2)
|
||||||
|
f.icon:SetPoint("BOTTOMRIGHT", f.iconbg, "BOTTOMRIGHT", -2, 2)
|
||||||
|
f.icon:SetTexCoord(.08, .92, .08, .92)
|
||||||
|
|
||||||
|
-- winner block (right side, shown for decided rolls)
|
||||||
|
f.winicon = f:CreateTexture(nil, "OVERLAY")
|
||||||
|
f.winicon:SetSize(14, 14)
|
||||||
|
f.winicon:SetPoint("RIGHT", f, "RIGHT", -6, 0)
|
||||||
|
|
||||||
|
f.winroll = f:CreateFontString("Status", "OVERLAY", "GameFontNormal")
|
||||||
|
f.winroll:SetFont(pfUI.font_default, C.global.font_size, "OUTLINE")
|
||||||
|
f.winroll:SetPoint("RIGHT", f.winicon, "LEFT", -2, 0)
|
||||||
|
f.winroll:SetTextColor(1, 1, 1, 1)
|
||||||
|
|
||||||
|
f.winname = f:CreateFontString("Status", "OVERLAY", "GameFontNormal")
|
||||||
|
f.winname:SetFont(pfUI.font_default, C.global.font_size, "OUTLINE")
|
||||||
|
f.winname:SetPoint("RIGHT", f.winroll, "LEFT", -4, 0)
|
||||||
|
f.winname:SetJustifyH("RIGHT")
|
||||||
|
|
||||||
|
-- item name (leaves room on the right for the winner block)
|
||||||
|
f.name = f:CreateFontString("Status", "OVERLAY", "GameFontNormal")
|
||||||
|
f.name:SetFont(pfUI.font_default, C.global.font_size, "OUTLINE")
|
||||||
|
f.name:SetPoint("LEFT", f.iconbg, "RIGHT", 5, 0)
|
||||||
|
f.name:SetPoint("RIGHT", f, "RIGHT", -100, 0)
|
||||||
|
f.name:SetJustifyH("LEFT")
|
||||||
|
|
||||||
|
f:SetScript("OnEnter", function()
|
||||||
|
this:SetBackdropBorderColor(1, 1, 1, .08)
|
||||||
|
if this.itemLink then
|
||||||
|
GameTooltip:SetOwner(this, "ANCHOR_RIGHT")
|
||||||
|
GameTooltip:SetHyperlink(this.itemLink)
|
||||||
|
GameTooltip:Show()
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
f:SetScript("OnLeave", function()
|
||||||
|
this:SetBackdropBorderColor(1, 1, 1, .04)
|
||||||
|
GameTooltip:Hide()
|
||||||
|
end)
|
||||||
|
f:SetScript("OnClick", function()
|
||||||
|
local id = this.rollID
|
||||||
|
if id then expanded[id] = not expanded[id]; FullUpdate() end
|
||||||
|
end)
|
||||||
|
|
||||||
|
return f
|
||||||
|
end
|
||||||
|
|
||||||
|
local function CreatePlayerFrame()
|
||||||
|
local f = CreateFrame("Frame", nil, list)
|
||||||
|
f:SetSize(PLAYER_W, PLAYER_H)
|
||||||
|
|
||||||
|
-- name is indented to leave room for the winner checkmark on its left
|
||||||
|
f.name = f:CreateFontString("Status", "OVERLAY", "GameFontNormal")
|
||||||
|
f.name:SetFont(pfUI.font_default, C.global.font_size, "OUTLINE")
|
||||||
|
f.name:SetPoint("LEFT", 20, 0)
|
||||||
|
f.name:SetJustifyH("LEFT")
|
||||||
|
|
||||||
|
f.rollicon = f:CreateTexture(nil, "OVERLAY")
|
||||||
|
f.rollicon:SetSize(16, 16)
|
||||||
|
f.rollicon:SetPoint("RIGHT", -4, 0)
|
||||||
|
|
||||||
|
f.rolltext = f:CreateFontString("Status", "OVERLAY", "GameFontNormal")
|
||||||
|
f.rolltext:SetFont(pfUI.font_default, C.global.font_size, "OUTLINE")
|
||||||
|
f.rolltext:SetPoint("RIGHT", f.rollicon, "LEFT", -3, 0)
|
||||||
|
f.rolltext:SetTextColor(1, 1, 1, 1)
|
||||||
|
|
||||||
|
-- winner checkmark, just left of the player name (matches reference)
|
||||||
|
f.winmark = f:CreateTexture(nil, "OVERLAY")
|
||||||
|
f.winmark:SetSize(16, 16)
|
||||||
|
f.winmark:SetTexture(WINMARK)
|
||||||
|
f.winmark:SetPoint("RIGHT", f.name, "LEFT", -1, 0)
|
||||||
|
|
||||||
|
return f
|
||||||
|
end
|
||||||
|
|
||||||
|
local function RecycleAllPlayers()
|
||||||
|
for i = 1, table.getn(usedPlayers) do
|
||||||
|
local pf = usedPlayers[i]
|
||||||
|
pf:Hide()
|
||||||
|
table.insert(freePlayers, pf)
|
||||||
|
end
|
||||||
|
usedPlayers = {}
|
||||||
|
end
|
||||||
|
|
||||||
|
local function GetPlayerFrame()
|
||||||
|
local pf = table.remove(freePlayers) or CreatePlayerFrame()
|
||||||
|
table.insert(usedPlayers, pf)
|
||||||
|
return pf
|
||||||
|
end
|
||||||
|
|
||||||
|
local function SetToggleTexture(toggle, isExpanded)
|
||||||
|
if isExpanded then
|
||||||
|
toggle:SetNormalTexture("Interface\\Buttons\\UI-MinusButton-Up")
|
||||||
|
toggle:SetPushedTexture("Interface\\Buttons\\UI-MinusButton-Down")
|
||||||
|
else
|
||||||
|
toggle:SetNormalTexture("Interface\\Buttons\\UI-PlusButton-Up")
|
||||||
|
toggle:SetPushedTexture("Interface\\Buttons\\UI-PlusButton-Down")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
-- ==========================================================================
|
||||||
|
-- Rendering
|
||||||
|
-- ==========================================================================
|
||||||
|
local function UpdateItemFrame(f, i)
|
||||||
|
local rollID, itemLink, numPlayers, isDone, winnerIdx = C_LootHistory.GetItem(i)
|
||||||
|
f.rollID = rollID
|
||||||
|
f.itemIdx = i
|
||||||
|
f.itemLink = itemLink
|
||||||
|
f.numPlayers = numPlayers or 0
|
||||||
|
f.isDone = isDone
|
||||||
|
|
||||||
|
local isExpanded = rollID and expanded[rollID]
|
||||||
|
SetToggleTexture(f.toggle, isExpanded)
|
||||||
|
|
||||||
|
-- Item icon/name/quality via the ClassicAPI Item mixin. When the item
|
||||||
|
-- isn't cached yet, show a placeholder and re-paint this row from the
|
||||||
|
-- ContinueOnItemLoad callback (guarded on rollID: rows are pooled, so the
|
||||||
|
-- callback must no-op if the row has since been reused for another roll).
|
||||||
|
local item = itemLink and Item:CreateFromItemLink(itemLink)
|
||||||
|
if item and not item:IsItemEmpty() then
|
||||||
|
if item:IsItemDataCached() then
|
||||||
|
RenderItemVisual(f, item)
|
||||||
|
else
|
||||||
|
ShowRetrieving(f)
|
||||||
|
local pending = rollID
|
||||||
|
item:ContinueOnItemLoad(function()
|
||||||
|
if f.rollID == pending then RenderItemVisual(f, item) end
|
||||||
|
end)
|
||||||
|
end
|
||||||
|
else
|
||||||
|
ShowRetrieving(f)
|
||||||
|
end
|
||||||
|
|
||||||
|
-- winner summary only on a decided, collapsed row
|
||||||
|
if isDone and not isExpanded then
|
||||||
|
if winnerIdx then
|
||||||
|
local wname, wclass, wrollType, wroll = C_LootHistory.GetPlayerInfo(i, winnerIdx)
|
||||||
|
f.winicon:SetTexture(ROLL_TEX[wrollType] or ROLL_TEX[ROLL_NEED])
|
||||||
|
f.winicon:Show()
|
||||||
|
if wroll and wroll > 0 then f.winroll:SetText(wroll) else f.winroll:SetText("") end
|
||||||
|
f.winroll:Show()
|
||||||
|
f.winname:SetText(wname or UNKNOWN)
|
||||||
|
f.winname:SetTextColor(ClassColor(wclass))
|
||||||
|
f.winname:Show()
|
||||||
|
else
|
||||||
|
-- nobody won: everyone passed
|
||||||
|
f.winicon:SetTexture(ROLL_TEX[ROLL_PASS])
|
||||||
|
f.winicon:Show()
|
||||||
|
f.winroll:SetText("")
|
||||||
|
f.winroll:Show()
|
||||||
|
f.winname:SetText(T["All players passed"])
|
||||||
|
f.winname:SetTextColor(1, .4, .4)
|
||||||
|
f.winname:Show()
|
||||||
|
end
|
||||||
|
else
|
||||||
|
f.winicon:Hide()
|
||||||
|
f.winroll:Hide()
|
||||||
|
f.winname:Hide()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
local function RenderPlayerFrame(pf, name, class, rollType, roll, isWinner)
|
||||||
|
pf.name:SetText(name or UNKNOWN)
|
||||||
|
pf.name:SetTextColor(ClassColor(class))
|
||||||
|
|
||||||
|
pf.rollicon:SetTexture(ROLL_TEX[rollType] or ROLL_TEX[ROLL_PASS])
|
||||||
|
if roll and roll > 0 then pf.rolltext:SetText(roll) else pf.rolltext:SetText("") end
|
||||||
|
|
||||||
|
if isWinner then pf.winmark:Show() else pf.winmark:Hide() end
|
||||||
|
end
|
||||||
|
|
||||||
|
-- A player row is worth showing while the roll is undecided (see everyone),
|
||||||
|
-- or afterwards only if they actually rolled or it's you (hide the passers'
|
||||||
|
-- noise on a decided roll) — mirrors Blizzard's ShouldDisplayPlayer.
|
||||||
|
local function ShouldDisplayPlayer(isDone, roll, isMe)
|
||||||
|
return isMe or (roll and roll > 0) or not isDone
|
||||||
|
end
|
||||||
|
|
||||||
|
function FullUpdate()
|
||||||
|
if not pfUI.loothistory:IsShown() then return end
|
||||||
|
RecycleAllPlayers()
|
||||||
|
|
||||||
|
local num = C_LootHistory.GetNumItems()
|
||||||
|
local y = -2
|
||||||
|
|
||||||
|
for i = 1, num do
|
||||||
|
local f = itemFrames[i] or CreateItemFrame()
|
||||||
|
itemFrames[i] = f
|
||||||
|
UpdateItemFrame(f, i)
|
||||||
|
f:ClearAllPoints()
|
||||||
|
f:SetPoint("TOPLEFT", list, "TOPLEFT", 4, y)
|
||||||
|
f:Show()
|
||||||
|
y = y - ITEM_H - 2
|
||||||
|
|
||||||
|
if f.rollID and expanded[f.rollID] then
|
||||||
|
for p = 1, f.numPlayers do
|
||||||
|
local name, class, rollType, roll, isWinner, isMe = C_LootHistory.GetPlayerInfo(i, p)
|
||||||
|
if ShouldDisplayPlayer(f.isDone, roll, isMe) then
|
||||||
|
local pf = GetPlayerFrame()
|
||||||
|
RenderPlayerFrame(pf, name, class, rollType, roll, isWinner)
|
||||||
|
pf:ClearAllPoints()
|
||||||
|
pf:SetPoint("TOPLEFT", list, "TOPLEFT", 22, y)
|
||||||
|
pf:Show()
|
||||||
|
y = y - PLAYER_H
|
||||||
|
end
|
||||||
|
end
|
||||||
|
y = y - 2
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
for i = num + 1, table.getn(itemFrames) do
|
||||||
|
itemFrames[i]:Hide()
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Resize the scroll child and re-attach it: SetHeight alone on a
|
||||||
|
-- SetAllPoints'd child doesn't make the ScrollFrame recompute its scroll
|
||||||
|
-- range, so a dynamically-grown list wouldn't scroll until a /reload.
|
||||||
|
list:SetHeight(math.max(1, -y + 2))
|
||||||
|
pfUI.loothistory.scroll:SetScrollChild(list)
|
||||||
|
pfUI.loothistory.scroll:UpdateScrollState()
|
||||||
|
end
|
||||||
|
|
||||||
|
pfUI.loothistory:SetScript("OnShow", function() FullUpdate() end)
|
||||||
|
|
||||||
|
-- ==========================================================================
|
||||||
|
-- Events
|
||||||
|
-- ==========================================================================
|
||||||
|
local events = CreateFrame("Frame")
|
||||||
|
events:RegisterEvent("LOOT_HISTORY_FULL_UPDATE")
|
||||||
|
events:RegisterEvent("LOOT_HISTORY_ROLL_CHANGED")
|
||||||
|
events:RegisterEvent("LOOT_HISTORY_ROLL_COMPLETE")
|
||||||
|
events:SetScript("OnEvent", function()
|
||||||
|
-- auto-show on a new roll opening / completing, if enabled
|
||||||
|
if C.loothistory.autoshow == "1"
|
||||||
|
and (event == "LOOT_HISTORY_FULL_UPDATE" or event == "LOOT_HISTORY_ROLL_COMPLETE")
|
||||||
|
and not pfUI.loothistory:IsShown() then
|
||||||
|
pfUI.loothistory:Show() -- OnShow runs FullUpdate
|
||||||
|
return
|
||||||
|
end
|
||||||
|
FullUpdate() -- no-op while hidden
|
||||||
|
end)
|
||||||
|
|
||||||
|
-- ==========================================================================
|
||||||
|
-- Slash command
|
||||||
|
-- ==========================================================================
|
||||||
|
local function Toggle()
|
||||||
|
pfUI.loothistory:SetShown(not pfUI.loothistory:IsShown())
|
||||||
|
end
|
||||||
|
|
||||||
|
pfUI.api.RegisterSlashCommand("PFLOOTHISTORY", { "/loothistory", "/pfloothistory" }, Toggle, true)
|
||||||
|
end)
|
||||||
+4
-4
@@ -54,7 +54,7 @@ pfUI:RegisterModule("map", function ()
|
|||||||
if not this.hooked then
|
if not this.hooked then
|
||||||
this.hooked = true
|
this.hooked = true
|
||||||
|
|
||||||
HookScript(WorldMapFrame, "OnShow", function()
|
WorldMapFrame:HookScript("OnShow", function()
|
||||||
-- customize
|
-- customize
|
||||||
this:EnableKeyboard(false)
|
this:EnableKeyboard(false)
|
||||||
this:EnableMouseWheel(1)
|
this:EnableMouseWheel(1)
|
||||||
@@ -66,7 +66,7 @@ pfUI:RegisterModule("map", function ()
|
|||||||
pfOrigSetMapToCurrentZone()
|
pfOrigSetMapToCurrentZone()
|
||||||
end)
|
end)
|
||||||
|
|
||||||
HookScript(WorldMapFrame, "OnMouseWheel", function()
|
WorldMapFrame:HookScript("OnMouseWheel", function()
|
||||||
if IsShiftKeyDown() then
|
if IsShiftKeyDown() then
|
||||||
alpha = clamp(WorldMapFrame:GetAlpha() + arg1/10, 0.1, 1.0)
|
alpha = clamp(WorldMapFrame:GetAlpha() + arg1/10, 0.1, 1.0)
|
||||||
WorldMapFrame:SetAlpha(alpha)
|
WorldMapFrame:SetAlpha(alpha)
|
||||||
@@ -91,11 +91,11 @@ pfUI:RegisterModule("map", function ()
|
|||||||
SaveMovable(this, true)
|
SaveMovable(this, true)
|
||||||
end)
|
end)
|
||||||
|
|
||||||
HookScript(WorldMapFrame, "OnDragStart", function()
|
WorldMapFrame:HookScript("OnDragStart", function()
|
||||||
WorldMapFrame:StartMoving()
|
WorldMapFrame:StartMoving()
|
||||||
end)
|
end)
|
||||||
|
|
||||||
HookScript(WorldMapFrame, "OnDragStop",function()
|
WorldMapFrame:HookScript("OnDragStop",function()
|
||||||
WorldMapFrame:StopMovingOrSizing()
|
WorldMapFrame:StopMovingOrSizing()
|
||||||
SaveMovable(this, true)
|
SaveMovable(this, true)
|
||||||
end)
|
end)
|
||||||
|
|||||||
@@ -125,13 +125,13 @@ pfUI:RegisterModule("mapcolors", function ()
|
|||||||
|
|
||||||
-- WorldMap
|
-- WorldMap
|
||||||
Initialize('WorldMap')
|
Initialize('WorldMap')
|
||||||
pfUI.hooksecurefunc('WorldMapButton_OnUpdate', function()
|
hooksecurefunc('WorldMapButton_OnUpdate', function()
|
||||||
if ( this.tick or .5) > GetTime() then return else this.tick = GetTime() + .5 end
|
if ( this.tick or .5) > GetTime() then return else this.tick = GetTime() + .5 end
|
||||||
UpdateUnitFrames('WorldMap')
|
UpdateUnitFrames('WorldMap')
|
||||||
end)
|
end)
|
||||||
|
|
||||||
if C.appearance.worldmap.colornames == "1" then
|
if C.appearance.worldmap.colornames == "1" then
|
||||||
pfUI.hooksecurefunc('WorldMapUnit_OnEnter', function()
|
hooksecurefunc('WorldMapUnit_OnEnter', function()
|
||||||
if ( this.tick or .5) > GetTime() then return else this.tick = GetTime() + .5 end
|
if ( this.tick or .5) > GetTime() then return else this.tick = GetTime() + .5 end
|
||||||
UpdateUnitColors('WorldMap', WorldMapTooltip)
|
UpdateUnitColors('WorldMap', WorldMapTooltip)
|
||||||
end)
|
end)
|
||||||
@@ -141,13 +141,13 @@ pfUI:RegisterModule("mapcolors", function ()
|
|||||||
HookAddonOrVariable("Blizzard_BattlefieldMinimap", function()
|
HookAddonOrVariable("Blizzard_BattlefieldMinimap", function()
|
||||||
Initialize('BattlefieldMinimap')
|
Initialize('BattlefieldMinimap')
|
||||||
|
|
||||||
pfUI.hooksecurefunc('BattlefieldMinimap_OnUpdate', function()
|
hooksecurefunc('BattlefieldMinimap_OnUpdate', function()
|
||||||
if ( this.tick or .5) > GetTime() then return else this.tick = GetTime() + .5 end
|
if ( this.tick or .5) > GetTime() then return else this.tick = GetTime() + .5 end
|
||||||
UpdateUnitFrames('BattlefieldMinimap')
|
UpdateUnitFrames('BattlefieldMinimap')
|
||||||
end)
|
end)
|
||||||
|
|
||||||
if C.appearance.worldmap.colornames == "1" then
|
if C.appearance.worldmap.colornames == "1" then
|
||||||
pfUI.hooksecurefunc('BattlefieldMinimapUnit_OnEnter', function()
|
hooksecurefunc('BattlefieldMinimapUnit_OnEnter', function()
|
||||||
if ( this.tick or .5) > GetTime() then return else this.tick = GetTime() + .5 end
|
if ( this.tick or .5) > GetTime() then return else this.tick = GetTime() + .5 end
|
||||||
UpdateUnitColors('BattlefieldMinimap', GameTooltip)
|
UpdateUnitColors('BattlefieldMinimap', GameTooltip)
|
||||||
end)
|
end)
|
||||||
|
|||||||
+33
-70
@@ -30,25 +30,6 @@ pfUI:RegisterModule("mapreveal", function ()
|
|||||||
pfUI.mapreveal:UpdateConfig()
|
pfUI.mapreveal:UpdateConfig()
|
||||||
end)
|
end)
|
||||||
|
|
||||||
local function unpack_hash(prefix, hash)
|
|
||||||
local _, stored_prefix, textureName, textureWidth, textureHeight, offsetX, offsetY, mapPointX, mapPointY, name
|
|
||||||
_, _, stored_prefix, textureName, textureWidth, textureHeight, offsetX, offsetY = string.find(hash, "^([|]?)([^:]+):([^:]+):([^:]+):([^:]+):([^:]+)")
|
|
||||||
if (not textureName or not offsetY) then
|
|
||||||
return
|
|
||||||
end
|
|
||||||
if (offsetY) then
|
|
||||||
_, _, mapPointX, mapPointY = string.find(hash,"^[|]?[^:]+:[^:]+:[^:]+:[^:]+:[^:]+:([^:]+):([^:]+)")
|
|
||||||
end
|
|
||||||
if (not mapPointY) then
|
|
||||||
mapPointX = 0 mapPointY = 0
|
|
||||||
end
|
|
||||||
if (stored_prefix ~= "|") then
|
|
||||||
name = textureName
|
|
||||||
textureName = string.format("%s%s",prefix,textureName)
|
|
||||||
end
|
|
||||||
return textureName, textureWidth + 0, textureHeight + 0, offsetX + 0, offsetY + 0, mapPointX + 0, mapPointY + 0, name
|
|
||||||
end
|
|
||||||
|
|
||||||
local explores = {}
|
local explores = {}
|
||||||
local explorecaches = {}
|
local explorecaches = {}
|
||||||
local alreadyknown = {} -- per-zone accumulator: { [zone] = { [texName] = true } }
|
local alreadyknown = {} -- per-zone accumulator: { [zone] = { [texName] = true } }
|
||||||
@@ -88,13 +69,6 @@ pfUI:RegisterModule("mapreveal", function ()
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
-- overlay data with lazy init
|
|
||||||
local overlayData = setmetatable(pfMapOverlayData, {__index = function(t,k)
|
|
||||||
local v = {}
|
|
||||||
rawset(t,k,v)
|
|
||||||
return v
|
|
||||||
end})
|
|
||||||
|
|
||||||
local function pfWorldMapFrame_Update()
|
local function pfWorldMapFrame_Update()
|
||||||
-- clear stale caches
|
-- clear stale caches
|
||||||
for k in pairs(explorecaches) do explorecaches[k] = nil end
|
for k in pairs(explorecaches) do explorecaches[k] = nil end
|
||||||
@@ -108,7 +82,6 @@ pfUI:RegisterModule("mapreveal", function ()
|
|||||||
local mapFileName = GetMapInfo()
|
local mapFileName = GetMapInfo()
|
||||||
if not mapFileName then mapFileName = "World" end
|
if not mapFileName then mapFileName = "World" end
|
||||||
|
|
||||||
local prefix = string.format("Interface\\WorldMap\\%s\\", mapFileName)
|
|
||||||
local numOverlays = GetNumMapOverlays()
|
local numOverlays = GetNumMapOverlays()
|
||||||
|
|
||||||
-- accumulate explored overlays per zone (never clear, only add)
|
-- accumulate explored overlays per zone (never clear, only add)
|
||||||
@@ -123,12 +96,18 @@ pfUI:RegisterModule("mapreveal", function ()
|
|||||||
-- hide explore icons
|
-- hide explore icons
|
||||||
for _, frame in pairs(explores) do frame:Hide() end
|
for _, frame in pairs(explores) do frame:Hide() end
|
||||||
|
|
||||||
local zoneData = overlayData[mapFileName]
|
-- ClassicAPI: full overlay list for the viewed zone (explored + unexplored),
|
||||||
|
-- read straight from WorldMapOverlay.dbc. Replaces the hand-measured pfMapOverlayData.
|
||||||
|
local zoneData = C_Map.GetMapOverlays() or {}
|
||||||
local textureCount = 0
|
local textureCount = 0
|
||||||
|
|
||||||
for i, hash in ipairs(zoneData) do
|
for i, overlay in ipairs(zoneData) do
|
||||||
local textureName, textureWidth, textureHeight, offsetX, offsetY, mapPointX, mapPointY, name = unpack_hash(prefix, hash)
|
local name = overlay.textureName -- bare, e.g. "DRYGULCHRAVINE"
|
||||||
if not textureName then break end
|
local textureName = overlay.texturePath -- full engine path (for SetTexture)
|
||||||
|
local textureWidth = overlay.textureWidth
|
||||||
|
local textureHeight = overlay.textureHeight
|
||||||
|
local offsetX = overlay.offsetX
|
||||||
|
local offsetY = overlay.offsetY
|
||||||
|
|
||||||
-- explore magnifying glass icon
|
-- explore magnifying glass icon
|
||||||
explores[i] = explores[i] or CreateFrame("Frame", nil, WorldMapDetailFrame)
|
explores[i] = explores[i] or CreateFrame("Frame", nil, WorldMapDetailFrame)
|
||||||
@@ -146,6 +125,8 @@ pfUI:RegisterModule("mapreveal", function ()
|
|||||||
explore.tex:SetTexCoord(.08, .92, .08, .92)
|
explore.tex:SetTexCoord(.08, .92, .08, .92)
|
||||||
explore.tex:SetAllPoints()
|
explore.tex:SetAllPoints()
|
||||||
|
|
||||||
|
-- `alreadyknown` stores the FULL paths GetMapOverlayInfo returns,
|
||||||
|
-- so compare with the full path, not the bare name.
|
||||||
if C.appearance.worldmap.mapexploration == "1" and not zoneKnown[string.upper(textureName)] then
|
if C.appearance.worldmap.mapexploration == "1" and not zoneKnown[string.upper(textureName)] then
|
||||||
explore.tex:SetTexture("Interface\\WorldMap\\WorldMap-MagnifyingGlass")
|
explore.tex:SetTexture("Interface\\WorldMap\\WorldMap-MagnifyingGlass")
|
||||||
explore:Show()
|
explore:Show()
|
||||||
@@ -155,49 +136,31 @@ pfUI:RegisterModule("mapreveal", function ()
|
|||||||
|
|
||||||
-- render overlay texture tiles on BORDER draw layer
|
-- render overlay texture tiles on BORDER draw layer
|
||||||
-- Blizzard's explored overlays on ARTWORK draw on top of BORDER
|
-- Blizzard's explored overlays on ARTWORK draw on top of BORDER
|
||||||
|
--
|
||||||
|
-- overlay.tiles is pre-resolved by ClassicAPI: per-tile file /
|
||||||
|
-- draw size / texcoords / canvas position, with Octo's data
|
||||||
|
-- quirks (sliver columns the DBC rect rounds away, foreign tiles
|
||||||
|
-- appended to the number sequence, upscaled re-exports) already
|
||||||
|
-- disambiguated from the actual BLP dimensions. No 256px grid
|
||||||
|
-- math here — deriving the grid from textureWidth/Height is
|
||||||
|
-- exactly what shears quirky overlays (e.g. Icepoint's Kaneq'nuun).
|
||||||
if C.appearance.worldmap.mapreveal == "1" then
|
if C.appearance.worldmap.mapreveal == "1" then
|
||||||
local numH = math.ceil(textureWidth / 256)
|
for _, tile in ipairs(overlay.tiles) do
|
||||||
local numV = math.ceil(textureHeight / 256)
|
textureCount = textureCount + 1
|
||||||
local texPixW, texFileW, texPixH, texFileH
|
local tex = pfGetOverlay(textureCount)
|
||||||
|
|
||||||
for j = 1, numV do
|
tex:SetWidth(tile.width)
|
||||||
if j < numV then
|
tex:SetHeight(tile.height)
|
||||||
texPixH = 256
|
tex:SetTexCoord(0, tile.texCoordX, 0, tile.texCoordY)
|
||||||
texFileH = 256
|
tex:ClearAllPoints()
|
||||||
else
|
tex:SetPoint("TOPLEFT", "WorldMapDetailFrame", "TOPLEFT", tile.offsetX, -tile.offsetY)
|
||||||
texPixH = mod(textureHeight, 256)
|
tex:SetTexture(tile.file)
|
||||||
if texPixH == 0 then texPixH = 256 end
|
|
||||||
texFileH = 16
|
|
||||||
while texFileH < texPixH do texFileH = texFileH * 2 end
|
|
||||||
end
|
|
||||||
|
|
||||||
for k = 1, numH do
|
explorecaches[name] = explorecaches[name] or {}
|
||||||
textureCount = textureCount + 1
|
explorecaches[name][tex] = true
|
||||||
local tex = pfGetOverlay(textureCount)
|
|
||||||
|
|
||||||
if k < numH then
|
tex:SetVertexColor(r,g,b,a)
|
||||||
texPixW = 256
|
tex:Show()
|
||||||
texFileW = 256
|
|
||||||
else
|
|
||||||
texPixW = mod(textureWidth, 256)
|
|
||||||
if texPixW == 0 then texPixW = 256 end
|
|
||||||
texFileW = 16
|
|
||||||
while texFileW < texPixW do texFileW = texFileW * 2 end
|
|
||||||
end
|
|
||||||
|
|
||||||
tex:SetWidth(texPixW)
|
|
||||||
tex:SetHeight(texPixH)
|
|
||||||
tex:SetTexCoord(0, texPixW/texFileW, 0, texPixH/texFileH)
|
|
||||||
tex:ClearAllPoints()
|
|
||||||
tex:SetPoint("TOPLEFT", "WorldMapDetailFrame", "TOPLEFT", offsetX + 256*(k-1), -(offsetY + 256*(j-1)))
|
|
||||||
tex:SetTexture(string.format("%s%s", textureName, ((j-1)*numH + k)))
|
|
||||||
|
|
||||||
explorecaches[name] = explorecaches[name] or {}
|
|
||||||
explorecaches[name][tex] = true
|
|
||||||
|
|
||||||
tex:SetVertexColor(r,g,b,a)
|
|
||||||
tex:Show()
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
pfUI:RegisterNewModule("marktracking", "Mark Tracker")
|
|
||||||
pfUI:RegisterModule("marktracking", function ()
|
pfUI:RegisterModule("marktracking", function ()
|
||||||
-- Requires mark1-mark8 unit tokens (Turtle WoW / Nampower)
|
-- Requires mark1-mark8 unit tokens (Turtle WoW / Nampower)
|
||||||
if not UnitExists("mark1") and not UnitExists("mark8") then
|
if not UnitExists("mark1") and not UnitExists("mark8") then
|
||||||
|
|||||||
+1
-1
@@ -58,7 +58,7 @@ pfUI:RegisterModule("minimap", function ()
|
|||||||
|
|
||||||
pfUI.minimap:UpdateConfig()
|
pfUI.minimap:UpdateConfig()
|
||||||
|
|
||||||
pfUI.hooksecurefunc("ToggleMinimap", function()
|
hooksecurefunc("ToggleMinimap", function()
|
||||||
if pfUI.farmmap and pfUI.farmmap:IsShown() then
|
if pfUI.farmmap and pfUI.farmmap:IsShown() then
|
||||||
Minimap:Hide()
|
Minimap:Hide()
|
||||||
return
|
return
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
pfUI:RegisterModule("mouseover", function ()
|
pfUI:RegisterModule("mouseover", function ()
|
||||||
_G.SLASH_PFCAST1, _G.SLASH_PFCAST2 = "/pfcast", "/pfmouse"
|
pfUI.api.RegisterSlashCommand("PFCAST", { "/pfcast", "/pfmouse" }, function(msg)
|
||||||
function SlashCmdList.PFCAST(msg)
|
|
||||||
local func = pfUI.api.TryMemoizedFuncLoadstringForSpellCasts(msg)
|
local func = pfUI.api.TryMemoizedFuncLoadstringForSpellCasts(msg)
|
||||||
local unit = "mouseover"
|
local unit = "mouseover"
|
||||||
|
|
||||||
@@ -30,5 +29,5 @@ pfUI:RegisterModule("mouseover", function ()
|
|||||||
if restore_target then TargetUnit(unit) end
|
if restore_target then TargetUnit(unit) end
|
||||||
func()
|
func()
|
||||||
if restore_target then TargetLastTarget() end
|
if restore_target then TargetLastTarget() end
|
||||||
end
|
end, true)
|
||||||
end)
|
end)
|
||||||
@@ -695,7 +695,7 @@ end
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
HookScript(nameplate.original.healthbar, "OnValueChanged", nameplates.OnValueChanged)
|
nameplate.original.healthbar:HookScript("OnValueChanged", nameplates.OnValueChanged)
|
||||||
|
|
||||||
-- adjust sizes and scaling of the nameplate
|
-- adjust sizes and scaling of the nameplate
|
||||||
nameplate:SetScale(UIParent:GetScale())
|
nameplate:SetScale(UIParent:GetScale())
|
||||||
|
|||||||
@@ -150,9 +150,7 @@ pfUI:RegisterModule("nampower", function ()
|
|||||||
|
|
||||||
-- /disenchantall slash command (DisenchantAll is Nampower-provided)
|
-- /disenchantall slash command (DisenchantAll is Nampower-provided)
|
||||||
if DisenchantAll then
|
if DisenchantAll then
|
||||||
_G.SLASH_PFDISENCHANTALL1 = "/disenchantall"
|
pfUI.api.RegisterSlashCommand("PFDISENCHANTALL", { "/disenchantall", "/dea" }, function(msg)
|
||||||
_G.SLASH_PFDISENCHANTALL2 = "/dea"
|
|
||||||
SlashCmdList["PFDISENCHANTALL"] = function(msg)
|
|
||||||
-- DisenchantAll(itemIdOrName | quality, [includeSoulbound]).
|
-- DisenchantAll(itemIdOrName | quality, [includeSoulbound]).
|
||||||
-- Quality is a string keyword ("greens", "blues", "purples", or pipe-
|
-- Quality is a string keyword ("greens", "blues", "purples", or pipe-
|
||||||
-- combined). Numbers are interpreted as item IDs, not quality levels.
|
-- combined). Numbers are interpreted as item IDs, not quality levels.
|
||||||
@@ -161,7 +159,7 @@ pfUI:RegisterModule("nampower", function ()
|
|||||||
local target = tonumber(arg) or arg
|
local target = tonumber(arg) or arg
|
||||||
DisenchantAll(target)
|
DisenchantAll(target)
|
||||||
DEFAULT_CHAT_FRAME:AddMessage("|cff33ffccpfUI|r: DisenchantAll(" .. tostring(target) .. ")")
|
DEFAULT_CHAT_FRAME:AddMessage("|cff33ffccpfUI|r: DisenchantAll(" .. tostring(target) .. ")")
|
||||||
end
|
end, true)
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Druid Secondary Mana Bar
|
-- Druid Secondary Mana Bar
|
||||||
|
|||||||
+1
-1
@@ -532,7 +532,7 @@ pfUI:RegisterModule("panel", function()
|
|||||||
-- Hearthstone bind location
|
-- Hearthstone bind location
|
||||||
local hearth = CreateFrame("Frame", "pfPanelBindLocation", UIParent)
|
local hearth = CreateFrame("Frame", "pfPanelBindLocation", UIParent)
|
||||||
hearth:RegisterEvent("PLAYER_ENTERING_WORLD")
|
hearth:RegisterEvent("PLAYER_ENTERING_WORLD")
|
||||||
hearth:RegisterEvent("CHAT_MSG_SYSTEM")
|
hearth:RegisterEvent("HEARTHSTONE_BOUND")
|
||||||
hearth:SetScript("OnEvent", function()
|
hearth:SetScript("OnEvent", function()
|
||||||
pfUI.panel:OutputPanel("bindlocation", T["Hearthstone"] .. ": " .. (GetBindLocation() or T["Not Set"]))
|
pfUI.panel:OutputPanel("bindlocation", T["Hearthstone"] .. ": " .. (GetBindLocation() or T["Not Set"]))
|
||||||
end)
|
end)
|
||||||
|
|||||||
+1
-1
@@ -141,7 +141,7 @@ pfUI:RegisterModule("player", function ()
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
pfUI.hooksecurefunc("UnitPopup_OnClick", function()
|
hooksecurefunc("UnitPopup_OnClick", function()
|
||||||
local button = this.value
|
local button = this.value
|
||||||
if button == "RESET_INSTANCES_FIX" then
|
if button == "RESET_INSTANCES_FIX" then
|
||||||
StaticPopup_Show("CONFIRM_RESET_INSTANCES")
|
StaticPopup_Show("CONFIRM_RESET_INSTANCES")
|
||||||
|
|||||||
@@ -95,7 +95,7 @@ pfUI:RegisterModule("questitem", function ()
|
|||||||
-- itemref tooltip (chat link clicks): hooksecurefunc runs after SetItemRef
|
-- itemref tooltip (chat link clicks): hooksecurefunc runs after SetItemRef
|
||||||
-- populates ItemRefTooltip, so we just read the item back out of the tooltip
|
-- populates ItemRefTooltip, so we just read the item back out of the tooltip
|
||||||
-- instead of re-parsing the "item:NNN" out of the link string.
|
-- instead of re-parsing the "item:NNN" out of the link string.
|
||||||
pfUI.hooksecurefunc("SetItemRef", function()
|
hooksecurefunc("SetItemRef", function()
|
||||||
if IsModifierKeyDown() then return end
|
if IsModifierKeyDown() then return end
|
||||||
if ItemRefTooltip:HasItem() then
|
if ItemRefTooltip:HasItem() then
|
||||||
local _, _, id = ItemRefTooltip:GetItem()
|
local _, _, id = ItemRefTooltip:GetItem()
|
||||||
|
|||||||
+1
-1
@@ -164,7 +164,7 @@ pfUI:RegisterModule("raid", function ()
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
pfUI.hooksecurefunc("UnitPopup_OnClick", function()
|
hooksecurefunc("UnitPopup_OnClick", function()
|
||||||
local dropdownFrame = UIDROPDOWNMENU_INIT_MENU and _G[UIDROPDOWNMENU_INIT_MENU]
|
local dropdownFrame = UIDROPDOWNMENU_INIT_MENU and _G[UIDROPDOWNMENU_INIT_MENU]
|
||||||
if not dropdownFrame then return end
|
if not dropdownFrame then return end
|
||||||
local button = this.value
|
local button = this.value
|
||||||
|
|||||||
+138
-15
@@ -1,13 +1,11 @@
|
|||||||
pfUI:RegisterModule("sellvalue", function ()
|
pfUI:RegisterModule("sellvalue", function ()
|
||||||
local function AddVendorPrices(frame, id, count)
|
local function AddVendorPrices(frame, id, count)
|
||||||
if not id then return end
|
if not id then return end
|
||||||
-- Sell price comes from the engine (item DBC); buy price from pfSellData
|
|
||||||
-- (curated vendor data, since vendor purchase prices aren't a static field).
|
|
||||||
local sell = C_Item.GetItemSellPriceByID(id) or 0
|
local sell = C_Item.GetItemSellPriceByID(id) or 0
|
||||||
local buy = pfSellData[id]
|
local buy = pfSellData[id]
|
||||||
if sell == 0 and not buy then return end
|
if sell == 0 and not buy then return end
|
||||||
|
|
||||||
if C.tooltip.vendor.showalways == "1" or IsShiftKeyDown() then
|
if C.tooltip.vendor.showalways == "1" or IsShiftKeyDown() then
|
||||||
frame:AddLine(" ")
|
frame:AddLine(" ")
|
||||||
|
|
||||||
if sell > 0 then
|
if sell > 0 then
|
||||||
@@ -25,26 +23,151 @@ pfUI:RegisterModule("sellvalue", function ()
|
|||||||
frame:AddDoubleLine(T["Buy"] .. ":", CreateGoldString(buy), 1, 1, 1)
|
frame:AddDoubleLine(T["Buy"] .. ":", CreateGoldString(buy), 1, 1, 1)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
elseif not MerchantFrame:IsShown() and sell > 0 then
|
||||||
|
SetTooltipMoney(frame, sell * count)
|
||||||
end
|
end
|
||||||
frame:Show()
|
frame:Show()
|
||||||
end
|
end
|
||||||
|
|
||||||
pfUI.sellvalue = CreateFrame("Frame", "pfGameTooltip", GameTooltip)
|
hooksecurefunc("SetItemRef", function()
|
||||||
pfUI.sellvalue:SetScript("OnShow", function()
|
|
||||||
if GameTooltip:HasItem() then
|
|
||||||
local _, _, id = GameTooltip:GetItem()
|
|
||||||
if id then
|
|
||||||
local count = tonumber(libtooltip:GetItemCount()) or 1
|
|
||||||
AddVendorPrices(GameTooltip, id, math.max(count, 1))
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end)
|
|
||||||
|
|
||||||
pfUI.hooksecurefunc("SetItemRef", function()
|
|
||||||
if IsModifierKeyDown() then return end
|
if IsModifierKeyDown() then return end
|
||||||
if ItemRefTooltip:HasItem() then
|
if ItemRefTooltip:HasItem() then
|
||||||
local _, _, id = ItemRefTooltip:GetItem()
|
local _, _, id = ItemRefTooltip:GetItem()
|
||||||
if id then AddVendorPrices(ItemRefTooltip, id, 1) end
|
if id then AddVendorPrices(ItemRefTooltip, id, 1) end
|
||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
local TooltipHooks = {
|
||||||
|
SetLootRollItem = {
|
||||||
|
id = GetLootRollItemID,
|
||||||
|
count = function(slot)
|
||||||
|
local _, _, count = GetLootRollItemInfo(slot)
|
||||||
|
return count
|
||||||
|
end
|
||||||
|
},
|
||||||
|
SetLootItem = {
|
||||||
|
id = GetLootSlotItemID,
|
||||||
|
count = function(slot)
|
||||||
|
local _, _, count = GetLootSlotInfo(slot)
|
||||||
|
return count
|
||||||
|
end
|
||||||
|
},
|
||||||
|
SetQuestLogItem = {
|
||||||
|
id = GetQuestLogItemID,
|
||||||
|
count = function(type, index)
|
||||||
|
local itemCount, _;
|
||||||
|
if type == "choice" then
|
||||||
|
_, _, itemCount = GetQuestLogChoiceInfo(index);
|
||||||
|
else
|
||||||
|
_, _, itemCount = GetQuestLogRewardInfo(index)
|
||||||
|
end
|
||||||
|
return itemCount
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
SetQuestItem = {
|
||||||
|
id = GetQuestItemID,
|
||||||
|
count = function(type, index)
|
||||||
|
local _, _, count = GetQuestItemInfo(type, index);
|
||||||
|
return count
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
SetHyperlink = { id = C_Item.GetItemInfoInstant },
|
||||||
|
SetBagItem = {
|
||||||
|
id = C_Container.GetContainerItemID,
|
||||||
|
count = function(container, slot)
|
||||||
|
local _, count = GetContainerItemInfo(container, slot)
|
||||||
|
return count
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
SetInboxItem = {
|
||||||
|
id = GetInboxItemID,
|
||||||
|
count = function(index)
|
||||||
|
local _, _, _, count = GetInboxItem(index)
|
||||||
|
return count
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
SetSendMailItem = {
|
||||||
|
id = function()
|
||||||
|
local _, id = GetSendMailItemLink()
|
||||||
|
return id
|
||||||
|
end,
|
||||||
|
count = function()
|
||||||
|
local _, _, count = GetSendMailItem()
|
||||||
|
return count
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
SetInventoryItem = { id = GetInventoryItemID },
|
||||||
|
SetTradeSkillItem = {
|
||||||
|
id = function(skillIndex, reagentIndex)
|
||||||
|
if reagentIndex then
|
||||||
|
return GetTradeSkillReagentItemID(skillIndex, reagentIndex)
|
||||||
|
else
|
||||||
|
return GetTradeSkillItemID(skillIndex)
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
count = function(skillIndex, reagentIndex)
|
||||||
|
if reagentIndex then
|
||||||
|
local _, _, itemCount = GetTradeSkillReagentInfo(skillIndex, reagentIndex)
|
||||||
|
return itemCount
|
||||||
|
else
|
||||||
|
return GetTradeSkillNumMade(skillIndex)
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
SetAuctionItem = {
|
||||||
|
id = GetAuctionItemLink,
|
||||||
|
count = function(viewType, index)
|
||||||
|
local _, _, count = GetAuctionItemInfo(viewType, index)
|
||||||
|
return count
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
SetAuctionSellItem = { id = GetAuctionSellItemLink },
|
||||||
|
SetTradePlayerItem = {
|
||||||
|
id = GetTradePlayerItemLink,
|
||||||
|
count = function(id)
|
||||||
|
local _, _, count = GetTradePlayerItemInfo(id)
|
||||||
|
return count
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
SetTradeTargetItem = {
|
||||||
|
id = GetTradeTargetItemLink,
|
||||||
|
count = function(id)
|
||||||
|
local _, _, count = GetTradeTargetItemInfo(id)
|
||||||
|
return count
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
SetMerchantItem = {
|
||||||
|
id = GetMerchantItemID,
|
||||||
|
count = function(index)
|
||||||
|
local _, _, _, itemCount = GetMerchantItemInfo(index)
|
||||||
|
return itemCount
|
||||||
|
end
|
||||||
|
},
|
||||||
|
SetCraftItem = {
|
||||||
|
id = function(recipeIndex, reagentIndex)
|
||||||
|
return GetCraftReagentItemID(recipeIndex, reagentIndex)
|
||||||
|
end
|
||||||
|
},
|
||||||
|
SetBuybackItem = {
|
||||||
|
id = C_MerchantFrame.GetBuybackItemID,
|
||||||
|
count = function(slotIndex)
|
||||||
|
local _, _, _, itemCount = GetBuybackItemInfo(slotIndex)
|
||||||
|
return itemCount
|
||||||
|
end
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
local function makeHook(entry)
|
||||||
|
return function(tooltip, arg1, arg2, arg3)
|
||||||
|
AddVendorPrices(tooltip, entry.id(arg1, arg2, arg3), entry.count and entry.count(arg1, arg2, arg3) or 1)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
local function HookTooltip(tooltip)
|
||||||
|
for setter, entry in pairs(TooltipHooks) do
|
||||||
|
hooksecurefunc(tooltip, setter, makeHook(entry))
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
HookTooltip(GameTooltip)
|
||||||
end)
|
end)
|
||||||
|
|||||||
+2
-3
@@ -389,9 +389,8 @@ pfUI:RegisterModule("share", function ()
|
|||||||
end)
|
end)
|
||||||
end
|
end
|
||||||
|
|
||||||
_G.SLASH_PFEXPORT1, _G.SLASH_PFEXPORT2, _G.SLASH_PFEXPORT3 = "/export", "/import", "/share"
|
pfUI.api.RegisterSlashCommand("PFEXPORT", { "/export", "/import", "/share" }, function(msg, editbox)
|
||||||
function SlashCmdList.PFEXPORT(msg, editbox)
|
|
||||||
f:Show()
|
f:Show()
|
||||||
end
|
end, true)
|
||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
|
|||||||
+2
-2
@@ -51,12 +51,12 @@ pfUI:RegisterModule("skin", function ()
|
|||||||
DurabilityFrame.SetPoint = function() return end
|
DurabilityFrame.SetPoint = function() return end
|
||||||
|
|
||||||
if C.appearance.cd.blizzard == "1" then
|
if C.appearance.cd.blizzard == "1" then
|
||||||
pfUI.hooksecurefunc("PaperDollItemSlotButton_Update", function()
|
hooksecurefunc("PaperDollItemSlotButton_Update", function()
|
||||||
local cooldown = _G[this:GetName().."Cooldown"]
|
local cooldown = _G[this:GetName().."Cooldown"]
|
||||||
if cooldown then cooldown.pfCooldownType = "BLIZZARD" end
|
if cooldown then cooldown.pfCooldownType = "BLIZZARD" end
|
||||||
end)
|
end)
|
||||||
|
|
||||||
pfUI.hooksecurefunc("SpellButton_UpdateButton", function()
|
hooksecurefunc("SpellButton_UpdateButton", function()
|
||||||
local cooldown = _G[this:GetName().."Cooldown"]
|
local cooldown = _G[this:GetName().."Cooldown"]
|
||||||
if cooldown then cooldown.pfCooldownType = "BLIZZARD" end
|
if cooldown then cooldown.pfCooldownType = "BLIZZARD" end
|
||||||
end)
|
end)
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ pfUI:RegisterModule("socialmod", function ()
|
|||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
do -- add colors to guild list
|
do -- add colors to guild list
|
||||||
pfUI.hooksecurefunc("GuildStatus_Update", function()
|
hooksecurefunc("GuildStatus_Update", function()
|
||||||
local playerzone = GetRealZoneText()
|
local playerzone = GetRealZoneText()
|
||||||
local off = FauxScrollFrame_GetOffset(GuildListScrollFrame)
|
local off = FauxScrollFrame_GetOffset(GuildListScrollFrame)
|
||||||
for i=1, GUILDMEMBERS_TO_DISPLAY, 1 do
|
for i=1, GUILDMEMBERS_TO_DISPLAY, 1 do
|
||||||
@@ -70,7 +70,7 @@ pfUI:RegisterModule("socialmod", function ()
|
|||||||
end
|
end
|
||||||
|
|
||||||
do -- add colors to friend list
|
do -- add colors to friend list
|
||||||
pfUI.hooksecurefunc("FriendsList_Update", function()
|
hooksecurefunc("FriendsList_Update", function()
|
||||||
if GetNumFriends() == 0 then return end
|
if GetNumFriends() == 0 then return end
|
||||||
|
|
||||||
local playerzone = GetRealZoneText()
|
local playerzone = GetRealZoneText()
|
||||||
@@ -123,7 +123,7 @@ pfUI:RegisterModule("socialmod", function ()
|
|||||||
end
|
end
|
||||||
|
|
||||||
do -- add colors to who list
|
do -- add colors to who list
|
||||||
pfUI.hooksecurefunc("WhoList_Update", function()
|
hooksecurefunc("WhoList_Update", function()
|
||||||
local num, max = GetNumWhoResults()
|
local num, max = GetNumWhoResults()
|
||||||
local off = FauxScrollFrame_GetOffset(WhoListScrollFrame)
|
local off = FauxScrollFrame_GetOffset(WhoListScrollFrame)
|
||||||
|
|
||||||
|
|||||||
@@ -2,8 +2,7 @@
|
|||||||
-- https://github.com/balakethelock/SuperWoW
|
-- https://github.com/balakethelock/SuperWoW
|
||||||
|
|
||||||
-- DLL Status Check Command (always available)
|
-- DLL Status Check Command (always available)
|
||||||
SLASH_PFDLLSTATUS1 = "/pfdll"
|
pfUI.api.RegisterSlashCommand("PFDLLSTATUS", { "/pfdll" }, function()
|
||||||
SlashCmdList["PFDLLSTATUS"] = function()
|
|
||||||
local chat = DEFAULT_CHAT_FRAME
|
local chat = DEFAULT_CHAT_FRAME
|
||||||
chat:AddMessage("|cff33ffccpfUI|r: DLL Status Check")
|
chat:AddMessage("|cff33ffccpfUI|r: DLL Status Check")
|
||||||
|
|
||||||
@@ -43,7 +42,7 @@ SlashCmdList["PFDLLSTATUS"] = function()
|
|||||||
else
|
else
|
||||||
chat:AddMessage(" |cffff0000Target frame|r: NOT found")
|
chat:AddMessage(" |cffff0000Target frame|r: NOT found")
|
||||||
end
|
end
|
||||||
end
|
end, true)
|
||||||
|
|
||||||
pfUI:RegisterModule("superwow", function ()
|
pfUI:RegisterModule("superwow", function ()
|
||||||
if SetAutoloot and SpellInfo and not SUPERWOW_VERSION then
|
if SetAutoloot and SpellInfo and not SUPERWOW_VERSION then
|
||||||
@@ -173,12 +172,10 @@ pfUI:RegisterModule("superwow", function ()
|
|||||||
end
|
end
|
||||||
|
|
||||||
-- Add slash command for clickthrough toggle
|
-- Add slash command for clickthrough toggle
|
||||||
_G.SLASH_PFCLICKTHROUGH1 = "/clickthrough"
|
pfUI.api.RegisterSlashCommand("PFCLICKTHROUGH", { "/clickthrough", "/ct" }, function()
|
||||||
_G.SLASH_PFCLICKTHROUGH2 = "/ct"
|
|
||||||
SlashCmdList["PFCLICKTHROUGH"] = function()
|
|
||||||
local enabled = pfUI.api.ToggleClickthrough()
|
local enabled = pfUI.api.ToggleClickthrough()
|
||||||
DEFAULT_CHAT_FRAME:AddMessage("|cff33ffccpfUI|r: Clickthrough mode " .. (enabled and "|cff00ff00enabled|r" or "|cffff0000disabled|r"))
|
DEFAULT_CHAT_FRAME:AddMessage("|cff33ffccpfUI|r: Clickthrough mode " .. (enabled and "|cff00ff00enabled|r" or "|cffff0000disabled|r"))
|
||||||
end
|
end, true)
|
||||||
end
|
end
|
||||||
|
|
||||||
end)
|
end)
|
||||||
+39
-6
@@ -1,4 +1,3 @@
|
|||||||
pfUI:RegisterNewModule("swingtimer", "Swing Timer")
|
|
||||||
pfUI:RegisterModule("swingtimer", function ()
|
pfUI:RegisterModule("swingtimer", function ()
|
||||||
local rawborder, border = GetBorderSize()
|
local rawborder, border = GetBorderSize()
|
||||||
|
|
||||||
@@ -28,9 +27,10 @@ pfUI:RegisterModule("swingtimer", function ()
|
|||||||
pendingCastSpellId = nil,
|
pendingCastSpellId = nil,
|
||||||
mhFrozenAt = nil,
|
mhFrozenAt = nil,
|
||||||
hsQueued = false, cleaveQueued = false, maulQueued = false,
|
hsQueued = false, cleaveQueued = false, maulQueued = false,
|
||||||
|
hsSeenCurrent = false, cleaveSeenCurrent = false, maulSeenCurrent = false,
|
||||||
isWarrior = false,
|
isWarrior = false,
|
||||||
isDruid = false,
|
isDruid = false,
|
||||||
cachedHSSlots = {}, cachedCleaveSlots = {},
|
cachedHSSlots = {}, cachedCleaveSlots = {}, cachedMaulSlots = {},
|
||||||
useSpellQueueEvent = false,
|
useSpellQueueEvent = false,
|
||||||
swingThrottle = 0,
|
swingThrottle = 0,
|
||||||
onSwingCache = {},
|
onSwingCache = {},
|
||||||
@@ -416,17 +416,20 @@ pfUI:RegisterModule("swingtimer", function ()
|
|||||||
S.hsQueued = (kind == "hs")
|
S.hsQueued = (kind == "hs")
|
||||||
S.cleaveQueued = (kind == "cleave")
|
S.cleaveQueued = (kind == "cleave")
|
||||||
S.maulQueued = (kind == "maul")
|
S.maulQueued = (kind == "maul")
|
||||||
|
S.hsSeenCurrent, S.cleaveSeenCurrent, S.maulSeenCurrent = false, false, false
|
||||||
end
|
end
|
||||||
|
|
||||||
local function RebuildQueueSlotCache()
|
local function RebuildQueueSlotCache()
|
||||||
if not S.isWarrior or not sw_hsqueue or S.useSpellQueueEvent then return end
|
if not sw_hsqueue then return end
|
||||||
S.cachedHSSlots = {}
|
S.cachedHSSlots = {}
|
||||||
S.cachedCleaveSlots = {}
|
S.cachedCleaveSlots = {}
|
||||||
|
S.cachedMaulSlots = {}
|
||||||
|
if not (S.isWarrior or S.isDruid) then return end
|
||||||
for slot = 1, 120 do
|
for slot = 1, 120 do
|
||||||
local kind, id = GetActionInfo(slot)
|
local kind, id = GetActionInfo(slot)
|
||||||
local name
|
local name
|
||||||
if kind == "spell" then
|
if kind == "spell" then
|
||||||
name = GetSpellInfo(id)
|
name = C_Spell.GetSpellName(id)
|
||||||
elseif kind == "macro" then
|
elseif kind == "macro" then
|
||||||
name = GetMacroSpell(id)
|
name = GetMacroSpell(id)
|
||||||
end
|
end
|
||||||
@@ -434,6 +437,8 @@ pfUI:RegisterModule("swingtimer", function ()
|
|||||||
table.insert(S.cachedHSSlots, slot)
|
table.insert(S.cachedHSSlots, slot)
|
||||||
elseif name == CLEAVE_NAME then
|
elseif name == CLEAVE_NAME then
|
||||||
table.insert(S.cachedCleaveSlots, slot)
|
table.insert(S.cachedCleaveSlots, slot)
|
||||||
|
elseif name == MAUL_NAME then
|
||||||
|
table.insert(S.cachedMaulSlots, slot)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -445,9 +450,30 @@ pfUI:RegisterModule("swingtimer", function ()
|
|||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- Reconcile a stale event-driven queue flag against the client's current
|
||||||
|
-- action. Not every de-queue emits a SPELL_QUEUE pop — pressing Esc or
|
||||||
|
-- re-pressing to cancel an on-swing spell doesn't — so the flag alone stays
|
||||||
|
-- set. IsCurrentAction, which the client clears on cancel, is the reconciling
|
||||||
|
-- signal, but only after it has confirmed the ability as current at least once
|
||||||
|
-- (`seen`): a nampower-initiated cast may never flip IsCurrentAction, and must
|
||||||
|
-- keep its color until its own pop/resolve rather than be cleared early.
|
||||||
|
-- Returns the updated (queued, seen).
|
||||||
|
local function ReconcileQueued(queued, slots, seen)
|
||||||
|
if not queued then return false, false end
|
||||||
|
if CheckQueuedAction(slots) then return true, true end
|
||||||
|
if seen then return false, false end -- was current, now gone -> cancelled
|
||||||
|
return true, false -- never confirmed current -> keep
|
||||||
|
end
|
||||||
|
|
||||||
local function IsHSOrCleaveQueued()
|
local function IsHSOrCleaveQueued()
|
||||||
if not sw_hsqueue or not S.isWarrior then return false, false end
|
if not sw_hsqueue or not S.isWarrior then return false, false end
|
||||||
if S.useSpellQueueEvent then return S.hsQueued, S.cleaveQueued end
|
if S.useSpellQueueEvent then
|
||||||
|
S.hsQueued, S.hsSeenCurrent =
|
||||||
|
ReconcileQueued(S.hsQueued, S.cachedHSSlots, S.hsSeenCurrent)
|
||||||
|
S.cleaveQueued, S.cleaveSeenCurrent =
|
||||||
|
ReconcileQueued(S.cleaveQueued, S.cachedCleaveSlots, S.cleaveSeenCurrent)
|
||||||
|
return S.hsQueued, S.cleaveQueued
|
||||||
|
end
|
||||||
return CheckQueuedAction(S.cachedHSSlots), CheckQueuedAction(S.cachedCleaveSlots)
|
return CheckQueuedAction(S.cachedHSSlots), CheckQueuedAction(S.cachedCleaveSlots)
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -526,6 +552,10 @@ pfUI:RegisterModule("swingtimer", function ()
|
|||||||
-- HS/Cleave color
|
-- HS/Cleave color
|
||||||
local curR, curG, curB = mhDefaultR, mhDefaultG, mhDefaultB
|
local curR, curG, curB = mhDefaultR, mhDefaultG, mhDefaultB
|
||||||
if sw_hsqueue then
|
if sw_hsqueue then
|
||||||
|
if S.isDruid and S.useSpellQueueEvent then
|
||||||
|
S.maulQueued, S.maulSeenCurrent =
|
||||||
|
ReconcileQueued(S.maulQueued, S.cachedMaulSlots, S.maulSeenCurrent)
|
||||||
|
end
|
||||||
if S.maulQueued and S.isDruid then
|
if S.maulQueued and S.isDruid then
|
||||||
curR, curG, curB = 1.0, 0.55, 0.0 -- orange for druid maul queue
|
curR, curG, curB = 1.0, 0.55, 0.0 -- orange for druid maul queue
|
||||||
elseif S.isWarrior then
|
elseif S.isWarrior then
|
||||||
@@ -780,7 +810,10 @@ pfUI:RegisterModule("swingtimer", function ()
|
|||||||
-- SPELL_CAST_EVENT hook: HS/Cleave/Maul queue tracking
|
-- SPELL_CAST_EVENT hook: HS/Cleave/Maul queue tracking
|
||||||
pfUI.libdebuff_spell_cast_hooks = pfUI.libdebuff_spell_cast_hooks or {}
|
pfUI.libdebuff_spell_cast_hooks = pfUI.libdebuff_spell_cast_hooks or {}
|
||||||
pfUI.libdebuff_spell_cast_hooks["swingtimer"] = function(success, spellId)
|
pfUI.libdebuff_spell_cast_hooks["swingtimer"] = function(success, spellId)
|
||||||
SetQueuedKind(ClassifyOnSwingSpell(spellId))
|
local kind = ClassifyOnSwingSpell(spellId)
|
||||||
|
if not kind then return end
|
||||||
|
S.useSpellQueueEvent = true
|
||||||
|
SetQueuedKind(kind)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -267,7 +267,7 @@ pfUI:RegisterModule("thirdparty-vanilla", function()
|
|||||||
SW_BarFrame1_Selector:Hide()
|
SW_BarFrame1_Selector:Hide()
|
||||||
|
|
||||||
-- let user select mode by clicking the title
|
-- let user select mode by clicking the title
|
||||||
HookScript(SW_BarFrame1_Title, "OnMouseUp", function()
|
SW_BarFrame1_Title:HookScript("OnMouseUp", function()
|
||||||
local page = SW_Settings and SW_Settings.BarFrames and SW_Settings.BarFrames.SW_BarFrame1 and SW_Settings.BarFrames.SW_BarFrame1.Selected
|
local page = SW_Settings and SW_Settings.BarFrames and SW_Settings.BarFrames.SW_BarFrame1 and SW_Settings.BarFrames.SW_BarFrame1.Selected
|
||||||
if page then
|
if page then
|
||||||
local target = (arg1 == "LeftButton") and (page + 1) or (arg1 == "RightButton") and (page - 1)
|
local target = (arg1 == "LeftButton") and (page + 1) or (arg1 == "RightButton") and (page - 1)
|
||||||
@@ -530,7 +530,7 @@ pfUI:RegisterModule("thirdparty-vanilla", function()
|
|||||||
end
|
end
|
||||||
|
|
||||||
-- replace wim class colors with pfUI ones
|
-- replace wim class colors with pfUI ones
|
||||||
pfUI.hooksecurefunc("WIM_InitClassProps", function()
|
hooksecurefunc("WIM_InitClassProps", function()
|
||||||
for class in pairs(PFUI_CLASS_COLORS) do
|
for class in pairs(PFUI_CLASS_COLORS) do
|
||||||
local wimclass = _G[format("WIM_LOCALIZED_%s",class)]
|
local wimclass = _G[format("WIM_LOCALIZED_%s",class)]
|
||||||
local colorstr = "|c" .. PFUI_CLASS_COLORS[class].colorStr
|
local colorstr = "|c" .. PFUI_CLASS_COLORS[class].colorStr
|
||||||
@@ -547,7 +547,7 @@ pfUI:RegisterModule("thirdparty-vanilla", function()
|
|||||||
btnClose:SetWidth(13)
|
btnClose:SetWidth(13)
|
||||||
btnClose:SetHeight(13)
|
btnClose:SetHeight(13)
|
||||||
end
|
end
|
||||||
pfUI.hooksecurefunc("WIM_Icon_DropDown_Update", function()
|
hooksecurefunc("WIM_Icon_DropDown_Update", function()
|
||||||
for i=1,_G.WIM_MaxMenuCount do
|
for i=1,_G.WIM_MaxMenuCount do
|
||||||
local btn = _G["WIM_ConversationMenuTellButton"..i]
|
local btn = _G["WIM_ConversationMenuTellButton"..i]
|
||||||
if i==1 and btn:IsEnabled() == 0 then return end
|
if i==1 and btn:IsEnabled() == 0 then return end
|
||||||
@@ -729,7 +729,7 @@ pfUI:RegisterModule("thirdparty-vanilla", function()
|
|||||||
SkinScrollbar(WIM_HelpScrollFrameScrollBar)
|
SkinScrollbar(WIM_HelpScrollFrameScrollBar)
|
||||||
end
|
end
|
||||||
|
|
||||||
pfUI.hooksecurefunc("WIM_WindowOnShow", function()
|
hooksecurefunc("WIM_WindowOnShow", function()
|
||||||
if this.backdrop then return end -- already skinned
|
if this.backdrop then return end -- already skinned
|
||||||
|
|
||||||
local windowname = this:GetName()
|
local windowname = this:GetName()
|
||||||
@@ -904,7 +904,7 @@ pfUI:RegisterModule("thirdparty-vanilla", function()
|
|||||||
end
|
end
|
||||||
|
|
||||||
-- trigger the event whenever SuperMacro got an update
|
-- trigger the event whenever SuperMacro got an update
|
||||||
pfUI.hooksecurefunc("SM_UpdateActionSpell", function()
|
hooksecurefunc("SM_UpdateActionSpell", function()
|
||||||
for slot=1,120 do pfUI.bars.update[slot] = true end
|
for slot=1,120 do pfUI.bars.update[slot] = true end
|
||||||
end)
|
end)
|
||||||
end)
|
end)
|
||||||
@@ -922,7 +922,7 @@ pfUI:RegisterModule("thirdparty-vanilla", function()
|
|||||||
pfUI.bars.skip_macro = true
|
pfUI.bars.skip_macro = true
|
||||||
|
|
||||||
-- send clevermacro events to pfUI actionbars
|
-- send clevermacro events to pfUI actionbars
|
||||||
pfUI.hooksecurefunc("ActionButton_OnEvent", function(event)
|
hooksecurefunc("ActionButton_OnEvent", function(event)
|
||||||
events(this, event)
|
events(this, event)
|
||||||
end)
|
end)
|
||||||
end)
|
end)
|
||||||
@@ -944,7 +944,7 @@ pfUI:RegisterModule("thirdparty-vanilla", function()
|
|||||||
|
|
||||||
if pfUI.eqcompare then
|
if pfUI.eqcompare then
|
||||||
pfUI.eqcompare.HookTooltip(AtlasLootTooltip)
|
pfUI.eqcompare.HookTooltip(AtlasLootTooltip)
|
||||||
HookScript(AtlasLootTooltip, "OnHide", function()
|
AtlasLootTooltip:HookScript("OnHide", function()
|
||||||
ShoppingTooltip1:Hide()
|
ShoppingTooltip1:Hide()
|
||||||
ShoppingTooltip2:Hide()
|
ShoppingTooltip2:Hide()
|
||||||
end)
|
end)
|
||||||
|
|||||||
+6
-6
@@ -3,8 +3,7 @@ pfUI:RegisterModule("tooltip", function ()
|
|||||||
|
|
||||||
pfUI.tooltip = CreateFrame('Frame', "pfTooltip", GameTooltip)
|
pfUI.tooltip = CreateFrame('Frame', "pfTooltip", GameTooltip)
|
||||||
pfUI.tooltip.anchorframe = CreateFrame('Frame', "pfTooltipAnchor", UIParent)
|
pfUI.tooltip.anchorframe = CreateFrame('Frame', "pfTooltipAnchor", UIParent)
|
||||||
pfUI.tooltip.anchorframe:SetWidth(128)
|
pfUI.tooltip.anchorframe:SetSize(128, 72)
|
||||||
pfUI.tooltip.anchorframe:SetHeight(72)
|
|
||||||
pfUI.tooltip.anchorframe:SetPoint("TOP", UIParent, "TOP", 0, -50)
|
pfUI.tooltip.anchorframe:SetPoint("TOP", UIParent, "TOP", 0, -50)
|
||||||
pfUI.tooltip.anchorframe:Hide()
|
pfUI.tooltip.anchorframe:Hide()
|
||||||
UpdateMovable(pfUI.tooltip.anchorframe)
|
UpdateMovable(pfUI.tooltip.anchorframe)
|
||||||
@@ -30,8 +29,8 @@ pfUI:RegisterModule("tooltip", function ()
|
|||||||
-- create mouse follow frame
|
-- create mouse follow frame
|
||||||
if not tooltip.cursor then
|
if not tooltip.cursor then
|
||||||
tooltip.cursor = CreateFrame("Frame", nil, UIParent)
|
tooltip.cursor = CreateFrame("Frame", nil, UIParent)
|
||||||
tooltip.cursor:SetWidth(tonumber(C.tooltip.cursoroffset) * 2)
|
local size = tonumber(C.tooltip.cursoroffset) * 2
|
||||||
tooltip.cursor:SetHeight(tonumber(C.tooltip.cursoroffset) * 2)
|
tooltip.cursor:SetSize(size, size)
|
||||||
tooltip.cursor:SetScript("OnUpdate", function()
|
tooltip.cursor:SetScript("OnUpdate", function()
|
||||||
-- throttle - cursor following doesn't need to be every frame
|
-- throttle - cursor following doesn't need to be every frame
|
||||||
if (this.tick or 0) > GetTime() then return end
|
if (this.tick or 0) > GetTime() then return end
|
||||||
@@ -172,8 +171,9 @@ pfUI:RegisterModule("tooltip", function ()
|
|||||||
local unit = pfUI.tooltip:GetUnit()
|
local unit = pfUI.tooltip:GetUnit()
|
||||||
if unit == "none" then
|
if unit == "none" then
|
||||||
-- process item tooltips
|
-- process item tooltips
|
||||||
if C.tooltip.itemid == "1" and libtooltip:GetItemID() then
|
if C.tooltip.itemid == "1" and GameTooltip:HasItem() then
|
||||||
GameTooltip:AddLine(T["ItemID"] .. ": " .. libtooltip:GetItemID(), .25,.5,1)
|
local _, _, itemID = GameTooltip:GetItem()
|
||||||
|
GameTooltip:AddLine(T["ItemID"] .. ": " .. itemID, .25,.5,1)
|
||||||
GameTooltip:Show()
|
GameTooltip:Show()
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
+42
-841
@@ -65,14 +65,14 @@ pfUI:RegisterModule("turtle-wow", function ()
|
|||||||
|
|
||||||
HookAddonOrVariable("GroupFrame", function()
|
HookAddonOrVariable("GroupFrame", function()
|
||||||
-- After Turtle's own init, hide frames if pfUI handles them
|
-- After Turtle's own init, hide frames if pfUI handles them
|
||||||
pfUI.hooksecurefunc("GroupFrame_Toggle", function()
|
hooksecurefunc("GroupFrame_Toggle", function()
|
||||||
if pfUIHandlesGroupOrRaid() then
|
if pfUIHandlesGroupOrRaid() then
|
||||||
DisableTurtleGroupFrames()
|
DisableTurtleGroupFrames()
|
||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
|
|
||||||
-- After every group/raid update, re-hide if pfUI handles them
|
-- After every group/raid update, re-hide if pfUI handles them
|
||||||
pfUI.hooksecurefunc("GroupFrame_Update", function()
|
hooksecurefunc("GroupFrame_Update", function()
|
||||||
if pfUIHandlesGroupOrRaid() then
|
if pfUIHandlesGroupOrRaid() then
|
||||||
DisableTurtleGroupFrames()
|
DisableTurtleGroupFrames()
|
||||||
end
|
end
|
||||||
@@ -295,40 +295,58 @@ pfUI:RegisterModule("turtle-wow", function ()
|
|||||||
local initialized = false
|
local initialized = false
|
||||||
|
|
||||||
HookAddonOrVariable("Blizzard_InspectUI", function()
|
HookAddonOrVariable("Blizzard_InspectUI", function()
|
||||||
pfUI.hooksecurefunc("InspectFrame_Show", function()
|
hooksecurefunc("InspectFrame_Show", function()
|
||||||
-- break if theres nothing left to do
|
-- break if theres nothing left to do
|
||||||
if initialized then return end
|
if initialized then return end
|
||||||
|
|
||||||
-- adjust ui positions
|
local _, border = GetBorderSize()
|
||||||
|
|
||||||
|
-- adjust the inspect frame's Talents tab
|
||||||
SkinTab(InspectFrameTab3)
|
SkinTab(InspectFrameTab3)
|
||||||
InspectFrameTab3:ClearAllPoints()
|
InspectFrameTab3:ClearAllPoints()
|
||||||
InspectFrameTab3:SetPoint("LEFT", InspectFrameTab2, "RIGHT", GetBorderSize()*2 + 1, 0)
|
InspectFrameTab3:SetPoint("LEFT", InspectFrameTab2, "RIGHT", border*2 + 1, 0)
|
||||||
TWTalentFrameTab1:SetPoint("TOPLEFT", TWTalentFrameScrollFrame, "TOPLEFT", 2, TWTalentFrameTab1:GetHeight() + 4)
|
|
||||||
|
|
||||||
-- reload text position
|
-- reload text position
|
||||||
InspectFrameTab3:Hide()
|
InspectFrameTab3:Hide()
|
||||||
InspectFrameTab3:Show()
|
InspectFrameTab3:Show()
|
||||||
|
|
||||||
-- skin inspect window elements
|
-- the talent tree frame is created lazily; skin it once it exists
|
||||||
StripTextures(InspectTalentsFrame)
|
if TWTalentFrame then
|
||||||
StripTextures(TWTalentFrameScrollFrame)
|
StripTextures(InspectTalentsFrame)
|
||||||
SkinScrollbar(TWTalentFrameScrollFrameScrollBar)
|
StripTextures(TWTalentFrame)
|
||||||
for i = 1, 3 do
|
StripTextures(TWTalentFrameScrollFrame)
|
||||||
SkinTab(_G["TWTalentFrameTab"..i])
|
SkinScrollbar(TWTalentFrameScrollFrameScrollBar)
|
||||||
end
|
|
||||||
|
|
||||||
-- skin each talent button
|
-- skin + position the talent-tree tabs
|
||||||
for i = 1, (MAX_NUM_TALENTS or 100) do
|
for i = 1, 3 do
|
||||||
local talent = _G["TWTalentFrameTalent" .. i]
|
local tab = _G["TWTalentFrameTab"..i]
|
||||||
if talent then
|
if tab then
|
||||||
StripTextures(talent)
|
SkinTab(tab)
|
||||||
SkinButton(talent, nil, nil, nil, _G["TWTalentFrameTalent" .. i .. "IconTexture"])
|
tab:ClearAllPoints()
|
||||||
_G["TWTalentFrameTalent" .. i .. "Rank"]:SetFont(pfUI.font_default, C.global.font_size, "OUTLINE")
|
local lastTab = _G["TWTalentFrameTab"..(i-1)]
|
||||||
|
if lastTab then
|
||||||
|
tab:SetPoint("LEFT", lastTab, "RIGHT", border*2 + 1, 0)
|
||||||
|
else
|
||||||
|
tab:SetPoint("TOPLEFT", TWTalentFrameScrollFrame, "TOPLEFT", 2, tab:GetHeight() + 4)
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
|
||||||
|
|
||||||
-- only run once
|
-- skin each talent button
|
||||||
initialized = true
|
for i = 1, (MAX_NUM_TALENTS or 100) do
|
||||||
|
local talent = _G["TWTalentFrameTalent"..i]
|
||||||
|
if talent then
|
||||||
|
StripTextures(talent)
|
||||||
|
SkinButton(talent, nil, nil, nil, _G["TWTalentFrameTalent"..i.."IconTexture"])
|
||||||
|
local rank = _G["TWTalentFrameTalent"..i.."Rank"]
|
||||||
|
if rank then
|
||||||
|
rank:SetFont(pfUI.font_default, C.global.font_size, "OUTLINE")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
-- only run once the talent frame has actually been skinned
|
||||||
|
initialized = true
|
||||||
|
end
|
||||||
end)
|
end)
|
||||||
end)
|
end)
|
||||||
end
|
end
|
||||||
@@ -355,823 +373,6 @@ pfUI:RegisterModule("turtle-wow", function ()
|
|||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
|
|
||||||
-- add turtle-wow overlay values
|
|
||||||
-- coordinates from paokkerkir/ShaguTweaks-extras, measured for TurtleWoW 1.18.1
|
|
||||||
pfMapOverlayData = {
|
|
||||||
["Durotar"] = {
|
|
||||||
"DRYGULCHRAVINE:139:134:438:92",
|
|
||||||
"ECHOISLES:175:236:561:432",
|
|
||||||
"KOLKARCRAG:131:96:426:487",
|
|
||||||
"ORGRIMMAR:427:150:251:0",
|
|
||||||
"RAZORHILL:188:207:445:182",
|
|
||||||
"RAZORMANEGROUNDS:196:202:318:204",
|
|
||||||
"SENJINVILLAGE:133:167:485:398",
|
|
||||||
"SKULLROCK:118:79:469:51",
|
|
||||||
"SparkwaterPort:122:134:522:94",
|
|
||||||
"THUNDERRIDGE:156:174:341:72",
|
|
||||||
"TIRAGARDEKEEP:160:148:477:300",
|
|
||||||
"VALLEYOFTRIALS:186:184:370:335",
|
|
||||||
},
|
|
||||||
["Mulgore"] = {
|
|
||||||
"BAELDUNDIGSITE:175:151:269:227",
|
|
||||||
"BLOODHOOFVILLAGE:236:182:378:311",
|
|
||||||
"PALEMANEROCK:102:183:315:317",
|
|
||||||
"RAVAGEDCARAVAN:110:100:482:269",
|
|
||||||
"REDCLOUDMESA:436:231:285:437",
|
|
||||||
"REDROCKS:154:138:522:92",
|
|
||||||
"SuntailPass:129:116:533:18",
|
|
||||||
"THEGOLDENPLAINS:184:217:441:91",
|
|
||||||
"THEROLLINGPLAINS:231:166:536:369",
|
|
||||||
"THEVENTURECOMINE:187:204:549:251",
|
|
||||||
"THUNDERBLUFF:254:217:264:70",
|
|
||||||
"THUNDERHORNWATERWELL:118:137:384:248",
|
|
||||||
"WILDMANEWATERWELL:152:111:299:10",
|
|
||||||
"WINDFURYRIDGE:182:119:405:2",
|
|
||||||
"WINTERHOOFWATERWELL:144:107:470:379",
|
|
||||||
},
|
|
||||||
["Barrens"] = {
|
|
||||||
"AGAMAGOR:183:173:348:242",
|
|
||||||
"AnchorsEdge:118:83:690:300",
|
|
||||||
"BAELMODAN:120:123:435:482",
|
|
||||||
"BLACKTHORNRIDGE:140:123:340:465",
|
|
||||||
"BOULDERLODEMINE:109:105:560:0",
|
|
||||||
"BRAMBLESCAR:112:152:446:304",
|
|
||||||
"CAMPTAURAJO:130:113:370:355",
|
|
||||||
"DREADMISTPEAK:121:93:423:68",
|
|
||||||
"FARWATCHPOST:85:152:572:58",
|
|
||||||
"FIELDOFGIANTS:194:137:363:410",
|
|
||||||
"GROLDOMFARM:112:107:499:67",
|
|
||||||
"HONORSSTAND:128:128:306:130",
|
|
||||||
"LUSHWATEROASIS:160:169:372:186",
|
|
||||||
"NORTHWATCHFOLD:134:107:533:310",
|
|
||||||
"RAPTORGROUNDS:101:99:512:299",
|
|
||||||
"RATCHET:116:118:556:190",
|
|
||||||
"RAZORFENDOWNS:137:106:414:562",
|
|
||||||
"RAZORFENKRAUL:116:123:345:539",
|
|
||||||
"THECROSSROADS:142:140:436:127",
|
|
||||||
"THEDRYHILLS:185:134:324:36",
|
|
||||||
"THEFORGOTTENPOOLS:104:116:391:120",
|
|
||||||
"THEMERCHANTCOAST:80:123:584:249",
|
|
||||||
"THEMORSHANRAMPART:118:91:418:0",
|
|
||||||
"THESLUDGEFEN:153:113:463:0",
|
|
||||||
"THESTAGNANTOASIS:147:126:484:211",
|
|
||||||
"THORNHILL:128:120:502:123",
|
|
||||||
},
|
|
||||||
["Alterac"] = {
|
|
||||||
"CHILLWINDPOINT:308:250:660:261",
|
|
||||||
"CORRAHNSDAGGER:173:277:411:391",
|
|
||||||
"CRUSHRIDGEHOLD:269:230:339:167",
|
|
||||||
"DALARAN:277:283:39:275",
|
|
||||||
"DANDREDSFOLD:273:224:282:0",
|
|
||||||
"GALLOWSCORNER:183:185:415:287",
|
|
||||||
"GAVINSNAZE:140:161:235:486",
|
|
||||||
"GROWLESSCAVE:175:156:327:382",
|
|
||||||
"LORDAMEREINTERNMENTCAMP:315:255:55:413",
|
|
||||||
"MISTYSHORE:204:268:207:139",
|
|
||||||
"RUINSOFALTERAC:252:249:274:201",
|
|
||||||
"RavenholdtManor:217:165:737:452",
|
|
||||||
"SOFERASNAZE:241:312:469:311",
|
|
||||||
"STRAHNBRAD:355:289:555:110",
|
|
||||||
"THEHEADLAND:142:187:325:481",
|
|
||||||
"THEUPLANDS:219:183:470:84",
|
|
||||||
},
|
|
||||||
["Arathi"] = {
|
|
||||||
"BOULDERFISTHALL:190:214:442:371",
|
|
||||||
"BOULDERGOR:222:214:244:167",
|
|
||||||
"CIRCLEOFEASTBINDING:140:213:568:125",
|
|
||||||
"CIRCLEOFINNERBINDING:186:164:302:321",
|
|
||||||
"CIRCLEOFOUTERBINDING:149:137:429:301",
|
|
||||||
"CIRCLEOFWESTBINDING:156:189:152:71",
|
|
||||||
"DABYRIESFARMSTEAD:160:171:482:197",
|
|
||||||
"FALDIRSCOVE:247:197:180:428",
|
|
||||||
"FarwellStead:112:128:267:31",
|
|
||||||
"GOSHEKFARM:208:177:539:284",
|
|
||||||
"HAMMERFALL:182:235:665:128",
|
|
||||||
"NORTHFOLDMANOR:202:205:204:119",
|
|
||||||
"REFUGEPOINT:157:189:380:214",
|
|
||||||
"RuinsOfZulRasaz:160:160:346:29",
|
|
||||||
"STROMGARDEKEEP:220:213:122:295",
|
|
||||||
"THANDOLSPAN:175:198:369:424",
|
|
||||||
"THORADINSWALL:173:225:103:148",
|
|
||||||
"WITHERBARKVILLAGE:197:194:566:339",
|
|
||||||
"WildtuskVillage:183:102:379:145",
|
|
||||||
},
|
|
||||||
["Badlands"] = {
|
|
||||||
"AGMONDSEND:249:256:354:396",
|
|
||||||
"ANGORFORTRESS:186:241:327:101",
|
|
||||||
"APOCRYPHANSREST:251:195:20:315",
|
|
||||||
"CAMPBOFF:195:207:506:361",
|
|
||||||
"CAMPCAGG:247:205:15:432",
|
|
||||||
"CAMPKOSH:214:211:556:56",
|
|
||||||
"CrystallinePinnacle:140:155:609:337",
|
|
||||||
"DUSTWINDGULCH:229:190:506:216",
|
|
||||||
"HAMMERTOESDIGSITE:185:177:455:131",
|
|
||||||
"KARGATH:232:245:0:154",
|
|
||||||
"LETHLORRAVINE:344:395:627:173",
|
|
||||||
"MIRAGEFLATS:276:229:153:387",
|
|
||||||
"RedbrandsDigsite:325:155:496:454",
|
|
||||||
"RuinsOfCorthan:210:200:203:124",
|
|
||||||
"ScalebaneRidge:205:179:751:142",
|
|
||||||
"THEDUSTBOWL:253:266:166:203",
|
|
||||||
"THEMAKERSTERRACE:230:172:399:16",
|
|
||||||
"VALLEYOFFANGS:215:215:358:265",
|
|
||||||
},
|
|
||||||
["BlastedLands"] = {
|
|
||||||
"ALTAROFSTORMS:169:142:318:141",
|
|
||||||
"DARKPORTAL:254:208:460:265",
|
|
||||||
"DREADMAULHOLD:200:171:351:21",
|
|
||||||
"DREADMAULPOST:228:183:370:204",
|
|
||||||
"GARRISONARMORY:155:192:480:15",
|
|
||||||
"NETHERGARDEKEEP:169:178:567:35",
|
|
||||||
"RISEOFTHEDEFILER:150:131:414:131",
|
|
||||||
"SERPENTSCOIL:211:155:510:148",
|
|
||||||
"THETAINTEDSCAR:370:438:220:184",
|
|
||||||
},
|
|
||||||
["Tirisfal"] = {
|
|
||||||
"AGAMANDMILLS:244:191:342:148",
|
|
||||||
"BALNIRFARMSTEAD:179:153:639:335",
|
|
||||||
"BRIGHTWATERLAKE:176:280:598:143",
|
|
||||||
"BRILL:121:144:540:305",
|
|
||||||
"BULWARK:184:169:712:374",
|
|
||||||
"COLDHEARTHMANOR:136:125:479:328",
|
|
||||||
"CRUSADEROUTPOST:154:121:701:293",
|
|
||||||
"DEATHKNELL:210:186:236:337",
|
|
||||||
"GARRENSHAUNT:148:199:507:154",
|
|
||||||
"GLENSHIRE:163:161:157:393",
|
|
||||||
"MONASTARY:175:157:762:139",
|
|
||||||
"NIGHTMAREVALE:209:151:370:355",
|
|
||||||
"RUINSOFLORDAERON:299:216:469:370",
|
|
||||||
"SCARLETWATCHPOST:141:223:701:113",
|
|
||||||
"SOLLIDENFARMSTEAD:225:138:247:259",
|
|
||||||
"STEEPCLIFFPORT:121:120:5:350",
|
|
||||||
"STILLWATERPOND:168:123:401:279",
|
|
||||||
"THECORINTHFARMSTEAD:116:152:73:402",
|
|
||||||
"THEWHISPERINGFOREST:243:175:86:263",
|
|
||||||
"VENOMWEBVALE:199:183:776:225",
|
|
||||||
},
|
|
||||||
["Silverpine"] = {
|
|
||||||
"AMBERMILL:204:210:512:279",
|
|
||||||
"BERENSPERIL:206:146:508:433",
|
|
||||||
"DEEPELEMMINE:127:143:484:274",
|
|
||||||
"FENRISISLE:234:187:593:88",
|
|
||||||
"MALDENSORCHARD:228:138:479:9",
|
|
||||||
"NORTHTIDESHOLLOW:152:104:337:141",
|
|
||||||
"OLSENSFARTHING:128:152:401:267",
|
|
||||||
"PYREWOODVILLAGE:122:108:405:456",
|
|
||||||
"SHADOWFANGKEEP:185:131:380:373",
|
|
||||||
"THEDEADFIELD:141:134:419:82",
|
|
||||||
"THEDECREPITFERRY:144:156:475:160",
|
|
||||||
"THEGREYMANEWALL:175:185:398:465",
|
|
||||||
"THESEPULCHER:193:135:360:184",
|
|
||||||
"THESHININGSTRAND:225:192:475:27",
|
|
||||||
"THESKITTERINGDARK:160:165:302:18",
|
|
||||||
},
|
|
||||||
["WesternPlaguelands"] = {
|
|
||||||
"CAERDARROW:158:150:608:421",
|
|
||||||
"DALSONSTEARS:209:138:388:271",
|
|
||||||
"DARROWMERELAKE:359:261:510:348",
|
|
||||||
"FELSTONEFIELD:149:119:306:315",
|
|
||||||
"GAHRRONSWITHERING:165:191:527:257",
|
|
||||||
"HEARTHGLEN:331:280:312:20",
|
|
||||||
"NORTHRIDGELUMBERCAMP:205:168:390:170",
|
|
||||||
"RUINSOFANDORHOL:275:219:265:360",
|
|
||||||
"SORROWHILL:290:201:360:467",
|
|
||||||
"THEBULWARK:216:172:143:300",
|
|
||||||
"THEWEEPINGCAVE:148:192:572:203",
|
|
||||||
"THEWRITHINGHAUNT:159:177:457:329",
|
|
||||||
"THONDRORILRIVER:193:326:597:94",
|
|
||||||
},
|
|
||||||
["EasternPlaguelands"] = {
|
|
||||||
"BLACKWOODLAKE:217:221:451:207",
|
|
||||||
"CORINSCROSSING:153:146:544:373",
|
|
||||||
"CROWNGUARDTOWER:193:152:299:408",
|
|
||||||
"DARROWSHIRE:195:167:316:497",
|
|
||||||
"EASTWALLTOWER:164:143:600:250",
|
|
||||||
"ForlornSummit:192:185:64:225",
|
|
||||||
"LAKEMERELDAR:240:164:543:469",
|
|
||||||
"LIGHTSHOPECHAPEL:165:238:721:304",
|
|
||||||
"NORTHDALE:172:191:628:135",
|
|
||||||
"NORTHPASSTOWER:228:178:465:118",
|
|
||||||
"PESTILENTSCAR:189:241:416:349",
|
|
||||||
"PLAGUEWOOD:346:258:178:92",
|
|
||||||
"QUELLITHIENLODGE:216:136:430:44",
|
|
||||||
"STRATHOLME:227:189:202:15",
|
|
||||||
"TERRORDALE:175:129:86:137",
|
|
||||||
"THEFUNGALVALE:202:199:277:267",
|
|
||||||
"THEINFECTISSCAR:183:262:628:298",
|
|
||||||
"THEMARRISSTEAD:182:194:164:367",
|
|
||||||
"THENOXIOUSGLADE:211:202:730:172",
|
|
||||||
"THEUNDERCROFT:171:136:178:484",
|
|
||||||
"THONDRORILRIVER:210:348:12:235",
|
|
||||||
"TYRSHAND:201:159:724:475",
|
|
||||||
"ZULMASHAR:189:152:621:36",
|
|
||||||
},
|
|
||||||
["Hilsbrad"] = {
|
|
||||||
"AZURELOADMINE:146:174:188:288",
|
|
||||||
"DARROWHILL:173:132:426:164",
|
|
||||||
"DUNGAROK:225:257:644:305",
|
|
||||||
"DURNHOLDEKEEP:367:347:614:82",
|
|
||||||
"EASTERNSTRAND:208:301:537:350",
|
|
||||||
"HILLSBRADFIELDS:282:257:211:166",
|
|
||||||
"NETHANDERSTEAD:190:215:554:249",
|
|
||||||
"PURGATIONISLE:120:94:111:485",
|
|
||||||
"SOUTHPOINTTOWER:271:207:11:203",
|
|
||||||
"SOUTHSHORE:219:245:423:213",
|
|
||||||
"TARRENMILL:195:291:524:9",
|
|
||||||
"WESTERNSTRAND:272:139:215:377",
|
|
||||||
},
|
|
||||||
["Hinterlands"] = {
|
|
||||||
"AERIEPEAK:240:195:20:250",
|
|
||||||
"AGOLWATHA:188:180:382:173",
|
|
||||||
"HIRIWATHA:201:118:188:314",
|
|
||||||
"JINTHAALOR:223:277:514:338",
|
|
||||||
"PLAGUEMISTRAVINE:124:203:170:158",
|
|
||||||
"QUELDANILLODGE:168:181:248:194",
|
|
||||||
"SERADANE:260:263:519:25",
|
|
||||||
"SHADRAALOR:181:170:247:394",
|
|
||||||
"SHAOLWATHA:265:190:580:247",
|
|
||||||
"SKULKROCK:148:133:520:241",
|
|
||||||
"THEALTAROFZUL:186:153:382:371",
|
|
||||||
"THECREEPINGRUIN:168:157:417:268",
|
|
||||||
"THEOVERLOOKCLIFFS:153:299:702:309",
|
|
||||||
"TheRasazTrails:118:133:210:381",
|
|
||||||
"VALORWINDLAKE:153:160:329:309",
|
|
||||||
},
|
|
||||||
["DunMorogh"] = {
|
|
||||||
"AMBERSTILLRANCH:105:104:582:288",
|
|
||||||
"ANVILMAR:209:159:167:414",
|
|
||||||
"BREWNALLVILLAGE:94:102:263:256",
|
|
||||||
"CHILLBREEZEVALLEY:160:113:281:304",
|
|
||||||
"COLDRIDGEPASS:134:123:300:387",
|
|
||||||
"FROSTMANEHOLD:112:118:225:291",
|
|
||||||
"GNOMERAGON:158:176:178:164",
|
|
||||||
"GOLBOLARQUARRY:144:149:619:301",
|
|
||||||
"HELMSBEDLAKE:131:153:706:284",
|
|
||||||
"ICEFLOWLAKE:117:167:286:173",
|
|
||||||
"IRONFORGE:291:187:414:166",
|
|
||||||
"IronforgeAirfields:213:233:582:100",
|
|
||||||
"KHARANOS:175:186:397:296",
|
|
||||||
"MISTYPINEREFUGE:117:155:507:224",
|
|
||||||
"NORTHERNGATEOUTPOST:115:155:766:177",
|
|
||||||
"RugfordsMountainRest:199:114:739:406",
|
|
||||||
"SHIMMERRIDGE:115:173:355:169",
|
|
||||||
"SOUTHERNGATEOUTPOST:113:106:800:284",
|
|
||||||
"THEGRIZZLEDDEN:178:155:321:328",
|
|
||||||
"THETUNDRIDHILLS:135:115:531:328",
|
|
||||||
},
|
|
||||||
["SearingGorge"] = {
|
|
||||||
"BLACKCHARCAVE:264:224:84:371",
|
|
||||||
"DUSTFIREVALLEY:446:355:428:11",
|
|
||||||
"FIREWATCHRIDGE:385:413:95:39",
|
|
||||||
"GRIMSILTDIGSITE:292:210:501:306",
|
|
||||||
"TANNERCAMP:292:215:552:413",
|
|
||||||
"THECAULDRON:414:310:257:178",
|
|
||||||
"THESEAOFCINDERS:345:273:256:395",
|
|
||||||
},
|
|
||||||
["BurningSteppes"] = {
|
|
||||||
"ALTAROFSTORMS:215:210:41:114",
|
|
||||||
"BLACKROCKMOUNTAIN:249:272:178:104",
|
|
||||||
"BLACKROCKPASS:259:299:597:285",
|
|
||||||
"BLACKROCKSTRONGHOLD:232:258:342:120",
|
|
||||||
"DRACODAR:405:309:61:262",
|
|
||||||
"DREADMAULROCK:203:214:717:174",
|
|
||||||
"MORGANSVIGIL:287:265:715:311",
|
|
||||||
"PILLAROFASH:313:261:382:289",
|
|
||||||
"RUINSOFTHAURISSAN:258:275:521:105",
|
|
||||||
"TERRORWINGPATH:271:296:730:52",
|
|
||||||
},
|
|
||||||
["Elwynn"] = {
|
|
||||||
"BRACKWELLPUMPKINPATCH:222:223:592:431",
|
|
||||||
"CRYSTALLAKE:196:192:435:345",
|
|
||||||
"EASTVALELOGGINGCAMP:237:190:713:339",
|
|
||||||
"FARGODEEPMINE:238:230:247:438",
|
|
||||||
"FORESTSEDGE:242:335:132:333",
|
|
||||||
"GOLDSHIRE:219:199:261:280",
|
|
||||||
"JERODSLANDING:206:212:437:445",
|
|
||||||
"NORTHSHIREVALLEY:237:244:390:154",
|
|
||||||
"RIDGEPOINTTOWER:287:207:710:445",
|
|
||||||
"STONECAIRNLAKE:278:230:601:203",
|
|
||||||
"STORMWIND:452:392:21:3",
|
|
||||||
"TOWEROFAZORA:232:226:561:303",
|
|
||||||
},
|
|
||||||
["DeadwindPass"] = {
|
|
||||||
"DEADMANSCROSSING:368:353:257:81",
|
|
||||||
"KARAZHAN:287:234:277:342",
|
|
||||||
"THEVICE:254:257:433:305",
|
|
||||||
},
|
|
||||||
["Duskwood"] = {
|
|
||||||
"ADDLESSTEAD:255:231:67:353",
|
|
||||||
"BRIGHTWOODGROVE:191:315:520:131",
|
|
||||||
"DARKSHIRE:291:259:644:173",
|
|
||||||
"MANORMISTMANTLE:174:150:668:134",
|
|
||||||
"RAVENHILL:166:115:117:317",
|
|
||||||
"RAVENHILLCEMETARY:323:276:99:165",
|
|
||||||
"THEDARKENEDBANK:886:184:105:44",
|
|
||||||
"THEHUSHEDBANK:136:306:29:143",
|
|
||||||
"THEROTTINGORCHARD:231:210:549:380",
|
|
||||||
"THEYORGENFARMSTEAD:211:235:403:393",
|
|
||||||
"TRANQUILGARDENSCEMETARY:204:196:692:363",
|
|
||||||
"TWILIGHTGROVE:327:384:314:99",
|
|
||||||
"VULGOLOGREMOUND:231:266:259:365",
|
|
||||||
},
|
|
||||||
["LochModan"] = {
|
|
||||||
"GRIZZLEPAWRIDGE:262:343:326:325",
|
|
||||||
"IRONBANDSEXCAVATIONSITE:321:294:491:276",
|
|
||||||
"MOGROSHSTRONGHOLD:287:265:558:61",
|
|
||||||
"NORTHGATEPASS:195:273:143:24",
|
|
||||||
"SILVERSTREAMMINE:201:243:247:25",
|
|
||||||
"STONESPLINTERVALLEY:226:255:230:363",
|
|
||||||
"STONEWROUGHTDAM:260:149:354:23",
|
|
||||||
"THEFARSTRIDERLODGE:162:182:741:298",
|
|
||||||
"THELOCH:288:380:367:99",
|
|
||||||
"THELSAMAR:243:205:225:214",
|
|
||||||
"VALLEYOFKINGS:166:224:123:382",
|
|
||||||
},
|
|
||||||
["Redridge"] = {
|
|
||||||
"ALTHERSMILL:222:260:407:134",
|
|
||||||
"GALARDELLVALLEY:234:240:661:168",
|
|
||||||
"LAKEEVERSTILL:522:260:140:249",
|
|
||||||
"LAKERIDGEHIGHWAY:411:274:196:341",
|
|
||||||
"LAKESHIRE:325:179:92:204",
|
|
||||||
"REDRIDGECANYONS:345:232:132:79",
|
|
||||||
"RENDERSCAMP:264:248:284:4",
|
|
||||||
"RENDERSVALLEY:453:248:491:365",
|
|
||||||
"RedwallKeep:162:110:830:466",
|
|
||||||
"STONEWATCH:243:289:507:221",
|
|
||||||
"STONEWATCHFALLS:308:200:601:325",
|
|
||||||
"THREECORNERS:360:337:0:288",
|
|
||||||
},
|
|
||||||
["Stranglethorn"] = {
|
|
||||||
"BALALRUINS:83:65:245:101",
|
|
||||||
"BALIAMAHRUINS:100:133:376:133",
|
|
||||||
"BLOODSAILCOMPOUND:154:163:201:291",
|
|
||||||
"BOOTYBAY:137:125:207:435",
|
|
||||||
"CRYSTALVEINMINE:111:114:350:280",
|
|
||||||
"GROMGOLBASECAMP:101:98:265:137",
|
|
||||||
"JAGUEROISLE:132:107:319:498",
|
|
||||||
"KALAIRUINS:86:89:303:93",
|
|
||||||
"KURZENSCOMPOUND:141:139:394:5",
|
|
||||||
"LAKENAZFERITI:124:120:332:60",
|
|
||||||
"MISTVALEVALLEY:120:116:283:372",
|
|
||||||
"MIZJAHRUINS:93:102:315:133",
|
|
||||||
"MOSHOGGOGREMOUND:123:168:435:96",
|
|
||||||
"NEKMANIWELLSPRING:80:102:215:365",
|
|
||||||
"NESINGWARYSEXPEDITION:128:98:274:29",
|
|
||||||
"REBELCAMP:164:86:289:0",
|
|
||||||
"RUINSOFABORAZ:87:87:356:340",
|
|
||||||
"RUINSOFJUBUWAL:100:105:312:304",
|
|
||||||
"RUINSOFZULKUNDA:113:132:201:8",
|
|
||||||
"RUINSOFZULMAMWE:162:122:397:213",
|
|
||||||
"THEARENA:186:176:241:194",
|
|
||||||
"THEVILEREEF:177:160:159:98",
|
|
||||||
"VENTURECOBASECAMP:96:120:391:66",
|
|
||||||
"WILDSHORE:151:175:237:431",
|
|
||||||
"ZIATAJAIRUINS:127:120:364:231",
|
|
||||||
"ZULGURUB:230:213:489:12",
|
|
||||||
"ZUULDAIARUINS:103:105:160:47",
|
|
||||||
},
|
|
||||||
["SwampOfSorrows"] = {
|
|
||||||
"FALLOWSANCTUARY:348:292:501:0",
|
|
||||||
"ITHARIUSSCAVE:230:232:0:270",
|
|
||||||
"MISTYREEDSTRAND:250:664:752:0",
|
|
||||||
"MISTYVALLEY:211:179:29:148",
|
|
||||||
"POOLOFTEARS:280:256:576:227",
|
|
||||||
"SORROWMURK:199:351:734:128",
|
|
||||||
"SPLINTERSPEARJUNCTION:258:222:138:245",
|
|
||||||
"STAGALBOG:328:238:561:386",
|
|
||||||
"STONARD:343:303:287:244",
|
|
||||||
"SorrowguardKeep:220:174:0:266",
|
|
||||||
"THEHARBORAGE:216:187:182:157",
|
|
||||||
"THESHIFTINGMIRE:303:221:294:118",
|
|
||||||
},
|
|
||||||
["Westfall"] = {
|
|
||||||
"ALEXSTONFARMSTEAD:275:182:220:274",
|
|
||||||
"DEMONTSPLACE:166:155:226:391",
|
|
||||||
"FURLBROWSPUMPKINFARM:186:191:399:24",
|
|
||||||
"GOLDCOASTQUARRY:194:241:234:113",
|
|
||||||
"JANGOLODEMINE:185:187:323:44",
|
|
||||||
"MOONBROOK:208:174:317:349",
|
|
||||||
"SALDEANSFARM:191:184:478:119",
|
|
||||||
"SENTINELHILL:161:210:461:259",
|
|
||||||
"THEDAGGERHILLS:235:149:349:430",
|
|
||||||
"THEDEADACRE:164:213:542:267",
|
|
||||||
"THEDUSTPLAINS:260:204:538:393",
|
|
||||||
"THEJANSENSTEAD:143:183:498:6",
|
|
||||||
"THEMOLSENFARM:199:180:342:161",
|
|
||||||
"WESTFALLLIGHTHOUSE:306:161:171:482",
|
|
||||||
},
|
|
||||||
["Wetlands"] = {
|
|
||||||
"ANGERFANGENCAMPMENT:196:150:364:241",
|
|
||||||
"BLACKCHANNELMARSH:213:173:95:260",
|
|
||||||
"BLUEGILLMARSH:195:165:111:157",
|
|
||||||
"DIREFORGEHILL:233:225:515:128",
|
|
||||||
"DUNMODR:173:147:419:42",
|
|
||||||
"DunAgrath:222:190:97:335",
|
|
||||||
"GRIMBATOL:317:331:623:242",
|
|
||||||
"HawksVigil:170:162:264:353",
|
|
||||||
"IRONBEARDSTOMB:165:156:368:135",
|
|
||||||
"MENETHILHARBOR:156:116:27:321",
|
|
||||||
"MOSSHIDEFEN:215:224:539:277",
|
|
||||||
"RAPTORRIDGE:159:115:640:191",
|
|
||||||
"SALTSPRAYGLEN:170:214:254:58",
|
|
||||||
"SUNDOWNMARSH:265:212:113:100",
|
|
||||||
"THEGREENBELT:153:209:473:143",
|
|
||||||
"THELGANROCK:207:165:478:383",
|
|
||||||
"WHELGARSEXCAVATIONSITE:172:156:264:224",
|
|
||||||
},
|
|
||||||
["Teldrassil"] = {
|
|
||||||
"BANETHILHOLLOW:136:191:392:289",
|
|
||||||
"DARNASSUS:294:252:110:251",
|
|
||||||
"DOLANAAR:170:119:469:327",
|
|
||||||
"GNARLPINEHOLD:230:158:316:417",
|
|
||||||
"LAKEALAMETH:237:163:445:388",
|
|
||||||
"POOLSOFARLITHRIEN:125:180:337:314",
|
|
||||||
"RUTTHERANVILLAGE:110:91:504:548",
|
|
||||||
"SHADOWGLEN:198:201:504:164",
|
|
||||||
"STARBREEZEVILLAGE:153:175:588:303",
|
|
||||||
"THEORACLEGLADE:150:223:279:135",
|
|
||||||
"UrsanHeights:229:154:243:423",
|
|
||||||
"WELLSPRINGLAKE:166:245:383:98",
|
|
||||||
},
|
|
||||||
["Darkshore"] = {
|
|
||||||
"AMETHARAN:163:178:340:323",
|
|
||||||
"AUBERDINE:134:179:323:191",
|
|
||||||
"BASHALARAN:153:171:379:199",
|
|
||||||
"CLIFFSPRINGRIVER:205:161:391:112",
|
|
||||||
"GROVEOFTHEANCIENTS:180:138:314:436",
|
|
||||||
"REMTRAVELSEXCAVATION:148:164:245:504",
|
|
||||||
"RUINSOFMATHYSTRA:176:205:519:3",
|
|
||||||
"THEMASTERSGLAIVE:146:139:346:529",
|
|
||||||
"TOWEROFALTHALAXX:142:159:484:110",
|
|
||||||
},
|
|
||||||
["Ashenvale"] = {
|
|
||||||
"ASTRANAAR:190:173:281:259",
|
|
||||||
"BOUGHSHADOW:140:190:862:157",
|
|
||||||
"FALLENSKYLAKE:219:190:555:433",
|
|
||||||
"FELFIREHILL:241:244:720:349",
|
|
||||||
"FIRESCARSHRINE:153:161:194:332",
|
|
||||||
"ForestSong:162:142:817:232",
|
|
||||||
"IRISLAKE:185:190:401:226",
|
|
||||||
"LAKEFALATHIM:115:181:138:144",
|
|
||||||
"MAESTRASPOST:198:290:216:46",
|
|
||||||
"MYSTRALLAKE:262:228:363:354",
|
|
||||||
"NIGHTRUN:212:244:604:263",
|
|
||||||
"RAYNEWOODRETREAT:165:235:527:243",
|
|
||||||
"SATYRNAAR:163:172:702:230",
|
|
||||||
"THEHOWLINGVALE:196:172:471:147",
|
|
||||||
"THERUINSOFSTARDUST:141:135:268:382",
|
|
||||||
"THESHRINEOFAESSINA:205:179:113:268",
|
|
||||||
"THEZORAMSTRAND:228:235:26:33",
|
|
||||||
"THISTLEFURVILLAGE:243:184:210:164",
|
|
||||||
"WARSONGLUMBERCAMP:185:146:804:319",
|
|
||||||
},
|
|
||||||
["ThousandNeedles"] = {
|
|
||||||
"CAMPETHOK:289:300:7:1",
|
|
||||||
"DARKCLOUDPINNACLE:189:182:267:138",
|
|
||||||
"FREEWINDPOST:193:173:366:273",
|
|
||||||
"HIGHPERCH:178:174:39:164",
|
|
||||||
"SPLITHOOFCRAG:193:175:400:203",
|
|
||||||
"THEGREATLIFT:191:163:213:78",
|
|
||||||
"THESCREECHINGCANYON:240:231:187:206",
|
|
||||||
"THESHIMMERINGFLATS:312:355:612:308",
|
|
||||||
"WINDBREAKCANYON:225:213:501:249",
|
|
||||||
},
|
|
||||||
["StonetalonMountains"] = {
|
|
||||||
"AMANIALOR:504:252:8:5",
|
|
||||||
"BAELHARDUL:357:252:512:257",
|
|
||||||
"BLACKSANDOILFIELDS:504:504:8:5",
|
|
||||||
"BOULDERSLIDERAVINE:90:76:586:547",
|
|
||||||
"BRAMBLETHORNPASS:382:359:512:257",
|
|
||||||
"BROKENCLIFFMINE:252:504:260:5",
|
|
||||||
"CAMPAPARAJE:222:100:670:552",
|
|
||||||
"GRIMTOTEMPOST:146:77:675:519",
|
|
||||||
"MALAKAJIN:137:86:662:562",
|
|
||||||
"MIRKFALLONLAKE:504:504:260:5",
|
|
||||||
"POWDERTOWN:252:252:260:257",
|
|
||||||
"SISHIRCANYON:252:264:512:257",
|
|
||||||
"STONETALONPEAK:258:252:260:5",
|
|
||||||
"SUNROCKRETREAT:504:252:260:257",
|
|
||||||
"THECHARREDVALE:252:308:260:257",
|
|
||||||
"THEEARTHENRING:504:252:260:257",
|
|
||||||
"VENTURECOMPANYCAMP:252:504:260:5",
|
|
||||||
"WEBWINDERPATH:256:324:512:256",
|
|
||||||
"WINDSHEARCRAG:256:256:512:256",
|
|
||||||
},
|
|
||||||
["Desolace"] = {
|
|
||||||
"ETHELRETHOR:189:237:318:68",
|
|
||||||
"GELKISVILLAGE:181:235:300:433",
|
|
||||||
"KODOGRAVEYARD:253:237:396:251",
|
|
||||||
"KOLKARVILLAGE:206:208:615:221",
|
|
||||||
"KORMEKSHUT:156:147:562:187",
|
|
||||||
"MAGRAMVILLAGE:182:272:606:373",
|
|
||||||
"MANNOROCCOVEN:270:271:408:385",
|
|
||||||
"NIJELSPOINT:188:246:561:0",
|
|
||||||
"RANAZJARISLE:88:89:248:11",
|
|
||||||
"SARGERON:274:237:632:38",
|
|
||||||
"SHADOWBREAKRAVINE:190:181:698:454",
|
|
||||||
"SHADOWPREYVILLAGE:215:218:175:395",
|
|
||||||
"TETHRISARAN:185:137:440:0",
|
|
||||||
"THUNDERAXEFORTRESS:174:207:455:108",
|
|
||||||
"VALLEYOFSPEARS:234:274:217:221",
|
|
||||||
},
|
|
||||||
["Feralas"] = {
|
|
||||||
"CAMPMOJACHE:146:148:694:238",
|
|
||||||
"ChimaeraRoostVale:106:150:785:321",
|
|
||||||
"DIREMAUL:214:180:461:208",
|
|
||||||
"DREAMBOUGH:141:122:459:0",
|
|
||||||
"FERALSCARVALE:103:104:491:335",
|
|
||||||
"FRAYFEATHERHIGHLANDS:101:163:485:391",
|
|
||||||
"GORDUNNIOUTPOST:154:128:697:148",
|
|
||||||
"GRIMTOTEMCOMPOUND:110:186:630:172",
|
|
||||||
"ISLEOFDREAD:205:285:197:381",
|
|
||||||
"LOWERWILDS:214:152:756:204",
|
|
||||||
"ONEIROS:101:103:499:74",
|
|
||||||
"RUINSOFISILDIEN:179:241:547:326",
|
|
||||||
"RUINSOFRAVENWIND:178:149:310:0",
|
|
||||||
"SARDORISLE:167:168:216:241",
|
|
||||||
"THEFORGOTTENCOAST:132:316:409:258",
|
|
||||||
"THETWINCOLOSSALS:278:235:323:78",
|
|
||||||
"THEWRITHINGDEEP:214:205:625:305",
|
|
||||||
},
|
|
||||||
["Dustwallow"] = {
|
|
||||||
"ALCAZISLAND:176:179:671:29",
|
|
||||||
"BACKBAYWETLANDS:384:243:248:196",
|
|
||||||
"BRACKENWALLVILLAGE:264:264:239:2",
|
|
||||||
"THEDENOFFLAME:246:235:264:320",
|
|
||||||
"THERAMOREISLE:214:187:542:232",
|
|
||||||
"THEWYRMBOG:263:229:372:387",
|
|
||||||
"WITCHHILL:230:311:431:1",
|
|
||||||
"WesthavenHollow:166:149:603:428",
|
|
||||||
},
|
|
||||||
["Tanaris"] = {
|
|
||||||
"ABYSSALSANDS:194:159:376:207",
|
|
||||||
"BROKENPILLAR:93:165:481:243",
|
|
||||||
"CAVERNSOFTIME:139:132:567:262",
|
|
||||||
"DUNEMAULCOMPOUND:186:127:337:298",
|
|
||||||
"EASTMOONRUINS:143:130:405:355",
|
|
||||||
"GADGETZAN:156:149:430:102",
|
|
||||||
"LANDSENDBEACH:184:148:456:514",
|
|
||||||
"LOSTRIGGERCOVE:141:173:635:230",
|
|
||||||
"NOONSHADERUINS:129:191:530:43",
|
|
||||||
"SANDSORROWWATCH:175:157:311:111",
|
|
||||||
"SOUTHBREAKSHORE:192:151:510:304",
|
|
||||||
"SOUTHMOONRUINS:185:196:324:366",
|
|
||||||
"STEAMWHEEDLEPORT:136:129:599:86",
|
|
||||||
"SlickwickOilRig:237:181:129:436",
|
|
||||||
"THEGAPINGCHASM:198:188:458:380",
|
|
||||||
"THENOXIOUSLAIR:155:180:265:209",
|
|
||||||
"THISTLESHRUBVALLEY:166:234:217:294",
|
|
||||||
"VALLEYOFTHEWATCHERS:125:115:311:470",
|
|
||||||
"WATERSPRINGFIELD:145:164:516:177",
|
|
||||||
"ZALASHJISDEN:90:127:619:157",
|
|
||||||
"ZULFARRAK:191:166:265:5",
|
|
||||||
},
|
|
||||||
["Aszhara"] = {
|
|
||||||
"BAYOFSTORMS:257:285:486:208",
|
|
||||||
"BITTERREACHES:231:173:651:46",
|
|
||||||
"FORLORNRIDGE:210:247:198:373",
|
|
||||||
"HALDARRENCAMPMENT:191:138:83:339",
|
|
||||||
"JAGGEDREEF:556:153:373:9",
|
|
||||||
"LAKEMENNAR:301:184:302:437",
|
|
||||||
"LEGASHENCAMPMENT:224:131:484:49",
|
|
||||||
"RAVENCRESTMONUMENT:227:115:559:506",
|
|
||||||
"RUINSOFELDARATH:251:268:246:228",
|
|
||||||
"SHADOWSONGSHRINE:213:170:43:428",
|
|
||||||
"SOUTHRIDGEBEACH:355:207:397:360",
|
|
||||||
"TEMPLEOFARKKORAN:177:187:689:160",
|
|
||||||
"THALASSIANBASECAMP:224:144:507:126",
|
|
||||||
"THERUINEDREACHES:384:116:403:549",
|
|
||||||
"THESHATTEREDSTRAND:148:199:412:202",
|
|
||||||
"TIMBERMAWHOLD:209:194:258:175",
|
|
||||||
"TOWEROFELDARA:107:145:824:114",
|
|
||||||
"URSOLAN:219:212:327:94",
|
|
||||||
"VALORMOK:201:158:93:236",
|
|
||||||
},
|
|
||||||
["Felwood"] = {
|
|
||||||
"BLOODVENOMFALLS:225:132:297:269",
|
|
||||||
"DEADWOODVILLAGE:162:129:415:539",
|
|
||||||
"EMERALDSANCTUARY:171:150:411:436",
|
|
||||||
"FELPAWVILLAGE:224:138:489:0",
|
|
||||||
"IRONTREEWOODS:200:203:426:60",
|
|
||||||
"JADEFIREGLEN:151:145:339:469",
|
|
||||||
"JADEFIRERUN:181:159:338:35",
|
|
||||||
"JAEDENAR:236:122:275:333",
|
|
||||||
"MORLOSARAN:129:151:503:515",
|
|
||||||
"RUINSOFCONSTELLAS:224:142:303:387",
|
|
||||||
"SHATTERSCARVALE:218:186:315:130",
|
|
||||||
"TALONBRANCHGLADE:145:130:554:97",
|
|
||||||
},
|
|
||||||
["UngoroCrater"] = {
|
|
||||||
"FIREPLUMERIDGE:277:258:377:185",
|
|
||||||
"GOLAKKAHOTSPRINGS:299:334:133:158",
|
|
||||||
"IRONSTONEPLATEAU:276:281:588:69",
|
|
||||||
"LAKKARITARPITS:553:255:170:13",
|
|
||||||
"TERRORRUN:333:275:166:375",
|
|
||||||
"THEMARSHLANDS:295:341:568:247",
|
|
||||||
"THESLITHERINGSCAR:326:260:378:403",
|
|
||||||
},
|
|
||||||
["Moonglade"] = {
|
|
||||||
"LAKEELUNEARA:530:484:256:101",
|
|
||||||
},
|
|
||||||
["Silithus"] = {
|
|
||||||
"HIVEASHI:431:276:305:34",
|
|
||||||
"HIVEREGAL:469:335:262:333",
|
|
||||||
"HIVEZORA:343:424:117:188",
|
|
||||||
"SOUTHWINDVILLAGE:346:348:519:83",
|
|
||||||
"THECRYSTALVALE:285:274:121:31",
|
|
||||||
"THESCARABWALL:271:145:125:523",
|
|
||||||
"TWILIGHTBASECAMP:297:238:355:206",
|
|
||||||
},
|
|
||||||
["Winterspring"] = {
|
|
||||||
"DARKWHISPERGORGE:247:191:452:447",
|
|
||||||
"EVERLOOK:151:189:516:114",
|
|
||||||
"FROSTFIREHOTSPRINGS:226:124:231:180",
|
|
||||||
"FROSTSABERROCK:240:172:375:11",
|
|
||||||
"FROSTWHISPERGORGE:184:144:531:383",
|
|
||||||
"ICETHISTLEHILLS:116:155:617:247",
|
|
||||||
"LAKEKELTHERIL:203:176:409:205",
|
|
||||||
"MAZTHORIL:174:169:499:265",
|
|
||||||
"OWLWINGTHICKET:149:127:600:348",
|
|
||||||
"STARFALLVILLAGE:174:148:399:143",
|
|
||||||
"THEHIDDENGROVE:162:174:562:33",
|
|
||||||
"TIMBERMAWPOST:223:112:235:248",
|
|
||||||
"WINTERFALLVILLAGE:133:120:622:163",
|
|
||||||
},
|
|
||||||
["AlteracValley"] = {
|
|
||||||
"DUNBALDAR:254:228:356:18",
|
|
||||||
"FROSTWOLFKEEP:220:278:408:382",
|
|
||||||
"ICEBLOODGARRISON:286:288:343:179",
|
|
||||||
},
|
|
||||||
["Hyjal"] = {
|
|
||||||
"BARKSKINPLATEAU:207:167:390:297",
|
|
||||||
"BARKSKINVILLAGE:502:293:417:346",
|
|
||||||
"BLEAKHOLLOWCRATER:297:335:401:20",
|
|
||||||
"CIRCLEOFPOWER:277:331:203:63",
|
|
||||||
"DARKHOLLOWPASS:214:237:342:389",
|
|
||||||
"NORDANAAR:139:146:778:118",
|
|
||||||
"NORDRASSILGLADE:418:408:578:0",
|
|
||||||
"RUINSOFTELENNAS:165:193:141:236",
|
|
||||||
"THEEMERALDGATEWAY:309:244:109:353",
|
|
||||||
"ZULHATHA:191:210:3:194",
|
|
||||||
},
|
|
||||||
["Lapidis"] = {
|
|
||||||
"BRIGHTCOAST:298:213:237:246",
|
|
||||||
"CAELANSREST:147:111:517:230",
|
|
||||||
"CROWNISLAND:140:95:512:33",
|
|
||||||
"GORDOSHHEIGHTS:253:243:256:89",
|
|
||||||
"HAZURRIGLADE:87:82:486:306",
|
|
||||||
"SHANKSREEF:207:90:446:109",
|
|
||||||
"THEROCK:74:72:687:149",
|
|
||||||
"TOWEROFLAPIDIS:203:118:487:175",
|
|
||||||
"WALLOWINGCOAST:240:184:505:326",
|
|
||||||
"ZULHAZU:227:178:348:407",
|
|
||||||
},
|
|
||||||
["Gillijim"] = {
|
|
||||||
"DEEPTIDESANCTUM:204:117:199:512",
|
|
||||||
"DISTILLERYISLE:90:69:234:216",
|
|
||||||
"FAELONSFOLLY:108:103:331:304",
|
|
||||||
"GILLIJIMSTRAND:108:324:641:160",
|
|
||||||
"JADEMINE:141:149:500:256",
|
|
||||||
"KALKORPOINT:123:115:421:210",
|
|
||||||
"KAZONISLAND:194:113:432:51",
|
|
||||||
"MAULOGGPOST:137:227:512:401",
|
|
||||||
"MAULOGGREFUGE:231:132:615:465",
|
|
||||||
"RUINSOFZULRAZAR:215:136:369:384",
|
|
||||||
"SILVERCOAST:245:184:311:386",
|
|
||||||
"SILVERSANDBAR:47:128:256:398",
|
|
||||||
"SOUTHSEASANDBAR:125:172:178:63",
|
|
||||||
"TANGLEWOOD:135:188:576:297",
|
|
||||||
"ZULRAZAR:137:168:375:282",
|
|
||||||
},
|
|
||||||
["TelAbim"] = {
|
|
||||||
"BIXXLESSTOREHOUSE:300:127:368:178",
|
|
||||||
"HIGHVALERISE:191:187:468:248",
|
|
||||||
"TAZZOSSHACK:229:232:453:391",
|
|
||||||
"TELCOBASECAMP:184:183:342:440",
|
|
||||||
"THEDERELICTCAMP:165:205:364:273",
|
|
||||||
"THEJAGGEDISLES:313:256:385:16",
|
|
||||||
},
|
|
||||||
["Gilneas"] = {
|
|
||||||
"BLACKTHORNSCAMP:160:163:32:171",
|
|
||||||
"BROLOKMOUND:140:120:467:349",
|
|
||||||
"DAWNSTONEMINE:130:144:292:155",
|
|
||||||
"FREYSHEARKEEP:72:70:624:405",
|
|
||||||
"GILNEASCITY:295:242:89:105",
|
|
||||||
"GLAYMORESTEAD:140:127:483:129",
|
|
||||||
"GREYMANESWATCH:119:158:580:311",
|
|
||||||
"HOLLOWWEBCEMETARY:180:167:215:395",
|
|
||||||
"HOLLOWWEBWOODS:171:118:341:452",
|
|
||||||
"NORTHGATETOWER:130:137:397:172",
|
|
||||||
"OLDROCKPASS:155:165:290:37",
|
|
||||||
"RAVENSHIRE:194:237:472:431",
|
|
||||||
"RAVENWOODKEEP:253:174:496:494",
|
|
||||||
"ROSEWICKPLANTATION:134:140:331:155",
|
|
||||||
"RUINSOFGREYSHIRE:192:144:230:260",
|
|
||||||
"SHADEMORETAVERN:117:120:279:336",
|
|
||||||
"SOUTHMIREORCHARD:202:133:302:354",
|
|
||||||
"STILLWARDCHURCH:213:166:471:220",
|
|
||||||
"THEDRYROCKMINE:129:127:145:262",
|
|
||||||
"THEDRYROCKPIT:230:217:69:295",
|
|
||||||
"THEGREYMANEWALL:131:173:412:48",
|
|
||||||
"THEOVERGROWNACRE:134:154:390:269",
|
|
||||||
},
|
|
||||||
["Icepoint"] = {
|
|
||||||
"KANEQNUUN:512:430:237:129",
|
|
||||||
},
|
|
||||||
["BlackstoneIsland"] = {
|
|
||||||
"BLACKASHCOALPITS:303:474:209:178",
|
|
||||||
"BLACKASHMINE:251:204:397:222",
|
|
||||||
"GAZZIKSWORKSHOP:329:247:439:403",
|
|
||||||
"RUSTGATELUMBERYARD:217:245:551:241",
|
|
||||||
"RUSTGATERIDGE:396:226:372:360",
|
|
||||||
"THEWATERHOLE:386:239:382:43",
|
|
||||||
"VENTURECOSLUMS:270:192:498:129",
|
|
||||||
},
|
|
||||||
["ThalassianHighlands"] = {
|
|
||||||
"ALAHTHALAS:470:276:429:38",
|
|
||||||
"ANASTERIANPARK:229:219:385:256",
|
|
||||||
"BRINTHILIEN:180:211:395:450",
|
|
||||||
"FELSTRIDERRETREAT:201:207:165:428",
|
|
||||||
"ISLEOFETERNALAUTUMN:204:167:236:117",
|
|
||||||
"RUINSOFNASHALARAN:249:266:36:151",
|
|
||||||
"SILVERSUNMINE:208:189:288:373",
|
|
||||||
"THEFARSTRIDE:230:199:212:255",
|
|
||||||
"THELASTRUNESTONE:179:203:507:379",
|
|
||||||
},
|
|
||||||
["GrimReaches"] = {
|
|
||||||
"BAGGOTHSRAMPART:112:113:399:238",
|
|
||||||
"BARLEYCRESTFARMSTEAD:116:88:499:222",
|
|
||||||
"BRANGARSFOLLY:108:123:568:33",
|
|
||||||
"DUNKITHAS:137:95:470:329",
|
|
||||||
"EASTRIDGEOUTPOST:166:107:374:165",
|
|
||||||
"GETHKAR:118:124:444:84",
|
|
||||||
"GROLDANSEXCAVATION:125:117:567:231",
|
|
||||||
"LAKEKITHAS:217:150:481:270",
|
|
||||||
"RUINSOFSTOLGAZKEEP:134:146:366:53",
|
|
||||||
"SALGAZMINES:150:119:535:380",
|
|
||||||
"SHATTERBLADEPOST:186:130:512:126",
|
|
||||||
"SLATEBEARDSFORGE:136:99:457:404",
|
|
||||||
"THEGRIMHOLLOW:288:200:396:463",
|
|
||||||
"THEHIGHPASS:97:141:409:315",
|
|
||||||
"ZARMGETHPOINT:143:76:405:16",
|
|
||||||
"ZARMGETHSTRONGHOLD:120:150:487:17",
|
|
||||||
},
|
|
||||||
["Balor"] = {
|
|
||||||
"BILGERATCOMPOUND:174:141:323:76",
|
|
||||||
"CROAKINGPLATEAU:371:154:397:201",
|
|
||||||
"GRAHANESTATE:93:116:306:392",
|
|
||||||
"GULLWINGWRECKAGE:110:105:221:34",
|
|
||||||
"LANGSTONORCHARD:102:129:410:346",
|
|
||||||
"RUINSOFBREEZEHAVEN:163:141:450:256",
|
|
||||||
"SCURRYINGTHICKET:144:158:283:161",
|
|
||||||
"SIOUTPOST:175:232:597:389",
|
|
||||||
"SORROWMORELAKE:174:140:303:277",
|
|
||||||
"STORMBREAKERPOINT:243:197:583:212",
|
|
||||||
"STORMREAVERSPIRE:151:119:491:429",
|
|
||||||
"STORMWROUGHTCASTLE:202:166:458:332",
|
|
||||||
"TREACHEROUSCRAGS:243:171:381:457",
|
|
||||||
"VANDERFARMSTEAD:146:140:330:372",
|
|
||||||
"WINDROCKCLIFFS:192:279:256:303",
|
|
||||||
},
|
|
||||||
["Northwind"] = {
|
|
||||||
"ABBEYGARDENS:250:224:512:33",
|
|
||||||
"AMBERSHIRE:234:215:334:278",
|
|
||||||
"AMBERWOODKEEP:243:205:187:308",
|
|
||||||
"BLACKROCKBREACH:255:201:721:222",
|
|
||||||
"BRISTLEWHISKERCAVERN:197:185:568:232",
|
|
||||||
"CINDERFALLPASS:229:229:733:348",
|
|
||||||
"CRAWFORDWINERY:160:222:513:285",
|
|
||||||
"CRYSTALFALLS:320:205:627:464",
|
|
||||||
"GRIMMENLAKE:218:210:550:352",
|
|
||||||
"MERCHANTSHIGHROAD:353:249:256:420",
|
|
||||||
"NORTHRIDGEPOINT:298:314:349:31",
|
|
||||||
"NORTHWINDLOGGINGCAMP:224:185:258:171",
|
|
||||||
"RUINSOFBIRKHAVEN:180:208:645:116",
|
|
||||||
"SHERWOODQUARRY:293:287:702:1",
|
|
||||||
"STILLHEARTPORT:174:155:116:217",
|
|
||||||
"TOWEROFMAGILOU:181:223:189:169",
|
|
||||||
"WITCHCOVEN:147:162:257:81",
|
|
||||||
},
|
|
||||||
["Moonwhisper"] = {
|
|
||||||
"AnShesRespite:170:120:398:81",
|
|
||||||
"AncestralGrounds:164:82:295:88",
|
|
||||||
"BlackrootHold:162:137:495:465",
|
|
||||||
"BlackrootVillage:224:143:411:525",
|
|
||||||
"FoulheartSanctum:157:149:496:232",
|
|
||||||
"GroveOfTheMoon:152:146:464:347",
|
|
||||||
"LunarclawDen:84:60:674:376",
|
|
||||||
"MarasEthil:96:94:640:417",
|
|
||||||
"MoonhoofRetreat:172:144:419:167",
|
|
||||||
"MoonhoofVillage:163:157:570:188",
|
|
||||||
"MoonsilkHollow:125:114:577:458",
|
|
||||||
"MoroGaiVillage:133:127:571:372",
|
|
||||||
"NarvalisPoint:162:139:503:118",
|
|
||||||
"RuinsOfNendis:183:130:584:275",
|
|
||||||
"StarshardCradle:122:109:334:121",
|
|
||||||
"Tyrandas:158:169:580:61",
|
|
||||||
"VysnagosasRest:163:102:420:8",
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
-- add turtle-wow sell values
|
-- add turtle-wow sell values
|
||||||
pfSellData = {
|
pfSellData = {
|
||||||
|
|||||||
+2
-3
@@ -352,8 +352,7 @@ pfUI:RegisterModule("unitxp", function ()
|
|||||||
end
|
end
|
||||||
|
|
||||||
-- Debug command to test UnitXP indicators
|
-- Debug command to test UnitXP indicators
|
||||||
_G.SLASH_PFUNITXP1 = "/pfunitxp"
|
pfUI.api.RegisterSlashCommand("PFUNITXP", { "/pfunitxp" }, function()
|
||||||
SlashCmdList["PFUNITXP"] = function()
|
|
||||||
local chat = DEFAULT_CHAT_FRAME
|
local chat = DEFAULT_CHAT_FRAME
|
||||||
chat:AddMessage("|cff33ffccpfUI|r: UnitXP Indicator Debug")
|
chat:AddMessage("|cff33ffccpfUI|r: UnitXP Indicator Debug")
|
||||||
|
|
||||||
@@ -387,5 +386,5 @@ pfUI:RegisterModule("unitxp", function ()
|
|||||||
else
|
else
|
||||||
chat:AddMessage(" Target frame: |cffff0000NOT found|r")
|
chat:AddMessage(" Target frame: |cffff0000NOT found|r")
|
||||||
end
|
end
|
||||||
end
|
end, true)
|
||||||
end)
|
end)
|
||||||
+10
-25
@@ -4,8 +4,6 @@ pfUI:RegisterModule("unusable", function ()
|
|||||||
|
|
||||||
pfUI.unusable = {}
|
pfUI.unusable = {}
|
||||||
|
|
||||||
local scanner = libtipscan:GetScanner("unusable")
|
|
||||||
local durability = string.gsub(DURABILITY_TEMPLATE, "%%[^%s]+", "(.+)")
|
|
||||||
local r, g, b, a = strsplit(",", C.appearance.bags.unusable_color)
|
local r, g, b, a = strsplit(",", C.appearance.bags.unusable_color)
|
||||||
|
|
||||||
function pfUI.unusable:UpdateSlot(bag, slot)
|
function pfUI.unusable:UpdateSlot(bag, slot)
|
||||||
@@ -13,40 +11,27 @@ pfUI:RegisterModule("unusable", function ()
|
|||||||
if not pfUI.bags[bag] then return end
|
if not pfUI.bags[bag] then return end
|
||||||
if not pfUI.bags[bag].slots[slot] then return end
|
if not pfUI.bags[bag].slots[slot] then return end
|
||||||
|
|
||||||
-- add button shortcuts
|
|
||||||
local frame = pfUI.bags[bag].slots[slot].frame
|
|
||||||
local name = frame:GetName()
|
|
||||||
|
|
||||||
-- return on empty buttons
|
-- return on empty buttons
|
||||||
|
local frame = pfUI.bags[bag].slots[slot].frame
|
||||||
if not frame.hasItem then return end
|
if not frame.hasItem then return end
|
||||||
|
|
||||||
-- set the proper tooltip method
|
-- C_PlayerInfo.CanUseItem is the "is this red in the tooltip" gate:
|
||||||
if bag == BANK_CONTAINER then
|
-- proficiency, required level, class/race, skill/spell/rep. It checks
|
||||||
scanner:SetInventoryItem("player", 39+slot)
|
-- *requirements* only, so a broken (0-durability) item still reads as
|
||||||
else
|
-- usable -- no durability-line exclusion needed like the old scanner.
|
||||||
scanner:SetBagItem(bag, slot)
|
local itemID = C_Container.GetContainerItemID(bag, slot)
|
||||||
|
if itemID and not C_PlayerInfo.CanUseItem(itemID) then
|
||||||
|
_G.SetItemButtonTextureVertexColor(frame, r, g, b, a)
|
||||||
end
|
end
|
||||||
|
|
||||||
-- check for red color in tooltip
|
|
||||||
local red = scanner:Color(RED_FONT_COLOR)
|
|
||||||
if not red then return end
|
|
||||||
|
|
||||||
-- check for broken items
|
|
||||||
local left = scanner:Line(red)
|
|
||||||
local _, _, broken = string.find(left, durability, 1)
|
|
||||||
if broken then return end
|
|
||||||
|
|
||||||
-- update button vertex color
|
|
||||||
_G.SetItemButtonTextureVertexColor(frame, r, g, b, a)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
-- update on regular pfUI button updates
|
-- update on regular pfUI button updates
|
||||||
pfUI.hooksecurefunc(pfUI.bag, "UpdateSlot", function(self, bag, slot)
|
hooksecurefunc(pfUI.bag, "UpdateSlot", function(self, bag, slot)
|
||||||
pfUI.unusable:UpdateSlot(bag, slot)
|
pfUI.unusable:UpdateSlot(bag, slot)
|
||||||
end)
|
end)
|
||||||
|
|
||||||
-- update on bank frame itemlock updates
|
-- update on bank frame itemlock updates
|
||||||
pfUI.hooksecurefunc("BankFrameItemButton_UpdateLock", function()
|
hooksecurefunc("BankFrameItemButton_UpdateLock", function()
|
||||||
pfUI.unusable:UpdateSlot(-1, this:GetID())
|
pfUI.unusable:UpdateSlot(-1, this:GetID())
|
||||||
end)
|
end)
|
||||||
end)
|
end)
|
||||||
|
|||||||
@@ -5,11 +5,7 @@ end
|
|||||||
|
|
||||||
SLASH_PFUI1 = '/pfui'
|
SLASH_PFUI1 = '/pfui'
|
||||||
function SlashCmdList.PFUI(msg, editbox)
|
function SlashCmdList.PFUI(msg, editbox)
|
||||||
if pfUI.gui:IsShown() then
|
pfUI.gui:SetShown(not pfUI.gui:IsShown())
|
||||||
pfUI.gui:Hide()
|
|
||||||
else
|
|
||||||
pfUI.gui:Show()
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
SLASH_GM1, SLASH_GM2 = '/gm', '/support'
|
SLASH_GM1, SLASH_GM2 = '/gm', '/support'
|
||||||
@@ -27,7 +23,7 @@ do
|
|||||||
-- ClassicAPI dependency check.
|
-- ClassicAPI dependency check.
|
||||||
-- pfUI relies pervasively on the modern C_* / SuperWoW / nameplate / focus
|
-- pfUI relies pervasively on the modern C_* / SuperWoW / nameplate / focus
|
||||||
-- API surface that ClassicAPI polyfills, so presence is required.
|
-- API surface that ClassicAPI polyfills, so presence is required.
|
||||||
local PFUI_CLASSIC_API_MIN = 10511 -- (X*10000 + Y*100 + Z)
|
local PFUI_CLASSIC_API_MIN = 10605 -- (X*10000 + Y*100 + Z)
|
||||||
local PFUI_CLASSIC_API_LATEST = PFUI_CLASSIC_API_MIN
|
local PFUI_CLASSIC_API_LATEST = PFUI_CLASSIC_API_MIN
|
||||||
local PFUI_CLASSIC_API_WEBSITE = "https://github.com/brues-code/ClassicAPI"
|
local PFUI_CLASSIC_API_WEBSITE = "https://github.com/brues-code/ClassicAPI"
|
||||||
local PFUI_CLASSIC_API_LATEST_URL = PFUI_CLASSIC_API_WEBSITE .. "/releases/latest"
|
local PFUI_CLASSIC_API_LATEST_URL = PFUI_CLASSIC_API_WEBSITE .. "/releases/latest"
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ pfUI:RegisterSkin("Auctionhouse", function ()
|
|||||||
SkinArrowButton(AuctionsNextPageButton, "right", 18)
|
SkinArrowButton(AuctionsNextPageButton, "right", 18)
|
||||||
end
|
end
|
||||||
|
|
||||||
pfUI.hooksecurefunc("AuctionFrame_OnShow", function()
|
hooksecurefunc("AuctionFrame_OnShow", function()
|
||||||
AuctionFrame:ClearAllPoints()
|
AuctionFrame:ClearAllPoints()
|
||||||
AuctionFrame:SetPoint("TOPLEFT", 10, -104)
|
AuctionFrame:SetPoint("TOPLEFT", 10, -104)
|
||||||
end)
|
end)
|
||||||
@@ -76,7 +76,7 @@ pfUI:RegisterSkin("Auctionhouse", function ()
|
|||||||
item:SetPoint("LEFT", 2, 0)
|
item:SetPoint("LEFT", 2, 0)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
pfUI.hooksecurefunc("AuctionFrameBrowse_Update", function()
|
hooksecurefunc("AuctionFrameBrowse_Update", function()
|
||||||
for i = 1, NUM_BROWSE_TO_DISPLAY do
|
for i = 1, NUM_BROWSE_TO_DISPLAY do
|
||||||
HandleIcon(_G["BrowseButton"..i.."Item"], _G["BrowseButton"..i.."ItemIconTexture"])
|
HandleIcon(_G["BrowseButton"..i.."Item"], _G["BrowseButton"..i.."ItemIconTexture"])
|
||||||
end
|
end
|
||||||
@@ -145,7 +145,7 @@ pfUI:RegisterSkin("Auctionhouse", function ()
|
|||||||
item:ClearAllPoints()
|
item:ClearAllPoints()
|
||||||
item:SetPoint("LEFT", 2, 0)
|
item:SetPoint("LEFT", 2, 0)
|
||||||
end
|
end
|
||||||
pfUI.hooksecurefunc("AuctionFrameBid_Update", function()
|
hooksecurefunc("AuctionFrameBid_Update", function()
|
||||||
for i = 1, NUM_BIDS_TO_DISPLAY do
|
for i = 1, NUM_BIDS_TO_DISPLAY do
|
||||||
HandleIcon(_G["BidButton"..i.."Item"], _G["BidButton"..i.."ItemIconTexture"])
|
HandleIcon(_G["BidButton"..i.."Item"], _G["BidButton"..i.."ItemIconTexture"])
|
||||||
end
|
end
|
||||||
@@ -191,14 +191,14 @@ pfUI:RegisterSkin("Auctionhouse", function ()
|
|||||||
item:ClearAllPoints()
|
item:ClearAllPoints()
|
||||||
item:SetPoint("LEFT", 2, 0)
|
item:SetPoint("LEFT", 2, 0)
|
||||||
end
|
end
|
||||||
pfUI.hooksecurefunc("AuctionFrameAuctions_Update", function()
|
hooksecurefunc("AuctionFrameAuctions_Update", function()
|
||||||
for i = 1, NUM_AUCTIONS_TO_DISPLAY do
|
for i = 1, NUM_AUCTIONS_TO_DISPLAY do
|
||||||
HandleIcon(_G["AuctionsButton"..i.."Item"], _G["AuctionsButton"..i.."ItemIconTexture"])
|
HandleIcon(_G["AuctionsButton"..i.."Item"], _G["AuctionsButton"..i.."ItemIconTexture"])
|
||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
|
|
||||||
SkinButton(AuctionsItemButton)
|
SkinButton(AuctionsItemButton)
|
||||||
pfUI.hooksecurefunc("AuctionSellItemButton_OnEvent", function()
|
hooksecurefunc("AuctionSellItemButton_OnEvent", function()
|
||||||
if event ~= "NEW_AUCTION_UPDATE" then return end
|
if event ~= "NEW_AUCTION_UPDATE" then return end
|
||||||
HandleIcon(AuctionsItemButton, AuctionsItemButton:GetNormalTexture())
|
HandleIcon(AuctionsItemButton, AuctionsItemButton:GetNormalTexture())
|
||||||
end)
|
end)
|
||||||
|
|||||||
@@ -15,11 +15,11 @@ pfUI:RegisterSkin("Battlefield Minimap", function ()
|
|||||||
BattlefieldMinimapTabText:ClearAllPoints()
|
BattlefieldMinimapTabText:ClearAllPoints()
|
||||||
BattlefieldMinimapTabText:SetPoint("CENTER", 0, 0)
|
BattlefieldMinimapTabText:SetPoint("CENTER", 0, 0)
|
||||||
|
|
||||||
HookScript(BattlefieldMinimap, "OnShow", function()
|
BattlefieldMinimap:HookScript("OnShow", function()
|
||||||
BattlefieldMinimapTab:Hide()
|
BattlefieldMinimapTab:Hide()
|
||||||
end)
|
end)
|
||||||
|
|
||||||
pfUI.hooksecurefunc("BattlefieldMinimap_ShowOpacity", function()
|
hooksecurefunc("BattlefieldMinimap_ShowOpacity", function()
|
||||||
OpacityFrame:ClearAllPoints()
|
OpacityFrame:ClearAllPoints()
|
||||||
OpacityFrame:SetPoint("TOPRIGHT", "BattlefieldMinimap", "TOPLEFT", -2*border, 0)
|
OpacityFrame:SetPoint("TOPRIGHT", "BattlefieldMinimap", "TOPLEFT", -2*border, 0)
|
||||||
end)
|
end)
|
||||||
|
|||||||
@@ -4,7 +4,25 @@ pfUI:RegisterSkin("Character", function ()
|
|||||||
|
|
||||||
-- Honor Tab
|
-- Honor Tab
|
||||||
StripTextures(HonorFrame)
|
StripTextures(HonorFrame)
|
||||||
StripTextures(ArenaFrame)
|
if ArenaFrame then
|
||||||
|
StripTextures(ArenaFrame)
|
||||||
|
for _, frame in pairs({'Arena', 'Honor'}) do
|
||||||
|
for i = 1, 2 do
|
||||||
|
local tab = _G[frame.."FrameTab"..i]
|
||||||
|
local lastTab = _G[frame.."FrameTab"..(i-1)]
|
||||||
|
if lastTab and lastTab:IsShown() then
|
||||||
|
tab:ClearAllPoints()
|
||||||
|
tab:SetPoint("LEFT", lastTab, "RIGHT", border*2 + 1, 0)
|
||||||
|
end
|
||||||
|
SkinTab(tab)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
for i = 1, 3 do
|
||||||
|
local team = _G["ArenaFrameTeam"..i]
|
||||||
|
StripTextures(team)
|
||||||
|
CreateBackdrop(team)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
HonorFrameProgressBar:SetStatusBarTexture(pfUI.media["img:bar"])
|
HonorFrameProgressBar:SetStatusBarTexture(pfUI.media["img:bar"])
|
||||||
CreateBackdrop(HonorFrameProgressBar)
|
CreateBackdrop(HonorFrameProgressBar)
|
||||||
@@ -136,18 +154,18 @@ pfUI:RegisterSkin("Character", function ()
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
pfUI.hooksecurefunc("CharacterFrame_OnShow", function()
|
hooksecurefunc("CharacterFrame_OnShow", function()
|
||||||
RefreshCharacterSlots()
|
RefreshCharacterSlots()
|
||||||
RefreshPetPosition()
|
RefreshPetPosition()
|
||||||
end)
|
end)
|
||||||
|
|
||||||
pfUI.hooksecurefunc("PaperDollItemSlotButton_Update", function()
|
hooksecurefunc("PaperDollItemSlotButton_Update", function()
|
||||||
if this:GetParent() == PaperDollFrame then
|
if this:GetParent() == PaperDollFrame then
|
||||||
RefreshCharacterSlot(this)
|
RefreshCharacterSlot(this)
|
||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
|
|
||||||
pfUI.hooksecurefunc("PetTab_Update", RefreshPetPosition)
|
hooksecurefunc("PetTab_Update", RefreshPetPosition)
|
||||||
|
|
||||||
StripTextures(PaperDollFrame)
|
StripTextures(PaperDollFrame)
|
||||||
StripTextures(CharacterAttributesFrame)
|
StripTextures(CharacterAttributesFrame)
|
||||||
@@ -270,7 +288,7 @@ pfUI:RegisterSkin("Character", function ()
|
|||||||
-- the FactionStanding text from `bar.standingText` on mouseout, so we
|
-- the FactionStanding text from `bar.standingText` on mouseout, so we
|
||||||
-- stash our augmented text there too — otherwise hovering a bar strips
|
-- stash our augmented text there too — otherwise hovering a bar strips
|
||||||
-- the "(N)" suffix off.
|
-- the "(N)" suffix off.
|
||||||
pfUI.hooksecurefunc("ReputationFrame_Update", function()
|
hooksecurefunc("ReputationFrame_Update", function()
|
||||||
if C.character.reputation.repRequired ~= "1" then return end
|
if C.character.reputation.repRequired ~= "1" then return end
|
||||||
local offset = FauxScrollFrame_GetOffset(ReputationListScrollFrame)
|
local offset = FauxScrollFrame_GetOffset(ReputationListScrollFrame)
|
||||||
for i = 1, NUM_FACTIONS_DISPLAYED do
|
for i = 1, NUM_FACTIONS_DISPLAYED do
|
||||||
|
|||||||
@@ -150,7 +150,7 @@ pfUI:RegisterSkin("Friends", function ()
|
|||||||
end
|
end
|
||||||
|
|
||||||
-- set positions
|
-- set positions
|
||||||
pfUI.hooksecurefunc("WhoList_Update", function()
|
hooksecurefunc("WhoList_Update", function()
|
||||||
for i = 1, WHOS_TO_DISPLAY do
|
for i = 1, WHOS_TO_DISPLAY do
|
||||||
local level = _G["WhoFrameButton"..i.."Level"]
|
local level = _G["WhoFrameButton"..i.."Level"]
|
||||||
level:ClearAllPoints()
|
level:ClearAllPoints()
|
||||||
@@ -231,7 +231,7 @@ pfUI:RegisterSkin("Friends", function ()
|
|||||||
end
|
end
|
||||||
|
|
||||||
-- set positions
|
-- set positions
|
||||||
pfUI.hooksecurefunc("GuildStatus_Update", function()
|
hooksecurefunc("GuildStatus_Update", function()
|
||||||
for i = 1, GUILDMEMBERS_TO_DISPLAY do
|
for i = 1, GUILDMEMBERS_TO_DISPLAY do
|
||||||
local level = _G["GuildFrameButton"..i.."Level"]
|
local level = _G["GuildFrameButton"..i.."Level"]
|
||||||
level:ClearAllPoints()
|
level:ClearAllPoints()
|
||||||
|
|||||||
@@ -24,11 +24,11 @@ pfUI:RegisterSkin("Gossip and Quest", function ()
|
|||||||
QuestRewardItemHighlightBG:SetTexture(1,1,1,.2)
|
QuestRewardItemHighlightBG:SetTexture(1,1,1,.2)
|
||||||
QuestRewardItemHighlightBG:SetAllPoints()
|
QuestRewardItemHighlightBG:SetAllPoints()
|
||||||
|
|
||||||
pfUI.hooksecurefunc("QuestFrameItems_Update", function()
|
hooksecurefunc("QuestFrameItems_Update", function()
|
||||||
QuestRewardItemHighlight:Hide()
|
QuestRewardItemHighlight:Hide()
|
||||||
end)
|
end)
|
||||||
|
|
||||||
pfUI.hooksecurefunc("QuestRewardItem_OnClick", function()
|
hooksecurefunc("QuestRewardItem_OnClick", function()
|
||||||
if this.type == "choice" then
|
if this.type == "choice" then
|
||||||
QuestRewardItemHighlight:SetAllPoints(this.backdrop)
|
QuestRewardItemHighlight:SetAllPoints(this.backdrop)
|
||||||
QuestRewardItemHighlight:Show()
|
QuestRewardItemHighlight:Show()
|
||||||
|
|||||||
@@ -0,0 +1,193 @@
|
|||||||
|
local slots = {
|
||||||
|
"HeadSlot",
|
||||||
|
"NeckSlot",
|
||||||
|
"ShoulderSlot",
|
||||||
|
"BackSlot",
|
||||||
|
"ChestSlot",
|
||||||
|
"ShirtSlot",
|
||||||
|
"TabardSlot",
|
||||||
|
"WristSlot",
|
||||||
|
"HandsSlot",
|
||||||
|
"WaistSlot",
|
||||||
|
"LegsSlot",
|
||||||
|
"FeetSlot",
|
||||||
|
"Finger0Slot",
|
||||||
|
"Finger1Slot",
|
||||||
|
"Trinket0Slot",
|
||||||
|
"Trinket1Slot",
|
||||||
|
"MainHandSlot",
|
||||||
|
"SecondaryHandSlot",
|
||||||
|
"RangedSlot",
|
||||||
|
}
|
||||||
|
|
||||||
|
pfUI:RegisterSkin("Inspect", function ()
|
||||||
|
local rawborder, border = GetBorderSize()
|
||||||
|
local bpad = rawborder > 1 and border - GetPerfectPixel() or GetPerfectPixel()
|
||||||
|
|
||||||
|
HookAddonOrVariable("Blizzard_InspectUI", function()
|
||||||
|
local cache = {}
|
||||||
|
|
||||||
|
CreateBackdrop(InspectFrame, nil, nil, .75)
|
||||||
|
CreateBackdropShadow(InspectFrame)
|
||||||
|
|
||||||
|
InspectFrame.backdrop:SetPoint("TOPLEFT", 10, -10)
|
||||||
|
InspectFrame.backdrop:SetPoint("BOTTOMRIGHT", -30, 72)
|
||||||
|
InspectFrame:SetHitRectInsets(10,30,10,72)
|
||||||
|
EnableMovable("InspectFrame", "Blizzard_InspectUI", INSPECTFRAME_SUBFRAMES)
|
||||||
|
|
||||||
|
SkinCloseButton(InspectFrameCloseButton, InspectFrame.backdrop, -6, -6)
|
||||||
|
|
||||||
|
InspectFrame:DisableDrawLayer("ARTWORK")
|
||||||
|
|
||||||
|
InspectNameText:ClearAllPoints()
|
||||||
|
InspectNameText:SetPoint("TOP", InspectFrame.backdrop, "TOP", 0, -10)
|
||||||
|
|
||||||
|
-- Turtle WoW has up to 4 inspect tabs: Character, Honor, Arena, Talents
|
||||||
|
for i = 1, 4 do
|
||||||
|
local tab = _G["InspectFrameTab"..i]
|
||||||
|
if tab then
|
||||||
|
local lastTab = _G["InspectFrameTab"..(i-1)]
|
||||||
|
tab:ClearAllPoints()
|
||||||
|
if lastTab then
|
||||||
|
tab:SetPoint("LEFT", lastTab, "RIGHT", border*2 + 1, 0)
|
||||||
|
else
|
||||||
|
tab:SetPoint("TOPLEFT", InspectFrame.backdrop, "BOTTOMLEFT", bpad, -(border + (border == 1 and 1 or 2)))
|
||||||
|
end
|
||||||
|
SkinTab(tab)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
do -- Character Tab
|
||||||
|
StripTextures(InspectPaperDollFrame)
|
||||||
|
|
||||||
|
EnableClickRotate(InspectModelFrame)
|
||||||
|
local rotL = InspectModelRotateLeftButton or InspectModelFrameRotateLeftButton
|
||||||
|
if rotL then rotL:Hide() end
|
||||||
|
local rotR = InspectModelRotateRightButton or InspectModelFrameRotateRightButton
|
||||||
|
if rotR then rotR:Hide() end
|
||||||
|
|
||||||
|
for _, slot in pairs(slots) do
|
||||||
|
local frame = _G["Inspect"..slot]
|
||||||
|
StripTextures(frame)
|
||||||
|
CreateBackdrop(frame)
|
||||||
|
SetAllPointsOffset(frame.backdrop, frame, 0)
|
||||||
|
|
||||||
|
HandleIcon(frame.backdrop, _G["Inspect"..slot.."IconTexture"])
|
||||||
|
|
||||||
|
local funce = frame:GetScript("OnEnter")
|
||||||
|
frame:SetScript("OnEnter", function()
|
||||||
|
local bid = this:GetID()
|
||||||
|
if not GetInventoryItemLink(InspectFrame.unit, this:GetID()) and this.hasItem then
|
||||||
|
GameTooltip:SetOwner(this, "ANCHOR_TOPRIGHT")
|
||||||
|
GameTooltip:SetHyperlink("item:"..cache[bid]["id"])
|
||||||
|
GameTooltip:Show()
|
||||||
|
else
|
||||||
|
funce()
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
end
|
||||||
|
|
||||||
|
local function ColorSlot(slot, id, itemID, vslot)
|
||||||
|
local item = Item:CreateFromItemID(itemID)
|
||||||
|
if item:IsItemEmpty() then return end
|
||||||
|
|
||||||
|
item:ContinueOnItemLoad(function()
|
||||||
|
if not InspectFrame.unit then return end
|
||||||
|
if GetInventoryItemID(InspectFrame.unit, id) ~= itemID then return end
|
||||||
|
|
||||||
|
local quality = item:GetItemQuality()
|
||||||
|
if not quality then return end
|
||||||
|
|
||||||
|
local r, g, b = GetItemQualityColor(quality)
|
||||||
|
slot.backdrop:SetBackdropBorderColor(r, g, b)
|
||||||
|
|
||||||
|
if ShaguScore then
|
||||||
|
if not slot.scoreText then
|
||||||
|
slot.scoreText = slot:CreateFontString(nil, "OVERLAY", "GameFontNormal")
|
||||||
|
slot.scoreText:SetFont(pfUI.font_default, 12, "OUTLINE")
|
||||||
|
slot.scoreText:SetPoint("TOPRIGHT", 0, 0)
|
||||||
|
end
|
||||||
|
local itemLevel = ShaguScore.Database[itemID] or 0
|
||||||
|
local score = ShaguScore:Calculate(vslot, quality, itemLevel)
|
||||||
|
if score and score > 0 then
|
||||||
|
slot.scoreText:SetText(score)
|
||||||
|
slot.scoreText:SetTextColor(r, g, b)
|
||||||
|
else
|
||||||
|
slot.scoreText:SetText("")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
end
|
||||||
|
|
||||||
|
local function UpdateSlots()
|
||||||
|
if not InspectFrame.unit then return end
|
||||||
|
|
||||||
|
local guild, title = GetGuildInfo(InspectFrame.unit)
|
||||||
|
if guild then
|
||||||
|
InspectGuildText:SetPoint("TOP", InspectLevelText, "BOTTOM", 0, -1)
|
||||||
|
InspectGuildText:SetText(format(TEXT(GUILD_TITLE_TEMPLATE), title, guild))
|
||||||
|
InspectGuildText:Show()
|
||||||
|
else
|
||||||
|
InspectGuildText:SetText("")
|
||||||
|
InspectGuildText:Hide()
|
||||||
|
end
|
||||||
|
|
||||||
|
for _, vslot in pairs(slots) do
|
||||||
|
local id = GetInventorySlotInfo(vslot)
|
||||||
|
local itemID = GetInventoryItemID(InspectFrame.unit, id)
|
||||||
|
local slot = _G["Inspect" .. vslot]
|
||||||
|
|
||||||
|
if itemID then
|
||||||
|
ColorSlot(slot, id, itemID, vslot)
|
||||||
|
elseif not slot.hasItem then
|
||||||
|
-- genuinely empty slot: reset to a plain backdrop
|
||||||
|
CreateBackdrop(slot)
|
||||||
|
SetAllPointsOffset(slot.backdrop, slot, 0)
|
||||||
|
if slot.scoreText then
|
||||||
|
slot.scoreText:SetText("")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
hooksecurefunc("InspectPaperDollItemSlotButton_Update", function(button)
|
||||||
|
local bid = button:GetID()
|
||||||
|
local itemID = GetInventoryItemID(InspectFrame.unit, bid)
|
||||||
|
if itemID then
|
||||||
|
cache[bid] = cache[bid] or {}
|
||||||
|
cache[bid]["id"] = itemID
|
||||||
|
cache[bid]["tex"] = GetInventoryItemTexture(InspectFrame.unit, button:GetID())
|
||||||
|
cache[bid]["count"] = GetInventoryItemCount(InspectFrame.unit, button:GetID())
|
||||||
|
cache[bid]["name"] = UnitName(InspectFrame.unit)
|
||||||
|
elseif cache[bid] and UnitName(InspectFrame.unit) == cache[bid].name then
|
||||||
|
-- restore cache information
|
||||||
|
SetItemButtonTexture(button, cache[bid]["tex"])
|
||||||
|
SetItemButtonCount(button, cache[bid]["count"])
|
||||||
|
button.hasItem = 1
|
||||||
|
end
|
||||||
|
|
||||||
|
UpdateSlots()
|
||||||
|
end)
|
||||||
|
end
|
||||||
|
|
||||||
|
do -- Honor Tab
|
||||||
|
StripTextures(InspectHonorFrame)
|
||||||
|
if InspectArenaFrame then
|
||||||
|
StripTextures(InspectArenaFrame)
|
||||||
|
for i = 1, 3 do
|
||||||
|
local team = _G["InspectArenaFrameTeam"..i]
|
||||||
|
StripTextures(team)
|
||||||
|
CreateBackdrop(team)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
CreateBackdrop(InspectHonorFrameProgressBar)
|
||||||
|
InspectHonorFrameProgressBar:SetStatusBarTexture(pfUI.media["img:bar"])
|
||||||
|
InspectHonorFrameProgressBar:SetHeight(24)
|
||||||
|
end
|
||||||
|
|
||||||
|
-- NOTE: Turtle WoW's Talent tab (InspectTalentsFrame / TWTalentFrame) is
|
||||||
|
-- skinned in modules/turtle-wow.lua, which activates once this skin is
|
||||||
|
-- registered (it gates on pfUI.skin["Inspect"]).
|
||||||
|
end)
|
||||||
|
end)
|
||||||
@@ -86,7 +86,7 @@ pfUI:RegisterSkin("Books", function ()
|
|||||||
ItemTextScrollFrameScrollBarScrollDownButton.Hide = function(self) self:Disable() end
|
ItemTextScrollFrameScrollBarScrollDownButton.Hide = function(self) self:Disable() end
|
||||||
|
|
||||||
local first
|
local first
|
||||||
HookScript(ItemTextFrame, "OnShow", function()
|
ItemTextFrame:HookScript("OnShow", function()
|
||||||
if not first then -- it is necessary to update the scrollbar when you first open the frame
|
if not first then -- it is necessary to update the scrollbar when you first open the frame
|
||||||
ItemTextScrollFrameScrollBar:Show()
|
ItemTextScrollFrameScrollBar:Show()
|
||||||
ItemTextScrollFrameScrollBar:Hide()
|
ItemTextScrollFrameScrollBar:Hide()
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ pfUI:RegisterSkin("Mailbox", function ()
|
|||||||
StripTextures(SendMailPackageButton)
|
StripTextures(SendMailPackageButton)
|
||||||
SkinButton(SendMailPackageButton, nil, nil, nil, nil, true)
|
SkinButton(SendMailPackageButton, nil, nil, nil, nil, true)
|
||||||
|
|
||||||
pfUI.hooksecurefunc("SendMailFrame_Update", function()
|
hooksecurefunc("SendMailFrame_Update", function()
|
||||||
HandleIcon(SendMailPackageButton, SendMailPackageButton:GetNormalTexture())
|
HandleIcon(SendMailPackageButton, SendMailPackageButton:GetNormalTexture())
|
||||||
|
|
||||||
local _, itemID = GetSendMailItemLink()
|
local _, itemID = GetSendMailItemLink()
|
||||||
@@ -62,7 +62,7 @@ pfUI:RegisterSkin("Mailbox", function ()
|
|||||||
do -- OpenMailFrame
|
do -- OpenMailFrame
|
||||||
SkinButton(OpenMailPackageButton, nil, nil, nil, OpenMailPackageButtonIconTexture)
|
SkinButton(OpenMailPackageButton, nil, nil, nil, OpenMailPackageButtonIconTexture)
|
||||||
|
|
||||||
pfUI.hooksecurefunc("InboxFrame_OnClick", function(index)
|
hooksecurefunc("InboxFrame_OnClick", function(index)
|
||||||
local _, itemID = GetInboxItemLink(index)
|
local _, itemID = GetInboxItemLink(index)
|
||||||
if itemID then
|
if itemID then
|
||||||
local quality = C_Item.GetItemQualityByID(itemID)
|
local quality = C_Item.GetItemQualityByID(itemID)
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ pfUI:RegisterSkin("Merchant", function ()
|
|||||||
if MerchantGuildBankRepairButton then -- tbc
|
if MerchantGuildBankRepairButton then -- tbc
|
||||||
SkinButton(MerchantGuildBankRepairButton, nil, nil, nil, MerchantGuildBankRepairButtonIcon)
|
SkinButton(MerchantGuildBankRepairButton, nil, nil, nil, MerchantGuildBankRepairButtonIcon)
|
||||||
MerchantGuildBankRepairButtonIcon:SetTexCoord(.59, .82, .06, .54)
|
MerchantGuildBankRepairButtonIcon:SetTexCoord(.59, .82, .06, .54)
|
||||||
pfUI.hooksecurefunc("MerchantFrame_UpdateRepairButtons", function()
|
hooksecurefunc("MerchantFrame_UpdateRepairButtons", function()
|
||||||
MerchantGuildBankRepairButton:ClearAllPoints()
|
MerchantGuildBankRepairButton:ClearAllPoints()
|
||||||
MerchantGuildBankRepairButton:SetPoint("RIGHT", MerchantBuyBackItemItemButton, "LEFT", -14, 0)
|
MerchantGuildBankRepairButton:SetPoint("RIGHT", MerchantBuyBackItemItemButton, "LEFT", -14, 0)
|
||||||
MerchantRepairAllButton:ClearAllPoints()
|
MerchantRepairAllButton:ClearAllPoints()
|
||||||
@@ -56,7 +56,7 @@ pfUI:RegisterSkin("Merchant", function ()
|
|||||||
moneyFrame:SetPoint("BOTTOMLEFT", itemButton, "BOTTOMRIGHT", 5, 1)
|
moneyFrame:SetPoint("BOTTOMLEFT", itemButton, "BOTTOMRIGHT", 5, 1)
|
||||||
end
|
end
|
||||||
|
|
||||||
pfUI.hooksecurefunc("MerchantFrame_UpdateMerchantInfo", function()
|
hooksecurefunc("MerchantFrame_UpdateMerchantInfo", function()
|
||||||
if MerchantFrame.selectedTab == 1 then
|
if MerchantFrame.selectedTab == 1 then
|
||||||
for i = 3, 11, 2 do
|
for i = 3, 11, 2 do
|
||||||
_G["MerchantItem"..i]:ClearAllPoints()
|
_G["MerchantItem"..i]:ClearAllPoints()
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ pfUI:RegisterSkin("Options - New", function ()
|
|||||||
CreateBackdropShadow(OptionsFrame)
|
CreateBackdropShadow(OptionsFrame)
|
||||||
EnableMovable(OptionsFrame)
|
EnableMovable(OptionsFrame)
|
||||||
|
|
||||||
HookScript(OptionsFrame, "OnShow", function()
|
OptionsFrame:HookScript("OnShow", function()
|
||||||
this:ClearAllPoints()
|
this:ClearAllPoints()
|
||||||
this:SetPoint("CENTER", 0, 0)
|
this:SetPoint("CENTER", 0, 0)
|
||||||
end)
|
end)
|
||||||
@@ -109,13 +109,13 @@ pfUI:RegisterSkin("Options - New", function ()
|
|||||||
local color = PFUI_CLASS_COLORS[class]
|
local color = PFUI_CLASS_COLORS[class]
|
||||||
SetHighlight(btn, color.r, color.g, color.b)
|
SetHighlight(btn, color.r, color.g, color.b)
|
||||||
btn:SetFont(pfUI.font_default, pfUI_config.global.font_size, "OUTLINE")
|
btn:SetFont(pfUI.font_default, pfUI_config.global.font_size, "OUTLINE")
|
||||||
HookScript(btn, "OnMouseDown", function()
|
btn:HookScript("OnMouseDown", function()
|
||||||
StripTextures(this, true)
|
StripTextures(this, true)
|
||||||
this:SetBackdrop(pfUI.backdrop)
|
this:SetBackdrop(pfUI.backdrop)
|
||||||
this:SetBackdropColor(br, bg, bb, 0.75)
|
this:SetBackdropColor(br, bg, bb, 0.75)
|
||||||
this:SetBackdropBorderColor(er, eg, eb, 1)
|
this:SetBackdropBorderColor(er, eg, eb, 1)
|
||||||
end)
|
end)
|
||||||
HookScript(btn, "OnMouseUp", function()
|
btn:HookScript("OnMouseUp", function()
|
||||||
StripTextures(this, true)
|
StripTextures(this, true)
|
||||||
this:SetBackdrop(pfUI.backdrop)
|
this:SetBackdrop(pfUI.backdrop)
|
||||||
this:SetBackdropColor(br, bg, bb, 0.75)
|
this:SetBackdropColor(br, bg, bb, 0.75)
|
||||||
@@ -184,7 +184,7 @@ pfUI:RegisterSkin("Options - New", function ()
|
|||||||
end
|
end
|
||||||
|
|
||||||
-- hook after category selection: UpdateOptions is local so we hook its caller
|
-- hook after category selection: UpdateOptions is local so we hook its caller
|
||||||
pfUI.hooksecurefunc("OptionsListButton_OnClick", SkinControls)
|
hooksecurefunc("OptionsListButton_OnClick", SkinControls)
|
||||||
-- also cover initial load
|
-- also cover initial load
|
||||||
HookScript(OptionsFrame, "OnShow", SkinControls)
|
OptionsFrame:HookScript("OnShow", SkinControls)
|
||||||
end)
|
end)
|
||||||
@@ -5,37 +5,18 @@ pfUI:RegisterSkin("Options - Sound", function ()
|
|||||||
|
|
||||||
-- Compatibility
|
-- Compatibility
|
||||||
local SoundOptionsFrameHeaderText, NUM_CHECKBOXES, NUM_SLIDERS
|
local SoundOptionsFrameHeaderText, NUM_CHECKBOXES, NUM_SLIDERS
|
||||||
if SOUND_OPTIONS then -- tbc
|
|
||||||
SoundOptionsFrameHeaderText = GetNoNameObject(SoundOptionsFrame, "FontString", "BACKGROUND", SOUND_OPTIONS)
|
|
||||||
NUM_CHECKBOXES = 11
|
|
||||||
NUM_SLIDERS = 6
|
|
||||||
|
|
||||||
StripTextures(AudioOptionsFrame)
|
SoundOptionsFrameHeaderText = GetNoNameObject(SoundOptionsFrame, "FontString", "ARTWORK", SOUNDOPTIONS_MENU)
|
||||||
CreateBackdrop(SoundOptionsFramePlayback, nil, true, .75)
|
NUM_CHECKBOXES = 8
|
||||||
CreateBackdrop(SoundOptionsFrameHardware, nil, true, .75)
|
NUM_SLIDERS = 4
|
||||||
CreateBackdrop(SoundOptionsFrameVolume, nil, true, .75)
|
|
||||||
|
|
||||||
SkinDropDown(SoundOptionsOutputDropDown)
|
SoundOptionsFrameOkay:ClearAllPoints()
|
||||||
|
SoundOptionsFrameOkay:SetPoint("RIGHT", SoundOptionsFrameCancel, "LEFT", -2*bpad, 0)
|
||||||
SoundOptionsFrameDefaults:ClearAllPoints()
|
SoundOptionsFrameSlider1:ClearAllPoints()
|
||||||
SoundOptionsFrameDefaults:SetPoint("TOPLEFT", SoundOptionsFramePlayback, "BOTTOMLEFT", 0, -10)
|
SoundOptionsFrameSlider1:SetPoint("TOPRIGHT", SoundOptionsFrame, "TOPRIGHT", -18, -43)
|
||||||
SoundOptionsFrameCancel:ClearAllPoints()
|
for i=2, NUM_SLIDERS do
|
||||||
SoundOptionsFrameCancel:SetPoint("TOPRIGHT", SoundOptionsFrameVolume, "BOTTOMRIGHT", 0, -10)
|
_G["SoundOptionsFrameSlider"..i]:ClearAllPoints()
|
||||||
SoundOptionsFrameOkay:ClearAllPoints()
|
_G["SoundOptionsFrameSlider"..i]:SetPoint("TOP", _G["SoundOptionsFrameSlider"..i-1], "BOTTOM", 0, -30)
|
||||||
SoundOptionsFrameOkay:SetPoint("RIGHT", SoundOptionsFrameCancel, "LEFT", -2*bpad, 0)
|
|
||||||
else -- vanilla
|
|
||||||
SoundOptionsFrameHeaderText = GetNoNameObject(SoundOptionsFrame, "FontString", "ARTWORK", SOUNDOPTIONS_MENU)
|
|
||||||
NUM_CHECKBOXES = 8
|
|
||||||
NUM_SLIDERS = 4
|
|
||||||
|
|
||||||
SoundOptionsFrameOkay:ClearAllPoints()
|
|
||||||
SoundOptionsFrameOkay:SetPoint("RIGHT", SoundOptionsFrameCancel, "LEFT", -2*bpad, 0)
|
|
||||||
SoundOptionsFrameSlider1:ClearAllPoints()
|
|
||||||
SoundOptionsFrameSlider1:SetPoint("TOPRIGHT", SoundOptionsFrame, "TOPRIGHT", -18, -43)
|
|
||||||
for i=2, NUM_SLIDERS do
|
|
||||||
_G["SoundOptionsFrameSlider"..i]:ClearAllPoints()
|
|
||||||
_G["SoundOptionsFrameSlider"..i]:SetPoint("TOP", _G["SoundOptionsFrameSlider"..i-1], "BOTTOM", 0, -30)
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
StripTextures(SoundOptionsFrame)
|
StripTextures(SoundOptionsFrame)
|
||||||
@@ -44,7 +25,7 @@ pfUI:RegisterSkin("Options - Sound", function ()
|
|||||||
|
|
||||||
EnableMovable(SoundOptionsFrame)
|
EnableMovable(SoundOptionsFrame)
|
||||||
|
|
||||||
HookScript(SoundOptionsFrame, "OnShow", function()
|
SoundOptionsFrame:HookScript("OnShow", function()
|
||||||
this:ClearAllPoints()
|
this:ClearAllPoints()
|
||||||
this:SetPoint("CENTER", 0, 0)
|
this:SetPoint("CENTER", 0, 0)
|
||||||
end)
|
end)
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ pfUI:RegisterSkin("Options - Video", function ()
|
|||||||
slider:SetPoint(point, anchor, anchorPoint, x, y - shift)
|
slider:SetPoint(point, anchor, anchorPoint, x, y - shift)
|
||||||
end
|
end
|
||||||
|
|
||||||
pfUI.hooksecurefunc("OptionsFrame_Load", function()
|
hooksecurefunc("OptionsFrame_Load", function()
|
||||||
OptionsFramePixelShaders:SetWidth(230)
|
OptionsFramePixelShaders:SetWidth(230)
|
||||||
OptionsFrameMiscellaneous:ClearAllPoints()
|
OptionsFrameMiscellaneous:ClearAllPoints()
|
||||||
OptionsFrameMiscellaneous:SetPoint("LEFT", OptionsFramePixelShaders, "RIGHT", 6, 0)
|
OptionsFrameMiscellaneous:SetPoint("LEFT", OptionsFramePixelShaders, "RIGHT", 6, 0)
|
||||||
@@ -49,7 +49,7 @@ pfUI:RegisterSkin("Options - Video", function ()
|
|||||||
|
|
||||||
EnableMovable(OptionsFrame)
|
EnableMovable(OptionsFrame)
|
||||||
|
|
||||||
HookScript(OptionsFrame, "OnShow", function()
|
OptionsFrame:HookScript("OnShow", function()
|
||||||
this:ClearAllPoints()
|
this:ClearAllPoints()
|
||||||
this:SetPoint("CENTER", 0, 0)
|
this:SetPoint("CENTER", 0, 0)
|
||||||
end)
|
end)
|
||||||
|
|||||||
@@ -192,7 +192,7 @@ pfUI:RegisterSkin("Profession", function ()
|
|||||||
reagentlabel:SetTextColor(1,1,1,1)
|
reagentlabel:SetTextColor(1,1,1,1)
|
||||||
|
|
||||||
local scanner = libtipscan:GetScanner(name)
|
local scanner = libtipscan:GetScanner(name)
|
||||||
pfUI.hooksecurefunc(SetSelection, function(id)
|
hooksecurefunc(SetSelection, function(id)
|
||||||
if id and id ~= 0 then
|
if id and id ~= 0 then
|
||||||
detailscroll:Show()
|
detailscroll:Show()
|
||||||
HandleIcon(icon, icon:GetNormalTexture())
|
HandleIcon(icon, icon:GetNormalTexture())
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ pfUI:RegisterSkin("Quest Log", function ()
|
|||||||
|
|
||||||
StripTextures(QUEST_COUNT)
|
StripTextures(QUEST_COUNT)
|
||||||
QUEST_COUNT:ClearAllPoints()
|
QUEST_COUNT:ClearAllPoints()
|
||||||
pfUI.hooksecurefunc("QuestLogUpdateQuestCount", function(numQuests)
|
hooksecurefunc("QuestLogUpdateQuestCount", function(numQuests)
|
||||||
QUEST_COUNT:ClearAllPoints()
|
QUEST_COUNT:ClearAllPoints()
|
||||||
QUEST_COUNT:SetPoint("BOTTOMRIGHT", QuestLogFrame, "TOPRIGHT", 0, -50)
|
QUEST_COUNT:SetPoint("BOTTOMRIGHT", QuestLogFrame, "TOPRIGHT", 0, -50)
|
||||||
end)
|
end)
|
||||||
@@ -24,7 +24,7 @@ pfUI:RegisterSkin("Quest Log", function ()
|
|||||||
QUEST_COUNT:SetPoint("TOPRIGHT", -10, -30)
|
QUEST_COUNT:SetPoint("TOPRIGHT", -10, -30)
|
||||||
end
|
end
|
||||||
|
|
||||||
pfUI.hooksecurefunc("QuestLog_OnShow", function()
|
hooksecurefunc("QuestLog_OnShow", function()
|
||||||
QuestLogFrame:ClearAllPoints()
|
QuestLogFrame:ClearAllPoints()
|
||||||
QuestLogFrame:SetPoint("TOPLEFT", 10, -104)
|
QuestLogFrame:SetPoint("TOPLEFT", 10, -104)
|
||||||
end)
|
end)
|
||||||
@@ -102,13 +102,13 @@ pfUI:RegisterSkin("Quest Log", function ()
|
|||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
|
|
||||||
HookScript(QuestLogDetailScrollFrame, "OnHide", function()
|
QuestLogDetailScrollFrame:HookScript("OnHide", function()
|
||||||
SkinArrowButton(QuestLogFrameExpandButton, "RIGHT", 21)
|
SkinArrowButton(QuestLogFrameExpandButton, "RIGHT", 21)
|
||||||
QuestLogDetailScrollFrame:Hide()
|
QuestLogDetailScrollFrame:Hide()
|
||||||
QuestLogFrame:SetWidth(340)
|
QuestLogFrame:SetWidth(340)
|
||||||
end)
|
end)
|
||||||
|
|
||||||
HookScript(QuestLogDetailScrollFrame, "OnShow", function()
|
QuestLogDetailScrollFrame:HookScript("OnShow", function()
|
||||||
SkinArrowButton(QuestLogFrameExpandButton, "LEFT", 21)
|
SkinArrowButton(QuestLogFrameExpandButton, "LEFT", 21)
|
||||||
QuestLogDetailScrollFrame:Show()
|
QuestLogDetailScrollFrame:Show()
|
||||||
QuestLogFrame:SetWidth(676)
|
QuestLogFrame:SetWidth(676)
|
||||||
@@ -163,7 +163,7 @@ pfUI:RegisterSkin("Quest Log", function ()
|
|||||||
QuestLogListScrollFrame:SetPoint("TOPLEFT", 10, -54)
|
QuestLogListScrollFrame:SetPoint("TOPLEFT", 10, -54)
|
||||||
QuestLogListScrollFrame:SetHeight(350)
|
QuestLogListScrollFrame:SetHeight(350)
|
||||||
|
|
||||||
pfUI.hooksecurefunc("QuestLog_Update", function()
|
hooksecurefunc("QuestLog_Update", function()
|
||||||
local numEntries = GetNumQuestLogEntries()
|
local numEntries = GetNumQuestLogEntries()
|
||||||
local questIndex, text, level, questTag, isHeader
|
local questIndex, text, level, questTag, isHeader
|
||||||
|
|
||||||
|
|||||||
@@ -38,12 +38,12 @@ pfUI:RegisterSkin("Readycheck", function ()
|
|||||||
frame.bar.text:SetPoint("CENTER", 0, 0)
|
frame.bar.text:SetPoint("CENTER", 0, 0)
|
||||||
|
|
||||||
local max
|
local max
|
||||||
pfUI.hooksecurefunc("ShowReadyCheck", function()
|
hooksecurefunc("ShowReadyCheck", function()
|
||||||
max = ReadyCheckFrame.timer
|
max = ReadyCheckFrame.timer
|
||||||
frame.bar:SetMinMaxValues(0, max)
|
frame.bar:SetMinMaxValues(0, max)
|
||||||
end)
|
end)
|
||||||
|
|
||||||
pfUI.hooksecurefunc(update_func, function()
|
hooksecurefunc(update_func, function()
|
||||||
if not ReadyCheckFrame.timer then return end
|
if not ReadyCheckFrame.timer then return end
|
||||||
|
|
||||||
local perc = ReadyCheckFrame.timer/max
|
local perc = ReadyCheckFrame.timer/max
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ pfUI:RegisterSkin("GM Survey", function ()
|
|||||||
CreateBackdrop(GMSurveyCommentFrame, nil, true, .75)
|
CreateBackdrop(GMSurveyCommentFrame, nil, true, .75)
|
||||||
SkinScrollbar(GMSurveyCommentScrollFrameScrollBar)
|
SkinScrollbar(GMSurveyCommentScrollFrameScrollBar)
|
||||||
GMSurveyFrameComment:SetMaxLetters(2000)
|
GMSurveyFrameComment:SetMaxLetters(2000)
|
||||||
pfUI.hooksecurefunc("GMSurveyFrame_Update", function()
|
hooksecurefunc("GMSurveyFrame_Update", function()
|
||||||
GMSurveyFrameComment:SetWidth(505)
|
GMSurveyFrameComment:SetWidth(505)
|
||||||
end)
|
end)
|
||||||
end)
|
end)
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ pfUI:RegisterSkin("Tooltips", function ()
|
|||||||
CreateBackdropShadow(tooltip)
|
CreateBackdropShadow(tooltip)
|
||||||
end
|
end
|
||||||
|
|
||||||
HookScript(WorldMapTooltip, "OnShow", function()
|
WorldMapTooltip:HookScript("OnShow", function()
|
||||||
CreateBackdrop(WorldMapTooltip, nil, nil, alpha)
|
CreateBackdrop(WorldMapTooltip, nil, nil, alpha)
|
||||||
CreateBackdropShadow(WorldMapTooltip)
|
CreateBackdropShadow(WorldMapTooltip)
|
||||||
end)
|
end)
|
||||||
@@ -16,7 +16,7 @@ pfUI:RegisterSkin("Tooltips", function ()
|
|||||||
|
|
||||||
for _, tooltip in pairs({ShoppingTooltip1, ShoppingTooltip2}) do
|
for _, tooltip in pairs({ShoppingTooltip1, ShoppingTooltip2}) do
|
||||||
tooltip:SetClampedToScreen(true)
|
tooltip:SetClampedToScreen(true)
|
||||||
HookScript(tooltip, "OnShow", function()
|
tooltip:HookScript("OnShow", function()
|
||||||
local a, b, c, x, y = this:GetPoint()
|
local a, b, c, x, y = this:GetPoint()
|
||||||
if not x or x == 0 then x = (border*2) + ( x or 0 ) + 1 end
|
if not x or x == 0 then x = (border*2) + ( x or 0 ) + 1 end
|
||||||
if a then this:SetPoint(a, b, c, x, y) end
|
if a then this:SetPoint(a, b, c, x, y) end
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ pfUI:RegisterSkin("Trade", function ()
|
|||||||
RecipientButtonBG:SetAllPoints()
|
RecipientButtonBG:SetAllPoints()
|
||||||
end
|
end
|
||||||
|
|
||||||
pfUI.hooksecurefunc("TradeFrame_UpdateTargetItem", function(id)
|
hooksecurefunc("TradeFrame_UpdateTargetItem", function(id)
|
||||||
HandleIcon(_G["TradeRecipientItem"..id.."ItemButton"], _G["TradeRecipientItem"..id..'IconTexture'])
|
HandleIcon(_G["TradeRecipientItem"..id.."ItemButton"], _G["TradeRecipientItem"..id..'IconTexture'])
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ pfUI:RegisterSkin("Trainer", function ()
|
|||||||
|
|
||||||
StripTextures(ClassTrainerSkillIcon)
|
StripTextures(ClassTrainerSkillIcon)
|
||||||
SkinButton(ClassTrainerSkillIcon, nil, nil, nil, nil, true)
|
SkinButton(ClassTrainerSkillIcon, nil, nil, nil, nil, true)
|
||||||
pfUI.hooksecurefunc("ClassTrainer_SetSelection", function()
|
hooksecurefunc("ClassTrainer_SetSelection", function()
|
||||||
HandleIcon(ClassTrainerSkillIcon, ClassTrainerSkillIcon:GetNormalTexture())
|
HandleIcon(ClassTrainerSkillIcon, ClassTrainerSkillIcon:GetNormalTexture())
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user