/
## Interface: 50400 |
## Interface: 60000 |
## Title: Urban Achiever |
## Author: Syzgyn, Tomate |
## Notes: Improved Achievement Frame |
## Notes-frFR: Fenêtre de Hauts Faits améliorée |
## Notes-zhTW:æ¹é²æå°±æ¡æ¶ |
## Notes-zhCN:æ¹è¿æå°±æ¡æ¶ |
## Version 15.7.wowi:revision |
## Version 16.wowi:revision |
## OptionalDeps: Blizzard_AchievementUI |
## SavedVariables: UASV |
## SavedVariablesPerCharacter: UASVPC |
<?php |
ini_set('allow_url_fopen', 1); |
$URLs = array( |
"http://www.wowhead.com/achievements?filter=si=-1;cr=9;crs=2;crv=4000" => 1, |
"http://www.wowhead.com/achievements?filter=si=-1;cr=9;crs=5;crv=4000" => 1, |
"http://www.wowhead.com/achievements?filter=si=-2;cr=9;crs=2;crv=4000" => 2, |
"http://www.wowhead.com/achievements?filter=si=-2;cr=9;crs=5;crv=4000" => 2 |
); |
); |
$completearray = array(); |
foreach($URLs as $URL => $side){ |
$page = file_get_contents($URL); |
foreach($workingarray as $achievement){ |
$pos = strpos($achievement, "',icon:'"); |
$pos = strpos($achievement, '","icon":"'); |
$achievement = substr($achievement, 0, $pos); |
$achievement = str_replace(array("_[", "]={name_enus:'"), array('', '*-*'), $achievement); |
$achievement = str_replace(array('_[', ']={"name_enus":"'), array('', '*-*'), $achievement); |
$achievement = explode('*-*', $achievement); |
$completearray[$achievement[0]] = $side . ', --' . str_replace('\\','',$achievement[1]); |
} |
} |
} |
--bindings |
BINDING_HEADER_URBANACHIEVER = "Urban Achiever" |
local MAX_ACHIEVEMENTS = 8792 --last 8791 |
local MAX_ACHIEVEMENTS = 9709 --last 9708 |
local menuTypes = {"PLAYER", "PARTY", "RAID_PLAYER"} |
local playerFaction = UnitFactionGroup("player") == "Alliance" and 1 or 2 |
------------------------------------------------------------- |
function self:HideCategorySum() |
categoryStatusBar92:Hide(); |
categoryStatusBar96:Hide(); |
categoryStatusBar97:Hide(); |
categoryStatusBar95:Hide(); |
categoryStatusBar168:Hide(); |
categoryStatusBar15165:Hide(); |
categoryStatusBar169:Hide(); |
categoryStatusBar201:Hide(); |
categoryStatusBar155:Hide(); |
categoryStatusBar15117:Hide(); |
categoryStatusBar81:Hide(); |
self.categoryFrame:Hide() |
end |
function self:ShowCategorySum() |
categoryStatusBar92:Show(); |
categoryStatusBar96:Show(); |
categoryStatusBar97:Show(); |
categoryStatusBar95:Show(); |
categoryStatusBar168:Show(); |
categoryStatusBar15165:Show(); |
categoryStatusBar169:Show(); |
categoryStatusBar201:Show(); |
categoryStatusBar155:Show(); |
categoryStatusBar15117:Show(); |
categoryStatusBar81:Hide(); |
self.categoryFrame:Show() |
end |
function self:HideCategorySumGuild() |
categoryStatusBar15088:Hide(); |
categoryStatusBar15077:Hide(); |
categoryStatusBar15078:Hide(); |
categoryStatusBar15079:Hide(); |
categoryStatusBar15080:Hide(); |
categoryStatusBar15089:Hide(); |
categoryStatusBar15093:Hide(); |
self.categoryFrameGuilde:Hide() |
end |
function self:ShowCategorySumGuild() |
categoryStatusBar15088:Show(); |
categoryStatusBar15077:Show(); |
categoryStatusBar15078:Show(); |
categoryStatusBar15079:Show(); |
categoryStatusBar15080:Show(); |
categoryStatusBar15089:Show(); |
categoryStatusBar15093:Hide(); |
self.categoryFrameGuilde:Show() |
end |
function self:SetupFrames() |
end |
end) |
self.categoryFrame = CreateFrame("Frame", "UrbanAchieverFrame", self.frame) |
self.categoryFrame:SetBackdrop({ |
edgeFile = "Interface\\DialogFrame\\UI-DialogBox-Border", tile = true, tileSize = 32, edgeSize = 32, |
insets = {left = 11, right = 12, top = 12, bottom = 11} |
}) |
self.categoryFrame.backdrop = self.categoryFrame:CreateTexture("$parentBG", "BACKGROUND") |
self.categoryFrame.backdrop:SetPoint("TOPLEFT", 6, -6) |
self.categoryFrame.backdrop:SetPoint("BOTTOMRIGHT", -6, 6) |
self.categoryFrame.backdrop:SetTexture("Interface\\AchievementFrame\\UI-Achievement-Parchment") |
self.categoryFrame.backdrop:SetTexCoord(0,.5,0,1) |
self.categoryFrame:SetWidth(260) |
self.categoryFrame:SetHeight(440) |
self.categoryFrame:SetPoint("LEFT", self.frame, "RIGHT", -12, 0) |
self.categoryFrameGuilde = CreateFrame("Frame", "UrbanAchieverFrame", self.frame) |
self.categoryFrameGuilde:SetBackdrop({ |
edgeFile = "Interface\\DialogFrame\\UI-DialogBox-Border", tile = true, tileSize = 32, edgeSize = 32, |
insets = {left = 11, right = 12, top = 12, bottom = 11} |
}) |
self.categoryFrameGuilde.backdrop = self.categoryFrameGuilde:CreateTexture("$parentBG", "BACKGROUND") |
self.categoryFrameGuilde.backdrop:SetPoint("TOPLEFT", 6, -6) |
self.categoryFrameGuilde.backdrop:SetPoint("BOTTOMRIGHT", -6, 6) |
self.categoryFrameGuilde.backdrop:SetTexture("Interface\\AchievementFrame\\UI-Achievement-Parchment") |
self.categoryFrameGuilde.backdrop:SetTexCoord(0,.5,0,1) |
self.categoryFrameGuilde:SetWidth(260) |
self.categoryFrameGuilde:SetHeight(240) |
self.categoryFrameGuilde:SetPoint("LEFT", self.frame, "RIGHT", -12, 0) |
--Initialize arrays |
self.frame.catButtons = {} |
self.frame.achButtons = {} |
local idxCat = 0 |
for i,id in ipairs(GetCategoryList()) do |
local tittleCat, parentCatID = GetCategoryInfo(id) |
if ( parentCatID == -1 )then |
idxCat, lastFrame = self:createCategoryStatusBar(id, idxCat, lastFrame, tittleCat) |
--15234 = Héritage |
--81 = Tours de force |
if ( parentCatID == -1 ) and id ~= 15234 and id ~= 81 then |
idxCat, lastFrame = self:createCategoryStatusBar(id, idxCat, lastFrame, tittleCat, self.categoryFrame) |
end |
end |
local idxCat = 0 |
for i,id in ipairs(GetGuildCategoryList()) do |
local tittleCat, parentCatID = GetCategoryInfo(id) |
if ( parentCatID == -1 or parentCatID == 15076 )then |
idxCat, lastFrame = self:createCategoryStatusBar(id, idxCat, lastFrame, tittleCat) |
--15093 = Tours de force de guilde |
if (parentCatID == -1 or parentCatID == 15076) and id ~= 15093 then |
idxCat, lastFrame = self:createCategoryStatusBar(id, idxCat, lastFrame, tittleCat, self.categoryFrameGuilde) |
end |
end |
self.frame.display.backdrop = self.frame.display:CreateTexture("$parentBG", "BACKGROUND") |
self.frame.display.backdrop:SetPoint("TOPLEFT") |
self.frame.display.backdrop:SetPoint("BOTTOMRIGHT") |
--self.frame.display.backdrop:SetTexture(1,0,0,1) |
self.frame.display:SetWidth(290) |
self.frame.display:SetHeight(463) |
self.frame.display:SetHeight(500) |
self.frame.display:SetPoint("TOPRIGHT", -13, -75) -- , self.frame.achButtons[1], "TOPRIGHT", 19, 0) |
self.frame.display:Hide() |
GameTooltip:Hide(); |
guildMemberRequestFrame = nil; |
end) |
for i=2, 9 do |
for i=2, 18 do |
self.frame.display.criteriaButtons[i] = self:CreateCriteriaButton("$parentCriteriaButton" .. i, self.frame.display) |
self.frame.display.criteriaButtons[i]:SetPoint("TOPLEFT", self.frame.display.criteriaButtons[i-1], "BOTTOMLEFT") |
self.frame.display.criteriaButtons[i]:SetScript("OnEnter", function(self) |
self.frame:Hide() |
end |
function self:createCategoryStatusBar(id, idxCat, lastFrame, tittleCat) |
function self:createCategoryStatusBar(id, idxCat, lastFrame, tittleCat, parent) |
idxCat = idxCat + 1 |
local categoryFrame = CreateFrame("StatusBar","categoryStatusBar"..id, self.frame, "AchievementFrameSummaryCategoryTemplate") |
local categoryFrame = CreateFrame("StatusBar","categoryStatusBar"..id, parent, "AchievementFrameSummaryCategoryTemplate") |
if idxCat == 1 then |
lastFrame = "categoryStatusBar"..id |
categoryFrame:SetPoint("BOTTOMLEFT", self.frame, "BOTTOMLEFT", 30, 150) |
categoryFrame:SetPoint("TOP", parent, "TOP", 0, -30) |
else |
if (idxCat%2) == 0 then |
categoryFrame:SetPoint("LEFT", lastFrame, "RIGHT", 30, 0) |
else |
categoryFrame:SetPoint("TOPLEFT", lastFrame, "BOTTOMLEFT", 0, -12) |
lastFrame = "categoryStatusBar"..id |
end |
categoryFrame:SetPoint("TOP", lastFrame, "BOTTOM", 0, -12) |
lastFrame = "categoryStatusBar"..id |
end |
categoryFrame:SetID(id) |
categoryFrame:SetScript("OnShow", function(self) |
categoryFrame:SetScript("OnHide", function(self) |
AchievementFrameSummaryCategory_OnHide(self) |
end) |
categoryFrame:SetWidth(270) |
categoryFrame:SetWidth(200) |
categoryFrame:SetHeight(21) |
categoryFrame.text:ClearAllPoints() |
categoryFrame.text:SetPoint("RIGHT", -5, 0) |
categoryFrame.name = categoryFrame:CreateFontString("$parentName", "OVERLAY", "GameFontHighlightSmall") |
categoryFrame.name:SetPoint("LEFT", 5, 0) |
categoryFrame.name:SetJustifyH("LEFT") |
categoryFrame.name:SetWidth(300) |
categoryFrame.name:SetWidth(200) |
categoryFrame.name:SetText(tittleCat) |
categoryFrame:Hide() |
--categoryFrame:Hide() |
return idxCat, lastFrame |
end |
["8030"] = 1, --A Test of Valor |
["4156"] = 1, --A Tribute to Immortality |
["5853"] = 1, --A-Caroling We Will Go |
["9539"] = 1, --Advanced Husbandry |
["5129"] = 1, --Ambassadors |
["8845"] = 1, --As I Walk Through the Valley of the Shadow of Moon |
["4925"] = 1, --Ashenvale Quests |
["5375"] = 1, --Baradin's Wardens |
["8314"] = 1, --Battle on the High Seas |
["4436"] = 1, --BB King |
["8925"] = 1, --Between Arak and a Hard Place |
["5171"] = 1, --Blood Elf Slayer |
["4926"] = 1, --Bloodmyst Isle Quests |
["7941"] = 1, --Brawlin' and Shot Callin' |
["9104"] = 1, --Bounty Hunter |
["9170"] = 1, --Brawlin' and Shot Callin' |
["7941"] = 1, --Brawlin' and Shot Callin' (Season 1) |
["7534"] = 1, --Chapter II: Wrathion's War |
["9078"] = 1, --Choppin' Even More Logs |
["5195"] = 1, --City Attacker |
["5131"] = 1, --Classic Battles |
["5156"] = 1, --Classy Draenei |
["8679"] = 1, --Conqueror of Orgrimmar |
["5331"] = 1, --Corporal |
["4928"] = 1, --Darkshore Quests |
["8340"] = 1, --Deck Your Collection |
["9176"] = 1, --Deck Your Collection |
["8340"] = 1, --Deck Your Collection (Season 1) |
["9630"] = 1, --Defender of Draenor |
["5130"] = 1, --Diplomacy |
["8920"] = 1, --Don't Let the Tala-door Hit You on the Way Out |
["5231"] = 1, --Double Jeopardy |
["5229"] = 1, --Drag a Maw |
["5126"] = 1, --Dungeon Diplomat |
["4929"] = 1, --Dustwallow Marsh Quests |
["9101"] = 1, --Even More Plots |
["6007"] = 1, --Extinguishing Northrend |
["8042"] = 1, --Extinguishing Pandaria |
["6013"] = 1, --Extinguishing the Cataclysm |
["6011"] = 1, --Flame Warden of Cataclysm |
["6008"] = 1, --Flame Warden of Northrend |
["8045"] = 1, --Flame Warden of Pandaria |
["9210"] = 1, --Garrison Buddies |
["5453"] = 1, --Ghosts in the Dark |
["5172"] = 1, --Goblin Slayer |
["5343"] = 1, --Grand Marshal |
["4912"] = 1, --Guild Level 25 |
["5434"] = 1, --Guild Marshals |
["5014"] = 1, --Guild Northrend Dungeon Hero |
["8335"] = 1, --Having a Brawl |
["8335"] = 1, --Having a Brawl (Season 1) |
["9214"] = 1, --Hero of Stormshield |
["6942"] = 1, --Hero of the Alliance |
["6939"] = 1, --Hero of the Alliance: Cataclysmic |
["8654"] = 1, --Hero of the Alliance: Grievous |
["8243"] = 1, --Hero of the Alliance: Malevolent |
["8658"] = 1, --Hero of the Alliance: Prideful |
["9230"] = 1, --Hero of the Alliance: Primal |
["6316"] = 1, --Hero of the Alliance: Ruthless |
["8652"] = 1, --Hero of the Alliance: Tyrannical |
["5344"] = 1, --Hero of the Alliance: Vicious |
["5031"] = 1, --Horde Slayer |
["8306"] = 1, --Hordebreaker |
["5219"] = 1, --I'm in the White Lodge |
["8336"] = 1, --I've Got the Biggest Brawls of Them All |
["8336"] = 1, --I've Got the Biggest Brawls of Them All (Season 1) |
["5268"] = 1, --In Service of the Alliance |
["5322"] = 1, --In Service of the Alliance |
["5327"] = 1, --In Service of the Alliance |
["5489"] = 1, --Master of Tol Barad |
["5333"] = 1, --Master Sergeant |
["6535"] = 1, --Mighty Roamin' Krasaranger |
["9100"] = 1, --More Plots |
["8304"] = 1, --Mount Parade |
["9598"] = 1, --Mountacular |
["9631"] = 1, --Mythic Draenor Raider |
["8927"] = 1, --Nagrandeur |
["9517"] = 1, --Nemesis: Death Stalker |
["9520"] = 1, --Nemesis: Huojin's Fall |
["9518"] = 1, --Nemesis: Killer of Kezan |
["9519"] = 1, --Nemesis: Orcslayer |
["9516"] = 1, --Nemesis: Slayer of Sin'dorei |
["9521"] = 1, --Nemesis: The Butcher |
["9522"] = 1, --Nemesis: Troll Hunter |
["7527"] = 1, --No Tank You |
["7946"] = 1, --Now You're Just Showing Off |
["9171"] = 1, --Now You're Just Showing Off |
["7946"] = 1, --Now You're Just Showing Off (Season 1) |
["8011"] = 1, --Number Five Is Alive |
["9528"] = 1, --On the Shadow's Trail |
["9408"] = 1, --Operation Counterattack |
["4786"] = 1, --Operation: Gnomeregan |
["8205"] = 1, --Operation: Shieldwall |
["7928"] = 1, --Operation: Shieldwall Campaign |
["6532"] = 1, --Pandaren Slayer |
["8642"] = 1, --Prideful Combatant |
["8451"] = 1, --Prideful Conquest |
["9238"] = 1, --Primal Combatant |
["9234"] = 1, --Primal Conquest |
["5330"] = 1, --Private |
["8923"] = 1, --Putting the Gore in Gorgrond |
["7949"] = 1, --Rabble Rabble Rabble |
["4902"] = 1, --Redridge Mountains Quests |
["9256"] = 1, --Rescue Operation |
["9478"] = 1, --Savage Friends |
["7448"] = 1, --Scenario Roundup |
["6874"] = 1, --Scenaturday |
["9564"] = 1, --Securing Draenor |
["5332"] = 1, --Sergeant |
["5334"] = 1, --Sergeant Major |
["9476"] = 1, --Sha'tari Defense |
["9602"] = 1, --Shoot For the Moon |
["4869"] = 1, --Sinking into Vashj'ir |
["6537"] = 1, --Slum It in the Summit |
["5213"] = 1, --Soaring Spirits |
["4937"] = 1, --Southern Barrens Quests |
["5152"] = 1, --Stay Classy |
["4936"] = 1, --Stonetalon Mountains Quests |
["9225"] = 1, --Take Them Out |
["6030"] = 1, --Taking the Show on the Road |
["6603"] = 1, --Taming Eastern Kingdoms |
["5168"] = 1, --Tauren Slayer |
["7947"] = 1, --The First Rule of Brawler's Guild |
["7940"] = 1, --The Second Rule of Brawler's Guild |
["9491"] = 1, --The Garrison Campaign |
["9169"] = 1, --The Second Rule of Brawler's Guild |
["7940"] = 1, --The Second Rule of Brawler's Guild (Season 1) |
["9540"] = 1, --The Stable Master |
["7467"] = 1, --Theramore's Fall |
["7523"] = 1, --Theramore's Fall |
["9714"] = 1, --Thy Kingdom Come |
["5417"] = 1, --Tol Barad Veteran |
["4296"] = 1, --Trial of the Champion |
["5836"] = 1, --Tricks and Treats of Northrend |
["6300"] = 1, --Upjade Complete |
["5328"] = 1, --Veteran of the Alliance |
["5823"] = 1, --Veteran of the Alliance II |
["9729"] = 1, --Victory in Hillsbrad |
["5329"] = 1, --Warbound Veteran of the Alliance |
["9738"] = 1, --Warlord of Draenor |
["8012"] = 1, --Waste Not, Want Not |
["7860"] = 1, --We're Going to Need More Saddles |
["8921"] = 1, --Welcome to Draenor |
["4903"] = 1, --Westfall and Duskwood Quests |
["4885"] = 1, --Wildhammer Clan |
["5481"] = 1, --Wildhammer Tour of Duty |
["7937"] = 1, --You Are Not Your $#*@! Legplates |
["9530"] = 1, --Writing in the Snow |
["9474"] = 1, --Wrynn's Vanguard |
["9168"] = 1, --You Are Not Your $#*@! Legplates |
["7937"] = 1, --You Are Not Your $#*@! Legplates (Season 1) |
["3676"] = 1, --A Silver Confidant |
["948"] = 1, --Ambassador of the Alliance |
["230"] = 1, --Battlemaster |
["8031"] = 2, --A Test of Valor |
["4079"] = 2, --A Tribute to Immortality |
["5854"] = 2, --A-Caroling We Will Go |
["9705"] = 2, --Advanced Husbandry |
["5179"] = 2, --Alliance Slayer |
["7844"] = 2, --Ambassadors |
["4976"] = 2, --Ashenvale Quests |
["4927"] = 2, --Azshara Quests |
["8315"] = 2, --Battle on the High Seas |
["4437"] = 2, --BB King |
["8926"] = 2, --Between Arak and a Hard Place |
["5351"] = 2, --Blood Guard |
["7942"] = 2, --Brawlin' and Shot Callin' |
["9103"] = 2, --Bounty Hunter |
["9174"] = 2, --Brawlin' and Shot Callin' |
["7942"] = 2, --Brawlin' and Shot Callin' (Season 1) |
["5338"] = 2, --Centurion |
["5353"] = 2, --Champion |
["8008"] = 2, --Chapter II: Wrathion's War |
["9080"] = 2, --Choppin' Even More Logs |
["5194"] = 2, --City Attacker |
["5128"] = 2, --Classic Battles |
["5163"] = 2, --Classy Blood Elves |
["5227"] = 2, --Cloud Nine |
["8342"] = 2, --Collect Your Deck |
["8307"] = 2, --Darkspear Revolutionary |
["8343"] = 2, --Deck Your Collection |
["9177"] = 2, --Deck Your Collection |
["8343"] = 2, --Deck Your Collection (Season 1) |
["9248"] = 2, --Defender of Draenor |
["4256"] = 2, --Demolition Derby |
["7843"] = 2, --Diplomacy |
["8206"] = 2, --Dominance Offensive |
["7929"] = 2, --Dominance Offensive Campaign |
["8013"] = 2, --Domination Point |
["8919"] = 2, --Don't Let the Tala-door Hit You on the Way Out |
["5552"] = 2, --Double Jeopardy |
["5177"] = 2, --Draenei Slayer |
["4886"] = 2, --Dragonmaw Clan |
["5145"] = 2, --Dungeon Diplomat |
["4978"] = 2, --Dustwallow Marsh Quests |
["5175"] = 2, --Dwarf Slayer |
["9546"] = 2, --Even More Plots |
["6010"] = 2, --Extinguishing Northrend |
["8043"] = 2, --Extinguishing Pandaria |
["6014"] = 2, --Extinguishing the Cataclysm |
["6012"] = 2, --Flame Keeper of Cataclysm |
["6009"] = 2, --Flame Keeper of Northrend |
["8044"] = 2, --Flame Keeper of Pandaria |
["9606"] = 2, --Frostfire Fridge |
["9132"] = 2, --Garrison Buddies |
["5355"] = 2, --General |
["4908"] = 2, --Ghostlands Quests |
["5176"] = 2, --Gnome Slayer |
["5492"] = 2, --Guild Level 25 |
["5124"] = 2, --Guild Northrend Dungeon Hero |
["5437"] = 2, --Guild Warlords |
["8337"] = 2, --Having a Brawl |
["8337"] = 2, --Having a Brawl (Season 1) |
["5376"] = 2, --Hellscream's Reach |
["6941"] = 2, --Hero of the Horde |
["6940"] = 2, --Hero of the Horde: Cataclysmic |
["8657"] = 2, --Hero of the Horde: Grievous |
["8244"] = 2, --Hero of the Horde: Malevolent |
["8659"] = 2, --Hero of the Horde: Prideful |
["9231"] = 2, --Hero of the Horde: Primal |
["6317"] = 2, --Hero of the Horde: Ruthless |
["8653"] = 2, --Hero of the Horde: Tyrannical |
["5358"] = 2, --Hero of the Horde: Vicious |
["9215"] = 2, --Hero of Warspear |
["8366"] = 2, --Heroic: Battle on the High Seas |
["4297"] = 2, --Heroic: Trial of the Champion |
["5110"] = 2, --Heroic: Trial of the Champion Guild Run |
["4895"] = 2, --Hillsbrad Foothills Quests |
["5173"] = 2, --Human Slayer |
["5220"] = 2, --I'm in the Black Lodge |
["8338"] = 2, --I've Got the Biggest Brawls of Them All |
["8338"] = 2, --I've Got the Biggest Brawls of Them All (Season 1) |
["5269"] = 2, --In Service of the Horde |
["5323"] = 2, --In Service of the Horde |
["5324"] = 2, --In Service of the Horde |
["5323"] = 2, --In Service of the Horde |
["5454"] = 2, --Joy Ride |
["5719"] = 2, --Just Another Day in Tol Barad |
["8055"] = 2, --Khan |
["5321"] = 2, --King of the Mountain |
["7529"] = 2, --Kite Fight |
["9475"] = 2, --Laughing Skull Orcs |
["5352"] = 2, --Legionnaire |
["5475"] = 2, --Let's Do Lunch: Orgrimmar |
["5843"] = 2, --Let's Do Lunch: Thunder Bluff |
["5490"] = 2, --Master of Tol Barad |
["6536"] = 2, --Mighty Roamin' Krasaranger |
["4177"] = 2, --Mine |
["9545"] = 2, --More Plots |
["8302"] = 2, --Mount Parade |
["9599"] = 2, --Mountacular |
["9255"] = 2, --Mythic Draenor Raider |
["8928"] = 2, --Nagrandeur |
["9509"] = 2, --Nemesis: Draenei Destroyer |
["9510"] = 2, --Nemesis: Dwarfstalker |
["9511"] = 2, --Nemesis: Gnomebane |
["9512"] = 2, --Nemesis: Manslayer |
["9513"] = 2, --Nemesis: Scourge of the Kaldorei |
["9514"] = 2, --Nemesis: Terror of the Tushui |
["9515"] = 2, --Nemesis: Worgen Hunter |
["5174"] = 2, --Night Elf Slayer |
["7530"] = 2, --No Tank You |
["4933"] = 2, --Northern Barrens Quests |
["8022"] = 2, --Now You're Just Showing Off |
["9175"] = 2, --Now You're Just Showing Off |
["8022"] = 2, --Now You're Just Showing Off (Season 1) |
["8014"] = 2, --Number Five Is Alive |
["9529"] = 2, --On the Shadow's Trail |
["9217"] = 2, --Operation Counterattack |
["6827"] = 2, --Pandaren Ambassador |
["6664"] = 2, --Pandaren Embassy |
["6533"] = 2, --Pandaren Slayer |
["8641"] = 2, --Prideful Combatant |
["8450"] = 2, --Prideful Conquest |
["9236"] = 2, --Primal Combatant |
["9233"] = 2, --Primal Conquest |
["8924"] = 2, --Putting the Gore in Gorgrond |
["7950"] = 2, --Rabble Rabble Rabble |
["9257"] = 2, --Rescue Operation |
["4176"] = 2, --Resource Glut |
["9477"] = 2, --Savage Friends |
["7449"] = 2, --Scenario Roundup |
["7509"] = 2, --Scenaturday |
["5345"] = 2, --Scout |
["9562"] = 2, --Securing Draenor |
["5348"] = 2, --Senior Sergeant |
["5347"] = 2, --Sergeant |
["4894"] = 2, --Silverpine Forest Quests |
["5350"] = 2, --Stone Guard |
["4980"] = 2, --Stonetalon Mountains Quests |
["8209"] = 2, --Sunreaver Onslaught |
["9224"] = 2, --Take Them Out |
["6031"] = 2, --Taking the Show on the Road |
["6602"] = 2, --Taming Kalimdor |
["7948"] = 2, --The First Rule of Brawler's Guild |
["7939"] = 2, --The Second Rule of Brawler's Guild |
["9492"] = 2, --The Garrison Campaign |
["9173"] = 2, --The Second Rule of Brawler's Guild |
["7939"] = 2, --The Second Rule of Brawler's Guild (Season 1) |
["9706"] = 2, --The Stable Master |
["7468"] = 2, --Theramore's Fall |
["7524"] = 2, --Theramore's Fall |
["9715"] = 2, --Thy Kingdom Come |
["5418"] = 2, --Tol Barad Veteran |
["5835"] = 2, --Tricks and Treats of Northrend |
["7602"] = 2, --Tricks and Treats of Pandaria |
["6534"] = 2, --Upjade Complete |
["5325"] = 2, --Veteran of the Horde |
["5824"] = 2, --Veteran of the Horde II |
["9566"] = 2, --Victory in Hillsbrad |
["9473"] = 2, --Vol'jin's Spear |
["5326"] = 2, --Warbringer of the Horde |
["5342"] = 2, --Warlord |
["9508"] = 2, --Warlord of Draenor |
["8015"] = 2, --Waste Not, Want Not |
["7862"] = 2, --We're Going to Need More Saddles |
["8922"] = 2, --Welcome to Draenor |
["5228"] = 2, --Wild Hammering |
["5178"] = 2, --Worgen Slayer |
["8020"] = 2, --You Are Not Your $#*@! Legplates |
["9531"] = 2, --Writing in the Snow |
["9172"] = 2, --You Are Not Your $#*@! Legplates |
["8020"] = 2, --You Are Not Your $#*@! Legplates (Season 1) |
["8671"] = 2, --You'll Get Caught Up In The... Frostfire! |
["4790"] = 2, --Zalazane's Fall |
["762"] = 2, --Ambassador of the Horde |
["1175"] = 2, --Battlemaster |
-- make into AceHook. |
-- @class file |
-- @name AceHook-3.0 |
-- @release $Id: AceHook-3.0.lua 1064 2012-09-04 17:14:01Z nevcairiel $ |
local ACEHOOK_MAJOR, ACEHOOK_MINOR = "AceHook-3.0", 6 |
-- @release $Id: AceHook-3.0.lua 1118 2014-10-12 08:21:54Z nevcairiel $ |
local ACEHOOK_MAJOR, ACEHOOK_MINOR = "AceHook-3.0", 8 |
local AceHook, oldminor = LibStub:NewLibrary(ACEHOOK_MAJOR, ACEHOOK_MINOR) |
if not AceHook then return end -- No upgrade needed |
if not obj or not obj.GetScript or not obj:HasScript(method) then |
error(format("%s: You can only hook a script on a frame object", usage), 3) |
end |
if not secure and obj:IsProtected() and protectedScripts[method] then |
if not secure and obj.IsProtected and obj:IsProtected() and protectedScripts[method] then |
error(format("Cannot hook secure script %q; Use SecureHookScript(obj, method, [handler]) instead.", method), 3) |
end |
else |
end |
if script then |
-- If the script is empty before, HookScript will not work, so use SetScript instead |
-- This will make the hook insecure, but shouldnt matter, since it was empty before. |
-- It does not taint the full frame. |
if not secure or orig == donothing then |
if not secure then |
obj:SetScript(method, uid) |
elseif secure then |
else |
obj:HookScript(method, uid) |
end |
else |
--[[ $Id: AceGUIWidget-DropDown.lua 1029 2011-06-10 23:10:58Z nevcairiel $ ]]-- |
--[[ $Id: AceGUIWidget-DropDown.lua 1116 2014-10-12 08:15:46Z nevcairiel $ ]]-- |
local AceGUI = LibStub("AceGUI-3.0") |
-- Lua APIs |
do |
local widgetType = "Dropdown" |
local widgetVersion = 25 |
local widgetVersion = 30 |
--[[ Static data ]]-- |
--[[ UI event handler ]]-- |
local function Control_OnEnter(this) |
this.obj.button:LockHighlight() |
this.obj:Fire("OnEnter") |
end |
local function Control_OnLeave(this) |
this.obj.button:UnlockHighlight() |
this.obj:Fire("OnLeave") |
end |
AceGUI:ClearFocus() |
else |
self.open = true |
self.pullout:SetWidth(self.frame:GetWidth()) |
self.pullout:SetWidth(self.pulloutWidth or self.frame:GetWidth()) |
self.pullout:Open("TOPLEFT", self.frame, "BOTTOMLEFT", 0, self.label:IsShown() and -2 or 0) |
AceGUI:SetFocus(self) |
end |
end |
self.open = true |
self:Fire("OnOpened") |
end |
local function OnPulloutClose(this) |
self:SetHeight(44) |
self:SetWidth(200) |
self:SetLabel() |
self:SetPulloutWidth(nil) |
end |
-- exported, AceGUI callback |
if disabled then |
self.text:SetTextColor(0.5,0.5,0.5) |
self.button:Disable() |
self.button_cover:Disable() |
self.label:SetTextColor(0.5,0.5,0.5) |
else |
self.button:Enable() |
self.button_cover:Enable() |
self.label:SetTextColor(1,.82,0) |
self.text:SetTextColor(1,1,1) |
end |
if text and text ~= "" then |
self.label:SetText(text) |
self.label:Show() |
self.dropdown:SetPoint("TOPLEFT",self.frame,"TOPLEFT",-15,-18) |
self:SetHeight(44) |
self.alignoffset = 30 |
self.dropdown:SetPoint("TOPLEFT",self.frame,"TOPLEFT",-15,-14) |
self:SetHeight(40) |
self.alignoffset = 26 |
else |
self.label:SetText("") |
self.label:Hide() |
return self.multiselect |
end |
local function SetPulloutWidth(self, width) |
self.pulloutWidth = width |
end |
--[[ Constructor ]]-- |
local function Constructor() |
self.GetMultiselect = GetMultiselect |
self.SetItemValue = SetItemValue |
self.SetItemDisabled = SetItemDisabled |
self.SetPulloutWidth = SetPulloutWidth |
self.alignoffset = 30 |
self.alignoffset = 26 |
frame:SetScript("OnHide",Dropdown_OnHide) |
button:SetScript("OnLeave",Control_OnLeave) |
button:SetScript("OnClick",Dropdown_TogglePullout) |
local button_cover = CreateFrame("BUTTON",nil,self.frame) |
self.button_cover = button_cover |
button_cover.obj = self |
button_cover:SetPoint("TOPLEFT",self.frame,"BOTTOMLEFT",0,25) |
button_cover:SetPoint("BOTTOMRIGHT",self.frame,"BOTTOMRIGHT") |
button_cover:SetScript("OnEnter",Control_OnEnter) |
button_cover:SetScript("OnLeave",Control_OnLeave) |
button_cover:SetScript("OnClick",Dropdown_TogglePullout) |
local text = _G[dropdown:GetName() .. "Text"] |
self.text = text |
text.obj = self |
--[[----------------------------------------------------------------------------- |
EditBox Widget |
-------------------------------------------------------------------------------]] |
local Type, Version = "EditBox", 24 |
local Type, Version = "EditBox", 25 |
local AceGUI = LibStub and LibStub("AceGUI-3.0", true) |
if not AceGUI or (AceGUI:GetWidgetVersion(Type) or 0) >= Version then return end |
self:SetText(name) |
self:Fire("OnEnterPressed", name) |
ClearCursor() |
elseif type == "macro" then |
local name = GetMacroInfo(id) |
self:SetText(name) |
self:Fire("OnEnterPressed", name) |
ClearCursor() |
end |
HideButton(self) |
AceGUI:ClearFocus() |
Button Widget |
Graphical Button. |
-------------------------------------------------------------------------------]] |
local Type, Version = "Button", 22 |
local Type, Version = "Button", 23 |
local AceGUI = LibStub and LibStub("AceGUI-3.0", true) |
if not AceGUI or (AceGUI:GetWidgetVersion(Type) or 0) >= Version then return end |
self:SetHeight(24) |
self:SetWidth(200) |
self:SetDisabled(false) |
self:SetAutoWidth(false) |
self:SetText() |
end, |
["SetText"] = function(self, text) |
self.text:SetText(text) |
if self.autoWidth then |
self:SetWidth(self.text:GetStringWidth() + 30) |
end |
end, |
["SetAutoWidth"] = function(self, autoWidth) |
self.autoWidth = autoWidth |
if self.autoWidth then |
self:SetWidth(self.text:GetStringWidth() + 30) |
end |
end, |
["SetDisabled"] = function(self, disabled) |
self.disabled = disabled |
--[[----------------------------------------------------------------------------- |
ColorPicker Widget |
-------------------------------------------------------------------------------]] |
local Type, Version = "ColorPicker", 21 |
local Type, Version = "ColorPicker", 22 |
local AceGUI = LibStub and LibStub("AceGUI-3.0", true) |
if not AceGUI or (AceGUI:GetWidgetVersion(Type) or 0) >= Version then return end |
local self = frame.obj |
if not self.disabled then |
ColorPickerFrame:SetFrameStrata("FULLSCREEN_DIALOG") |
ColorPickerFrame:SetFrameLevel(frame:GetFrameLevel() + 10) |
ColorPickerFrame:SetClampedToScreen(true) |
ColorPickerFrame.func = function() |
Slider Widget |
Graphical Slider, like, for Range values. |
-------------------------------------------------------------------------------]] |
local Type, Version = "Slider", 20 |
local Type, Version = "Slider", 21 |
local AceGUI = LibStub and LibStub("AceGUI-3.0", true) |
if not AceGUI or (AceGUI:GetWidgetVersion(Type) or 0) >= Version then return end |
local self = frame.obj |
if not frame.setup then |
local newvalue = frame:GetValue() |
if self.step and self.step > 0 then |
local min_value = self.min or 0 |
newvalue = floor((newvalue - min_value) / self.step + 0.5) * self.step + min_value |
end |
if newvalue ~= self.value and not self.disabled then |
self.value = newvalue |
self:Fire("OnValueChanged", newvalue) |
-- f:AddChild(btn) |
-- @class file |
-- @name AceGUI-3.0 |
-- @release $Id: AceGUI-3.0.lua 924 2010-05-13 15:12:20Z nevcairiel $ |
local ACEGUI_MAJOR, ACEGUI_MINOR = "AceGUI-3.0", 33 |
-- @release $Id: AceGUI-3.0.lua 1102 2013-10-25 14:15:23Z nevcairiel $ |
local ACEGUI_MAJOR, ACEGUI_MINOR = "AceGUI-3.0", 34 |
local AceGUI, oldminor = LibStub:NewLibrary(ACEGUI_MAJOR, ACEGUI_MINOR) |
if not AceGUI then return end -- No upgrade needed |
end |
end) |
local layoutrecursionblock = nil |
local function safelayoutcall(object, func, ...) |
layoutrecursionblock = true |
object[func](object, ...) |
layoutrecursionblock = nil |
end |
AceGUI:RegisterLayout("Flow", |
function(content, children) |
if layoutrecursionblock then return end |
--used height so far |
local height = 0 |
--width used in the current row |
end |
if child.width == "fill" then |
child:SetWidth(width) |
safelayoutcall(child, "SetWidth", width) |
frame:SetPoint("RIGHT", content) |
usedwidth = 0 |
rowoffset = child.alignoffset or (rowheight / 2) |
rowstartoffset = rowoffset |
elseif child.width == "relative" then |
child:SetWidth(width * child.relWidth) |
safelayoutcall(child, "SetWidth", width * child.relWidth) |
if child.DoLayout then |
child:DoLayout() |
-- :IterateOptionsTables() (and :GetOptionsTable() if only given one argument) return a function reference that the requesting config handling addon must call with valid "uiType", "uiName". |
-- @class file |
-- @name AceConfigRegistry-3.0 |
-- @release $Id: AceConfigRegistry-3.0.lua 1045 2011-12-09 17:58:40Z nevcairiel $ |
local MAJOR, MINOR = "AceConfigRegistry-3.0", 14 |
-- @release $Id: AceConfigRegistry-3.0.lua 1105 2013-12-08 22:11:58Z nevcairiel $ |
local MAJOR, MINOR = "AceConfigRegistry-3.0", 15 |
local AceConfigRegistry = LibStub:NewLibrary(MAJOR, MINOR) |
if not AceConfigRegistry then return end |
-- @param appName The application name as given to `:RegisterOptionsTable()` |
-- @param options The options table, OR a function reference that generates it on demand. \\ |
-- See the top of the page for info on arguments passed to such functions. |
function AceConfigRegistry:RegisterOptionsTable(appName, options) |
-- @param skipValidation Skip options table validation (primarily useful for extremely huge options, with a noticeable slowdown) |
function AceConfigRegistry:RegisterOptionsTable(appName, options, skipValidation) |
if type(options)=="table" then |
if options.type~="group" then -- quick sanity checker |
error(MAJOR..": RegisterOptionsTable(appName, options): 'options' - missing type='group' member in root group", 2) |
AceConfigRegistry.tables[appName] = function(uiType, uiName, errlvl) |
errlvl=(errlvl or 0)+1 |
validateGetterArgs(uiType, uiName, errlvl) |
if not AceConfigRegistry.validated[uiType][appName] then |
if not AceConfigRegistry.validated[uiType][appName] and not skipValidation then |
AceConfigRegistry:ValidateOptionsTable(options, appName, errlvl) -- upgradable |
AceConfigRegistry.validated[uiType][appName] = true |
end |
errlvl=(errlvl or 0)+1 |
validateGetterArgs(uiType, uiName, errlvl) |
local tab = assert(options(uiType, uiName, appName)) |
if not AceConfigRegistry.validated[uiType][appName] then |
if not AceConfigRegistry.validated[uiType][appName] and not skipValidation then |
AceConfigRegistry:ValidateOptionsTable(tab, appName, errlvl) -- upgradable |
AceConfigRegistry.validated[uiType][appName] = true |
end |
--- AceConfigDialog-3.0 generates AceGUI-3.0 based windows based on option tables. |
-- @class file |
-- @name AceConfigDialog-3.0 |
-- @release $Id: AceConfigDialog-3.0.lua 1049 2012-04-02 13:22:10Z mikk $ |
-- @release $Id: AceConfigDialog-3.0.lua 1126 2014-11-10 06:38:01Z nevcairiel $ |
local LibStub = LibStub |
local MAJOR, MINOR = "AceConfigDialog-3.0", 57 |
local MAJOR, MINOR = "AceConfigDialog-3.0", 60 |
local AceConfigDialog, oldminor = LibStub:NewLibrary(MAJOR, MINOR) |
if not AceConfigDialog then return end |
if descStyle and descStyle ~= "tooltip" then return end |
GameTooltip:SetText(name, 1, .82, 0, 1) |
GameTooltip:SetText(name, 1, .82, 0, true) |
if opt.type == "multiselect" then |
GameTooltip:AddLine(user.text,0.5, 0.5, 0.8, 1) |
GameTooltip:AddLine(user.text, 0.5, 0.5, 0.8, true) |
end |
if type(desc) == "string" then |
GameTooltip:AddLine(desc, 1, 1, 1, 1) |
GameTooltip:AddLine(desc, 1, 1, 1, true) |
end |
if type(usage) == "string" then |
GameTooltip:AddLine("Usage: "..usage, NORMAL_FONT_COLOR.r, NORMAL_FONT_COLOR.g, NORMAL_FONT_COLOR.b, 1) |
GameTooltip:AddLine("Usage: "..usage, NORMAL_FONT_COLOR.r, NORMAL_FONT_COLOR.g, NORMAL_FONT_COLOR.b, true) |
end |
GameTooltip:Show() |
t.text = message |
t.button1 = ACCEPT |
t.button2 = CANCEL |
t.preferredIndex = 3 |
t.preferredIndex = STATICPOPUP_NUMDIALOGS |
local dialog, oldstrata |
t.OnAccept = function() |
safecall(func, unpack(t)) |
GameTooltip:SetPoint("LEFT",button,"RIGHT") |
end |
GameTooltip:SetText(name, 1, .82, 0, 1) |
GameTooltip:SetText(name, 1, .82, 0, true) |
if type(desc) == "string" then |
GameTooltip:AddLine(desc, 1, 1, 1, 1) |
GameTooltip:AddLine(desc, 1, 1, 1, true) |
end |
GameTooltip:Show() |
tinsert(path, (select(n, ...))) |
end |
local option = options |
if type(container) == "table" and container.type == "BlizOptionsGroup" and #path > 0 then |
for i = 1, #path do |
option = options.args[path[i]] |
end |
name = format("%s - %s", name, GetOptionsMemberValue("name", option, options, path, appName)) |
end |
--if a container is given feed into that |
if container then |
f = container |
-- end |
-- @class file |
-- @name AceDB-3.0.lua |
-- @release $Id: AceDB-3.0.lua 1035 2011-07-09 03:20:13Z kaelten $ |
local ACEDB_MAJOR, ACEDB_MINOR = "AceDB-3.0", 22 |
-- @release $Id: AceDB-3.0.lua 1124 2014-10-27 21:00:07Z funkydude $ |
local ACEDB_MAJOR, ACEDB_MINOR = "AceDB-3.0", 26 |
local AceDB, oldminor = LibStub:NewLibrary(ACEDB_MAJOR, ACEDB_MINOR) |
if not AceDB then return end -- No upgrade needed |
local _, raceKey = UnitRace("player") |
local factionKey = UnitFactionGroup("player") |
local factionrealmKey = factionKey .. " - " .. realmKey |
local factionrealmregionKey = factionrealmKey .. " - " .. string.sub(GetCVar("realmList"), 1, 2):upper() |
local localeKey = GetLocale():lower() |
local regionTable = { "US", "KR", "EU", "TW", "CN" } |
local regionKey = regionTable[GetCurrentRegion()] |
local factionrealmregionKey = factionrealmKey .. " - " .. regionKey |
-- Actual database initialization function |
local function initdb(sv, defaults, defaultProfile, olddb, parent) |
-- Generate the database keys for each section |
["factionrealm"] = factionrealmKey, |
["factionrealmregion"] = factionrealmregionKey, |
["profile"] = profileKey, |
["locale"] = localeKey, |
["locale"] = localeKey, |
["global"] = true, |
["profiles"] = true, |
} |
end |
end |
-- switch all characters that use this profile back to the default |
if self.sv.profileKeys then |
for key, profile in pairs(self.sv.profileKeys) do |
if profile == name then |
self.sv.profileKeys[key] = nil |
end |
end |
end |
-- Callback: OnProfileDeleted, database, profileKey |
self.callbacks:Fire("OnProfileDeleted", self, name) |
end |