7.3.2 (#6)
* update to release 7.3.1 * minor tweaks - tweaked the drop location text to display a bit more cleanly - added boss sigils to bc raid tables - added right click context menu to boss name list so you can open db to that boss (only has raids atm) - the All dungeon items list now wont precache past the normal loot
This commit is contained in:
@@ -2,13 +2,13 @@
|
||||
## Title: AtlasLoot Ascension Edition
|
||||
## Notes: Shows the possible loot from the bosses
|
||||
## Author: v7 Rebuid Done by: Anch, Rvng
|
||||
## Version: v7.2.8
|
||||
## Version: v7.3.2
|
||||
## X-eMail:
|
||||
## X-Credits: Skray, Szyler and others.
|
||||
## X-Category: Map
|
||||
## X-License: GPL v2
|
||||
## X-Website: https://discord.gg/uYCE2X2FgA
|
||||
## X-Embeds: Ace3, DewdropLib, FuBarPlugin-2.0, LibBabble-Boss-3.0, LibBabble-Faction-3.0, LibBabble-Inventory-3.0, LibBabble-Zone-3.0
|
||||
## X-Embeds: Ace3, DewdropLib, LibBabble-Boss-3.0, LibBabble-Faction-3.0, LibBabble-Inventory-3.0, LibBabble-Zone-3.0
|
||||
## Title-deDE: AtlasLoot Enhanced
|
||||
## Notes-deDE: Zeigt mögliche Beute von Bossen
|
||||
## Title-frFR: AtlasLoot Enhanced
|
||||
|
||||
@@ -3,18 +3,9 @@
|
||||
AtlasLoot.Difficultys["Default"] = {};
|
||||
|
||||
AtlasLoot.Difficultys["ClassicDungeon"] = {
|
||||
{"Bloodforged", 1},
|
||||
{"Normal", 2},
|
||||
{"Heroic", 3},
|
||||
{"Mythic", 4},
|
||||
{"Mythic 1", 5 }, {"Mythic 2", 6 }, {"Mythic 3", 7 }, {"Mythic 4", 8 }, {"Mythic 5", 9 },
|
||||
{"Mythic 6", 10 }, {"Mythic 7", 11 }, {"Mythic 8", 12 }, {"Mythic 9", 13 }, {"Mythic 10", 14 },
|
||||
{"Mythic 11", 15 }, {"Mythic 12", 16 }, {"Mythic 13", 17 }, {"Mythic 14", 18 }, {"Mythic 15", 19 },
|
||||
{"Mythic 16", 20 }, {"Mythic 17", 21 }, {"Mythic 18", 22 }, {"Mythic 19", 23 }, {"Mythic 20", 24 },
|
||||
{"Mythic 21", 25 }, {"Mythic 22", 26 }, {"Mythic 23", 27 }, {"Mythic 24", 28 }, {"Mythic 25", 29 },
|
||||
{"Mythic 26", 30 }, {"Mythic 27", 31 }, {"Mythic 28", 32 }, {"Mythic 29", 33 }, {"Mythic 30", 34 },
|
||||
{"Mythic 31", 35 }, {"Mythic 32", 36 }, {"Mythic 33", 37 }, {"Mythic 34", 38 }, {"Mythic 35", 39 },
|
||||
{"Mythic 36", 40 }, {"Mythic 37", 41 }, {"Mythic 38", 42 }, {"Mythic 39", 43 }, {"Mythic 40", 44 },
|
||||
};
|
||||
|
||||
AtlasLoot.Difficultys["PVP"] = {
|
||||
|
||||
@@ -553,6 +553,7 @@ function AtlasLoot:CreateOnDemandLootTable(type)
|
||||
for _, t in ipairs(data) do
|
||||
for _, itemData in pairs(t) do
|
||||
if itemData.itemID and not checkList[itemData.itemID] then
|
||||
itemData.dropLoc = {data.DisplayName or data.Name, t.Name}
|
||||
checkList[itemData.itemID] = true
|
||||
tinsert(itemList, {itemData})
|
||||
end
|
||||
@@ -665,6 +666,10 @@ function AtlasLoot:ShowItemsFrame(dataID, dataSource_backup, tablenum)
|
||||
end
|
||||
end
|
||||
|
||||
if dataSource_backup ~= "AtlasLootFilter" then
|
||||
self.dataSourceBackup = dataSource_backup
|
||||
end
|
||||
|
||||
-- Moves the difficulty scrollslider if the difficulty has changed
|
||||
if dataSource[dataID].Type and difType and #self.Difficultys[dataSource[dataID].Type] > 5 and findTypeNumber() > 5 then
|
||||
local min, max = AtlasLootDefaultFrameScrollScrollBar:GetMinMaxValues()
|
||||
@@ -822,12 +827,14 @@ function AtlasLoot:ShowItemsFrame(dataID, dataSource_backup, tablenum)
|
||||
end
|
||||
|
||||
itemButton.name = text
|
||||
|
||||
--Insert the item description
|
||||
if self.FixedItemText[dataSource[dataID][tablenum][i].itemID] then
|
||||
extra = self.FixedItemText[dataSource[dataID][tablenum][i].itemID]
|
||||
elseif dataSource[dataID][tablenum][i].desc then
|
||||
extra = dataSource[dataID][tablenum][i].desc
|
||||
elseif dataSource[dataID][tablenum][i].dropLoc and (self.dataSourceBackup == "AtlasLoot_OnDemand" or (self.db.profile.showdropLocationOnSearch and dataID == "SearchResult")) then
|
||||
local location, boss = dataSource[dataID][tablenum][i].dropLoc[1], dataSource[dataID][tablenum][i].dropLoc[2]
|
||||
extra = YELLOW..location..WHITE.." - "..boss
|
||||
elseif AtlasLoot_CraftingData["CraftingLevels"] and spellID and AtlasLoot_CraftingData["CraftingLevels"][spellID] and dataID ~= "SearchResult" then
|
||||
local lvls = AtlasLoot_CraftingData["CraftingLevels"][spellID]
|
||||
extra = LIMEGREEN .. "L-Click:|r "..WHITE..dataSource[dataID].Name.." ( "..ORANGE..lvls[1].."|r "..YELLOW..lvls[2].."|r "..GREEN..lvls[3].."|r "..GREY..lvls[4]..WHITE.." )"
|
||||
@@ -884,7 +891,7 @@ function AtlasLoot:ShowItemsFrame(dataID, dataSource_backup, tablenum)
|
||||
itemButton.itemTexture = iconFrame:GetTexture()
|
||||
|
||||
--Highlight items in the wishlist
|
||||
if itemID and dataSource_backup ~= "AtlasLoot_CurrentWishList" and AtlasLootWishList["Options"][UnitName("player")]["Mark"] == true then
|
||||
if itemID and dataSource_backup ~= "AtlasLoot_CurrentWishList" and (AtlasLootWishList["Options"][UnitName("player")] and AtlasLootWishList["Options"][UnitName("player")]["Mark"]) then
|
||||
local xitemexistwish, itemwishicons = self:WishListCheck(itemID, true)
|
||||
if xitemexistwish then
|
||||
text = itemwishicons.." "..text
|
||||
@@ -1107,7 +1114,7 @@ function AtlasLoot:ShowItemsFrame(dataID, dataSource_backup, tablenum)
|
||||
if self.filterEnable and dataID ~= "FilterList" then
|
||||
self:HideFilteredItems()
|
||||
end
|
||||
if dataID ~= "SearchResult" then
|
||||
if dataID ~= "SearchResult" and dataSource_backup ~= "AtlasLoot_OnDemand" then
|
||||
--preload items from the rest of the instance table
|
||||
self:PreLoadLootTable(dataSource, dataID, ItemindexID)
|
||||
end
|
||||
@@ -1248,14 +1255,16 @@ function AtlasLoot:PreLoadLootTable(dataSource, dataID, ItemindexID)
|
||||
if isLoaded[dataID] and isLoaded[dataID][ItemindexID] then return end
|
||||
for _, instance in ipairs(dataSource[dataID]) do
|
||||
for _, boss in pairs(instance) do
|
||||
local itemID = ItemIDsDatabase[boss.itemID] and ItemIDsDatabase[boss.itemID][ItemindexID] or boss.itemID
|
||||
if itemID then
|
||||
local item = Item:CreateFromID(itemID)
|
||||
if item and not item:GetInfo() then
|
||||
self:ItemsLoading(1)
|
||||
item:ContinueOnLoad(function(itemID)
|
||||
self:ItemsLoading(-1)
|
||||
end)
|
||||
if type(boss) == "table" then
|
||||
local itemID = ItemIDsDatabase[boss.itemID] and ItemIDsDatabase[boss.itemID][ItemindexID] or boss.itemID
|
||||
if itemID then
|
||||
local item = Item:CreateFromID(itemID)
|
||||
if item and not item:GetInfo() then
|
||||
self:ItemsLoading(1)
|
||||
item:ContinueOnLoad(function(itemID)
|
||||
self:ItemsLoading(-1)
|
||||
end)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,402 +0,0 @@
|
||||
local AL = LibStub("AceLocale-3.0"):GetLocale("AtlasLoot");
|
||||
local BabbleInventory = AtlasLoot_GetLocaleLibBabble("LibBabble-Inventory-3.0")
|
||||
|
||||
-- Colours stored for code readability
|
||||
local GREY = "|cff999999";
|
||||
local RED = "|cffff0000";
|
||||
local WHITE = "|cffFFFFFF";
|
||||
local GREEN = "|cff1eff00";
|
||||
local PURPLE = "|cff9F3FFF";
|
||||
local BLUE = "|cff0070dd";
|
||||
local ORANGE = "|cffFF8400";
|
||||
local INDENT = " ";
|
||||
|
||||
AtlasLoot_ExtraText = {
|
||||
AhnKahet = {
|
||||
"";
|
||||
GREY..INDENT..AL["Trash Mobs"];
|
||||
};
|
||||
AzjolNerub = {
|
||||
"";
|
||||
GREY..INDENT..AL["Trash Mobs"];
|
||||
};
|
||||
AuchAuchenaiCrypts = {
|
||||
"";
|
||||
GREY..INDENT..AL["Trash Mobs"];
|
||||
};
|
||||
AuchManaTombs = {
|
||||
"";
|
||||
GREY..INDENT..AL["Trash Mobs"];
|
||||
};
|
||||
AuchSethekkHalls = {
|
||||
"";
|
||||
GREY..INDENT..AL["Trash Mobs"];
|
||||
};
|
||||
AuchShadowLabyrinth = {
|
||||
"";
|
||||
GREY..INDENT..AL["Trash Mobs"];
|
||||
};
|
||||
BlackfathomDeeps = {
|
||||
"";
|
||||
GREY..INDENT..AL["Trash Mobs"];
|
||||
};
|
||||
BlackrockDepths = {
|
||||
"";
|
||||
GREY..INDENT..AL["Trash Mobs"];
|
||||
GREY..INDENT..AL["Set: The Gladiator"];
|
||||
};
|
||||
BlackrockSpireLower = {
|
||||
"";
|
||||
"";
|
||||
GREY..INDENT..AL["Trash Mobs"];
|
||||
GREY..INDENT..AL["Dungeon 1/2 Sets"];
|
||||
};
|
||||
BlackrockSpireUpper = {
|
||||
"";
|
||||
GREY..INDENT..AL["Trash Mobs"];
|
||||
GREY..INDENT..AL["Dungeon 1/2 Sets"];
|
||||
};
|
||||
BlackTempleStart = {
|
||||
"";
|
||||
GREY..INDENT..AL["BT Patterns/Plans"];
|
||||
GREY..INDENT..AL["Trash Mobs"];
|
||||
};
|
||||
BlackTempleBasement = {
|
||||
"";
|
||||
GREY..INDENT..AL["BT Patterns/Plans"];
|
||||
GREY..INDENT..AL["Trash Mobs"];
|
||||
};
|
||||
BlackTempleMiddle = {
|
||||
"";
|
||||
GREY..INDENT..AL["BT Patterns/Plans"];
|
||||
GREY..INDENT..AL["Trash Mobs"];
|
||||
};
|
||||
BlackTempleTop = {
|
||||
"";
|
||||
GREY..INDENT..AL["BT Patterns/Plans"];
|
||||
GREY..INDENT..AL["Trash Mobs"];
|
||||
};
|
||||
BlackTempleFull = {
|
||||
"";
|
||||
GREY..INDENT..AL["BT Patterns/Plans"];
|
||||
GREY..INDENT..AL["Trash Mobs"];
|
||||
};
|
||||
BlackwingLair = {
|
||||
"";
|
||||
GREY..INDENT..AL["Trash Mobs"];
|
||||
GREY..INDENT..AL["Tier 2 Sets"];
|
||||
};
|
||||
CFRTheSteamvault = {
|
||||
"";
|
||||
GREY..INDENT..AL["Trash Mobs"];
|
||||
};
|
||||
|
||||
CFRSerpentshrineCavern = {
|
||||
"";
|
||||
GREY..INDENT..AL["Trash Mobs"];
|
||||
};
|
||||
|
||||
CoTOldHillsbrad = {
|
||||
"";
|
||||
GREY..INDENT..AL["Trash Mobs"];
|
||||
};
|
||||
CoTBlackMorass = {
|
||||
"";
|
||||
GREY..INDENT..AL["Trash Mobs"];
|
||||
};
|
||||
CoTHyjal = {
|
||||
"";
|
||||
GREY..INDENT..AL["Trash Mobs"];
|
||||
};
|
||||
CoTOldStratholme = {
|
||||
"";
|
||||
GREY..INDENT..AL["Trash Mobs"];
|
||||
};
|
||||
TheDeadmines = {
|
||||
"";
|
||||
GREY..INDENT..AL["Set: Defias Leather"];
|
||||
};
|
||||
DireMaulEast = {
|
||||
"";
|
||||
GREY..INDENT..AL["Trash Mobs"];
|
||||
GREY..INDENT..AL["Dire Maul Books"];
|
||||
};
|
||||
DireMaulNorth = {
|
||||
"";
|
||||
GREY..INDENT..AL["Tribute Run"];
|
||||
GREY..INDENT..AL["Dire Maul Books"];
|
||||
};
|
||||
DireMaulWest = {
|
||||
"";
|
||||
GREY..INDENT..AL["Trash Mobs"];
|
||||
GREY..INDENT..AL["Dire Maul Books"];
|
||||
};
|
||||
DrakTharonKeep = {
|
||||
"";
|
||||
GREY..INDENT..AL["Trash Mobs"];
|
||||
};
|
||||
FHTheForgeOfSouls = {
|
||||
"";
|
||||
GREY..INDENT..AL["Trash Mobs"];
|
||||
};
|
||||
FHPitOfSaron = {
|
||||
"";
|
||||
GREY..INDENT..AL["Trash Mobs"];
|
||||
};
|
||||
FHHallsOfReflection = {
|
||||
"";
|
||||
GREY..INDENT..AL["Trash Mobs"];
|
||||
};
|
||||
Gnomeregan = {
|
||||
"";
|
||||
GREY..INDENT..AL["Trash Mobs"];
|
||||
};
|
||||
Gundrak = {
|
||||
"";
|
||||
GREY..INDENT..AL["Trash Mobs"];
|
||||
};
|
||||
HCTheShatteredHalls = {
|
||||
"";
|
||||
GREY..INDENT..AL["Trash Mobs"];
|
||||
};
|
||||
IcecrownStart = {
|
||||
"";
|
||||
GREY..INDENT..AL["Trash Mobs"];
|
||||
};
|
||||
IcecrownCitadelA = {
|
||||
"";
|
||||
GREY..INDENT..AL["Trash Mobs"];
|
||||
};
|
||||
IcecrownCitadelB = {
|
||||
"";
|
||||
GREY..INDENT..AL["Trash Mobs"];
|
||||
};
|
||||
IcecrownCitadelC = {
|
||||
"";
|
||||
GREY..INDENT..AL["Trash Mobs"];
|
||||
};
|
||||
Karazhan = {
|
||||
"";
|
||||
GREY..INDENT..AL["Trash Mobs"];
|
||||
};
|
||||
KarazhanStart = {
|
||||
"";
|
||||
GREY..INDENT..AL["Trash Mobs"];
|
||||
};
|
||||
KarazhanEnd = {
|
||||
"";
|
||||
GREY..INDENT..AL["Trash Mobs"];
|
||||
};
|
||||
MagistersTerrace = {
|
||||
"";
|
||||
GREY..INDENT..AL["Trash Mobs"];
|
||||
};
|
||||
MoltenCore = {
|
||||
"";
|
||||
GREY..INDENT..AL["Tier 1 Sets"];
|
||||
GREY..INDENT..AL["Random Boss Loot"];
|
||||
GREY..INDENT..AL["Trash Mobs"];
|
||||
};
|
||||
Naxxramas = {
|
||||
"";
|
||||
GREY..INDENT..AL["Trash Mobs"];
|
||||
GREY..INDENT..AL["Tier 7/8 Sets"];
|
||||
};
|
||||
RazorfenDowns = {
|
||||
"";
|
||||
GREY..INDENT..AL["Trash Mobs"];
|
||||
};
|
||||
RazorfenKraul = {
|
||||
"";
|
||||
GREY..INDENT..AL["Trash Mobs"];
|
||||
};
|
||||
TempestKeepMechanar = {
|
||||
"";
|
||||
GREY..INDENT..AL["Trash Mobs"];
|
||||
};
|
||||
TempestKeepBotanica = {
|
||||
"";
|
||||
GREY..INDENT..AL["Trash Mobs"];
|
||||
};
|
||||
TempestKeepArcatraz = {
|
||||
"";
|
||||
GREY..INDENT..AL["Trash Mobs"];
|
||||
};
|
||||
TempestKeepTheEye = {
|
||||
"";
|
||||
GREY..INDENT..AL["Legendary Items for Kael'thas Fight"];
|
||||
GREY..INDENT..AL["Trash Mobs"];
|
||||
};
|
||||
TheOculus = {
|
||||
"";
|
||||
GREY..INDENT..AL["Trash Mobs"];
|
||||
};
|
||||
TheRuinsofAhnQiraj = {
|
||||
"";
|
||||
GREY..INDENT..AL["Trash Mobs"];
|
||||
GREY..INDENT..AL["Class Books"];
|
||||
GREY..INDENT..AL["AQ Enchants"];
|
||||
GREY..INDENT..AL["AQ20 Class Sets"];
|
||||
};
|
||||
SMArmory = {
|
||||
"";
|
||||
GREY..INDENT..AL["Trash Mobs"];
|
||||
GREY..INDENT..AL["Set: Chain of the Scarlet Crusade"];
|
||||
};
|
||||
SMCathedral = {
|
||||
"";
|
||||
GREY..INDENT..AL["Trash Mobs"];
|
||||
GREY..INDENT..AL["Set: Chain of the Scarlet Crusade"];
|
||||
};
|
||||
SMGraveyard = {
|
||||
"";
|
||||
GREY..INDENT..AL["Trash Mobs"];
|
||||
GREY..INDENT..AL["Set: Chain of the Scarlet Crusade"];
|
||||
};
|
||||
SMLibrary = {
|
||||
"";
|
||||
GREY..INDENT..AL["Trash Mobs"];
|
||||
GREY..INDENT..AL["Set: Chain of the Scarlet Crusade"];
|
||||
};
|
||||
Scholomance = {
|
||||
"";
|
||||
GREY..INDENT..AL["Trash Mobs"];
|
||||
GREY..INDENT..AL["Set: Necropile Raiment"];
|
||||
GREY..INDENT..AL["Set: Cadaverous Garb"];
|
||||
GREY..INDENT..AL["Set: Bloodmail Regalia"];
|
||||
GREY..INDENT..AL["Set: Deathbone Guardian"];
|
||||
};
|
||||
ShadowfangKeep = {
|
||||
"";
|
||||
GREY..INDENT..AL["Trash Mobs"];
|
||||
};
|
||||
TheStockade = {
|
||||
"";
|
||||
GREY..INDENT..AL["Trash Mobs"];
|
||||
};
|
||||
Stratholme = {
|
||||
"";
|
||||
GREY..INDENT..AL["Trash Mobs"];
|
||||
};
|
||||
SunwellPlateau = {
|
||||
"";
|
||||
GREY..INDENT..AL["SP Patterns/Plans"];
|
||||
GREY..INDENT..AL["Trash Mobs"];
|
||||
};
|
||||
TheSunkenTemple = {
|
||||
"";
|
||||
GREY..INDENT..AL["Trash Mobs"];
|
||||
};
|
||||
TheTempleofAhnQiraj = {
|
||||
"";
|
||||
GREY..INDENT..AL["Trash Mobs"];
|
||||
GREY..INDENT..AL["AQ Enchants"];
|
||||
GREY..INDENT..AL["AQ40 Class Sets"];
|
||||
GREY..INDENT..AL["AQ Opening Quest Chain"];
|
||||
};
|
||||
TrialOfTheCrusader = {
|
||||
"";
|
||||
GREY..INDENT..AL["Tribute Run"];
|
||||
GREY..INDENT..AL["Trial of the Crusader Patterns/Plans"];
|
||||
};
|
||||
Uldaman = {
|
||||
"";
|
||||
GREY..INDENT..AL["Trash Mobs"];
|
||||
};
|
||||
UlduarHallsofLightning = {
|
||||
"";
|
||||
GREY..INDENT..AL["Trash Mobs"];
|
||||
};
|
||||
UlduarA = {
|
||||
"";
|
||||
GREY..INDENT..AL["Trash Mobs"];
|
||||
GREY..INDENT..AL["Ulduar Formula/Patterns/Plans"];
|
||||
GREY..INDENT..AL["Tier 7/8 Sets"];
|
||||
};
|
||||
UlduarB = {
|
||||
"";
|
||||
GREY..INDENT..AL["Trash Mobs"];
|
||||
GREY..INDENT..AL["Ulduar Formula/Patterns/Plans"];
|
||||
GREY..INDENT..AL["Tier 7/8 Sets"];
|
||||
};
|
||||
UlduarC = {
|
||||
"";
|
||||
GREY..INDENT..AL["Trash Mobs"];
|
||||
GREY..INDENT..AL["Ulduar Formula/Patterns/Plans"];
|
||||
GREY..INDENT..AL["Tier 7/8 Sets"];
|
||||
};
|
||||
UlduarD = {
|
||||
"";
|
||||
GREY..INDENT..AL["Trash Mobs"];
|
||||
GREY..INDENT..AL["Ulduar Formula/Patterns/Plans"];
|
||||
GREY..INDENT..AL["Tier 7/8 Sets"];
|
||||
};
|
||||
UlduarE = {
|
||||
"";
|
||||
GREY..INDENT..AL["Trash Mobs"];
|
||||
GREY..INDENT..AL["Ulduar Formula/Patterns/Plans"];
|
||||
GREY..INDENT..AL["Tier 7/8 Sets"];
|
||||
};
|
||||
UlduarHallsofStone = {
|
||||
"";
|
||||
GREY..INDENT..AL["Trash Mobs"];
|
||||
};
|
||||
UtgardeKeep = {
|
||||
"";
|
||||
GREY..INDENT..AL["Trash Mobs"];
|
||||
};
|
||||
UtgardePinnacle = {
|
||||
"";
|
||||
GREY..INDENT..AL["Trash Mobs"];
|
||||
};
|
||||
VioletHold = {
|
||||
"";
|
||||
GREY..INDENT..AL["Trash Mobs"];
|
||||
};
|
||||
WailingCaverns = {
|
||||
"";
|
||||
GREY..INDENT..AL["Set: Embrace of the Viper"];
|
||||
};
|
||||
ZulAman = {
|
||||
"";
|
||||
GREY..INDENT..AL["Timed Reward Chest"];
|
||||
GREY..INDENT..AL["Trash Mobs"];
|
||||
"";
|
||||
};
|
||||
ZulFarrak = {
|
||||
"";
|
||||
GREY..INDENT..AL["Trash Mobs"];
|
||||
};
|
||||
ZulGurub = {
|
||||
"";
|
||||
GREY..INDENT..AL["Trash Mobs"];
|
||||
GREY..INDENT..AL["Random Boss Loot"];
|
||||
GREY..INDENT..AL["ZG Class Sets"];
|
||||
GREY..INDENT..AL["ZG Enchants"];
|
||||
};
|
||||
AlteracValleyNorth = {
|
||||
"";
|
||||
GREEN..AL["Misc. Rewards"];
|
||||
GREEN..BabbleInventory["Armor"];
|
||||
};
|
||||
AlteracValleySouth = {
|
||||
"";
|
||||
GREEN..AL["Misc. Rewards"];
|
||||
GREEN..BabbleInventory["Armor"];
|
||||
};
|
||||
ArathiBasin = {
|
||||
"";
|
||||
GREEN..AL["Misc. Rewards"];
|
||||
GREEN..AL["Level 40-49 Rewards"];
|
||||
GREEN..AL["Level 20-39 Rewards"];
|
||||
"";
|
||||
GREEN..AL["Arathi Basin Sets"];
|
||||
};
|
||||
WarsongGulch = {
|
||||
"";
|
||||
GREEN..AL["Misc. Rewards"];
|
||||
GREEN..AL["Accessories"];
|
||||
GREEN..AL["Weapons"];
|
||||
GREEN..BabbleInventory["Armor"];
|
||||
};
|
||||
};
|
||||
@@ -186,11 +186,7 @@ function AtlasLoot:FilterEnableButton(frame, btnclick)
|
||||
self:FilterMenuRegister()
|
||||
self.Dewdrop:Open(frame)
|
||||
end
|
||||
if AtlasLootFilterCheck:GetChecked() then
|
||||
AtlasLootFilterCheck:SetChecked(false)
|
||||
else
|
||||
AtlasLootFilterCheck:SetChecked(true)
|
||||
end
|
||||
AtlasLootFilterCheck:SetChecked(not AtlasLootFilterCheck:GetChecked())
|
||||
else
|
||||
if self.filterEnable then
|
||||
self.filterEnable = false
|
||||
|
||||
@@ -1,312 +0,0 @@
|
||||
ItemIDsDatabase = {};
|
||||
|
||||
--Items not added from generated file
|
||||
ItemIDsDatabase[18563] = { 18563, 18563, 318563, 218563 };
|
||||
ItemIDsDatabase[18564] = { 18564, 18564, 318564, 218564 };
|
||||
ItemIDsDatabase[17204] = { 17204, 17204, 317204, 217204 };
|
||||
ItemIDsDatabase[19017] = { 19017, 19017, 319017, 219017 };
|
||||
ItemIDsDatabase[11879] = { 11879, 11879, 311879, 211879 };
|
||||
|
||||
|
||||
ItemIDsDatabase[22589] = { 6022589, 22589, 322589, 222589 };
|
||||
ItemIDsDatabase[22632] = { 6022632, 22632, 322632, 222632 };
|
||||
ItemIDsDatabase[22631] = { 6022631, 22631, 322631, 222631 };
|
||||
ItemIDsDatabase[22630] = { 6022630, 22630, 322630, 222630 };
|
||||
|
||||
ItemIDsDatabase[2032902] = { 6053891, 2032902, 2232902, 2332902 };
|
||||
ItemIDsDatabase[44831] = { 6044831, 44831, 344831, 244831 };
|
||||
ItemIDsDatabase[27896] = { 6027896, 27896, 27896, 427896 };
|
||||
|
||||
ItemIDsDatabase[30007] = { 6030007, 30007, 330007, 230007 };
|
||||
ItemIDsDatabase[30015] = { 6030015, 30015, 330015, 230015 };
|
||||
ItemIDsDatabase[30017] = { 6030017, 30017, 330017, 230017 };
|
||||
ItemIDsDatabase[30018] = { 6030018, 30018, 330018, 230018 };
|
||||
ItemIDsDatabase[32837] = { 6032837, 32837, 332837, 232837 };
|
||||
ItemIDsDatabase[32838] = { 6032838, 32838, 332838, 232838 };
|
||||
ItemIDsDatabase[30104] = { 6033482, 30104, 330104, 230104 };
|
||||
|
||||
--MC/Ony Items
|
||||
|
||||
ItemIDsDatabase[18216] = { 6018216, 18216, 318216, 218216 };
|
||||
ItemIDsDatabase[18215] = { 6018215, 18215, 318215, 218215 };
|
||||
ItemIDsDatabase[18211] = { 6018211, 18211, 318211, 218211 };
|
||||
ItemIDsDatabase[17084] = { 6017084, 17084, 317084, 217084 };
|
||||
ItemIDsDatabase[18212] = { 6018212, 18212, 318212, 218212 };
|
||||
ItemIDsDatabase[17083] = { 6017083, 17083, 317083, 217083 };
|
||||
|
||||
--Bwl Items
|
||||
ItemIDsDatabase[1506015] = { 7506015, 1506015, 1806015, MythicRaid = 2806015, 1706015 };
|
||||
ItemIDsDatabase[1506014] = { 7506014, 1506014, 1806014, MythicRaid = 2806014, 1706014 };
|
||||
|
||||
|
||||
--T2 missing sets
|
||||
ItemIDsDatabase[1516900] = { 7516900, 1516900, 1816900, MythicRaid = 2816900, 1716900 };
|
||||
ItemIDsDatabase[1516902] = { 7516902, 1516902, 1816902, MythicRaid = 2816902, 1716902 };
|
||||
ItemIDsDatabase[1516897] = { 7516897, 1516897, 1816897, MythicRaid = 2816897, 1716897 };
|
||||
ItemIDsDatabase[1516904] = { 7516904, 1516904, 1816904, MythicRaid = 2816904, 1716904 };
|
||||
ItemIDsDatabase[1516904] = { 7516904, 1516904, 1816904, MythicRaid = 2816904, 1716904 };
|
||||
ItemIDsDatabase[1516899] = { 7516899, 1516899, 1816899, MythicRaid = 2816899, 1716899 };
|
||||
ItemIDsDatabase[1516903] = { 7516903, 1516903, 1816903, MythicRaid = 2816903, 1716903 };
|
||||
ItemIDsDatabase[1516898] = { 7516898, 1516898, 1816898, MythicRaid = 2816898, 1716898 };
|
||||
|
||||
ItemIDsDatabase[1516892] = { 7516892, 1516892, 1816892, MythicRaid = 2816892, 1716892 };
|
||||
ItemIDsDatabase[1516894] = { 7516894, 1516894, 1816894, MythicRaid = 2816894, 1716894 };
|
||||
ItemIDsDatabase[1516889] = { 7516889, 1516889, 1816889, MythicRaid = 2816889, 1716889 };
|
||||
ItemIDsDatabase[1516896] = { 7516896, 1516896, 1816896, MythicRaid = 2816896, 1716896 };
|
||||
ItemIDsDatabase[1516891] = { 7516891, 1516891, 1816891, MythicRaid = 2816891, 1716891 };
|
||||
ItemIDsDatabase[1516895] = { 7516895, 1516895, 1816895, MythicRaid = 2816895, 1716895 };
|
||||
ItemIDsDatabase[1516893] = { 7516893, 1516893, 1816893, MythicRaid = 2816893, 1716893 };
|
||||
ItemIDsDatabase[1516890] = { 7516890, 1516890, 1816890, MythicRaid = 2816890, 1716890 };
|
||||
|
||||
ItemIDsDatabase[1516955] = { 7516955, 1516955, 1816955, MythicRaid = 2816955, 1716955 };
|
||||
ItemIDsDatabase[1516953] = { 7516953, 1516953, 1816953, MythicRaid = 2816953, 1716953 };
|
||||
ItemIDsDatabase[1516958] = { 7516958, 1516958, 1816958, MythicRaid = 2816958, 1716958 };
|
||||
ItemIDsDatabase[1516951] = { 7516951, 1516951, 1816951, MythicRaid = 2816951, 1716951 };
|
||||
ItemIDsDatabase[1516956] = { 7516956, 1516956, 1816956, MythicRaid = 2816956, 1716956 };
|
||||
ItemIDsDatabase[1516952] = { 7516952, 1516952, 1816952, MythicRaid = 2816952, 1716952 };
|
||||
ItemIDsDatabase[1516954] = { 7516954, 1516954, 1816954, MythicRaid = 2816954, 1716954 };
|
||||
ItemIDsDatabase[1516957] = { 7516957, 1516957, 1816957, MythicRaid = 2816957, 1716957 };
|
||||
|
||||
ItemIDsDatabase[1516921] = { 7516921, 1516921, 1816921, MythicRaid = 2816921, 1716921 };
|
||||
ItemIDsDatabase[1516924] = { 7516924, 1516924, 1816924, MythicRaid = 2816924, 1716924 };
|
||||
ItemIDsDatabase[1516923] = { 7516923, 1516923, 1816923, MythicRaid = 2816923, 1716923 };
|
||||
ItemIDsDatabase[1516926] = { 7516926, 1516926, 1816926, MythicRaid = 2816926, 1716926 };
|
||||
ItemIDsDatabase[1516920] = { 7516920, 1516920, 1816920, MythicRaid = 2816920, 1716920 };
|
||||
ItemIDsDatabase[1516925] = { 7516925, 1516925, 1816925, MythicRaid = 2816925, 1716925 };
|
||||
ItemIDsDatabase[1516922] = { 7516922, 1516922, 1816922, MythicRaid = 2816922, 1716922 };
|
||||
ItemIDsDatabase[1516919] = { 7516919, 1516919, 1816919, MythicRaid = 2816919, 1716919 };
|
||||
|
||||
ItemIDsDatabase[1516947] = { 7516947, 1516947, 1816947, MythicRaid = 2816947, 1716947 };
|
||||
ItemIDsDatabase[1516945] = { 7516945, 1516945, 1816945, MythicRaid = 2816945, 1716945 };
|
||||
ItemIDsDatabase[1516950] = { 7516950, 1516950, 1816950, MythicRaid = 2816950, 1716950 };
|
||||
ItemIDsDatabase[1516943] = { 7516943, 1516943, 1816943, MythicRaid = 2816943, 1716943 };
|
||||
ItemIDsDatabase[1516948] = { 7516948, 1516948, 1816948, MythicRaid = 2816948, 1716948 };
|
||||
ItemIDsDatabase[1516944] = { 7516944, 1516944, 1816944, MythicRaid = 2816944, 1716944 };
|
||||
ItemIDsDatabase[1516946] = { 7516946, 1516946, 1816946, MythicRaid = 2816946, 1716946 };
|
||||
ItemIDsDatabase[1516949] = { 7516949, 1516949, 1816949, MythicRaid = 2816949, 1716949 };
|
||||
|
||||
ItemIDsDatabase[1516963] = { 7516963, 1516963, 1816963, MythicRaid = 2816963, 1716963 };
|
||||
ItemIDsDatabase[1516961] = { 7516961, 1516961, 1816961, MythicRaid = 2816961, 1716961 };
|
||||
ItemIDsDatabase[1516966] = { 7516966, 1516966, 1816966, MythicRaid = 2816966, 1716966 };
|
||||
ItemIDsDatabase[1516959] = { 7516959, 1516959, 1816959, MythicRaid = 2816959, 1716959 };
|
||||
ItemIDsDatabase[1516964] = { 7516964, 1516964, 1816964, MythicRaid = 2816964, 1716964 };
|
||||
ItemIDsDatabase[1516960] = { 7516960, 1516960, 1816960, MythicRaid = 2816960, 1716960 };
|
||||
ItemIDsDatabase[1516962] = { 7516962, 1516962, 1816962, MythicRaid = 2816962, 1716962 };
|
||||
ItemIDsDatabase[1516965] = { 7516965, 1516965, 1816965, MythicRaid = 2816965, 1716965 };
|
||||
|
||||
--Tier 1 Tokens
|
||||
|
||||
ItemIDsDatabase[2522360] = { 2522360, 2522360, 2622360, 2722360, MythicRaid = 3722360 };
|
||||
ItemIDsDatabase[2522361] = { 2522361, 2522361, 2622361, 2722361, MythicRaid = 3722361 };
|
||||
ItemIDsDatabase[2522350] = { 2522350, 2522350, 2622350, 2722350, MythicRaid = 3722350 };
|
||||
ItemIDsDatabase[2522362] = { 2522362, 2522362, 2622362, 2722362, MythicRaid = 3722362 };
|
||||
ItemIDsDatabase[2522363] = { 2522363, 2522363, 2622363, 2722363, MythicRaid = 3722363 };
|
||||
ItemIDsDatabase[2522364] = { 2522364, 2522364, 2622364, 2722364, MythicRaid = 3722364 };
|
||||
ItemIDsDatabase[2522359] = { 2522359, 2522359, 2622359, 2722359, MythicRaid = 3722359 };
|
||||
ItemIDsDatabase[2522365] = { 2522365, 2522365, 2622365, 2722365, MythicRaid = 3722365 };
|
||||
|
||||
--Tier 1 New Sets
|
||||
ItemIDsDatabase[11533] = { 6011533, 11533, 311533, 211533 };
|
||||
ItemIDsDatabase[11534] = { 6011534, 11534, 311534, 211534 };
|
||||
ItemIDsDatabase[11535] = { 6011535, 11535, 311535, 211535 };
|
||||
ItemIDsDatabase[11536] = { 6011536, 11536, 311536, 211536 };
|
||||
ItemIDsDatabase[11537] = { 6011537, 11537, 311537, 211537 };
|
||||
ItemIDsDatabase[11538] = { 6011538, 11538, 311538, 211538 };
|
||||
ItemIDsDatabase[11531] = { 6011531, 11531, 311531, 211531 };
|
||||
ItemIDsDatabase[11532] = { 6011532, 11532, 311532, 211532 };
|
||||
|
||||
ItemIDsDatabase[11789] = { 6011789, 11789, 311789, 211789 };
|
||||
ItemIDsDatabase[11790] = { 6011790, 11790, 311790, 211790 };
|
||||
ItemIDsDatabase[11791] = { 6011791, 11791, 311791, 211791 };
|
||||
ItemIDsDatabase[11792] = { 6011792, 11792, 311792, 211792 };
|
||||
ItemIDsDatabase[11793] = { 6011793, 11793, 311793, 211793 };
|
||||
ItemIDsDatabase[11794] = { 6011794, 11794, 311794, 211794 };
|
||||
ItemIDsDatabase[11795] = { 6011795, 11795, 311795, 211795 };
|
||||
ItemIDsDatabase[11796] = { 6011796, 11796, 311796, 211796 };
|
||||
|
||||
ItemIDsDatabase[13432] = { 6013432, 13432, 313432, 213432 };
|
||||
ItemIDsDatabase[13433] = { 6013433, 13433, 313433, 213433 };
|
||||
ItemIDsDatabase[13434] = { 6013434, 13434, 313434, 213434 };
|
||||
ItemIDsDatabase[13435] = { 6013435, 13435, 313435, 213435 };
|
||||
ItemIDsDatabase[13436] = { 6013436, 13436, 313436, 213436 };
|
||||
ItemIDsDatabase[13437] = { 6013437, 13437, 313437, 213437 };
|
||||
ItemIDsDatabase[13438] = { 6013438, 13438, 313438, 213438 };
|
||||
ItemIDsDatabase[13439] = { 6013439, 13439, 313439, 213439 };
|
||||
|
||||
|
||||
--Tier 2 Tokens
|
||||
|
||||
ItemIDsDatabase[2522460] = { 2522460, 2522460, 2622460, 2722460, MythicRaid = 3722460 };
|
||||
ItemIDsDatabase[2522461] = { 2522461, 2522461, 2622461, 2722461, MythicRaid = 3722461 };
|
||||
ItemIDsDatabase[2522450] = { 2522450, 2522450, 2622450, 2722450, MythicRaid = 3722450 };
|
||||
ItemIDsDatabase[2522462] = { 2522462, 2522462, 2622462, 2722462, MythicRaid = 3722462 };
|
||||
ItemIDsDatabase[2522464] = { 2522464, 2522464, 2622464, 2722464, MythicRaid = 3722464 };
|
||||
ItemIDsDatabase[2522463] = { 2522463, 2522463, 2622463, 2722463, MythicRaid = 3722463 };
|
||||
ItemIDsDatabase[2522459] = { 2522459, 2522459, 2622459, 2722459, MythicRaid = 3722459 };
|
||||
ItemIDsDatabase[2522465] = { 2522465, 2522465, 2622465, 2722465, MythicRaid = 3722465 };
|
||||
|
||||
--Tier 2.5 Accessories
|
||||
ItemIDsDatabase[1506053] = { 1506053, 1506053, 1806053, 1706053, MythicRaid = 2806053 }; --Ceremonial Qiraji Pendant
|
||||
ItemIDsDatabase[1506052] = { 1506052, 1506052, 1806052, 1706052, MythicRaid = 2806052 }; --Ceremonial Qiraji Ring
|
||||
ItemIDsDatabase[1506051] = { 1506051, 1506051, 1806051, 1706051, MythicRaid = 2806051 }; --Ceremonial Qiraji Drape
|
||||
|
||||
--AQR New Sets
|
||||
--Heroic = Normal + 300'000
|
||||
--Mythic = Normal + 1'300'000
|
||||
--Ascended = Normal + 200'000
|
||||
--Bloodforged = Normal + 6'000'000
|
||||
--Heroic Bloodforged = Normal + 6'300'000
|
||||
ItemIDsDatabase[1506017] = { 7506017, 1506017, 1806017, 1706017, MythicRaid = 2806017 }; --Locket of Unending Life
|
||||
ItemIDsDatabase[1506018] = { 7506018, 1506018, 1806018, 1706018, MythicRaid = 2806018 }; --Choker of the Unseen Path
|
||||
ItemIDsDatabase[1506019] = { 7506019, 1506019, 1806019, 1706019, MythicRaid = 2806019 }; --Pendant of Roaring Earth
|
||||
ItemIDsDatabase[1506020] = { 7506020, 1506020, 1806020, 1706020, MythicRaid = 2806020 }; --Medallion of Eternal Justice
|
||||
ItemIDsDatabase[1506021] = { 7506021, 1506021, 1806021, 1706021, MythicRaid = 2806021 }; --Charm of Vaulted Secrets
|
||||
ItemIDsDatabase[1506022] = { 7506022, 1506022, 1806022, 1706022, MythicRaid = 2806022 }; --Lariat of Veiled Shadows
|
||||
ItemIDsDatabase[1506023] = { 7506023, 1506023, 1806023, 1706023, MythicRaid = 2806023 }; --Bayadere of Infinite Wisdom
|
||||
ItemIDsDatabase[1506024] = { 7506024, 1506024, 1806024, 1706024, MythicRaid = 2806024 }; --Necklace of the Gathering Storm
|
||||
ItemIDsDatabase[1506025] = { 7506025, 1506025, 1806025, 1706025, MythicRaid = 2806025 }; --Collar of Unyielding Strength
|
||||
ItemIDsDatabase[1506026] = { 7506026, 1506026, 1806026, 1706026, MythicRaid = 2806026 }; --Bayadere of Unspoken Names
|
||||
ItemIDsDatabase[1506027] = { 7506027, 1506027, 1806027, 1706027, MythicRaid = 2806027 }; --Choker of Endless Machinations
|
||||
ItemIDsDatabase[1506028] = { 7506028, 1506028, 1806028, 1706028, MythicRaid = 2806028 }; --Shroud of Endless Machinations
|
||||
ItemIDsDatabase[1506029] = { 7506029, 1506029, 1806029, 1706029, MythicRaid = 2806029 }; --Loop of Endless Machinations
|
||||
ItemIDsDatabase[1506030] = { 7506030, 1506030, 1806030, 1706030, MythicRaid = 2806030 }; --Signet of Roaring Earth
|
||||
ItemIDsDatabase[1506031] = { 7506031, 1506031, 1806031, 1706031, MythicRaid = 2806031 }; --Drape of Roaring Earth
|
||||
ItemIDsDatabase[1506032] = { 7506032, 1506032, 1806032, 1706032, MythicRaid = 2806032 }; --Signet of Ferocious Vigor
|
||||
ItemIDsDatabase[1506033] = { 7506033, 1506033, 1806033, 1706033, MythicRaid = 2806033 }; --Cape of Ferocious Vigor
|
||||
ItemIDsDatabase[1506034] = { 7506034, 1506034, 1806034, 1706034, MythicRaid = 2806034 }; --Choker of Ferocious Vigor
|
||||
ItemIDsDatabase[1506035] = { 7506035, 1506035, 1806035, 1706035, MythicRaid = 2806035 }; --Band of the Faithful Zealot
|
||||
ItemIDsDatabase[1506036] = { 7506036, 1506036, 1806036, 1706036, MythicRaid = 2806036 }; --Shroud of the Faithful Zealot
|
||||
ItemIDsDatabase[1506037] = { 7506037, 1506037, 1806037, 1706037, MythicRaid = 2806037 }; --Locket of the Faithful Zealot
|
||||
ItemIDsDatabase[1506038] = { 7506038, 1506038, 1806038, 1706038, MythicRaid = 2806038 }; --Band of Masterful Technique
|
||||
ItemIDsDatabase[1506039] = { 7506039, 1506039, 1806039, 1706039, MythicRaid = 2806039 }; --Drape of Masterful Technique
|
||||
ItemIDsDatabase[1506040] = { 7506040, 1506040, 1806040, 1706040, MythicRaid = 2806040 }; --Locket of Masterful Technique
|
||||
ItemIDsDatabase[1506041] = { 7506041, 1506041, 1806041, 1706041, MythicRaid = 2806041 }; --Ring of Martial Prowess
|
||||
ItemIDsDatabase[1506042] = { 7506042, 1506042, 1806042, 1706042, MythicRaid = 2806042 }; --Cloak of Martial Prowess
|
||||
ItemIDsDatabase[1506043] = { 7506043, 1506043, 1806043, 1706043, MythicRaid = 2806043 }; --Lariat of Martial Prowess
|
||||
ItemIDsDatabase[1506044] = { 7506044, 1506044, 1806044, 1706044, MythicRaid = 2806044 }; --Signet of Unrivaled Rage
|
||||
ItemIDsDatabase[1506045] = { 7506045, 1506045, 1806045, 1706045, MythicRaid = 2806045 }; --Cloak of Unrivaled Rage
|
||||
ItemIDsDatabase[1506046] = { 7506046, 1506046, 1806046, 1706046, MythicRaid = 2806046 }; --Collar of Unrivaled Rage
|
||||
ItemIDsDatabase[1506047] = { 7506047, 1506047, 1806047, 1706047, MythicRaid = 2806047 }; --Loop of Expansive Research
|
||||
ItemIDsDatabase[1506048] = { 7506048, 1506048, 1806048, 1706048, MythicRaid = 2806048 }; --Drape of Expansive Research
|
||||
ItemIDsDatabase[1506049] = { 7506049, 1506049, 1806049, 1706049, MythicRaid = 2806049 }; --Bayadere of Expansive Research
|
||||
|
||||
|
||||
--Tier 2.5 New Sets
|
||||
--Heroic = Normal + 300'000
|
||||
--Mythic = Normal + 1'300'000
|
||||
--Ascended = Normal + 200'000
|
||||
--Bloodforged = Normal + 6'000'000
|
||||
--Heroic Bloodforged = Normal + 6'300'000
|
||||
ItemIDsDatabase[1507000] = { 7507000, 1507000, 1807000, 1707000, MythicRaid = 2807000 };-- Conqueror's Tusks
|
||||
ItemIDsDatabase[1507001] = { 7507001, 1507001, 1807001, 1707001, MythicRaid = 2807001 };-- Conqueror's Shoulderplates
|
||||
ItemIDsDatabase[1507002] = { 7507002, 1507002, 1807002, 1707002, MythicRaid = 2807002 };-- Conqueror's Carapace
|
||||
ItemIDsDatabase[1507003] = { 7507003, 1507003, 1807003, 1707003, MythicRaid = 2807003 };-- Conqueror's Tassets
|
||||
ItemIDsDatabase[1507004] = { 7507004, 1507004, 1807004, 1707004, MythicRaid = 2807004 };-- Conqueror's Advance
|
||||
|
||||
ItemIDsDatabase[1507015] = { 7507015, 1507015, 1807015, 1707015, MythicRaid = 2807015 };-- Stormcaller's Crown
|
||||
ItemIDsDatabase[1507016] = { 7507016, 1507016, 1807016, 1707016, MythicRaid = 2807016 };-- Stormcaller's Stompers
|
||||
ItemIDsDatabase[1507017] = { 7507017, 1507017, 1807017, 1707017, MythicRaid = 2807017 };-- Stormcaller's Chestguard
|
||||
ItemIDsDatabase[1507018] = { 7507018, 1507018, 1807018, 1707018, MythicRaid = 2807018 };-- Stormcaller's Greaves
|
||||
ItemIDsDatabase[1507019] = { 7507019, 1507019, 1807019, 1707019, MythicRaid = 2807019 };-- Stormcaller's Epaulets
|
||||
|
||||
ItemIDsDatabase[1507020] = { 7507020, 1507020, 1807020, 1707020, MythicRaid = 2807020 };-- Genesis Visor
|
||||
ItemIDsDatabase[1507021] = { 7507021, 1507021, 1807021, 1707021, MythicRaid = 2807021 };-- Genesis Pauldrons
|
||||
ItemIDsDatabase[1507022] = { 7507022, 1507022, 1807022, 1707022, MythicRaid = 2807022 };-- Genesis Footwraps
|
||||
ItemIDsDatabase[1507023] = { 7507023, 1507023, 1807023, 1707023, MythicRaid = 2807023 };-- Genesis Legguards
|
||||
ItemIDsDatabase[1507024] = { 7507024, 1507024, 1807024, 1707024, MythicRaid = 2807024 };-- Genesis Garb
|
||||
|
||||
ItemIDsDatabase[1507025] = { 7507025, 1507025, 1807025, 1707025, MythicRaid = 2807025 };-- Genesis Mask
|
||||
ItemIDsDatabase[1507026] = { 7507026, 1507026, 1807026, 1707026, MythicRaid = 2807026 };-- Genesis Shoulderpads
|
||||
ItemIDsDatabase[1507027] = { 7507027, 1507027, 1807027, 1707027, MythicRaid = 2807027 };-- Genesis Treads
|
||||
ItemIDsDatabase[1507028] = { 7507028, 1507028, 1807028, 1707028, MythicRaid = 2807028 };-- Genesis Pants
|
||||
ItemIDsDatabase[1507029] = { 7507029, 1507029, 1807029, 1707029, MythicRaid = 2807029 };-- Genesis Carapace
|
||||
|
||||
ItemIDsDatabase[1507030] = { 7507030, 1507030, 1807030, 1707030, MythicRaid = 2807030 };-- Avenger's Carapace
|
||||
ItemIDsDatabase[1507031] = { 7507031, 1507031, 1807031, 1707031, MythicRaid = 2807031 };-- Avenger's Laurels
|
||||
ItemIDsDatabase[1507032] = { 7507032, 1507032, 1807032, 1707032, MythicRaid = 2807032 };-- Avenger's Sabatons
|
||||
ItemIDsDatabase[1507033] = { 7507033, 1507033, 1807033, 1707033, MythicRaid = 2807033 };-- Avenger's Legplates
|
||||
ItemIDsDatabase[1507034] = { 7507034, 1507034, 1807034, 1707034, MythicRaid = 2807034 };-- Avenger's Shoulderguards
|
||||
|
||||
|
||||
|
||||
--Tier 3 Tokens
|
||||
|
||||
ItemIDsDatabase[22353] = { 22353, 22353, 102278, 222353 };
|
||||
ItemIDsDatabase[22354] = { 22354, 22354, 102286, 222354 };
|
||||
ItemIDsDatabase[22349] = { 22349, 22349, 102264, 222349 };
|
||||
ItemIDsDatabase[22355] = { 22355, 22355, 102262, 222355 };
|
||||
ItemIDsDatabase[22357] = { 22357, 22357, 102268, 222357 };
|
||||
ItemIDsDatabase[22356] = { 22356, 22356, 102300, 222356 };
|
||||
ItemIDsDatabase[22352] = { 22352, 22352, 102284, 222352 };
|
||||
ItemIDsDatabase[22358] = { 22358, 22358, 102290, 222358 };
|
||||
|
||||
--Tier 4 Tokens
|
||||
|
||||
ItemIDsDatabase[29761] = { 29761, 29761, 329761, 229761 };
|
||||
ItemIDsDatabase[29764] = { 29764, 29764, 329764, 229764 };
|
||||
ItemIDsDatabase[29753] = { 29753, 29753, 329753, 229753 };
|
||||
ItemIDsDatabase[29758] = { 29758, 29758, 329758, 229758 };
|
||||
ItemIDsDatabase[29767] = { 29767, 29767, 329767, 229767 };
|
||||
|
||||
--Tier 5 Tokens
|
||||
|
||||
ItemIDsDatabase[30243] = { 30243, 30243, 330243, 230243 };
|
||||
ItemIDsDatabase[30249] = { 30249, 30249, 330249, 230249 };
|
||||
ItemIDsDatabase[30237] = { 30237, 30237, 330237, 230237 };
|
||||
ItemIDsDatabase[30240] = { 30240, 30240, 330240, 230240 };
|
||||
ItemIDsDatabase[30246] = { 30246, 30246, 330246, 230246 };
|
||||
|
||||
--Druid
|
||||
|
||||
ItemIDsDatabase[29098] = { 6029098, 29098, 314712, 214712 };
|
||||
ItemIDsDatabase[29100] = { 6029100, 29100, 314714, 214714 };
|
||||
ItemIDsDatabase[29096] = { 6029096, 29096, 314710, 214710 };
|
||||
ItemIDsDatabase[29097] = { 6029097, 29097, 314711, 214711 };
|
||||
ItemIDsDatabase[29099] = { 6029099, 29099, 314713, 214713 };
|
||||
|
||||
--ZA New Items
|
||||
ItemIDsDatabase[21824] = { 6021824, 21824, 321824, 221824 };
|
||||
ItemIDsDatabase[24574] = { 6024574, 24574, 324574, 224574 };
|
||||
ItemIDsDatabase[28354] = { 6028354, 28354, 328354, 228354 };
|
||||
ItemIDsDatabase[33059] = { 6033059, 33059, 333059, 233059 };
|
||||
ItemIDsDatabase[33983] = { 6033983, 33983, 333983, 233983 };
|
||||
ItemIDsDatabase[39755] = { 6039755, 39755, 339755, 239755 };
|
||||
ItemIDsDatabase[33533] = { 6033533, 33533, 333533, 233533 };
|
||||
ItemIDsDatabase[33979] = { 6033979, 33979, 333979, 233979 };
|
||||
ItemIDsDatabase[34071] = { 6034071, 34071, 334071, 234071 };
|
||||
ItemIDsDatabase[38634] = { 6038634, 38634, 338634, 238634 };
|
||||
ItemIDsDatabase[33500] = { 6033500, 33500, 333500, 233500 };
|
||||
ItemIDsDatabase[33496] = { 6033496, 33496, 333496, 233496 };
|
||||
ItemIDsDatabase[33498] = { 6033498, 33498, 333498, 233498 };
|
||||
ItemIDsDatabase[33971] = { 6033971, 33971, 333971, 233971 };
|
||||
ItemIDsDatabase[33495] = { 6033495, 33495, 333495, 233495 };
|
||||
ItemIDsDatabase[33480] = { 6033480, 33480, 333480, 233480 };
|
||||
ItemIDsDatabase[33591] = { 6033591, 33591, 333591, 233591 };
|
||||
ItemIDsDatabase[33590] = { 6033590, 33590, 333590, 233590 };
|
||||
ItemIDsDatabase[33481] = { 6033481, 33481, 333481, 233481 };
|
||||
ItemIDsDatabase[33492] = { 6033492, 33492, 333492, 233492 };
|
||||
ItemIDsDatabase[33499] = { 6033499, 33499, 333499, 233499 };
|
||||
ItemIDsDatabase[33805] = { 6033805, 33805, 333805, 233805 };
|
||||
ItemIDsDatabase[33491] = { 6033491, 33491, 333491, 233491 };
|
||||
ItemIDsDatabase[33490] = { 6033490, 33490, 333490, 233490 };
|
||||
ItemIDsDatabase[33489] = { 6033489, 33489, 333489, 233489 };
|
||||
ItemIDsDatabase[33483] = { 6033483, 33483, 333483, 233483 };
|
||||
ItemIDsDatabase[33493] = { 6033493, 33493, 333493, 233493 };
|
||||
ItemIDsDatabase[33497] = { 6033497, 33497, 333497, 233497 };
|
||||
ItemIDsDatabase[33494] = { 6033494, 33494, 333494, 233494 };
|
||||
ItemIDsDatabase[24537] = { 6024537, 24537, 324537, 224537 };
|
||||
--ZA Bears
|
||||
ItemIDsDatabase[1333809] = { 1333809, 1333809, 1433809, 1233809 };
|
||||
|
||||
--intact vial of kael'thas sunstrider
|
||||
ItemIDsDatabase[450001] = { 450001, 450001, 450003, 450005, MythicRaid = 1450003 };
|
||||
ItemIDsDatabase[450000] = { 450000, 450000, 450002, 450004, MythicRaid = 1450002 };
|
||||
|
||||
ItemIDsDatabase[1001620] = { 1001620, 1001620, 1001619, 1001622, MythicRaid = 1001621 };
|
||||
ItemIDsDatabase[98570] = { 98570, 98570, 98570, 98570, MythicRaid = 98570 };
|
||||
|
||||
for _, v in pairs(ItemIDsDatabase) do
|
||||
if not v["MythicRaid"] then
|
||||
v["MythicRaid"] = tonumber("13"..v[2]);
|
||||
end
|
||||
end
|
||||
@@ -36,6 +36,7 @@ function AtlasLoot:OptionsInit()
|
||||
AtlasLootOptionsFrameLootBrowserScale:SetValue(self.db.profile.LootBrowserScale)
|
||||
AtlasLootOptionsMinimapIcon:SetChecked(self.db.profile.minimap.hide)
|
||||
AtlasLootOptionsFrameCraftingInfo:SetChecked(self.db.profile.recipeExtraInfoSwitch)
|
||||
AtlasLootOptionsFrameDropLocation:SetChecked(self.db.profile.showdropLocationOnSearch)
|
||||
end
|
||||
|
||||
--[[
|
||||
@@ -170,6 +171,7 @@ end
|
||||
|
||||
function AtlasLoot:OptionsOnShow()
|
||||
AtlasLoot_SelectLootBrowserStyle_Label:SetText(AL["Change AtlasLoot Skin:"])
|
||||
if InterfaceOptionsFrame:GetWidth() < 850 then InterfaceOptionsFrame:SetWidth(850) end
|
||||
UIDropDownMenu_Initialize(AtlasLoot_SelectLootBrowserStyle, selectLootBrowserStyle_Initialize)
|
||||
UIDropDownMenu_SetSelectedID(AtlasLoot_SelectLootBrowserStyle, self.db.profile.LootBrowserStyle)
|
||||
UIDropDownMenu_SetWidth(AtlasLoot_SelectLootBrowserStyle, 150)
|
||||
@@ -223,9 +225,14 @@ local autoInstance = CreateFrame("CheckButton", "AtlasLootOptionsFrameAutoInstan
|
||||
|
||||
local craftingInfo = CreateFrame("CheckButton", "AtlasLootOptionsFrameCraftingInfo", AtlasLootOptionsFrame, "OptionsCheckButtonTemplate")
|
||||
craftingInfo:SetPoint("TOPLEFT",5,-100)
|
||||
AtlasLootOptionsFrameCraftingInfoText:SetText(AL["Only show crafting source while colding CTRL"])
|
||||
AtlasLootOptionsFrameCraftingInfoText:SetText(AL["Hide crafting source unless holding CTRL"])
|
||||
craftingInfo:SetScript("OnClick", function() self.db.profile.recipeExtraInfoSwitch = not self.db.profile.recipeExtraInfoSwitch end)
|
||||
|
||||
local craftingInfo = CreateFrame("CheckButton", "AtlasLootOptionsFrameDropLocation", AtlasLootOptionsFrame, "OptionsCheckButtonTemplate")
|
||||
craftingInfo:SetPoint("TOPLEFT",5,-130)
|
||||
AtlasLootOptionsFrameDropLocationText:SetText(AL["Show drop location on search results"])
|
||||
craftingInfo:SetScript("OnClick", function() self.db.profile.showdropLocationOnSearch = not self.db.profile.showdropLocationOnSearch end)
|
||||
|
||||
local itemid = CreateFrame("CheckButton", "AtlasLootOptionsFrameItemID", AtlasLootOptionsFrame, "OptionsCheckButtonTemplate")
|
||||
itemid:SetPoint("TOP",5,-70)
|
||||
AtlasLootOptionsFrameItemIDText:SetText(AL["Show itemIDs at all times"])
|
||||
|
||||
@@ -680,14 +680,19 @@ function AtlasLoot:DoSearch(searchText)
|
||||
if self.db.profile.SearchOn.All or self.db.profile.SearchOn[data.Module] or (self.db.profile.SearchAscensionVanity and data.Module == "AtlasLoot_Ascension_Vanity") then
|
||||
for tableNum, t in ipairs(data) do
|
||||
for _, itemData in pairs(t) do
|
||||
if itemData.itemID or itemData.spellID then
|
||||
if data.Type then
|
||||
itemData.Type = data.Type
|
||||
if not itemData[self.Difficultys.MAX_DIF] then
|
||||
itemData[self.Difficultys.MAX_DIF] = #self.Difficultys[data.Type]
|
||||
if type(itemData) == "table" then
|
||||
if itemData.itemID or itemData.spellID then
|
||||
if data.Type then
|
||||
itemData.Type = data.Type
|
||||
if not itemData[self.Difficultys.MAX_DIF] then
|
||||
itemData[self.Difficultys.MAX_DIF] = #self.Difficultys[data.Type]
|
||||
end
|
||||
end
|
||||
if self.db.profile.showdropLocationOnSearch then
|
||||
itemData.dropLoc = {data.DisplayName or data.Name, t.Name}
|
||||
end
|
||||
tinsert(itemList, {{itemData, dataID, tableNum, searchTerms, searchText}})
|
||||
end
|
||||
tinsert(itemList, {{itemData, dataID, tableNum, searchTerms, searchText}})
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -9,6 +9,7 @@ local BLUE = "|cff0070dd"
|
||||
local ORANGE = "|cffFF8400"
|
||||
local CYAN = "|cff00ffff"
|
||||
local SPRINGGREEN = "|cFF00FF7F"
|
||||
local YELLOW = "|cffFFd200"
|
||||
|
||||
-- Used to create a dewdrop menu from a table
|
||||
function AtlasLoot:OpenDewdropMenu(frame, menuList, skipRegister)
|
||||
@@ -106,6 +107,16 @@ function AtlasLoot:CloneTable(table)
|
||||
return new
|
||||
end
|
||||
|
||||
--drop down map menu
|
||||
function AtlasLoot:OpenDB(frame, type, text)
|
||||
local menuList = { [1] = {
|
||||
{text = ORANGE..AL["Open AscensionDB To NPC"], func = function() self:OpenDBURL(text , type) end, notCheckable = true, closeWhenClicked = true, textHeight = 12, textWidth = 12},
|
||||
{close = true, divider = 35},
|
||||
}
|
||||
}
|
||||
self:OpenDewdropMenu(frame, menuList)
|
||||
end
|
||||
|
||||
--[[
|
||||
AtlasLoot:FindId(id, difficulty)
|
||||
Finds the Ids of other difficulties based on the normal id of the item and the difficulty parameter given.
|
||||
@@ -416,7 +427,7 @@ function AtlasLoot:ItemsLoading(count)
|
||||
if(loadingCount > 0) then
|
||||
AtlasLoot_ItemsLoadingSpinner:SetVertexColor(0,1,0)
|
||||
AtlasLoot_ItemsLoadingFrameBackground:SetVertexColor(0,1,0)
|
||||
AtlasLoot_ItemsLoading.tooltip = loadingCount.." Items still loading"
|
||||
AtlasLoot_ItemsLoading.tooltip = WHITE..loadingCount..YELLOW.." Items still caching\n(This can take awhile after a launcher update)"
|
||||
AtlasLoot_ItemsLoading.Loop:Play()
|
||||
AtlasLoot_ItemsLoading:Show()
|
||||
if GameTooltip:GetOwner() == AtlasLoot_ItemsLoading then
|
||||
|
||||
@@ -3625,12 +3625,24 @@ AtlasLoot_CraftingData["CraftingLevels"] = {
|
||||
[968070] = { 300, 320, 330, 340 };
|
||||
[968073] = { 300, 320, 330, 340 };
|
||||
[968076] = { 300, 320, 330, 340 };
|
||||
[968500] = { 300, 320, 330, 340 };
|
||||
[968496] = { 300, 320, 330, 340 };
|
||||
[968506] = { 300, 320, 330, 340 };
|
||||
[968498] = { 300, 320, 330, 340 };
|
||||
[968502] = { 300, 320, 330, 340 };
|
||||
[968504] = { 300, 320, 330, 340 };
|
||||
[968062] = { 300, 320, 330, 340 };
|
||||
[968065] = { 300, 320, 330, 340 };
|
||||
[968068] = { 300, 320, 330, 340 };
|
||||
[968071] = { 300, 320, 330, 340 };
|
||||
[968074] = { 300, 320, 330, 340 };
|
||||
[968077] = { 300, 320, 330, 340 };
|
||||
[968501] = { 300, 320, 330, 340 };
|
||||
[968497] = { 300, 320, 330, 340 };
|
||||
[968507] = { 300, 320, 330, 340 };
|
||||
[968499] = { 300, 320, 330, 340 };
|
||||
[968503] = { 300, 320, 330, 340 };
|
||||
[968505] = { 300, 320, 330, 340 };
|
||||
[968280] = { 300, 320, 330, 340 };
|
||||
[968283] = { 300, 320, 330, 340 };
|
||||
[968286] = { 300, 320, 330, 340 };
|
||||
|
||||
@@ -16,12 +16,11 @@ local INDENT = " "
|
||||
mainframe:SetPoint("CENTER",0,0)
|
||||
mainframe:SetSize(1105,640)
|
||||
mainframe:EnableMouse(true)
|
||||
mainframe:SetMovable(1)
|
||||
mainframe:SetMovable(true)
|
||||
mainframe.portrait:SetPortraitTexture("Interface\\Icons\\INV_Box_01")
|
||||
mainframe:SetFrameStrata("HIGH")
|
||||
mainframe.TitleText:SetText(AtlasLoot.Version)
|
||||
mainframe:RegisterForDrag("LeftButton")
|
||||
mainframe:SetMovable(true)
|
||||
mainframe:EnableKeyboard(true)
|
||||
mainframe:Hide()
|
||||
mainframe:SetScript("OnShow", function()
|
||||
@@ -90,7 +89,6 @@ for num = 1, 30 do
|
||||
local button = CreateFrame("Button","AtlasLootItem_"..num, AtlasLootItemsFrame)
|
||||
button:SetID(num)
|
||||
button:SetSize(236,29)
|
||||
|
||||
button:SetHighlightTexture("Interface\\QuestFrame\\UI-QuestTitleHighlight", "ADD")
|
||||
button.icon = button:CreateTexture("AtlasLootItem_"..num.."_Icon","ARTWORK")
|
||||
button.icon:SetSize(25,25)
|
||||
@@ -101,11 +99,11 @@ for num = 1, 30 do
|
||||
button.Highlight:SetTexture("Interface\\AddOns\\AtlasLoot\\Images\\knownGreen")
|
||||
button.Highlight:Hide()
|
||||
button.name = button:CreateFontString("AtlasLootItem_"..num.."_Name","ARTWORK","GameFontNormal")
|
||||
button.name:SetSize(400,12)
|
||||
button.name:SetSize(320,12)
|
||||
button.name:SetPoint("TOPLEFT","AtlasLootItem_"..num.."_Icon","TOPRIGHT",3,0)
|
||||
button.name:SetJustifyH("LEFT")
|
||||
button.extra = button:CreateFontString("AtlasLootItem_"..num.."_Extra","ARTWORK","GameFontNormal")
|
||||
button.extra:SetSize(400,10)
|
||||
button.extra:SetSize(320,10)
|
||||
button.extra:SetPoint("TOPLEFT","AtlasLootItem_"..num.."_Name","BOTTOMLEFT",0,-1)
|
||||
button.extra:SetJustifyH("LEFT")
|
||||
button:RegisterForClicks("AnyDown")
|
||||
@@ -702,12 +700,17 @@ local rows2 = setmetatable({}, { __index = function(t, i)
|
||||
row:SetFrameStrata("HIGH")
|
||||
row:SetNormalFontObject(GameFontHighlightLeft)
|
||||
row:SetCheckedTexture("Interface\\QuestFrame\\UI-QuestTitleHighlight", "ADD")
|
||||
row:RegisterForClicks("AnyDown")
|
||||
row.Text = row:CreateFontString("$parentRow"..i.."Text","OVERLAY","GameFontNormal")
|
||||
row.Text:SetSize(230, ROW_HEIGHT)
|
||||
row.Text:SetPoint("LEFT",row)
|
||||
row.Text:SetJustifyH("LEFT")
|
||||
row:SetScript("OnClick", function()
|
||||
if row.dataSource ~= "AtlasLoot_MapData" then
|
||||
row:SetScript("OnClick", function(self, button)
|
||||
local npcID = _G[row.dataSource][row.tablename][row.tablenum].NpcID
|
||||
if button == "RightButton" and npcID then
|
||||
row:SetChecked(not row:GetChecked())
|
||||
AtlasLoot:OpenDB(self, "npc", npcID)
|
||||
elseif row.dataSource ~= "AtlasLoot_MapData" then
|
||||
AtlasLoot:ShowItemsFrame(row.tablename, row.dataSource, row.tablenum)
|
||||
else
|
||||
row:SetChecked(false)
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
------------------------------------------------------------------------
|
||||
r326 | oscarucb | 2013-10-12 19:33:25 +0000 (Sat, 12 Oct 2013) | 2 lines
|
||||
Changed paths:
|
||||
M /trunk/Dewdrop-2.0/Dewdrop-2.0.lua
|
||||
|
||||
fix menu width auto-resizing to work correctly for long items
|
||||
|
||||
------------------------------------------------------------------------
|
||||
r325 | oscarucb | 2013-02-23 05:42:20 +0000 (Sat, 23 Feb 2013) | 2 lines
|
||||
Changed paths:
|
||||
M /trunk/Dewdrop-2.0/Dewdrop-2.0.lua
|
||||
|
||||
tweak to allow loading in combat
|
||||
|
||||
------------------------------------------------------------------------
|
||||
@@ -1,6 +1,6 @@
|
||||
--[[
|
||||
--[[
|
||||
Name: Dewdrop-2.0
|
||||
Revision: $Rev: 321 $
|
||||
Revision: $Rev: 327 $
|
||||
Author(s): ckknight (ckknight@gmail.com)
|
||||
Website: http://ckknight.wowinterface.com/
|
||||
Documentation: http://wiki.wowace.com/index.php/Dewdrop-2.0
|
||||
@@ -11,7 +11,7 @@ License: LGPL v2.1
|
||||
]]
|
||||
|
||||
local MAJOR_VERSION = "Dewdrop-2.0"
|
||||
local MINOR_VERSION = tonumber(strmatch("$Revision: 321 $", "%d+")) + 90000
|
||||
local MINOR_VERSION = tonumber(strmatch("$Revision: 328 $", "%d+")) + 90000
|
||||
|
||||
if not AceLibrary then error(MAJOR_VERSION .. " requires AceLibrary") end
|
||||
if not AceLibrary:IsNewVersion(MAJOR_VERSION, MINOR_VERSION) then return end
|
||||
@@ -171,8 +171,9 @@ local buttons
|
||||
-- master secureframe that we pop onto menu items on mouseover. This requires
|
||||
-- some dark magic with OnLeave etc, but it's not too bad.
|
||||
|
||||
local secureFrame = CreateFrame("Button", nil, nil, "SecureActionButtonTemplate")
|
||||
secureFrame:Hide()
|
||||
local eventFrame = CreateFrame("Button")
|
||||
local secureFrame
|
||||
local createSecureFrame
|
||||
|
||||
local function secureFrame_Show(self)
|
||||
local owner = self.owner
|
||||
@@ -209,37 +210,46 @@ local function secureFrame_Hide(self)
|
||||
self.secure = nil
|
||||
end
|
||||
|
||||
secureFrame:SetScript("OnEvent",
|
||||
function()
|
||||
eventFrame:SetScript("OnEvent",
|
||||
function(this, event)
|
||||
if event=="PLAYER_REGEN_ENABLED" then
|
||||
this.combat = false
|
||||
if not this:IsShown() and this.owner then
|
||||
secureFrame_Show(this)
|
||||
createSecureFrame()
|
||||
secureFrame.combat = false
|
||||
if not secureFrame:IsShown() and secureFrame.owner then
|
||||
secureFrame_Show(secureFrame)
|
||||
end
|
||||
elseif event=="PLAYER_REGEN_DISABLED" then
|
||||
this.combat = true
|
||||
if this:IsShown() then
|
||||
secureFrame_Hide(this)
|
||||
elseif event=="PLAYER_REGEN_DISABLED" and secureFrame then
|
||||
secureFrame.combat = true
|
||||
if secureFrame:IsShown() then
|
||||
secureFrame_Hide(secureFrame)
|
||||
end
|
||||
end
|
||||
end
|
||||
)
|
||||
secureFrame:RegisterEvent("PLAYER_REGEN_ENABLED")
|
||||
secureFrame:RegisterEvent("PLAYER_REGEN_DISABLED")
|
||||
eventFrame:RegisterEvent("PLAYER_REGEN_ENABLED")
|
||||
eventFrame:RegisterEvent("PLAYER_REGEN_DISABLED")
|
||||
|
||||
function createSecureFrame()
|
||||
if secureFrame or InCombatLockdown() then return end
|
||||
secureFrame = CreateFrame("Button", nil, nil, "SecureActionButtonTemplate")
|
||||
secureFrame:RegisterForClicks("AnyDown")
|
||||
secureFrame:Hide()
|
||||
|
||||
secureFrame:SetScript("OnLeave",
|
||||
function()
|
||||
function(this)
|
||||
local owner=this.owner
|
||||
this:Deactivate()
|
||||
owner:GetScript("OnLeave")()
|
||||
owner:GetScript("OnLeave")(owner)
|
||||
end
|
||||
)
|
||||
|
||||
secureFrame:HookScript("OnClick",
|
||||
function()
|
||||
function(this , buttonClick)
|
||||
if not this then return end
|
||||
local realthis = this
|
||||
this = this.owner
|
||||
this:GetScript("OnClick")()
|
||||
if not this then return end
|
||||
this:GetScript("OnClick")(this, buttonClick)
|
||||
end
|
||||
)
|
||||
|
||||
@@ -266,6 +276,8 @@ function secureFrame:Deactivate()
|
||||
self.owner = nil
|
||||
end
|
||||
|
||||
end
|
||||
createSecureFrame()
|
||||
-- END secure frame utilities
|
||||
|
||||
|
||||
@@ -354,8 +366,8 @@ local function CheckSize(self, level)
|
||||
extra = extra + 24
|
||||
end
|
||||
button.text:SetFont(STANDARD_TEXT_FONT, button.textHeight)
|
||||
if button.text:GetWidth() + extra > width then
|
||||
width = button.text:GetWidth() + extra
|
||||
if button.text:GetStringWidth() + extra > width then
|
||||
width = button.text:GetStringWidth() + extra
|
||||
end
|
||||
end
|
||||
level:SetWidth(width + 20)
|
||||
@@ -592,6 +604,7 @@ local function AcquireButton(self, level)
|
||||
button = CreateFrame("Button", "Dewdrop20Button" .. numButtons, nil)
|
||||
button:SetFrameStrata("FULLSCREEN_DIALOG")
|
||||
button:SetHeight(16)
|
||||
button:RegisterForClicks("AnyDown")
|
||||
local highlight = button:CreateTexture(nil, "BACKGROUND")
|
||||
highlight:SetTexture("Interface\\QuestFrame\\UI-QuestTitleHighlight")
|
||||
button.highlight = highlight
|
||||
@@ -611,7 +624,7 @@ local function AcquireButton(self, level)
|
||||
radioHighlight:SetBlendMode("ADD")
|
||||
radioHighlight:SetTexCoord(0.5, 0.75, 0, 1)
|
||||
radioHighlight:Hide()
|
||||
button:SetScript("OnEnter", function()
|
||||
button:SetScript("OnEnter", function(this)
|
||||
if (sliderFrame and sliderFrame:IsShown() and sliderFrame.mouseDown and sliderFrame.level == this.level.num + 1) or (editBoxFrame and editBoxFrame:IsShown() and editBoxFrame.mouseDown and editBoxFrame.level == this.level.num + 1) then
|
||||
for i = 1, this.level.num do
|
||||
Refresh(self, levels[i])
|
||||
@@ -648,12 +661,12 @@ local function AcquireButton(self, level)
|
||||
end
|
||||
showGameTooltip(this)
|
||||
end)
|
||||
button:SetScript("OnHide", function()
|
||||
button:SetScript("OnHide", function(this)
|
||||
if this.secure and secureFrame:IsOwnedBy(this) then
|
||||
secureFrame:Deactivate()
|
||||
end
|
||||
end)
|
||||
button:SetScript("OnLeave", function()
|
||||
button:SetScript("OnLeave", function(this)
|
||||
if this.secure and secureFrame:IsShown() then
|
||||
return; -- it's ok, we didn't actually mouse out of the button, only onto the secure frame on top of it
|
||||
end
|
||||
@@ -668,7 +681,7 @@ local function AcquireButton(self, level)
|
||||
GameTooltip:Hide()
|
||||
end)
|
||||
local first = true
|
||||
button:SetScript("OnClick", function()
|
||||
button:SetScript("OnClick", function(this, buttonClick)
|
||||
if not this.disabled then
|
||||
if this.hasColorSwatch then
|
||||
local func = button.colorFunc
|
||||
@@ -721,7 +734,39 @@ local function AcquireButton(self, level)
|
||||
end
|
||||
self:Close(1)
|
||||
ShowUIPanel(ColorPickerFrame)
|
||||
elseif this.func then
|
||||
elseif this.funcRight and buttonClick == "RightButton" then
|
||||
local level = this.level
|
||||
if type(this.funcRight) == "string" then
|
||||
if type(this.argRight1[this.funcRight]) ~= "function" then
|
||||
self:error("Cannot call method %q", this.funcRight)
|
||||
end
|
||||
this.argRight1[this.funcRight](this.argRight1, getArgs(this, 'arg', 2))
|
||||
else
|
||||
this.funcRight(getArgs(this, 'arg', 1))
|
||||
end
|
||||
if this.closeWhenClicked then
|
||||
self:Close()
|
||||
elseif level:IsShown() then
|
||||
for i = 1, level.num do
|
||||
Refresh(self, levels[i])
|
||||
end
|
||||
local value = levels[level.num].value
|
||||
for i = level.num-1, 1, -1 do
|
||||
local level = levels[i]
|
||||
local good = false
|
||||
for _,button in ipairs(level.buttons) do
|
||||
if button.value == value then
|
||||
good = true
|
||||
break
|
||||
end
|
||||
end
|
||||
if not good then
|
||||
Dewdrop:Close(i+1)
|
||||
end
|
||||
value = levels[i].value
|
||||
end
|
||||
end
|
||||
elseif this.func and buttonClick == "LeftButton" then
|
||||
local level = this.level
|
||||
if type(this.func) == "string" then
|
||||
if type(this.arg1[this.func]) ~= "function" then
|
||||
@@ -753,22 +798,22 @@ local function AcquireButton(self, level)
|
||||
value = levels[i].value
|
||||
end
|
||||
end
|
||||
elseif this.closeWhenClicked then
|
||||
self:Close()
|
||||
end
|
||||
elseif this.closeWhenClicked then
|
||||
self:Close()
|
||||
end
|
||||
end
|
||||
end)
|
||||
local text = button:CreateFontString(nil, "ARTWORK")
|
||||
button.text = text
|
||||
text:SetFontObject(GameFontHighlightSmall)
|
||||
button.text:SetFont(STANDARD_TEXT_FONT, UIDROPDOWNMENU_DEFAULT_TEXT_HEIGHT)
|
||||
button:SetScript("OnMouseDown", function()
|
||||
if not this.disabled and (this.func or this.colorFunc or this.closeWhenClicked) then
|
||||
button:SetScript("OnMouseDown", function(this)
|
||||
if not this.disabled and (this.func or this.funcRight or this.colorFunc or this.closeWhenClicked) then
|
||||
text:SetPoint("LEFT", button, "LEFT", this.notCheckable and 1 or 25, -1)
|
||||
end
|
||||
end)
|
||||
button:SetScript("OnMouseUp", function()
|
||||
if not this.disabled and (this.func or this.colorFunc or this.closeWhenClicked) then
|
||||
button:SetScript("OnMouseUp", function(this)
|
||||
if not this.disabled and (this.func or this.funcRight or this.colorFunc or this.closeWhenClicked) then
|
||||
text:SetPoint("LEFT", button, "LEFT", this.notCheckable and 0 or 24, 0)
|
||||
end
|
||||
end)
|
||||
@@ -899,7 +944,7 @@ local function AcquireLevel(self, level)
|
||||
frame:SetScript("OnLeave", function()
|
||||
StartCounting(self, i)
|
||||
end)
|
||||
frame:SetScript("OnMouseWheel", function()
|
||||
frame:SetScript("OnMouseWheel", function(this, arg1)
|
||||
Scroll(self, frame, arg1 < 0)
|
||||
end)
|
||||
if i == 1 then
|
||||
@@ -2925,6 +2970,7 @@ function Dewdrop:Register(parent, ...)
|
||||
if parent:HasScript("OnMouseUp") then
|
||||
local script = parent:GetScript("OnMouseUp")
|
||||
parent:SetScript("OnMouseUp", function(this, ...)
|
||||
local arg1 = ...
|
||||
if script then
|
||||
script(this, ...)
|
||||
end
|
||||
@@ -3156,6 +3202,7 @@ function Dewdrop:AddLine(...)
|
||||
end
|
||||
if not button.disabled then
|
||||
button.func = info.func
|
||||
button.funcRight = info.funcRight
|
||||
button.secure = info.secure
|
||||
end
|
||||
button.hasColorSwatch = info.hasColorSwatch
|
||||
@@ -3168,6 +3215,7 @@ function Dewdrop:AddLine(...)
|
||||
button.colorSwatch.texture:SetVertexColor(button.r, button.g, button.b)
|
||||
button.checked = false
|
||||
button.func = nil
|
||||
button.funcRight = nil
|
||||
button.colorFunc = info.colorFunc
|
||||
local i = 1
|
||||
while true do
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
## OptionalDeps: Ace2
|
||||
## X-AceLibrary-Dewdrop-2.0: true
|
||||
## X-License: LGPL v2.1
|
||||
## X-Curse-Packaged-Version: r321
|
||||
## X-Curse-Packaged-Version: r326
|
||||
## X-Curse-Project-Name: DewdropLib
|
||||
## X-Curse-Project-ID: dewdroplib
|
||||
## X-Curse-Repository-ID: wow/dewdroplib/mainline
|
||||
|
||||
@@ -18,6 +18,7 @@ if AL then
|
||||
AL["Mystic Enchanting"] = true
|
||||
AL["Druid"] = true
|
||||
AL["Open AscensionDB To Zone Map"] = true
|
||||
AL["Open AscensionDB To NPC"] = true
|
||||
AL["Open AscensionDB To Entry"] = true
|
||||
AL["Links"] = true
|
||||
AL["Add To Default"] = true
|
||||
@@ -1544,7 +1545,9 @@ if AL then
|
||||
AL["World Drop"] = true
|
||||
AL["Sunwell Isle"] = true
|
||||
AL["Gordok Commons"] = true
|
||||
AL["Only show crafting source while colding CTRL"] = true
|
||||
AL["Hide crafting source unless holding CTRL"] = true
|
||||
AL["Show drop location on search results"] = true
|
||||
|
||||
|
||||
-- Shortcuts for Bossname files
|
||||
AL["LBRS"] = true
|
||||
|
||||
@@ -1,17 +0,0 @@
|
||||
<Ui xmlns="http://www.blizzard.com/wow/ui/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.blizzard.com/wow/ui/
|
||||
..\FrameXML\UI.xsd">
|
||||
|
||||
<!--@debug@
|
||||
<Script file="Modules\BurningCrusade\burningcrusade.lua"/>
|
||||
<Script file="Modules\BurningCrusade\localization.lua"/>
|
||||
<Script file="Modules\Crafting\crafting.lua"/>
|
||||
<Script file="Modules\Crafting\localization.lua"/>
|
||||
<Script file="Modules\OriginalWoW\originalwow.lua"/>
|
||||
<Script file="Modules\OriginalWoW\localization.lua"/>
|
||||
<Script file="Modules\WorldEvents\worldevents.lua"/>
|
||||
<Script file="Modules\WorldEvents\localization.lua"/>
|
||||
<Script file="Modules\WrathoftheLichKing\wrathofthelichking.lua"/>
|
||||
<Script file="Modules\WrathoftheLichKing\localization.lua"/>
|
||||
@end-debug@-->
|
||||
|
||||
</Ui>
|
||||
@@ -1,57 +0,0 @@
|
||||
--[[
|
||||
Name : AtlasLootFu
|
||||
Version : 1.1
|
||||
Author : Daviesh (oma_daviesh@hotmail.com)
|
||||
Website : https://discord.gg/uYCE2X2FgA
|
||||
Description : Adds AtlasLoot to FuBar.
|
||||
]]
|
||||
|
||||
--Invoke libraries
|
||||
local tablet = AceLibrary("Tablet-2.0");
|
||||
|
||||
--Define the plugin
|
||||
AtlasLootFu = AceLibrary("AceAddon-2.0"):new("AceEvent-2.0", "AceDB-2.0", "FuBarPlugin-2.0");
|
||||
AtlasLootFu.title = "AtlasLootFu";
|
||||
AtlasLootFu.hasIcon = "Interface\\Icons\\INV_Box_01";
|
||||
AtlasLootFu.defaultPosition = "LEFT";
|
||||
AtlasLootFu.defaultMinimapPosition = 180;
|
||||
AtlasLootFu.cannotDetachTooltip = true;
|
||||
|
||||
-- Activate menu options to hide icon/text (no point in having the colour option)
|
||||
AtlasLootFu.hasNoColor = true;
|
||||
AtlasLootFu:RegisterDB("AtlasLootFuDB");
|
||||
|
||||
--Make sure the plugin is the rightt format when activated
|
||||
function AtlasLootFu:OnEnable()
|
||||
self:Update();
|
||||
end
|
||||
|
||||
--Define text to display when the cursor mouses over the plugin
|
||||
function AtlasLootFu:OnTooltipUpdate()
|
||||
local cat = tablet:AddCategory()
|
||||
cat:AddLine(
|
||||
"text", ATLASLOOTFU_LEFTCLICK
|
||||
)
|
||||
cat:AddLine(
|
||||
"text", ATLASLOOTFU_SHIFTCLICK
|
||||
)
|
||||
cat:AddLine(
|
||||
"text", ATLASLOOTFU_LEFTDRAG
|
||||
)
|
||||
end
|
||||
|
||||
--Define what to do when the plugin is clicked
|
||||
function AtlasLootFu:OnClick(button)
|
||||
--Left click -> open loot browser
|
||||
--Shift Left Click -> show options menu
|
||||
--Right click -> standard FuBar options
|
||||
if IsShiftKeyDown() then
|
||||
AtlasLootOptions_Toggle();
|
||||
else
|
||||
if AtlasLootDefaultFrame:IsVisible() then
|
||||
AtlasLootDefaultFrame:Hide();
|
||||
else
|
||||
AtlasLootDefaultFrame:Show();
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -1,24 +0,0 @@
|
||||
## Interface: 30300
|
||||
## Title: AtlasLootFu
|
||||
## Notes: Minimap button for AtlasLoot
|
||||
## Title-zhTW: |r|cFF0099FF[地圖]|rAL 小地圖按鍵
|
||||
## Notes-zhTW: AtlasLoot 小地圖按鍵
|
||||
## Author: Original: Hegarol, Ascension: Skray/Szyler/Anch/Rvng
|
||||
## Version: v6.2.0
|
||||
## X-eMail: manager@atlasloot.net
|
||||
## X-Category: Map
|
||||
## X-License: GPL v2
|
||||
## X-Website: https://discord.gg/uYCE2X2FgA
|
||||
## X-Embeds: Ace2, FuBarPlugin-2.0, TabletLib
|
||||
## SavedVariables: AtlasLootFuDB
|
||||
## Dependencies: AtlasLoot
|
||||
## OptionalDeps: Ace2, FuBarPlugin-2.0, TabletLib, FuBar
|
||||
## X-Curse-Packaged-Version: v6.0.0
|
||||
## X-Curse-Project-Name: Atlasloot Enhanced
|
||||
## X-Curse-Project-ID: atlasloot-enhanced
|
||||
## X-Curse-Repository-ID: wow/atlasloot-enhanced/mainline
|
||||
|
||||
embeds.xml
|
||||
|
||||
Locales.lua
|
||||
AtlasLootFu.lua
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,17 +0,0 @@
|
||||
## Interface: 30300
|
||||
## X-Curse-Packaged-Version: r1101
|
||||
## X-Curse-Project-Name: Ace2
|
||||
## X-Curse-Project-ID: ace2
|
||||
## X-Curse-Repository-ID: wow/ace2/mainline
|
||||
|
||||
## Title: Lib: AceAddon-2.0
|
||||
## Notes: AddOn development framework
|
||||
## Author: Ace Development Team
|
||||
## LoadOnDemand: 1
|
||||
## X-Website: http://www.wowace.com
|
||||
## X-Category: Library
|
||||
## X-License: LGPL v2.1 + MIT for AceOO-2.0
|
||||
## Dependencies: AceLibrary, AceOO-2.0
|
||||
|
||||
AceAddon-2.0.lua
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,17 +0,0 @@
|
||||
## Interface: 30300
|
||||
## X-Curse-Packaged-Version: r1101
|
||||
## X-Curse-Project-Name: Ace2
|
||||
## X-Curse-Project-ID: ace2
|
||||
## X-Curse-Repository-ID: wow/ace2/mainline
|
||||
|
||||
## Title: Lib: AceDB-2.0
|
||||
## Notes: AddOn development framework
|
||||
## Author: Ace Development Team
|
||||
## LoadOnDemand: 1
|
||||
## X-Website: http://www.wowace.com
|
||||
## X-Category: Library
|
||||
## X-License: LGPL v2.1 + MIT for AceOO-2.0
|
||||
## Dependencies: AceLibrary, AceEvent-2.0, AceOO-2.0
|
||||
|
||||
AceDB-2.0.lua
|
||||
|
||||
@@ -1,998 +0,0 @@
|
||||
--[[
|
||||
Name: AceEvent-2.0
|
||||
Revision: $Rev: 1097 $
|
||||
Developed by: The Ace Development Team (http://www.wowace.com/index.php/The_Ace_Development_Team)
|
||||
Inspired By: Ace 1.x by Turan (turan@gryphon.com)
|
||||
Website: http://www.wowace.com/
|
||||
Documentation: http://www.wowace.com/index.php/AceEvent-2.0
|
||||
SVN: http://svn.wowace.com/wowace/trunk/Ace2/AceEvent-2.0
|
||||
Description: Mixin to allow for event handling, scheduling, and inter-addon
|
||||
communication.
|
||||
Dependencies: AceLibrary, AceOO-2.0
|
||||
License: LGPL v2.1
|
||||
]]
|
||||
|
||||
local MAJOR_VERSION = "AceEvent-2.0"
|
||||
local MINOR_VERSION = 90000 + tonumber(("$Revision: 1097 $"):match("(%d+)"))
|
||||
|
||||
if not AceLibrary then error(MAJOR_VERSION .. " requires AceLibrary") end
|
||||
if not AceLibrary:IsNewVersion(MAJOR_VERSION, MINOR_VERSION) then return end
|
||||
|
||||
if not AceLibrary:HasInstance("AceOO-2.0") then error(MAJOR_VERSION .. " requires AceOO-2.0") end
|
||||
|
||||
local AceOO = AceLibrary:GetInstance("AceOO-2.0")
|
||||
local Mixin = AceOO.Mixin
|
||||
local AceEvent = Mixin {
|
||||
"RegisterEvent",
|
||||
"RegisterAllEvents",
|
||||
"UnregisterEvent",
|
||||
"UnregisterAllEvents",
|
||||
"TriggerEvent",
|
||||
"ScheduleEvent",
|
||||
"ScheduleRepeatingEvent",
|
||||
"CancelScheduledEvent",
|
||||
"CancelAllScheduledEvents",
|
||||
"IsEventRegistered",
|
||||
"IsEventScheduled",
|
||||
"RegisterBucketEvent",
|
||||
"UnregisterBucketEvent",
|
||||
"UnregisterAllBucketEvents",
|
||||
"IsBucketEventRegistered",
|
||||
"ScheduleLeaveCombatAction",
|
||||
"CancelAllCombatSchedules",
|
||||
}
|
||||
|
||||
local weakKey = {__mode="k"}
|
||||
|
||||
local FAKE_NIL
|
||||
local RATE
|
||||
|
||||
local eventsWhichHappenOnce = {
|
||||
PLAYER_LOGIN = true,
|
||||
AceEvent_FullyInitialized = true,
|
||||
VARIABLES_LOADED = true,
|
||||
PLAYER_LOGOUT = true,
|
||||
}
|
||||
local next = next
|
||||
local pairs = pairs
|
||||
local pcall = pcall
|
||||
local type = type
|
||||
local GetTime = GetTime
|
||||
local gcinfo = gcinfo
|
||||
local unpack = unpack
|
||||
local geterrorhandler = geterrorhandler
|
||||
|
||||
local new, del
|
||||
do
|
||||
local cache = setmetatable({}, {__mode='k'})
|
||||
function new(...)
|
||||
local t = next(cache)
|
||||
if t then
|
||||
cache[t] = nil
|
||||
for i = 1, select('#', ...) do
|
||||
t[i] = select(i, ...)
|
||||
end
|
||||
return t
|
||||
else
|
||||
return { ... }
|
||||
end
|
||||
end
|
||||
function del(t)
|
||||
for k in pairs(t) do
|
||||
t[k] = nil
|
||||
end
|
||||
cache[t] = true
|
||||
return nil
|
||||
end
|
||||
end
|
||||
|
||||
local registeringFromAceEvent
|
||||
--[[----------------------------------------------------------------------------------
|
||||
Notes:
|
||||
* Registers the addon with a Blizzard event or a custom AceEvent, which will cause the given method to be called when that is triggered.
|
||||
Arguments:
|
||||
string - name of the event to register
|
||||
[optional] string or function - name of the method or function to call. Default: same name as "event".
|
||||
[optional] boolean - whether to have method called only once. Default: false
|
||||
------------------------------------------------------------------------------------]]
|
||||
function AceEvent:RegisterEvent(event, method, once)
|
||||
AceEvent:argCheck(event, 2, "string")
|
||||
if self == AceEvent and not registeringFromAceEvent then
|
||||
AceEvent:argCheck(method, 3, "function")
|
||||
self = method
|
||||
else
|
||||
AceEvent:argCheck(method, 3, "string", "function", "nil", "boolean", "number")
|
||||
if type(method) == "boolean" or type(method) == "number" then
|
||||
AceEvent:argCheck(once, 4, "nil")
|
||||
once, method = method, event
|
||||
end
|
||||
end
|
||||
AceEvent:argCheck(once, 4, "number", "boolean", "nil")
|
||||
if eventsWhichHappenOnce[event] then
|
||||
once = true
|
||||
end
|
||||
local throttleRate
|
||||
if type(once) == "number" then
|
||||
throttleRate, once = once
|
||||
end
|
||||
if not method then
|
||||
method = event
|
||||
end
|
||||
if type(method) == "string" and type(self[method]) ~= "function" then
|
||||
AceEvent:error("Cannot register event %q to method %q, it does not exist", event, method)
|
||||
else
|
||||
assert(type(method) == "function" or type(method) == "string")
|
||||
end
|
||||
|
||||
local AceEvent_registry = AceEvent.registry
|
||||
if not AceEvent_registry[event] then
|
||||
AceEvent_registry[event] = new()
|
||||
AceEvent.frame:RegisterEvent(event)
|
||||
end
|
||||
|
||||
local remember = true
|
||||
if AceEvent_registry[event][self] then
|
||||
remember = false
|
||||
end
|
||||
AceEvent_registry[event][self] = method
|
||||
|
||||
local AceEvent_onceRegistry = AceEvent.onceRegistry
|
||||
if once then
|
||||
if not AceEvent_onceRegistry then
|
||||
AceEvent.onceRegistry = {}
|
||||
AceEvent_onceRegistry = AceEvent.onceRegistry
|
||||
end
|
||||
if not AceEvent_onceRegistry[event] then
|
||||
AceEvent_onceRegistry[event] = new()
|
||||
end
|
||||
AceEvent_onceRegistry[event][self] = true
|
||||
else
|
||||
if AceEvent_onceRegistry and AceEvent_onceRegistry[event] then
|
||||
AceEvent_onceRegistry[event][self] = nil
|
||||
if not next(AceEvent_onceRegistry[event]) then
|
||||
AceEvent_onceRegistry[event] = del(AceEvent_onceRegistry[event])
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local AceEvent_throttleRegistry = AceEvent.throttleRegistry
|
||||
if throttleRate then
|
||||
if not AceEvent_throttleRegistry then
|
||||
AceEvent.throttleRegistry = {}
|
||||
AceEvent_throttleRegistry = AceEvent.throttleRegistry
|
||||
end
|
||||
if not AceEvent_throttleRegistry[event] then
|
||||
AceEvent_throttleRegistry[event] = new()
|
||||
end
|
||||
if AceEvent_throttleRegistry[event][self] then
|
||||
AceEvent_throttleRegistry[event][self] = nil
|
||||
end
|
||||
AceEvent_throttleRegistry[event][self] = setmetatable(new(), weakKey)
|
||||
local t = AceEvent_throttleRegistry[event][self]
|
||||
t[RATE] = throttleRate
|
||||
else
|
||||
if AceEvent_throttleRegistry and AceEvent_throttleRegistry[event] then
|
||||
if AceEvent_throttleRegistry[event][self] then
|
||||
AceEvent_throttleRegistry[event][self] = nil
|
||||
end
|
||||
if not next(AceEvent_throttleRegistry[event]) then
|
||||
AceEvent_throttleRegistry[event] = del(AceEvent_throttleRegistry[event])
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
if remember then
|
||||
AceEvent:TriggerEvent("AceEvent_EventRegistered", self, event)
|
||||
end
|
||||
end
|
||||
|
||||
local ALL_EVENTS
|
||||
|
||||
--[[----------------------------------------------------------------------------------
|
||||
Notes:
|
||||
* Registers all events to the given method
|
||||
* To access the current event, check AceEvent.currentEvent
|
||||
* To access the current event's unique identifier, check AceEvent.currentEventUID
|
||||
* This is only for debugging purposes.
|
||||
Arguments:
|
||||
[optional] string or function - name of the method or function to call. Default: same name as "event".
|
||||
------------------------------------------------------------------------------------]]
|
||||
function AceEvent:RegisterAllEvents(method)
|
||||
if self == AceEvent then
|
||||
AceEvent:argCheck(method, 1, "function")
|
||||
self = method
|
||||
else
|
||||
AceEvent:argCheck(method, 1, "string", "function")
|
||||
if type(method) == "string" and type(self[method]) ~= "function" then
|
||||
AceEvent:error("Cannot register all events to method %q, it does not exist", method)
|
||||
end
|
||||
end
|
||||
|
||||
local AceEvent_registry = AceEvent.registry
|
||||
if not AceEvent_registry[ALL_EVENTS] then
|
||||
AceEvent_registry[ALL_EVENTS] = new()
|
||||
AceEvent.frame:RegisterAllEvents()
|
||||
end
|
||||
|
||||
local remember = not AceEvent_registry[ALL_EVENTS][self]
|
||||
AceEvent_registry[ALL_EVENTS][self] = method
|
||||
if remember then
|
||||
AceEvent:TriggerEvent("AceEvent_EventRegistered", self, "all")
|
||||
end
|
||||
end
|
||||
|
||||
--[[----------------------------------------------------------------------------------
|
||||
Notes:
|
||||
* Trigger a custom AceEvent.
|
||||
* This should never be called to simulate fake Blizzard events.
|
||||
* Custom events should be in the form of AddonName_SpecificEvent
|
||||
Arguments:
|
||||
string - name of the event
|
||||
tuple - list of arguments to pass along
|
||||
------------------------------------------------------------------------------------]]
|
||||
function AceEvent:TriggerEvent(event, ...)
|
||||
AceEvent:argCheck(event, 2, "string")
|
||||
local AceEvent_registry = AceEvent.registry
|
||||
if (not AceEvent_registry[event] or not next(AceEvent_registry[event])) and (not AceEvent_registry[ALL_EVENTS] or not next(AceEvent_registry[ALL_EVENTS])) then
|
||||
return
|
||||
end
|
||||
local lastEvent = AceEvent.currentEvent
|
||||
AceEvent.currentEvent = event
|
||||
local lastEventUID = AceEvent.currentEventUID
|
||||
local uid = AceEvent.UID_NUM + 1
|
||||
AceEvent.UID_NUM = uid
|
||||
AceEvent.currentEventUID = uid
|
||||
|
||||
local tmp = new()
|
||||
|
||||
local AceEvent_onceRegistry = AceEvent.onceRegistry
|
||||
if AceEvent_onceRegistry and AceEvent_onceRegistry[event] then
|
||||
for obj, method in pairs(AceEvent_onceRegistry[event]) do
|
||||
tmp[obj] = AceEvent_registry[event] and AceEvent_registry[event][obj] or nil
|
||||
end
|
||||
local obj = next(tmp)
|
||||
while obj do
|
||||
local method = tmp[obj]
|
||||
AceEvent.UnregisterEvent(obj, event)
|
||||
if type(method) == "string" then
|
||||
local obj_method = obj[method]
|
||||
if obj_method then
|
||||
local success, err = pcall(obj_method, obj, ...)
|
||||
if not success then geterrorhandler()(err:find("%.lua:%d+:") and err or (debugstack():match("(.-: )in.-\n") or "") .. err) end
|
||||
end
|
||||
elseif method then -- function
|
||||
local success, err = pcall(method, ...)
|
||||
if not success then geterrorhandler()(err:find("%.lua:%d+:") and err or (debugstack():match("(.-: )in.-\n") or "") .. err) end
|
||||
end
|
||||
tmp[obj] = nil
|
||||
obj = next(tmp)
|
||||
end
|
||||
end
|
||||
|
||||
local AceEvent_throttleRegistry = AceEvent.throttleRegistry
|
||||
local throttleTable = AceEvent_throttleRegistry and AceEvent_throttleRegistry[event]
|
||||
if AceEvent_registry[event] then
|
||||
for obj, method in pairs(AceEvent_registry[event]) do
|
||||
tmp[obj] = method
|
||||
end
|
||||
local obj = next(tmp)
|
||||
while obj do
|
||||
local cont = nil
|
||||
if throttleTable and throttleTable[obj] then
|
||||
local a1 = ...
|
||||
if a1 == nil then
|
||||
a1 = FAKE_NIL
|
||||
end
|
||||
if not throttleTable[obj][a1] or GetTime() - throttleTable[obj][a1] >= throttleTable[obj][RATE] then
|
||||
throttleTable[obj][a1] = GetTime()
|
||||
else
|
||||
cont = true
|
||||
end
|
||||
end
|
||||
if not cont then
|
||||
local method = tmp[obj]
|
||||
local t = type(method)
|
||||
if t == "string" then
|
||||
local obj_method = obj[method]
|
||||
if obj_method then
|
||||
local success, err = pcall(obj_method, obj, ...)
|
||||
if not success then geterrorhandler()(err:find("%.lua:%d+:") and err or (debugstack():match("(.-: )in.-\n") or "") .. err) end
|
||||
end
|
||||
elseif t == "function" then -- function
|
||||
local success, err = pcall(method, ...)
|
||||
if not success then geterrorhandler()(err:find("%.lua:%d+:") and err or (debugstack():match("(.-: )in.-\n") or "") .. err) end
|
||||
else
|
||||
AceEvent:error("Cannot trigger event %q. %q's handler, %q, is not a method or function (%s).", event, obj, method, t)
|
||||
end
|
||||
end
|
||||
tmp[obj] = nil
|
||||
obj = next(tmp)
|
||||
end
|
||||
end
|
||||
if AceEvent_registry[ALL_EVENTS] then
|
||||
for obj, method in pairs(AceEvent_registry[ALL_EVENTS]) do
|
||||
tmp[obj] = method
|
||||
end
|
||||
local obj = next(tmp)
|
||||
while obj do
|
||||
local method = tmp[obj]
|
||||
local t = type(method)
|
||||
if t == "string" then
|
||||
local obj_method = obj[method]
|
||||
if obj_method then
|
||||
local success, err = pcall(obj_method, obj, ...)
|
||||
if not success then geterrorhandler()(err:find("%.lua:%d+:") and err or (debugstack():match("(.-: )in.-\n") or "") .. err) end
|
||||
end
|
||||
elseif t == "function" then
|
||||
local success, err = pcall(method, ...)
|
||||
if not success then geterrorhandler()(err:find("%.lua:%d+:") and err or (debugstack():match("(.-: )in.-\n") or "") .. err) end
|
||||
else
|
||||
AceEvent:error("Cannot trigger event %q. %q's handler, %q, is not a method or function (%s).", event, obj, method, t)
|
||||
end
|
||||
tmp[obj] = nil
|
||||
obj = next(tmp)
|
||||
end
|
||||
end
|
||||
tmp = del(tmp)
|
||||
AceEvent.currentEvent = lastEvent
|
||||
AceEvent.currentEventUID = lastEventUID
|
||||
end
|
||||
|
||||
local delayRegistry
|
||||
local OnUpdate
|
||||
do
|
||||
local tmp = {}
|
||||
OnUpdate = function()
|
||||
local t = GetTime()
|
||||
for k,v in pairs(delayRegistry) do
|
||||
tmp[k] = true
|
||||
end
|
||||
for k in pairs(tmp) do
|
||||
local v = delayRegistry[k]
|
||||
if v then
|
||||
local v_time = v.time
|
||||
if not v_time then
|
||||
delayRegistry[k] = nil
|
||||
elseif v_time <= t then
|
||||
local v_repeatDelay = v.repeatDelay
|
||||
if v_repeatDelay then
|
||||
-- use the event time, not the current time, else timing inaccuracies add up over time
|
||||
v.time = v_time + v_repeatDelay
|
||||
end
|
||||
local event = v.event
|
||||
local t = type(event)
|
||||
if t == "function" then
|
||||
local uid = AceEvent.UID_NUM + 1
|
||||
AceEvent.UID_NUM = uid
|
||||
AceEvent.currentEventUID = uid
|
||||
local success, err = pcall(event, unpack(v, 1, v.n))
|
||||
if not success then geterrorhandler()(err:find("%.lua:%d+:") and err or (debugstack():match("(.-: )in.-\n") or "") .. err) end
|
||||
AceEvent.currentEventUID = nil
|
||||
elseif t == "string" then
|
||||
AceEvent:TriggerEvent(event, unpack(v, 1, v.n))
|
||||
else
|
||||
AceEvent:error("Cannot trigger event %q, it's not a method or function (%s).", event, t)
|
||||
end
|
||||
if not v_repeatDelay then
|
||||
local x = delayRegistry[k]
|
||||
if x and x.time == v_time then -- check if it was manually reset
|
||||
if type(k) == "string" then
|
||||
del(delayRegistry[k])
|
||||
end
|
||||
delayRegistry[k] = nil
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
for k in pairs(tmp) do
|
||||
tmp[k] = nil
|
||||
end
|
||||
if not next(delayRegistry) then
|
||||
AceEvent.frame:Hide()
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local function ScheduleEvent(self, repeating, event, delay, ...)
|
||||
local id
|
||||
if type(event) == "string" and type(delay) ~= "number" then
|
||||
id, event, delay = event, delay, ...
|
||||
AceEvent:argCheck(event, 3, "string", "function", --[[ so message is right ]] "number")
|
||||
AceEvent:argCheck(delay, 4, "number")
|
||||
self:CancelScheduledEvent(id)
|
||||
else
|
||||
AceEvent:argCheck(event, 2, "string", "function")
|
||||
AceEvent:argCheck(delay, 3, "number")
|
||||
end
|
||||
|
||||
if not delayRegistry then
|
||||
AceEvent.delayRegistry = {}
|
||||
delayRegistry = AceEvent.delayRegistry
|
||||
AceEvent.frame:SetScript("OnUpdate", OnUpdate)
|
||||
end
|
||||
local t
|
||||
if id then
|
||||
t = new(select(2, ...))
|
||||
t.n = select('#', ...) - 1
|
||||
else
|
||||
t = new(...)
|
||||
t.n = select('#', ...)
|
||||
end
|
||||
t.event = event
|
||||
t.time = GetTime() + delay
|
||||
t.self = self
|
||||
t.id = id or t
|
||||
t.repeatDelay = repeating and delay
|
||||
delayRegistry[t.id] = t
|
||||
AceEvent.frame:Show()
|
||||
end
|
||||
|
||||
--[[----------------------------------------------------------------------------------
|
||||
Notes:
|
||||
* Schedule an event to fire.
|
||||
* To fire on the next frame, specify a delay of 0.
|
||||
Arguments:
|
||||
string or function - name of the event to fire, or a function to call.
|
||||
number - the amount of time to wait until calling.
|
||||
tuple - a list of arguments to pass along.
|
||||
------------------------------------------------------------------------------------]]
|
||||
function AceEvent:ScheduleEvent(event, delay, ...)
|
||||
if type(event) == "string" and type(delay) ~= "number" then
|
||||
AceEvent:argCheck(delay, 3, "string", "function", --[[ so message is right ]] "number")
|
||||
AceEvent:argCheck(..., 4, "number")
|
||||
else
|
||||
AceEvent:argCheck(event, 2, "string", "function")
|
||||
AceEvent:argCheck(delay, 3, "number")
|
||||
end
|
||||
|
||||
return ScheduleEvent(self, false, event, delay, ...)
|
||||
end
|
||||
|
||||
function AceEvent:ScheduleRepeatingEvent(event, delay, ...)
|
||||
if type(event) == "string" and type(delay) ~= "number" then
|
||||
AceEvent:argCheck(delay, 3, "string", "function", --[[ so message is right ]] "number")
|
||||
AceEvent:argCheck(..., 4, "number")
|
||||
else
|
||||
AceEvent:argCheck(event, 2, "string", "function")
|
||||
AceEvent:argCheck(delay, 3, "number")
|
||||
end
|
||||
|
||||
return ScheduleEvent(self, true, event, delay, ...)
|
||||
end
|
||||
|
||||
function AceEvent:CancelScheduledEvent(t)
|
||||
AceEvent:argCheck(t, 2, "string")
|
||||
if delayRegistry then
|
||||
local v = delayRegistry[t]
|
||||
if v then
|
||||
if type(t) == "string" then
|
||||
del(delayRegistry[t])
|
||||
end
|
||||
delayRegistry[t] = nil
|
||||
if not next(delayRegistry) then
|
||||
AceEvent.frame:Hide()
|
||||
end
|
||||
return true
|
||||
end
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
function AceEvent:IsEventScheduled(t)
|
||||
AceEvent:argCheck(t, 2, "string")
|
||||
if delayRegistry then
|
||||
local v = delayRegistry[t]
|
||||
if v then
|
||||
return true, v.time - GetTime()
|
||||
end
|
||||
end
|
||||
return false, nil
|
||||
end
|
||||
|
||||
function AceEvent:UnregisterEvent(event)
|
||||
AceEvent:argCheck(event, 2, "string")
|
||||
local AceEvent_registry = AceEvent.registry
|
||||
if AceEvent_registry[event] and AceEvent_registry[event][self] then
|
||||
AceEvent_registry[event][self] = nil
|
||||
local AceEvent_onceRegistry = AceEvent.onceRegistry
|
||||
if AceEvent_onceRegistry and AceEvent_onceRegistry[event] and AceEvent_onceRegistry[event][self] then
|
||||
AceEvent_onceRegistry[event][self] = nil
|
||||
if not next(AceEvent_onceRegistry[event]) then
|
||||
AceEvent_onceRegistry[event] = del(AceEvent_onceRegistry[event])
|
||||
end
|
||||
end
|
||||
local AceEvent_throttleRegistry = AceEvent.throttleRegistry
|
||||
if AceEvent_throttleRegistry and AceEvent_throttleRegistry[event] and AceEvent_throttleRegistry[event][self] then
|
||||
AceEvent_throttleRegistry[event][self] = nil
|
||||
if not next(AceEvent_throttleRegistry[event]) then
|
||||
AceEvent_throttleRegistry[event] = del(AceEvent_throttleRegistry[event])
|
||||
end
|
||||
end
|
||||
if not next(AceEvent_registry[event]) then
|
||||
AceEvent_registry[event] = del(AceEvent_registry[event])
|
||||
if not AceEvent_registry[ALL_EVENTS] or not next(AceEvent_registry[ALL_EVENTS]) then
|
||||
AceEvent.frame:UnregisterEvent(event)
|
||||
end
|
||||
end
|
||||
else
|
||||
if self == AceEvent then
|
||||
error(("Cannot unregister event %q. Improperly unregistering from AceEvent-2.0."):format(event), 2)
|
||||
else
|
||||
AceEvent:error("Cannot unregister event %q. %q is not registered with it.", event, self)
|
||||
end
|
||||
end
|
||||
AceEvent:TriggerEvent("AceEvent_EventUnregistered", self, event)
|
||||
end
|
||||
|
||||
function AceEvent:UnregisterAllEvents()
|
||||
local AceEvent_registry = AceEvent.registry
|
||||
if AceEvent_registry[ALL_EVENTS] and AceEvent_registry[ALL_EVENTS][self] then
|
||||
AceEvent_registry[ALL_EVENTS][self] = nil
|
||||
if not next(AceEvent_registry[ALL_EVENTS]) then
|
||||
AceEvent_registry[ALL_EVENTS] = del(AceEvent_registry[ALL_EVENTS])
|
||||
AceEvent.frame:UnregisterAllEvents()
|
||||
for k,v in pairs(AceEvent_registry) do
|
||||
AceEvent.frame:RegisterEvent(k)
|
||||
end
|
||||
end
|
||||
end
|
||||
if AceEvent_registry.AceEvent_EventUnregistered then
|
||||
local event, data = "AceEvent_EventUnregistered", AceEvent_registry.AceEvent_EventUnregistered
|
||||
local x = data[self]
|
||||
data[self] = nil
|
||||
if x then
|
||||
if not next(data) then
|
||||
if not AceEvent_registry[ALL_EVENTS] then
|
||||
AceEvent.frame:UnregisterEvent(event)
|
||||
end
|
||||
AceEvent_registry[event] = del(AceEvent_registry[event])
|
||||
end
|
||||
AceEvent:TriggerEvent("AceEvent_EventUnregistered", self, event)
|
||||
end
|
||||
end
|
||||
for event, data in pairs(AceEvent_registry) do
|
||||
local x = data[self]
|
||||
data[self] = nil
|
||||
if x and event ~= ALL_EVENTS then
|
||||
if not next(data) then
|
||||
if not AceEvent_registry[ALL_EVENTS] then
|
||||
AceEvent.frame:UnregisterEvent(event)
|
||||
end
|
||||
AceEvent_registry[event] = del(AceEvent_registry[event])
|
||||
end
|
||||
AceEvent:TriggerEvent("AceEvent_EventUnregistered", self, event)
|
||||
end
|
||||
end
|
||||
if AceEvent.onceRegistry then
|
||||
for event, data in pairs(AceEvent.onceRegistry) do
|
||||
data[self] = nil
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function AceEvent:CancelAllScheduledEvents()
|
||||
if delayRegistry then
|
||||
for k,v in pairs(delayRegistry) do
|
||||
if v.self == self then
|
||||
if type(k) == "string" then
|
||||
del(delayRegistry[k])
|
||||
end
|
||||
delayRegistry[k] = nil
|
||||
end
|
||||
end
|
||||
if not next(delayRegistry) then
|
||||
AceEvent.frame:Hide()
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function AceEvent:IsEventRegistered(event)
|
||||
AceEvent:argCheck(event, 2, "string")
|
||||
local AceEvent_registry = AceEvent.registry
|
||||
if self == AceEvent then
|
||||
return AceEvent_registry[event] and next(AceEvent_registry[event]) or AceEvent_registry[ALL_EVENTS] and next(AceEvent_registry[ALL_EVENTS]) and true or false
|
||||
end
|
||||
if AceEvent_registry[event] and AceEvent_registry[event][self] then
|
||||
return true, AceEvent_registry[event][self]
|
||||
end
|
||||
if AceEvent_registry[ALL_EVENTS] and AceEvent_registry[ALL_EVENTS][self] then
|
||||
return true, AceEvent_registry[ALL_EVENTS][self]
|
||||
end
|
||||
return false, nil
|
||||
end
|
||||
|
||||
local UnitExists = UnitExists
|
||||
local bucketfunc
|
||||
function AceEvent:RegisterBucketEvent(event, delay, method, ...)
|
||||
AceEvent:argCheck(event, 2, "string", "table")
|
||||
if type(event) == "table" then
|
||||
for k,v in pairs(event) do
|
||||
if type(k) ~= "number" then
|
||||
AceEvent:error("All keys to argument #2 to `RegisterBucketEvent' must be numbers.")
|
||||
elseif type(v) ~= "string" then
|
||||
AceEvent:error("All values to argument #2 to `RegisterBucketEvent' must be strings.")
|
||||
end
|
||||
end
|
||||
end
|
||||
AceEvent:argCheck(delay, 3, "number")
|
||||
if AceEvent == self then
|
||||
AceEvent:argCheck(method, 4, "function")
|
||||
self = method
|
||||
else
|
||||
if type(event) == "string" then
|
||||
AceEvent:argCheck(method, 4, "string", "function", "nil")
|
||||
if not method then
|
||||
method = event
|
||||
end
|
||||
else
|
||||
AceEvent:argCheck(method, 4, "string", "function")
|
||||
end
|
||||
|
||||
if type(method) == "string" and type(self[method]) ~= "function" then
|
||||
AceEvent:error("Cannot register event %q to method %q, it does not exist", event, method)
|
||||
end
|
||||
end
|
||||
local buckets = AceEvent.buckets
|
||||
if not buckets[event] then
|
||||
buckets[event] = new()
|
||||
end
|
||||
if not buckets[event][self] then
|
||||
local t = {}
|
||||
t.current = {}
|
||||
t.self = self
|
||||
buckets[event][self] = t
|
||||
else
|
||||
AceEvent.CancelScheduledEvent(self, buckets[event][self].id)
|
||||
end
|
||||
local bucket = buckets[event][self]
|
||||
bucket.method = method
|
||||
|
||||
local n = select('#', ...)
|
||||
if n > 0 then
|
||||
for i = 1, n do
|
||||
bucket[i] = select(i, ...)
|
||||
end
|
||||
end
|
||||
bucket.n = n
|
||||
|
||||
local func = function(arg1)
|
||||
bucket.run = true
|
||||
if arg1 then
|
||||
bucket.current[arg1] = true
|
||||
end
|
||||
end
|
||||
buckets[event][self].func = func
|
||||
local isUnitBucket = true
|
||||
if type(event) == "string" then
|
||||
AceEvent.RegisterEvent(self, event, func)
|
||||
if not event:find("^UNIT_") then
|
||||
isUnitBucket = nil
|
||||
end
|
||||
else
|
||||
for _,v in ipairs(event) do
|
||||
AceEvent.RegisterEvent(self, v, func)
|
||||
if isUnitBucket and not v:find("^UNIT_") then
|
||||
isUnitBucket = nil
|
||||
end
|
||||
end
|
||||
end
|
||||
bucket.unit = isUnitBucket
|
||||
if not bucketfunc then
|
||||
bucketfunc = function(bucket)
|
||||
if bucket.run then
|
||||
local current = bucket.current
|
||||
local method = bucket.method
|
||||
local self = bucket.self
|
||||
if bucket.unit then
|
||||
for unit in pairs(current) do
|
||||
if not UnitExists(unit) then
|
||||
current[unit] = nil
|
||||
end
|
||||
end
|
||||
end
|
||||
if type(method) == "string" then
|
||||
self[method](self, current, unpack(bucket, 1, bucket.n))
|
||||
elseif method then -- function
|
||||
method(current, unpack(bucket, 1, bucket.n))
|
||||
end
|
||||
for k in pairs(current) do
|
||||
current[k] = nil
|
||||
k = nil
|
||||
end
|
||||
bucket.run = nil
|
||||
end
|
||||
end
|
||||
end
|
||||
bucket.id = "AceEvent-Bucket-" .. tostring(bucket)
|
||||
AceEvent.ScheduleRepeatingEvent(self, bucket.id, bucketfunc, delay, bucket)
|
||||
end
|
||||
|
||||
function AceEvent:IsBucketEventRegistered(event)
|
||||
AceEvent:argCheck(event, 2, "string", "table")
|
||||
return AceEvent.buckets and AceEvent.buckets[event] and AceEvent.buckets[event][self]
|
||||
end
|
||||
|
||||
function AceEvent:UnregisterBucketEvent(event)
|
||||
AceEvent:argCheck(event, 2, "string", "table")
|
||||
if not AceEvent.buckets or not AceEvent.buckets[event] or not AceEvent.buckets[event][self] then
|
||||
AceEvent:error("Cannot unregister bucket event %q. %q is not registered with it.", event, self)
|
||||
end
|
||||
|
||||
local bucket = AceEvent.buckets[event][self]
|
||||
|
||||
if type(event) == "string" then
|
||||
AceEvent.UnregisterEvent(self, event)
|
||||
else
|
||||
for _,v in ipairs(event) do
|
||||
AceEvent.UnregisterEvent(self, v)
|
||||
end
|
||||
end
|
||||
AceEvent:CancelScheduledEvent(bucket.id)
|
||||
|
||||
bucket.current = nil
|
||||
AceEvent.buckets[event][self] = nil
|
||||
if not next(AceEvent.buckets[event]) then
|
||||
AceEvent.buckets[event] = del(AceEvent.buckets[event])
|
||||
end
|
||||
end
|
||||
|
||||
function AceEvent:UnregisterAllBucketEvents()
|
||||
if not AceEvent.buckets or not next(AceEvent.buckets) then
|
||||
return
|
||||
end
|
||||
for k,v in pairs(AceEvent.buckets) do
|
||||
if v == self then
|
||||
AceEvent.UnregisterBucketEvent(self, k)
|
||||
k = nil
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local combatSchedules
|
||||
function AceEvent:CancelAllCombatSchedules()
|
||||
local i = 0
|
||||
while true do
|
||||
i = i + 1
|
||||
if not combatSchedules[i] then
|
||||
break
|
||||
end
|
||||
local v = combatSchedules[i]
|
||||
if v.self == self then
|
||||
v = del(v)
|
||||
table.remove(combatSchedules, i)
|
||||
i = i - 1
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local inCombat = false
|
||||
|
||||
function AceEvent:PLAYER_REGEN_DISABLED()
|
||||
inCombat = true
|
||||
end
|
||||
|
||||
do
|
||||
local tmp = {}
|
||||
function AceEvent:PLAYER_REGEN_ENABLED()
|
||||
inCombat = false
|
||||
for i, v in ipairs(combatSchedules) do
|
||||
tmp[i] = v
|
||||
combatSchedules[i] = nil
|
||||
end
|
||||
for i, v in ipairs(tmp) do
|
||||
local func = v.func
|
||||
if func then
|
||||
local success, err = pcall(func, unpack(v, 1, v.n))
|
||||
if not success then geterrorhandler()(err:find("%.lua:%d+:") and err or (debugstack():match("(.-: )in.-\n") or "") .. err) end
|
||||
else
|
||||
local obj = v.obj or v.self
|
||||
local method = v.method
|
||||
local obj_method = obj[method]
|
||||
if obj_method then
|
||||
local success, err = pcall(obj_method, obj, unpack(v, 1, v.n))
|
||||
if not success then geterrorhandler()(err:find("%.lua:%d+:") and err or (debugstack():match("(.-: )in.-\n") or "") .. err) end
|
||||
end
|
||||
end
|
||||
tmp[i] = del(v)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function AceEvent:ScheduleLeaveCombatAction(method, ...)
|
||||
local style = type(method)
|
||||
if self == AceEvent then
|
||||
if style == "table" then
|
||||
local func = (...)
|
||||
AceEvent:argCheck(func, 3, "string")
|
||||
if type(method[func]) ~= "function" then
|
||||
AceEvent:error("Cannot schedule a combat action to method %q, it does not exist", func)
|
||||
end
|
||||
else
|
||||
AceEvent:argCheck(method, 2, "function", --[[so message is right]] "table")
|
||||
end
|
||||
self = method
|
||||
else
|
||||
AceEvent:argCheck(method, 2, "function", "string", "table")
|
||||
if style == "string" and type(self[method]) ~= "function" then
|
||||
AceEvent:error("Cannot schedule a combat action to method %q, it does not exist", method)
|
||||
elseif style == "table" then
|
||||
local func = (...)
|
||||
AceEvent:argCheck(func, 3, "string")
|
||||
if type(method[func]) ~= "function" then
|
||||
AceEvent:error("Cannot schedule a combat action to method %q, it does not exist", func)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
if not inCombat then
|
||||
local success, err
|
||||
if type(method) == "function" then
|
||||
success, err = pcall(method, ...)
|
||||
elseif type(method) == "table" then
|
||||
local func = (...)
|
||||
success, err = pcall(method[func], method, select(2, ...))
|
||||
else
|
||||
success, err = pcall(self[method], self, ...)
|
||||
end
|
||||
if not success then geterrorhandler()(err:find("%.lua:%d+:") and err or (debugstack():match("(.-: )in.-\n") or "") .. err) end
|
||||
return
|
||||
end
|
||||
local t
|
||||
local n = select('#', ...)
|
||||
if style == "table" then
|
||||
t = new(select(2, ...))
|
||||
t.obj = method
|
||||
t.method = (...)
|
||||
t.n = n-1
|
||||
else
|
||||
t = new(...)
|
||||
t.n = n
|
||||
if style == "function" then
|
||||
t.func = method
|
||||
else
|
||||
t.method = method
|
||||
end
|
||||
end
|
||||
t.self = self
|
||||
table.insert(combatSchedules, t)
|
||||
end
|
||||
|
||||
function AceEvent:OnEmbedDisable(target)
|
||||
self.UnregisterAllEvents(target)
|
||||
|
||||
self.CancelAllScheduledEvents(target)
|
||||
|
||||
self.UnregisterAllBucketEvents(target)
|
||||
|
||||
self.CancelAllCombatSchedules(target)
|
||||
end
|
||||
|
||||
function AceEvent:IsFullyInitialized()
|
||||
return self.postInit or false
|
||||
end
|
||||
|
||||
local function activate(self, oldLib, oldDeactivate)
|
||||
AceEvent = self
|
||||
|
||||
self.onceRegistry = oldLib and oldLib.onceRegistry or {}
|
||||
self.throttleRegistry = oldLib and oldLib.throttleRegistry or {}
|
||||
self.delayRegistry = oldLib and oldLib.delayRegistry or {}
|
||||
self.buckets = oldLib and oldLib.buckets or {}
|
||||
self.registry = oldLib and oldLib.registry or {}
|
||||
self.frame = oldLib and oldLib.frame or CreateFrame("Frame", "AceEvent20Frame")
|
||||
self.playerLogin = IsLoggedIn() and true
|
||||
self.postInit = oldLib and oldLib.postInit or self.playerLogin and ChatTypeInfo and ChatTypeInfo.WHISPER and ChatTypeInfo.WHISPER.r and true
|
||||
self.ALL_EVENTS = oldLib and oldLib.ALL_EVENTS or _G.newproxy()
|
||||
self.FAKE_NIL = oldLib and oldLib.FAKE_NIL or _G.newproxy()
|
||||
self.RATE = oldLib and oldLib.RATE or _G.newproxy()
|
||||
self.combatSchedules = oldLib and oldLib.combatSchedules or {}
|
||||
self.UID_NUM = oldLib and oldLib.UID_NUM or 0
|
||||
|
||||
combatSchedules = self.combatSchedules
|
||||
ALL_EVENTS = self.ALL_EVENTS
|
||||
FAKE_NIL = self.FAKE_NIL
|
||||
RATE = self.RATE
|
||||
local inPlw = false
|
||||
local blacklist = {
|
||||
UNIT_INVENTORY_CHANGED = true,
|
||||
BAG_UPDATE = true,
|
||||
ITEM_LOCK_CHANGED = true,
|
||||
ACTIONBAR_SLOT_CHANGED = true,
|
||||
}
|
||||
self.frame:SetScript("OnEvent", function(_, event, ...)
|
||||
if event == "PLAYER_ENTERING_WORLD" then
|
||||
inPlw = false
|
||||
elseif event == "PLAYER_LEAVING_WORLD" then
|
||||
inPlw = true
|
||||
end
|
||||
if event and (not inPlw or not blacklist[event]) then
|
||||
self:TriggerEvent(event, ...)
|
||||
end
|
||||
end)
|
||||
if self.delayRegistry then
|
||||
delayRegistry = self.delayRegistry
|
||||
self.frame:SetScript("OnUpdate", OnUpdate)
|
||||
end
|
||||
|
||||
self:UnregisterAllEvents()
|
||||
self:CancelAllScheduledEvents()
|
||||
|
||||
local function handleFullInit()
|
||||
if not self.postInit then
|
||||
local function func()
|
||||
self.postInit = true
|
||||
self:TriggerEvent("AceEvent_FullyInitialized")
|
||||
if self.registry["CHAT_MSG_CHANNEL_NOTICE"] and self.registry["CHAT_MSG_CHANNEL_NOTICE"][self] then
|
||||
self:UnregisterEvent("CHAT_MSG_CHANNEL_NOTICE")
|
||||
end
|
||||
if self.registry["MEETINGSTONE_CHANGED"] and self.registry["MEETINGSTONE_CHANGED"][self] then
|
||||
self:UnregisterEvent("MEETINGSTONE_CHANGED")
|
||||
end
|
||||
end
|
||||
registeringFromAceEvent = true
|
||||
self:RegisterEvent("MEETINGSTONE_CHANGED", func, true)
|
||||
self:RegisterEvent("CHAT_MSG_CHANNEL_NOTICE", func, true)
|
||||
|
||||
self:ScheduleEvent("AceEvent_FullyInitialized", func, 10)
|
||||
registeringFromAceEvent = nil
|
||||
end
|
||||
end
|
||||
|
||||
if not self.playerLogin then
|
||||
registeringFromAceEvent = true
|
||||
self:RegisterEvent("PLAYER_LOGIN", function()
|
||||
self.playerLogin = true
|
||||
handleFullInit()
|
||||
handleFullInit = nil
|
||||
end, true)
|
||||
registeringFromAceEvent = nil
|
||||
else
|
||||
handleFullInit()
|
||||
handleFullInit = nil
|
||||
end
|
||||
|
||||
if not AceEvent20EditBox then
|
||||
CreateFrame("Editbox", "AceEvent20EditBox")
|
||||
end
|
||||
local editbox = AceEvent20EditBox
|
||||
function editbox:Execute(line)
|
||||
local defaulteditbox = DEFAULT_CHAT_FRAME.editBox
|
||||
self:SetAttribute("chatType", defaulteditbox:GetAttribute("chatType"))
|
||||
self:SetAttribute("tellTarget", defaulteditbox:GetAttribute("tellTarget"))
|
||||
self:SetAttribute("channelTarget", defaulteditbox:GetAttribute("channelTarget"))
|
||||
self:SetText(line)
|
||||
ChatEdit_SendText(self)
|
||||
end
|
||||
editbox:Hide()
|
||||
_G["SLASH_IN1"] = "/in"
|
||||
SlashCmdList["IN"] = function(msg)
|
||||
local seconds, command, rest = msg:match("^([^%s]+)%s+(/[^%s]+)(.*)$")
|
||||
seconds = tonumber(seconds)
|
||||
if not seconds then
|
||||
DEFAULT_CHAT_FRAME:AddMessage("Error, bad arguments to /in. Must be in the form of `/in 5 /say hi'")
|
||||
return
|
||||
end
|
||||
if IsSecureCmd(command) then
|
||||
DEFAULT_CHAT_FRAME:AddMessage(("Error, /in cannot call secure command: %s"):format(command))
|
||||
return
|
||||
end
|
||||
self:ScheduleEvent("AceEventSlashIn-" .. math.random(1, 1000000000), editbox.Execute, seconds, editbox, command .. rest)
|
||||
end
|
||||
|
||||
registeringFromAceEvent = true
|
||||
self:RegisterEvent("PLAYER_REGEN_ENABLED")
|
||||
self:RegisterEvent("PLAYER_REGEN_DISABLED")
|
||||
self:RegisterEvent("LOOT_OPENED", function()
|
||||
if GetRealNumRaidMembers() > 0 or GetRealNumPartyMembers() > 0 then SendAddonMessage("LOOT_OPENED", "", "RAID") end
|
||||
end)
|
||||
inCombat = InCombatLockdown()
|
||||
registeringFromAceEvent = nil
|
||||
|
||||
self:activate(oldLib, oldDeactivate)
|
||||
if oldLib then
|
||||
oldDeactivate(oldLib)
|
||||
end
|
||||
end
|
||||
|
||||
AceLibrary:Register(AceEvent, MAJOR_VERSION, MINOR_VERSION, activate)
|
||||
@@ -1,17 +0,0 @@
|
||||
## Interface: 30300
|
||||
## X-Curse-Packaged-Version: r1101
|
||||
## X-Curse-Project-Name: Ace2
|
||||
## X-Curse-Project-ID: ace2
|
||||
## X-Curse-Repository-ID: wow/ace2/mainline
|
||||
|
||||
## Title: Lib: AceEvent-2.0
|
||||
## Notes: AddOn development framework
|
||||
## Author: Ace Development Team
|
||||
## LoadOnDemand: 1
|
||||
## X-Website: http://www.wowace.com
|
||||
## X-Category: Library
|
||||
## X-License: LGPL v2.1 + MIT for AceOO-2.0
|
||||
## Dependencies: AceLibrary, AceOO-2.0
|
||||
|
||||
AceEvent-2.0.lua
|
||||
|
||||
@@ -1,799 +0,0 @@
|
||||
--[[
|
||||
Name: AceLibrary
|
||||
Revision: $Rev: 1091 $
|
||||
Developed by: The Ace Development Team (http://www.wowace.com/index.php/The_Ace_Development_Team)
|
||||
Inspired By: Iriel (iriel@vigilance-committee.org)
|
||||
Tekkub (tekkub@gmail.com)
|
||||
Revision: $Rev: 1091 $
|
||||
Website: http://www.wowace.com/
|
||||
Documentation: http://www.wowace.com/index.php/AceLibrary
|
||||
SVN: http://svn.wowace.com/wowace/trunk/Ace2/AceLibrary
|
||||
Description: Versioning library to handle other library instances, upgrading,
|
||||
and proper access.
|
||||
It also provides a base for libraries to work off of, providing
|
||||
proper error tools. It is handy because all the errors occur in the
|
||||
file that called it, not in the library file itself.
|
||||
Dependencies: None
|
||||
License: LGPL v2.1
|
||||
]]
|
||||
|
||||
local ACELIBRARY_MAJOR = "AceLibrary"
|
||||
local ACELIBRARY_MINOR = 90000 + tonumber(("$Revision: 1091 $"):match("(%d+)"))
|
||||
|
||||
local _G = getfenv(0)
|
||||
local previous = _G[ACELIBRARY_MAJOR]
|
||||
if previous and not previous:IsNewVersion(ACELIBRARY_MAJOR, ACELIBRARY_MINOR) then return end
|
||||
|
||||
do
|
||||
-- LibStub is a simple versioning stub meant for use in Libraries. http://www.wowace.com/wiki/LibStub for more info
|
||||
-- LibStub is hereby placed in the Public Domain -- Credits: Kaelten, Cladhaire, ckknight, Mikk, Ammo, Nevcairiel, joshborke
|
||||
local LIBSTUB_MAJOR, LIBSTUB_MINOR = "LibStub", 2 -- NEVER MAKE THIS AN SVN REVISION! IT NEEDS TO BE USABLE IN ALL REPOS!
|
||||
local LibStub = _G[LIBSTUB_MAJOR]
|
||||
|
||||
if not LibStub or LibStub.minor < LIBSTUB_MINOR then
|
||||
LibStub = LibStub or {libs = {}, minors = {} }
|
||||
_G[LIBSTUB_MAJOR] = LibStub
|
||||
LibStub.minor = LIBSTUB_MINOR
|
||||
|
||||
function LibStub:NewLibrary(major, minor)
|
||||
assert(type(major) == "string", "Bad argument #2 to `NewLibrary' (string expected)")
|
||||
minor = assert(tonumber(strmatch(minor, "%d+")), "Minor version must either be a number or contain a number.")
|
||||
local oldminor = self.minors[major]
|
||||
if oldminor and oldminor >= minor then return nil end
|
||||
self.minors[major], self.libs[major] = minor, self.libs[major] or {}
|
||||
return self.libs[major], oldminor
|
||||
end
|
||||
|
||||
function LibStub:GetLibrary(major, silent)
|
||||
if not self.libs[major] and not silent then
|
||||
error(("Cannot find a library instance of %q."):format(tostring(major)), 2)
|
||||
end
|
||||
return self.libs[major], self.minors[major]
|
||||
end
|
||||
|
||||
function LibStub:IterateLibraries() return pairs(self.libs) end
|
||||
setmetatable(LibStub, { __call = LibStub.GetLibrary })
|
||||
end
|
||||
end
|
||||
local LibStub = _G.LibStub
|
||||
|
||||
-- If you don't want AceLibrary to enable libraries that are LoadOnDemand but
|
||||
-- disabled in the addon screen, set this to true.
|
||||
local DONT_ENABLE_LIBRARIES = nil
|
||||
|
||||
local function safecall(func,...)
|
||||
local success, err = pcall(func,...)
|
||||
if not success then geterrorhandler()(err:find("%.lua:%d+:") and err or (debugstack():match("\n(.-: )in.-\n") or "") .. err) end
|
||||
end
|
||||
|
||||
-- @table AceLibrary
|
||||
-- @brief System to handle all versioning of libraries.
|
||||
local AceLibrary = {}
|
||||
local AceLibrary_mt = {}
|
||||
setmetatable(AceLibrary, AceLibrary_mt)
|
||||
|
||||
local function error(self, message, ...)
|
||||
if type(self) ~= "table" then
|
||||
return _G.error(("Bad argument #1 to `error' (table expected, got %s)"):format(type(self)), 2)
|
||||
end
|
||||
|
||||
local stack = debugstack()
|
||||
if not message then
|
||||
local second = stack:match("\n(.-)\n")
|
||||
message = "error raised! " .. second
|
||||
else
|
||||
local arg = { ... } -- not worried about table creation, as errors don't happen often
|
||||
|
||||
for i = 1, #arg do
|
||||
arg[i] = tostring(arg[i])
|
||||
end
|
||||
for i = 1, 10 do
|
||||
table.insert(arg, "nil")
|
||||
end
|
||||
message = message:format(unpack(arg))
|
||||
end
|
||||
|
||||
if getmetatable(self) and getmetatable(self).__tostring then
|
||||
message = ("%s: %s"):format(tostring(self), message)
|
||||
elseif type(rawget(self, 'GetLibraryVersion')) == "function" and AceLibrary:HasInstance(self:GetLibraryVersion()) then
|
||||
message = ("%s: %s"):format(self:GetLibraryVersion(), message)
|
||||
elseif type(rawget(self, 'class')) == "table" and type(rawget(self.class, 'GetLibraryVersion')) == "function" and AceLibrary:HasInstance(self.class:GetLibraryVersion()) then
|
||||
message = ("%s: %s"):format(self.class:GetLibraryVersion(), message)
|
||||
end
|
||||
|
||||
local first = stack:gsub("\n.*", "")
|
||||
local file = first:gsub(".*\\(.*).lua:%d+: .*", "%1")
|
||||
file = file:gsub("([%(%)%.%*%+%-%[%]%?%^%$%%])", "%%%1")
|
||||
|
||||
|
||||
local i = 0
|
||||
for s in stack:gmatch("\n([^\n]*)") do
|
||||
i = i + 1
|
||||
if not s:find(file .. "%.lua:%d+:") and not s:find("%(tail call%)") then
|
||||
file = s:gsub("^.*\\(.*).lua:%d+: .*", "%1")
|
||||
file = file:gsub("([%(%)%.%*%+%-%[%]%?%^%$%%])", "%%%1")
|
||||
break
|
||||
end
|
||||
end
|
||||
local j = 0
|
||||
for s in stack:gmatch("\n([^\n]*)") do
|
||||
j = j + 1
|
||||
if j > i and not s:find(file .. "%.lua:%d+:") and not s:find("%(tail call%)") then
|
||||
return _G.error(message, j+1)
|
||||
end
|
||||
end
|
||||
return _G.error(message, 2)
|
||||
end
|
||||
|
||||
local type = type
|
||||
local function argCheck(self, arg, num, kind, kind2, kind3, kind4, kind5)
|
||||
if type(num) ~= "number" then
|
||||
return error(self, "Bad argument #3 to `argCheck' (number expected, got %s)", type(num))
|
||||
elseif type(kind) ~= "string" then
|
||||
return error(self, "Bad argument #4 to `argCheck' (string expected, got %s)", type(kind))
|
||||
end
|
||||
arg = type(arg)
|
||||
if arg ~= kind and arg ~= kind2 and arg ~= kind3 and arg ~= kind4 and arg ~= kind5 then
|
||||
local stack = debugstack()
|
||||
local func = stack:match("`argCheck'.-([`<].-['>])")
|
||||
if not func then
|
||||
func = stack:match("([`<].-['>])")
|
||||
end
|
||||
if kind5 then
|
||||
return error(self, "Bad argument #%s to %s (%s, %s, %s, %s, or %s expected, got %s)", tonumber(num) or 0/0, func, kind, kind2, kind3, kind4, kind5, arg)
|
||||
elseif kind4 then
|
||||
return error(self, "Bad argument #%s to %s (%s, %s, %s, or %s expected, got %s)", tonumber(num) or 0/0, func, kind, kind2, kind3, kind4, arg)
|
||||
elseif kind3 then
|
||||
return error(self, "Bad argument #%s to %s (%s, %s, or %s expected, got %s)", tonumber(num) or 0/0, func, kind, kind2, kind3, arg)
|
||||
elseif kind2 then
|
||||
return error(self, "Bad argument #%s to %s (%s or %s expected, got %s)", tonumber(num) or 0/0, func, kind, kind2, arg)
|
||||
else
|
||||
return error(self, "Bad argument #%s to %s (%s expected, got %s)", tonumber(num) or 0/0, func, kind, arg)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local pcall
|
||||
do
|
||||
local function check(self, ret, ...)
|
||||
if not ret then
|
||||
local s = ...
|
||||
return error(self, (s:gsub(".-%.lua:%d-: ", "")))
|
||||
else
|
||||
return ...
|
||||
end
|
||||
end
|
||||
|
||||
function pcall(self, func, ...)
|
||||
return check(self, _G.pcall(func, ...))
|
||||
end
|
||||
end
|
||||
|
||||
local recurse = {}
|
||||
local function addToPositions(t, major)
|
||||
if not AceLibrary.positions[t] or AceLibrary.positions[t] == major then
|
||||
rawset(t, recurse, true)
|
||||
AceLibrary.positions[t] = major
|
||||
for k,v in pairs(t) do
|
||||
if type(v) == "table" and not rawget(v, recurse) then
|
||||
addToPositions(v, major)
|
||||
end
|
||||
if type(k) == "table" and not rawget(k, recurse) then
|
||||
addToPositions(k, major)
|
||||
end
|
||||
end
|
||||
local mt = getmetatable(t)
|
||||
if mt and not rawget(mt, recurse) then
|
||||
addToPositions(mt, major)
|
||||
end
|
||||
rawset(t, recurse, nil)
|
||||
end
|
||||
end
|
||||
|
||||
local function svnRevisionToNumber(text)
|
||||
local kind = type(text)
|
||||
if kind == "number" or tonumber(text) then
|
||||
return tonumber(text)
|
||||
elseif kind == "string" then
|
||||
if text:find("^%$Revision: (%d+) %$$") then
|
||||
return tonumber((text:match("^%$Revision: (%d+) %$$")))
|
||||
elseif text:find("^%$Rev: (%d+) %$$") then
|
||||
return tonumber((text:match("^%$Rev: (%d+) %$$")))
|
||||
elseif text:find("^%$LastChangedRevision: (%d+) %$$") then
|
||||
return tonumber((text:match("^%$LastChangedRevision: (%d+) %$$")))
|
||||
end
|
||||
end
|
||||
return nil
|
||||
end
|
||||
|
||||
local crawlReplace
|
||||
do
|
||||
local recurse = {}
|
||||
local function func(t, to, from)
|
||||
if recurse[t] then
|
||||
return
|
||||
end
|
||||
recurse[t] = true
|
||||
local mt = getmetatable(t)
|
||||
setmetatable(t, nil)
|
||||
rawset(t, to, rawget(t, from))
|
||||
rawset(t, from, nil)
|
||||
for k,v in pairs(t) do
|
||||
if v == from then
|
||||
t[k] = to
|
||||
elseif type(v) == "table" then
|
||||
if not recurse[v] then
|
||||
func(v, to, from)
|
||||
end
|
||||
end
|
||||
|
||||
if type(k) == "table" then
|
||||
if not recurse[k] then
|
||||
func(k, to, from)
|
||||
end
|
||||
end
|
||||
end
|
||||
setmetatable(t, mt)
|
||||
if mt then
|
||||
if mt == from then
|
||||
setmetatable(t, to)
|
||||
elseif not recurse[mt] then
|
||||
func(mt, to, from)
|
||||
end
|
||||
end
|
||||
end
|
||||
function crawlReplace(t, to, from)
|
||||
func(t, to, from)
|
||||
for k in pairs(recurse) do
|
||||
recurse[k] = nil
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- @function destroyTable
|
||||
-- @brief remove all the contents of a table
|
||||
-- @param t table to destroy
|
||||
local function destroyTable(t)
|
||||
setmetatable(t, nil)
|
||||
for k,v in pairs(t) do
|
||||
t[k] = nil
|
||||
end
|
||||
end
|
||||
|
||||
local function isFrame(frame)
|
||||
return type(frame) == "table" and type(rawget(frame, 0)) == "userdata" and type(rawget(frame, 'IsFrameType')) == "function" and getmetatable(frame) and type(rawget(getmetatable(frame), '__index')) == "function"
|
||||
end
|
||||
|
||||
-- @function copyTable
|
||||
-- @brief Create a shallow copy of a table and return it.
|
||||
-- @param from The table to copy from
|
||||
-- @return A shallow copy of the table
|
||||
local function copyTable(from, to)
|
||||
if not to then
|
||||
to = {}
|
||||
end
|
||||
for k,v in pairs(from) do
|
||||
to[k] = v
|
||||
end
|
||||
setmetatable(to, getmetatable(from))
|
||||
return to
|
||||
end
|
||||
|
||||
-- @function deepTransfer
|
||||
-- @brief Fully transfer all data, keeping proper previous table
|
||||
-- backreferences stable.
|
||||
-- @param to The table with which data is to be injected into
|
||||
-- @param from The table whose data will be injected into the first
|
||||
-- @param saveFields If available, a shallow copy of the basic data is saved
|
||||
-- in here.
|
||||
-- @param list The account of table references
|
||||
-- @param list2 The current status on which tables have been traversed.
|
||||
local deepTransfer
|
||||
do
|
||||
-- @function examine
|
||||
-- @brief Take account of all the table references to be shared
|
||||
-- between the to and from tables.
|
||||
-- @param to The table with which data is to be injected into
|
||||
-- @param from The table whose data will be injected into the first
|
||||
-- @param list An account of the table references
|
||||
local function examine(to, from, list, major)
|
||||
list[from] = to
|
||||
for k,v in pairs(from) do
|
||||
if rawget(to, k) and type(from[k]) == "table" and type(to[k]) == "table" and not list[from[k]] then
|
||||
if from[k] == to[k] then
|
||||
list[from[k]] = to[k]
|
||||
elseif AceLibrary.positions[from[v]] ~= major and AceLibrary.positions[from[v]] then
|
||||
list[from[k]] = from[k]
|
||||
elseif not list[from[k]] then
|
||||
examine(to[k], from[k], list, major)
|
||||
end
|
||||
end
|
||||
end
|
||||
return list
|
||||
end
|
||||
|
||||
function deepTransfer(to, from, saveFields, major, list, list2)
|
||||
setmetatable(to, nil)
|
||||
if not list then
|
||||
list = {}
|
||||
list2 = {}
|
||||
examine(to, from, list, major)
|
||||
end
|
||||
list2[to] = to
|
||||
for k,v in pairs(to) do
|
||||
if type(rawget(from, k)) ~= "table" or type(v) ~= "table" or isFrame(v) then
|
||||
if saveFields then
|
||||
saveFields[k] = v
|
||||
end
|
||||
to[k] = nil
|
||||
elseif v ~= _G then
|
||||
if saveFields then
|
||||
saveFields[k] = copyTable(v)
|
||||
end
|
||||
end
|
||||
end
|
||||
for k in pairs(from) do
|
||||
if rawget(to, k) and to[k] ~= from[k] and AceLibrary.positions[to[k]] == major and from[k] ~= _G then
|
||||
if not list2[to[k]] then
|
||||
deepTransfer(to[k], from[k], nil, major, list, list2)
|
||||
end
|
||||
to[k] = list[to[k]] or list2[to[k]]
|
||||
else
|
||||
rawset(to, k, from[k])
|
||||
end
|
||||
end
|
||||
setmetatable(to, getmetatable(from))
|
||||
local mt = getmetatable(to)
|
||||
if mt then
|
||||
if list[mt] then
|
||||
setmetatable(to, list[mt])
|
||||
elseif mt.__index and list[mt.__index] then
|
||||
mt.__index = list[mt.__index]
|
||||
end
|
||||
end
|
||||
destroyTable(from)
|
||||
end
|
||||
end
|
||||
|
||||
local function TryToEnable(addon)
|
||||
if DONT_ENABLE_LIBRARIES then return end
|
||||
local isondemand = IsAddOnLoadOnDemand(addon)
|
||||
if isondemand then
|
||||
local _, _, _, enabled = GetAddOnInfo(addon)
|
||||
EnableAddOn(addon)
|
||||
local _, _, _, _, loadable = GetAddOnInfo(addon)
|
||||
if not loadable and not enabled then
|
||||
DisableAddOn(addon)
|
||||
end
|
||||
|
||||
return loadable
|
||||
end
|
||||
end
|
||||
|
||||
-- @method TryToLoadStandalone
|
||||
-- @brief Attempt to find and load a standalone version of the requested library
|
||||
-- @param major A string representing the major version
|
||||
-- @return If library is found and loaded, true is return. If not loadable, false is returned.
|
||||
-- If the library has been requested previously, nil is returned.
|
||||
local function TryToLoadStandalone(major)
|
||||
if not AceLibrary.scannedlibs then AceLibrary.scannedlibs = {} end
|
||||
if AceLibrary.scannedlibs[major] then return end
|
||||
|
||||
AceLibrary.scannedlibs[major] = true
|
||||
|
||||
local name, _, _, enabled, loadable = GetAddOnInfo(major)
|
||||
|
||||
loadable = (enabled and loadable) or TryToEnable(name)
|
||||
|
||||
local loaded = false
|
||||
if loadable then
|
||||
loaded = true
|
||||
LoadAddOn(name)
|
||||
end
|
||||
|
||||
local field = "X-AceLibrary-" .. major
|
||||
for i = 1, GetNumAddOns() do
|
||||
if GetAddOnMetadata(i, field) then
|
||||
name, _, _, enabled, loadable = GetAddOnInfo(i)
|
||||
|
||||
loadable = (enabled and loadable) or TryToEnable(name)
|
||||
if loadable then
|
||||
loaded = true
|
||||
LoadAddOn(name)
|
||||
end
|
||||
end
|
||||
end
|
||||
return loaded
|
||||
end
|
||||
|
||||
-- @method IsNewVersion
|
||||
-- @brief Obtain whether the supplied version would be an upgrade to the
|
||||
-- current version. This allows for bypass code in library
|
||||
-- declaration.
|
||||
-- @param major A string representing the major version
|
||||
-- @param minor An integer or an svn revision string representing the minor version
|
||||
-- @return whether the supplied version would be newer than what is
|
||||
-- currently available.
|
||||
function AceLibrary:IsNewVersion(major, minor)
|
||||
argCheck(self, major, 2, "string")
|
||||
TryToLoadStandalone(major)
|
||||
|
||||
if type(minor) == "string" then
|
||||
local m = svnRevisionToNumber(minor)
|
||||
if m then
|
||||
minor = m
|
||||
else
|
||||
_G.error(("Bad argument #3 to `IsNewVersion'. Must be a number or SVN revision string. %q is not appropriate"):format(minor), 2)
|
||||
end
|
||||
end
|
||||
argCheck(self, minor, 3, "number")
|
||||
local lib, oldMinor = LibStub:GetLibrary(major, true)
|
||||
if lib then
|
||||
return oldMinor < minor
|
||||
end
|
||||
local data = self.libs[major]
|
||||
if not data then
|
||||
return true
|
||||
end
|
||||
return data.minor < minor
|
||||
end
|
||||
|
||||
-- @method HasInstance
|
||||
-- @brief Returns whether an instance exists. This allows for optional support of a library.
|
||||
-- @param major A string representing the major version.
|
||||
-- @param minor (optional) An integer or an svn revision string representing the minor version.
|
||||
-- @return Whether an instance exists.
|
||||
function AceLibrary:HasInstance(major, minor)
|
||||
argCheck(self, major, 2, "string")
|
||||
if minor ~= false then
|
||||
TryToLoadStandalone(major)
|
||||
end
|
||||
|
||||
local lib, ver = LibStub:GetLibrary(major, true)
|
||||
if not lib and self.libs[major] then
|
||||
lib, ver = self.libs[major].instance, self.libs[major].minor
|
||||
end
|
||||
if minor then
|
||||
if type(minor) == "string" then
|
||||
local m = svnRevisionToNumber(minor)
|
||||
if m then
|
||||
minor = m
|
||||
else
|
||||
_G.error(("Bad argument #3 to `HasInstance'. Must be a number or SVN revision string. %q is not appropriate"):format(minor), 2)
|
||||
end
|
||||
end
|
||||
argCheck(self, minor, 3, "number")
|
||||
if not lib then
|
||||
return false
|
||||
end
|
||||
return ver == minor
|
||||
end
|
||||
return not not lib
|
||||
end
|
||||
|
||||
-- @method GetInstance
|
||||
-- @brief Returns the library with the given major/minor version.
|
||||
-- @param major A string representing the major version.
|
||||
-- @param minor (optional) An integer or an svn revision string representing the minor version.
|
||||
-- @return The library with the given major/minor version.
|
||||
function AceLibrary:GetInstance(major, minor)
|
||||
argCheck(self, major, 2, "string")
|
||||
if minor ~= false then
|
||||
TryToLoadStandalone(major)
|
||||
end
|
||||
|
||||
local data, ver = LibStub:GetLibrary(major, true)
|
||||
if not data then
|
||||
if self.libs[major] then
|
||||
data, ver = self.libs[major].instance, self.libs[major].minor
|
||||
else
|
||||
_G.error(("Cannot find a library instance of %s."):format(major), 2)
|
||||
return
|
||||
end
|
||||
end
|
||||
if minor then
|
||||
if type(minor) == "string" then
|
||||
local m = svnRevisionToNumber(minor)
|
||||
if m then
|
||||
minor = m
|
||||
else
|
||||
_G.error(("Bad argument #3 to `GetInstance'. Must be a number or SVN revision string. %q is not appropriate"):format(minor), 2)
|
||||
end
|
||||
end
|
||||
argCheck(self, minor, 2, "number")
|
||||
if ver ~= minor then
|
||||
_G.error(("Cannot find a library instance of %s, minor version %d."):format(major, minor), 2)
|
||||
end
|
||||
end
|
||||
return data
|
||||
end
|
||||
|
||||
-- Syntax sugar. AceLibrary("FooBar-1.0")
|
||||
AceLibrary_mt.__call = AceLibrary.GetInstance
|
||||
|
||||
local donothing = function() end
|
||||
|
||||
local AceEvent
|
||||
|
||||
local tmp = {}
|
||||
|
||||
-- @method Register
|
||||
-- @brief Registers a new version of a given library.
|
||||
-- @param newInstance the library to register
|
||||
-- @param major the major version of the library
|
||||
-- @param minor the minor version of the library
|
||||
-- @param activateFunc (optional) A function to be called when the library is
|
||||
-- fully activated. Takes the arguments
|
||||
-- (newInstance [, oldInstance, oldDeactivateFunc]). If
|
||||
-- oldInstance is given, you should probably call
|
||||
-- oldDeactivateFunc(oldInstance).
|
||||
-- @param deactivateFunc (optional) A function to be called by a newer library's
|
||||
-- activateFunc.
|
||||
-- @param externalFunc (optional) A function to be called whenever a new
|
||||
-- library is registered.
|
||||
function AceLibrary:Register(newInstance, major, minor, activateFunc, deactivateFunc, externalFunc)
|
||||
argCheck(self, newInstance, 2, "table")
|
||||
argCheck(self, major, 3, "string")
|
||||
if major ~= ACELIBRARY_MAJOR then
|
||||
for k,v in pairs(_G) do
|
||||
if v == newInstance then
|
||||
geterrorhandler()((debugstack():match("(.-: )in.-\n") or "") .. ("Cannot register library %q. It is part of the global table in _G[%q]."):format(major, k))
|
||||
end
|
||||
end
|
||||
end
|
||||
if major ~= ACELIBRARY_MAJOR and not major:find("^[%a%-][%a%d%-]*%-%d+%.%d+$") then
|
||||
_G.error(string.format("Bad argument #3 to `Register'. Must be in the form of \"Name-1.0\". %q is not appropriate", major), 2)
|
||||
end
|
||||
if type(minor) == "string" then
|
||||
local m = svnRevisionToNumber(minor)
|
||||
if m then
|
||||
minor = m
|
||||
else
|
||||
_G.error(("Bad argument #4 to `Register'. Must be a number or SVN revision string. %q is not appropriate"):format(minor), 2)
|
||||
end
|
||||
end
|
||||
argCheck(self, minor, 4, "number")
|
||||
if math.floor(minor) ~= minor or minor < 0 then
|
||||
error(self, "Bad argument #4 to `Register' (integer >= 0 expected, got %s)", minor)
|
||||
end
|
||||
argCheck(self, activateFunc, 5, "function", "nil")
|
||||
argCheck(self, deactivateFunc, 6, "function", "nil")
|
||||
argCheck(self, externalFunc, 7, "function", "nil")
|
||||
if not deactivateFunc then
|
||||
deactivateFunc = donothing
|
||||
end
|
||||
local data = self.libs[major]
|
||||
if not data then
|
||||
-- This is new
|
||||
if LibStub:GetLibrary(major, true) then
|
||||
error(self, "Cannot register library %q. It is already registered with LibStub.", major)
|
||||
end
|
||||
local instance = LibStub:NewLibrary(major, minor)
|
||||
copyTable(newInstance, instance)
|
||||
crawlReplace(instance, instance, newInstance)
|
||||
destroyTable(newInstance)
|
||||
if AceLibrary == newInstance then
|
||||
self = instance
|
||||
AceLibrary = instance
|
||||
end
|
||||
self.libs[major] = {
|
||||
instance = instance,
|
||||
minor = minor,
|
||||
deactivateFunc = deactivateFunc,
|
||||
externalFunc = externalFunc,
|
||||
}
|
||||
rawset(instance, 'GetLibraryVersion', function(self)
|
||||
return major, minor
|
||||
end)
|
||||
if not rawget(instance, 'error') then
|
||||
rawset(instance, 'error', error)
|
||||
end
|
||||
if not rawget(instance, 'argCheck') then
|
||||
rawset(instance, 'argCheck', argCheck)
|
||||
end
|
||||
if not rawget(instance, 'pcall') then
|
||||
rawset(instance, 'pcall', pcall)
|
||||
end
|
||||
addToPositions(instance, major)
|
||||
if activateFunc then
|
||||
safecall(activateFunc, instance, nil, nil) -- no old version, so explicit nil
|
||||
end
|
||||
|
||||
if externalFunc then
|
||||
for k, data_instance in LibStub:IterateLibraries() do -- all libraries
|
||||
tmp[k] = data_instance
|
||||
end
|
||||
for k, data in pairs(self.libs) do -- Ace libraries which may not have been registered with LibStub
|
||||
tmp[k] = data.instance
|
||||
end
|
||||
for k, data_instance in pairs(tmp) do
|
||||
if k ~= major then
|
||||
safecall(externalFunc, instance, k, data_instance)
|
||||
end
|
||||
tmp[k] = nil
|
||||
end
|
||||
end
|
||||
|
||||
for k,data in pairs(self.libs) do -- only Ace libraries
|
||||
if k ~= major and data.externalFunc then
|
||||
safecall(data.externalFunc, data.instance, major, instance)
|
||||
end
|
||||
end
|
||||
if major == "AceEvent-2.0" then
|
||||
AceEvent = instance
|
||||
end
|
||||
if AceEvent then
|
||||
AceEvent.TriggerEvent(self, "AceLibrary_Register", major, instance)
|
||||
end
|
||||
|
||||
return instance
|
||||
end
|
||||
if minor <= data.minor then
|
||||
-- This one is already obsolete, raise an error.
|
||||
_G.error(("Obsolete library registered. %s is already registered at version %d. You are trying to register version %d. Hint: if not AceLibrary:IsNewVersion(%q, %d) then return end"):format(major, data.minor, minor, major, minor), 2)
|
||||
return
|
||||
end
|
||||
local instance = data.instance
|
||||
-- This is an update
|
||||
local oldInstance = {}
|
||||
|
||||
local libStubInstance = LibStub:GetLibrary(major, true)
|
||||
if not libStubInstance then -- non-LibStub AceLibrary registered the library
|
||||
-- pass
|
||||
elseif libStubInstance ~= instance then
|
||||
error(self, "Cannot register library %q. It is already registered with LibStub.", major)
|
||||
else
|
||||
LibStub:NewLibrary(major, minor) -- upgrade the minor version
|
||||
end
|
||||
|
||||
addToPositions(newInstance, major)
|
||||
local isAceLibrary = (AceLibrary == newInstance)
|
||||
local old_error, old_argCheck, old_pcall
|
||||
if isAceLibrary then
|
||||
self = instance
|
||||
AceLibrary = instance
|
||||
|
||||
old_error = instance.error
|
||||
old_argCheck = instance.argCheck
|
||||
old_pcall = instance.pcall
|
||||
|
||||
self.error = error
|
||||
self.argCheck = argCheck
|
||||
self.pcall = pcall
|
||||
end
|
||||
deepTransfer(instance, newInstance, oldInstance, major)
|
||||
crawlReplace(instance, instance, newInstance)
|
||||
local oldDeactivateFunc = data.deactivateFunc
|
||||
data.minor = minor
|
||||
data.deactivateFunc = deactivateFunc
|
||||
data.externalFunc = externalFunc
|
||||
rawset(instance, 'GetLibraryVersion', function()
|
||||
return major, minor
|
||||
end)
|
||||
if not rawget(instance, 'error') then
|
||||
rawset(instance, 'error', error)
|
||||
end
|
||||
if not rawget(instance, 'argCheck') then
|
||||
rawset(instance, 'argCheck', argCheck)
|
||||
end
|
||||
if not rawget(instance, 'pcall') then
|
||||
rawset(instance, 'pcall', pcall)
|
||||
end
|
||||
if isAceLibrary then
|
||||
for _,v in pairs(self.libs) do
|
||||
local i = type(v) == "table" and v.instance
|
||||
if type(i) == "table" then
|
||||
if not rawget(i, 'error') or i.error == old_error then
|
||||
rawset(i, 'error', error)
|
||||
end
|
||||
if not rawget(i, 'argCheck') or i.argCheck == old_argCheck then
|
||||
rawset(i, 'argCheck', argCheck)
|
||||
end
|
||||
if not rawget(i, 'pcall') or i.pcall == old_pcall then
|
||||
rawset(i, 'pcall', pcall)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
if activateFunc then
|
||||
safecall(activateFunc, instance, oldInstance, oldDeactivateFunc)
|
||||
else
|
||||
safecall(oldDeactivateFunc, oldInstance)
|
||||
end
|
||||
oldInstance = nil
|
||||
|
||||
if externalFunc then
|
||||
for k, data_instance in LibStub:IterateLibraries() do -- all libraries
|
||||
tmp[k] = data_instance
|
||||
end
|
||||
for k, data in pairs(self.libs) do -- Ace libraries which may not have been registered with LibStub
|
||||
tmp[k] = data.instance
|
||||
end
|
||||
for k, data_instance in pairs(tmp) do
|
||||
if k ~= major then
|
||||
safecall(externalFunc, instance, k, data_instance)
|
||||
end
|
||||
tmp[k] = nil
|
||||
end
|
||||
end
|
||||
|
||||
return instance
|
||||
end
|
||||
|
||||
function AceLibrary:IterateLibraries()
|
||||
local t = {}
|
||||
for major, instance in LibStub:IterateLibraries() do
|
||||
t[major] = instance
|
||||
end
|
||||
for major, data in pairs(self.libs) do
|
||||
t[major] = data.instance
|
||||
end
|
||||
return pairs(t)
|
||||
end
|
||||
|
||||
local function manuallyFinalize(major, instance)
|
||||
if AceLibrary.libs[major] then
|
||||
-- don't work on Ace libraries
|
||||
return
|
||||
end
|
||||
local finalizedExternalLibs = AceLibrary.finalizedExternalLibs
|
||||
if finalizedExternalLibs[major] then
|
||||
return
|
||||
end
|
||||
finalizedExternalLibs[major] = true
|
||||
|
||||
for k,data in pairs(AceLibrary.libs) do -- only Ace libraries
|
||||
if k ~= major and data.externalFunc then
|
||||
safecall(data.externalFunc, data.instance, major, instance)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- @function Activate
|
||||
-- @brief The activateFunc for AceLibrary itself. Called when
|
||||
-- AceLibrary properly registers.
|
||||
-- @param self Reference to AceLibrary
|
||||
-- @param oldLib (optional) Reference to an old version of AceLibrary
|
||||
-- @param oldDeactivate (optional) Function to deactivate the old lib
|
||||
local function activate(self, oldLib, oldDeactivate)
|
||||
AceLibrary = self
|
||||
if not self.libs then
|
||||
self.libs = oldLib and oldLib.libs or {}
|
||||
self.scannedlibs = oldLib and oldLib.scannedlibs or {}
|
||||
end
|
||||
if not self.positions then
|
||||
self.positions = oldLib and oldLib.positions or setmetatable({}, { __mode = "k" })
|
||||
end
|
||||
self.finalizedExternalLibs = oldLib and oldLib.finalizedExternalLibs or {}
|
||||
self.frame = oldLib and oldLib.frame or CreateFrame("Frame")
|
||||
self.frame:UnregisterAllEvents()
|
||||
self.frame:RegisterEvent("ADDON_LOADED")
|
||||
self.frame:SetScript("OnEvent", function()
|
||||
for major, instance in LibStub:IterateLibraries() do
|
||||
manuallyFinalize(major, instance)
|
||||
end
|
||||
end)
|
||||
for major, instance in LibStub:IterateLibraries() do
|
||||
manuallyFinalize(major, instance)
|
||||
end
|
||||
|
||||
-- Expose the library in the global environment
|
||||
_G[ACELIBRARY_MAJOR] = self
|
||||
|
||||
if oldDeactivate then
|
||||
oldDeactivate(oldLib)
|
||||
end
|
||||
end
|
||||
|
||||
if not previous then
|
||||
previous = AceLibrary
|
||||
end
|
||||
if not previous.libs then
|
||||
previous.libs = {}
|
||||
end
|
||||
AceLibrary.libs = previous.libs
|
||||
if not previous.positions then
|
||||
previous.positions = setmetatable({}, { __mode = "k" })
|
||||
end
|
||||
AceLibrary.positions = previous.positions
|
||||
AceLibrary:Register(AceLibrary, ACELIBRARY_MAJOR, ACELIBRARY_MINOR, activate, nil)
|
||||
@@ -1,15 +0,0 @@
|
||||
## Interface: 30300
|
||||
## X-Curse-Packaged-Version: r1101
|
||||
## X-Curse-Project-Name: Ace2
|
||||
## X-Curse-Project-ID: ace2
|
||||
## X-Curse-Repository-ID: wow/ace2/mainline
|
||||
|
||||
## Title: Lib: AceLibrary
|
||||
## Notes: AddOn development framework
|
||||
## Author: Ace Development Team
|
||||
## X-Website: http://www.wowace.com
|
||||
## X-Category: Library
|
||||
## X-License: LGPL v2.1 + MIT for AceOO-2.0
|
||||
|
||||
AceLibrary.lua
|
||||
|
||||
@@ -1,980 +0,0 @@
|
||||
--[[
|
||||
Name: AceOO-2.0
|
||||
Revision: $Rev: 1091 $
|
||||
Developed by: The Ace Development Team (http://www.wowace.com/index.php/The_Ace_Development_Team)
|
||||
Inspired By: Ace 1.x by Turan (turan@gryphon.com)
|
||||
Website: http://www.wowace.com/
|
||||
Documentation: http://www.wowace.com/index.php/AceOO-2.0
|
||||
SVN: http://svn.wowace.com/wowace/trunk/Ace2/AceOO-2.0
|
||||
Description: Library to provide an object-orientation framework.
|
||||
Dependencies: AceLibrary
|
||||
License: MIT
|
||||
]]
|
||||
|
||||
local MAJOR_VERSION = "AceOO-2.0"
|
||||
local MINOR_VERSION = 90000 + tonumber(("$Revision: 1091 $"):match("(%d+)"))
|
||||
|
||||
-- This ensures the code is only executed if the libary doesn't already exist, or is a newer version
|
||||
if not AceLibrary then error(MAJOR_VERSION .. " requires AceLibrary.") end
|
||||
if not AceLibrary:IsNewVersion(MAJOR_VERSION, MINOR_VERSION) then return end
|
||||
|
||||
local AceOO = {
|
||||
error = AceLibrary.error,
|
||||
argCheck = AceLibrary.argCheck
|
||||
}
|
||||
|
||||
-- @function getuid
|
||||
-- @brief Obtain a unique string identifier for the object in question.
|
||||
-- @param t The object to obtain the uid for.
|
||||
-- @return The uid string.
|
||||
local function getuid(t)
|
||||
local mt = getmetatable(t)
|
||||
setmetatable(t, nil)
|
||||
local str = tostring(t)
|
||||
setmetatable(t, mt)
|
||||
local cap = str:match("[^:]*: 0x(.*)$") or str:match("[^:]*: (.*)$")
|
||||
if cap then
|
||||
return ("0"):rep(8 - #cap) .. cap
|
||||
end
|
||||
end
|
||||
|
||||
local function getlibrary(o)
|
||||
if type(o) == "table" then
|
||||
return o
|
||||
elseif type(o) == "string" then
|
||||
if not AceLibrary:HasInstance(o) then
|
||||
AceOO:error("Library %q does not exist.", o)
|
||||
end
|
||||
return AceLibrary(o)
|
||||
end
|
||||
end
|
||||
|
||||
local function deeprawget(self, k)
|
||||
while true do
|
||||
local v = rawget(self, k)
|
||||
if v ~= nil then
|
||||
return v
|
||||
end
|
||||
local mt = getmetatable(self)
|
||||
if not mt or type(mt.__index) ~= "table" then
|
||||
return nil
|
||||
end
|
||||
self = mt.__index
|
||||
end
|
||||
end
|
||||
|
||||
-- @function Factory
|
||||
-- @brief Construct a factory for the creation of objects.
|
||||
-- @param obj The object whose init method will be called on the new factory
|
||||
-- object.
|
||||
-- @param newobj The object whose init method will be called on the new
|
||||
-- objects that the Factory creates, to initialize them.
|
||||
-- @param (...) Arguments which will be passed to obj.init() in addition
|
||||
-- to the Factory object.
|
||||
-- @return The new factory which creates a newobj when its new method is called,
|
||||
-- or when it is called directly (__call metamethod).
|
||||
local Factory
|
||||
do
|
||||
local function getlibraries(...)
|
||||
if select('#', ...) == 0 then
|
||||
return
|
||||
end
|
||||
return getlibrary((select(1, ...))), getlibraries(select(2, ...))
|
||||
end
|
||||
local arg = {}
|
||||
local function new(obj, ...)
|
||||
local t = {}
|
||||
local uid = getuid(t)
|
||||
obj:init(t, getlibraries(...))
|
||||
t.uid = uid
|
||||
return t
|
||||
end
|
||||
|
||||
local function createnew(self, ...)
|
||||
local o = self.prototype
|
||||
local x = new(o, getlibraries(...))
|
||||
return x
|
||||
end
|
||||
|
||||
function Factory(obj, newobj, ...)
|
||||
local t = new(obj, ...)
|
||||
t.prototype = newobj
|
||||
t.new = createnew
|
||||
getmetatable(t).__call = t.new
|
||||
return t
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
local function objtostring(self)
|
||||
if self.ToString then
|
||||
return self:ToString()
|
||||
elseif self.GetLibraryVersion then
|
||||
return (self:GetLibraryVersion())
|
||||
elseif self.super then
|
||||
local s = "Sub-" .. tostring(self.super)
|
||||
local first = true
|
||||
if self.interfaces then
|
||||
for interface in pairs(self.interfaces) do
|
||||
if first then
|
||||
s = s .. "(" .. tostring(interface)
|
||||
first = false
|
||||
else
|
||||
s = s .. ", " .. tostring(interface)
|
||||
end
|
||||
end
|
||||
end
|
||||
if self.mixins then
|
||||
for mixin in pairs(self.mixins) do
|
||||
if first then
|
||||
s = s .. tostring(mixin)
|
||||
first = false
|
||||
else
|
||||
s = s .. ", " .. tostring(mixin)
|
||||
end
|
||||
end
|
||||
end
|
||||
if first then
|
||||
if self.uid then
|
||||
return s .. ":" .. self.uid
|
||||
else
|
||||
return s
|
||||
end
|
||||
else
|
||||
return s .. ")"
|
||||
end
|
||||
else
|
||||
return self.uid and 'Subclass:' .. self.uid or 'Subclass'
|
||||
end
|
||||
end
|
||||
|
||||
-- @table Object
|
||||
-- @brief Base of all objects, including Class.
|
||||
--
|
||||
-- @method init
|
||||
-- @brief Initialize a new object.
|
||||
-- @param newobject The object to initialize
|
||||
-- @param class The class to make newobject inherit from
|
||||
local Object
|
||||
do
|
||||
Object = {}
|
||||
function Object:init(newobject, class)
|
||||
local parent = class or self
|
||||
if not rawget(newobject, 'uid') then
|
||||
newobject.uid = getuid(newobject)
|
||||
end
|
||||
local mt = {
|
||||
__index = parent,
|
||||
__tostring = objtostring,
|
||||
}
|
||||
setmetatable(newobject, mt)
|
||||
end
|
||||
Object.uid = getuid(Object)
|
||||
setmetatable(Object, { __tostring = function() return 'Object' end })
|
||||
end
|
||||
|
||||
local Interface
|
||||
|
||||
local function validateInterface(object, interface)
|
||||
if not object.class and object.prototype then
|
||||
object = object.prototype
|
||||
end
|
||||
for k,v in pairs(interface.interface) do
|
||||
if tostring(type(object[k])) ~= v then
|
||||
return false
|
||||
end
|
||||
end
|
||||
if interface.superinterfaces then
|
||||
for superinterface in pairs(interface.superinterfaces) do
|
||||
if not validateInterface(object, superinterface) then
|
||||
return false
|
||||
end
|
||||
end
|
||||
end
|
||||
if type(object.class) == "table" and rawequal(object.class.prototype, object) then
|
||||
if not object.class.interfaces then
|
||||
rawset(object.class, 'interfaces', {})
|
||||
end
|
||||
object.class.interfaces[interface] = true
|
||||
elseif type(object.class) == "table" and type(object.class.prototype) == "table" then
|
||||
validateInterface(object.class.prototype, interface)
|
||||
-- check if class is proper, thus preventing future checks.
|
||||
end
|
||||
return true
|
||||
end
|
||||
|
||||
-- @function inherits
|
||||
-- @brief Return whether an Object or Class inherits from a given
|
||||
-- parent.
|
||||
-- @param object Object or Class to check
|
||||
-- @param parent Parent to test inheritance from
|
||||
-- @return whether an Object or Class inherits from a given
|
||||
-- parent.
|
||||
local function inherits(object, parent)
|
||||
object = getlibrary(object)
|
||||
if type(parent) == "string" then
|
||||
if not AceLibrary:HasInstance(parent) then
|
||||
return false
|
||||
else
|
||||
parent = AceLibrary(parent)
|
||||
end
|
||||
end
|
||||
AceOO:argCheck(parent, 2, "table")
|
||||
if type(object) ~= "table" then
|
||||
return false
|
||||
end
|
||||
local current
|
||||
local class = deeprawget(object, 'class')
|
||||
if class then
|
||||
current = class
|
||||
else
|
||||
current = object
|
||||
end
|
||||
if type(current) ~= "table" then
|
||||
return false
|
||||
end
|
||||
if rawequal(current, parent) then
|
||||
return true
|
||||
end
|
||||
if parent.class then
|
||||
while true do
|
||||
if rawequal(current, Object) then
|
||||
break
|
||||
end
|
||||
if current.mixins then
|
||||
for mixin in pairs(current.mixins) do
|
||||
if rawequal(mixin, parent) then
|
||||
return true
|
||||
end
|
||||
end
|
||||
end
|
||||
if current.interfaces then
|
||||
for interface in pairs(current.interfaces) do
|
||||
if rawequal(interface, parent) then
|
||||
return true
|
||||
end
|
||||
end
|
||||
end
|
||||
current = deeprawget(current, 'super')
|
||||
if type(current) ~= "table" then
|
||||
break
|
||||
end
|
||||
end
|
||||
|
||||
local isInterface = false
|
||||
local curr = parent.class
|
||||
while true do
|
||||
if rawequal(curr, Object) then
|
||||
break
|
||||
elseif rawequal(curr, Interface) then
|
||||
isInterface = true
|
||||
break
|
||||
end
|
||||
curr = deeprawget(curr, 'super')
|
||||
if type(curr) ~= "table" then
|
||||
break
|
||||
end
|
||||
end
|
||||
return isInterface and validateInterface(object, parent)
|
||||
else
|
||||
while true do
|
||||
if rawequal(current, parent) then
|
||||
return true
|
||||
elseif rawequal(current, Object) then
|
||||
return false
|
||||
end
|
||||
current = deeprawget(current, 'super')
|
||||
if type(current) ~= "table" then
|
||||
return false
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- @table Class
|
||||
-- @brief An object factory which sets up inheritence and supports
|
||||
-- 'mixins'.
|
||||
--
|
||||
-- @metamethod Class call
|
||||
-- @brief Call ClassFactory:new() to create a new class.
|
||||
--
|
||||
-- @method Class new
|
||||
-- @brief Construct a new object.
|
||||
-- @param (...) Arguments to pass to the object init function.
|
||||
-- @return The new object.
|
||||
--
|
||||
-- @method Class init
|
||||
-- @brief Initialize a new class.
|
||||
-- @param parent Superclass.
|
||||
-- @param (...) Mixins.
|
||||
--
|
||||
-- @method Class ToString
|
||||
-- @return A string representing the object, in this case 'Class'.
|
||||
local initStatus
|
||||
local Class
|
||||
local Mixin
|
||||
local autoEmbed = false
|
||||
local function traverseInterfaces(bit, total)
|
||||
if bit.superinterfaces then
|
||||
for interface in pairs(bit.superinterfaces) do
|
||||
if not total[interface] then
|
||||
total[interface] = true
|
||||
traverseInterfaces(interface, total)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
local class_new
|
||||
do
|
||||
Class = Factory(Object, setmetatable({}, {__index = Object}), Object)
|
||||
Class.super = Object
|
||||
|
||||
local function protostring(t)
|
||||
return '<' .. tostring(t.class) .. ' prototype>'
|
||||
end
|
||||
local function classobjectstring(t)
|
||||
if t.ToString then
|
||||
return t:ToString()
|
||||
elseif t.GetLibraryVersion then
|
||||
return (t:GetLibraryVersion())
|
||||
else
|
||||
return '<' .. tostring(t.class) .. ' instance>'
|
||||
end
|
||||
end
|
||||
local function classobjectequal(self, other)
|
||||
if type(self) == "table" and self.Equals then
|
||||
return self:Equals(other)
|
||||
elseif type(other) == "table" and other.Equals then
|
||||
return other:Equals(self)
|
||||
elseif type(self) == "table" and self.CompareTo then
|
||||
return self:CompareTo(other) == 0
|
||||
elseif type(other) == "table" and other.CompareTo then
|
||||
return other:CompareTo(self) == 0
|
||||
else
|
||||
return rawequal(self, other)
|
||||
end
|
||||
end
|
||||
local function classobjectlessthan(self, other)
|
||||
if type(self) == "table" and self.IsLessThan then
|
||||
return self:IsLessThan(other)
|
||||
elseif type(other) == "table" and other.IsLessThanOrEqualTo then
|
||||
return not other:IsLessThanOrEqualTo(self)
|
||||
elseif type(self) == "table" and self.CompareTo then
|
||||
return self:CompareTo(other) < 0
|
||||
elseif type(other) == "table" and other.CompareTo then
|
||||
return other:CompareTo(self) > 0
|
||||
elseif type(other) == "table" and other.IsLessThan and other.Equals then
|
||||
return other:Equals(self) or other:IsLessThan(self)
|
||||
else
|
||||
AceOO:error("cannot compare two objects")
|
||||
end
|
||||
end
|
||||
local function classobjectlessthanequal(self, other)
|
||||
if type(self) == "table" and self.IsLessThanOrEqualTo then
|
||||
return self:IsLessThanOrEqualTo(other)
|
||||
elseif type(other) == "table" and other.IsLessThan then
|
||||
return not other:IsLessThan(self)
|
||||
elseif type(self) == "table" and self.CompareTo then
|
||||
return self:CompareTo(other) <= 0
|
||||
elseif type(other) == "table" and other.CompareTo then
|
||||
return other:CompareTo(self) >= 0
|
||||
elseif type(self) == "table" and self.IsLessThan and self.Equals then
|
||||
return self:Equals(other) or self:IsLessThan(other)
|
||||
else
|
||||
AceOO:error("cannot compare two incompatible objects")
|
||||
end
|
||||
end
|
||||
local function classobjectadd(self, other)
|
||||
if type(self) == "table" and self.Add then
|
||||
return self:Add(other)
|
||||
else
|
||||
AceOO:error("cannot add two incompatible objects")
|
||||
end
|
||||
end
|
||||
local function classobjectsub(self, other)
|
||||
if type(self) == "table" and self.Subtract then
|
||||
return self:Subtract(other)
|
||||
else
|
||||
AceOO:error("cannot subtract two incompatible objects")
|
||||
end
|
||||
end
|
||||
local function classobjectunm(self, other)
|
||||
if type(self) == "table" and self.UnaryNegation then
|
||||
return self:UnaryNegation(other)
|
||||
else
|
||||
AceOO:error("attempt to negate an incompatible object")
|
||||
end
|
||||
end
|
||||
local function classobjectmul(self, other)
|
||||
if type(self) == "table" and self.Multiply then
|
||||
return self:Multiply(other)
|
||||
else
|
||||
AceOO:error("cannot multiply two incompatible objects")
|
||||
end
|
||||
end
|
||||
local function classobjectdiv(self, other)
|
||||
if type(self) == "table" and self.Divide then
|
||||
return self:Divide(other)
|
||||
else
|
||||
AceOO:error("cannot divide two incompatible objects")
|
||||
end
|
||||
end
|
||||
local function classobjectpow(self, other)
|
||||
if type(self) == "table" and self.Exponent then
|
||||
return self:Exponent(other)
|
||||
else
|
||||
AceOO:error("cannot exponentiate two incompatible objects")
|
||||
end
|
||||
end
|
||||
local function classobjectconcat(self, other)
|
||||
if type(self) == "table" and self.Concatenate then
|
||||
return self:Concatenate(other)
|
||||
else
|
||||
AceOO:error("cannot concatenate two incompatible objects")
|
||||
end
|
||||
end
|
||||
function class_new(self, ...)
|
||||
if self.virtual then
|
||||
AceOO:error("Cannot instantiate a virtual class.")
|
||||
end
|
||||
|
||||
local o = self.prototype
|
||||
local newobj = {}
|
||||
if o.class and o.class.instancemeta then
|
||||
setmetatable(newobj, o.class.instancemeta)
|
||||
else
|
||||
Object:init(newobj, o)
|
||||
end
|
||||
|
||||
if self.interfaces and not self.interfacesVerified then
|
||||
-- Verify the interfaces
|
||||
|
||||
for interface in pairs(self.interfaces) do
|
||||
for field,kind in pairs(interface.interface) do
|
||||
if tostring(type(newobj[field])) ~= kind then
|
||||
AceOO:error("Class did not satisfy all interfaces. %q is required to be a %s. It is a %s", field, kind, tostring(type(newobj[field])))
|
||||
end
|
||||
end
|
||||
end
|
||||
self.interfacesVerified = true
|
||||
end
|
||||
local tmp = initStatus
|
||||
initStatus = newobj
|
||||
newobj:init(...)
|
||||
if initStatus then
|
||||
initStatus = tmp
|
||||
AceOO:error("Initialization not completed, be sure to call the superclass's init method.")
|
||||
return
|
||||
end
|
||||
initStatus = tmp
|
||||
return newobj
|
||||
end
|
||||
local classmeta = {
|
||||
__tostring = objtostring,
|
||||
__call = function(self, ...)
|
||||
return self:new(...)
|
||||
end,
|
||||
}
|
||||
function Class:init(newclass, parent, ...)
|
||||
parent = parent or self
|
||||
|
||||
local total
|
||||
|
||||
if parent.class then
|
||||
total = { parent, ... }
|
||||
parent = self
|
||||
else
|
||||
total = { ... }
|
||||
end
|
||||
if not inherits(parent, Class) then
|
||||
AceOO:error("Classes must inherit from a proper class")
|
||||
end
|
||||
if parent.sealed then
|
||||
AceOO:error("Cannot inherit from a sealed class")
|
||||
end
|
||||
for i,v in ipairs(total) do
|
||||
if inherits(v, Mixin) and v.class then
|
||||
if v.__deprecated then
|
||||
AceOO:error(v.__deprecated)
|
||||
end
|
||||
if not newclass.mixins then
|
||||
newclass.mixins = {}
|
||||
end
|
||||
if newclass.mixins[v] then
|
||||
AceOO:error("Cannot explicitly inherit from the same mixin twice")
|
||||
end
|
||||
newclass.mixins[v] = true
|
||||
elseif inherits(v, Interface) and v.class then
|
||||
if not newclass.interfaces then
|
||||
newclass.interfaces = {}
|
||||
end
|
||||
if newclass.interfaces[v] then
|
||||
AceOO:error("Cannot explicitly inherit from the same interface twice")
|
||||
end
|
||||
newclass.interfaces[v] = true
|
||||
else
|
||||
AceOO:error("Classes can only inherit from one or zero classes and any number of mixins or interfaces")
|
||||
end
|
||||
end
|
||||
if parent.interfaces then
|
||||
if not newclass.interfaces then
|
||||
newclass.interfaces = {}
|
||||
end
|
||||
for interface in pairs(parent.interfaces) do
|
||||
newclass.interfaces[interface] = true
|
||||
end
|
||||
end
|
||||
for k in pairs(total) do
|
||||
total[k] = nil
|
||||
end
|
||||
|
||||
newclass.super = parent
|
||||
|
||||
newclass.prototype = setmetatable(total, {
|
||||
__index = parent.prototype,
|
||||
__tostring = protostring,
|
||||
})
|
||||
total = nil
|
||||
|
||||
newclass.instancemeta = {
|
||||
__index = newclass.prototype,
|
||||
__tostring = classobjectstring,
|
||||
__eq = classobjectequal,
|
||||
__lt = classobjectlessthan,
|
||||
__le = classobjectlessthanequal,
|
||||
__add = classobjectadd,
|
||||
__sub = classobjectsub,
|
||||
__unm = classobjectunm,
|
||||
__mul = classobjectmul,
|
||||
__div = classobjectdiv,
|
||||
__pow = classobjectpow,
|
||||
__concat = classobjectconcat,
|
||||
}
|
||||
|
||||
setmetatable(newclass, classmeta)
|
||||
|
||||
newclass.new = class_new
|
||||
|
||||
if newclass.mixins then
|
||||
-- Fold in the mixins
|
||||
local err, msg
|
||||
for mixin in pairs(newclass.mixins) do
|
||||
local ret
|
||||
autoEmbed = true
|
||||
ret, msg = pcall(mixin.embed, mixin, newclass.prototype)
|
||||
autoEmbed = false
|
||||
if not ret then
|
||||
err = true
|
||||
break
|
||||
end
|
||||
end
|
||||
|
||||
if err then
|
||||
local pt = newclass.prototype
|
||||
for k,v in pairs(pt) do
|
||||
pt[k] = nil
|
||||
end
|
||||
|
||||
-- method conflict
|
||||
AceOO:error(msg)
|
||||
end
|
||||
end
|
||||
|
||||
newclass.prototype.class = newclass
|
||||
|
||||
if newclass.interfaces then
|
||||
for interface in pairs(newclass.interfaces) do
|
||||
traverseInterfaces(interface, newclass.interfaces)
|
||||
end
|
||||
end
|
||||
if newclass.mixins then
|
||||
for mixin in pairs(newclass.mixins) do
|
||||
if mixin.interfaces then
|
||||
if not newclass.interfaces then
|
||||
newclass.interfaces = {}
|
||||
end
|
||||
for interface in pairs(mixin.interfaces) do
|
||||
newclass.interfaces[interface] = true
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
function Class:ToString()
|
||||
if type(self.GetLibraryVersion) == "function" then
|
||||
return (self:GetLibraryVersion())
|
||||
else
|
||||
return "Class"
|
||||
end
|
||||
end
|
||||
|
||||
local tmp
|
||||
function Class.prototype:init()
|
||||
if rawequal(self, initStatus) then
|
||||
initStatus = nil
|
||||
else
|
||||
AceOO:error("Improper self passed to init. You must do MyClass.super.prototype.init(self, ...)", 2)
|
||||
end
|
||||
self.uid = getuid(self)
|
||||
local current = self.class
|
||||
while true do
|
||||
if current == Class then
|
||||
break
|
||||
end
|
||||
if current.mixins then
|
||||
for mixin in pairs(current.mixins) do
|
||||
if type(mixin.OnInstanceInit) == "function" then
|
||||
mixin:OnInstanceInit(self)
|
||||
end
|
||||
end
|
||||
end
|
||||
current = current.super
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
-- @object ClassFactory
|
||||
-- @brief A factory for creating classes. Rarely used directly.
|
||||
local ClassFactory = Factory(Object, Class, Object)
|
||||
|
||||
function Class:new(...)
|
||||
local x = ClassFactory:new(...)
|
||||
if AceOO.classes then
|
||||
AceOO.classes[x] = true
|
||||
end
|
||||
return x
|
||||
end
|
||||
getmetatable(Class).__call = Class.new
|
||||
|
||||
-- @class Mixin
|
||||
-- @brief A class to create mixin objects, which contain methods that get
|
||||
-- "mixed in" to class prototypes.
|
||||
--
|
||||
-- @object Mixin prototype
|
||||
-- @brief The prototype that mixin objects inherit their methods from.
|
||||
--
|
||||
-- @method Mixin prototype embed
|
||||
-- @brief Mix in the methods of our object which are listed in our interface
|
||||
-- to the supplied target table.
|
||||
--
|
||||
-- @method Mixin prototype init
|
||||
-- @brief Initialize the mixin object.
|
||||
-- @param newobj The new object we're initializing.
|
||||
-- @param interface The interface we implement (the list of methods our
|
||||
-- prototype provides which should be mixed into the target
|
||||
-- table by embed).
|
||||
do
|
||||
Mixin = Class()
|
||||
function Mixin:ToString()
|
||||
if self.GetLibraryVersion then
|
||||
return (self:GetLibraryVersion())
|
||||
else
|
||||
return 'Mixin'
|
||||
end
|
||||
end
|
||||
local function _Embed(state, field, target)
|
||||
field = next(state.export, field)
|
||||
if field == nil then
|
||||
return
|
||||
end
|
||||
|
||||
if rawget(target, field) or (target[field] and target[field] ~= state[field]) then
|
||||
AceOO:error("Method conflict in attempt to mixin. Field %q", field)
|
||||
end
|
||||
|
||||
target[field] = state[field]
|
||||
|
||||
local ret,msg = pcall(_Embed, state, field, target)
|
||||
if not ret then
|
||||
-- Mix in the next method according to the defined interface. If that
|
||||
-- fails due to a conflict, re-raise to back out the previous mixed
|
||||
-- methods.
|
||||
|
||||
target[field] = nil
|
||||
AceOO:error(msg)
|
||||
end
|
||||
end
|
||||
function Mixin.prototype:embed(target)
|
||||
if self.__deprecated then
|
||||
AceOO:error(self.__deprecated)
|
||||
end
|
||||
local mt = getmetatable(target)
|
||||
setmetatable(target, nil)
|
||||
local err, msg = pcall(_Embed, self, nil, target)
|
||||
if not err then
|
||||
setmetatable(target, mt)
|
||||
AceOO:error(msg)
|
||||
return
|
||||
end
|
||||
if type(self.embedList) == "table" then
|
||||
self.embedList[target] = true
|
||||
end
|
||||
if type(target.class) ~= "table" then
|
||||
target[self] = true
|
||||
end
|
||||
if not autoEmbed and type(self.OnManualEmbed) == "function" then
|
||||
self:OnManualEmbed(target)
|
||||
end
|
||||
setmetatable(target, mt)
|
||||
end
|
||||
|
||||
function Mixin.prototype:activate(oldLib, oldDeactivate)
|
||||
if oldLib and oldLib.embedList then
|
||||
for target in pairs(oldLib.embedList) do
|
||||
local mt = getmetatable(target)
|
||||
setmetatable(target, nil)
|
||||
for field in pairs(oldLib.export) do
|
||||
target[field] = nil
|
||||
end
|
||||
setmetatable(target, mt)
|
||||
end
|
||||
self.embedList = oldLib.embedList
|
||||
for target in pairs(self.embedList) do
|
||||
self:embed(target)
|
||||
end
|
||||
else
|
||||
self.embedList = setmetatable({}, {__mode="k"})
|
||||
end
|
||||
end
|
||||
|
||||
function Mixin.prototype:init(export, ...)
|
||||
AceOO:argCheck(export, 2, "table")
|
||||
for k,v in pairs(export) do
|
||||
if type(k) ~= "number" then
|
||||
AceOO:error("All keys to argument #2 must be numbers.")
|
||||
elseif type(v) ~= "string" then
|
||||
AceOO:error("All values to argument #2 must be strings.")
|
||||
end
|
||||
end
|
||||
local num = #export
|
||||
for i = 1, num do
|
||||
local v = export[i]
|
||||
export[i] = nil
|
||||
export[v] = true
|
||||
end
|
||||
|
||||
local interfaces
|
||||
if select('#', ...) >= 1 then
|
||||
interfaces = { ... }
|
||||
for i,v in ipairs(interfaces) do
|
||||
v = getlibrary(v)
|
||||
interfaces[i] = v
|
||||
if not v.class or not inherits(v, Interface) then
|
||||
AceOO:error("Mixins can inherit only from interfaces")
|
||||
end
|
||||
end
|
||||
local num = #interfaces
|
||||
for i = 1, num do
|
||||
local v = interfaces[i]
|
||||
interfaces[i] = nil
|
||||
interfaces[v] = true
|
||||
end
|
||||
for interface in pairs(interfaces) do
|
||||
traverseInterfaces(interface, interfaces)
|
||||
end
|
||||
for interface in pairs(interfaces) do
|
||||
for field,kind in pairs(interface.interface) do
|
||||
if kind ~= "nil" then
|
||||
local good = false
|
||||
for bit in pairs(export) do
|
||||
if bit == field then
|
||||
good = true
|
||||
break
|
||||
end
|
||||
end
|
||||
if not good then
|
||||
AceOO:error("Mixin does not fully accommodate field %q", field)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
self.super = Mixin.prototype
|
||||
Mixin.super.prototype.init(self)
|
||||
self.export = export
|
||||
self.interfaces = interfaces
|
||||
end
|
||||
end
|
||||
|
||||
-- @class Interface
|
||||
-- @brief A class to create interfaces, which contain contracts that classes
|
||||
-- which inherit from this must comply with.
|
||||
--
|
||||
-- @object Interface prototype
|
||||
-- @brief The prototype that interface objects must adhere to.
|
||||
--
|
||||
-- @method Interface prototype init
|
||||
-- @brief Initialize the mixin object.
|
||||
-- @param interface The interface we contract (the hash of fields forced).
|
||||
-- @param (...) Superinterfaces
|
||||
do
|
||||
Interface = Class()
|
||||
function Interface:ToString()
|
||||
if self.GetLibraryVersion then
|
||||
return (self:GetLibraryVersion())
|
||||
else
|
||||
return 'Instance'
|
||||
end
|
||||
end
|
||||
function Interface.prototype:init(interface, ...)
|
||||
Interface.super.prototype.init(self)
|
||||
AceOO:argCheck(interface, 2, "table")
|
||||
for k,v in pairs(interface) do
|
||||
if type(k) ~= "string" then
|
||||
AceOO:error("All keys to argument #2 must be numbers.")
|
||||
elseif type(v) ~= "string" then
|
||||
AceOO:error("All values to argument #2 must be strings.")
|
||||
elseif v ~= "nil" and v ~= "string" and v ~= "number" and v ~= "table" and v ~= "function" then
|
||||
AceOO:error('All values to argument #2 must either be "nil", "string", "number", "table", or "function".')
|
||||
end
|
||||
end
|
||||
if select('#', ...) >= 1 then
|
||||
self.superinterfaces = { ... }
|
||||
for i,v in ipairs(self.superinterfaces) do
|
||||
v = getlibrary(v)
|
||||
self.superinterfaces[i] = v
|
||||
if not inherits(v, Interface) or not v.class then
|
||||
AceOO:error('Cannot provide a non-Interface to inherit from')
|
||||
end
|
||||
end
|
||||
local num = #self.superinterfaces
|
||||
for i = 1, num do
|
||||
local v = self.superinterfaces[i]
|
||||
self.superinterfaces[i] = nil
|
||||
self.superinterfaces[v] = true
|
||||
end
|
||||
end
|
||||
self.interface = interface
|
||||
end
|
||||
end
|
||||
|
||||
-- @function Classpool
|
||||
-- @brief Obtain a read only class from our pool of classes, indexed by the
|
||||
-- superclass and mixins.
|
||||
-- @param sc The superclass of the class we want.
|
||||
-- @param (m1..m20) Mixins of the class we want's objects.
|
||||
-- @return A read only class from the class pool.
|
||||
local Classpool
|
||||
do
|
||||
local pool = setmetatable({}, {__mode = 'v'})
|
||||
local function newindex(k, v)
|
||||
AceOO:error('Attempt to modify a read-only class.')
|
||||
end
|
||||
local function protonewindex(k, v)
|
||||
AceOO:error('Attempt to modify a read-only class prototype.')
|
||||
end
|
||||
local function ts(bit)
|
||||
if type(bit) ~= "table" then
|
||||
return tostring(bit)
|
||||
elseif getmetatable(bit) and bit.__tostring then
|
||||
return tostring(bit)
|
||||
elseif type(bit.GetLibraryVersion) == "function" then
|
||||
return bit:GetLibraryVersion()
|
||||
else
|
||||
return tostring(bit)
|
||||
end
|
||||
end
|
||||
local t = {}
|
||||
local function getcomplexuid(sc, ...)
|
||||
if sc then
|
||||
if sc.uid then
|
||||
table.insert(t, sc.uid)
|
||||
else
|
||||
AceOO:error("%s is not an appropriate class/mixin", ts(sc))
|
||||
end
|
||||
end
|
||||
for i = 1, select('#', ...) do
|
||||
local m = select(i, ...)
|
||||
if m.uid then
|
||||
table.insert(t, m.uid)
|
||||
else
|
||||
AceOO:error("%s is not an appropriate mixin", ts(m))
|
||||
end
|
||||
end
|
||||
table.sort(t)
|
||||
local uid = table.concat(t, '')
|
||||
local num = #t
|
||||
for i = 1, num do
|
||||
t[i] = nil
|
||||
end
|
||||
return uid
|
||||
end
|
||||
local classmeta
|
||||
local arg = {}
|
||||
function Classpool(superclass, ...)
|
||||
local l = getlibrary
|
||||
superclass = getlibrary(superclass)
|
||||
arg = { ... }
|
||||
for i, v in ipairs(arg) do
|
||||
arg[i] = getlibrary(v)
|
||||
end
|
||||
if superclass then
|
||||
if superclass.class then -- mixin
|
||||
table.insert(arg, 1, superclass)
|
||||
superclass = Class
|
||||
end
|
||||
else
|
||||
superclass = Class
|
||||
end
|
||||
local key = getcomplexuid(superclass, unpack(arg))
|
||||
if not pool[key] then
|
||||
local class = Class(superclass, unpack(arg))
|
||||
if not classmeta then
|
||||
classmeta = {}
|
||||
local mt = getmetatable(class)
|
||||
for k,v in pairs(mt) do
|
||||
classmeta[k] = v
|
||||
end
|
||||
classmeta.__newindex = newindex
|
||||
end
|
||||
-- Prevent the user from adding methods to this class.
|
||||
-- NOTE: I'm not preventing modifications of existing class members,
|
||||
-- but it's likely that only a truly malicious user will be doing so.
|
||||
class.sealed = true
|
||||
setmetatable(class, classmeta)
|
||||
getmetatable(class.prototype).__newindex = protonewindex
|
||||
pool[key] = class
|
||||
end
|
||||
return pool[key]
|
||||
end
|
||||
end
|
||||
|
||||
AceOO.Factory = Factory
|
||||
AceOO.Object = Object
|
||||
AceOO.Class = Class
|
||||
AceOO.Mixin = Mixin
|
||||
AceOO.Interface = Interface
|
||||
AceOO.Classpool = Classpool
|
||||
AceOO.inherits = inherits
|
||||
|
||||
-- Library handling bits
|
||||
|
||||
local function activate(self, oldLib, oldDeactivate)
|
||||
AceOO = self
|
||||
Factory = self.Factory
|
||||
Object = self.Object
|
||||
Class = self.Class
|
||||
ClassFactory.prototype = Class
|
||||
Mixin = self.Mixin
|
||||
Interface = self.Interface
|
||||
Classpool = self.Classpool
|
||||
|
||||
if oldLib then
|
||||
self.classes = oldLib.classes
|
||||
end
|
||||
if not self.classes then
|
||||
self.classes = setmetatable({}, {__mode="k"})
|
||||
else
|
||||
for class in pairs(self.classes) do
|
||||
class.new = class_new
|
||||
end
|
||||
end
|
||||
|
||||
if oldDeactivate then
|
||||
oldDeactivate(oldLib)
|
||||
end
|
||||
end
|
||||
|
||||
AceLibrary:Register(AceOO, MAJOR_VERSION, MINOR_VERSION, activate)
|
||||
AceOO = AceLibrary(MAJOR_VERSION)
|
||||
@@ -1,16 +0,0 @@
|
||||
## Interface: 30300
|
||||
## X-Curse-Packaged-Version: r1101
|
||||
## X-Curse-Project-Name: Ace2
|
||||
## X-Curse-Project-ID: ace2
|
||||
## X-Curse-Repository-ID: wow/ace2/mainline
|
||||
|
||||
## Title: Lib: AceOO-2.0
|
||||
## Notes: AddOn development framework
|
||||
## Author: Ace Development Team
|
||||
## LoadOnDemand: 1
|
||||
## X-Website: http://www.wowace.com
|
||||
## X-Category: Library
|
||||
## X-License: LGPL v2.1 + MIT for AceOO-2.0
|
||||
## Dependencies: AceLibrary
|
||||
|
||||
AceOO-2.0.lua
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,799 +0,0 @@
|
||||
--[[
|
||||
Name: AceLibrary
|
||||
Revision: $Rev: 1091 $
|
||||
Developed by: The Ace Development Team (http://www.wowace.com/index.php/The_Ace_Development_Team)
|
||||
Inspired By: Iriel (iriel@vigilance-committee.org)
|
||||
Tekkub (tekkub@gmail.com)
|
||||
Revision: $Rev: 1091 $
|
||||
Website: http://www.wowace.com/
|
||||
Documentation: http://www.wowace.com/index.php/AceLibrary
|
||||
SVN: http://svn.wowace.com/wowace/trunk/Ace2/AceLibrary
|
||||
Description: Versioning library to handle other library instances, upgrading,
|
||||
and proper access.
|
||||
It also provides a base for libraries to work off of, providing
|
||||
proper error tools. It is handy because all the errors occur in the
|
||||
file that called it, not in the library file itself.
|
||||
Dependencies: None
|
||||
License: LGPL v2.1
|
||||
]]
|
||||
|
||||
local ACELIBRARY_MAJOR = "AceLibrary"
|
||||
local ACELIBRARY_MINOR = 90000 + tonumber(("$Revision: 1091 $"):match("(%d+)"))
|
||||
|
||||
local _G = getfenv(0)
|
||||
local previous = _G[ACELIBRARY_MAJOR]
|
||||
if previous and not previous:IsNewVersion(ACELIBRARY_MAJOR, ACELIBRARY_MINOR) then return end
|
||||
|
||||
do
|
||||
-- LibStub is a simple versioning stub meant for use in Libraries. http://www.wowace.com/wiki/LibStub for more info
|
||||
-- LibStub is hereby placed in the Public Domain -- Credits: Kaelten, Cladhaire, ckknight, Mikk, Ammo, Nevcairiel, joshborke
|
||||
local LIBSTUB_MAJOR, LIBSTUB_MINOR = "LibStub", 2 -- NEVER MAKE THIS AN SVN REVISION! IT NEEDS TO BE USABLE IN ALL REPOS!
|
||||
local LibStub = _G[LIBSTUB_MAJOR]
|
||||
|
||||
if not LibStub or LibStub.minor < LIBSTUB_MINOR then
|
||||
LibStub = LibStub or {libs = {}, minors = {} }
|
||||
_G[LIBSTUB_MAJOR] = LibStub
|
||||
LibStub.minor = LIBSTUB_MINOR
|
||||
|
||||
function LibStub:NewLibrary(major, minor)
|
||||
assert(type(major) == "string", "Bad argument #2 to `NewLibrary' (string expected)")
|
||||
minor = assert(tonumber(strmatch(minor, "%d+")), "Minor version must either be a number or contain a number.")
|
||||
local oldminor = self.minors[major]
|
||||
if oldminor and oldminor >= minor then return nil end
|
||||
self.minors[major], self.libs[major] = minor, self.libs[major] or {}
|
||||
return self.libs[major], oldminor
|
||||
end
|
||||
|
||||
function LibStub:GetLibrary(major, silent)
|
||||
if not self.libs[major] and not silent then
|
||||
error(("Cannot find a library instance of %q."):format(tostring(major)), 2)
|
||||
end
|
||||
return self.libs[major], self.minors[major]
|
||||
end
|
||||
|
||||
function LibStub:IterateLibraries() return pairs(self.libs) end
|
||||
setmetatable(LibStub, { __call = LibStub.GetLibrary })
|
||||
end
|
||||
end
|
||||
local LibStub = _G.LibStub
|
||||
|
||||
-- If you don't want AceLibrary to enable libraries that are LoadOnDemand but
|
||||
-- disabled in the addon screen, set this to true.
|
||||
local DONT_ENABLE_LIBRARIES = nil
|
||||
|
||||
local function safecall(func,...)
|
||||
local success, err = pcall(func,...)
|
||||
if not success then geterrorhandler()(err:find("%.lua:%d+:") and err or (debugstack():match("\n(.-: )in.-\n") or "") .. err) end
|
||||
end
|
||||
|
||||
-- @table AceLibrary
|
||||
-- @brief System to handle all versioning of libraries.
|
||||
local AceLibrary = {}
|
||||
local AceLibrary_mt = {}
|
||||
setmetatable(AceLibrary, AceLibrary_mt)
|
||||
|
||||
local function error(self, message, ...)
|
||||
if type(self) ~= "table" then
|
||||
return _G.error(("Bad argument #1 to `error' (table expected, got %s)"):format(type(self)), 2)
|
||||
end
|
||||
|
||||
local stack = debugstack()
|
||||
if not message then
|
||||
local second = stack:match("\n(.-)\n")
|
||||
message = "error raised! " .. second
|
||||
else
|
||||
local arg = { ... } -- not worried about table creation, as errors don't happen often
|
||||
|
||||
for i = 1, #arg do
|
||||
arg[i] = tostring(arg[i])
|
||||
end
|
||||
for i = 1, 10 do
|
||||
table.insert(arg, "nil")
|
||||
end
|
||||
message = message:format(unpack(arg))
|
||||
end
|
||||
|
||||
if getmetatable(self) and getmetatable(self).__tostring then
|
||||
message = ("%s: %s"):format(tostring(self), message)
|
||||
elseif type(rawget(self, 'GetLibraryVersion')) == "function" and AceLibrary:HasInstance(self:GetLibraryVersion()) then
|
||||
message = ("%s: %s"):format(self:GetLibraryVersion(), message)
|
||||
elseif type(rawget(self, 'class')) == "table" and type(rawget(self.class, 'GetLibraryVersion')) == "function" and AceLibrary:HasInstance(self.class:GetLibraryVersion()) then
|
||||
message = ("%s: %s"):format(self.class:GetLibraryVersion(), message)
|
||||
end
|
||||
|
||||
local first = stack:gsub("\n.*", "")
|
||||
local file = first:gsub(".*\\(.*).lua:%d+: .*", "%1")
|
||||
file = file:gsub("([%(%)%.%*%+%-%[%]%?%^%$%%])", "%%%1")
|
||||
|
||||
|
||||
local i = 0
|
||||
for s in stack:gmatch("\n([^\n]*)") do
|
||||
i = i + 1
|
||||
if not s:find(file .. "%.lua:%d+:") and not s:find("%(tail call%)") then
|
||||
file = s:gsub("^.*\\(.*).lua:%d+: .*", "%1")
|
||||
file = file:gsub("([%(%)%.%*%+%-%[%]%?%^%$%%])", "%%%1")
|
||||
break
|
||||
end
|
||||
end
|
||||
local j = 0
|
||||
for s in stack:gmatch("\n([^\n]*)") do
|
||||
j = j + 1
|
||||
if j > i and not s:find(file .. "%.lua:%d+:") and not s:find("%(tail call%)") then
|
||||
return _G.error(message, j+1)
|
||||
end
|
||||
end
|
||||
return _G.error(message, 2)
|
||||
end
|
||||
|
||||
local type = type
|
||||
local function argCheck(self, arg, num, kind, kind2, kind3, kind4, kind5)
|
||||
if type(num) ~= "number" then
|
||||
return error(self, "Bad argument #3 to `argCheck' (number expected, got %s)", type(num))
|
||||
elseif type(kind) ~= "string" then
|
||||
return error(self, "Bad argument #4 to `argCheck' (string expected, got %s)", type(kind))
|
||||
end
|
||||
arg = type(arg)
|
||||
if arg ~= kind and arg ~= kind2 and arg ~= kind3 and arg ~= kind4 and arg ~= kind5 then
|
||||
local stack = debugstack()
|
||||
local func = stack:match("`argCheck'.-([`<].-['>])")
|
||||
if not func then
|
||||
func = stack:match("([`<].-['>])")
|
||||
end
|
||||
if kind5 then
|
||||
return error(self, "Bad argument #%s to %s (%s, %s, %s, %s, or %s expected, got %s)", tonumber(num) or 0/0, func, kind, kind2, kind3, kind4, kind5, arg)
|
||||
elseif kind4 then
|
||||
return error(self, "Bad argument #%s to %s (%s, %s, %s, or %s expected, got %s)", tonumber(num) or 0/0, func, kind, kind2, kind3, kind4, arg)
|
||||
elseif kind3 then
|
||||
return error(self, "Bad argument #%s to %s (%s, %s, or %s expected, got %s)", tonumber(num) or 0/0, func, kind, kind2, kind3, arg)
|
||||
elseif kind2 then
|
||||
return error(self, "Bad argument #%s to %s (%s or %s expected, got %s)", tonumber(num) or 0/0, func, kind, kind2, arg)
|
||||
else
|
||||
return error(self, "Bad argument #%s to %s (%s expected, got %s)", tonumber(num) or 0/0, func, kind, arg)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local pcall
|
||||
do
|
||||
local function check(self, ret, ...)
|
||||
if not ret then
|
||||
local s = ...
|
||||
return error(self, (s:gsub(".-%.lua:%d-: ", "")))
|
||||
else
|
||||
return ...
|
||||
end
|
||||
end
|
||||
|
||||
function pcall(self, func, ...)
|
||||
return check(self, _G.pcall(func, ...))
|
||||
end
|
||||
end
|
||||
|
||||
local recurse = {}
|
||||
local function addToPositions(t, major)
|
||||
if not AceLibrary.positions[t] or AceLibrary.positions[t] == major then
|
||||
rawset(t, recurse, true)
|
||||
AceLibrary.positions[t] = major
|
||||
for k,v in pairs(t) do
|
||||
if type(v) == "table" and not rawget(v, recurse) then
|
||||
addToPositions(v, major)
|
||||
end
|
||||
if type(k) == "table" and not rawget(k, recurse) then
|
||||
addToPositions(k, major)
|
||||
end
|
||||
end
|
||||
local mt = getmetatable(t)
|
||||
if mt and not rawget(mt, recurse) then
|
||||
addToPositions(mt, major)
|
||||
end
|
||||
rawset(t, recurse, nil)
|
||||
end
|
||||
end
|
||||
|
||||
local function svnRevisionToNumber(text)
|
||||
local kind = type(text)
|
||||
if kind == "number" or tonumber(text) then
|
||||
return tonumber(text)
|
||||
elseif kind == "string" then
|
||||
if text:find("^%$Revision: (%d+) %$$") then
|
||||
return tonumber((text:match("^%$Revision: (%d+) %$$")))
|
||||
elseif text:find("^%$Rev: (%d+) %$$") then
|
||||
return tonumber((text:match("^%$Rev: (%d+) %$$")))
|
||||
elseif text:find("^%$LastChangedRevision: (%d+) %$$") then
|
||||
return tonumber((text:match("^%$LastChangedRevision: (%d+) %$$")))
|
||||
end
|
||||
end
|
||||
return nil
|
||||
end
|
||||
|
||||
local crawlReplace
|
||||
do
|
||||
local recurse = {}
|
||||
local function func(t, to, from)
|
||||
if recurse[t] then
|
||||
return
|
||||
end
|
||||
recurse[t] = true
|
||||
local mt = getmetatable(t)
|
||||
setmetatable(t, nil)
|
||||
rawset(t, to, rawget(t, from))
|
||||
rawset(t, from, nil)
|
||||
for k,v in pairs(t) do
|
||||
if v == from then
|
||||
t[k] = to
|
||||
elseif type(v) == "table" then
|
||||
if not recurse[v] then
|
||||
func(v, to, from)
|
||||
end
|
||||
end
|
||||
|
||||
if type(k) == "table" then
|
||||
if not recurse[k] then
|
||||
func(k, to, from)
|
||||
end
|
||||
end
|
||||
end
|
||||
setmetatable(t, mt)
|
||||
if mt then
|
||||
if mt == from then
|
||||
setmetatable(t, to)
|
||||
elseif not recurse[mt] then
|
||||
func(mt, to, from)
|
||||
end
|
||||
end
|
||||
end
|
||||
function crawlReplace(t, to, from)
|
||||
func(t, to, from)
|
||||
for k in pairs(recurse) do
|
||||
recurse[k] = nil
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- @function destroyTable
|
||||
-- @brief remove all the contents of a table
|
||||
-- @param t table to destroy
|
||||
local function destroyTable(t)
|
||||
setmetatable(t, nil)
|
||||
for k,v in pairs(t) do
|
||||
t[k] = nil
|
||||
end
|
||||
end
|
||||
|
||||
local function isFrame(frame)
|
||||
return type(frame) == "table" and type(rawget(frame, 0)) == "userdata" and type(rawget(frame, 'IsFrameType')) == "function" and getmetatable(frame) and type(rawget(getmetatable(frame), '__index')) == "function"
|
||||
end
|
||||
|
||||
-- @function copyTable
|
||||
-- @brief Create a shallow copy of a table and return it.
|
||||
-- @param from The table to copy from
|
||||
-- @return A shallow copy of the table
|
||||
local function copyTable(from, to)
|
||||
if not to then
|
||||
to = {}
|
||||
end
|
||||
for k,v in pairs(from) do
|
||||
to[k] = v
|
||||
end
|
||||
setmetatable(to, getmetatable(from))
|
||||
return to
|
||||
end
|
||||
|
||||
-- @function deepTransfer
|
||||
-- @brief Fully transfer all data, keeping proper previous table
|
||||
-- backreferences stable.
|
||||
-- @param to The table with which data is to be injected into
|
||||
-- @param from The table whose data will be injected into the first
|
||||
-- @param saveFields If available, a shallow copy of the basic data is saved
|
||||
-- in here.
|
||||
-- @param list The account of table references
|
||||
-- @param list2 The current status on which tables have been traversed.
|
||||
local deepTransfer
|
||||
do
|
||||
-- @function examine
|
||||
-- @brief Take account of all the table references to be shared
|
||||
-- between the to and from tables.
|
||||
-- @param to The table with which data is to be injected into
|
||||
-- @param from The table whose data will be injected into the first
|
||||
-- @param list An account of the table references
|
||||
local function examine(to, from, list, major)
|
||||
list[from] = to
|
||||
for k,v in pairs(from) do
|
||||
if rawget(to, k) and type(from[k]) == "table" and type(to[k]) == "table" and not list[from[k]] then
|
||||
if from[k] == to[k] then
|
||||
list[from[k]] = to[k]
|
||||
elseif AceLibrary.positions[from[v]] ~= major and AceLibrary.positions[from[v]] then
|
||||
list[from[k]] = from[k]
|
||||
elseif not list[from[k]] then
|
||||
examine(to[k], from[k], list, major)
|
||||
end
|
||||
end
|
||||
end
|
||||
return list
|
||||
end
|
||||
|
||||
function deepTransfer(to, from, saveFields, major, list, list2)
|
||||
setmetatable(to, nil)
|
||||
if not list then
|
||||
list = {}
|
||||
list2 = {}
|
||||
examine(to, from, list, major)
|
||||
end
|
||||
list2[to] = to
|
||||
for k,v in pairs(to) do
|
||||
if type(rawget(from, k)) ~= "table" or type(v) ~= "table" or isFrame(v) then
|
||||
if saveFields then
|
||||
saveFields[k] = v
|
||||
end
|
||||
to[k] = nil
|
||||
elseif v ~= _G then
|
||||
if saveFields then
|
||||
saveFields[k] = copyTable(v)
|
||||
end
|
||||
end
|
||||
end
|
||||
for k in pairs(from) do
|
||||
if rawget(to, k) and to[k] ~= from[k] and AceLibrary.positions[to[k]] == major and from[k] ~= _G then
|
||||
if not list2[to[k]] then
|
||||
deepTransfer(to[k], from[k], nil, major, list, list2)
|
||||
end
|
||||
to[k] = list[to[k]] or list2[to[k]]
|
||||
else
|
||||
rawset(to, k, from[k])
|
||||
end
|
||||
end
|
||||
setmetatable(to, getmetatable(from))
|
||||
local mt = getmetatable(to)
|
||||
if mt then
|
||||
if list[mt] then
|
||||
setmetatable(to, list[mt])
|
||||
elseif mt.__index and list[mt.__index] then
|
||||
mt.__index = list[mt.__index]
|
||||
end
|
||||
end
|
||||
destroyTable(from)
|
||||
end
|
||||
end
|
||||
|
||||
local function TryToEnable(addon)
|
||||
if DONT_ENABLE_LIBRARIES then return end
|
||||
local isondemand = IsAddOnLoadOnDemand(addon)
|
||||
if isondemand then
|
||||
local _, _, _, enabled = GetAddOnInfo(addon)
|
||||
EnableAddOn(addon)
|
||||
local _, _, _, _, loadable = GetAddOnInfo(addon)
|
||||
if not loadable and not enabled then
|
||||
DisableAddOn(addon)
|
||||
end
|
||||
|
||||
return loadable
|
||||
end
|
||||
end
|
||||
|
||||
-- @method TryToLoadStandalone
|
||||
-- @brief Attempt to find and load a standalone version of the requested library
|
||||
-- @param major A string representing the major version
|
||||
-- @return If library is found and loaded, true is return. If not loadable, false is returned.
|
||||
-- If the library has been requested previously, nil is returned.
|
||||
local function TryToLoadStandalone(major)
|
||||
if not AceLibrary.scannedlibs then AceLibrary.scannedlibs = {} end
|
||||
if AceLibrary.scannedlibs[major] then return end
|
||||
|
||||
AceLibrary.scannedlibs[major] = true
|
||||
|
||||
local name, _, _, enabled, loadable = GetAddOnInfo(major)
|
||||
|
||||
loadable = (enabled and loadable) or TryToEnable(name)
|
||||
|
||||
local loaded = false
|
||||
if loadable then
|
||||
loaded = true
|
||||
LoadAddOn(name)
|
||||
end
|
||||
|
||||
local field = "X-AceLibrary-" .. major
|
||||
for i = 1, GetNumAddOns() do
|
||||
if GetAddOnMetadata(i, field) then
|
||||
name, _, _, enabled, loadable = GetAddOnInfo(i)
|
||||
|
||||
loadable = (enabled and loadable) or TryToEnable(name)
|
||||
if loadable then
|
||||
loaded = true
|
||||
LoadAddOn(name)
|
||||
end
|
||||
end
|
||||
end
|
||||
return loaded
|
||||
end
|
||||
|
||||
-- @method IsNewVersion
|
||||
-- @brief Obtain whether the supplied version would be an upgrade to the
|
||||
-- current version. This allows for bypass code in library
|
||||
-- declaration.
|
||||
-- @param major A string representing the major version
|
||||
-- @param minor An integer or an svn revision string representing the minor version
|
||||
-- @return whether the supplied version would be newer than what is
|
||||
-- currently available.
|
||||
function AceLibrary:IsNewVersion(major, minor)
|
||||
argCheck(self, major, 2, "string")
|
||||
TryToLoadStandalone(major)
|
||||
|
||||
if type(minor) == "string" then
|
||||
local m = svnRevisionToNumber(minor)
|
||||
if m then
|
||||
minor = m
|
||||
else
|
||||
_G.error(("Bad argument #3 to `IsNewVersion'. Must be a number or SVN revision string. %q is not appropriate"):format(minor), 2)
|
||||
end
|
||||
end
|
||||
argCheck(self, minor, 3, "number")
|
||||
local lib, oldMinor = LibStub:GetLibrary(major, true)
|
||||
if lib then
|
||||
return oldMinor < minor
|
||||
end
|
||||
local data = self.libs[major]
|
||||
if not data then
|
||||
return true
|
||||
end
|
||||
return data.minor < minor
|
||||
end
|
||||
|
||||
-- @method HasInstance
|
||||
-- @brief Returns whether an instance exists. This allows for optional support of a library.
|
||||
-- @param major A string representing the major version.
|
||||
-- @param minor (optional) An integer or an svn revision string representing the minor version.
|
||||
-- @return Whether an instance exists.
|
||||
function AceLibrary:HasInstance(major, minor)
|
||||
argCheck(self, major, 2, "string")
|
||||
if minor ~= false then
|
||||
TryToLoadStandalone(major)
|
||||
end
|
||||
|
||||
local lib, ver = LibStub:GetLibrary(major, true)
|
||||
if not lib and self.libs[major] then
|
||||
lib, ver = self.libs[major].instance, self.libs[major].minor
|
||||
end
|
||||
if minor then
|
||||
if type(minor) == "string" then
|
||||
local m = svnRevisionToNumber(minor)
|
||||
if m then
|
||||
minor = m
|
||||
else
|
||||
_G.error(("Bad argument #3 to `HasInstance'. Must be a number or SVN revision string. %q is not appropriate"):format(minor), 2)
|
||||
end
|
||||
end
|
||||
argCheck(self, minor, 3, "number")
|
||||
if not lib then
|
||||
return false
|
||||
end
|
||||
return ver == minor
|
||||
end
|
||||
return not not lib
|
||||
end
|
||||
|
||||
-- @method GetInstance
|
||||
-- @brief Returns the library with the given major/minor version.
|
||||
-- @param major A string representing the major version.
|
||||
-- @param minor (optional) An integer or an svn revision string representing the minor version.
|
||||
-- @return The library with the given major/minor version.
|
||||
function AceLibrary:GetInstance(major, minor)
|
||||
argCheck(self, major, 2, "string")
|
||||
if minor ~= false then
|
||||
TryToLoadStandalone(major)
|
||||
end
|
||||
|
||||
local data, ver = LibStub:GetLibrary(major, true)
|
||||
if not data then
|
||||
if self.libs[major] then
|
||||
data, ver = self.libs[major].instance, self.libs[major].minor
|
||||
else
|
||||
_G.error(("Cannot find a library instance of %s."):format(major), 2)
|
||||
return
|
||||
end
|
||||
end
|
||||
if minor then
|
||||
if type(minor) == "string" then
|
||||
local m = svnRevisionToNumber(minor)
|
||||
if m then
|
||||
minor = m
|
||||
else
|
||||
_G.error(("Bad argument #3 to `GetInstance'. Must be a number or SVN revision string. %q is not appropriate"):format(minor), 2)
|
||||
end
|
||||
end
|
||||
argCheck(self, minor, 2, "number")
|
||||
if ver ~= minor then
|
||||
_G.error(("Cannot find a library instance of %s, minor version %d."):format(major, minor), 2)
|
||||
end
|
||||
end
|
||||
return data
|
||||
end
|
||||
|
||||
-- Syntax sugar. AceLibrary("FooBar-1.0")
|
||||
AceLibrary_mt.__call = AceLibrary.GetInstance
|
||||
|
||||
local donothing = function() end
|
||||
|
||||
local AceEvent
|
||||
|
||||
local tmp = {}
|
||||
|
||||
-- @method Register
|
||||
-- @brief Registers a new version of a given library.
|
||||
-- @param newInstance the library to register
|
||||
-- @param major the major version of the library
|
||||
-- @param minor the minor version of the library
|
||||
-- @param activateFunc (optional) A function to be called when the library is
|
||||
-- fully activated. Takes the arguments
|
||||
-- (newInstance [, oldInstance, oldDeactivateFunc]). If
|
||||
-- oldInstance is given, you should probably call
|
||||
-- oldDeactivateFunc(oldInstance).
|
||||
-- @param deactivateFunc (optional) A function to be called by a newer library's
|
||||
-- activateFunc.
|
||||
-- @param externalFunc (optional) A function to be called whenever a new
|
||||
-- library is registered.
|
||||
function AceLibrary:Register(newInstance, major, minor, activateFunc, deactivateFunc, externalFunc)
|
||||
argCheck(self, newInstance, 2, "table")
|
||||
argCheck(self, major, 3, "string")
|
||||
if major ~= ACELIBRARY_MAJOR then
|
||||
for k,v in pairs(_G) do
|
||||
if v == newInstance then
|
||||
geterrorhandler()((debugstack():match("(.-: )in.-\n") or "") .. ("Cannot register library %q. It is part of the global table in _G[%q]."):format(major, k))
|
||||
end
|
||||
end
|
||||
end
|
||||
if major ~= ACELIBRARY_MAJOR and not major:find("^[%a%-][%a%d%-]*%-%d+%.%d+$") then
|
||||
_G.error(string.format("Bad argument #3 to `Register'. Must be in the form of \"Name-1.0\". %q is not appropriate", major), 2)
|
||||
end
|
||||
if type(minor) == "string" then
|
||||
local m = svnRevisionToNumber(minor)
|
||||
if m then
|
||||
minor = m
|
||||
else
|
||||
_G.error(("Bad argument #4 to `Register'. Must be a number or SVN revision string. %q is not appropriate"):format(minor), 2)
|
||||
end
|
||||
end
|
||||
argCheck(self, minor, 4, "number")
|
||||
if math.floor(minor) ~= minor or minor < 0 then
|
||||
error(self, "Bad argument #4 to `Register' (integer >= 0 expected, got %s)", minor)
|
||||
end
|
||||
argCheck(self, activateFunc, 5, "function", "nil")
|
||||
argCheck(self, deactivateFunc, 6, "function", "nil")
|
||||
argCheck(self, externalFunc, 7, "function", "nil")
|
||||
if not deactivateFunc then
|
||||
deactivateFunc = donothing
|
||||
end
|
||||
local data = self.libs[major]
|
||||
if not data then
|
||||
-- This is new
|
||||
if LibStub:GetLibrary(major, true) then
|
||||
error(self, "Cannot register library %q. It is already registered with LibStub.", major)
|
||||
end
|
||||
local instance = LibStub:NewLibrary(major, minor)
|
||||
copyTable(newInstance, instance)
|
||||
crawlReplace(instance, instance, newInstance)
|
||||
destroyTable(newInstance)
|
||||
if AceLibrary == newInstance then
|
||||
self = instance
|
||||
AceLibrary = instance
|
||||
end
|
||||
self.libs[major] = {
|
||||
instance = instance,
|
||||
minor = minor,
|
||||
deactivateFunc = deactivateFunc,
|
||||
externalFunc = externalFunc,
|
||||
}
|
||||
rawset(instance, 'GetLibraryVersion', function(self)
|
||||
return major, minor
|
||||
end)
|
||||
if not rawget(instance, 'error') then
|
||||
rawset(instance, 'error', error)
|
||||
end
|
||||
if not rawget(instance, 'argCheck') then
|
||||
rawset(instance, 'argCheck', argCheck)
|
||||
end
|
||||
if not rawget(instance, 'pcall') then
|
||||
rawset(instance, 'pcall', pcall)
|
||||
end
|
||||
addToPositions(instance, major)
|
||||
if activateFunc then
|
||||
safecall(activateFunc, instance, nil, nil) -- no old version, so explicit nil
|
||||
end
|
||||
|
||||
if externalFunc then
|
||||
for k, data_instance in LibStub:IterateLibraries() do -- all libraries
|
||||
tmp[k] = data_instance
|
||||
end
|
||||
for k, data in pairs(self.libs) do -- Ace libraries which may not have been registered with LibStub
|
||||
tmp[k] = data.instance
|
||||
end
|
||||
for k, data_instance in pairs(tmp) do
|
||||
if k ~= major then
|
||||
safecall(externalFunc, instance, k, data_instance)
|
||||
end
|
||||
tmp[k] = nil
|
||||
end
|
||||
end
|
||||
|
||||
for k,data in pairs(self.libs) do -- only Ace libraries
|
||||
if k ~= major and data.externalFunc then
|
||||
safecall(data.externalFunc, data.instance, major, instance)
|
||||
end
|
||||
end
|
||||
if major == "AceEvent-2.0" then
|
||||
AceEvent = instance
|
||||
end
|
||||
if AceEvent then
|
||||
AceEvent.TriggerEvent(self, "AceLibrary_Register", major, instance)
|
||||
end
|
||||
|
||||
return instance
|
||||
end
|
||||
if minor <= data.minor then
|
||||
-- This one is already obsolete, raise an error.
|
||||
_G.error(("Obsolete library registered. %s is already registered at version %d. You are trying to register version %d. Hint: if not AceLibrary:IsNewVersion(%q, %d) then return end"):format(major, data.minor, minor, major, minor), 2)
|
||||
return
|
||||
end
|
||||
local instance = data.instance
|
||||
-- This is an update
|
||||
local oldInstance = {}
|
||||
|
||||
local libStubInstance = LibStub:GetLibrary(major, true)
|
||||
if not libStubInstance then -- non-LibStub AceLibrary registered the library
|
||||
-- pass
|
||||
elseif libStubInstance ~= instance then
|
||||
error(self, "Cannot register library %q. It is already registered with LibStub.", major)
|
||||
else
|
||||
LibStub:NewLibrary(major, minor) -- upgrade the minor version
|
||||
end
|
||||
|
||||
addToPositions(newInstance, major)
|
||||
local isAceLibrary = (AceLibrary == newInstance)
|
||||
local old_error, old_argCheck, old_pcall
|
||||
if isAceLibrary then
|
||||
self = instance
|
||||
AceLibrary = instance
|
||||
|
||||
old_error = instance.error
|
||||
old_argCheck = instance.argCheck
|
||||
old_pcall = instance.pcall
|
||||
|
||||
self.error = error
|
||||
self.argCheck = argCheck
|
||||
self.pcall = pcall
|
||||
end
|
||||
deepTransfer(instance, newInstance, oldInstance, major)
|
||||
crawlReplace(instance, instance, newInstance)
|
||||
local oldDeactivateFunc = data.deactivateFunc
|
||||
data.minor = minor
|
||||
data.deactivateFunc = deactivateFunc
|
||||
data.externalFunc = externalFunc
|
||||
rawset(instance, 'GetLibraryVersion', function()
|
||||
return major, minor
|
||||
end)
|
||||
if not rawget(instance, 'error') then
|
||||
rawset(instance, 'error', error)
|
||||
end
|
||||
if not rawget(instance, 'argCheck') then
|
||||
rawset(instance, 'argCheck', argCheck)
|
||||
end
|
||||
if not rawget(instance, 'pcall') then
|
||||
rawset(instance, 'pcall', pcall)
|
||||
end
|
||||
if isAceLibrary then
|
||||
for _,v in pairs(self.libs) do
|
||||
local i = type(v) == "table" and v.instance
|
||||
if type(i) == "table" then
|
||||
if not rawget(i, 'error') or i.error == old_error then
|
||||
rawset(i, 'error', error)
|
||||
end
|
||||
if not rawget(i, 'argCheck') or i.argCheck == old_argCheck then
|
||||
rawset(i, 'argCheck', argCheck)
|
||||
end
|
||||
if not rawget(i, 'pcall') or i.pcall == old_pcall then
|
||||
rawset(i, 'pcall', pcall)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
if activateFunc then
|
||||
safecall(activateFunc, instance, oldInstance, oldDeactivateFunc)
|
||||
else
|
||||
safecall(oldDeactivateFunc, oldInstance)
|
||||
end
|
||||
oldInstance = nil
|
||||
|
||||
if externalFunc then
|
||||
for k, data_instance in LibStub:IterateLibraries() do -- all libraries
|
||||
tmp[k] = data_instance
|
||||
end
|
||||
for k, data in pairs(self.libs) do -- Ace libraries which may not have been registered with LibStub
|
||||
tmp[k] = data.instance
|
||||
end
|
||||
for k, data_instance in pairs(tmp) do
|
||||
if k ~= major then
|
||||
safecall(externalFunc, instance, k, data_instance)
|
||||
end
|
||||
tmp[k] = nil
|
||||
end
|
||||
end
|
||||
|
||||
return instance
|
||||
end
|
||||
|
||||
function AceLibrary:IterateLibraries()
|
||||
local t = {}
|
||||
for major, instance in LibStub:IterateLibraries() do
|
||||
t[major] = instance
|
||||
end
|
||||
for major, data in pairs(self.libs) do
|
||||
t[major] = data.instance
|
||||
end
|
||||
return pairs(t)
|
||||
end
|
||||
|
||||
local function manuallyFinalize(major, instance)
|
||||
if AceLibrary.libs[major] then
|
||||
-- don't work on Ace libraries
|
||||
return
|
||||
end
|
||||
local finalizedExternalLibs = AceLibrary.finalizedExternalLibs
|
||||
if finalizedExternalLibs[major] then
|
||||
return
|
||||
end
|
||||
finalizedExternalLibs[major] = true
|
||||
|
||||
for k,data in pairs(AceLibrary.libs) do -- only Ace libraries
|
||||
if k ~= major and data.externalFunc then
|
||||
safecall(data.externalFunc, data.instance, major, instance)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- @function Activate
|
||||
-- @brief The activateFunc for AceLibrary itself. Called when
|
||||
-- AceLibrary properly registers.
|
||||
-- @param self Reference to AceLibrary
|
||||
-- @param oldLib (optional) Reference to an old version of AceLibrary
|
||||
-- @param oldDeactivate (optional) Function to deactivate the old lib
|
||||
local function activate(self, oldLib, oldDeactivate)
|
||||
AceLibrary = self
|
||||
if not self.libs then
|
||||
self.libs = oldLib and oldLib.libs or {}
|
||||
self.scannedlibs = oldLib and oldLib.scannedlibs or {}
|
||||
end
|
||||
if not self.positions then
|
||||
self.positions = oldLib and oldLib.positions or setmetatable({}, { __mode = "k" })
|
||||
end
|
||||
self.finalizedExternalLibs = oldLib and oldLib.finalizedExternalLibs or {}
|
||||
self.frame = oldLib and oldLib.frame or CreateFrame("Frame")
|
||||
self.frame:UnregisterAllEvents()
|
||||
self.frame:RegisterEvent("ADDON_LOADED")
|
||||
self.frame:SetScript("OnEvent", function()
|
||||
for major, instance in LibStub:IterateLibraries() do
|
||||
manuallyFinalize(major, instance)
|
||||
end
|
||||
end)
|
||||
for major, instance in LibStub:IterateLibraries() do
|
||||
manuallyFinalize(major, instance)
|
||||
end
|
||||
|
||||
-- Expose the library in the global environment
|
||||
_G[ACELIBRARY_MAJOR] = self
|
||||
|
||||
if oldDeactivate then
|
||||
oldDeactivate(oldLib)
|
||||
end
|
||||
end
|
||||
|
||||
if not previous then
|
||||
previous = AceLibrary
|
||||
end
|
||||
if not previous.libs then
|
||||
previous.libs = {}
|
||||
end
|
||||
AceLibrary.libs = previous.libs
|
||||
if not previous.positions then
|
||||
previous.positions = setmetatable({}, { __mode = "k" })
|
||||
end
|
||||
AceLibrary.positions = previous.positions
|
||||
AceLibrary:Register(AceLibrary, ACELIBRARY_MAJOR, ACELIBRARY_MINOR, activate, nil)
|
||||
@@ -1,15 +0,0 @@
|
||||
## Interface: 30300
|
||||
## X-Curse-Packaged-Version: r1101
|
||||
## X-Curse-Project-Name: Ace2
|
||||
## X-Curse-Project-ID: ace2
|
||||
## X-Curse-Repository-ID: wow/ace2/mainline
|
||||
|
||||
## Title: Lib: AceLibrary
|
||||
## Notes: AddOn development framework
|
||||
## Author: Ace Development Team
|
||||
## X-Website: http://www.wowace.com
|
||||
## X-Category: Library
|
||||
## X-License: LGPL v2.1 + MIT for AceOO-2.0
|
||||
|
||||
AceLibrary.lua
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -1,34 +0,0 @@
|
||||
ATLASLOOTFU_LEFTCLICK = "|cff1eff00Left-Click|r Browse Loot Tables";
|
||||
ATLASLOOTFU_SHIFTCLICK = "|cffff0000Shift-Click|r View Options";
|
||||
ATLASLOOTFU_LEFTDRAG = "|cffccccccLeft-Click + Drag|r Move Minimap Button";
|
||||
|
||||
if (GetLocale() == "deDE") then
|
||||
ATLASLOOTFU_LEFTCLICK = "|cff1eff00Linksklick|r Loot-Tabellen durchsuchen";
|
||||
ATLASLOOTFU_SHIFTCLICK = "|cffff0000Shift-Klick|r Optionen anzeigen";
|
||||
ATLASLOOTFU_LEFTDRAG = "|cffccccccLinksklick + Ziehen|r Minimap-Button bewegen";
|
||||
end
|
||||
|
||||
if (GetLocale() == "frFR") then
|
||||
ATLASLOOTFU_LEFTCLICK = "|cff1eff00Clic-Gauche|r Parcourir les tables de butin";
|
||||
ATLASLOOTFU_SHIFTCLICK = "|cffff0000Shift-Clic|r Affiche les Options";
|
||||
ATLASLOOTFU_LEFTDRAG = "|cffccccccClic-Gauche + Maintenir|r Déplacer l'icone de la minimap";
|
||||
end
|
||||
|
||||
if (GetLocale() == "ruRU") then
|
||||
ATLASLOOTFU_LEFTCLICK = "|cff1eff00Левый-Клик|r обзор таблици добычи";
|
||||
ATLASLOOTFU_SHIFTCLICK = "|cffff0000Shift-Клик|r настройки";
|
||||
ATLASLOOTFU_LEFTDRAG = "|cffccccccЛевый-Клик + тащить|r перемещение кнопки";
|
||||
end
|
||||
|
||||
if (GetLocale() == "zhTW") then
|
||||
ATLASLOOTFU_LEFTCLICK = "|cff1eff00左鍵|r 瀏覽物品掉落表格";
|
||||
ATLASLOOTFU_SHIFTCLICK = "|cffff0000Shift-點擊|r 查看選項";
|
||||
ATLASLOOTFU_LEFTDRAG = "|cffcccccc右鍵 + 拖曳|r 移動小地圖按鈕";
|
||||
end
|
||||
|
||||
if (GetLocale() == "zhCN") then
|
||||
ATLASLOOTFU_LEFTCLICK = "|cff1eff00左键|r 浏览物品掉落表格";
|
||||
ATLASLOOTFU_SHIFTCLICK = "|cffff0000Shift-点击|r 查看选项";
|
||||
ATLASLOOTFU_LEFTDRAG = "|cffcccccc右键 + 拖曳|r 移动小地图按钮";
|
||||
end
|
||||
|
||||
@@ -1,14 +0,0 @@
|
||||
<Ui xmlns="http://www.blizzard.com/wow/ui/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.blizzard.com/wow/ui/
|
||||
..\FrameXML\UI.xsd">
|
||||
|
||||
<Script file="Libs\AceLibrary\AceLibrary.lua"/>
|
||||
<Script file="Libs\AceOO-2.0\AceOO-2.0.lua"/>
|
||||
<Script file="Libs\AceAddon-2.0\AceAddon-2.0.lua"/>
|
||||
<Script file="Libs\AceEvent-2.0\AceEvent-2.0.lua"/>
|
||||
<Script file="Libs\AceDB-2.0\AceDB-2.0.lua"/>
|
||||
|
||||
<Script file="Libs\FuBarPlugin-2.0\FuBarPlugin-2.0.lua"/>
|
||||
|
||||
<Script file="Libs\Tablet-2.0\Tablet-2.0.lua"/>
|
||||
|
||||
</Ui>
|
||||
@@ -491,179 +491,205 @@ AtlasLoot_Data["BlackTemple"] = {
|
||||
Map = "BlackTemple";
|
||||
{
|
||||
Name = BabbleBoss["High Warlord Naj'entus"];
|
||||
[1] = { itemID = 32239, droprate = "5%" }; --Slippers of the Seacaller
|
||||
[2] = { itemID = 32240, droprate = "6%" }; --Guise of the Tidal Lurker
|
||||
[3] = { itemID = 32377, droprate = "5%" }; --Mantle of Darkness
|
||||
[4] = { itemID = 32241, droprate = "0%" }; --Helm of Soothing Currents
|
||||
[5] = { itemID = 32234, droprate = "6%" }; --Fists of Mukoa
|
||||
[1] = { itemID = 32239 }; --Slippers of the Seacaller
|
||||
[2] = { itemID = 32240 }; --Guise of the Tidal Lurker
|
||||
[3] = { itemID = 32377 }; --Mantle of Darkness
|
||||
[4] = { itemID = 32241 }; --Helm of Soothing Currents
|
||||
[5] = { itemID = 32234 }; --Fists of Mukoa
|
||||
[6] = { itemID = 32242 }; --Boots of Oceanic Fury
|
||||
[7] = { itemID = 32232, droprate = "6%" }; --Eternium Shell Bracers
|
||||
[8] = { itemID = 32243, droprate = "0%" }; --Pearl Inlaid Boots
|
||||
[7] = { itemID = 32232 }; --Eternium Shell Bracers
|
||||
[8] = { itemID = 32243 }; --Pearl Inlaid Boots
|
||||
[9] = { itemID = 32245 }; --Tide-stomper's Greaves
|
||||
[16] = { itemID = 32238, droprate = "6%" }; --Ring of Calming Waves
|
||||
[17] = { itemID = 32247, droprate = "6%" }; --Ring of Captured Storms
|
||||
[18] = { itemID = 32237, droprate = "5%" }; --The Maelstrom's Fury
|
||||
[19] = { itemID = 32236, droprate = "6%" }; --Rising Tide
|
||||
[20] = { itemID = 32248, droprate = "6%" }; --Halberd of Desolation
|
||||
[22] = { itemID = 29434, droprate = "100%" }; --Badge of Justice
|
||||
[16] = { itemID = 32238 }; --Ring of Calming Waves
|
||||
[17] = { itemID = 32236 }; --Rising Tide
|
||||
[18] = { itemID = 32248 }; --Halberd of Desolation
|
||||
[20] = { itemID = 29434, droprate = "100%" }; --Badge of Justice
|
||||
[21] = { itemID = 400751, droprate = "100%" }; --Raider's Commendations
|
||||
[22] = { itemID = 98570, droprate = "100%" }; --Mystic Orb
|
||||
[24] = { itemID = 63451, droprate = "1%" }; --Pet Sigil
|
||||
};
|
||||
{
|
||||
Name = BabbleBoss["Supremus"];
|
||||
[1] = { itemID = 32256, droprate = "6%" }; --Waistwrap of Infinity
|
||||
[2] = { itemID = 32252, droprate = "4%" }; --Nether Shadow Tunic
|
||||
[1] = { itemID = 32256 }; --Waistwrap of Infinity
|
||||
[2] = { itemID = 32252 }; --Nether Shadow Tunic
|
||||
[3] = { itemID = 32259 }; --Bands of the Coming Storm
|
||||
[4] = { itemID = 32251, droprate = "5%" }; --Wraps of Precise Flight
|
||||
[4] = { itemID = 32251 }; --Wraps of Precise Flight
|
||||
[5] = { itemID = 32258 }; --Naturalist's Preserving Cinch
|
||||
[6] = { itemID = 32250, droprate = "6%" }; --Pauldrons of Abyssal Fury
|
||||
[8] = { itemID = 29434, droprate = "100%" }; --Badge of Justice
|
||||
[16] = { itemID = 32260, droprate = "7%" }; --Choker of Endless Nightmares
|
||||
[17] = { itemID = 32261, droprate = "4%" }; --Band of the Abyssal Lord
|
||||
[18] = { itemID = 32257, droprate = "5%" }; --Idol of the White Stag
|
||||
[19] = { itemID = 32254, droprate = "5%" }; --The Brutalizer
|
||||
[20] = { itemID = 32262, droprate = "6%" }; --Syphon of the Nathrezim
|
||||
[21] = { itemID = 32255, droprate = "5%" }; --Felstone Bulwark
|
||||
[22] = { itemID = 32253, droprate = "6%" }; --Legionkiller
|
||||
[6] = { itemID = 32250 }; --Pauldrons of Abyssal Fury
|
||||
[8] = { itemID = 32260 }; --Choker of Endless Nightmares
|
||||
[9] = { itemID = 32261 }; --Band of the Abyssal Lord
|
||||
[10] = { itemID = 32247 }; --Ring of Captured Storms
|
||||
[16] = { itemID = 32254 }; --The Brutalizer
|
||||
[17] = { itemID = 32237 }; --The Maelstrom's Fury
|
||||
[18] = { itemID = 32262 }; --Syphon of the Nathrezim
|
||||
[19] = { itemID = 32255 }; --Felstone Bulwark
|
||||
[20] = { itemID = 32253 }; --Legionkiller
|
||||
[22] = { itemID = 29434, droprate = "100%" }; --Badge of Justice
|
||||
[23] = { itemID = 400751, droprate = "100%" }; --Raider's Commendations
|
||||
[24] = { itemID = 98570, droprate = "100%" }; --Mystic Orb
|
||||
[26] = { itemID = 63510, droprate = "1%" }; --Pet Sigil
|
||||
};
|
||||
{
|
||||
Name = BabbleBoss["Shade of Akama"];
|
||||
[1] = { itemID = 32273, droprate = "6%" }; --Amice of Brilliant Light
|
||||
[2] = { itemID = 32270, droprate = "5%" }; --Focused Mana Bindings
|
||||
[3] = { itemID = 32513, droprate = "6%" }; --Wristbands of Divine Influence
|
||||
[4] = { itemID = 32265, droprate = "6%" }; --Shadow-walker's Cord
|
||||
[5] = { itemID = 32271, droprate = "4%" }; --Kilt of Immortal Nature
|
||||
[6] = { itemID = 32264, droprate = "6%" }; --Shoulders of the Hidden Predator
|
||||
[7] = { itemID = 32275 }; --Spiritwalker Gauntlets
|
||||
[8] = { itemID = 32276 }; --Flashfire Girdle
|
||||
[9] = { itemID = 32279 }; --The Seeker's Wristguards
|
||||
[10] = { itemID = 32278, droprate = "5%" }; --Grips of Silent Justice
|
||||
[11] = { itemID = 32263, droprate = "4%" }; --Praetorian's Legguards
|
||||
[12] = { itemID = 32268, droprate = "6%" }; --Myrmidon's Treads
|
||||
[16] = { itemID = 32266, droprate = "6%" }; --Ring of Deceitful Intent
|
||||
[17] = { itemID = 32361, droprate = "5%" }; --Blind-Seers Icon
|
||||
[19] = { itemID = 29434, droprate = "100%" }; --Badge of Justice
|
||||
[1] = { itemID = 32273 }; --Amice of Brilliant Light
|
||||
[2] = { itemID = 32270 }; --Focused Mana Bindings
|
||||
[3] = { itemID = 32513 }; --Wristbands of Divine Influence
|
||||
[4] = { itemID = 32265 }; --Shadow-walker's Cord
|
||||
[5] = { itemID = 32264 }; --Shoulders of the Hidden Predator
|
||||
[6] = { itemID = 32275 }; --Spiritwalker Gauntlets
|
||||
[7] = { itemID = 32276 }; --Flashfire Girdle
|
||||
[8] = { itemID = 32279 }; --The Seeker's Wristguards
|
||||
[9] = { itemID = 32278 }; --Grips of Silent Justice
|
||||
[10] = { itemID = 32268 }; --Myrmidon's Treads
|
||||
[16] = { itemID = 32266 }; --Ring of Deceitful Intent
|
||||
[17] = { itemID = 32361 }; --Blind-Seers Icon
|
||||
[19] = { itemID = 11432 }; --Ashtongue Jewel
|
||||
[21] = { itemID = 29434, droprate = "100%" }; --Badge of Justice
|
||||
[22] = { itemID = 400751, droprate = "100%" }; --Raider's Commendations
|
||||
[23] = { itemID = 98570, droprate = "100%" }; --Mystic Orb
|
||||
[25] = { itemID = 63425, droprate = "1%" }; --Pet Sigil
|
||||
};
|
||||
{
|
||||
Name = BabbleBoss["Teron Gorefiend"];
|
||||
[1] = { itemID = 32323, droprate = "7%" }; --Shadowmoon Destroyer's Drape
|
||||
[2] = { itemID = 32329, droprate = "7%" }; --Cowl of Benevolence
|
||||
[3] = { itemID = 32327, droprate = "5%" }; --Robe of the Shadow Council
|
||||
[4] = { itemID = 32324, droprate = "7%" }; --Insidious Bands
|
||||
[5] = { itemID = 32328, droprate = "7%" }; --Botanist's Gloves of Growth
|
||||
[6] = { itemID = 32510, droprate = "5%" }; --Softstep Boots of Tracking
|
||||
[7] = { itemID = 32280, droprate = "5%" }; --Gauntlets of Enforcement
|
||||
[8] = { itemID = 32512, droprate = "9%" }; --Girdle of Lordaeron's Fallen
|
||||
[16] = { itemID = 32330, droprate = "3%" }; --Totem of Ancestral Guidance
|
||||
[17] = { itemID = 32348, droprate = "9%" }; --Soul Cleaver
|
||||
[18] = { itemID = 32326, droprate = "1%" }; --Twisted Blades of Zarak
|
||||
[19] = { itemID = 32325, droprate = "4%" }; --Rifle of the Stoic Guardian
|
||||
[21] = { itemID = 29434, droprate = "100%" }; --Badge of Justice
|
||||
[5] = { itemID = 32271 }; --Kilt of Immortal Nature
|
||||
[1] = { itemID = 32323 }; --Shadowmoon Destroyer's Drape
|
||||
[2] = { itemID = 32329 }; --Cowl of Benevolence
|
||||
[3] = { itemID = 32327 }; --Robe of the Shadow Council
|
||||
[4] = { itemID = 32324 }; --Insidious Bands
|
||||
[6] = { itemID = 32328 }; --Botanist's Gloves of Growth
|
||||
[7] = { itemID = 32510 }; --Softstep Boots of Tracking
|
||||
[8] = { itemID = 32280 }; --Gauntlets of Enforcement
|
||||
[9] = { itemID = 32512 }; --Girdle of Lordaeron's Fallen
|
||||
[11] = { itemID = 32349 }; --Translucent Spellthread Necklace
|
||||
[16] = { itemID = 32507 }; --Gorefiend
|
||||
[17] = { itemID = 32325 }; --Rifle of the Stoic Guardian
|
||||
[19] = { itemID = 29434, droprate = "100%" }; --Badge of Justice
|
||||
[20] = { itemID = 400751, droprate = "100%" }; --Raider's Commendations
|
||||
[21] = { itemID = 98570, droprate = "100%" }; --Mystic Orb
|
||||
[23] = { itemID = 63443, droprate = "1%" }; --Pet Sigil
|
||||
};
|
||||
{
|
||||
Name = BabbleBoss["Gurtogg Bloodboil"];
|
||||
[1] = { itemID = 32337, droprate = "6%" }; --Shroud of Forgiveness
|
||||
[2] = { itemID = 32338, droprate = "5%" }; --Blood-cursed Shoulderpads
|
||||
[3] = { itemID = 32340, droprate = "5%" }; --Garments of Temperance
|
||||
[4] = { itemID = 32339, droprate = "4%" }; --Belt of Primal Majesty
|
||||
[5] = { itemID = 32334, droprate = "5%" }; --Vest of Mounting Assault
|
||||
[1] = { itemID = 32337 }; --Shroud of Forgiveness
|
||||
[2] = { itemID = 32338 }; --Blood-cursed Shoulderpads
|
||||
[3] = { itemID = 32340 }; --Garments of Temperance
|
||||
[4] = { itemID = 32339 }; --Belt of Primal Majesty
|
||||
[5] = { itemID = 32334 }; --Vest of Mounting Assault
|
||||
[6] = { itemID = 32342 }; --Girdle of Mighty Resolve
|
||||
[7] = { itemID = 32333, droprate = "6%" }; --Girdle of Stability
|
||||
[8] = { itemID = 32341, droprate = "4%" }; --Leggings of Divine Retribution
|
||||
[16] = { itemID = 32335, droprate = "6%" }; --Unstoppable Aggressor's Ring
|
||||
[17] = { itemID = 32501, droprate = "5%" }; --Shadowmoon Insignia
|
||||
[18] = { itemID = 32269, droprate = "6%" }; --Messenger of Fate
|
||||
[19] = { itemID = 32344, droprate = "5%" }; --Staff of Immaculate Recovery
|
||||
[20] = { itemID = 32343, droprate = "4%" }; --Wand of Prismatic Focus
|
||||
[7] = { itemID = 32341 }; --Leggings of Divine Retribution
|
||||
[16] = { itemID = 32335 }; --Unstoppable Aggressor's Ring
|
||||
[17] = { itemID = 32348 }; --Soul Cleaver
|
||||
[18] = { itemID = 32269 }; --Messenger of Fate
|
||||
[19] = { itemID = 32344 }; --Staff of Immaculate Recovery
|
||||
[20] = { itemID = 32343 }; --Wand of Prismatic Focus
|
||||
[22] = { itemID = 29434, droprate = "100%" }; --Badge of Justice
|
||||
[23] = { itemID = 400751, droprate = "100%" }; --Raider's Commendations
|
||||
[24] = { itemID = 98570, droprate = "100%" }; --Mystic Orb
|
||||
[26] = { itemID = 63521, droprate = "1%" }; --Pet Sigil
|
||||
};
|
||||
{
|
||||
Name = "Essence of Souls";
|
||||
[1] = { itemID = 32353, droprate = "7%" }; --Gloves of Unfailing Faith
|
||||
Name = "Reliquary of the Lost";
|
||||
[1] = { itemID = 32353 }; --Gloves of Unfailing Faith
|
||||
[2] = { itemID = 32351 }; --Elunite Empowered Bracers
|
||||
[3] = { itemID = 32347, droprate = "6%" }; --Grips of Damnation
|
||||
[3] = { itemID = 32347 }; --Grips of Damnation
|
||||
[4] = { itemID = 32352 }; --Naturewarden's Treads
|
||||
[5] = { itemID = 32517, droprate = "7%" }; --The Wavemender's Mantle
|
||||
[6] = { itemID = 32346, droprate = "6%" }; --Boneweave Girdle
|
||||
[7] = { itemID = 32354, droprate = "6%" }; --Crown of Empowered Fate
|
||||
[8] = { itemID = 32345, droprate = "5%" }; --Dreadboots of the Legion
|
||||
[16] = { itemID = 32349, droprate = "6%" }; --Translucent Spellthread Necklace
|
||||
[17] = { itemID = 32362, droprate = "5%" }; --Pendant of Titans
|
||||
[18] = { itemID = 32350, droprate = "6%" }; --Touch of Inspiration
|
||||
[19] = { itemID = 32332, droprate = "7%" }; --Torch of the Damned
|
||||
[20] = { itemID = 32363, droprate = "4%" }; --Naaru-Blessed Life Rod
|
||||
[22] = { itemID = 29434, droprate = "100%" }; --Badge of Justice
|
||||
[5] = { itemID = 32517 }; --The Wavemender's Mantle
|
||||
[6] = { itemID = 32346 }; --Boneweave Girdle
|
||||
[7] = { itemID = 32333 }; --Girdle of Stability
|
||||
[8] = { itemID = 32354 }; --Crown of Empowered Fate
|
||||
[9] = { itemID = 32345 }; --Dreadboots of the Legion
|
||||
[16] = { itemID = 32362 }; --Pendant of Titans
|
||||
[17] = { itemID = 32350 }; --Touch of Inspiration
|
||||
[18] = { itemID = 32332 }; --Torch of the Damned
|
||||
[20] = { itemID = 29434, droprate = "100%" }; --Badge of Justice
|
||||
[21] = { itemID = 400751, droprate = "100%" }; --Raider's Commendations
|
||||
[22] = { itemID = 98570, droprate = "100%" }; --Mystic Orb
|
||||
[24] = { itemID = 63940, droprate = "1%" }; --Pet Sigil
|
||||
};
|
||||
{
|
||||
Name = BabbleBoss["Mother Shahraz"];
|
||||
[1] = { itemID = 32367, droprate = "6%" }; --Leggings of Devastation
|
||||
[2] = { itemID = 32366, droprate = "5%" }; --Shadowmaster's Boots
|
||||
[3] = { itemID = 32365, droprate = "5%" }; --Heartshatter Breastplate
|
||||
[4] = { itemID = 32370, droprate = "5%" }; --Nadina's Pendant of Purity
|
||||
[5] = { itemID = 32368, droprate = "5%" }; --Tome of the Lightbringer
|
||||
[6] = { itemID = 32369, droprate = "5%" }; --Blade of Savagery
|
||||
[16] = { itemID = 31101, droprate = "6%" }; --Pauldrons of the Forgotten Conqueror
|
||||
[17] = { itemID = 31103, droprate = "0%" }; --Pauldrons of the Forgotten Protector
|
||||
[18] = { itemID = 31102, droprate = "7%" }; --Pauldrons of the Forgotten Vanquisher
|
||||
[20] = { itemID = 29434, droprate = "100%" }; --Badge of Justice
|
||||
[1] = { itemID = 32367 }; --Leggings of Devastation
|
||||
[2] = { itemID = 32263 }; --Praetorian's Legguards
|
||||
[3] = { itemID = 32366 }; --Shadowmaster's Boots
|
||||
[4] = { itemID = 32365 }; --Heartshatter Breastplate
|
||||
[5] = { itemID = 32370 }; --Nadina's Pendant of Purity
|
||||
[6] = { itemID = 32369 }; --Blade of Savagery
|
||||
[16] = { itemID = 31101, droprate = "100%", lootTable = {"T6SHOULDER","Token"} }; --Pauldrons of the Forgotten Conqueror
|
||||
[18] = { itemID = 29434, droprate = "100%" }; --Badge of Justice
|
||||
[19] = { itemID = 400751, droprate = "100%" }; --Raider's Commendations
|
||||
[20] = { itemID = 98570, droprate = "100%" }; --Mystic Orb
|
||||
[22] = { itemID = 63520, droprate = "1%" }; --Pet Sigil
|
||||
};
|
||||
{
|
||||
Name = BabbleBoss["The Illidari Council"];
|
||||
[1] = { itemID = 32331, droprate = "6%" }; --Cloak of the Illidari Council
|
||||
[2] = { itemID = 32519, droprate = "6%" }; --Belt of Divine Guidance
|
||||
[3] = { itemID = 32518, droprate = "2%" }; --Veil of Turning Leaves
|
||||
[4] = { itemID = 32376, droprate = "7%" }; --Forest Prowler's Helm
|
||||
[5] = { itemID = 32373, droprate = "7%" }; --Helm of the Illidari Shatterer
|
||||
[6] = { itemID = 32505, droprate = "6%" }; --Madness of the Betrayer
|
||||
[16] = { itemID = 31098, droprate = "4%" }; --Leggings of the Forgotten Conqueror
|
||||
[17] = { itemID = 31100, droprate = "3%" }; --Leggings of the Forgotten Protector
|
||||
[18] = { itemID = 31099, droprate = "4%" }; --Leggings of the Forgotten Vanquisher
|
||||
[20] = { itemID = 29434, droprate = "100%" }; --Badge of Justice
|
||||
[1] = { itemID = 32331 }; --Cloak of the Illidari Council
|
||||
[2] = { itemID = 32519 }; --Belt of Divine Guidance
|
||||
[3] = { itemID = 32518 }; --Veil of Turning Leaves
|
||||
[4] = { itemID = 32376 }; --Forest Prowler's Helm
|
||||
[5] = { itemID = 32373 }; --Helm of the Illidari Shatterer
|
||||
[7] = { itemID = 32326 }; --Twisted Blades of Zarak
|
||||
[16] = { itemID = 31089, droprate = "100%", lootTable = {"T6CHEST","Token"} }; --Chestguard of the Forgotten Conqueror
|
||||
[17] = { itemID = 31101, droprate = "100%", lootTable = {"T6SHOULDER","Token"} }; --Pauldrons of the Forgotten Conqueror
|
||||
[18] = { itemID = 31098, droprate = "100%", lootTable = {"T6LEGS","Token"} }; --Leggings of the Forgotten Conqueror
|
||||
[19] = { itemID = 31097, droprate = "100%", lootTable = {"T6HEAD","Token"} }; --Helm of the Forgotten Conqueror
|
||||
[20] = { itemID = 31092, droprate = "100%", lootTable = {"T6HAND","Token"} }; --Gloves of the Forgotten Conqueror
|
||||
[22] = { itemID = 29434, droprate = "100%" }; --Badge of Justice
|
||||
[23] = { itemID = 400751, droprate = "100%" }; --Raider's Commendations
|
||||
[24] = { itemID = 98570, droprate = "100%" }; --Mystic Orb
|
||||
[26] = { itemID = 63929, droprate = "1%" }; --Pet Sigil
|
||||
[27] = { itemID = 63928, droprate = "1%" }; --Pet Sigil
|
||||
[28] = { itemID = 63690, droprate = "1%" }; --Pet Sigil
|
||||
[29] = { itemID = 63529, droprate = "1%" }; --Pet Sigil
|
||||
};
|
||||
{
|
||||
Name = BabbleBoss["Illidan Stormrage"];
|
||||
[1] = { itemID = 32524, droprate = "6%" }; --Shroud of the Highborne
|
||||
[2] = { itemID = 32525, droprate = "5%" }; --Cowl of the Illidari High Lord
|
||||
[3] = { itemID = 32235, droprate = "6%" }; --Cursed Vision of Sargeras
|
||||
[4] = { itemID = 32521, droprate = "4%" }; --Faceplate of the Impenetrable
|
||||
[5] = { itemID = 32497, droprate = "5%" }; --Stormrage Signet Ring
|
||||
[6] = { itemID = 32483, droprate = "6%" }; --The Skull of Gul'dan
|
||||
[7] = { itemID = 32496, droprate = "5%" }; --Memento of Tyrande
|
||||
[9] = { itemID = 29434, droprate = "100%" }; --Badge of Justice
|
||||
[11] = { itemID = 32837 }; --Warglaive of Azzinoth
|
||||
[12] = { itemID = 32838 }; --Warglaive of Azzinoth
|
||||
[16] = { itemID = 31089, droprate = "8%" }; --Chestguard of the Forgotten Conqueror
|
||||
[17] = { itemID = 31091, droprate = "9%" }; --Chestguard of the Forgotten Protector
|
||||
[18] = { itemID = 31090, droprate = "8%" }; --Chestguard of the Forgotten Vanquisher
|
||||
[20] = { itemID = 32471, droprate = "6%" }; --Shard of Azzinoth
|
||||
[21] = { itemID = 32500, droprate = "5%" }; --Crystal Spire of Karabor
|
||||
[22] = { itemID = 32374, droprate = "4%" }; --Zhar'doom, Greatstaff of the Devourer
|
||||
[23] = { itemID = 32375, droprate = "4%" }; --Bulwark of Azzinoth
|
||||
[24] = { itemID = 32336, droprate = "6%" }; --Black Bow of the Betrayer
|
||||
[1] = { itemID = 32524 }; --Shroud of the Highborne
|
||||
[2] = { itemID = 32525 }; --Cowl of the Illidari High Lord
|
||||
[3] = { itemID = 32235 }; --Cursed Vision of Sargeras
|
||||
[4] = { itemID = 32521 }; --Faceplate of the Impenetrable
|
||||
[5] = { itemID = 32497 }; --Stormrage Signet Ring
|
||||
[6] = { itemID = 32483 }; --The Skull of Gul'dan
|
||||
[7] = { itemID = 32496 }; --Memento of Tyrande
|
||||
[8] = { itemID = 32363 }; --Naaru-Blessed Life Rod
|
||||
[9] = { itemID = 32471 }; --Shard of Azzinoth
|
||||
[10] = { itemID = 32500 }; --Crystal Spire of Karabor
|
||||
[11] = { itemID = 32374 }; --Zhar'doom, Greatstaff of the Devourer
|
||||
[12] = { itemID = 32375 }; --Bulwark of Azzinoth
|
||||
[13] = { itemID = 32336 }; --Black Bow of the Betrayer
|
||||
[14] = { itemID = 32501 }; --Shadowmoon Insignia
|
||||
[15] = { itemID = 32505 }; --Madness of the Betrayer
|
||||
[16] = { itemID = 31089, droprate = "100%", lootTable = {"T6CHEST","Token"} }; --Chestguard of the Forgotten Conqueror
|
||||
[18] = { itemID = 32837 }; --Warglaive of Azzinoth
|
||||
[19] = { itemID = 32838 }; --Warglaive of Azzinoth
|
||||
[21] = { itemID = 29434, droprate = "100%" }; --Badge of Justice
|
||||
[22] = { itemID = 400751, droprate = "100%" }; --Raider's Commendations
|
||||
[23] = { itemID = 98570, droprate = "100%" }; --Mystic Orb
|
||||
[25] = { itemID = 63511, droprate = "1%" }; --Pet Sigil
|
||||
[27] = { itemID = 343208 }; --Mount
|
||||
};
|
||||
{
|
||||
Name = AL["Trash Mobs"];
|
||||
[1] = { itemID = 32590 }; --Nethervoid Cloak
|
||||
[2] = { itemID = 34012 }; --Shroud of the Final Stand
|
||||
[3] = { itemID = 32609 }; --Boots of the Divine Light
|
||||
[4] = { itemID = 32593 }; --Treads of the Den Mother
|
||||
[5] = { itemID = 32592 }; --Chestguard of Relentless Storms
|
||||
[6] = { itemID = 32608 }; --Pillager's Gauntlets
|
||||
[7] = { itemID = 32606 }; --Girdle of the Lightbearer
|
||||
[8] = { itemID = 32591 }; --Choker of Serrated Blades
|
||||
[9] = { itemID = 32589 }; --Hellfire-Encased Pendant
|
||||
[10] = { itemID = 32526 }; --Band of Devastation
|
||||
[11] = { itemID = 32528 }; --Blessed Band of Karabor
|
||||
[12] = { itemID = 32527 }; --Ring of Ancient Knowledge
|
||||
[16] = { itemID = 34009 }; --Hammer of Judgement
|
||||
[17] = { itemID = 32943 }; --Swiftsteel Bludgeon
|
||||
[18] = { itemID = 34011 }; --Illidari Runeshield
|
||||
[20] = { itemID = 32228, droprate = "2%" }; --Empyrean Sapphire
|
||||
[21] = { itemID = 32231 }; --Pyrestone
|
||||
[22] = { itemID = 32229 }; --Lionseye
|
||||
[23] = { itemID = 32249 }; --Seaspray Emerald
|
||||
[24] = { itemID = 32230 }; --Shadowsong Amethyst
|
||||
[25] = { itemID = 32227 }; --Crimson Spinel
|
||||
[27] = { itemID = 32428, droprate = "6%" }; --Heart of Darkness
|
||||
[28] = { itemID = 32897, droprate = "7%" }; --Mark of the Illidari
|
||||
[1] = { itemID = 34012 }; --Shroud of the Final Stand
|
||||
[2] = { itemID = 32593 }; --Treads of the Den Mother
|
||||
[3] = { itemID = 47166 }; --Concubines Attire
|
||||
[4] = { itemID = 32608 }; --Pillager's Gauntlets
|
||||
[5] = { itemID = 32606 }; --Girdle of the Lightbearer
|
||||
[7] = { itemID = 32526 }; --Band of Devastation
|
||||
[8] = { itemID = 32528 }; --Blessed Band of Karabor
|
||||
[9] = { itemID = 32527 }; --Ring of Ancient Knowledge
|
||||
[11] = { itemID = 32330 }; --Totem of Ancestral Guidance
|
||||
[12] = { itemID = 32368 }; --Tome of the Lightbringer
|
||||
[13] = { itemID = 32257 }; --Idol of the White Stag
|
||||
[16] = { itemID = 32943 }; --Swiftsteel Bludgeon
|
||||
[17] = { itemID = 34011 }; --Illidari Runeshield
|
||||
[19] = { itemID = 32228 }; --Empyrean Sapphire
|
||||
[20] = { itemID = 32231 }; --Pyrestone
|
||||
[21] = { itemID = 32229 }; --Lionseye
|
||||
[22] = { itemID = 32249 }; --Seaspray Emerald
|
||||
[23] = { itemID = 32230 }; --Shadowsong Amethyst
|
||||
[24] = { itemID = 32227 }; --Crimson Spinel
|
||||
[26] = { itemID = 32428, droprate = "6%" }; --Heart of Darkness
|
||||
[27] = { itemID = 32897, droprate = "7%" }; --Mark of the Illidari
|
||||
};
|
||||
{
|
||||
Name = "BT Patterns/Plans";
|
||||
@@ -870,6 +896,7 @@ AtlasLoot_Data["CoTHyjal"] = {
|
||||
Map = "CoTHyjal";
|
||||
{
|
||||
Name = BabbleBoss["Rage Winterchill"];
|
||||
NpcID = 17767;
|
||||
[1] = { itemID = 30871 }; --Bracers of Martyrdom
|
||||
[2] = { itemID = 30870 }; --Cuffs of Devastation
|
||||
[3] = { itemID = 30863 }; --Deadly Cuffs
|
||||
@@ -880,17 +907,19 @@ AtlasLoot_Data["CoTHyjal"] = {
|
||||
[8] = { itemID = 30866 }; --Blood-stained Pauldrons
|
||||
[9] = { itemID = 30862 }; --Blessed Adamantite Bracers
|
||||
[10] = { itemID = 30861 }; --Furious Shackles
|
||||
[12] = { itemID = 32459 }; --Time-Phased Phylactery
|
||||
[16] = { itemID = 30865 }; --Tracker's Blade
|
||||
[17] = { itemID = 30872 }; --Chronicle of Dark Secrets
|
||||
[18] = { itemID = 30891 }; --Black Featherlight Boots
|
||||
[19] = { itemID = 30914 }; --Belt of the Crescent Moon
|
||||
[21] = { itemID = 29434, droprate = "100%" }; --Badge of Justice
|
||||
[22] = { itemID = 98570, droprate = "100%" };
|
||||
[24] = { itemID = 32459 }; --Time-Phased Phylactery
|
||||
[26] = { itemID = 61196, droprate = "1%" }; --Pet Sigil
|
||||
[22] = { itemID = 400751, droprate = "100%" }; --Raider's Commendations
|
||||
[23] = { itemID = 98570, droprate = "100%" }; --Mystic Orb
|
||||
[25] = { itemID = 61196, droprate = "1%" }; --Pet Sigil
|
||||
};
|
||||
{
|
||||
Name = BabbleBoss["Anetheron"];
|
||||
NpcID = 17808;
|
||||
[1] = { itemID = 30884 }; --Hatefury Mantle
|
||||
[2] = { itemID = 30888 }; --Anetheron's Noose
|
||||
[3] = { itemID = 30885 }; --Archbishop's Slippers
|
||||
@@ -906,11 +935,13 @@ AtlasLoot_Data["CoTHyjal"] = {
|
||||
[20] = { itemID = 30916 }; --Leggings of Channeled Elements
|
||||
[21] = { itemID = 30919 }; --Valestalker Girdle
|
||||
[23] = { itemID = 29434, droprate = "100%" }; --Badge of Justice
|
||||
[24] = { itemID = 98570, droprate = "100%" };
|
||||
[26] = { itemID = 61287, droprate = "1%" }; --Pet Sigil
|
||||
[24] = { itemID = 400751, droprate = "100%" }; --Raider's Commendations
|
||||
[25] = { itemID = 98570, droprate = "100%" }; --Mystic Orb
|
||||
[27] = { itemID = 61287, droprate = "1%" }; --Pet Sigil
|
||||
};
|
||||
{
|
||||
Name = BabbleBoss["Kaz'rogal"];
|
||||
NpcID = 17888;
|
||||
[1] = { itemID = 30889 }; --Kaz\'rogal\'s Hardened Heart"
|
||||
[2] = { itemID = 30893 }; --Sun-touched Chain Leggings"
|
||||
[3] = { itemID = 30894 }; --Blue Suede Shoes"
|
||||
@@ -921,10 +952,12 @@ AtlasLoot_Data["CoTHyjal"] = {
|
||||
[8] = { itemID = 30918 }; --Hammer of Atonement"
|
||||
[16] = { itemID = 31092, droprate = "100%", lootTable = {"T6HAND","Token"} };
|
||||
[18] = { itemID = 29434, droprate = "100%" }; --Badge of Justice
|
||||
[19] = { itemID = 98570, droprate = "100%" };
|
||||
[19] = { itemID = 400751, droprate = "100%" }; --Raider's Commendations
|
||||
[20] = { itemID = 98570, droprate = "100%" }; --Mystic Orb
|
||||
};
|
||||
{
|
||||
Name = BabbleBoss["Azgalor"];
|
||||
NpcID = 17842;
|
||||
[1] = { itemID = 30892 }; --Beast-tamer\'s Shoulders"
|
||||
[2] = { itemID = 30896 }; --Glory of the Defender"
|
||||
[3] = { itemID = 30897 }; --Girdle of Hope"
|
||||
@@ -933,11 +966,13 @@ AtlasLoot_Data["CoTHyjal"] = {
|
||||
[6] = { itemID = 30917 }; --Razorfury Mantle"
|
||||
[16] = { itemID = 31098, droprate = "100%", lootTable = {"T6LEGS","Token"} }; --Leggings of the Forgotten Conqueror
|
||||
[18] = { itemID = 29434, droprate = "100%" }; --Badge of Justice
|
||||
[19] = { itemID = 98570, droprate = "100%" };
|
||||
[21] = { itemID = 61289, droprate = "1%" }; --Pet Sigil
|
||||
[19] = { itemID = 400751, droprate = "100%" }; --Raider's Commendations
|
||||
[20] = { itemID = 98570, droprate = "100%" }; --Mystic Orb
|
||||
[22] = { itemID = 61289, droprate = "1%" }; --Pet Sigil
|
||||
};
|
||||
{
|
||||
Name = BabbleBoss["Archimonde"];
|
||||
NpcID = 17968;
|
||||
[1] = { itemID = 30913, droprate = "5%" }; --Robes of Rhonin
|
||||
[2] = { itemID = 30912, droprate = "5%" }; --Leggings of Eternity
|
||||
[3] = { itemID = 30905, droprate = "4%" }; --Midnight Chestguard
|
||||
@@ -953,12 +988,14 @@ AtlasLoot_Data["CoTHyjal"] = {
|
||||
[16] = { itemID = 31097, droprate = "100%", lootTable = {"T6HEAD","Token"} }; --Helm of the Forgotten Conqueror
|
||||
[18] = { itemID = 450009}, -- The String of Time
|
||||
[20] = { itemID = 29434, droprate = "100%" }; --Badge of Justice
|
||||
[21] = { itemID = 98570, droprate = "100%" };
|
||||
[23] = { itemID = 61557, droprate = "1%" }; --Pet Sigil
|
||||
[25] = { itemID = 1001620, droprate = "?%" };
|
||||
[21] = { itemID = 400751, droprate = "100%" }; --Raider's Commendations
|
||||
[22] = { itemID = 98570, droprate = "100%" }; --Mystic Orb
|
||||
[24] = { itemID = 61557, droprate = "1%" }; --Pet Sigil
|
||||
[26] = { itemID = 1001620 };
|
||||
};
|
||||
{
|
||||
Name = AL["Chromius"];
|
||||
NpcID = 92179;
|
||||
[1] = { itemID = 15828 }; --Final Countdown Bands
|
||||
[2] = { itemID = 15831 }; --Girdle of Falling Sand
|
||||
[3] = { itemID = 15898 }; --Hourglass Casing
|
||||
@@ -974,7 +1011,8 @@ AtlasLoot_Data["CoTHyjal"] = {
|
||||
[16] = { itemID = 18764 }; --Echo of Eons
|
||||
[17] = { itemID = 15041 }; --Key of Time
|
||||
[19] = { itemID = 29434, droprate = "100%" }; --Badge of Justice
|
||||
[20] = { itemID = 98570, droprate = "100%" };
|
||||
[20] = { itemID = 400751, droprate = "100%" }; --Raider's Commendations
|
||||
[21] = { itemID = 98570, droprate = "100%" }; --Mystic Orb
|
||||
};
|
||||
{
|
||||
Name = AL["Trash Mobs"].." - Items";
|
||||
@@ -1333,6 +1371,7 @@ AtlasLoot_Data["CFRSerpentshrine"] = {
|
||||
Map = "CFRSerpentshrineCavern";
|
||||
{
|
||||
Name = BabbleBoss["Hydross the Unstable"];
|
||||
NpcID = 21216;
|
||||
[1] = { itemID = 30056, droprate = "8%" }; --Robe of Hateful Echoes
|
||||
[2] = { itemID = 32516, droprate = "8%" }; --Wraps of Purification
|
||||
[3] = { itemID = 30050, droprate = "7%" }; --Boots of the Shifting Nightmare
|
||||
@@ -1341,6 +1380,7 @@ AtlasLoot_Data["CFRSerpentshrine"] = {
|
||||
[6] = { itemID = 30054, droprate = "8%" }; --Ranger-General's Chestguard
|
||||
[7] = { itemID = 30048, droprate = "1%" }; --Brighthelm of Justice
|
||||
[8] = { itemID = 30053, droprate = "6%" }; --Pauldrons of the Wardancer
|
||||
[9] = { itemID = 600878, [AtlasLoot.Difficultys.MIN_DIF] = AtlasLoot.Difficultys.Heroic }; --Elemental Lodestone: Hydross the Unstable
|
||||
[16] = { itemID = 30052, droprate = "0%" }; --Ring of Lethality
|
||||
[17] = { itemID = 33055, droprate = "4%" }; --Band of Vile Aggression
|
||||
[18] = { itemID = 30664, droprate = "8%" }; --Living Root of the Wildheart
|
||||
@@ -1348,7 +1388,10 @@ AtlasLoot_Data["CFRSerpentshrine"] = {
|
||||
[20] = { itemID = 30049, droprate = "9%" }; --Fathomstone
|
||||
[21] = { itemID = 30051, droprate = "1%" }; --Idol of the Crescent Goddess
|
||||
[23] = { itemID = 29434, droprate = "100%" }; --Badge of Justice
|
||||
[24] = { itemID = 816254, droprate = { nil, "2%", "5%", "7%", "10%" } }; --Formula: Enchant Cloak - Crushing Wave
|
||||
[24] = { itemID = 400751, droprate = "100%" }; --Raider's Commendations
|
||||
[25] = { itemID = 98570, droprate = "100%" }; --Mystic Orb
|
||||
[27] = { itemID = 816254, droprate = { nil, "2%", "5%", "7%", "10%" } }; --Formula: Enchant Cloak - Crushing Wave
|
||||
[29] = { itemID = 63511, droprate = "1%" }; --Pet Sigil
|
||||
};
|
||||
{
|
||||
Name = BabbleBoss["The Lurker Below"];
|
||||
@@ -1366,9 +1409,13 @@ AtlasLoot_Data["CFRSerpentshrine"] = {
|
||||
[19] = { itemID = 30665, droprate = "8%" }; --Earring of Soulful Meditation
|
||||
[20] = { itemID = 30063, droprate = "7%" }; --Libram of Absolute Truth
|
||||
[21] = { itemID = 30058, droprate = "0%" }; --Mallet of the Tides
|
||||
[23] = { itemID = 29434, droprate = "100%" }; --Badge of Justice
|
||||
[24] = { itemID = 400751, droprate = "100%" }; --Raider's Commendations
|
||||
[25] = { itemID = 98570, droprate = "100%" }; --Mystic Orb
|
||||
};
|
||||
{
|
||||
Name = BabbleBoss["Leotheras the Blind"];
|
||||
NpcID = 21215;
|
||||
[1] = { itemID = 30092, droprate = "3%" }; --Orca-Hide Boots
|
||||
[2] = { itemID = 30097, droprate = "5%" }; --Coral-Barbed Shoulderpads
|
||||
[3] = { itemID = 30091, droprate = "7%" }; --True-Aim Stalker Bands
|
||||
@@ -1377,9 +1424,13 @@ AtlasLoot_Data["CFRSerpentshrine"] = {
|
||||
[6] = { itemID = 30095, droprate = "4%" }; --Fang of the Leviathan
|
||||
[16] = { itemID = 30240, droprate = "100%", lootTable = {"T5HAND","Token"} }; --Gloves of the Vanquished Defender
|
||||
[18] = { itemID = 29434, droprate = "100%" }; --Badge of Justice
|
||||
[19] = { itemID = 400751, droprate = "100%" }; --Raider's Commendations
|
||||
[20] = { itemID = 98570, droprate = "100%" }; --Mystic Orb
|
||||
[22] = { itemID = 63326, droprate = "1%" }; --Pet Sigil
|
||||
};
|
||||
{
|
||||
Name = BabbleBoss["Fathom-Lord Karathress"];
|
||||
NpcID = 21214;
|
||||
[1] = { itemID = 30100, droprate = "5%" }; --Soul-Strider Boots
|
||||
[2] = { itemID = 30101, droprate = "5%" }; --Bloodsea Brigand's Vest
|
||||
[3] = { itemID = 30099, droprate = "5%" }; --Frayed Tether of the Drowned
|
||||
@@ -1388,9 +1439,13 @@ AtlasLoot_Data["CFRSerpentshrine"] = {
|
||||
[6] = { itemID = 30090, droprate = "5%" }; --World Breaker
|
||||
[16] = { itemID = 30246, droprate = "100%", lootTable = {"T5LEGS","Token"} }; --Leggings of the Vanquished Defender
|
||||
[18] = { itemID = 29434, droprate = "100%" }; --Badge of Justice
|
||||
[19] = { itemID = 400751, droprate = "100%" }; --Raider's Commendations
|
||||
[20] = { itemID = 98570, droprate = "100%" }; --Mystic Orb
|
||||
[22] = { itemID = 63325, droprate = "1%" }; --Pet Sigil
|
||||
};
|
||||
{
|
||||
Name = BabbleBoss["Morogrim Tidewalker"];
|
||||
NpcID = 21213;
|
||||
[1] = { itemID = 30098, droprate = "2%" }; --Razor-Scale Battlecloak
|
||||
[2] = { itemID = 30079, droprate = "5%" }; --Illidari Shoulderpads
|
||||
[3] = { itemID = 30075, droprate = "9%" }; --Gnarled Chestpiece of the Ancients
|
||||
@@ -1398,16 +1453,19 @@ AtlasLoot_Data["CFRSerpentshrine"] = {
|
||||
[5] = { itemID = 30068, droprate = "7%" }; --Girdle of the Tidal Call
|
||||
[6] = { itemID = 30084, droprate = "1%" }; --Pauldrons of the Argent Sentinel
|
||||
[7] = { itemID = 30081, droprate = "1%" }; --Warboots of Obliteration
|
||||
[9] = { itemID = 29434, droprate = "100%" }; --Badge of Justice
|
||||
[16] = { itemID = 30008, droprate = "8%" }; --Pendant of the Lost Ages
|
||||
[17] = { itemID = 30083, droprate = "1%" }; --Ring of Sundered Souls
|
||||
[18] = { itemID = 33058, droprate = "9%" }; --Band of the Vigilant
|
||||
[19] = { itemID = 30720, droprate = "0%" }; --Serpent-Coil Braid
|
||||
[20] = { itemID = 30082, droprate = "0%" }; --Talon of Azshara
|
||||
[21] = { itemID = 30080, droprate = "5%" }; --Luminescent Rod of the Naaru
|
||||
[23] = { itemID = 29434, droprate = "100%" }; --Badge of Justice
|
||||
[24] = { itemID = 400751, droprate = "100%" }; --Raider's Commendations
|
||||
[25] = { itemID = 98570, droprate = "100%" }; --Mystic Orb
|
||||
};
|
||||
{
|
||||
Name = BabbleBoss["Lady Vashj"];
|
||||
NpcID = 21212;
|
||||
[1] = { itemID = 30107, droprate = "3%" }; --Vestments of the Sea-Witch
|
||||
[2] = { itemID = 30111, droprate = "4%" }; --Runetotem's Mantle
|
||||
[3] = { itemID = 30106, droprate = "2%" }; --Belt of One-Hundred Deaths
|
||||
@@ -1422,8 +1480,11 @@ AtlasLoot_Data["CFRSerpentshrine"] = {
|
||||
[12] = { itemID = 30105, droprate = "3%" }; --Serpent Spine Longbow
|
||||
[16] = { itemID = 30243, droprate = "100%", lootTable = {"T5HEAD","Token"} }; --Helm of the Vanquished Defender
|
||||
[18] = { itemID = 29434, droprate = "100%" }; --Badge of Justice
|
||||
[19] = { itemID = 29906, droprate = "5%" }; --Vashj's Vial Remnant
|
||||
[21] = { itemID = 450000 }; --Intact Vial of Lady Vashj
|
||||
[19] = { itemID = 400751, droprate = "100%" }; --Raider's Commendations
|
||||
[20] = { itemID = 98570, droprate = "100%" }; --Mystic Orb
|
||||
[22] = { itemID = 29906, droprate = "5%" }; --Vashj's Vial Remnant
|
||||
[23] = { itemID = 450000 }; --Intact Vial of Lady Vashj
|
||||
[25] = { itemID = 63320, droprate = "1%" }; --Pet Sigil
|
||||
};
|
||||
{
|
||||
Name = AL["Trash Mobs"];
|
||||
@@ -1466,6 +1527,7 @@ AtlasLoot_Data["GruulsLair"] = {
|
||||
Map = "GruulsLair";
|
||||
{
|
||||
Name = BabbleBoss["High King Maulgar"];
|
||||
NpcID = 18831;
|
||||
[1] = { itemID = 28797, droprate = ".39%" }; --Brute Cloak of the Ogre-Magi
|
||||
[2] = { itemID = 28799, droprate = ".98%" }; --Belt of Divine Inspiration
|
||||
[3] = { itemID = 28796, droprate = "2.93%" }; --Malefic Mask of the Shadows
|
||||
@@ -1474,10 +1536,14 @@ AtlasLoot_Data["GruulsLair"] = {
|
||||
[6] = { itemID = 28800, droprate = "5.87%" }; --Hammer of the Naaru
|
||||
[16] = { itemID = 29764, droprate = "100%", lootTable = {"T4SHOULDER","Token"} }; --Pauldrons of the Fallen Defender
|
||||
[18] = { itemID = 29434, droprate = "100%" }; --Badge of Justice
|
||||
[19] = { itemID = 816252, droprate = { nil, "2%", "5%", "7%", "10%" } }; --Formula: Enchant Weapon - Undaunted Might
|
||||
[19] = { itemID = 400751, droprate = "100%" }; --Raider's Commendations
|
||||
[20] = { itemID = 98570, droprate = "100%" }; --Mystic Orb
|
||||
[22] = { itemID = 816252, droprate = { nil, "2%", "5%", "7%", "10%" } }; --Formula: Enchant Weapon - Undaunted Might
|
||||
[24] = { itemID = 62311, droprate = "1%" }; --Pet Sigil
|
||||
};
|
||||
{
|
||||
Name = BabbleBoss["Gruul the Dragonkiller"];
|
||||
NpcID = 19044;
|
||||
[1] = { itemID = 28804, droprate = "4.96%" }; --Collar of Cho'gall
|
||||
[2] = { itemID = 28803, droprate = "4.21%" }; --Cowl of Nature's Breath
|
||||
[3] = { itemID = 28828, droprate = "1.22%" }; --Gronn-Stitched Girdle
|
||||
@@ -1783,6 +1849,7 @@ AtlasLoot_Data["HCMagtheridon"] = {
|
||||
Map = "HCMagtheridonsLair";
|
||||
{
|
||||
Name = BabbleBoss["Magtheridon"];
|
||||
NpcID = 17257;
|
||||
[1] = { itemID = 28777 }; --Cloak of the Pit Stalker
|
||||
[2] = { itemID = 28780 }; --Soul-Eater's Handwraps
|
||||
[3] = { itemID = 28776 }; --Liar's Tongue Gloves
|
||||
@@ -1795,17 +1862,20 @@ AtlasLoot_Data["HCMagtheridon"] = {
|
||||
[10] = { itemID = 28782 }; --Crystalheart Pulse-Staff
|
||||
[11] = { itemID = 29458 }; --Aegis of the Vindicator
|
||||
[12] = { itemID = 28783 }; --Eredar Wand of Obliteration
|
||||
[14] = { itemID = 34845 }; --Pit Lord's Satchel
|
||||
[15] = { itemID = 34846 }; --Black Sack of Gems
|
||||
[14] = { itemID = 428775, [AtlasLoot.Difficultys.MIN_DIF] = AtlasLoot.Difficultys.Mythic }; --Bor -o G'urth, the Hand of Death
|
||||
[15] = { itemID = 428776, [AtlasLoot.Difficultys.MIN_DIF] = AtlasLoot.Difficultys.Mythic }; --Lebed -o G'urth, the Finger of Death
|
||||
[16] = { itemID = 29753, droprate = "100%", lootTable = {"T4CHEST","Token"} }; --Chestguard of the Fallen Defender
|
||||
[18] = { itemID = 29434, droprate = "100%" }; --Badge of Justice
|
||||
[19] = { itemID = 32385, droprate = "100%" }; --Magtheridon's Head
|
||||
[20] = { itemID = 28791 }; --Ring of the Recalcitrant
|
||||
[21] = { itemID = 28790 }; --Naaru Lightwarden's Band
|
||||
[22] = { itemID = 28793 }; --Band of Crimson Fury
|
||||
[23] = { itemID = 28792 }; --A'dal's Signet of Defense
|
||||
[25] = { itemID = 428775, [AtlasLoot.Difficultys.MIN_DIF] = AtlasLoot.Difficultys.Mythic }; --Bor -o G'urth, the Hand of Death
|
||||
[26] = { itemID = 428776, [AtlasLoot.Difficultys.MIN_DIF] = AtlasLoot.Difficultys.Mythic }; --Lebed -o G'urth, the Finger of Death
|
||||
[17] = { itemID = 34845 }; --Pit Lord's Satchel
|
||||
[18] = { itemID = 34846 }; --Black Sack of Gems
|
||||
[20] = { itemID = 29434, droprate = "100%" }; --Badge of Justice
|
||||
[21] = { itemID = 400751, droprate = "100%" }; --Raider's Commendations
|
||||
[22] = { itemID = 98570, droprate = "100%" }; --Mystic Orb
|
||||
[24] = { itemID = 32385, droprate = "100%" }; --Magtheridon's Head
|
||||
[25] = { itemID = 28791 }; --Ring of the Recalcitrant
|
||||
[26] = { itemID = 28790 }; --Naaru Lightwarden's Band
|
||||
[27] = { itemID = 28793 }; --Band of Crimson Fury
|
||||
[28] = { itemID = 28792 }; --A'dal's Signet of Defense
|
||||
[30] = { itemID = 60945, droprate = "1%" }; --Pet Sigil
|
||||
};
|
||||
};
|
||||
----------------
|
||||
@@ -1862,6 +1932,7 @@ AtlasLoot_Data["Karazhan"] = {
|
||||
};
|
||||
{
|
||||
Name = BabbleBoss["Moroes"];
|
||||
NpcID = 15687;
|
||||
[1] = { itemID = 28529, droprate = "5.91%" }; --Royal Cloak of Arathi Kings
|
||||
[2] = { itemID = 28570, droprate = "2.18%" }; --Shadow-Cloak of Dalaran
|
||||
[3] = { itemID = 28565, droprate = "4.08%" }; --Nethershard Girdle
|
||||
@@ -1885,6 +1956,7 @@ AtlasLoot_Data["Karazhan"] = {
|
||||
};
|
||||
{
|
||||
Name = BabbleBoss["Maiden of Virtue"];
|
||||
NpcID = 16457;
|
||||
[1] = { itemID = 28511, droprate = "2.46%" }; --Bands of Indwelling
|
||||
[2] = { itemID = 28515, droprate = "3.87%" }; --Bands of Nefarious Deeds
|
||||
[3] = { itemID = 28517, droprate = "6.96%" }; --Boots of Foretelling
|
||||
@@ -1904,7 +1976,6 @@ AtlasLoot_Data["Karazhan"] = {
|
||||
};
|
||||
{
|
||||
Name = "Opera Event";
|
||||
|
||||
[1] = { icon = "INV_Box_01", name = "=q6=" .. BabbleBoss["The Crone"], "=q5=" .. AL["Wizard of Oz"] };
|
||||
[2] = { itemID = 28586, droprate = "0.12%" }; --Wicked Witch's Hat
|
||||
[3] = { itemID = 28585, droprate = "5.39%" }; --Ruby Slippers
|
||||
@@ -1931,6 +2002,7 @@ AtlasLoot_Data["Karazhan"] = {
|
||||
};
|
||||
{
|
||||
Name = BabbleBoss["Nightbane"];
|
||||
NpcID = 17225;
|
||||
[1] = { itemID = 28602, droprate = "7.38%" }; --Robe of the Elder Scribes
|
||||
[2] = { itemID = 28600, droprate = "3.33%" }; --Stonebough Jerkin
|
||||
[3] = { itemID = 28601, droprate = "0.24%" }; --Chestguard of the Conniver
|
||||
@@ -1951,6 +2023,7 @@ AtlasLoot_Data["Karazhan"] = {
|
||||
};
|
||||
{
|
||||
Name = BabbleBoss["The Curator"];
|
||||
NpcID = 15691;
|
||||
[1] = { itemID = 28612, droprate = "5.19%" }; --Pauldrons of the Solace-Giver
|
||||
[2] = { itemID = 28647, droprate = "0.56%" }; --Forest Wind Shoulderpads
|
||||
[3] = { itemID = 28631, droprate = "3.47%" }; --Dragon-Quake Shoulderguards
|
||||
@@ -1960,11 +2033,12 @@ AtlasLoot_Data["Karazhan"] = {
|
||||
[16] = { itemID = 29758, droprate = "100%", lootTable = {"T4HAND","Token"} }; --Gloves of the Fallen Defender
|
||||
[18] = { itemID = 29434, droprate = "100%" }; --Badge of Justice
|
||||
[19] = { itemID = 400751, droprate = "100%" }; --Raider's Commendations
|
||||
[20] = { itemID = 98570, droprate = "100%" }; --Mystic Orbs
|
||||
[20] = { itemID = 98570, droprate = "100%" }; --Mystic Orb
|
||||
[22] = { itemID = 60170, droprate = "1%" }; --Sigil of The Curator
|
||||
};
|
||||
{
|
||||
Name = BabbleBoss["Terestian Illhoof"];
|
||||
NpcID = 15688;
|
||||
[1] = { itemID = 28660, droprate = "4.63%" }; --Gilded Thorium Cloak
|
||||
[2] = { itemID = 28653, droprate = "0.45%" }; --Shadowvine Cloak of Infusion
|
||||
[3] = { itemID = 28652, droprate = "0.75%" }; --Cincture of Will
|
||||
@@ -1985,6 +2059,7 @@ AtlasLoot_Data["Karazhan"] = {
|
||||
};
|
||||
{
|
||||
Name = BabbleBoss["Shade of Aran"];
|
||||
NpcID = 16524;
|
||||
[1] = { itemID = 28672, droprate = "1.70%" }; --Drape of the Dark Reavers
|
||||
[2] = { itemID = 28726, droprate = "6.03%" }; --Mantle of the Mind Flayer
|
||||
[3] = { itemID = 28670, droprate = ".29%" }; --Boots of the Infernal Coven
|
||||
@@ -2000,12 +2075,13 @@ AtlasLoot_Data["Karazhan"] = {
|
||||
[20] = { itemID = 28673, droprate = ".25%" }; --Tirisfal Wand of Ascendancy
|
||||
[22] = { itemID = 29434, droprate = "100%" }; --Badge of Justice
|
||||
[23] = { itemID = 400751, droprate = "100%" }; --Raider's Commendations
|
||||
[24] = { itemID = 98570, droprate = "100%" }; --Mystic Orbs
|
||||
[24] = { itemID = 98570, droprate = "100%" }; --Mystic Orb
|
||||
[26] = { itemID = 22560, droprate = { nil, "2%", "5%", "7%", "10%" } }; --Formula: Enchant Weapon - Sunfire
|
||||
[28] = { itemID = 60372, droprate = "1%" }; --Pet Sigil
|
||||
};
|
||||
{
|
||||
Name = BabbleBoss["Netherspite"];
|
||||
NpcID = 15689;
|
||||
[1] = { itemID = 28744, droprate = "2.91%" }; --Uni-Mind Headdress
|
||||
[2] = { itemID = 28742, droprate = "0.99%" }; --Pantaloons of Repentence
|
||||
[3] = { itemID = 28732, droprate = "7.31%" }; --Cowl of Defiance
|
||||
@@ -2040,6 +2116,7 @@ AtlasLoot_Data["Karazhan"] = {
|
||||
};
|
||||
{
|
||||
Name = BabbleBoss["Prince Malchezaar"];
|
||||
NpcID = 15690;
|
||||
[1] = { itemID = 28765, droprate = "0.37%" }; --Stainless Cloak of the Pure Hearted
|
||||
[2] = { itemID = 28766, droprate = "2.50%" }; --Ruby Drape of the Mysticant
|
||||
[3] = { itemID = 28764, droprate = "5.96%" }; --Farstrider Wildercloak
|
||||
@@ -2689,6 +2766,7 @@ AtlasLoot_Data["TKEye"] = {
|
||||
Map = "TempestKeepTheEye";
|
||||
{
|
||||
Name = BabbleBoss["Al'ar"];
|
||||
NpcID = 19514;
|
||||
[1] = { itemID = 29925, droprate = "3%" }; --Phoenix-Wing Cloak
|
||||
[2] = { itemID = 29918, droprate = "2%" }; --Mindstorm Wristbands
|
||||
[3] = { itemID = 29947, droprate = "3%" }; --Gloves of the Searing Grip
|
||||
@@ -2698,15 +2776,20 @@ AtlasLoot_Data["TKEye"] = {
|
||||
[7] = { itemID = 30448, droprate = "2%" }; --Talon of Al'ar
|
||||
[8] = { itemID = 30447, droprate = "1%" }; --Tome of Fiery Redemption
|
||||
[9] = { itemID = 29923, droprate = "3%" }; --Talisman of the Sun King
|
||||
[11] = { itemID = 600867, [AtlasLoot.Difficultys.MIN_DIF] = AtlasLoot.Difficultys.Heroic }; --Elemental Lodestone: Al'ar
|
||||
[16] = { itemID = 32944, droprate = "2%" }; --Talon of the Phoenix
|
||||
[17] = { itemID = 29948, droprate = "0%" }; --Claw of the Phoenix
|
||||
[18] = { itemID = 29924, droprate = "1%" }; --Netherbane
|
||||
[19] = { itemID = 29949, droprate = "2%" }; --Arcanite Steam-Pistol
|
||||
[21] = { itemID = 29434, droprate = "100%" }; --Badge of Justice
|
||||
[22] = { itemID = 1816254, droprate = ".75%" }; --Forumla: Enchant Cloak - Phoenix Fire
|
||||
[22] = { itemID = 400751, droprate = "100%" }; --Raider's Commendations
|
||||
[23] = { itemID = 98570, droprate = "100%" }; --Mystic Orb
|
||||
[25] = { itemID = 1816254, droprate = ".75%" }; --Forumla: Enchant Cloak - Phoenix Fire
|
||||
[27] = { itemID = 62443, droprate = "1%" }; --Pet Sigil
|
||||
};
|
||||
{
|
||||
Name = BabbleBoss["Void Reaver"];
|
||||
NpcID = 19516;
|
||||
[1] = { itemID = 29986, droprate = "3%" }; --Cowl of the Grand Engineer
|
||||
[2] = { itemID = 29984, droprate = "3%" }; --Girdle of Zaetar
|
||||
[3] = { itemID = 29985, droprate = "4%" }; --Void Reaver Greaves
|
||||
@@ -2716,9 +2799,12 @@ AtlasLoot_Data["TKEye"] = {
|
||||
[7] = { itemID = 30450, droprate = "2%" }; --Warp-Spring Coil
|
||||
[16] = { itemID = 30249, droprate = "100%", lootTable = {"T5SHOULDER","Token"} }; --Pauldrons of the Vanquished Defender
|
||||
[18] = { itemID = 29434, droprate = "100%" }; --Badge of Justice
|
||||
[19] = { itemID = 400751, droprate = "100%" }; --Raider's Commendations
|
||||
[20] = { itemID = 98570, droprate = "100%" }; --Mystic Orb
|
||||
};
|
||||
{
|
||||
Name = BabbleBoss["High Astromancer Solarian"];
|
||||
NpcID = 18805;
|
||||
[1] = { itemID = 29977, droprate = "9%" }; --Star-Soul Breeches
|
||||
[2] = { itemID = 29972, droprate = "9%" }; --Trousers of the Astromancer
|
||||
[3] = { itemID = 29966, droprate = "3%" }; --Vambraces of Ending
|
||||
@@ -2733,9 +2819,13 @@ AtlasLoot_Data["TKEye"] = {
|
||||
[19] = { itemID = 29981, droprate = "1%" }; --Ethereum Life-Staff
|
||||
[20] = { itemID = 29982, droprate = "8%" }; --Wand of the Forgotten Star
|
||||
[22] = { itemID = 29434, droprate = "100%" }; --Badge of Justice
|
||||
[23] = { itemID = 400751, droprate = "100%" }; --Raider's Commendations
|
||||
[24] = { itemID = 98570, droprate = "100%" }; --Mystic Orb
|
||||
[26] = { itemID = 62309, droprate = "1%" }; --Pet Sigil
|
||||
};
|
||||
{
|
||||
Name = BabbleBoss["Kael'thas Sunstrider"];
|
||||
NpcID = 19622;
|
||||
[1] = { itemID = 29992, droprate = "4%" }; --Royal Cloak of the Sunstriders
|
||||
[2] = { itemID = 29989, droprate = "2%" }; --Sunshower Light Cloak
|
||||
[3] = { itemID = 29994, droprate = "4%" }; --Thalassian Wildercloak
|
||||
@@ -2748,16 +2838,20 @@ AtlasLoot_Data["TKEye"] = {
|
||||
[10] = { itemID = 29993, droprate = "2%" }; --Twinblade of the Phoenix
|
||||
[11] = { itemID = 29996, droprate = "5%" }; --Rod of the Sun King
|
||||
[12] = { itemID = 29988, droprate = "4%" }; --The Nexus Key
|
||||
[14] = { itemID = 29434, droprate = "100%" }; --Badge of Justice
|
||||
[14] = { itemID = 29905, droprate = "7%" }; --Kael's Vial Remnant
|
||||
[15] = { itemID = 450001 }; --Intact Vial of Kael'thas Sunstrider
|
||||
[16] = { itemID = 30237, droprate = "100%", lootTable = {"T5CHEST","Token"} }; --Chestguard of the Vanquished Defender
|
||||
[18] = { itemID = 32458 }; --Ashes of Al'ar
|
||||
[19] = { itemID = 32405, droprate = "100%" }; --Verdant Sphere
|
||||
[20] = { itemID = 30018 }; --Lord Sanguinar's Claim
|
||||
[21] = { itemID = 30017 }; --Telonicus's Pendant of Mayhem
|
||||
[22] = { itemID = 30007 }; --The Darkener's Grasp
|
||||
[23] = { itemID = 30015 }; --The Sun King's Talisman
|
||||
[25] = { itemID = 29905, droprate = "7%" }; --Kael's Vial Remnant
|
||||
[26] = { itemID = 450001 }; --Intact Vial of Kael'thas Sunstrider
|
||||
[18] = { itemID = 32405, droprate = "100%" }; --Verdant Sphere
|
||||
[19] = { itemID = 30018 }; --Lord Sanguinar's Claim
|
||||
[20] = { itemID = 30017 }; --Telonicus's Pendant of Mayhem
|
||||
[21] = { itemID = 30007 }; --The Darkener's Grasp
|
||||
[22] = { itemID = 30015 }; --The Sun King's Talisman
|
||||
[24] = { itemID = 29434, droprate = "100%" }; --Badge of Justice
|
||||
[25] = { itemID = 400751, droprate = "100%" }; --Raider's Commendations
|
||||
[26] = { itemID = 98570, droprate = "100%" }; --Mystic Orb
|
||||
[28] = { itemID = 62498, droprate = "1%" }; --Pet Sigil
|
||||
[30] = { itemID = 32458 }; --Ashes of Al'ar
|
||||
|
||||
};
|
||||
{
|
||||
Name = AL["Trash Mobs"];
|
||||
@@ -2827,7 +2921,7 @@ AtlasLoot_Data["ZulAman"] = {
|
||||
[22] = { itemID = 222637, droprate = { "25%", "50%", "75%", "100%" } }; --Primal Amani Idol
|
||||
[24] = { itemID = 29434, droprate = "100%" }; --Badge of Justice
|
||||
[25] = { itemID = 400751, droprate = "100%" }; --Raider's Commendations
|
||||
[26] = { itemID = 98570, droprate = "100%" }; --Mystic Orbs
|
||||
[26] = { itemID = 98570, droprate = "100%" }; --Mystic Orb
|
||||
[28] = { itemID = 63944, droprate = "1%" }; --Pet Sigil
|
||||
};
|
||||
{
|
||||
@@ -2847,7 +2941,7 @@ AtlasLoot_Data["ZulAman"] = {
|
||||
[22] = { itemID = 222637, droprate = { "25%", "50%", "75%", "100%" } }; --Primal Amani Idol
|
||||
[24] = { itemID = 29434, droprate = "100%" }; --Badge of Justice
|
||||
[25] = { itemID = 400751, droprate = "100%" }; --Raider's Commendations
|
||||
[26] = { itemID = 98570, droprate = "100%" }; --Mystic Orbs
|
||||
[26] = { itemID = 98570, droprate = "100%" }; --Mystic Orb
|
||||
[28] = { itemID = 63943, droprate = "1%" }; --Pet Sigil
|
||||
|
||||
};
|
||||
@@ -2868,7 +2962,7 @@ AtlasLoot_Data["ZulAman"] = {
|
||||
[22] = { itemID = 222637, droprate = { "25%", "50%", "75%", "100%" } }; --Primal Amani Idol
|
||||
[24] = { itemID = 29434, droprate = "100%" }; --Badge of Justice
|
||||
[25] = { itemID = 400751, droprate = "100%" }; --Raider's Commendations
|
||||
[26] = { itemID = 98570, droprate = "100%" }; --Mystic Orbs
|
||||
[26] = { itemID = 98570, droprate = "100%" }; --Mystic Orb
|
||||
[28] = { itemID = 63946, droprate = "1%" }; --Pet Sigil
|
||||
|
||||
};
|
||||
@@ -2889,7 +2983,7 @@ AtlasLoot_Data["ZulAman"] = {
|
||||
[22] = { itemID = 222637, droprate = { "25%", "50%", "75%", "100%" } }; --Primal Amani Idol
|
||||
[24] = { itemID = 29434, droprate = "100%" }; --Badge of Justice
|
||||
[25] = { itemID = 400751, droprate = "100%" }; --Raider's Commendations
|
||||
[26] = { itemID = 98570, droprate = "100%" }; --Mystic Orbs
|
||||
[26] = { itemID = 98570, droprate = "100%" }; --Mystic Orb
|
||||
[28] = { itemID = 63945, droprate = "1%" }; --Pet Sigil
|
||||
};
|
||||
{
|
||||
@@ -2913,7 +3007,7 @@ AtlasLoot_Data["ZulAman"] = {
|
||||
[24] = { itemID = 222637, droprate = { "25%", "50%", "75%", "100%" } }; --Primal Amani Idol
|
||||
[26] = { itemID = 29434, droprate = "100%" }; --Badge of Justice
|
||||
[27] = { itemID = 400751, droprate = "100%" }; --Raider's Commendations
|
||||
[28] = { itemID = 98570, droprate = "100%" }; --Mystic Orbs
|
||||
[28] = { itemID = 98570, droprate = "100%" }; --Mystic Orb
|
||||
[30] = { itemID = 1333809, droprate = "100%" }; --Amani Bear
|
||||
};
|
||||
{
|
||||
@@ -2936,7 +3030,7 @@ AtlasLoot_Data["ZulAman"] = {
|
||||
[21] = { itemID = 34071 }; --Seething Hate
|
||||
[23] = { itemID = 29434, droprate = "100%" }; --Badge of Justice
|
||||
[24] = { itemID = 400751, droprate = "100%" }; --Raider's Commendations
|
||||
[25] = { itemID = 98570, droprate = "100%" }; --Mystic Orbs
|
||||
[25] = { itemID = 98570, droprate = "100%" }; --Mystic Orb
|
||||
[27] = { itemID = 33102, droprate = "7%" }; --Blood of Zul'Jin
|
||||
[29] = { itemID = 63949, droprate = "1%" }; --Pet Sigil
|
||||
};
|
||||
|
||||
@@ -1,27 +0,0 @@
|
||||
## Interface: 30300
|
||||
## Title: AtlasLoot_Crafting
|
||||
## Title-zhCN: AtlasLoot |cFF0099FF[交易技能]|r
|
||||
## Title-zhTW: |r|cFF0099FF[地圖]|rAL 商業技能
|
||||
## Notes: AtlasLoot loot tables of Crafting Items
|
||||
## Notes-deDE: AtlasLoot loot tables of Crafting Items
|
||||
## Notes-zhCN: AtlasLoot 交易技能制造出的物品表
|
||||
## Notes-zhTW: AtlasLoot 商業技能物品資料庫
|
||||
## Author: Original: Hegarol, Ascension: Skray/Szyler/Anch/Rvng
|
||||
## Version: v6.2.0
|
||||
## X-eMail: manager@atlasloot.net
|
||||
## X-Category: Map
|
||||
## X-License: GPL v2
|
||||
## X-Website: https://discord.gg/uYCE2X2FgA
|
||||
## Dependencies: AtlasLoot
|
||||
## LoadOnDemand: 1
|
||||
## X-Curse-Packaged-Version: v6.0.0
|
||||
## X-Curse-Project-Name: Atlasloot Enhanced
|
||||
## X-Curse-Project-ID: atlasloot-enhanced
|
||||
## X-Curse-Repository-ID: wow/atlasloot-enhanced/mainline
|
||||
|
||||
npcs.lua
|
||||
extraCraftingData.lua
|
||||
craftingCLASSIC.lua
|
||||
craftingTBC.lua
|
||||
craftingWRATH.lua
|
||||
localization.lua
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -1,511 +0,0 @@
|
||||
-- AtlasLoot loot tables localization file
|
||||
-- NOTE: THIS FILE IS AUTO-GENERATED BY A TOOL, ANY MANUALLY CHANGE MIGHT BE OVERWRITTEN.
|
||||
-- $Id: localization.lua 2725 2010-07-18 16:25:23Z arith $
|
||||
|
||||
local process = function(category,check,data) if not AtlasLoot_Data[category] or #AtlasLoot_Data[category] ~= check then return end for i = 1, #data do if data[i] and data[i] ~= "" then AtlasLoot_Data[category][i][4] = data[i] end end data = nil end
|
||||
local locale = GetLocale()
|
||||
if locale == "frFR" then
|
||||
process("BlacksmithingMailBloodsoulEmbrace",4,{"","=q3=Epaulières d'âmesang","=q3=Cuirasse d'âmesang","=q3=Gantelets d'âmesang"})
|
||||
process("BlacksmithingMailFelIronChain",5,{"","=q2=Camail en anneaux de gangrefer","=q2=Tunique en anneaux de gangrefer","=q2=Brassards en anneaux de gangrefer","=q2=Gants en anneaux de gangrefer"})
|
||||
process("BlacksmithingPlateAdamantiteB",4,{"","=q3=Cuirasse en adamantite","=q3=Brassards en plaques d'adamantite","=q3=Gants en plaques d'adamantite"})
|
||||
process("BlacksmithingPlateBurningRage",5,{"","=q3=Casque rage-acier","=q3=Epaulières rage-acier","=q3=Cuirasse rage-acier","=q3=Gants rage-acier"})
|
||||
process("BlacksmithingPlateEnchantedAdaman",5,{"","=q3=Cuirasse enchantée en adamantite","=q3=Ceinture enchantée en adamantite","=q3=Jambières enchantées en adamantite","=q3=Bottes enchantées en adamantite"})
|
||||
process("BlacksmithingPlateFaithFelsteel",4,{"","=q3=Casque en gangracier","=q3=Gants en gangracier","=q3=Jambières en gangracier"})
|
||||
process("BlacksmithingPlateFelIronPlate",6,{"","=q2=Cuirasse en gangrefer","=q2=Gants en plaques de gangrefer","=q2=Ceinture en plaques de gangrefer","=q2=Pantalon en plaques de gangrefer","=q2=Bottes en plaques de gangrefer"})
|
||||
process("BlacksmithingPlateFlameG",5,{"","=q3=Casque plaie-des-flammes","=q3=Cuirasse plaie-des-flammes","=q3=Brassards plaie-des-flammes","=q3=Gants plaie-des-flammes"})
|
||||
process("BlacksmithingPlateImperialPlate",8,{"","=q2=Heaume impérial en plaques","=q2=Epaulières impériales en plaques","=q2=Pansière impériale","=q2=Brassards impériaux en plaques","=q2=Ceinture impériale en plaques","=q2=Jambières impériales en plaques","=q2=Bottes impériales en plaques"})
|
||||
process("BlacksmithingPlateKhoriumWard",4,{"","=q3=Ceinture en khorium","=q3=Pantalon en khorium","=q3=Bottes en khorium"})
|
||||
process("BlacksmithingPlateOrnateSaroniteBattlegear",9,{"","=q3=Bouclier-crâne orné en saronite","=q3=Espauliers ornés en saronite","=q3=Haubert orné en saronite","=q3=Brassards ornés en saronite","=q3=Gantelets ornés en saronite","=q3=Sangle ornée en saronite","=q3=Cuissards ornés en saronite","=q3=Brodequins ornés en saronite"})
|
||||
process("BlacksmithingPlateSavageSaroniteBattlegear",9,{"","=q3=Bouclier-crâne sauvage en saronite","=q3=Espauliers sauvages en saronite","=q3=Haubert sauvage en saronite","=q3=Brassards sauvages en saronite","=q3=Gantelets sauvages en saronite","=q3=Sangle sauvage en saronite","=q3=Cuissards sauvages en saronite","=q3=Brodequins sauvages en saronite"})
|
||||
process("BlacksmithingPlateTheDarksoul",4,{"","=q3=Epaulières de ténébrâme","=q3=Cuirasse de ténébrâme","=q3=Jambières de ténébrâme"})
|
||||
process("CookingDaily1",6,{"=q3=Recette : Gâteau au chocolat délicieux","=q3=Recette : Côtelettes foudroyantes","=q2=Recette : Aileron-de-sang grillé","=q2=Recette : Croquettes de Kibler","=q2=Recette : Soupe de poisson-crâne","=q2=Recette : Talbuk extra piquant"})
|
||||
process("CookingDaily2",27,{"=q2=Recette : Aileron-de-dragon noirci","=q2=Recette : Steak de worg noirci","=q2=Recette : Bouchées de bestiole","=q2=Recette : Steak de seiche","=q2=Recette : Filet d'aileron-de-dragon","=q2=Recette : Saumon brûle-langue","=q2=Recette : Rhinocéros sain","=q2=Recette : Steak de raie manta impériale","=q2=Recette : Méga-menu de mammouth","=q2=Recette : Saucisses de rhinocéros puissant","=q2=Recette : Rascasse nordique pochée","=q2=Recette : Steak de wyrm rhinolicieux","=q2=Recette : Lutjan extrême","=q2=Recette : Friandises de mammouth épicées","=q2=Recette : Steak de wyrm épicé","=q2=Recette : Méduse bleue piquante","=q2=Recette : Hareng frit piquant","=q2=Recette : Steak de brochepelle tendre","=q2=Recette : En-cas du pisteur","=q2=Recette : Worg cuit","=q3=Toque de chef","=q1=Epices nordiques","","=q3=Recette : Gâteau au chocolat délicieux","=q3=Recette : Côtelettes foudroyantes","=q1=Epice de bébé","=q1=Epices anciennes"})
|
||||
process("CraftedWeapons1",24,{"=q4=Tranchant de l'ombre","","=q4=Sorcelame en acier-titan","=q4=Crochet en acier-titan","=q4=Ecraseur d'os en acier-titan","=q4=Gardien en acier-titan","=q4=Destructeur en acier-titan","=q4=Pavois en acier-titan","","=q4=Fusil de combat blindé","=q4=Nesingwary 4000","","=q4=Lame runique en éternium","=q4=Complainte","=q4=Lame longue en gangracier","=q4=Champion en khorium","=q4=Hache de bataille à tranchant gangrené","=q4=Faucheuse en gangracier","=q4=Main de l'éternité","=q4=Marteau runique","=q4=Maillet corrompu durci","=q4=Marteau de la puissance pieuse","","=q4=Destructeur gyroscopique en khorium"})
|
||||
process("CraftedWeapons2",13,{"","=q4=Amnistie noire","=q4=Lame feuille-de-saule","=q4=Garde noire","=q4=Crépuscule","=q4=Main d'ébène","=q4=Eloquente","=q4=Marteau en sulfuron","=q4=Fureur noire","=q4=Bouclier dentelé en obsidienne","","=q4=Carabine de tireur d'élite endurci","=q4=Disque de force réactif"})
|
||||
process("CraftedWeapons3",21,{"","=q4=Garde du feu","=q4=Brasegarde","=q4=Brasefurie","=q4=Lame Coeur-de-lion","=q4=Championne Coeur-de-lion","=q4=Exécutrice Coeur-de-lion","","=q4=Tranchant planaire","=q4=Tranchant planaire noir","=q4=Tranchant cruel des plans","=q4=Croissant lunaire","=q4=Tranchelune","=q4=Lune sanguine","","=q4=Marteau poing-de-drake","=q4=Gueule de dragon","=q4=Frappe du dragon","=q4=Tonnerre","=q4=Tonnerre-profond","=q4=Héraut de la tempête"})
|
||||
process("FishingDaily1",17,{"=q4=L'anneau second","=q3=Chapeau de pêche déformé","=q3=Seau de Chuck","=q3=Seau de Bourbe-haleine","=q3=Seau de Patibulle","=q3=Seau de Chicot","=q3=Oeil de la mer","=q2=Recette : Brune du capitaine Rumsey","=q2=Ligne de pêche en vrai-argent filé","=q1=Monocle de noble","=q1=Boutons de manchette antiques en argent","=q1=Bague de mariage en or","=q1=Bock orné","=q1=Couteau à steak tranchant","=q1=Journal détrempé","=q1=Elixir de marche sur l'eau","=q1=Hameçon aiguisé"})
|
||||
process("FishingDaily2",23,{"=q4=Joyau-tempête soutenu","=q4=Joyau-tempête brillant","=q4=Joyau-tempête délicat","=q4=Joyau-tempête rigide","=q4=Joyau-tempête runique","=q4=Joyau-tempête solide","=q4=Joyau-tempête étincelant","=q3=Chapeau de pêche déformé","=q3=Canne à pêche en os","=q3=Canne à pêche ornée de joyaux","=q3=Clampant des rivages","=q3=Larme de sirène","=q3=Minuscule coffret en titane","=q2=Recette : Brune du capitaine Rumsey","=q2=Ligne de pêche à toute épreuve en éternium","=q1=Chapeau de jungle endommagé","=q1=Canne à pointe de diamant","=q1=Ver luisant","=q1=Boussole étrange","=q1=Huile de pygmée","=q1=Elixir de marche sur l'eau","=q1=Fiole de poison scellée","=q1=Recette détrempée"})
|
||||
process("JewelDragonsEye1",19,{"","","","","","","","","","","","","","","","","","","=q3=Oeil de dragon"})
|
||||
process("JewelcraftingDaily1",19,{"=q3=Dessin : Rubis cardinal soutenu","=q3=Dessin : Rubis cardinal éclatant","=q3=Dessin : Rubis cardinal délicat","=q3=Dessin : Rubis cardinal miroitant","=q3=Dessin : Rubis cardinal cassé","=q3=Dessin : Rubis cardinal précis","=q3=Dessin : Rubis cardinal runique","=q3=Dessin : Rubis cardinal subtil","=q3=Dessin : Rubis écarlate soutenu","=q3=Dessin : Rubis écarlate délicat","=q3=Dessin : Rubis écarlate miroitant","=q3=Dessin : Ambre du roi brillant","=q3=Dessin : Ambre du roi mystique","=q3=Dessin : Ambre du roi rapide","=q3=Dessin : Ambre du roi rigide","=q3=Dessin : Ambre du roi lisse","=q3=Dessin : Ambre du roi bombé","=q3=Dessin : Halo de l'automne rapide","=q3=Dessin : Halo de l'automne rigide"})
|
||||
process("JewelcraftingDaily2",28,{"=q3=Dessin : Amétrine de précision","=q3=Dessin : Amétrine de champion","=q3=Dessin : Amétrine mortelle","=q3=Dessin : Amétrine adroite","=q3=Dessin : Amétrine durable","=q3=Dessin : Amétrine investie","=q3=Dessin : Amétrine gravée","=q3=Dessin : Amétrine féroce","=q3=Dessin : Amétrine rougeoyante","=q3=Dessin : Amétrine luisante","=q3=Dessin : Amétrine intaillée","=q3=Dessin : Amétrine transparente","=q3=Dessin : Amétrine lumineuse","=q3=Dessin : Amétrine toute-puissante","=q3=Dessin : Amétrine en parfait état","=q3=Dessin : Amétrine téméraire","=q3=Dessin : Amétrine résolue","=q3=Dessin : Amétrine resplendissante","=q3=Dessin : Amétrine infrangible","=q3=Dessin : Amétrine sobre","=q3=Dessin : Amétrine voilée","=q3=Dessin : Amétrine pernicieuse","=q3=Dessin : Topaze monarchique luisante","=q3=Dessin : Topaze monarchique lumineuse","=q3=Dessin : Topaze monarchique toute-puissante","=q3=Dessin : Topaze monarchique téméraire","=q3=Dessin : Topaze monarchique sobre","=q3=Dessin : Topaze monarchique voilée"})
|
||||
process("JewelcraftingDaily3",26,{"=q3=Dessin : Oeil de Zul éblouissant","=q3=Dessin : Oeil de Zul durci","=q3=Dessin : Oeil de Zul énergisé","=q3=Dessin : Oeil de Zul énergique","=q3=Dessin : Oeil de Zul complexe","=q3=Dessin : Oeil de Zul dentelé","=q3=Dessin : Oeil de Zul diapré","=q3=Dessin : Oeil de Zul brumeux","=q3=Dessin : Oeil de Zul opaque","=q3=Dessin : Oeil de Zul radieux","=q3=Dessin : Oeil de Zul de voyant","=q3=Dessin : Oeil de Zul brisé","=q3=Dessin : Oeil de Zul rayonnant","=q3=Dessin : Oeil de Zul stable","=q3=Dessin : Oeil de Zul scindé","=q3=Dessin : Oeil de Zul contracté","=q3=Dessin : Oeil de Zul intemporel","=q3=Dessin : Oeil de Zul trouble","=q3=Dessin : Oeil de Zul vif","=q3=Dessin : Emeraude forestière durcie","=q3=Dessin : Emeraude forestière énergisée","=q3=Dessin : Emeraude forestière énergique","=q3=Dessin : Emeraude forestière complexe","=q3=Dessin : Emeraude forestière diaprée","=q3=Dessin : Emeraude forestière de voyant","=q3=Dessin : Emeraude forestière vive"})
|
||||
process("JewelcraftingDaily4",16,{"=q3=Dessin : Pierre d'effroi équilibrée","=q3=Dessin : Pierre d'effroi de défenseur","=q3=Dessin : Pierre d'effroi luminescente","=q3=Dessin : Pierre d'effroi de gardien","=q3=Dessin : Pierre d'effroi infusée","=q3=Dessin : Pierre d'effroi mystérieuse","=q3=Dessin : Pierre d'effroi surpuissante","=q3=Dessin : Pierre d'effroi purifiée","=q3=Dessin : Pierre d'effroi régalienne","=q3=Dessin : Pierre d'effroi royale","=q3=Dessin : Pierre d'effroi changeante","=q3=Dessin : Pierre d'effroi souveraine","=q3=Dessin : Pierre d'effroi ténue","=q3=Dessin : Opale du crépuscule surpuissante","=q3=Dessin : Opale du crépuscule régalienne","=q3=Dessin : Opale du crépuscule royale"})
|
||||
process("JewelcraftingDaily5",14,{"=q3=Dessin : Zircon majestueux satiné","=q3=Dessin : Zircon majestueux solide","=q3=Dessin : Zircon majestueux étincelant","=q3=Dessin : Zircon majestueux orageux","=q3=Dessin : Saphir céleste satiné","=q3=Dessin : Saphir céleste solide","=q3=Dessin : Diamant flambeciel chaotique","=q3=Dessin : Diamant flambeciel nitescent","=q3=Dessin : Diamant flambeciel brasillé","=q3=Dessin : Diamant siègeterre de perspicacité","=q3=Dessin : Diamant siègeterre vivifiant","=q3=Dessin : Diamant siègeterre implacable","=q3=Dessin : Diamant flambeciel revitalisant","=q3=Dessin : Diamant siègeterre incisif"})
|
||||
process("JewelcraftingDaily6",24,{"=q3=Dessin : Oeil de dragon soutenu","=q3=Dessin : Oeil de dragon éclatant","=q3=Dessin : Oeil de dragon brillant","=q3=Dessin : Oeil de dragon délicat","=q3=Dessin : Oeil de dragon miroitant","=q3=Dessin : Oeil de dragon cassé","=q3=Dessin : Oeil de dragon satiné","=q3=Dessin : Oeil de dragon mystique","=q3=Dessin : Oeil de dragon précis","=q3=Dessin : Oeil de dragon rapide","=q3=Dessin : Oeil de dragon rigide","=q3=Dessin : Oeil de dragon runique","=q3=Dessin : Oeil de dragon lisse","=q3=Dessin : Oeil de dragon solide","=q3=Dessin : Oeil de dragon étincelant","=q3=Dessin : Oeil de dragon orageux","=q3=Dessin : Oeil de dragon subtil","=q3=Dessin : Oeil de dragon bombé","=q4=Dessin : Collier garde-terre en titane","=q4=Dessin : Anneau garde-terre en titane","=q4=Dessin : Bague d'impact en titane","=q4=Dessin : Sautoir d'impact en titane","=q4=Dessin : Collier des horions en titane","=q4=Dessin : Anneau des horions en titane"})
|
||||
process("LeatherworkingLeatherBloodTigerH",3,{"","=q3=Epaulières du tigre-sang","=q3=Cuirasse du tigre-sang"})
|
||||
process("LeatherworkingLeatherBoreanEmbrace",9,{"","=q2=Heaume arctique","=q2=Protège-épaules arctiques","=q2=Plastron arctique","=q2=Garde-poignets arctiques","=q2=Gants arctiques","=q2=Ceinture arctique","=q2=Jambières arctiques","=q2=Bottes arctiques"})
|
||||
process("LeatherworkingLeatherDevilsaurArmor",3,{"","=q3=Gantelets diablosaures","=q3=Jambières diablosaures"})
|
||||
process("LeatherworkingLeatherEvisceratorBattlegear",9,{"","=q3=Masque d'éviscérateur","=q3=Protège-épaules d'éviscérateur","=q3=Corselet d'éviscérateur","=q3=Manchettes d'éviscérateur","=q3=Gantelets d'éviscérateur","=q3=Sangle d'éviscérateur","=q3=Garde-jambes d'éviscérateur","=q3=Bottines d'éviscérateur"})
|
||||
process("LeatherworkingLeatherFelSkin",4,{"","=q3=Gants en gangrecuir","=q3=Jambières en gangrecuir","=q3=Bottes en gangrecuir"})
|
||||
process("LeatherworkingLeatherIceborneEmbrace",9,{"","=q2=Heaume cryostène","=q2=Protège-épaules cryostènes","=q2=Corselet cryostène","=q2=Garde-poignets cryostènes","=q2=Gants cryostènes","=q2=Ceinture cryostène","=q2=Jambières cryostènes","=q2=Bottes cryostènes"})
|
||||
process("LeatherworkingLeatherIronfeatherArmor",3,{"","=q3=Epaulières en plumacier","=q3=Cuirasse en plumacier"})
|
||||
process("LeatherworkingLeatherOvercasterBattlegear",9,{"","=q3=Protège-front surjeté","=q3=Spallières surjetées","=q3=Corselet surjeté","=q3=Brassards surjetés","=q3=Protège-mains surjetés","=q3=Ceinture surjetée","=q3=Jambières surjetées","=q3=Bottes surjetées"})
|
||||
process("LeatherworkingLeatherPrimalBatskin",4,{"","=q3=Pourpoint en peau de chauve-souris primordiale","=q3=Brassards en peau de chauve-souris primordiale","=q3=Gants en peau de chauve-souris primordiale"})
|
||||
process("LeatherworkingLeatherPrimalIntent",4,{"","=q4=Gilet de frappe primordiale","=q4=Brassards de frappe primordiale","=q4=Ceinture de frappe primordiale"})
|
||||
process("LeatherworkingLeatherSClefthoof",4,{"","=q3=Gilet du sabot-fourchu épais","=q3=Jambières du sabot-fourchu épaisses","=q3=Bottes du sabot-fourchu épaisses"})
|
||||
process("LeatherworkingLeatherStormshroudArmor",5,{"","=q3=Epaulières tempétueuses","=q3=Armure tempétueuse","=q3=Gants tempétueux","=q3=Pantalon tempétueux"})
|
||||
process("LeatherworkingLeatherThickDraenicA",5,{"","=q2=Gilet draenique épais","=q2=Gants draeniques épais","=q2=Pantalon draenique épais","=q2=Bottes draeniques épaisses"})
|
||||
process("LeatherworkingLeatherVolcanicArmor",4,{"","=q2=Epaulières volcaniques","=q2=Cuirasse volcanique","=q2=Jambières volcaniques"})
|
||||
process("LeatherworkingLeatherWildDraenishA",5,{"","=q2=Gilet draenique sauvage","=q2=Gants draeniques sauvages","=q2=Jambières draeniques sauvages","=q2=Bottes draeniques sauvages"})
|
||||
process("LeatherworkingLeatherWindhawkArmor",4,{"","=q4=Haubert Faucon-du-vent","=q4=Brassards Faucon-du-vent","=q4=Ceinture Faucon-du-vent"})
|
||||
process("LeatherworkingMailBlackDragonM",5,{"","=q3=Epaulières en écailles de dragon noir","=q3=Cuirasse en écailles de dragon noir","=q3=Jambières en écailles de dragon noir","=q4=Bottes en écailles de dragon noir"})
|
||||
process("LeatherworkingMailBlueDragonM",4,{"","=q3=Epaulières en écailles de dragon bleu","=q3=Cuirasse en écailles de dragon bleu","=q3=Jambières en écailles de dragon bleu"})
|
||||
process("LeatherworkingMailFelscaleArmor",5,{"","=q2=Cuirasse en gangrécailles","=q2=Gants en gangrécailles","=q2=Pantalon en gangrécailles","=q2=Bottes en gangrécailles"})
|
||||
process("LeatherworkingMailFelstalkerArmor",4,{"","=q3=Cuirasse de traqueur gangrené","=q3=Brassards de traqueur gangrené","=q3=Ceinture de traqueur gangrené"})
|
||||
process("LeatherworkingMailFrostscaleBinding",9,{"","=q2=Heaume en écailles de givre","=q2=Epaulières en écailles de givre","=q2=Corselet en écailles de givre","=q2=Brassards en écailles de givre","=q2=Gants en écailles de givre","=q2=Ceinture en écailles de givre","=q2=Jambières en écailles de givre","=q2=Bottes en écailles de givre"})
|
||||
process("LeatherworkingMailGreenDragonM",4,{"","=q3=Cuirasse en écailles de dragon vert","=q3=Gantelets en écailles de dragon vert","=q3=Jambières en écailles de dragon vert"})
|
||||
process("LeatherworkingMailNerubianHive",9,{"","=q2=Heaume nérubien","=q2=Epaulières nérubiennes","=q2=Corselet nérubien","=q2=Brassards nérubiens","=q2=Gants nérubiens","=q2=Ceinture nérubienne","=q2=Garde-jambes nérubiens","=q2=Bottes nérubiennes"})
|
||||
process("LeatherworkingMailNetherFury",4,{"","=q3=Ceinture de la Furie du Néant","=q3=Jambières de la Furie du Néant","=q3=Bottes de la Furie du Néant"})
|
||||
process("LeatherworkingMailNetherscaleArmor",4,{"","=q4=Cuirasse d'ébène en écailles du Néant","=q4=Brassards d'ébène en écailles du Néant","=q4=Ceinture d'ébène en écailles du Néant"})
|
||||
process("LeatherworkingMailNetherstrikeArmor",4,{"","=q4=Cuirasse Coup-de-Néant","=q4=Brassards Coup-de-Néant","=q4=Ceinture Coup-de-Néant"})
|
||||
process("LeatherworkingMailScaledDraenicA",5,{"","=q2=Broigne draenique","=q2=Gants draeniques en écailles","=q2=Pantalon draenique en écailles","=q2=Bottes draeniques en écailles"})
|
||||
process("LeatherworkingMailStormhideBattlegear",9,{"","=q3=Couronne de l'orageux","=q3=Epaulières de l'orageux","=q3=Haubert de l'orageux","=q3=Garde-poignets de l'orageux","=q3=Poignes de l'orageux","=q3=Ceinture de l'orageux","=q3=Garde-jambes de l'orageux","=q3=Croquenots de l'orageux"})
|
||||
process("LeatherworkingMailSwiftarrowBattlefear",9,{"","=q3=Heaume viveflèche","=q3=Garde-épaules viveflèche","=q3=Haubert viveflèche","=q3=Brassards viveflèche","=q3=Gantelets viveflèche","=q3=Ceinture viveflèche","=q3=Jambières viveflèche","=q3=Bottes viveflèche"})
|
||||
process("TailoringArcanoVest",4,{"","=q3=Robe en tisse-arcane","=q3=Brassards en tisse-arcane","=q3=Bottes en tisse-arcane"})
|
||||
process("TailoringBattlecastG",3,{"","=q4=Chaperon d'escarmouche","=q4=Pantalon d'escarmouche"})
|
||||
process("TailoringBloodvineG",4,{"","=q3=Gilet en vignesang","=q3=Jambières en vignesang","=q3=Bottes en vignesang"})
|
||||
process("TailoringDuskweaver",9,{"","=q2=Capuche en tisse-brune","=q2=Epaulières en tisse-brune","=q2=Robe en tisse-brune","=q2=Bandelettes en tisse-brune","=q2=Gants en tisse-brune","=q2=Ceinture en tisse-brune","=q2=Jambières en tisse-brune","=q2=Bottes en tisse-brune"})
|
||||
process("TailoringFrostsavageBattlegear",9,{"","=q3=Capuche du givre sauvage","=q3=Epaulières du givre sauvage","=q3=Robe du givre sauvage","=q3=Brassards du givre sauvage","=q3=Gants du givre sauvage","=q3=Ceinture du givre sauvage","=q3=Jambières du givre sauvage","=q3=Bottes du givre sauvage"})
|
||||
process("TailoringFrostwovenPower",9,{"","=q2=Coiffe tissée de givre","=q2=Epaulières tissées de givre","=q2=Robe tissée de givre","=q2=Bandelettes tissées de givre","=q2=Gants tissés de givre","=q2=Ceinture tissée de givre","=q2=Jambières tissées de givre","=q2=Bottes tissées de givre"})
|
||||
process("TailoringImbuedNeather",5,{"","=q3=Tunique en tisse-néant imprégné","=q3=Robe en tisse-néant imprégné","=q3=Pantalon en tisse-néant imprégné","=q3=Bottes en tisse-néant imprégné"})
|
||||
process("TailoringNeatherVest",8,{"","=q2=Tunique en tisse-néant","=q2=Robe en tisse-néant","=q2=Brassards en tisse-néant","=q2=Gants en tisse-néant","=q2=Ceinture en tisse-néant","=q2=Pantalon en tisse-néant","=q2=Bottes en tisse-néant"})
|
||||
process("TailoringPrimalMoon",4,{"","=q4=Epaulières d'étoffe lunaire primordiale","=q4=Robe d'étoffe lunaire primordiale","=q4=Ceinture d'étoffe lunaire primordiale"})
|
||||
process("TailoringShadowEmbrace",4,{"","=q4=Epaulières en tisse-ombre gelé","=q4=Robe en tisse-ombre gelé","=q4=Bottes en tisse-ombre gelé"})
|
||||
process("TailoringSoulclothEm",4,{"","=q4=Epaulières d'âmétoffe","=q4=Gilet d'âmétoffe","=q4=Gants d'âmétoffe"})
|
||||
process("TailoringSpellfireWrath",4,{"","=q4=Robe du feu-sorcier","=q4=Gants du feu-sorcier","=q4=Ceinture du feu-sorcier"})
|
||||
process("TailoringSpellstrikeInfu",3,{"","=q4=Chaperon frappe-sort","=q4=Pantalon frappe-sort"})
|
||||
process("TailoringTheUnyielding",3,{"","=q3=Brassards inflexibles","=q4=Ceinturon inflexible"})
|
||||
process("TailoringWhitemendWis",3,{"","=q4=Chaperon de la blanche guérison","=q4=Pantalon de la blanche guérison"})
|
||||
elseif locale == "deDE" then
|
||||
process("BlacksmithingMailBloodsoulEmbrace",4,{"","=q3=Blutseelenschultern","=q3=Blutseelenbrustplatte","=q3=Blutseelenstulpen"})
|
||||
process("BlacksmithingMailFelIronChain",5,{"","=q2=Teufelseisenkettenhelmkappe","=q2=Teufelseisenkettentunika","=q2=Teufelseisenkettenarmschienen","=q2=Teufelseisenkettenhandschuhe"})
|
||||
process("BlacksmithingPlateAdamantiteB",4,{"","=q3=Adamantitbrustplatte","=q3=Adamantitarmschienen","=q3=Adamantithandschuhe"})
|
||||
process("BlacksmithingPlateBurningRage",5,{"","=q3=Zornstahlhelm","=q3=Zornstahlschultern","=q3=Zornstahlbrustplatte","=q3=Zornstahlhandschuhe"})
|
||||
process("BlacksmithingPlateEnchantedAdaman",5,{"","=q3=Verzauberte Adamantitbrustplatte","=q3=Verzauberter Adamantitgürtel","=q3=Verzauberte Adamantitgamaschen","=q3=Verzauberte Adamantitstiefel"})
|
||||
process("BlacksmithingPlateFaithFelsteel",4,{"","=q3=Teufelsstahlhelm","=q3=Teufelsstahlhandschuhe","=q3=Teufelsstahlgamaschen"})
|
||||
process("BlacksmithingPlateFelIronPlate",6,{"","=q2=Teufelseisenbrustplatte","=q2=Teufelseisenplattenhandschuhe","=q2=Teufelseisenplattengürtel","=q2=Teufelseisenplattenhose","=q2=Teufelseisenplattenstiefel"})
|
||||
process("BlacksmithingPlateFlameG",5,{"","=q3=Flammenbannhelm","=q3=Flammenbannbrustplatte","=q3=Flammenbannarmschienen","=q3=Flammenbannhandschuhe"})
|
||||
process("BlacksmithingPlateImperialPlate",8,{"","=q2=Imperialer Plattenhelm","=q2=Imperiale Plattenschultern","=q2=Imperiale Plattenrüstung","=q2=Imperiale Plattenarmschienen","=q2=Imperialer Plattengürtel","=q2=Imperiale Plattengamaschen","=q2=Imperiale Plattenstiefel"})
|
||||
process("BlacksmithingPlateKhoriumWard",4,{"","=q3=Khoriumgürtel","=q3=Khoriumhose","=q3=Khoriumstiefel"})
|
||||
process("BlacksmithingPlateOrnateSaroniteBattlegear",9,{"","=q3=Verzierter Saronitschädelschild","=q3=Verzierte Saronitschulterstücke","=q3=Verzierte Saronithalsberge","=q3=Verzierte Saronitarmschienen","=q3=Verzierte Saronitstulpen","=q3=Verzierte Saronittaillenschutz","=q3=Verzierte Saronitbeinplatten","=q3=Verzierte Saronitlaufschuhe"})
|
||||
process("BlacksmithingPlateSavageSaroniteBattlegear",9,{"","=q3=Wilder Saronitschädelschild","=q3=Wilde Saronitschulterstücke","=q3=Wilde Saronithalsberge","=q3=Wilde Saronitarmschienen","=q3=Wilde Saronitstulpen","=q3=Wilder Saronittaillenschutz","=q3=Wilde Saronitbeinplatten","=q3=Wilde Saronitlaufschuhe"})
|
||||
process("BlacksmithingPlateTheDarksoul",4,{"","=q3=Dunkelseelenschultern","=q3=Dunkelseelenbrustplatte","=q3=Dunkelseelengamaschen"})
|
||||
process("CookingDaily1",6,{"=q3=Rezept: Köstlicher Schokoladenkuchen","=q3=Rezept: Sturmkoteletts","=q2=Rezept: Gebratene Blutflosse","=q2=Rezept: Kiblers Häppchen","=q2=Rezept: Schädelfischsuppe","=q2=Rezept: Feuriger Würztalbuk"})
|
||||
process("CookingDaily2",27,{"=q2=Rezept: Geschwärzte Drachenflosse","=q2=Rezept: Schwarzgebratenes Worgsteak","=q2=Rezept: Tierhappen","=q2=Rezept: Sepiasteak","=q2=Rezept: Drachenflossenfilet","=q2=Rezept: Feuerkracherlachs","=q2=Rezept: Herzhaftes Rhinozeros","=q2=Rezept: Steak von imperialen Mantarochen","=q2=Rezept: Megamammutmahl","=q2=Rezept: Große Rhinowurst","=q2=Rezept: Pochierte nordische Groppe","=q2=Rezept: Rhinoziöses Wyrmsteak","=q2=Rezept: Bombenschnapper","=q2=Rezept: Gewürzte Mammutleckereien","=q2=Rezept: Würziger Wyrmburger","=q2=Rezept: Würziger blauer Nesselfisch","=q2=Rezept: Würziger Brathering","=q2=Rezept: Zartes Schaufelhauersteak","=q2=Rezept: Fährtenlesersnacks","=q2=Rezept: Sehr verbrannter Worg","=q3=Kochmütze","=q1=Nordische Gewürze","","=q3=Rezept: Köstlicher Schokoladenkuchen","=q3=Rezept: Sturmkoteletts","=q1=Junges Gemüse","=q1=Gewürzmischung 4711"})
|
||||
process("CraftedWeapons1",24,{"=q4=Schattenschneide","","=q4=Titanstahlzauberklinge","=q4=Titanstahlmesser","=q4=Titanstahlknochenzermalmer","=q4=Titanstahlwächter","=q4=Titanstahlzerstörer","=q4=Titanschildwall","","=q4=Plattenverstärkte Gefechtsschrotflinte","=q4=Nesingwary 4000","","=q4=Runenverzierte Eterniumklinge","=q4=Todeslied","=q4=Teufelsstahllangschwert","=q4=Khoriumchampion","=q4=Teuflisch scharfe Kampfaxt","=q4=Teufelsstahlschneide","=q4=Hand der Ewigkeit","=q4=Runenverzierter Hammer","=q4=Teufelsgehärteter Schlägel","=q4=Hammer der rechtschaffenen Macht","","=q4=Gyrobalancierter Khoriumzerstörer"})
|
||||
process("CraftedWeapons2",13,{"","=q4=Schwarze Amnestie","=q4=Weisenklinge","=q4=Finsterer Streiter","=q4=Nachtlauer","=q4=Ebenholzhand","=q4=Willensbrecher","=q4=Sulfuronhammer","=q4=Schattenzorn","=q4=Gezackter Obsidianschild","","=q4=Kernscharfschützengewehr","=q4=Machtreaktive Scheibe"})
|
||||
process("CraftedWeapons3",21,{"","=q4=Brandwache","=q4=Lodernder Wächter","=q4=Lodernder Zorn","=q4=Löwenherzklinge","=q4=Löwenherzchampion","=q4=Löwenherzrichtklinge","","=q4=Die Planaraxt","=q4=Schwarze Planaraxt","=q4=Tückische Schneide der Ebenen","=q4=Mondsichel","=q4=Mondspaltbeil","=q4=Blutmond","","=q4=Drachenfaust","=q4=Drachenmal","=q4=Drachenschlag","=q4=Donner","=q4=Donnergroll","=q4=Bote des Sturms"})
|
||||
process("FishingDaily1",17,{"=q4=Der Andere Ring","=q3=Wettergegerbter Angelhut","=q3=Schnapps Eimer","=q3=Matschbrabbels Eimer","=q3=Knurris Eimer","=q3=Zähnchens Eimer","=q3=Auge des Meeres","=q2=Rezept: Kapitän Rumseys Lagerbier","=q2=Gesponnene Echtsilberangelschnur","=q1=Adligenmonokel","=q1=Antiker Silbermanschettenknopf","=q1=Goldener Trauring","=q1=Verschnörkelter Trinkkrug","=q1=Rasiermesserscharfes Filetiermesser","=q1=Verwittertes Tagebuch","=q1=Elixier des Wasserwandelns","=q1=Geschärfter Angelhaken"})
|
||||
process("FishingDaily2",23,{"=q4=Klobiges Sturmjuwel","=q4=Glänzendes Sturmjuwel","=q4=Feingeschliffenes Sturmjuwel","=q4=Starres Sturmjuwel","=q4=Runenverziertes Sturmjuwel","=q4=Gediegenes Sturmjuwel","=q4=Funkelndes Sturmjuwel","=q3=Wettergegerbter Angelhut","=q3=Knöcherne Angelrute","=q3=Juwelenbesetzte Angelrute","=q3=Strandkriecher","=q3=Sirenenträne","=q3=Winzige Titanschließkassette","=q2=Rezept: Kapitän Rumseys Lagerbier","=q2=Extremgetestete Eterniumangelschnur","=q1=Zerknitterter Dschungelhut","=q1=Gehstock mit Diamantspitze","=q1=Glühwürmchen","=q1=Ungewöhnlicher Kompass","=q1=Pygmäenöl","=q1=Elixier des Wasserwandelns","=q1=Versiegelte Giftphiole","=q1=Durchnässtes Rezept"})
|
||||
process("JewelDragonsEye1",19,{"","","","","","","","","","","","","","","","","","","=q3=Drachenauge"})
|
||||
process("JewelcraftingDaily1",19,{"=q3=Vorlage: Klobiger Kardinalsrubin","=q3=Vorlage: Heller Kardinalsrubin","=q3=Vorlage: Feingeschliffener Kardinalsrubin","=q3=Vorlage: Scheinender Kardinalsrubin","=q3=Vorlage: Frakturierter Kardinalsrubin","=q3=Vorlage: Präziser Kardinalsrubin","=q3=Vorlage: Runenbeschriebener Kardinalsrubin","=q3=Vorlage: Fragiler Kardinalsrubin","=q3=Vorlage: Klobiger Scharlachrubin","=q3=Vorlage: Feingeschliffener Scharlachrubin","=q3=Vorlage: Scheinender Scharlachrubin","=q3=Vorlage: Glänzender Königsbernstein","=q3=Vorlage: Mystischer Königsbernstein","=q3=Vorlage: Spiegelnder Königsbernstein","=q3=Vorlage: Massiver Königsbernstein","=q3=Vorlage: Glatter Königsbernstein","=q3=Vorlage: Kompakter Königsbernstein","=q3=Vorlage: Spiegelnder Herbstglimmer","=q3=Vorlage: Massiver Herbstglimmer"})
|
||||
process("JewelcraftingDaily2",28,{"=q3=Vorlage: Akkurater Ametrin","=q3=Vorlage: Ametrin des Champions","=q3=Vorlage: Tödlicher Ametrin","=q3=Vorlage: Gewandter Ametrin","=q3=Vorlage: Solider Ametrin","=q3=Vorlage: Machterfüllter Ametrin","=q3=Vorlage: Geätzter Ametrin","=q3=Vorlage: Wilder Ametrin","=q3=Vorlage: Gleißender Ametrin","=q3=Vorlage: Glitzernder Ametrin","=q3=Vorlage: Gravierter Ametrin","=q3=Vorlage: Transparenter Ametrin","=q3=Vorlage: Glänzender Ametrin","=q3=Vorlage: Mächtiger Ametrin","=q3=Vorlage: Makelloser Ametrin","=q3=Vorlage: Tollkühner Ametrin","=q3=Vorlage: Resoluter Ametrin","=q3=Vorlage: Prunkvoller Ametrin","=q3=Vorlage: Bruchfester Ametrin","=q3=Vorlage: Reiner Ametrin","=q3=Vorlage: Verschleierter Ametrin","=q3=Vorlage: Tückischer Ametrin","=q3=Vorlage: Glitzernder Monarchentopas","=q3=Vorlage: Glänzender Monarchentopas","=q3=Vorlage: Mächtiger Monarchentopas","=q3=Vorlage: Tollkühner Monarchentopas","=q3=Vorlage: Reiner Monarchentopas","=q3=Vorlage: Verschleierter Monarchentopas"})
|
||||
process("JewelcraftingDaily3",26,{"=q3=Vorlage: Schillerndes Auge von Zul","=q3=Vorlage: Robustes Auge von Zul","=q3=Vorlage: Geladenes Auge von Zul","=q3=Vorlage: Kraftvolles Auge von Zul","=q3=Vorlage: Aufwendiges Auge von Zul","=q3=Vorlage: Gezacktes Auge von Zul","=q3=Vorlage: Flackerndes Auge von Zul","=q3=Vorlage: Nebliges Auge von Zul","=q3=Vorlage: Opakes Auge von Zul","=q3=Vorlage: Strahlendes Auge von Zul","=q3=Vorlage: Seherauge von Zul","=q3=Vorlage: Zerschmettertes Auge von Zul","=q3=Vorlage: Feuriges Auge von Zul","=q3=Vorlage: Beständiges Auge von Zul","=q3=Vorlage: Gesplittertes Auge von Zul","=q3=Vorlage: Sprödes Auge von Zul","=q3=Vorlage: Zeitloses Auge von Zul","=q3=Vorlage: Trübes Auge von Zul","=q3=Vorlage: Klares Auge von Zul","=q3=Vorlage: Robuster Waldsmaragd","=q3=Vorlage: Geladener Waldsmaragd","=q3=Vorlage: Kraftvoller Waldsmaragd","=q3=Vorlage: Aufwendiger Waldsmaragd","=q3=Vorlage: Flackernder Waldsmaragd","=q3=Vorlage: Waldsmaragd des Sehers","=q3=Vorlage: Klarer Waldsmaragd"})
|
||||
process("JewelcraftingDaily4",16,{"=q3=Vorlage: Ausbalancierter Schreckensstein","=q3=Vorlage: Schreckensstein des Verteidigers","=q3=Vorlage: Leuchtender Schreckensstein","=q3=Vorlage: Schreckensstein des Wächters","=q3=Vorlage: Energieerfüllter Schreckensstein","=q3=Vorlage: Geheimnisvoller Schreckensstein","=q3=Vorlage: Imposanter Schreckensstein","=q3=Vorlage: Geläuterter Schreckensstein","=q3=Vorlage: Majestätischer Schreckensstein","=q3=Vorlage: Königlicher Schreckensstein","=q3=Vorlage: Unbeständiger Schreckensstein","=q3=Vorlage: Stattlicher Schreckensstein","=q3=Vorlage: Zarter Schreckensstein","=q3=Vorlage: Imposanter Zwielichtopal","=q3=Vorlage: Majestätischer Zwielichtopal","=q3=Vorlage: Königlicher Zwielichtopal"})
|
||||
process("JewelcraftingDaily5",14,{"=q3=Vorlage: Irisierender Fürstenzirkon","=q3=Vorlage: Gediegener Fürstenzirkon","=q3=Vorlage: Funkelnder Fürstenzirkon","=q3=Vorlage: Stürmischer Fürstenzirkon","=q3=Vorlage: Irisierender Himmelssaphir","=q3=Vorlage: Gediegener Himmelssaphir","=q3=Vorlage: Chaotischer Polarlichtdiamant","=q3=Vorlage: Glühender Polarlichtdiamant","=q3=Vorlage: Glimmender Polarlichtdiamant","=q3=Vorlage: Bemerkenswerter Erdringdiamant","=q3=Vorlage: Kräftigender Erdringdiamant","=q3=Vorlage: Unerbittlicher Erdringdiamant","=q3=Vorlage: Belebender Polarlichtdiamant","=q3=Vorlage: Energischer Erdringdiamant"})
|
||||
process("JewelcraftingDaily6",24,{"=q3=Vorlage: Klobiges Drachenauge","=q3=Vorlage: Helles Drachenauge","=q3=Vorlage: Brillantiertes Drachenauge","=q3=Vorlage: Feingeschliffenes Drachenauge","=q3=Vorlage: Scheinendes Drachenauge","=q3=Vorlage: Frakturiertes Drachenauge","=q3=Vorlage: Irisierendes Drachenauge","=q3=Vorlage: Mystisches Drachenauge","=q3=Vorlage: Präzises Drachenauge","=q3=Vorlage: Spiegelndes Drachenauge","=q3=Vorlage: Massives Drachenauge","=q3=Vorlage: Runenbeschriebenes Drachenauge","=q3=Vorlage: Glattes Drachenauge","=q3=Vorlage: Gediegenes Drachenauge","=q3=Vorlage: Funkelndes Drachenauge","=q3=Vorlage: Stürmisches Drachenauge","=q3=Vorlage: Fragiles Drachenauge","=q3=Vorlage: Kompaktes Drachenauge","=q4=Vorlage: Titankette des Erdenwächters","=q4=Vorlage: Titanring des Erdenwächters","=q4=Vorlage: Titanband des Einschlags","=q4=Vorlage: Titanhalsreif des Einschlags","=q4=Vorlage: Titanhalskette des Zauberschocks","=q4=Vorlage: Titanring des Zauberschocks"})
|
||||
process("LeatherworkingLeatherBloodTigerH",3,{"","=q3=Bluttigerschultern","=q3=Bluttigerbrustplatte"})
|
||||
process("LeatherworkingLeatherBoreanEmbrace",9,{"","=q2=Arktischer Helm","=q2=Arktische Schulterpolster","=q2=Arktischer Brustschutz","=q2=Arktische Handgelenksschützer","=q2=Arktische Handschuhe","=q2=Arktischer Gürtel","=q2=Arktische Gamaschen","=q2=Arktische Stiefel"})
|
||||
process("LeatherworkingLeatherDevilsaurArmor",3,{"","=q3=Teufelssaurierstulpen","=q3=Teufelssauriergamaschen"})
|
||||
process("LeatherworkingLeatherEvisceratorBattlegear",9,{"","=q3=Gesichtsmaske des Ausweiders","=q3=Schulterpolster des Ausweiders","=q3=Brustschutz des Ausweiders","=q3=Bindungen des Ausweiders","=q3=Stulpen des Ausweiders","=q3=Taillenschutz des Ausweiders","=q3=Beinschützer des Ausweiders","=q3=Treter des Ausweiders"})
|
||||
process("LeatherworkingLeatherFelSkin",4,{"","=q3=Teufelslederhandschuhe","=q3=Teufelsledergamaschen","=q3=Teufelslederstiefel"})
|
||||
process("LeatherworkingLeatherIceborneEmbrace",9,{"","=q2=Winterlicher Helm","=q2=Winterliche Schulterpolster","=q2=Winterlicher Brustschutz","=q2=Winterlicher Handgelenksschutz","=q2=Winterliche Handschuhe","=q2=Winterlicher Gürtel","=q2=Winterliche Beinlinge","=q2=Winterliche Stiefel"})
|
||||
process("LeatherworkingLeatherIronfeatherArmor",3,{"","=q3=Eisenfederschultern","=q3=Eisenfederbrustplatte"})
|
||||
process("LeatherworkingLeatherOvercasterBattlegear",9,{"","=q3=Unwetterkopfschutz","=q3=Unwetterschiftung","=q3=Unwetterbrustschutz","=q3=Unwetterarmschienen","=q3=Unwetterhandlappen","=q3=Unwettergürtel","=q3=Unwettergamaschen","=q3=Unwetterstiefel"})
|
||||
process("LeatherworkingLeatherPrimalBatskin",4,{"","=q3=Urzeitliches Fledermaushautwams","=q3=Urzeitliche Fledermaushautarmschienen","=q3=Urzeitliche Fledermaushauthandschuhe"})
|
||||
process("LeatherworkingLeatherPrimalIntent",4,{"","=q4=Erstschlagweste","=q4=Erstschlagarmschienen","=q4=Erstschlaggürtel"})
|
||||
process("LeatherworkingLeatherSClefthoof",4,{"","=q3=Schwere Grollhufweste","=q3=Schwere Grollhufgamaschen","=q3=Schwere Grollhufstiefel"})
|
||||
process("LeatherworkingLeatherStormshroudArmor",5,{"","=q3=Sturmschleierschultern","=q3=Sturmschleierrüstung","=q3=Sturmschleierhandschuhe","=q3=Sturmschleierhose"})
|
||||
process("LeatherworkingLeatherThickDraenicA",5,{"","=q2=Dicke draenische Weste","=q2=Dicke draenische Handschuhe","=q2=Dicke draenische Hose","=q2=Dicke draenische Stiefel"})
|
||||
process("LeatherworkingLeatherVolcanicArmor",4,{"","=q2=Vulkanische Schultern","=q2=Vulkanische Brustplatte","=q2=Vulkanische Gamaschen"})
|
||||
process("LeatherworkingLeatherWildDraenishA",5,{"","=q2=Wilde draenische Weste","=q2=Wilde draenische Handschuhe","=q2=Wilde draenische Gamaschen","=q2=Wilde draenische Stiefel"})
|
||||
process("LeatherworkingLeatherWindhawkArmor",4,{"","=q4=Windfalkenhalsberge","=q4=Windfalkenarmschienen","=q4=Windfalkengürtel"})
|
||||
process("LeatherworkingMailBlackDragonM",5,{"","=q3=Schwarze Drachenschuppenschultern","=q3=Schwarze Drachenschuppenbrustplatte","=q3=Schwarze Drachenschuppengamaschen","=q4=Schwarze Drachenschuppenstiefel"})
|
||||
process("LeatherworkingMailBlueDragonM",4,{"","=q3=Blaue Drachenschuppenschultern","=q3=Blaue Drachenschuppenbrustplatte","=q3=Blaue Drachenschuppengamaschen"})
|
||||
process("LeatherworkingMailFelscaleArmor",5,{"","=q2=Teufelsschuppenbrustplatte","=q2=Teufelsschuppenhandschuhe","=q2=Teufelsschuppenhose","=q2=Teufelsschuppenstiefel"})
|
||||
process("LeatherworkingMailFelstalkerArmor",4,{"","=q3=Brustplatte des Teufelspirschers","=q3=Armschienen des Teufelspirschers","=q3=Gürtel des Teufelspirschers"})
|
||||
process("LeatherworkingMailFrostscaleBinding",9,{"","=q2=Frostschuppenhelm","=q2=Frostschuppenschultern","=q2=Frostschuppenbrustschutz","=q2=Frostschuppenarmschienen","=q2=Frostschuppenhandschuhe","=q2=Frostschuppengürtel","=q2=Frostschuppenbeinlinge","=q2=Frostschuppenstiefel"})
|
||||
process("LeatherworkingMailGreenDragonM",4,{"","=q3=Grüne Drachenschuppenbrustplatte","=q3=Grüne Drachenschuppenstulpen","=q3=Grüne Drachenschuppengamaschen"})
|
||||
process("LeatherworkingMailNerubianHive",9,{"","=q2=Nerubischer Helm","=q2=Nerubische Schultern","=q2=Nerubischer Brustschutz","=q2=Nerubische Armschienen","=q2=Nerubische Handschuhe","=q2=Nerubischer Gürtel","=q2=Nerubische Beinschützer","=q2=Nerubische Stiefel"})
|
||||
process("LeatherworkingMailNetherFury",4,{"","=q3=Netherzorngürtel","=q3=Netherzorngamaschen","=q3=Netherzornstiefel"})
|
||||
process("LeatherworkingMailNetherscaleArmor",4,{"","=q4=Ebenholzfarbene Netherschuppenbrustplatte","=q4=Ebenholzfarbene Netherschuppenarmschienen","=q4=Ebenholzfarbener Netherschuppengürtel"})
|
||||
process("LeatherworkingMailNetherstrikeArmor",4,{"","=q4=Netherstoßbrustplatte","=q4=Netherstoßarmschienen","=q4=Netherstoßgürtel"})
|
||||
process("LeatherworkingMailScaledDraenicA",5,{"","=q2=Geschuppte draenische Weste","=q2=Geschuppte draenische Handschuhe","=q2=Geschuppte draenische Hose","=q2=Geschuppte draenische Stiefel"})
|
||||
process("LeatherworkingMailStormhideBattlegear",9,{"","=q3=Sturmbalgkrone","=q3=Sturmbalgschultern","=q3=Sturmbalghalsberge","=q3=Sturmbalghandgelenksschutz","=q3=Sturmbalghandschutz","=q3=Sturmbalggürtel","=q3=Sturmbalgbeinschützer","=q3=Sturmbalgstampfer"})
|
||||
process("LeatherworkingMailSwiftarrowBattlefear",9,{"","=q3=Flinkpfeilhelm","=q3=Flinkpfeilschulterschutz","=q3=Flinkpfeilhalsberge","=q3=Flinkpfeilarmschienen","=q3=Flinkpfeilstulpen","=q3=Flinkpfeilgürtel","=q3=Flinkpfeilgamaschen","=q3=Flinkpfeilstiefel"})
|
||||
process("TailoringArcanoVest",4,{"","=q3=Arkanostoffrobe","=q3=Arkanostoffarmschienen","=q3=Arkanostoffstiefel"})
|
||||
process("TailoringBattlecastG",3,{"","=q4=Kapuze des Schlachtenzaubers","=q4=Hose des Schlachtenzaubers"})
|
||||
process("TailoringBloodvineG",4,{"","=q3=Blutrebenweste","=q3=Blutrebengamaschen","=q3=Blutrebenstiefel"})
|
||||
process("TailoringDuskweaver",9,{"","=q2=Dämmergewirkte Gugel","=q2=Dämmergewirkte Schultern","=q2=Dämmergewirkte Robe","=q2=Dämmergewirkte Gelenkbänder","=q2=Dämmergewirkte Handschuhe","=q2=Dämmergewirkter Gürtel","=q2=Dämmergewirkte Gamaschen","=q2=Dämmergewirkte Stiefel"})
|
||||
process("TailoringFrostsavageBattlegear",9,{"","=q3=Frostgrimmgugel","=q3=Frostgrimmschultern","=q3=Frostgrimmrobe","=q3=Frostgrimmarmschienen","=q3=Frostgrimmhandschuhe","=q3=Frostgrimmgürtel","=q3=Frostgrimmgamaschen","=q3=Frostgrimmstiefel"})
|
||||
process("TailoringFrostwovenPower",9,{"","=q2=Frostgewirkte Gugel","=q2=Frostgewirkte Schultern","=q2=Frostgewirkte Robe","=q2=Frostgewirkte Gelenkbänder","=q2=Frostgewirkte Handschuhe","=q2=Frostgewirkter Gürtel","=q2=Frostgewirkte Gamaschen","=q2=Frostgewirkte Stiefel"})
|
||||
process("TailoringImbuedNeather",5,{"","=q3=Magieerfüllte Netherstofftunika","=q3=Magieerfüllte Netherstoffrobe","=q3=Magieerfüllte Netherstoffhose","=q3=Magieerfüllte Netherstoffstiefel"})
|
||||
process("TailoringNeatherVest",8,{"","=q2=Netherstofftunika","=q2=Netherstoffrobe","=q2=Netherstoffarmschienen","=q2=Netherstoffhandschuhe","=q2=Netherstoffgürtel","=q2=Netherstoffhose","=q2=Netherstoffstiefel"})
|
||||
process("TailoringPrimalMoon",4,{"","=q4=Urmondstoffschultern","=q4=Urmondstoffrobe","=q4=Urmondstoffgürtel"})
|
||||
process("TailoringShadowEmbrace",4,{"","=q4=Eisschattenzwirnschultern","=q4=Eisschattenzwirnrobe","=q4=Eisschattenzwirnstiefel"})
|
||||
process("TailoringSoulclothEm",4,{"","=q4=Seelenstoffschultern","=q4=Seelenstoffweste","=q4=Seelenstoffhandschuhe"})
|
||||
process("TailoringSpellfireWrath",4,{"","=q4=Zauberfeuerrobe","=q4=Zauberfeuerhandschuhe","=q4=Zauberfeuergürtel"})
|
||||
process("TailoringSpellstrikeInfu",3,{"","=q4=Kapuze des Zauberschlags","=q4=Hose des Zauberschlags"})
|
||||
process("TailoringTheUnyielding",3,{"","=q3=Armschienen des Unerschütterlichen","=q4=Gurt des Unerschütterlichen"})
|
||||
process("TailoringWhitemendWis",3,{"","=q4=Kapuze des weißen Heilers","=q4=Hose des weißen Heilers"})
|
||||
elseif locale == "esES" then
|
||||
process("BlacksmithingMailBloodsoulEmbrace",4,{"","=q3=Sobrehombros alma de sangre","=q3=Coraza alma de sangre","=q3=Guanteletes alma de sangre"})
|
||||
process("BlacksmithingMailFelIronChain",5,{"","=q2=Almófar de anillas de hierro vil","=q2=Túnica de anillas de hierro vil","=q2=Brazales de anillas de hierro vil","=q2=Guantes de anillas de hierro vil"})
|
||||
process("BlacksmithingPlateAdamantiteB",4,{"","=q3=Coraza de adamantita","=q3=Brazales de placas de adamantita","=q3=Guantes de placas de adamantita"})
|
||||
process("BlacksmithingPlateBurningRage",5,{"","=q3=Yelmo de acerira","=q3=Sobrehombros de acerira","=q3=Coraza de acerira","=q3=Guantes de acerira"})
|
||||
process("BlacksmithingPlateEnchantedAdaman",5,{"","=q3=Coraza de adamantita encantada","=q3=Cinturón de adamantita encantado","=q3=Leotardos de adamantita encantados","=q3=Botas de adamantita encantada"})
|
||||
process("BlacksmithingPlateFaithFelsteel",4,{"","=q3=Yelmo de acero vil","=q3=Guantes de acero vil","=q3=Leotardos de acero vil"})
|
||||
process("BlacksmithingPlateFelIronPlate",6,{"","=q2=Coraza de hierro vil","=q2=Guantes de placas de hierro vil","=q2=Cinturón de placas de hierro vil","=q2=Pantalones de placas de hierro vil","=q2=Botas de placas de hierro vil"})
|
||||
process("BlacksmithingPlateFlameG",5,{"","=q3=Yelmo aterrallamas","=q3=Coraza aterrallamas","=q3=Brazales aterrallamas","=q3=Guantes aterrallamas"})
|
||||
process("BlacksmithingPlateImperialPlate",8,{"","=q2=Yelmo de placas imperiales","=q2=Sobrehombros de placas imperiales","=q2=Peto de placas imperiales","=q2=Brazales de placas imperiales","=q2=Cinturón de placas imperiales","=q2=Leotardos de placas imperiales","=q2=Botas de placas imperiales"})
|
||||
process("BlacksmithingPlateKhoriumWard",4,{"","=q3=Cinturón de korio","=q3=Pantalones de korio","=q3=Botas de korio"})
|
||||
process("BlacksmithingPlateOrnateSaroniteBattlegear",9,{"","=q3=Escudo de calavera de saronita ornamentada","=q3=Espaldares de saronita ornamentada","=q3=Camisote de saronita ornamentada","=q3=Brazales de saronita ornamentada","=q3=Guanteletes de saronita ornamentada","=q3=Guardarrenes de saronita ornamentada","=q3=Quijotes de saronita ornamentada","=q3=Botos de saronita ornamentada"})
|
||||
process("BlacksmithingPlateSavageSaroniteBattlegear",9,{"","=q3=Escudo de calavera de saronita salvaje","=q3=Espaldares de saronita salvaje","=q3=Camisote de saronita salvaje","=q3=Brazales de saronita salvaje","=q3=Guanteletes de saronita salvaje","=q3=Guardarrenes de saronita salvaje","=q3=Quijotes de saronita salvaje","=q3=Botos de saronita salvaje"})
|
||||
process("BlacksmithingPlateTheDarksoul",4,{"","=q3=Sobrehombros almanegra","=q3=Coraza almanegra","=q3=Leotardos almanegra"})
|
||||
process("CookingDaily1",6,{"=q3=Receta: pastel de chocolate delicioso","=q3=Receta: costillas de truenos","=q2=Receta: sangraleta a la parrilla","=q2=Receta: tapitas de Kibler","=q2=Receta: sopa de pez calavera","=q2=Receta: talbuk con guindillas"})
|
||||
process("CookingDaily2",27,{"=q2=Receta: aletadragón ennegrecido","=q2=Receta: filete de huargo ennegrecido","=q2=Receta: aperitivos para alimañas","=q2=Receta: filete de calamar","=q2=Receta: filete de aletadragón","=q2=Receta: salmón petardo","=q2=Receta: rinoceronte suculento","=q2=Receta: filete de manta imperial","=q2=Receta: comida de megamamut","=q2=Receta: perritos de rinoceronte poderosos","=q2=Receta: pez escorpión del norte pochado","=q2=Receta: filete de vermis rinolicioso","=q2=Receta: pargo extremo","=q2=Receta: delicias de mamut especiado","=q2=Receta: hamburguesa de vermis especiada","=q2=Receta: medusa azul picante","=q2=Receta: arenque frito picante","=q2=Receta: filete de colmipala tierno","=q2=Receta: aperitivo de rastreador","=q2=Receta: huargo muy quemado","=q3=Gorro de cocinero","=q1=Especias del norte","","=q3=Receta: pastel de chocolate delicioso","=q3=Receta: costillas de truenos","=q1=Especias de bebé","=q1=Especias viejas"})
|
||||
process("CraftedWeapons1",24,{"=q4=Filo de las Sombras","","=q4=Hoja de hechizo de acero de titanes","=q4=Faca de acero de titanes","=q4=Aplastahuesos de acero de titanes","=q4=Guardián de acero de titanes","=q4=Destructor de acero de titanes","=q4=Escudo muro de acero de titanes","","=q4=Escopeta de combate con placas de armadura","=q4=4000 de Nesingwary","","=q4=Hoja rúnica de eternio","=q4=Réquiem","=q4=Hoja larga de acero vil","=q4=Campeón de korio","=q4=Hacha de batalla vil afilada","=q4=Segadora de acero vil","=q4=Mano de la eternidad","=q4=Martillo rúnico","=q4=Gran maza vil endurecida","=q4=Martillo de poderío recto","","=q4=Destructor de korio giroequilibrado"})
|
||||
process("CraftedWeapons2",13,{"","=q4=Amnistía negra","=q4=Hoja sabia","=q4=Guardanegra","=q4=Ocaso","=q4=Mano de ébano","=q4=Persuasor","=q4=Martillo de Sulfuron","=q4=Furianegra","=q4=Escudo de obsidiana dentado","","=q4=Rifle de tirador del Núcleo","=q4=Disco reactivo a la fuerza"})
|
||||
process("CraftedWeapons3",21,{"","=q4=Guardia de fuego","=q4=Guardia abrasadora","=q4=Furia abrasadora","=q4=Hoja de corazón de león","=q4=Campeón corazón de león","=q4=Verdugo corazón de león","","=q4=El filo bidimensional","=q4=Filo bidimensional negro","=q4=Filo despiadado de los planos","=q4=Luna creciente","=q4=Cortaluna","=q4=Luna de sangre","","=q4=Martillo de puñodraco","=q4=Faucedraco","=q4=Golpe de dragón","=q4=Trueno","=q4=Trueno profundo","=q4=Heraldo de la tormenta"})
|
||||
process("FishingDaily1",17,{"=q4=El anillo 2","=q3=Sombrero para pescar deteriorado","=q3=Cubo de Chuck","=q3=Cubo de Malaliento","=q3=Cubo de Gruñi","=q3=Cubo de Dientecitos","=q3=Ojo del mar","=q2=Receta: cerveza del capitán Rumsey","=q2=Sedal de hilo de veraplata","=q1=Monóculo de noble","=q1=Gemelos de plata solariegos","=q1=Alianza de oro","=q1=Jarra ornamentada","=q1=Cuchillo para filetear afilado","=q1=Diario deteriorado","=q1=Elixir de Caminar sobre el agua","=q1=Anzuelo afilado"})
|
||||
process("FishingDaily2",23,{"=q4=Joya de tormenta llamativa","=q4=Joya de tormenta luminosa","=q4=Joya de tormenta delicada","=q4=Joya de tormenta rígida","=q4=Joya de tormenta rúnica","=q4=Joya de tormenta sólida","=q4=Joya de tormenta chispeante","=q3=Sombrero para pescar deteriorado","=q3=Caña de pescar de hueso","=q3=Caña de pescar enjoyada","=q3=Reptador de playa","=q3=Lágrima de sirena","=q3=Arcón de titanio diminuto","=q2=Receta: cerveza del capitán Rumsey","=q2=Gran línea de pesca de prueba de eternio","=q1=Sombrero de aventurero maltrecho","=q1=Bastón con punta de diamante","=q1=Gusano de luz","=q1=Brújula poco corriente","=q1=Aceite de pigmeo","=q1=Elixir de Caminar sobre el agua","=q1=Vial de veneno sellado","=q1=Receta con marcas de agua"})
|
||||
process("JewelDragonsEye1",19,{"","","","","","","","","","","","","","","","","","","=q3=Ojo de dragón"})
|
||||
process("JewelcraftingDaily1",19,{"=q3=Boceto: rubí cárdeno llamativo","=q3=Boceto: rubí cárdeno brillante","=q3=Boceto: rubí cárdeno delicado","=q3=Boceto: rubí cárdeno ostentoso","=q3=Boceto: rubí cárdeno fracturado","=q3=Boceto: rubí cárdeno preciso","=q3=Boceto: rubí cárdeno rúnico","=q3=Boceto: rubí cárdeno sutil","=q3=Boceto: rubí escarlata llamativo","=q3=Boceto: rubí escarlata delicado","=q3=Boceto: rubí escarlata ostentoso","=q3=Boceto: ámbar del rey luminoso","=q3=Boceto: ámbar del rey místico","=q3=Boceto: ámbar del rey rápido","=q3=Boceto: ámbar del rey rígido","=q3=Boceto: ámbar del rey liso","=q3=Boceto: ámbar del rey grueso","=q3=Boceto: Brillo del otoño rápido","=q3=Boceto: Brillo del otoño rígido"})
|
||||
process("JewelcraftingDaily2",28,{"=q3=Boceto: ametrino de precisión","=q3=Boceto: ametrino de Campeón","=q3=Boceto: ametrino mortal","=q3=Boceto: ametrino diestro","=q3=Boceto: ametrino durable","=q3=Boceto: ametrino potenciado","=q3=Boceto: ametrino grabado","=q3=Boceto: ametrino fiero","=q3=Boceto: ametrino de luz trémula","=q3=Boceto: ametrino destellante","=q3=Boceto: ametrino con inscripciones","=q3=Boceto: ametrino iluminado","=q3=Boceto: ametrino luminoso","=q3=Boceto: ametrino pujante","=q3=Boceto: ametrino prístino","=q3=Boceto: ametrino temerario","=q3=Boceto: ametrino resuelto","=q3=Boceto: ametrino resplandeciente","=q3=Boceto: ametrino de adepto","=q3=Boceto: ametrino completo","=q3=Boceto: ametrino velado","=q3=Boceto: ametrino maligno","=q3=Boceto: topacio monarca destellante","=q3=Boceto: topacio monarca luminoso","=q3=Boceto: topacio monarca pujante","=q3=Boceto: topacio monarca temerario","=q3=Boceto: topacio monarca completo","=q3=Boceto: topacio monarca velado"})
|
||||
process("JewelcraftingDaily3",26,{"=q3=Boceto: ojo de Zul deslumbrante","=q3=Boceto: ojo de Zul duradero","=q3=Boceto: ojo de Zul energizado","=q3=Boceto: ojo de Zul fuerte","=q3=Boceto: ojo de Zul intrincado","=q3=Boceto: ojo de Zul irregular","=q3=Boceto: ojo de Zul luminiscente","=q3=Boceto: ojo de Zul brumoso","=q3=Boceto: ojo de Zul opaco","=q3=Boceto: ojo de Zul radiante","=q3=Boceto: ojo de Zul de vidente","=q3=Boceto: ojo de Zul destrozado","=q3=Boceto: ojo de Zul brillante","=q3=Boceto: ojo de Zul resistente","=q3=Boceto: ojo de Zul hendido","=q3=Boceto: ojo de Zul tenso","=q3=Boceto: ojo de Zul intemporal","=q3=Boceto: ojo de Zul turbio","=q3=Boceto: ojo de Zul vívido","=q3=Boceto: esmeralda del bosque duradera","=q3=Boceto: esmeralda del bosque energizada","=q3=Boceto: esmeralda del bosque fuerte","=q3=Boceto: esmeralda del bosque intrincada","=q3=Boceto: esmeralda del bosque luminiscente","=q3=Boceto: esmeralda del bosque de vidente","=q3=Boceto: esmeralda del bosque vívida"})
|
||||
process("JewelcraftingDaily4",16,{"=q3=Boceto: piedra de terror equilibrada","=q3=Boceto: piedra de terror de defensor","=q3=Boceto: piedra de terror resplandeciente","=q3=Boceto: piedra de terror de guardián","=q3=Boceto: piedra de terror imbuida","=q3=Boceto: piedra de terror misteriosa","=q3=Boceto: piedra de terror enjundiosa","=q3=Boceto: piedra de terror purificada","=q3=Boceto: piedra de terror regia","=q3=Boceto: piedra de terror real","=q3=Boceto: piedra de terror cambiante","=q3=Boceto: piedra de terror soberana","=q3=Boceto: piedra de terror de tenuidad","=q3=Boceto: ópalo Crepuscular enjundioso","=q3=Boceto: ópalo Crepuscular majestuoso","=q3=Boceto: ópalo Crepuscular real"})
|
||||
process("JewelcraftingDaily5",14,{"=q3=Boceto: circón majestuoso luciente","=q3=Boceto: circón majestuoso sólido","=q3=Boceto: circón majestuoso chispeante","=q3=Boceto: circón majestuoso tormentoso","=q3=Boceto: zafiro celestial luciente","=q3=Boceto: zafiro celestial sólido","=q3=Boceto: diamante de llama celeste caótico","=q3=Boceto: diamante de llama celeste refulgente","=q3=Boceto: diamante de llama celeste de ascuas","=q3=Boceto: diamante de asedio de tierra perspicaz","=q3=Boceto: diamante de asedio de tierra vigorizador","=q3=Boceto: diamante de asedio de tierra incansable","=q3=Boceto: diamante de llama celeste revitalizante","=q3=Boceto: diamante de asedio de tierra mordaz"})
|
||||
process("JewelcraftingDaily6",24,{"=q3=Boceto: Ojo de dragón llamativo","=q3=Boceto: Ojo de dragón brillante","=q3=Boceto: Ojo de dragón luminoso","=q3=Boceto: Ojo de dragón delicado","=q3=Boceto: Ojo de dragón ostentoso","=q3=Boceto: Ojo de dragón fracturado","=q3=Boceto: Ojo de dragón lustroso","=q3=Boceto: Ojo de dragón místico","=q3=Boceto: Ojo de dragón preciso","=q3=Boceto: Ojo de dragón rápido","=q3=Boceto: Ojo de dragón rígido","=q3=Boceto: Ojo de dragón rúnico","=q3=Boceto: Ojo de dragón liso","=q3=Boceto: Ojo de dragón sólido","=q3=Boceto: Ojo de dragón chispeante","=q3=Boceto: Ojo de dragón tormentoso","=q3=Boceto: Ojo de dragón sutil","=q3=Boceto: Ojo de dragón grueso","=q4=Boceto: cadena de guardia de tierra de titanio","=q4=Boceto: anillo de guardia de tierra de titanio","=q4=Boceto: sortija impactante de titanio","=q4=Boceto: gargantilla impactante de titanio","=q4=Boceto: collar de choque de hechizo de titanio","=q4=Boceto: anillo de choque de hechizo de titanio"})
|
||||
process("LeatherworkingLeatherBloodTigerH",3,{"","=q3=Sobrehombros de tigre de sangre","=q3=Coraza de tigre de sangre"})
|
||||
process("LeatherworkingLeatherBoreanEmbrace",9,{"","=q2=Yelmo ártico","=q2=Hombreras árticas","=q2=Pechera ártica","=q2=Guardamuñecas árticos","=q2=Guantes árticos","=q2=Cinturón ártico","=q2=Leotardos árticos","=q2=Botas árticas"})
|
||||
process("LeatherworkingLeatherDevilsaurArmor",3,{"","=q3=Guanteletes de demosaurio","=q3=Leotardos de demosaurio"})
|
||||
process("LeatherworkingLeatherEvisceratorBattlegear",9,{"","=q3=Máscara facial de eviscerador","=q3=Hombreras de eviscerador","=q3=Coselete de eviscerador","=q3=Ataduras de eviscerador","=q3=Guanteletes de eviscerador","=q3=Guardarrenes de eviscerador","=q3=Musleras de eviscerador","=q3=Botines de eviscerador"})
|
||||
process("LeatherworkingLeatherFelSkin",4,{"","=q3=Guantes de cuero vil","=q3=Leotardos de cuero vil","=q3=Botas de cuero vil"})
|
||||
process("LeatherworkingLeatherIceborneEmbrace",9,{"","=q2=Yelmo de contrahielo","=q2=Hombreras de contrahielo","=q2=Coselete de contrahielo","=q2=Guardamuñecas de contrahielo","=q2=Guantes de contrahielo","=q2=Cinturón de contrahielo","=q2=Leotardos de contrahielo","=q2=Botas de contrahielo"})
|
||||
process("LeatherworkingLeatherIronfeatherArmor",3,{"","=q3=Sobrehombros plumahierro","=q3=Coraza plumahierro"})
|
||||
process("LeatherworkingLeatherOvercasterBattlegear",9,{"","=q3=Protegecabezas encapotado","=q3=Bufas encapotadas","=q3=Coselete encapotado","=q3=Brazales encapotados","=q3=Manijas encapotadas","=q3=Cinturón encapotado","=q3=Leotardos encapotados","=q3=Botas encapotadas"})
|
||||
process("LeatherworkingLeatherPrimalBatskin",4,{"","=q3=Chaleco de piel de murciélago primigenio","=q3=Brazales de piel de murciélago primigenio","=q3=Guantes de piel de murciélago primigenio"})
|
||||
process("LeatherworkingLeatherPrimalIntent",4,{"","=q4=Jubón de golpe primigenio","=q4=Brazales de golpe primigenio","=q4=Cinturón de golpe primigenio"})
|
||||
process("LeatherworkingLeatherSClefthoof",4,{"","=q3=Jubón uñagrieta pesado","=q3=Leotardos uñagrieta pesados","=q3=Botas uñagrieta pesadas"})
|
||||
process("LeatherworkingLeatherStormshroudArmor",5,{"","=q3=Sobrehombrosde embozo de tormenta","=q3=Armadura de embozo de tormenta","=q3=Guantes de embozo de tormenta","=q3=Pantalones de embozo de tormenta"})
|
||||
process("LeatherworkingLeatherThickDraenicA",5,{"","=q2=Jubón draénico grueso","=q2=Guantes draénicos gruesos","=q2=Pantalones draénicos gruesos","=q2=Botas draénicas gruesas"})
|
||||
process("LeatherworkingLeatherVolcanicArmor",4,{"","=q2=Sobrehombros volcánicos","=q2=Coraza volcánica","=q2=Leotardos volcánicos"})
|
||||
process("LeatherworkingLeatherWildDraenishA",5,{"","=q2=Jubón draeniano salvaje","=q2=Guantes draenianos salvajes","=q2=Leotardos draenianos salvajes","=q2=Botas draenianas salvajes"})
|
||||
process("LeatherworkingLeatherWindhawkArmor",4,{"","=q4=Camisote de halcón del viento","=q4=Brazales de halcón del viento","=q4=Cinturón de halcón del viento"})
|
||||
process("LeatherworkingMailBlackDragonM",5,{"","=q3=Sobrehombros de escamas de dragón negro","=q3=Coraza de escamas de dragón negro","=q3=Leotardos de escamas de dragón negro","=q4=Botas de escamas de dragón negro"})
|
||||
process("LeatherworkingMailBlueDragonM",4,{"","=q3=Sobrehombros de escamas de dragón azul","=q3=Coraza de escamas de dragón azul","=q3=Leotardos de escamas de dragón azul"})
|
||||
process("LeatherworkingMailFelscaleArmor",5,{"","=q2=Coraza de escamas viles","=q2=Guantes de escamas viles","=q2=Pantalones de escamas viles","=q2=Botas de escamas viles"})
|
||||
process("LeatherworkingMailFelstalkerArmor",4,{"","=q3=Coraza de acechador vil","=q3=Brazales de acechador vil","=q3=Cinturón de acechador vil"})
|
||||
process("LeatherworkingMailFrostscaleBinding",9,{"","=q2=Casco de escamas de escarcha","=q2=Sobrehombros de escamas de escarcha","=q2=Coselete de escamas de escarcha","=q2=Brazales de escamas de escarcha","=q2=Guantes de escamas de escarcha","=q2=Cinturón de escamas de escarcha","=q2=Leotardos de escamas de escarcha","=q2=Botas de escamas de escarcha"})
|
||||
process("LeatherworkingMailGreenDragonM",4,{"","=q3=Coraza de escamas de dragón verde","=q3=Guanteletes de escamas de dragón verde","=q3=Leotardos de escamas de dragón verde"})
|
||||
process("LeatherworkingMailNerubianHive",9,{"","=q2=Yelmo nerubiano","=q2=Sobrehombros nerubianos","=q2=Coselete nerubiano","=q2=Brazales nerubianos","=q2=Guantes nerubianos","=q2=Cinturón nerubiano","=q2=Musleras nerubianas","=q2=Botas nerubianas"})
|
||||
process("LeatherworkingMailNetherFury",4,{"","=q3=Cinturón de furia abisal","=q3=Leotardos de furia abisal","=q3=Botas de furia abisal"})
|
||||
process("LeatherworkingMailNetherscaleArmor",4,{"","=q4=Coraza de escamas abisales de ébano","=q4=Brazales de escamas abisales de ébano","=q4=Cinturón de escamas abisales de ébano"})
|
||||
process("LeatherworkingMailNetherstrikeArmor",4,{"","=q4=Coraza de golpe abisal","=q4=Brazales de golpe abisal","=q4=Cinturón de golpe abisal"})
|
||||
process("LeatherworkingMailScaledDraenicA",5,{"","=q2=Jubón draénico escamado","=q2=Guantes draénicos escamados","=q2=Pantalones draénicos escamados","=q2=Botas draénicas escamadas"})
|
||||
process("LeatherworkingMailStormhideBattlegear",9,{"","=q3=Corona de Tormentero","=q3=Sobrehombros de Tormentero","=q3=Camisote de Tormentero","=q3=Guardamuñecas de Tormentero","=q3=Puños de Tormentero","=q3=Cinturón de Tormentero","=q3=Musleras de Tormentero","=q3=Apisonadoras de Tormentero"})
|
||||
process("LeatherworkingMailSwiftarrowBattlefear",9,{"","=q3=Yelmo Flechapresta","=q3=Guardahombros Flechapresta","=q3=Camisote Flechapresta","=q3=Brazales Flechapresta","=q3=Guanteletes Flechapresta","=q3=Cinturón Flechapresta","=q3=Leotardos Flechapresta","=q3=Botas Flechapresta"})
|
||||
process("TailoringArcanoVest",4,{"","=q3=Toga de tejido Arcano","=q3=Brazales de tejido Arcano","=q3=Botas de tejido Arcano"})
|
||||
process("TailoringBattlecastG",3,{"","=q4=Caperuza de conjuro de batalla","=q4=Pantalones de conjuro de batalla"})
|
||||
process("TailoringBloodvineG",4,{"","=q3=Jubón vid de sangre","=q3=Leotardos vid de sangre","=q3=Botas vid de sangre"})
|
||||
process("TailoringDuskweaver",9,{"","=q2=Capucha de tejido del alba","=q2=Sobrehombros de tejido del alba","=q2=Toga de tejido del alba","=q2=Cubremuñecas de tejido del alba","=q2=Guantes de tejido del alba","=q2=Cinturón de tejido del alba","=q2=Leotardos de tejido del alba","=q2=Botas de tejido del alba"})
|
||||
process("TailoringFrostsavageBattlegear",9,{"","=q3=Cogulla de escarcha salvaje","=q3=Sobrehombros de escarcha salvaje","=q3=Toga de escarcha salvaje","=q3=Brazales de escarcha salvaje","=q3=Guantes de escarcha salvaje","=q3=Cinturón de escarcha salvaje","=q3=Leotardos de escarcha salvaje","=q3=Botas de escarcha salvaje"})
|
||||
process("TailoringFrostwovenPower",9,{"","=q2=Capucha tejida con Escarcha","=q2=Sobrehombros tejidos con Escarcha","=q2=Toga tejida con Escarcha","=q2=Cubremuñecas tejidos con Escarcha","=q2=Guantes tejidos con Escarcha","=q2=Cinturón tejido con Escarcha","=q2=Leotardos tejidos con Escarcha","=q2=Botas tejidas con Escarcha"})
|
||||
process("TailoringImbuedNeather",5,{"","=q3=Túnica de tejido abisal imbuido","=q3=Toga de tejido abisal imbuido","=q3=Pantalones de tejido abisal imbuido","=q3=Botas de tejido abisal imbuido"})
|
||||
process("TailoringNeatherVest",8,{"","=q2=Túnica de tejido abisal","=q2=Toga de tejido abisal","=q2=Brazales de tejido abisal","=q2=Guantes de tejido abisal","=q2=Cinturón de tejido abisal","=q2=Pantalones de tejido abisal","=q2=Botas de tejido abisal"})
|
||||
process("TailoringPrimalMoon",4,{"","=q4=Sobrehombros de tela lunar primigenia","=q4=Toga de tela lunar primigenia","=q4=Cinturón de tela lunar primigenia"})
|
||||
process("TailoringShadowEmbrace",4,{"","=q4=Sobrehombros de tejido de sombra congelado","=q4=Toga de tejido de sombra congelado","=q4=Botas de tejido de sombra congelado"})
|
||||
process("TailoringSoulclothEm",4,{"","=q4=Sobrehombros de paño de alma","=q4=Jubón de paño de alma","=q4=Guantes de paño de alma"})
|
||||
process("TailoringSpellfireWrath",4,{"","=q4=Toga de fuego de hechizo","=q4=Guantes de fuego de hechizo","=q4=Cinturón de fuego de hechizo"})
|
||||
process("TailoringSpellstrikeInfu",3,{"","=q4=Caperuza de golpe de hechizo","=q4=Pantalones de golpe de hechizo"})
|
||||
process("TailoringTheUnyielding",3,{"","=q3=Brazales implacables","=q4=Faja implacable"})
|
||||
process("TailoringWhitemendWis",3,{"","=q4=Caperuza con remiendos blancos","=q4=Pantalones con remiendos blancos"})
|
||||
elseif locale == "zhCN" then
|
||||
process("BlacksmithingMailBloodsoulEmbrace",4,{"","=q3=血魂护肩","=q3=血魂胸甲","=q3=血魂护手"})
|
||||
process("BlacksmithingMailFelIronChain",5,{"","=q2=魔铁链甲罩帽","=q2=魔铁链甲外套","=q2=魔铁链甲护腕","=q2=魔铁链甲手套"})
|
||||
process("BlacksmithingPlateAdamantiteB",4,{"","=q3=精金胸甲","=q3=精金板甲护腕","=q3=精金板甲手套"})
|
||||
process("BlacksmithingPlateBurningRage",5,{"","=q3=怒钢头盔","=q3=怒钢护肩","=q3=怒钢胸甲","=q3=怒钢手套"})
|
||||
process("BlacksmithingPlateEnchantedAdaman",5,{"","=q3=魔化精金胸甲","=q3=魔化精金腰带","=q3=魔化精金护腿","=q3=魔化精金长靴"})
|
||||
process("BlacksmithingPlateFaithFelsteel",4,{"","=q3=魔钢头盔","=q3=魔钢手套","=q3=魔钢护腿"})
|
||||
process("BlacksmithingPlateFelIronPlate",6,{"","=q2=魔铁胸甲","=q2=魔铁板甲手套","=q2=魔铁板甲腰带","=q2=魔铁板甲短裤","=q2=魔铁板甲战靴"})
|
||||
process("BlacksmithingPlateFlameG",5,{"","=q3=灭焰头盔","=q3=灭焰胸甲","=q3=灭焰护腕","=q3=灭焰手套"})
|
||||
process("BlacksmithingPlateImperialPlate",8,{"","=q2=君王板甲头盔","=q2=君王板甲护肩","=q2=君王板甲护胸","=q2=君王板甲护腕","=q2=君王板甲腰带","=q2=君王板甲护腿","=q2=君王板甲战靴"})
|
||||
process("BlacksmithingPlateKhoriumWard",4,{"","=q3=氪金腰带","=q3=氪金短裤","=q3=氪金战靴"})
|
||||
process("BlacksmithingPlateOrnateSaroniteBattlegear",9,{"","=q3=Ornate Saronite Skullshield","=q3=Ornate Saronite Pauldrons","=q3=Ornate Saronite Hauberk","=q3=Ornate Saronite Bracers","=q3=Ornate Saronite Gauntlets","=q3=Ornate Saronite Waistguard","=q3=Ornate Saronite Legplates","=q3=Ornate Saronite Walkers"})
|
||||
process("BlacksmithingPlateSavageSaroniteBattlegear",9,{"","=q3=Savage Saronite Skullshield","=q3=Savage Saronite Pauldrons","=q3=Savage Saronite Hauberk","=q3=Savage Saronite Bracers","=q3=Savage Saronite Gauntlets","=q3=Savage Saronite Waistguard","=q3=Savage Saronite Legplates","=q3=Savage Saronite Walkers"})
|
||||
process("BlacksmithingPlateTheDarksoul",4,{"","=q3=黑暗之魂护肩","=q3=黑暗之魂胸甲","=q3=黑暗之魂护腿"})
|
||||
process("CookingDaily1",6,{"=q3=Recipe: Delicious Chocolate Cake","=q3=Recipe: Stormchops","=q2=Recipe: Broiled Bloodfin","=q2=Recipe: Kibler's Bits","=q2=Recipe: Skullfish Soup","=q2=Recipe: Spicy Hot Talbuk"})
|
||||
process("CookingDaily2",27,{"=q2=食谱:熏烤龙鳞鱼","=q2=食谱:熏烤座狼肉排","=q2=食谱:小动物的零食","=q2=食谱:墨鱼片","=q2=食谱:龙鳞鱼片","=q2=食谱:爆炒鲑鱼","=q2=食谱:犀牛大餐","=q2=食谱:帝王鳐鱼片","=q2=食谱:猛犸肉大餐","=q2=食谱:巨型犀牛热狗","=q2=食谱:水煮北地蚌背鱼","=q2=食谱:龙犀肉排","=q2=食谱:钳鱼大餐","=q2=食谱:香辣猛犸小吃","=q2=食谱:香辣龙肉汉堡","=q2=食谱:香辣蓝色水母","=q2=食谱:香辣油炸青鱼","=q2=食谱:香嫩铲齿鹿排","=q2=食谱:追踪快餐","=q2=食谱:焦烤座狼","=q3=Chef's Hat","=q1=北地香料","","=q3=Recipe: Delicious Chocolate Cake","=q3=Recipe: Stormchops","=q1=Baby Spice","=q1=Old Spices"})
|
||||
process("CraftedWeapons1",24,{"=q4=Shadow's Edge","","=q4=Titansteel Spellblade","=q4=Titansteel Shanker","=q4=Titansteel Bonecrusher","=q4=Titansteel Guardian","=q4=Titansteel Destroyer","=q4=Titansteel Shield Wall","","=q4=Armor Plated Combat Shotgun","=q4=Nesingwary 4000","","=q4=恒金符文之刃","=q4=挽歌","=q4=魔钢长剑","=q4=氪金圣剑","=q4=魔能利斧","=q4=魔钢收割者","=q4=永恒之手","=q4=符印战锤","=q4=魔能强化战槌","=q4=正义力量之锤","","=q4=陀螺平衡氪金重枪"})
|
||||
process("CraftedWeapons2",13,{"","=q4=黑色赦免者","=q4=先知之刃","=q4=黑色卫士","=q4=夜幕","=q4=黑手","=q4=说服者","=q4=萨弗隆战锤","=q4=黑色怒火","=q4=碎裂黑曜石盾牌","","=q4=火核狙击步枪","=q4=力反馈盾牌"})
|
||||
process("CraftedWeapons3",21,{"","=q4=火焰卫士","=q4=光芒卫士","=q4=光芒之怒","=q4=狮心之刃","=q4=狮心圣剑","=q4=狮心斩杀者","","=q4=位面战斧","=q4=黑色位面战斧","=q4=邪恶位面战斧","=q4=新月","=q4=月牙屠斧","=q4=血月","","=q4=龙拳之锤","=q4=巨龙之喉","=q4=巨龙之击","=q4=雷霆","=q4=惊雷","=q4=风暴使者"})
|
||||
process("FishingDaily1",17,{"=q4=The 2 Ring","=q3=Weather-Beaten Fishing Hat","=q3=莫莫的小桶","=q3=毒皮的小桶","=q3=尼尼的小桶","=q3=牙牙的小桶","=q3=Eye of the Sea","=q2=Recipe: Captain Rumsey's Lager","=q2=Spun Truesilver Fishing Line","=q1=Noble's Monocle","=q1=Antique Silver Cufflinks","=q1=Gold Wedding Band","=q1=Ornate Drinking Stein","=q1=Razor Sharp Fillet Knife","=q1=Weather-Beaten Journal","=q1=Elixir of Water Walking","=q1=Sharpened Fish Hook"})
|
||||
process("FishingDaily2",23,{"=q4=Bold Stormjewel","=q4=Brilliant Stormjewel","=q4=Delicate Stormjewel","=q4=Rigid Stormjewel","=q4=Runed Stormjewel","=q4=Solid Stormjewel","=q4=Sparkling Stormjewel","=q3=Weather-Beaten Fishing Hat","=q3=Bone Fishing Pole","=q3=Jeweled Fishing Pole","=q3=Strand Crawler","=q3=海妖之泪","=q3=Tiny Titanium Lockbox","=q2=Recipe: Captain Rumsey's Lager","=q2=高强度恒金渔线","=q1=Battered Jungle Hat","=q1=Diamond-tipped Cane","=q1=Glow Worm","=q1=Unusual Compass","=q1=Pygmy Oil","=q1=Elixir of Water Walking","=q1=Sealed Vial of Poison","=q1=Waterlogged Recipe"})
|
||||
process("JewelDragonsEye1",19,{"","","","","","","","","","","","","","","","","","","=q3=Dragon's Eye"})
|
||||
process("JewelcraftingDaily1",19,{"=q3=Design: Bold Cardinal Ruby","=q3=Design: Bright Cardinal Ruby","=q3=Design: Delicate Cardinal Ruby","=q3=Design: Flashing Cardinal Ruby","=q3=Design: Fractured Cardinal Ruby","=q3=Design: Precise Cardinal Ruby","=q3=Design: Runed Cardinal Ruby","=q3=Design: Subtle Cardinal Ruby","=q3=图鉴:朴素血玉石","=q3=图鉴:精致血玉石","=q3=图鉴:闪光血玉石","=q3=Design: Brilliant King's Amber","=q3=Design: Mystic King's Amber","=q3=Design: Quick King's Amber","=q3=Design: Rigid King's Amber","=q3=Design: Smooth King's Amber","=q3=Design: Thick King's Amber","=q3=图鉴:迅捷秋色石","=q3=图鉴:刚硬秋色石"})
|
||||
process("JewelcraftingDaily2",28,{"=q3=Design: Accurate Ametrine","=q3=Design: Champion's Ametrine","=q3=Design: Deadly Ametrine","=q3=Design: Deft Ametrine","=q3=Design: Durable Ametrine","=q3=Design: Empowered Ametrine","=q3=Design: Etched Ametrine","=q3=Design: Fierce Ametrine","=q3=Design: Glimmering Ametrine","=q3=Design: Glinting Ametrine","=q3=Design: Inscribed Ametrine","=q3=Design: Lucent Ametrine","=q3=Design: Luminous Ametrine","=q3=Design: Potent Ametrine","=q3=Design: Pristine Ametrine","=q3=Design: Reckless Ametrine","=q3=Design: Resolute Ametrine","=q3=Design: Resplendent Ametrine","=q3=Design: Stalwart Ametrine","=q3=Design: Stark Ametrine","=q3=Design: Veiled Ametrine","=q3=Design: Wicked Ametrine","=q3=图鉴:反光帝黄晶","=q3=图鉴:辉光帝黄晶","=q3=图鉴:高能帝黄晶","=q3=图鉴:鲁莽帝黄晶","=q3=图鉴:荒凉帝黄晶","=q3=图鉴:隐秘帝黄晶"})
|
||||
process("JewelcraftingDaily3",26,{"=q3=Design: Dazzling Eye of Zul","=q3=Design: Enduring Eye of Zul","=q3=Design: Energized Eye of Zul","=q3=Design: Forceful Eye of Zul","=q3=Design: Intricate Eye of Zul","=q3=Design: Jagged Eye of Zul","=q3=Design: Lambent Eye of Zul","=q3=Design: Misty Eye of Zul","=q3=Design: Opaque Eye of Zul","=q3=Design: Radiant Eye of Zul","=q3=Design: Seer's Eye of Zul","=q3=Design: Shattered Eye of Zul","=q3=Design: Shining Eye of Zul","=q3=Design: Steady Eye of Zul","=q3=Design: Sundered Eye of Zul","=q3=Design: Tense Eye of Zul","=q3=Design: Timeless Eye of Zul","=q3=Design: Turbid Eye of Zul","=q3=Design: Vivid Eye of Zul","=q3=图鉴:坚硬森林翡翠","=q3=图鉴:活跃森林翡翠","=q3=图鉴:坚强森林翡翠","=q3=图鉴:复杂森林翡翠","=q3=图鉴:烁光森林翡翠","=q3=图鉴:先知的森林翡翠","=q3=图鉴:鲜艳森林翡翠"})
|
||||
process("JewelcraftingDaily4",16,{"=q3=Design: Balanced Dreadstone","=q3=Design: Defender's Dreadstone","=q3=Design: Glowing Dreadstone","=q3=Design: Guardian's Dreadstone","=q3=Design: Infused Dreadstone","=q3=Design: Mysterious Dreadstone","=q3=Design: Puissant Dreadstone","=q3=Design: Purified Dreadstone","=q3=Design: Regal Dreadstone","=q3=Design: Royal Dreadstone","=q3=Design: Shifting Dreadstone","=q3=Design: Sovereign Dreadstone","=q3=Design: Tenuous Dreadstone","=q3=图鉴:强攻曙光猫眼石","=q3=图鉴:华丽曙光猫眼石","=q3=图鉴:皇家曙光猫眼石"})
|
||||
process("JewelcraftingDaily5",14,{"=q3=Design: Lustrous Majestic Zircon","=q3=Design: Solid Majestic Zircon","=q3=Design: Sparkling Majestic Zircon","=q3=Design: Stormy Majestic Zircon","=q3=图鉴:异彩天蓝石","=q3=图鉴:致密天蓝石","=q3=图鉴:混乱之天焰钻石","=q3=图鉴:光辉之天焰钻石","=q3=图鉴:灰烬之天焰钻石","=q3=图鉴:洞察之大地侵攻钻石","=q3=图鉴:充沛之大地侵攻钻石","=q3=图鉴:残酷之大地侵攻钻石","=q3=图鉴:复苏之天焰钻石","=q3=图鉴:锋利之大地侵攻钻石"})
|
||||
process("JewelcraftingDaily6",24,{"=q3=图鉴:朴素龙眼石","=q3=图鉴:明亮龙眼石","=q3=图鉴:闪耀龙眼石","=q3=图鉴:精致龙眼石","=q3=图鉴:闪光龙眼石","=q3=图鉴:断裂龙眼石","=q3=图鉴:异彩龙眼石","=q3=图鉴:秘法龙眼石","=q3=图鉴:精准龙眼石","=q3=图鉴:迅捷龙眼石","=q3=图鉴:刚硬龙眼石","=q3=图鉴:符文龙眼石","=q3=图鉴:圆润龙眼石","=q3=图鉴:致密龙眼石","=q3=图鉴:火花龙眼石","=q3=图鉴:风暴龙眼石","=q3=图鉴:诡秘龙眼石","=q3=图鉴:厚重龙眼石","=q4=图鉴:泰坦神铁地卫项圈","=q4=图鉴:泰坦神铁地卫指环","=q4=图鉴:泰坦神铁冲击指环","=q4=图鉴:泰坦神铁冲击项圈","=q4=图鉴:泰坦神铁魔震项链","=q4=图鉴:泰坦神铁魔震指环"})
|
||||
process("LeatherworkingLeatherBloodTigerH",3,{"","=q3=血虎护肩","=q3=血虎胸甲"})
|
||||
process("LeatherworkingLeatherBoreanEmbrace",9,{"","=q2=Arctic Helm","=q2=Arctic Shoulderpads","=q2=Arctic Chestpiece","=q2=Arctic Wristguards","=q2=Arctic Gloves","=q2=Arctic Belt","=q2=Arctic Leggings","=q2=Arctic Boots"})
|
||||
process("LeatherworkingLeatherDevilsaurArmor",3,{"","=q3=魔暴龙皮手套","=q3=魔暴龙皮护腿"})
|
||||
process("LeatherworkingLeatherEvisceratorBattlegear",9,{"","=q3=Eviscerator's Facemask","=q3=Eviscerator's Shoulderpads","=q3=Eviscerator's Chestguard","=q3=Eviscerator's Bindings","=q3=Eviscerator's Gauntlets","=q3=Eviscerator's Waistguard","=q3=Eviscerator's Legguards","=q3=Eviscerator's Treads"})
|
||||
process("LeatherworkingLeatherFelSkin",4,{"","=q3=魔能皮甲手套","=q3=魔能皮甲护腿","=q3=魔能皮甲长靴"})
|
||||
process("LeatherworkingLeatherIceborneEmbrace",9,{"","=q2=Iceborne Helm","=q2=Iceborne Shoulderpads","=q2=Iceborne Chestguard","=q2=Iceborne Wristguards","=q2=Iceborne Gloves","=q2=Iceborne Belt","=q2=Iceborne Leggings","=q2=Iceborne Boots"})
|
||||
process("LeatherworkingLeatherIronfeatherArmor",3,{"","=q3=铁羽护肩","=q3=铁羽胸甲"})
|
||||
process("LeatherworkingLeatherOvercasterBattlegear",9,{"","=q3=Overcast Headguard","=q3=Overcast Spaulders","=q3=Overcast Chestguard","=q3=Overcast Bracers","=q3=Overcast Handwraps","=q3=Overcast Belt","=q3=Overcast Leggings","=q3=Overcast Boots"})
|
||||
process("LeatherworkingLeatherPrimalBatskin",4,{"","=q3=原始蝙蝠皮外套","=q3=原始蝙蝠皮护腕","=q3=原始蝙蝠皮手套"})
|
||||
process("LeatherworkingLeatherPrimalIntent",4,{"","=q4=原始打击外衣","=q4=原始打击护腕","=q4=原始打击腰带"})
|
||||
process("LeatherworkingLeatherSClefthoof",4,{"","=q3=厚重裂蹄外套","=q3=厚重裂蹄护腿","=q3=厚重裂蹄长靴"})
|
||||
process("LeatherworkingLeatherStormshroudArmor",5,{"","=q3=雷暴护肩","=q3=雷暴护甲","=q3=雷暴手套","=q3=雷暴短裤"})
|
||||
process("LeatherworkingLeatherThickDraenicA",5,{"","=q2=厚重德莱尼外套","=q2=厚重德莱尼手套","=q2=厚重德莱尼短裤","=q2=厚重德莱尼长靴"})
|
||||
process("LeatherworkingLeatherVolcanicArmor",4,{"","=q2=火山护肩","=q2=火山胸甲","=q2=火山护腿"})
|
||||
process("LeatherworkingLeatherWildDraenishA",5,{"","=q2=野性德莱尼外套","=q2=野性德莱尼手套","=q2=野性德莱尼护腿","=q2=野性德莱尼长靴"})
|
||||
process("LeatherworkingLeatherWindhawkArmor",4,{"","=q4=风鹰胸甲","=q4=风鹰护腕","=q4=风鹰腰带"})
|
||||
process("LeatherworkingMailBlackDragonM",5,{"","=q3=黑色龙鳞护肩","=q3=黑色龙鳞胸甲","=q3=黑色龙鳞护腿","=q4=黑色龙鳞战靴"})
|
||||
process("LeatherworkingMailBlueDragonM",4,{"","=q3=蓝龙鳞片护肩","=q3=蓝龙鳞片胸甲","=q3=蓝龙鳞片护腿"})
|
||||
process("LeatherworkingMailFelscaleArmor",5,{"","=q2=魔鳞胸甲","=q2=魔鳞手套","=q2=魔鳞短裤","=q2=魔鳞长靴"})
|
||||
process("LeatherworkingMailFelstalkerArmor",4,{"","=q3=魔能猎手胸甲","=q3=魔能猎手护腕","=q3=魔能猎手腰带"})
|
||||
process("LeatherworkingMailFrostscaleBinding",9,{"","=q2=Frostscale Helm","=q2=Frostscale Shoulders","=q2=Frostscale Chestguard","=q2=Frostscale Bracers","=q2=Frostscale Gloves","=q2=Frostscale Belt","=q2=Frostscale Leggings","=q2=Frostscale Boots"})
|
||||
process("LeatherworkingMailGreenDragonM",4,{"","=q3=绿龙鳞片胸甲","=q3=绿色龙鳞护手","=q3=绿龙鳞片护腿"})
|
||||
process("LeatherworkingMailNerubianHive",9,{"","=q2=Nerubian Helm","=q2=Nerubian Shoulders","=q2=Nerubian Chestguard","=q2=Nerubian Bracers","=q2=Nerubian Gloves","=q2=Nerubian Belt","=q2=Nerubian Legguards","=q2=Nerubian Boots"})
|
||||
process("LeatherworkingMailNetherFury",4,{"","=q3=虚空之怒腰带","=q3=虚空之怒护腿","=q3=虚空之怒长靴"})
|
||||
process("LeatherworkingMailNetherscaleArmor",4,{"","=q4=黑色虚鳞胸甲","=q4=黑色虚鳞护腕","=q4=黑色虚鳞腰带"})
|
||||
process("LeatherworkingMailNetherstrikeArmor",4,{"","=q4=虚空打击胸甲","=q4=虚空打击护腕","=q4=虚空打击腰带"})
|
||||
process("LeatherworkingMailScaledDraenicA",5,{"","=q2=缀鳞德拉诺外套","=q2=缀鳞德拉诺手套","=q2=缀鳞德拉诺短裤","=q2=缀鳞德拉诺长靴"})
|
||||
process("LeatherworkingMailStormhideBattlegear",9,{"","=q3=Stormhide Crown","=q3=Stormhide Shoulders","=q3=Stormhide Hauberk","=q3=Stormhide Wristguards","=q3=Stormhide Grips","=q3=Stormhide Belt","=q3=Stormhide Legguards","=q3=Stormhide Stompers"})
|
||||
process("LeatherworkingMailSwiftarrowBattlefear",9,{"","=q3=Swiftarrow Helm","=q3=Swiftarrow Shoulderguards","=q3=Swiftarrow Hauberk","=q3=Swiftarrow Bracers","=q3=Swiftarrow Gauntlets","=q3=Swiftarrow Belt","=q3=Swiftarrow Leggings","=q3=Swiftarrow Boots"})
|
||||
process("TailoringArcanoVest",4,{"","=q3=奥法交织长袍","=q3=奥法交织护腕","=q3=奥法交织长靴"})
|
||||
process("TailoringBattlecastG",3,{"","=q4=战斗施法罩帽","=q4=战斗施法短裤"})
|
||||
process("TailoringBloodvineG",4,{"","=q3=血藤外套","=q3=血藤护腿","=q3=血藤长靴"})
|
||||
process("TailoringDuskweaver",9,{"","=q2=Duskweave Cowl","=q2=Duskweave Shoulders","=q2=Duskweave Robe","=q2=Duskweave Wristwraps","=q2=Duskweave Gloves","=q2=Duskweave Belt","=q2=Duskweave Leggings","=q2=Duskweave Boots"})
|
||||
process("TailoringFrostsavageBattlegear",9,{"","=q3=Frostsavage Cowl","=q3=Frostsavage Shoulders","=q3=Frostsavage Robe","=q3=Frostsavage Bracers","=q3=Frostsavage Gloves","=q3=Frostsavage Belt","=q3=Frostsavage Leggings","=q3=Frostsavage Boots"})
|
||||
process("TailoringFrostwovenPower",9,{"","=q2=Frostwoven Cowl","=q2=Frostwoven Shoulders","=q2=Frostwoven Robe","=q2=Frostwoven Wristwraps","=q2=Frostwoven Gloves","=q2=Frostwoven Belt","=q2=Frostwoven Leggings","=q2=Frostwoven Boots"})
|
||||
process("TailoringImbuedNeather",5,{"","=q3=魔化灵纹外套","=q3=魔化灵纹长袍","=q3=魔化灵纹短裤","=q3=魔化灵纹长靴"})
|
||||
process("TailoringNeatherVest",8,{"","=q2=灵纹外套","=q2=灵纹长袍","=q2=灵纹护腕","=q2=灵纹手套","=q2=灵纹腰带","=q2=灵纹短裤","=q2=灵纹长靴"})
|
||||
process("TailoringPrimalMoon",4,{"","=q4=原始月布护肩","=q4=原始月布长袍","=q4=原始月布腰带"})
|
||||
process("TailoringShadowEmbrace",4,{"","=q4=冰霜暗纹护肩","=q4=冰霜暗纹长袍","=q4=冰霜暗纹长靴"})
|
||||
process("TailoringSoulclothEm",4,{"","=q4=灵魂布护肩","=q4=灵魂布外衣","=q4=灵魂布手套"})
|
||||
process("TailoringSpellfireWrath",4,{"","=q4=魔焰长袍","=q4=魔焰手套","=q4=魔焰腰带"})
|
||||
process("TailoringSpellstrikeInfu",3,{"","=q4=法术打击兜帽","=q4=法术打击短裤"})
|
||||
process("TailoringTheUnyielding",3,{"","=q3=不屈护腕","=q4=不屈束带"})
|
||||
process("TailoringWhitemendWis",3,{"","=q4=白色治愈兜帽","=q4=白色治愈短裤"})
|
||||
elseif locale == "zhTW" then
|
||||
process("BlacksmithingMailBloodsoulEmbrace",4,{"","=q3=血魂護肩","=q3=血魂胸甲","=q3=血魂護手"})
|
||||
process("BlacksmithingMailFelIronChain",5,{"","=q2=魔鐵鍊甲罩盔","=q2=魔鐵鍊甲外套","=q2=魔鐵鍊甲護腕","=q2=魔鐵鍊甲手套"})
|
||||
process("BlacksmithingPlateAdamantiteB",4,{"","=q3=堅鋼胸甲","=q3=堅鋼鎧甲護腕","=q3=堅鋼鎧甲手套"})
|
||||
process("BlacksmithingPlateBurningRage",5,{"","=q3=怒鋼頭盔","=q3=怒鋼護肩","=q3=怒鋼胸甲","=q3=怒鋼手套"})
|
||||
process("BlacksmithingPlateEnchantedAdaman",5,{"","=q3=附魔堅鋼胸甲","=q3=附魔堅鋼腰帶","=q3=附魔堅鋼護腿","=q3=附魔堅鋼長靴"})
|
||||
process("BlacksmithingPlateFaithFelsteel",4,{"","=q3=魔鋼頭盔","=q3=魔鋼手套","=q3=魔鋼護腿"})
|
||||
process("BlacksmithingPlateFelIronPlate",6,{"","=q2=魔鐵胸甲","=q2=魔鐵鎧甲手套","=q2=魔鐵鎧甲腰帶","=q2=魔鐵鎧甲束褲","=q2=魔鐵鎧甲長靴"})
|
||||
process("BlacksmithingPlateFlameG",5,{"","=q3=烈焰毀滅頭盔","=q3=烈焰毀滅胸甲","=q3=烈焰毀滅護腕","=q3=烈焰毀滅手套"})
|
||||
process("BlacksmithingPlateImperialPlate",8,{"","=q2=帝國鎧甲頭盔","=q2=帝國鎧甲護肩","=q2=帝國鎧甲護胸","=q2=帝國鎧甲護腕","=q2=帝國鎧甲腰帶","=q2=帝國鎧甲護腿","=q2=帝國鎧甲長靴"})
|
||||
process("BlacksmithingPlateKhoriumWard",4,{"","=q3=克銀腰帶","=q3=克銀束褲","=q3=克銀長靴"})
|
||||
process("BlacksmithingPlateOrnateSaroniteBattlegear",9,{"","=q3=Ornate Saronite Skullshield","=q3=Ornate Saronite Pauldrons","=q3=Ornate Saronite Hauberk","=q3=Ornate Saronite Bracers","=q3=Ornate Saronite Gauntlets","=q3=Ornate Saronite Waistguard","=q3=Ornate Saronite Legplates","=q3=Ornate Saronite Walkers"})
|
||||
process("BlacksmithingPlateSavageSaroniteBattlegear",9,{"","=q3=Savage Saronite Skullshield","=q3=Savage Saronite Pauldrons","=q3=Savage Saronite Hauberk","=q3=Savage Saronite Bracers","=q3=Savage Saronite Gauntlets","=q3=Savage Saronite Waistguard","=q3=Savage Saronite Legplates","=q3=Savage Saronite Walkers"})
|
||||
process("BlacksmithingPlateTheDarksoul",4,{"","=q3=黑暗之魂護肩","=q3=黑暗之魂胸甲","=q3=黑暗之魂護腿"})
|
||||
process("CookingDaily1",6,{"=q3=Recipe: Delicious Chocolate Cake","=q3=Recipe: Stormchops","=q2=Recipe: Broiled Bloodfin","=q2=Recipe: Kibler's Bits","=q2=Recipe: Skullfish Soup","=q2=Recipe: Spicy Hot Talbuk"})
|
||||
process("CookingDaily2",27,{"=q2=食譜:焦黑的龍鰭","=q2=食譜:焦黑的座狼排","=q2=食譜:小動物餌食","=q2=食譜:墨魚排","=q2=食譜:龍鰭魚片","=q2=食譜:爆香鮭魚","=q2=食譜:營養犀牛肉","=q2=食譜:帝王韌皮魟魚排","=q2=食譜:超級長毛象餐","=q2=食譜:強力犀牛熱狗","=q2=食譜:水煮北地牛尾魚","=q2=食譜:犀蟲雜肉排","=q2=食譜:終極鯛魚","=q2=食譜:辣味長毛象美饌","=q2=食譜:辣味巨蟲堡","=q2=食譜:辣味藍蕁麻魚","=q2=食譜:辣味炸鯡魚","=q2=食譜:嫩鍬牙肉排","=q2=食譜:追蹤者點心","=q2=食譜:嚴重烤焦的座狼肉","=q3=Chef's Hat","=q1=北地香料","","=q3=Recipe: Delicious Chocolate Cake","=q3=Recipe: Stormchops","=q1=Baby Spice","=q1=Old Spices"})
|
||||
process("CraftedWeapons1",24,{"=q4=Shadow's Edge","","=q4=Titansteel Spellblade","=q4=Titansteel Shanker","=q4=Titansteel Bonecrusher","=q4=Titansteel Guardian","=q4=Titansteel Destroyer","=q4=Titansteel Shield Wall","","=q4=Armor Plated Combat Shotgun","=q4=Nesingwary 4000","","=q4=恆金符文刃","=q4=輓歌之刃","=q4=魔鋼長刃","=q4=克銀勇士","=q4=魔鋒戰鬥斧","=q4=魔鋼斧","=q4=永恆之手","=q4=符刻錘","=q4=魔鐵強化槌","=q4=公正力量之錘","","=q4=迴轉平衡克銀毀滅火槍"})
|
||||
process("CraftedWeapons2",13,{"","=q4=黑色赦免者","=q4=賢者之刃","=q4=黑色衛士","=q4=夜幕","=q4=黑檀之手","=q4=說服者","=q4=薩弗隆戰錘","=q4=黑色怒火","=q4=鋸齒黑曜石之盾","","=q4=熔核狙擊步槍","=q4=力回饋盾牌"})
|
||||
process("CraftedWeapons3",21,{"","=q4=火焰衛士","=q4=燃燒守護者","=q4=燃燒之怒","=q4=獅心之刃","=q4=獅心勇士劍","=q4=獅心斬首者","","=q4=異界之鋒","=q4=黑色異界之鋒","=q4=諸界邪鋒","=q4=新月斧","=q4=月光斬斧","=q4=血月","","=q4=龍拳之錘","=q4=龍喉","=q4=龍擊","=q4=雷","=q4=深雷","=q4=風暴信使"})
|
||||
process("FishingDaily1",17,{"=q4=The 2 Ring","=q3=Weather-Beaten Fishing Hat","=q3=恰克的水桶","=q3=污息的水桶","=q3=史納立的水桶","=q3=凸牙的水桶","=q3=Eye of the Sea","=q2=Recipe: Captain Rumsey's Lager","=q2=Spun Truesilver Fishing Line","=q1=Noble's Monocle","=q1=Antique Silver Cufflinks","=q1=Gold Wedding Band","=q1=Ornate Drinking Stein","=q1=Razor Sharp Fillet Knife","=q1=Weather-Beaten Journal","=q1=Elixir of Water Walking","=q1=Sharpened Fish Hook"})
|
||||
process("FishingDaily2",23,{"=q4=Bold Stormjewel","=q4=Brilliant Stormjewel","=q4=Delicate Stormjewel","=q4=Rigid Stormjewel","=q4=Runed Stormjewel","=q4=Solid Stormjewel","=q4=Sparkling Stormjewel","=q3=Weather-Beaten Fishing Hat","=q3=Bone Fishing Pole","=q3=Jeweled Fishing Pole","=q3=Strand Crawler","=q3=海妖之淚","=q3=Tiny Titanium Lockbox","=q2=Recipe: Captain Rumsey's Lager","=q2=高強度恆金漁線","=q1=Battered Jungle Hat","=q1=Diamond-tipped Cane","=q1=Glow Worm","=q1=Unusual Compass","=q1=Pygmy Oil","=q1=Elixir of Water Walking","=q1=Sealed Vial of Poison","=q1=Waterlogged Recipe"})
|
||||
process("JewelDragonsEye1",19,{"","","","","","","","","","","","","","","","","","","=q3=Dragon's Eye"})
|
||||
process("JewelcraftingDaily1",19,{"=q3=Design: Bold Cardinal Ruby","=q3=Design: Bright Cardinal Ruby","=q3=Design: Delicate Cardinal Ruby","=q3=Design: Flashing Cardinal Ruby","=q3=Design: Fractured Cardinal Ruby","=q3=Design: Precise Cardinal Ruby","=q3=Design: Runed Cardinal Ruby","=q3=Design: Subtle Cardinal Ruby","=q3=設計圖:清晰的血色紅寶石","=q3=設計圖:精緻的血色紅寶石","=q3=設計圖:閃光的血色紅寶石","=q3=Design: Brilliant King's Amber","=q3=Design: Mystic King's Amber","=q3=Design: Quick King's Amber","=q3=Design: Rigid King's Amber","=q3=Design: Smooth King's Amber","=q3=Design: Thick King's Amber","=q3=設計圖:迅速的秋輝石","=q3=設計圖:堅硬的秋輝石"})
|
||||
process("JewelcraftingDaily2",28,{"=q3=Design: Accurate Ametrine","=q3=Design: Champion's Ametrine","=q3=Design: Deadly Ametrine","=q3=Design: Deft Ametrine","=q3=Design: Durable Ametrine","=q3=Design: Empowered Ametrine","=q3=Design: Etched Ametrine","=q3=Design: Fierce Ametrine","=q3=Design: Glimmering Ametrine","=q3=Design: Glinting Ametrine","=q3=Design: Inscribed Ametrine","=q3=Design: Lucent Ametrine","=q3=Design: Luminous Ametrine","=q3=Design: Potent Ametrine","=q3=Design: Pristine Ametrine","=q3=Design: Reckless Ametrine","=q3=Design: Resolute Ametrine","=q3=Design: Resplendent Ametrine","=q3=Design: Stalwart Ametrine","=q3=Design: Stark Ametrine","=q3=Design: Veiled Ametrine","=q3=Design: Wicked Ametrine","=q3=設計圖:閃爍的君王黃寶石","=q3=設計圖:夜光的君王黃寶石","=q3=設計圖:高效的君王黃寶石","=q3=設計圖:魯莽的君王黃寶石","=q3=設計圖:突出的君王黃寶石","=q3=設計圖:朦朧的君王黃寶石"})
|
||||
process("JewelcraftingDaily3",26,{"=q3=Design: Dazzling Eye of Zul","=q3=Design: Enduring Eye of Zul","=q3=Design: Energized Eye of Zul","=q3=Design: Forceful Eye of Zul","=q3=Design: Intricate Eye of Zul","=q3=Design: Jagged Eye of Zul","=q3=Design: Lambent Eye of Zul","=q3=Design: Misty Eye of Zul","=q3=Design: Opaque Eye of Zul","=q3=Design: Radiant Eye of Zul","=q3=Design: Seer's Eye of Zul","=q3=Design: Shattered Eye of Zul","=q3=Design: Shining Eye of Zul","=q3=Design: Steady Eye of Zul","=q3=Design: Sundered Eye of Zul","=q3=Design: Tense Eye of Zul","=q3=Design: Timeless Eye of Zul","=q3=Design: Turbid Eye of Zul","=q3=Design: Vivid Eye of Zul","=q3=設計圖:耐久的森之翡翠","=q3=設計圖:充能的森之翡翠","=q3=設計圖:堅強的森之翡翠","=q3=設計圖:錯綜的森之翡翠","=q3=設計圖:柔光的森之翡翠","=q3=設計圖:先知的森之翡翠","=q3=設計圖:鮮艷的森之翡翠"})
|
||||
process("JewelcraftingDaily4",16,{"=q3=Design: Balanced Dreadstone","=q3=Design: Defender's Dreadstone","=q3=Design: Glowing Dreadstone","=q3=Design: Guardian's Dreadstone","=q3=Design: Infused Dreadstone","=q3=Design: Mysterious Dreadstone","=q3=Design: Puissant Dreadstone","=q3=Design: Purified Dreadstone","=q3=Design: Regal Dreadstone","=q3=Design: Royal Dreadstone","=q3=Design: Shifting Dreadstone","=q3=Design: Sovereign Dreadstone","=q3=Design: Tenuous Dreadstone","=q3=設計圖:強權的暮光蛋白石","=q3=設計圖:華貴的暮光蛋白石","=q3=設計圖:皇家的暮光蛋白石"})
|
||||
process("JewelcraftingDaily5",14,{"=q3=Design: Lustrous Majestic Zircon","=q3=Design: Solid Majestic Zircon","=q3=Design: Sparkling Majestic Zircon","=q3=Design: Stormy Majestic Zircon","=q3=設計圖:光輝的青空藍寶石","=q3=設計圖:堅固的青空藍寶石","=q3=設計圖:混沌的天燄鑽石","=q3=設計圖:光耀的天燄鑽石","=q3=設計圖:餘燼的天燄鑽石","=q3=設計圖:洞察的大地圍城鑽石","=q3=設計圖:鼓舞的大地圍城鑽石","=q3=設計圖:不懈的大地圍城鑽石","=q3=設計圖:甦活的天燄鑽石","=q3=設計圖:鋒銳的大地圍城鑽石"})
|
||||
process("JewelcraftingDaily6",24,{"=q3=設計圖:清晰的龍瞳石","=q3=設計圖:光亮的龍瞳石","=q3=設計圖:明亮的龍瞳石","=q3=設計圖:精緻的龍瞳石","=q3=設計圖:閃光的龍瞳石","=q3=設計圖:裂面的龍瞳石","=q3=設計圖:光輝的龍瞳石","=q3=設計圖:神秘的龍瞳石","=q3=設計圖:精確的龍瞳石","=q3=設計圖:迅速的龍瞳石","=q3=設計圖:堅硬的龍瞳石","=q3=設計圖:符文的龍瞳石","=q3=設計圖:光滑的龍瞳石","=q3=設計圖:堅固的龍瞳石","=q3=設計圖:閃亮的龍瞳石","=q3=設計圖:風暴的龍瞳石","=q3=設計圖:精巧的龍瞳石","=q3=設計圖:厚重的龍瞳石","=q4=設計圖:泰坦鋼大地守衛之鍊","=q4=設計圖:泰坦鋼大地守衛戒指","=q4=設計圖:泰坦鋼衝擊指環","=q4=設計圖:泰坦鋼衝擊頸飾","=q4=設計圖:泰坦鋼法術震擊項鍊","=q4=設計圖:泰坦鋼法術震擊戒指"})
|
||||
process("LeatherworkingLeatherBloodTigerH",3,{"","=q3=血虎護肩","=q3=血虎胸甲"})
|
||||
process("LeatherworkingLeatherBoreanEmbrace",9,{"","=q2=Arctic Helm","=q2=Arctic Shoulderpads","=q2=Arctic Chestpiece","=q2=Arctic Wristguards","=q2=Arctic Gloves","=q2=Arctic Belt","=q2=Arctic Leggings","=q2=Arctic Boots"})
|
||||
process("LeatherworkingLeatherDevilsaurArmor",3,{"","=q3=魔暴龍護手","=q3=魔暴龍皮護腿"})
|
||||
process("LeatherworkingLeatherEvisceratorBattlegear",9,{"","=q3=Eviscerator's Facemask","=q3=Eviscerator's Shoulderpads","=q3=Eviscerator's Chestguard","=q3=Eviscerator's Bindings","=q3=Eviscerator's Gauntlets","=q3=Eviscerator's Waistguard","=q3=Eviscerator's Legguards","=q3=Eviscerator's Treads"})
|
||||
process("LeatherworkingLeatherFelSkin",4,{"","=q3=惡魔皮手套","=q3=惡魔皮護腿","=q3=惡魔皮靴"})
|
||||
process("LeatherworkingLeatherIceborneEmbrace",9,{"","=q2=Iceborne Helm","=q2=Iceborne Shoulderpads","=q2=Iceborne Chestguard","=q2=Iceborne Wristguards","=q2=Iceborne Gloves","=q2=Iceborne Belt","=q2=Iceborne Leggings","=q2=Iceborne Boots"})
|
||||
process("LeatherworkingLeatherIronfeatherArmor",3,{"","=q3=鐵羽護肩","=q3=鐵羽胸甲"})
|
||||
process("LeatherworkingLeatherOvercasterBattlegear",9,{"","=q3=Overcast Headguard","=q3=Overcast Spaulders","=q3=Overcast Chestguard","=q3=Overcast Bracers","=q3=Overcast Handwraps","=q3=Overcast Belt","=q3=Overcast Leggings","=q3=Overcast Boots"})
|
||||
process("LeatherworkingLeatherPrimalBatskin",4,{"","=q3=原始蝙蝠皮上衣","=q3=原始蝙蝠皮護腕","=q3=原始蝙蝠皮手套"})
|
||||
process("LeatherworkingLeatherPrimalIntent",4,{"","=q4=原始之擊外衣","=q4=原始之擊護腕","=q4=原始之擊腰帶"})
|
||||
process("LeatherworkingLeatherSClefthoof",4,{"","=q3=重型裂蹄外衣","=q3=重型裂蹄護腿","=q3=重型裂蹄長靴"})
|
||||
process("LeatherworkingLeatherStormshroudArmor",5,{"","=q3=雷暴護肩","=q3=雷暴護甲","=q3=雷暴手套","=q3=雷暴束褲"})
|
||||
process("LeatherworkingLeatherThickDraenicA",5,{"","=q2=厚德萊尼外衣","=q2=厚德萊尼手套","=q2=厚德萊尼束褲","=q2=厚德萊尼長靴"})
|
||||
process("LeatherworkingLeatherVolcanicArmor",4,{"","=q2=火山護肩","=q2=火山胸甲","=q2=火山護腿"})
|
||||
process("LeatherworkingLeatherWildDraenishA",5,{"","=q2=狂野德萊尼外衣","=q2=狂野德萊尼手套","=q2=狂野德萊尼護腿","=q2=狂野德萊尼長靴"})
|
||||
process("LeatherworkingLeatherWindhawkArmor",4,{"","=q4=風之隼鍊衫","=q4=風之隼護腕","=q4=風之隼腰帶"})
|
||||
process("LeatherworkingMailBlackDragonM",5,{"","=q3=黑色龍鱗護肩","=q3=黑色龍鱗胸甲","=q3=黑色龍鱗護腿","=q4=黑色龍鱗長靴"})
|
||||
process("LeatherworkingMailBlueDragonM",4,{"","=q3=藍龍鱗片護肩","=q3=藍龍鱗片胸甲","=q3=藍龍鱗片護腿"})
|
||||
process("LeatherworkingMailFelscaleArmor",5,{"","=q2=魔鱗胸甲","=q2=魔鱗手套","=q2=魔鱗束褲","=q2=魔鱗長靴"})
|
||||
process("LeatherworkingMailFelstalkerArmor",4,{"","=q3=惡魔捕獵者胸甲","=q3=惡魔捕獵者護腕","=q3=惡魔捕獵者腰帶"})
|
||||
process("LeatherworkingMailFrostscaleBinding",9,{"","=q2=Frostscale Helm","=q2=Frostscale Shoulders","=q2=Frostscale Chestguard","=q2=Frostscale Bracers","=q2=Frostscale Gloves","=q2=Frostscale Belt","=q2=Frostscale Leggings","=q2=Frostscale Boots"})
|
||||
process("LeatherworkingMailGreenDragonM",4,{"","=q3=綠龍鱗片胸甲","=q3=綠色龍鱗護手","=q3=綠龍鱗片護腿"})
|
||||
process("LeatherworkingMailNerubianHive",9,{"","=q2=Nerubian Helm","=q2=Nerubian Shoulders","=q2=Nerubian Chestguard","=q2=Nerubian Bracers","=q2=Nerubian Gloves","=q2=Nerubian Belt","=q2=Nerubian Legguards","=q2=Nerubian Boots"})
|
||||
process("LeatherworkingMailNetherFury",4,{"","=q3=虛空之怒腰帶","=q3=虛空之怒護腿","=q3=虛空之怒長靴"})
|
||||
process("LeatherworkingMailNetherscaleArmor",4,{"","=q4=黑虛空鱗胸甲","=q4=黑虛空鱗護腕","=q4=黑虛空鱗腰帶"})
|
||||
process("LeatherworkingMailNetherstrikeArmor",4,{"","=q4=地擊胸甲","=q4=地擊護腕","=q4=地擊腰帶"})
|
||||
process("LeatherworkingMailScaledDraenicA",5,{"","=q2=德萊尼綴鱗外衣","=q2=德萊尼綴鱗手套","=q2=德萊尼綴鱗束褲","=q2=德萊尼綴鱗長靴"})
|
||||
process("LeatherworkingMailStormhideBattlegear",9,{"","=q3=Stormhide Crown","=q3=Stormhide Shoulders","=q3=Stormhide Hauberk","=q3=Stormhide Wristguards","=q3=Stormhide Grips","=q3=Stormhide Belt","=q3=Stormhide Legguards","=q3=Stormhide Stompers"})
|
||||
process("LeatherworkingMailSwiftarrowBattlefear",9,{"","=q3=Swiftarrow Helm","=q3=Swiftarrow Shoulderguards","=q3=Swiftarrow Hauberk","=q3=Swiftarrow Bracers","=q3=Swiftarrow Gauntlets","=q3=Swiftarrow Belt","=q3=Swiftarrow Leggings","=q3=Swiftarrow Boots"})
|
||||
process("TailoringArcanoVest",4,{"","=q3=奧紋長袍","=q3=奧紋護腕","=q3=奧紋長靴"})
|
||||
process("TailoringBattlecastG",3,{"","=q4=戰放兜帽","=q4=戰放束褲"})
|
||||
process("TailoringBloodvineG",4,{"","=q3=血藤外衣","=q3=血藤護腿","=q3=血藤長靴"})
|
||||
process("TailoringDuskweaver",9,{"","=q2=Duskweave Cowl","=q2=Duskweave Shoulders","=q2=Duskweave Robe","=q2=Duskweave Wristwraps","=q2=Duskweave Gloves","=q2=Duskweave Belt","=q2=Duskweave Leggings","=q2=Duskweave Boots"})
|
||||
process("TailoringFrostsavageBattlegear",9,{"","=q3=Frostsavage Cowl","=q3=Frostsavage Shoulders","=q3=Frostsavage Robe","=q3=Frostsavage Bracers","=q3=Frostsavage Gloves","=q3=Frostsavage Belt","=q3=Frostsavage Leggings","=q3=Frostsavage Boots"})
|
||||
process("TailoringFrostwovenPower",9,{"","=q2=Frostwoven Cowl","=q2=Frostwoven Shoulders","=q2=Frostwoven Robe","=q2=Frostwoven Wristwraps","=q2=Frostwoven Gloves","=q2=Frostwoven Belt","=q2=Frostwoven Leggings","=q2=Frostwoven Boots"})
|
||||
process("TailoringImbuedNeather",5,{"","=q3=魔染幽紋外套","=q3=魔染幽紋長袍","=q3=魔染幽紋束褲","=q3=魔染幽紋長靴"})
|
||||
process("TailoringNeatherVest",8,{"","=q2=幽紋外套","=q2=幽紋長袍","=q2=幽紋護腕","=q2=幽紋手套","=q2=幽紋腰帶","=q2=幽紋束褲","=q2=幽紋長靴"})
|
||||
process("TailoringPrimalMoon",4,{"","=q4=原始月布護肩","=q4=原始月布長袍","=q4=原始月布腰帶"})
|
||||
process("TailoringShadowEmbrace",4,{"","=q4=冰霜影紋護肩","=q4=冰霜影紋長袍","=q4=冰霜影紋長靴"})
|
||||
process("TailoringSoulclothEm",4,{"","=q4=靈魂布護肩","=q4=靈魂布外衣","=q4=靈魂布手套"})
|
||||
process("TailoringSpellfireWrath",4,{"","=q4=魔焰長袍","=q4=魔焰手套","=q4=魔焰腰帶"})
|
||||
process("TailoringSpellstrikeInfu",3,{"","=q4=法擊兜帽","=q4=法擊束褲"})
|
||||
process("TailoringTheUnyielding",3,{"","=q3=不屈護腕","=q4=不屈束腰"})
|
||||
process("TailoringWhitemendWis",3,{"","=q4=白癒兜帽","=q4=白癒束褲"})
|
||||
elseif locale == "koKR" then
|
||||
process("BlacksmithingMailBloodsoulEmbrace",4,{"","=q3=붉은영혼의 어깨보호구","=q3=붉은영혼의 흉갑","=q3=붉은영혼의 건틀릿"})
|
||||
process("BlacksmithingMailFelIronChain",5,{"","=q2=지옥무쇠 사슬 코이프","=q2=지옥무쇠 사슬 조끼","=q2=지옥무쇠 사슬 팔보호구","=q2=지옥무쇠 사슬 장갑"})
|
||||
process("BlacksmithingPlateAdamantiteB",4,{"","=q3=아다만타이트 흉갑","=q3=아다만타이트 판금 팔보호구","=q3=아다만타이트 판금 장갑"})
|
||||
process("BlacksmithingPlateBurningRage",5,{"","=q3=분노의 강철 투구","=q3=분노의 강철 어깨보호구","=q3=분노의 강철 흉갑","=q3=분노의 강철 장갑"})
|
||||
process("BlacksmithingPlateEnchantedAdaman",5,{"","=q3=마력 깃든 아다만타이트 흉갑","=q3=마력 깃든 아다만타이트 허리띠","=q3=마력 깃든 아다만타이트 다리보호구","=q3=마력 깃든 아다만타이트 장화"})
|
||||
process("BlacksmithingPlateFaithFelsteel",4,{"","=q3=지옥강철 투구","=q3=지옥강철 장갑","=q3=지옥강철 다리보호구"})
|
||||
process("BlacksmithingPlateFelIronPlate",6,{"","=q2=지옥무쇠 흉갑","=q2=지옥무쇠 장갑","=q2=지옥무쇠 허리띠","=q2=지옥무쇠 바지","=q2=지옥무쇠 장화"})
|
||||
process("BlacksmithingPlateFlameG",5,{"","=q3=화염파멸 투구","=q3=화염파멸 흉갑","=q3=화염파멸 팔보호구","=q3=화염파멸 장갑"})
|
||||
process("BlacksmithingPlateImperialPlate",8,{"","=q2=황제의 판금 투구","=q2=황제의 판금 어깨보호구","=q2=황제의 판금 흉갑","=q2=황제의 판금 팔보호구","=q2=황제의 판금 허리띠","=q2=황제의 판금 다리보호구","=q2=황제의 판금 장화"})
|
||||
process("BlacksmithingPlateKhoriumWard",4,{"","=q3=코륨 허리띠","=q3=코륨 바지","=q3=코륨 장화"})
|
||||
process("BlacksmithingPlateOrnateSaroniteBattlegear",9,{"","=q3=화려한 사로나이트 해골투구","=q3=화려한 사로나이트 어깨갑옷","=q3=화려한 사로나이트 갑옷","=q3=화려한 사로나이트 팔보호구","=q3=화려한 사로나이트 건틀릿","=q3=화려한 사로나이트 허리보호대","=q3=화려한 사로나이트 다리갑옷","=q3=화려한 사로나이트 장화"})
|
||||
process("BlacksmithingPlateSavageSaroniteBattlegear",9,{"","=q3=야만의 사로나이트 해골투구","=q3=야만의 사로나이트 어깨갑옷","=q3=야만의 사로나이트 갑옷","=q3=야만의 사로나이트 팔보호구","=q3=야만의 사로나이트 건틀릿","=q3=야만의 사로나이트 허리보호대","=q3=야만의 사로나이트 다리갑옷","=q3=야만의 사로나이트 장화"})
|
||||
process("BlacksmithingPlateTheDarksoul",4,{"","=q3=검은영혼의 어깨보호구","=q3=검은영혼의 흉갑","=q3=검은영혼의 다리보호구"})
|
||||
process("CookingDaily1",6,{"=q3=조리법: 맛좋은 초콜릿 케이크","=q3=조리법: 번개구이","=q2=조리법: 피지느러미 구이","=q2=조리법: 키블러의 간식","=q2=조리법: 해골물고기 수프","=q2=조리법: 매콤한 양념 탈부크 구이"})
|
||||
process("CookingDaily2",27,{"=q2=용지느러미 장작구이","=q2=조리법: 검은늑대 스테이크","=q2=조리법: 동물 먹이","=q2=조리법: 오징어 스테이크","=q2=조리법: 용지느러미 살코기 요리","=q2=조리법: 연어 숯불구이","=q2=조리법: 영양가 높은 코뿔소 고기","=q2=조리법: 황제 쥐가오리 스테이크","=q2=조리법: 커다란 매머드 고기","=q2=조리법: 커다란 코뿔소 핫도그","=q2=조리법: 삶은 북해 둑중개","=q2=조리법: 맛있는 고룡 스테이크","=q2=조리법: 퉁돔 순살 구이","=q2=조리법: 매콤한 매머드고기 요리","=q2=조리법: 매콤한 고룡 햄버거","=q2=조리법: 매콤한 청해파리","=q2=조리법: 매콤한 청어 튀김","=q2=조리법: 부드러운 뾰족엄니 스테이크","=q2=조리법: 추적자 과자","=q2=조리법: 탄 검은늑대 고기","=q3=요리사 모자","=q1=북지 양념","","=q3=조리법: 맛좋은 초콜릿 케이크","=q3=조리법: 번개구이","=q1=아기 향료","=q1=오래된 향료"})
|
||||
process("CraftedWeapons1",24,{"=q4=어둠의 칼날도끼","","=q4=티탄강철 마법검","=q4=티탄강철 단도","=q4=티탄강철 해골파쇄기","=q4=티탄강철 수호자","=q4=티탄강철 파괴자","=q4=티탄강철 철벽 방패","","=q4=강철도금 전투 산탄총","=q4=네싱워리 4000","","=q4=이터늄 룬검","=q4=진혼곡","=q4=지옥강철 장검","=q4=용사의 코륨검","=q4=지옥날 전투도끼","=q4=지옥강철 도끼","=q4=영원의 손길","=q4=룬문자 망치","=q4=지옥 경화 마울","=q4=정의로운 힘의 망치","","=q4=균형 잡힌 회전식 코륨 파괴자"})
|
||||
process("CraftedWeapons2",13,{"","=q4=어둠의 사절","=q4=현자의 검","=q4=검은 수호자","=q4=일몰","=q4=칠흑의 손","=q4=강권의 망치","=q4=설퍼론 망치","=q4=검은분노","=q4=뾰족한 흑요석 방패","","=q4=명사수의 라이플","=q4=마력장 원반"})
|
||||
process("CraftedWeapons3",21,{"","=q4=불꽃의 수호검","=q4=타오르는 수호검","=q4=타오르는 격노","=q4=사자심장 검","=q4=용사의 사자심장 검","=q4=집행의 사자심장 검","","=q4=차원의 도끼","=q4=검은 차원의 도끼","=q4=사악한 차원의 도끼","=q4=초승달 도끼","=q4=달빛 클레버","=q4=피의 달","","=q4=비룡갈퀴 망치","=q4=용아귀","=q4=용의 일격","=q4=천둥 망치","=q4=천둥번개 망치","=q4=폭풍의 전령"})
|
||||
process("FishingDaily1",17,{"=q4=두반지","=q3=풍파에 낡은 낚시용 모자","=q3=크릉이의 물동이","=q3=캭캭이의 물동이","=q3=으릉이의 물동이","=q3=덥석이의 물동이","=q3=바다의 눈","=q2=조리법: 럼지 선장의 맥주","=q2=정교한 진은 낚싯줄","=q1=귀족의 외눈 안경","=q1=오래된 은 단추","=q1=결혼 금반지","=q1=화려한 맥주잔","=q1=아주 날카로운 회칼","=q1=풍파에 낡은 일지","=q1=수면 걷기의 비약","=q1=예리한 낚싯바늘"})
|
||||
process("FishingDaily2",23,{"=q4=굵은 폭풍석","=q4=찬란한 폭풍석","=q4=섬세한 폭풍석","=q4=강도 높은 폭풍석","=q4=룬이 새겨진 폭풍석","=q4=단단한 폭풍석","=q4=반짝거리는 폭풍석","=q3=풍파에 낡은 낚시용 모자","=q3=뼈다귀 낚싯대","=q3=보석 박힌 낚싯대","=q3=해안 게","=q3=세이렌의 눈물","=q3=작은 티타늄 금고","=q2=조리법: 럼지 선장의 맥주","=q2=고탄성 이터늄 낚싯줄","=q1=닳아해진 밀림 모자","=q1=다이아몬드 박힌 지팡이","=q1=빛나는 벌레","=q1=진귀한 나침반","=q1=피그미 기름","=q1=수면 걷기의 비약","=q1=봉인된 독약병","=q1=물에 젖은 제조법"})
|
||||
process("JewelDragonsEye1",19,{"","","","","","","","","","","","","","","","","","","=q3=용의 눈"})
|
||||
process("JewelcraftingDaily1",19,{"=q3=디자인: 굵은 선홍빛 루비","=q3=디자인: 광채 나는 선홍빛 루비","=q3=디자인: 섬세한 선홍빛 루비","=q3=디자인: 번쩍이는 선홍빛 루비","=q3=디자인: 부서진 선홍빛 루비","=q3=디자인: 정교한 선홍빛 루비","=q3=디자인: 룬이 새겨진 선홍빛 루비","=q3=디자인: 미묘한 선홍빛 루비","=q3=디자인: 굵은 단홍빛 루비","=q3=디자인: 섬세한 단홍빛 루비","=q3=디자인: 번쩍이는 단홍빛 루비","=q3=디자인: 찬란한 왕의 호박석","=q3=디자인: 신비로운 왕의 호박석","=q3=디자인: 쾌속의 왕의 호박석","=q3=디자인: 강도 높은 왕의 호박석","=q3=디자인: 매끄러운 왕의 호박석","=q3=디자인: 두꺼운 왕의 호박석","=q3=디자인: 쾌속의 단풍석","=q3=디자인: 강도 높은 단풍석"})
|
||||
process("JewelcraftingDaily2",28,{"=q3=디자인: 정밀한 자황수정","=q3=디자인: 용사의 자황수정","=q3=디자인: 날카로운 자황수정","=q3=디자인: 기교의 자황수정","=q3=디자인: 내구성이 뛰어난 자황수정","=q3=디자인: 힘이 깃든 자황수정","=q3=디자인: 글이 새겨진 자황수정","=q3=디자인: 이글거리는 자황수정","=q3=디자인: 희미하게 빛나는 자황수정","=q3=디자인: 예리하게 빛나는 자황수정","=q3=디자인: 문자가 새겨진 자황수정","=q3=디자인: 반짝이는 자황수정","=q3=디자인: 영롱한 자황수정","=q3=디자인: 마력이 담긴 자황수정","=q3=디자인: 가공하지 않은 자황수정","=q3=디자인: 무모의 자황수정","=q3=디자인: 결의의 자황수정","=q3=디자인: 반들반들한 자황수정","=q3=디자인: 옹골진 자황수정","=q3=디자인: 딱딱한 자황수정","=q3=디자인: 가리어진 자황수정","=q3=디자인: 악의의 자황수정","=q3=디자인: 예리하게 빛나는 제왕 토파즈","=q3=디자인: 영롱한 제왕 토파즈","=q3=디자인: 마력이 담긴 제왕 토파즈","=q3=디자인: 무모의 제왕 토파즈","=q3=디자인: 딱딱한 제왕 토파즈","=q3=디자인: 가리어진 제왕 토파즈"})
|
||||
process("JewelcraftingDaily3",26,{"=q3=디자인: 휘황찬란한 줄의 눈","=q3=디자인: 견고한 줄의 눈","=q3=디자인: 활력의 줄의 눈","=q3=디자인: 강인한 줄의 눈","=q3=디자인: 엉클어진 줄의 눈","=q3=디자인: 톱니모양 줄의 눈","=q3=디자인: 은은하게 빛나는 줄의 눈","=q3=디자인: 안개 어린 줄의 눈","=q3=디자인: 불투명한 줄의 눈","=q3=디자인: 눈부신 줄의 눈","=q3=디자인: 예언하는 줄의 눈","=q3=디자인: 부서진 줄의 눈","=q3=디자인: 탁월한 줄의 눈","=q3=디자인: 한결같은 줄의 눈","=q3=디자인: 갈라진 줄의 눈","=q3=디자인: 조밀한 줄의 눈","=q3=디자인: 변함없는 줄의 눈","=q3=디자인: 농밀한 줄의 눈","=q3=디자인: 선명한 줄의 눈","=q3=디자인: 견고한 숲 에메랄드","=q3=디자인: 활력의 숲 에메랄드","=q3=디자인: 강인한 숲 에메랄드","=q3=디자인: 엉클어진 숲 에메랄드","=q3=디자인: 은은하게 빛나는 숲 에메랄드","=q3=디자인: 현자의 숲 에메랄드","=q3=디자인: 선명한 숲 에메랄드"})
|
||||
process("JewelcraftingDaily4",16,{"=q3=디자인: 균형 잡힌 공포석","=q3=디자인: 파수병의 공포석","=q3=디자인: 작열하는 공포석","=q3=디자인: 수호자의 공포석","=q3=디자인: 마력 깃든 공포석","=q3=디자인: 신비한 공포석","=q3=디자인: 권력의 공포석","=q3=디자인: 정화된 공포석","=q3=디자인: 제왕의 공포석","=q3=디자인: 호화로운 공포석","=q3=디자인: 아른거리는 공포석","=q3=디자인: 최상급 공포석","=q3=디자인: 가느다란 공포석","=q3=디자인: 권력의 황혼 오팔","=q3=디자인: 제왕의 황혼 오팔","=q3=디자인: 호화로운 황혼 오팔"})
|
||||
process("JewelcraftingDaily5",14,{"=q3=디자인: 빛나는 귀족 지르콘","=q3=디자인: 단단한 귀족 지르콘","=q3=디자인: 반짝거리는 귀족 지르콘","=q3=디자인: 휘몰아치는 귀족 지르콘","=q3=디자인: 빛나는 하늘 사파이어","=q3=디자인: 단단한 하늘 사파이어","=q3=디자인: 혼돈의 하늘섬광 다이아몬드","=q3=디자인: 눈부시게 빛나는 하늘섬광 다이아몬드","=q3=디자인: 이글거리는 하늘섬광 다이아몬드","=q3=디자인: 통찰의 대지울림 다이아몬드","=q3=디자인: 활기의 대지울림 다이아몬드","=q3=디자인: 냉혹의 대지울림 다이아몬드","=q3=디자인: 부흥의 하늘섬광 다이아몬드","=q3=디자인: 예리한 대지울림 다이아몬드"})
|
||||
process("JewelcraftingDaily6",24,{"=q3=디자인: 굵은 용의 눈","=q3=디자인: 광채 나는 용의 눈","=q3=디자인: 찬란한 용의 눈","=q3=디자인: 섬세한 용의 눈","=q3=디자인: 번쩍이는 용의 눈","=q3=디자인: 부서진 용의 눈","=q3=디자인: 빛나는 용의 눈","=q3=디자인: 신비로운 용의 눈","=q3=디자인: 정교한 용의 눈","=q3=디자인: 쾌속의 용의 눈","=q3=디자인: 강도 높은 용의 눈","=q3=디자인: 룬이 새겨진 용의 눈","=q3=디자인: 매끄러운 용의 눈","=q3=디자인: 단단한 용의 눈","=q3=디자인: 반짝거리는 용의 눈","=q3=디자인: 휘몰아치는 용의 눈","=q3=디자인: 미묘한 용의 눈","=q3=디자인: 두꺼운 용의 눈","=q4=디자인: 티타늄 대지수호 사슬목걸이","=q4=디자인: 티타늄 대지수호 반지","=q4=디자인: 티타늄 충격 고리","=q4=디자인: 티타늄 충격 목걸이","=q4=디자인: 티타늄 주문충격 목걸이","=q4=디자인: 티타늄 주문충격 반지"})
|
||||
process("LeatherworkingLeatherBloodTigerH",3,{"","=q3=붉은호랑이 어깨보호구","=q3=붉은호랑이 흉갑"})
|
||||
process("LeatherworkingLeatherBoreanEmbrace",9,{"","=q2=북극의 투구","=q2=북극의 어깨보호구","=q2=북극의 흉갑","=q2=북극의 손목보호구","=q2=북극의 장갑","=q2=북극의 허리띠","=q2=북극의 다리보호대","=q2=북극의 장화"})
|
||||
process("LeatherworkingLeatherDevilsaurArmor",3,{"","=q3=데빌사우루스 건틀릿","=q3=데빌사우루스 다리보호구"})
|
||||
process("LeatherworkingLeatherEvisceratorBattlegear",9,{"","=q3=적출자의 면갑","=q3=적출자의 어깨보호구","=q3=적출자의 흉갑","=q3=적출자의 손목띠","=q3=적출자의 건틀릿","=q3=적출자의 허리보호대","=q3=적출자의 다리보호대","=q3=적출자의 장화"})
|
||||
process("LeatherworkingLeatherFelSkin",4,{"","=q3=지옥 가죽 장갑","=q3=지옥 가죽 다리보호구","=q3=지옥 가죽 장화"})
|
||||
process("LeatherworkingLeatherIceborneEmbrace",9,{"","=q2=얼음결 투구","=q2=얼음결 어깨보호구","=q2=얼음결 흉갑","=q2=얼음결 손목보호구","=q2=얼음결 장갑","=q2=얼음결 허리띠","=q2=얼음결 다리보호구","=q2=얼음결 장화"})
|
||||
process("LeatherworkingLeatherIronfeatherArmor",3,{"","=q3=무쇠깃털 어깨보호구","=q3=무쇠깃털 흉갑"})
|
||||
process("LeatherworkingLeatherOvercasterBattlegear",9,{"","=q3=구름 덮인 머리보호구","=q3=구름 덮인 어깨갑옷","=q3=구름 덮인 흉갑","=q3=구름 덮인 팔보호구","=q3=구름 덮인 장갑","=q3=구름 덮인 허리띠","=q3=구름 덮인 다리보호구","=q3=구름 덮인 장화"})
|
||||
process("LeatherworkingLeatherPrimalBatskin",4,{"","=q3=원시 박쥐가죽 웃옷","=q3=원시 박쥐가죽 팔보호구","=q3=원시 박쥐가죽 장갑"})
|
||||
process("LeatherworkingLeatherPrimalIntent",4,{"","=q4=원소쐐기 조끼","=q4=원소쐐기 팔보호구","=q4=원소쐐기 허리띠"})
|
||||
process("LeatherworkingLeatherSClefthoof",4,{"","=q3=질긴 갈래발굽 조끼","=q3=질긴 갈래발굽 다리보호구","=q3=질긴 갈래발굽 장화"})
|
||||
process("LeatherworkingLeatherStormshroudArmor",5,{"","=q3=폭풍안개 어깨보호구","=q3=폭풍안개 갑옷","=q3=폭풍안개 장갑","=q3=폭풍안개 바지"})
|
||||
process("LeatherworkingLeatherThickDraenicA",5,{"","=q2=두꺼운 드레나이 조끼","=q2=두꺼운 드레나이 장갑","=q2=두꺼운 드레나이 바지","=q2=두꺼운 드레나이 장화"})
|
||||
process("LeatherworkingLeatherVolcanicArmor",4,{"","=q2=화산 어깨보호구","=q2=화산 흉갑","=q2=화산 다리보호구"})
|
||||
process("LeatherworkingLeatherWildDraenishA",5,{"","=q2=야생의 드레나이 조끼","=q2=야생의 드레나이 장갑","=q2=야생의 드레나이 다리보호구","=q2=야생의 드레나이 장화"})
|
||||
process("LeatherworkingLeatherWindhawkArmor",4,{"","=q4=바람매 갑옷","=q4=바람매 팔보호구","=q4=바람매 허리띠"})
|
||||
process("LeatherworkingMailBlackDragonM",5,{"","=q3=검은용비늘 어깨보호구","=q3=검은용비늘 흉갑","=q3=검은용비늘 다리보호구","=q4=검은용비늘 장화"})
|
||||
process("LeatherworkingMailBlueDragonM",4,{"","=q3=푸른용비늘 어깨보호구","=q3=푸른용비늘 흉갑","=q3=푸른용비늘 다리보호구"})
|
||||
process("LeatherworkingMailFelscaleArmor",5,{"","=q2=지옥껍질 흉갑","=q2=지옥껍질 장갑","=q2=지옥껍질 바지","=q2=지옥껍질 장화"})
|
||||
process("LeatherworkingMailFelstalkerArmor",4,{"","=q3=지옥추적자 흉갑","=q3=지옥추적자 팔보호구","=q3=지옥추적자 허리띠"})
|
||||
process("LeatherworkingMailFrostscaleBinding",9,{"","=q2=서리미늘 투구","=q2=서리미늘 어깨보호구","=q2=서리미늘 흉갑","=q2=서리미늘 팔보호구","=q2=서리미늘 장갑","=q2=서리미늘 허리띠","=q2=서리미늘 다리보호대","=q2=서리미늘 장화"})
|
||||
process("LeatherworkingMailGreenDragonM",4,{"","=q3=녹색용비늘 흉갑","=q3=녹색용비늘 건틀릿","=q3=녹색용비늘 다리보호구"})
|
||||
process("LeatherworkingMailNerubianHive",9,{"","=q2=네루비안 투구","=q2=네루비안 어깨보호구","=q2=네루비안 흉갑","=q2=네루비안 팔보호구","=q2=네루비안 장갑","=q2=네루비안 허리띠","=q2=네루비안 다리보호대","=q2=네루비안 장화"})
|
||||
process("LeatherworkingMailNetherFury",4,{"","=q3=황천의 격노 허리띠","=q3=황천의 격노 다리보호구","=q3=황천의 격노 장화"})
|
||||
process("LeatherworkingMailNetherscaleArmor",4,{"","=q4=칠흑의 황천비늘 흉갑","=q4=칠흑의 황천비늘 팔보호구","=q4=칠흑의 황천비늘 허리띠"})
|
||||
process("LeatherworkingMailNetherstrikeArmor",4,{"","=q4=황천쐐기 흉갑","=q4=황천쐐기 팔보호구","=q4=황천쐐기 허리띠"})
|
||||
process("LeatherworkingMailScaledDraenicA",5,{"","=q2=드레나이 미늘 조끼","=q2=드레나이 미늘 장갑","=q2=드레나이 미늘 바지","=q2=드레나이 미늘 장화"})
|
||||
process("LeatherworkingMailStormhideBattlegear",9,{"","=q3=폭풍도마뱀 관","=q3=폭풍도마뱀 어깨보호구","=q3=폭풍도마뱀 갑옷","=q3=폭풍도마뱀 손목보호구","=q3=폭풍도마뱀 장갑","=q3=폭풍도마뱀 허리띠","=q3=폭풍도마뱀 다리보호대","=q3=폭풍도마뱀 장화"})
|
||||
process("LeatherworkingMailSwiftarrowBattlefear",9,{"","=q3=바람화살 투구","=q3=바람화살 어깨갑옷","=q3=바람화살 갑옷","=q3=바람화살 팔보호구","=q3=바람화살 건틀릿","=q3=바람화살 허리띠","=q3=바람화살 다리보호구","=q3=바람화살 장화"})
|
||||
process("TailoringArcanoVest",4,{"","=q3=비전매듭 로브","=q3=비전매듭 팔보호구","=q3=비전매듭 장화"})
|
||||
process("TailoringBattlecastG",3,{"","=q4=전투시전술 두건","=q4=전투시전술 바지"})
|
||||
process("TailoringBloodvineG",4,{"","=q3=붉은덩굴 조끼","=q3=붉은덩굴 다리보호구","=q3=붉은덩굴 장화"})
|
||||
process("TailoringDuskweaver",9,{"","=q2=그늘매듭 두건","=q2=그늘매듭 어깨보호구","=q2=그늘매듭 로브","=q2=그늘매듭 손목보호구","=q2=그늘매듭 장갑","=q2=그늘매듭 허리띠","=q2=그늘매듭 다리보호구","=q2=그늘매듭 장화"})
|
||||
process("TailoringFrostsavageBattlegear",9,{"","=q3=야만의 서리 두건","=q3=야만의 서리 어깨보호구","=q3=야만의 서리 로브","=q3=야만의 서리 팔보호구","=q3=야만의 서리 장갑","=q3=야만의 서리 허리띠","=q3=야만의 서리 다리보호구","=q3=야만의 서리 장화"})
|
||||
process("TailoringFrostwovenPower",9,{"","=q2=서리장식 두건","=q2=서리장식 어깨보호구","=q2=서리장식 로브","=q2=서리장식 손목보호구","=q2=서리장식 장갑","=q2=서리장식 허리띠","=q2=서리장식 다리보호구","=q2=서리장식 장화"})
|
||||
process("TailoringImbuedNeather",5,{"","=q3=마력 깃든 황천매듭 튜닉","=q3=마력 깃든 황천매듭 로브","=q3=마력 깃든 황천매듭 바지","=q3=마력 깃든 황천매듭 장화"})
|
||||
process("TailoringNeatherVest",8,{"","=q2=황천매듭 튜닉","=q2=황천매듭 로브","=q2=황천매듭 팔보호구","=q2=황천매듭 장갑","=q2=황천매듭 허리띠","=q2=황천매듭 바지","=q2=황천매듭 장화"})
|
||||
process("TailoringPrimalMoon",4,{"","=q4=태초의 달빛매듭 어깨보호대","=q4=태초의 달빛매듭 로브","=q4=태초의 달빛매듭 허리띠"})
|
||||
process("TailoringShadowEmbrace",4,{"","=q4=얼어붙은 그림자매듭 어깨보호구","=q4=얼어붙은 그림자매듭 로브","=q4=얼어붙은 그림자매듭 장화"})
|
||||
process("TailoringSoulclothEm",4,{"","=q4=영혼매듭 어깨보호구","=q4=영혼매듭 조끼","=q4=영혼매듭 장갑"})
|
||||
process("TailoringSpellfireWrath",4,{"","=q4=마법불꽃 로브","=q4=마법불꽃 장갑","=q4=마법불꽃 허리띠"})
|
||||
process("TailoringSpellstrikeInfu",3,{"","=q4=마법 강타의 두건","=q4=마법 강타의 바지"})
|
||||
process("TailoringTheUnyielding",3,{"","=q3=불굴의 팔보호구","=q4=불굴의 벨트"})
|
||||
process("TailoringWhitemendWis",3,{"","=q4=백마법 두건","=q4=백마법 바지"})
|
||||
elseif locale == "ruRU" then
|
||||
process("BlacksmithingMailBloodsoulEmbrace",4,{"","=q3=Наплечники кровавого духа","=q3=Кираса кровавого духа","=q3=Рукавицы кровавого духа"})
|
||||
process("BlacksmithingMailFelIronChain",5,{"","=q2=Плетеный капюшон из оскверненного железа","=q2=Плетеный мундир из оскверненного железа","=q2=Плетеные наручи из оскверненного железа","=q2=Плетеные перчатки из оскверненного железа"})
|
||||
process("BlacksmithingPlateAdamantiteB",4,{"","=q3=Адамантитовая кираса","=q3=Адамантитовые латные наручи","=q3=Адамантитовые латные перчатки"})
|
||||
process("BlacksmithingPlateBurningRage",5,{"","=q3=Шлем из яростной стали","=q3=Наплечники из яростной стали","=q3=Кираса из яростной стали","=q3=Перчатки из яростной стали"})
|
||||
process("BlacksmithingPlateEnchantedAdaman",5,{"","=q3=Зачарованная адамантитовая кираса","=q3=Зачарованный адамантитовый пояс","=q3=Зачарованные адамантитовые поножи","=q3=Зачарованные адамантитовые сапоги"})
|
||||
process("BlacksmithingPlateFaithFelsteel",4,{"","=q3=Шлем из оскверненной стали","=q3=Перчатки из оскверненной стали","=q3=Поножи из оскверненной стали"})
|
||||
process("BlacksmithingPlateFelIronPlate",6,{"","=q2=Кираса из оскверненного железа","=q2=Латные перчатки из оскверненного железа","=q2=Латный пояс из оскверненного железа","=q2=Латные набедренники из оскверненного железа","=q2=Латные сапоги из оскверненного железа"})
|
||||
process("BlacksmithingPlateFlameG",5,{"","=q3=Шлем огненной гибели","=q3=Кираса огненной гибели","=q3=Наручи огненной гибели","=q3=Перчатки огненной гибели"})
|
||||
process("BlacksmithingPlateImperialPlate",8,{"","=q2=Императорский латный шлем","=q2=Императорские латные наплечники","=q2=Имперское зерцало","=q2=Императорские латные наручи","=q2=Императорский латный пояс","=q2=Императорские латные поножи","=q2=Императорские латные сапоги"})
|
||||
process("BlacksmithingPlateKhoriumWard",4,{"","=q3=Кориевый пояс","=q3=Кориевые штаны","=q3=Кориевые сапоги"})
|
||||
process("BlacksmithingPlateOrnateSaroniteBattlegear",9,{"","=q3=Изысканный саронитовый шлем","=q3=Изысканное саронитовое наплечье","=q3=Изысканный саронитовый хауберк","=q3=Изысканные саронитовые наручи","=q3=Изысканные саронитовые рукавицы","=q3=Изысканный саронитовый воинский пояс","=q3=Изысканные саронитовые ножные латы","=q3=Изысканные саронитовые сапоги"})
|
||||
process("BlacksmithingPlateSavageSaroniteBattlegear",9,{"","=q3=Саронитовый шлем свирепости","=q3=Саронитовое наплечье свирепости","=q3=Саронитовый хауберк свирепости","=q3=Саронитовые наручи свирепости","=q3=Саронитовые рукавицы свирепости","=q3=Саронитовый воинский пояс свирепости","=q3=Саронитовые ножные латы свирепости","=q3=Саронитовые сапоги свирепости"})
|
||||
process("BlacksmithingPlateTheDarksoul",4,{"","=q3=Наплечники темного духа","=q3=Кираса темного духа","=q3=Поножи темного духа"})
|
||||
process("CookingDaily1",6,{"=q3=Рецепт: вкусный шоколадный торт","=q3=Рецепт: буреветчина","=q2=Рецепт: жареный афиохаракс","=q2=Рецепт: \"Кит и кот\"","=q2=Рецепт: суп из рыбы-черепа","=q2=Рецепт: острый стейк из талбука"})
|
||||
process("CookingDaily2",27,{"=q2=Рецепт: копченая рыба-ангел","=q2=Рецепт: подкопченный стейк из ворга","=q2=Рецепт: корм для зверька","=q2=Рецепт: жареная каракатица","=q2=Рецепт: филе дракоперой рыбы-ангела","=q2=Рецепт: лосось с дымком","=q2=Рецепт: сочное мясо люторога","=q2=Рецепт: стейк из королевского ската","=q2=Рецепт: сытное кушанье из мамонта","=q2=Рецепт: сочные сосиски из люторога","=q2=Рецепт: печеный северный подкаменщик","=q2=Рецепт: люторожий змеестейк","=q2=Рецепт: луциан особого приготовления","=q2=Рецепт: пряное лакомство из мамонта","=q2=Рецепт: котлета из змея с пряностями","=q2=Рецепт: синяя медуза с пряностями","=q2=Рецепт: острая жареная сельдь","=q2=Рецепт: нежный стейк из черпорога","=q2=Рецепт: завтрак следопыта","=q2=Рецепт: пережаренное мясо ворга","=q3=Поварской колпак","=q1=Северные пряности","","=q3=Рецепт: вкусный шоколадный торт","=q3=Рецепт: буреветчина","=q1=Детская приправа","=q1=Выдержанные специи"})
|
||||
process("CraftedWeapons1",24,{"=q4=Грань Тьмы","","=q4=Чародейский клинок из титановой стали","=q4=Пронзатель из титановой стали","=q4=Костекрушитель из титановой стали","=q4=Булава стража из титановой стали","=q4=Разрушитель из титановой стали","=q4=Осадный щит из титановой стали","","=q4=Бронированный боевой дробовик","=q4=Эрнестуэй 4000","","=q4=Этерниевый рунический клинок","=q4=Погребальный Плач","=q4=Длинный меч из оскверненной стали","=q4=Кориевый защитник","=q4=Боевой топор с кромкой Скверны","=q4=Жнец из оскверненной стали","=q4=Рука Вечности","=q4=Рунический молот","=q4=Закаленная Скверной кувалда","=q4=Молот праведной мощи","","=q4=Гиро-балансированный кориевый Разрушитель"})
|
||||
process("CraftedWeapons2",13,{"","=q4=Черное прощение","=q4=Клинок мудреца","=q4=Черный Страж","=q4=Сумерки","=q4=Эбеновая рука","=q4=Увещеватель","=q4=Сульфуронский молот","=q4=Черное Неистовство","=q4=Звездчатый обсидиановый щит","","=q4=Снайперская винтовка недр","=q4=Реактивный диск"})
|
||||
process("CraftedWeapons3",21,{"","=q4=Огненный страж","=q4=Пылкий страж","=q4=Пылкое неистовство","=q4=Клинок Львиного сердца","=q4=Защитник Львиного сердца","=q4=Палач Львиного сердца","","=q4=Плоскостная кромка","=q4=Черная плоскостная кромка","=q4=Гибельный край миров","=q4=Лунный Серп","=q4=Лунный колун","=q4=Кровавая луна","","=q4=Молот Драконьей длани","=q4=Драконья Пасть","=q4=Драконий удар","=q4=Гром","=q4=Глубокий гром","=q4=Штормовестник"})
|
||||
process("FishingDaily1",17,{"=q4=Другое кольцо","=q3=Видавшая виды рыболовная шапка","=q3=Ведро Проглота","=q3=Ведро со смердыхом","=q3=Ведро Ворчуна","=q3=Ведро с Зубастиком","=q3=Глаз Моря","=q2=Рецепт: светлое пиво капитана Ромси","=q2=Крученая рыболовная леска из истинного серебра","=q1=Монокль аристократа","=q1=Старинные серебряные запонки","=q1=Золотое обручальное кольцо","=q1=Узорчатая пивная кружка","=q1=Острый как бритва разделочный нож","=q1=Истрепанный журнал","=q1=Эликсир хождения по воде","=q1=Заостренный рыболовный крючок"})
|
||||
process("FishingDaily2",23,{"=q4=Рельефный самоцвет бури","=q4=Сверкающий самоцвет бури","=q4=Изысканный самоцвет бури","=q4=Прочный самоцвет бури","=q4=Рунический самоцвет бури","=q4=Цельный самоцвет бури","=q4=Искрящийся самоцвет бури","=q3=Видавшая виды рыболовная шапка","=q3=Костяная удочка","=q3=Удочка со стразами","=q3=Береговой краб","=q3=Слеза Сирены","=q3=Маленький титановый ящичек","=q2=Рецепт: светлое пиво капитана Ромси","=q2=Сверхпрочная этерниевая леска","=q1=Поношенная тропическая шляпа","=q1=Трость с алмазным набалдашником","=q1=Светлячок","=q1=Необычный компас","=q1=Карломасло","=q1=Эликсир хождения по воде","=q1=Запечатанный фиал с ядом","=q1=Промокший рецепт"})
|
||||
process("JewelDragonsEye1",19,{"","","","","","","","","","","","","","","","","","","=q3=Око Дракона"})
|
||||
process("JewelcraftingDaily1",19,{"=q3=Эскиз: рельефный багровый рубин","=q3=Эскиз: яркий багровый рубин","=q3=Эскиз: изысканный багровый рубин","=q3=Эскиз: блистательный багровый рубин","=q3=Эскиз: растрескавшийся багровый рубин","=q3=Эскиз: ясный багровый рубин","=q3=Эскиз: рунический багровый рубин","=q3=Эскиз: изящный багровый рубин","=q3=Эскиз: рельефный алый рубин","=q3=Эскиз: изысканный алый рубин","=q3=Эскиз: блистательный алый рубин","=q3=Эскиз: сверкающий царский янтарь","=q3=Эскиз: мистический царский янтарь","=q3=Эскиз: мягкий царский янтарь","=q3=Эскиз: прочный царский янтарь","=q3=Эскиз: гладкий царский янтарь","=q3=Эскиз: матовый царский янтарь","=q3=Эскиз: мимолетное сияние осени","=q3=Эскиз: яркое сияние осени"})
|
||||
process("JewelcraftingDaily2",28,{"=q3=Эскиз: идеально ограненный аметрин","=q3=Эскиз: аметрин защитника","=q3=Эскиз: смертоносный аметрин","=q3=Эскиз: аметрин проворства","=q3=Эскиз: надежный аметрин","=q3=Эскиз: наделенный силой аметрин","=q3=Эскиз: гравированный аметрин","=q3=Эскиз: броский аметрин","=q3=Эскиз: мерцающий аметрин","=q3=Эскиз: блистающий аметрин","=q3=Эскиз: покрытый письменами аметрин","=q3=Эскиз: прозрачный аметрин","=q3=Эскиз: светоносный аметрин","=q3=Эскиз: могущественный аметрин","=q3=Эскиз: нетронутый аметрин","=q3=Эскиз: тревожный аметрин","=q3=Эскиз: затвердевший аметрин","=q3=Эскиз: глянцевый аметрин","=q3=Эскиз: стойкий аметрин","=q3=Эскиз: застывший аметрин","=q3=Эскиз: сокрытый аметрин","=q3=Эскиз: гибельный аметрин","=q3=Эскиз: блистающий королевский топаз","=q3=Эскиз: светоносный королевский топаз","=q3=Эскиз: могущественный королевский топаз","=q3=Эскиз: тревожный королевский топаз","=q3=Эскиз: застывший королевский топаз","=q3=Эскиз: сокрытый королевский топаз"})
|
||||
process("JewelcraftingDaily3",26,{"=q3=Эскиз: ослепительное око Зула","=q3=Эскиз: отверделое око Зула","=q3=Эскиз: усиленное око Зула","=q3=Эскиз: мощное око Зула","=q3=Эскиз: замысловатое око Зула","=q3=Эскиз: зазубренное око Зула","=q3=Эскиз: лучистое око Зула","=q3=Эскиз: смутное око Зула","=q3=Эскиз: непрозрачное око Зула","=q3=Эскиз: светозарное око Зула","=q3=Эскиз: око Зула провидца","=q3=Эскиз: раздробленное око Зула","=q3=Эскиз: сияющее око Зула","=q3=Эскиз: неизменное око Зула","=q3=Эскиз: расколотое око Зула","=q3=Эскиз: плотное око Зула","=q3=Эскиз: вневременное око Зула","=q3=Эскиз: померкшее око Зула","=q3=Эскиз: насыщенное око Зула","=q3=Эскиз: отверделый лесной изумруд","=q3=Эскиз: заряженный лесной изумруд","=q3=Эскиз: мощный лесной изумруд","=q3=Эскиз: замысловатый лесной изумруд","=q3=Эскиз: лучистый лесной изумруд","=q3=Эскиз: лесной изумруд провидца","=q3=Эскиз: насыщенный лесной изумруд"})
|
||||
process("JewelcraftingDaily4",16,{"=q3=Эскиз: сбалансированный страхолит","=q3=Эскиз: страхолит защитника","=q3=Эскиз: светящийся страхолит","=q3=Эскиз: страхолит стража","=q3=Эскиз: заряженный страхолит","=q3=Эскиз: таинственный страхолит","=q3=Эскиз: всевластный страхолит","=q3=Эскиз: очищенный страхолит","=q3=Эскиз: монарший страхолит","=q3=Эскиз: королевский страхолит","=q3=Эскиз: изменчивый страхолит","=q3=Эскиз: царственный страхолит","=q3=Эскиз: непрочный страхолит","=q3=Эскиз: всевластный сумеречный опал","=q3=Эскиз: монарший сумеречный опал","=q3=Эскиз: королевский сумеречный опал"})
|
||||
process("JewelcraftingDaily5",14,{"=q3=Эскиз: блестящий величественный циркон","=q3=Эскиз: цельный величественный циркон","=q3=Эскиз: искрящийся величественный циркон","=q3=Эскиз: грозовой величественный циркон","=q3=Эскиз: блестящий небесный сапфир","=q3=Эскиз: твердый небесный сапфир","=q3=Эскиз: хаотический алмаз небесного сияния","=q3=Эскиз: лучезарный алмаз небесного сияния","=q3=Эскиз: тлеющий алмаз небесного сияния","=q3=Эскиз: провидческий алмаз землеправителя","=q3=Эскиз: живительный алмаз землеправителя","=q3=Эскиз: алмаз жестокого землеправителя","=q3=Эскиз: оживляющий алмаз небесного сияния","=q3=Эскиз: заостренный алмаз землеправителя"})
|
||||
process("JewelcraftingDaily6",24,{"=q3=Эскиз: рельефное око дракона","=q3=Эскиз: яркое око дракона","=q3=Эскиз: сверкающее око дракона","=q3=Эскиз: изысканное око дракона","=q3=Эскиз: блистательное око дракона","=q3=Эскиз: растрескавшееся око дракона","=q3=Эскиз: блестящее око дракона","=q3=Эскиз: мистическое око дракона","=q3=Эскиз: ясное око дракона","=q3=Эскиз: быстрое око дракона","=q3=Эскиз: твердое око дракона","=q3=Эскиз: руническое око дракона","=q3=Эскиз: гладкое око дракона","=q3=Эскиз: твердое око дракона","=q3=Эскиз: искрящееся око дракона","=q3=Эскиз: грозовое око дракона","=q3=Эскиз: изящное око дракона","=q3=Эскиз: матовое око дракона","=q4=Эскиз: титановая цепь стража земли","=q4=Эскиз: титановое кольцо стража земли","=q4=Эскиз: титановое кольцо сотрясения","=q4=Эскиз: титановое колье сотрясения","=q4=Эскиз: титановое ожерелье чародейского удара","=q4=Эскиз: титановое кольцо чародейского удара"})
|
||||
process("LeatherworkingLeatherBloodTigerH",3,{"","=q3=Наплечники кровавого тигра","=q3=Кираса кровавого тигра"})
|
||||
process("LeatherworkingLeatherBoreanEmbrace",9,{"","=q2=Арктический шлем","=q2=Арктические наплечные пластины","=q2=Арктический нагрудник","=q2=Арктические накулачники","=q2=Арктические перчатки","=q2=Арктический пояс","=q2=Арктические поножи","=q2=Арктические сапоги"})
|
||||
process("LeatherworkingLeatherDevilsaurArmor",3,{"","=q3=Рукавицы девизавра","=q3=Поножи девизавра"})
|
||||
process("LeatherworkingLeatherEvisceratorBattlegear",9,{"","=q3=Маска потрошителя","=q3=Наплечные пластины потрошителя","=q3=Нагрудный доспех потрошителя","=q3=Наручники потрошителя","=q3=Рукавицы потрошителя","=q3=Воинский пояс потрошителя","=q3=Набедренники потрошителя","=q3=Ботфорты потрошителя"})
|
||||
process("LeatherworkingLeatherFelSkin",4,{"","=q3=Перчатки из сквернокожи","=q3=Поножи из сквернокожи","=q3=Сапоги из сквернокожи"})
|
||||
process("LeatherworkingLeatherIceborneEmbrace",9,{"","=q2=Шлем жителя льдов","=q2=Наплечные пластины жителя льдов","=q2=Нагрудный доспех жителя льдов","=q2=Накулачники жителя льдов","=q2=Перчатки жителя льдов","=q2=Пояс жителя льдов","=q2=Поножи жителя льдов","=q2=Сапоги жителя льдов"})
|
||||
process("LeatherworkingLeatherIronfeatherArmor",3,{"","=q3=Железноперые наплечники","=q3=Железноперая кираса"})
|
||||
process("LeatherworkingLeatherOvercasterBattlegear",9,{"","=q3=Наголовник угрюмости","=q3=Наплеч угрюмости","=q3=Нагрудный доспех угрюмости","=q3=Наручи угрюмости","=q3=Повязки угрюмости","=q3=Пояс угрюмости","=q3=Поножи угрюмости","=q3=Сапоги угрюмости"})
|
||||
process("LeatherworkingLeatherPrimalBatskin",4,{"","=q3=Жакет из кожи древней летучей мыши","=q3=Наручи из кожи древней летучей мыши","=q3=Перчатки из кожи древней летучей мыши"})
|
||||
process("LeatherworkingLeatherPrimalIntent",4,{"","=q4=Жилет упреждающего удара","=q4=Наручи упреждающего удара","=q4=Пояс упреждающего удара"})
|
||||
process("LeatherworkingLeatherSClefthoof",4,{"","=q3=Тяжелый панцирь из шкуры копытня","=q3=Тяжелые поножи из шкуры копытня","=q3=Тяжелые сапоги из шкуры копытня"})
|
||||
process("LeatherworkingLeatherStormshroudArmor",5,{"","=q3=Наплечники Грозового Покрова","=q3=Доспех Грозового Покрова","=q3=Перчатки Грозового Покрова","=q3=Штаны Грозового Покрова"})
|
||||
process("LeatherworkingLeatherThickDraenicA",5,{"","=q2=Утолщенная дренейская безрукавка","=q2=Утолщенные дренейские перчатки","=q2=Утолщенные дренейские штаны","=q2=Утолщенные дренейские сапоги"})
|
||||
process("LeatherworkingLeatherVolcanicArmor",4,{"","=q2=Вулканические наплечники","=q2=Вулканическая кираса","=q2=Вулканические поножи"})
|
||||
process("LeatherworkingLeatherWildDraenishA",5,{"","=q2=Жилет дренейского дикаря","=q2=Перчатки дренейского дикаря","=q2=Поножи дренейского дикаря","=q2=Сапоги дренейского дикаря"})
|
||||
process("LeatherworkingLeatherWindhawkArmor",4,{"","=q4=Хауберк легкокрылого ястреба","=q4=Наручи легкокрылого ястреба","=q4=Пояс легкокрылого ястреба"})
|
||||
process("LeatherworkingMailBlackDragonM",5,{"","=q3=Наплечники из чешуи черного дракона","=q3=Кираса из чешуи черного дракона","=q3=Поножи из чешуи черного дракона","=q4=Сапоги из чешуи черного дракона"})
|
||||
process("LeatherworkingMailBlueDragonM",4,{"","=q3=Наплечники из чешуи синего дракона","=q3=Кираса из чешуи синего дракона","=q3=Поножи из чешуи синего дракона"})
|
||||
process("LeatherworkingMailFelscaleArmor",5,{"","=q2=Скверночешуйчатая кираса","=q2=Скверночешуйчатые перчатки","=q2=Скверночешуйчатые штаны","=q2=Скверночешуйчатые сапоги"})
|
||||
process("LeatherworkingMailFelstalkerArmor",4,{"","=q3=Кираса ловца Скверны","=q3=Наручи ловца Скверны","=q3=Пояс ловца Скверны"})
|
||||
process("LeatherworkingMailFrostscaleBinding",9,{"","=q2=Шлем из обмерзшей чешуи","=q2=Наплечники из обмерзшей чешуи","=q2=Нагрудный доспех из обмерзшей чешуи","=q2=Наручи из обмерзшей чешуи","=q2=Перчатки из обмерзшей чешуи","=q2=Пояс из обмерзшей чешуи","=q2=Поножи из обмерзшей чешуи","=q2=Сапоги из обмерзшей чешуи"})
|
||||
process("LeatherworkingMailGreenDragonM",4,{"","=q3=Кираса из чешуи зеленого дракона","=q3=Рукавицы из чешуи зеленого дракона","=q3=Поножи из чешуи зеленого дракона"})
|
||||
process("LeatherworkingMailNerubianHive",9,{"","=q2=Нерубский шлем","=q2=Нерубские наплечники","=q2=Нерубский нагрудный доспех","=q2=Нерубские наручи","=q2=Нерубские перчатки","=q2=Нерубский пояс","=q2=Нерубские поножи","=q2=Нерубские сапоги"})
|
||||
process("LeatherworkingMailNetherFury",4,{"","=q3=Пояс неистовства пустоты","=q3=Поножи неистовства пустоты","=q3=Сапоги неистовства пустоты"})
|
||||
process("LeatherworkingMailNetherscaleArmor",4,{"","=q4=Черная кираса из чешуи дракона Пустоты","=q4=Черные наручи из чешуи дракона Пустоты","=q4=Черный пояс из чешуи дракона Пустоты"})
|
||||
process("LeatherworkingMailNetherstrikeArmor",4,{"","=q4=Кираса удара Пустоты","=q4=Наручи удара Пустоты","=q4=Пояс удара Пустоты"})
|
||||
process("LeatherworkingMailScaledDraenicA",5,{"","=q2=Чешуйчатая дренейская безрукавка","=q2=Чешуйчатые дренейские перчатки","=q2=Чешуйчатые дренейские штаны","=q2=Чешуйчатые дренейские сапоги"})
|
||||
process("LeatherworkingMailStormhideBattlegear",9,{"","=q3=Корона штормового укрытия","=q3=Наплечники штормового укрытия","=q3=Хауберк штормового укрытия","=q3=Накулачники штормового укрытия","=q3=Захваты штормового укрытия","=q3=Пояс штормового укрытия","=q3=Набедренники штормового укрытия","=q3=Высокие ботинки штормового укрытия"})
|
||||
process("LeatherworkingMailSwiftarrowBattlefear",9,{"","=q3=Шлем быстрой стрелы","=q3=Наплечные щитки быстрой стрелы","=q3=Хауберк быстрой стрелы","=q3=Наручи быстрой стрелы","=q3=Рукавицы быстрой стрелы","=q3=Пояс быстрой стрелы","=q3=Поножи быстрой стрелы","=q3=Сапоги быстрой стрелы"})
|
||||
process("TailoringArcanoVest",4,{"","=q3=Одеяние из тайной ткани","=q3=Наручи из тайной ткани","=q3=Сапоги из тайной ткани"})
|
||||
process("TailoringBattlecastG",3,{"","=q4=Капюшон боевого заклятья","=q4=Штаны боевого заклятья"})
|
||||
process("TailoringBloodvineG",4,{"","=q3=Жилет кровавой лозы","=q3=Поножи кровавой лозы","=q3=Сапоги кровавой лозы"})
|
||||
process("TailoringDuskweaver",9,{"","=q2=Клобук из сумеречной ткани","=q2=Наплечники из сумеречной ткани","=q2=Одеяние из сумеречной ткани","=q2=Напульсники из сумеречной ткани","=q2=Перчатки из сумеречной ткани","=q2=Пояс из сумеречной ткани","=q2=Поножи из сумеречной ткани","=q2=Сапоги из сумеречной ткани"})
|
||||
process("TailoringFrostsavageBattlegear",9,{"","=q3=Клобук ледяной ярости","=q3=Наплечники ледяной ярости","=q3=Одеяние ледяной ярости","=q3=Наручи ледяной ярости","=q3=Перчатки ледяной ярости","=q3=Пояс ледяной ярости","=q3=Поножи ледяной ярости","=q3=Сапоги ледяной ярости"})
|
||||
process("TailoringFrostwovenPower",9,{"","=q2=Ледотканый шлем","=q2=Ледотканые наплечники","=q2=Ледотканое одеяние","=q2=Ледотканые напульсники","=q2=Ледотканые перчатки","=q2=Ледотканый пояс","=q2=Ледотканые поножи","=q2=Ледотканые сапоги"})
|
||||
process("TailoringImbuedNeather",5,{"","=q3=Мундир из прочной ткани Пустоты","=q3=Одеяние из прочной ткани Пустоты","=q3=Штаны из прочной ткани Пустоты","=q3=Сапоги из прочной ткани Пустоты"})
|
||||
process("TailoringNeatherVest",8,{"","=q2=Мундир из ткани Пустоты","=q2=Одеяние из ткани Пустоты","=q2=Наручи из ткани Пустоты","=q2=Перчатки из ткани Пустоты","=q2=Пояс из ткани Пустоты","=q2=Штаны из ткани Пустоты","=q2=Сапоги из ткани Пустоты"})
|
||||
process("TailoringPrimalMoon",4,{"","=q4=Наплечники из изначальной луноткани","=q4=Одеяние из изначальной луноткани","=q4=Пояс из изначальной луноткани"})
|
||||
process("TailoringShadowEmbrace",4,{"","=q4=Застывшие тенетканые наплечники","=q4=Застывшее тенетканое одеяние","=q4=Застывшие тенетканые сапоги"})
|
||||
process("TailoringSoulclothEm",4,{"","=q4=Наплечники из ткани Душ","=q4=Жилет из ткани Душ","=q4=Перчатки из ткани Душ"})
|
||||
process("TailoringSpellfireWrath",4,{"","=q4=Одеяние из огненной чароткани","=q4=Перчатки из огненной чароткани","=q4=Пояс из огненной чароткани"})
|
||||
process("TailoringSpellstrikeInfu",3,{"","=q4=Капюшон сокрушительной магии","=q4=Штаны сокрушительной магии"})
|
||||
process("TailoringTheUnyielding",3,{"","=q3=Наручи непреклонности","=q4=Ремень Непреклонности"})
|
||||
process("TailoringWhitemendWis",3,{"","=q4=Капюшон белого целителя","=q4=Штаны Белого целителя"})
|
||||
end
|
||||
@@ -1,994 +0,0 @@
|
||||
local AL = LibStub("AceLocale-3.0"):GetLocale("AtlasLoot");
|
||||
local BabbleBoss = AtlasLoot_GetLocaleLibBabble("LibBabble-Boss-3.0")
|
||||
local BabbleInventory = AtlasLoot_GetLocaleLibBabble("LibBabble-Inventory-3.0")
|
||||
local BabbleFaction = AtlasLoot_GetLocaleLibBabble("LibBabble-Faction-3.0")
|
||||
local BabbleZone = AtlasLoot_GetLocaleLibBabble("LibBabble-Zone-3.0")
|
||||
local HORDE = {"|cffff0000","Horde"}
|
||||
local ALLIANCE = {"|cff1eff00", "Alliance"}
|
||||
local NEUTRAL = {"|cffFF8400", "Neutral"}
|
||||
local WHITE = "|cffFFFFFF"
|
||||
|
||||
AtlasLoot_CraftingData["VendorList"] = {
|
||||
[66] = { AL["Tharynn Bouden"], BabbleZone["Elwynn Forest"], 41.9, 67.1, ALLIANCE},
|
||||
[340] = { AL["Kendor Kabonka"], BabbleZone["Stormwind City"], 77.5, 53.5, ALLIANCE},
|
||||
[734] = { AL["Corporal Bluth"], BabbleZone["Stranglethorn Vale"], 38.0, 3.0, ALLIANCE},
|
||||
[777] = { AL["Amy Davenport"], BabbleZone["Redridge Mountains"], 29.1, 47.5, ALLIANCE},
|
||||
[843] = { AL["Gina MacGregor"], BabbleZone["Westfall"], 57.6, 54.0, ALLIANCE},
|
||||
[989] = { AL["Banalash"], BabbleZone["Swamp of Sorrows"], 44.7, 56.7, HORDE},
|
||||
[1146] = { AL["Vharr"], BabbleZone["Stranglethorn Vale"], 32.3, 28.0, HORDE},
|
||||
[1148] = { AL["Nerrist"], BabbleZone["Stranglethorn Vale"], 32.7, 29.2, HORDE},
|
||||
[1149] = { AL["Uthok"], BabbleZone["Stranglethorn Vale"], 31.6, 28.0, HORDE},
|
||||
[1250] = { AL["Drake Lindgren"], BabbleZone["Elwynn Forest"], 83.3, 66.7, ALLIANCE},
|
||||
[1286] = { AL["Edna Mullby"], BabbleZone["Stormwind City"], 64.6, 71.5, ALLIANCE},
|
||||
[1313] = { AL["Maria Lumere"], BabbleZone["Stormwind City"], 55.7, 85.5, ALLIANCE},
|
||||
[1318] = { AL["Jessara Cordell"], BabbleZone["Stormwind City"], 53.0, 74.2, ALLIANCE},
|
||||
[1347] = { AL["Alexandra Bolero"], BabbleZone["Stormwind City"], 53.3, 81.7, ALLIANCE},
|
||||
[1448] = { AL["Neal Allen"], BabbleZone["Wetlands"], 10.7, 56.8, ALLIANCE},
|
||||
[1454] = { AL["Jennabink Powerseam"], BabbleZone["Wetlands"], 8.1, 55.9, ALLIANCE},
|
||||
[1465] = { AL["Drac Roughcut"], BabbleZone["Loch Modan"], 35.6, 49.0, ALLIANCE},
|
||||
[1471] = { AL["Jannos Ironwill"], BabbleZone["Arathi Highlands"], 46.0, 47.7, ALLIANCE},
|
||||
[1474] = { AL["Rann Flamespinner"], BabbleZone["Loch Modan"], 36.0, 46.0, ALLIANCE},
|
||||
[1669] = { AL["Defias Profiteer"], BabbleZone["Westfall"], 43.5, 66.9, NEUTRAL},
|
||||
[1684] = { AL["Khara Deepwater"], BabbleZone["Loch Modan"], 39.5, 39.3, ALLIANCE},
|
||||
[1685] = { AL["Xandar Goodbeard"], BabbleZone["Loch Modan"], 82.5, 63.5, ALLIANCE},
|
||||
[2118] = { AL["Abigail Shiel"], BabbleZone["Tirisfal Glades"], 61.0, 52.5, HORDE},
|
||||
[2380] = { AL["Nandar Branson"], BabbleZone["Hillsbrad Foothills"], 50.9, 57.1, ALLIANCE},
|
||||
[2381] = { AL["Micha Yance"], BabbleZone["Hillsbrad Foothills"], 49.0, 55.1, ALLIANCE},
|
||||
[2383] = { AL["Lindea Rabonne"], BabbleZone["Hillsbrad Foothills"], 50.6, 61.0, ALLIANCE},
|
||||
[2393] = { AL["Christoph Jeffcoat"], BabbleZone["Hillsbrad Foothills"], 62.4, 19.1, HORDE},
|
||||
[2394] = { AL["Mallen Swain"], BabbleZone["Hillsbrad Foothills"], 62.0, 20.9, HORDE},
|
||||
[2397] = { AL["Derak Nightfall"], BabbleZone["Hillsbrad Foothills"], 63.0, 18.5, HORDE},
|
||||
[2480] = { AL["Bro'kin"], BabbleZone["Alterac Mountains"], 38.3, 38.8, NEUTRAL},
|
||||
[2481] = { AL["Bliztik"], BabbleZone["Duskwood"], 18.0, 54.5, NEUTRAL},
|
||||
[2482] = { AL["Zarena Cromwind"], BabbleZone["Stranglethorn Vale"], 28.4, 75.5, NEUTRAL},
|
||||
[2483] = { AL["Jaquilina Dramet"], BabbleZone["Stranglethorn Vale"], 35.7, 10.7, NEUTRAL},
|
||||
[2663] = { AL["Narkk"], BabbleZone["Stranglethorn Vale"], 28.2, 74.5, NEUTRAL},
|
||||
[2664] = { AL["Kelsey Yance"], BabbleZone["Stranglethorn Vale"], 28.2, 74.4, NEUTRAL},
|
||||
[2668] = { AL["Danielle Zipstitch"], BabbleZone["Duskwood"], 75.8, 45.5, ALLIANCE},
|
||||
[2669] = { AL["Sheri Zipstitch"], BabbleZone["Duskwood"], 75.7, 45.5, ALLIANCE},
|
||||
[2670] = { AL["Xizk Goodstitch"], BabbleZone["Stranglethorn Vale"], 28.7, 76.8, NEUTRAL},
|
||||
[2672] = { AL["Cowardly Crosby"], BabbleZone["Stranglethorn Vale"], 27.0, 82.5, NEUTRAL},
|
||||
[2679] = { AL["Wenna Silkbeard"], BabbleZone["Wetlands"], 25.7, 25.8, ALLIANCE},
|
||||
[2682] = { AL["Fradd Swiftgear"], BabbleZone["Wetlands"], 26.4, 25.8, ALLIANCE},
|
||||
[2683] = { AL["Namdo Bizzfizzle"], BabbleZone["Gnomeregan"], 0, 0, ALLIANCE},
|
||||
[2684] = { AL["Rizz Loosebolt"], BabbleZone["Alterac Mountains"], 47.4, 35.3, NEUTRAL},
|
||||
[2685] = { AL["Mazk Snipeshot"], BabbleZone["Stranglethorn Vale"], 28.5, 75.1, NEUTRAL},
|
||||
[2687] = { AL["Gnaz Blunderflame"], BabbleZone["Stranglethorn Vale"], 51.0, 35.3, NEUTRAL},
|
||||
[2688] = { AL["Ruppo Zipcoil"], BabbleZone["The Hinterlands"], 34.3, 37.9, NEUTRAL},
|
||||
[2697] = { AL["Clyde Ranthal"], BabbleZone["Redridge Mountains"], 88.9, 70.9, ALLIANCE},
|
||||
[2698] = { AL["George Candarte"], BabbleZone["Hillsbrad Foothills"], 92.0, 38.4, HORDE},
|
||||
[2699] = { AL["Rikqiz"], BabbleZone["Stranglethorn Vale"], 28.5, 76.0, NEUTRAL},
|
||||
[2803] = { AL["Malygen"], BabbleZone["Felwood"], 62.3, 25.6, ALLIANCE},
|
||||
[2806] = { AL["Bale"], BabbleZone["Felwood"], 34.8, 53.1, HORDE},
|
||||
[2810] = { AL["Hammon Karwn"], BabbleZone["Arathi Highlands"], 46.5, 47.3, ALLIANCE},
|
||||
[2812] = { AL["Drovnar Strongbrew"], BabbleZone["Arathi Highlands"], 46.4, 47.1, ALLIANCE},
|
||||
[2814] = { AL["Narj Deepslice"], BabbleZone["Arathi Highlands"], 45.6, 47.6, ALLIANCE},
|
||||
[2816] = { AL["Androd Fadran"], BabbleZone["Arathi Highlands"], 45.0, 46.9, ALLIANCE},
|
||||
[2819] = { AL["Tunkk"], BabbleZone["Arathi Highlands"], 74.8, 34.5, HORDE},
|
||||
[2821] = { AL["Keena"], BabbleZone["Arathi Highlands"], 74.0, 32.7, HORDE},
|
||||
[2838] = { AL["Crazk Sparks"], BabbleZone["Stranglethorn Vale"], 28.3, 76.7, NEUTRAL},
|
||||
[2843] = { AL["Jutak"], BabbleZone["Stranglethorn Vale"], 27.5, 77.5, NEUTRAL},
|
||||
[2846] = { AL["Blixrez Goodstitch"], BabbleZone["Stranglethorn Vale"], 28.2, 77.5, NEUTRAL},
|
||||
[2848] = { AL["Glyx Brewright"], BabbleZone["Stranglethorn Vale"], 28.1, 78.0, NEUTRAL},
|
||||
[3005] = { AL["Mahu"], BabbleZone["Thunder Bluff"], 43.8, 44.6, HORDE},
|
||||
[3012] = { AL["Nata Dawnstrider"], BabbleZone["Thunder Bluff"], 46.5, 38.8, HORDE},
|
||||
[3027] = { AL["Naal Mistrunner"], BabbleZone["Thunder Bluff"], 51.1, 52.2, HORDE},
|
||||
[3029] = { AL["Sewa Mistrunner"], BabbleZone["Thunder Bluff"], 56.0, 47.1, HORDE},
|
||||
[3081] = { AL["Wunna Darkmane"], BabbleZone["Mulgore"], 46.1, 58.2, HORDE},
|
||||
[3085] = { AL["Gloria Femmel"], BabbleZone["Redridge Mountains"], 26.7, 43.5, ALLIANCE},
|
||||
[3134] = { AL["Kzixx"], BabbleZone["Duskwood"], 81.9, 19.9, NEUTRAL},
|
||||
[3178] = { AL["Stuart Fleming"], BabbleZone["Wetlands"], 8.1, 58.4, ALLIANCE},
|
||||
[3333] = { AL["Shankys"], BabbleZone["Orgrimmar"], 69.1, 31.4, HORDE},
|
||||
[3335] = { AL["Hagrus"], BabbleZone["Orgrimmar"], 46.0, 45.9, HORDE},
|
||||
[3346] = { AL["Kithas"], BabbleZone["Orgrimmar"], 53.7, 38.0, HORDE},
|
||||
[3348] = { AL["Kor'geld"], BabbleZone["Orgrimmar"], 56.1, 35.8, HORDE},
|
||||
[3364] = { AL["Borya"], BabbleZone["Orgrimmar"], 63.0, 51.2, HORDE},
|
||||
[3366] = { AL["Tamar"], BabbleZone["Orgrimmar"], 63.0, 45.3, HORDE},
|
||||
[3367] = { AL["Felika"], BabbleZone["Orgrimmar"], 60.5, 50.7, HORDE},
|
||||
[3392] = { AL["Prospector Khazgorm"], BabbleZone["The Barrens"], 47.4, 84.8, ALLIANCE},
|
||||
[3400] = { AL["Xen'to"], BabbleZone["Orgrimmar"], 57.5, 53.2, HORDE},
|
||||
[3413] = { AL["Sovik"], BabbleZone["Orgrimmar"], 75.6, 25.2, HORDE},
|
||||
[3482] = { AL["Tari'qa"], BabbleZone["The Barrens"], 51.7, 30.1, HORDE},
|
||||
[3485] = { AL["Wrahk"], BabbleZone["The Barrens"], 52.2, 31.7, HORDE},
|
||||
[3489] = { AL["Zargh"], BabbleZone["The Barrens"], 52.6, 29.9, HORDE},
|
||||
[3490] = { AL["Hula'mahi"], BabbleZone["The Barrens"], 51.4, 30.2, HORDE},
|
||||
[3495] = { AL["Gagsprocket"], BabbleZone["The Barrens"], 62.7, 36.3, NEUTRAL},
|
||||
[3497] = { AL["Kilxx"], BabbleZone["The Barrens"], 62.8, 38.2, NEUTRAL},
|
||||
[3499] = { AL["Ranik"], BabbleZone["The Barrens"], 61.9, 38.7, NEUTRAL},
|
||||
[3522] = { AL["Constance Brisboise"], BabbleZone["Tirisfal Glades"], 52.6, 55.7, HORDE},
|
||||
[3537] = { AL["Zixil"], BabbleZone["Hillsbrad Foothills"], 53.5, 38.3, NEUTRAL},
|
||||
[3550] = { AL["Martine Tramblay"], BabbleZone["Tirisfal Glades"], 65.8, 59.7, HORDE},
|
||||
[3556] = { AL["Andrew Hilbert"], BabbleZone["Silverpine Forest"], 43.2, 40.7, HORDE},
|
||||
[3683] = { AL["Kiknikle"], BabbleZone["The Barrens"], 41.8, 38.7, NEUTRAL},
|
||||
[3881] = { AL["Grimtak"], BabbleZone["Durotar"], 51.2, 42.6, HORDE},
|
||||
[3954] = { AL["Dalria"], BabbleZone["Ashenvale"], 35.1, 52.1, ALLIANCE},
|
||||
[3956] = { AL["Harklan Moongrove"], BabbleZone["Ashenvale"], 50.8, 67.0, ALLIANCE},
|
||||
[3958] = { AL["Lardan"], BabbleZone["Ashenvale"], 34.8, 49.8, ALLIANCE},
|
||||
[3960] = { AL["Ulthaan"], BabbleZone["Ashenvale"], 50.0, 66.7, ALLIANCE},
|
||||
[4083] = { AL["Jeeda"], BabbleZone["Stonetalon Mountains"], 47.6, 61.7, HORDE},
|
||||
[4086] = { AL["Veenix"], BabbleZone["Stonetalon Mountains"], 58.3, 51.7, NEUTRAL},
|
||||
[4168] = { AL["Elynna"], BabbleZone["Darnassus"], 64.4, 21.6, ALLIANCE},
|
||||
[4186] = { AL["Mavralyn"], BabbleZone["Darkshore"], 37.0, 41.2, ALLIANCE},
|
||||
[4189] = { AL["Valdaron"], BabbleZone["Darkshore"], 38.1, 40.6, ALLIANCE},
|
||||
[4200] = { AL["Laird"], BabbleZone["Darkshore"], 36.8, 44.3, ALLIANCE},
|
||||
[4223] = { AL["Fyldan"], BabbleZone["Darnassus"], 48.6, 21.4, ALLIANCE},
|
||||
[4225] = { AL["Saenorion"], BabbleZone["Darnassus"], 63.8, 22.1, ALLIANCE},
|
||||
[4226] = { AL["Ulthir"], BabbleZone["Darnassus"], 56.0, 24.6, ALLIANCE},
|
||||
[4228] = { AL["Vaean"], BabbleZone["Darnassus"], 58.5, 14.4, ALLIANCE},
|
||||
[4229] = { AL["Mythrin'dir"], BabbleZone["Darnassus"], 60.0, 19.1, ALLIANCE},
|
||||
[4265] = { AL["Nyoma"], BabbleZone["Teldrassil"], 57.2, 61.2, ALLIANCE},
|
||||
[4305] = { AL["Kriggon Talsone"], BabbleZone["Westfall"], 36.2, 90.1, ALLIANCE},
|
||||
[4307] = { AL["Heldan Galesong"], BabbleZone["Darkshore"], 37.0, 56.3, ALLIANCE},
|
||||
[4553] = { AL["Ronald Burch"], BabbleZone["Undercity"], 62.4, 43.4, HORDE},
|
||||
[4561] = { AL["Daniel Bartlett"], BabbleZone["Undercity"], 64.2, 37.7, HORDE},
|
||||
[4574] = { AL["Lizbeth Cromwell"], BabbleZone["Undercity"], 81.2, 31.0, HORDE},
|
||||
[4577] = { AL["Millie Gregorian"], BabbleZone["Undercity"], 70.8, 29.6, HORDE},
|
||||
[4589] = { AL["Joseph Moore"], BabbleZone["Undercity"], 70.2, 57.8, HORDE},
|
||||
[4610] = { AL["Algernon"], BabbleZone["Undercity"], 51.9, 74.4, HORDE},
|
||||
[4617] = { AL["Thaddeus Webb"], BabbleZone["Undercity"], 62.0, 60.7, HORDE},
|
||||
[4775] = { AL["Felicia Doan"], BabbleZone["Undercity"], 64.3, 50.2, HORDE},
|
||||
[4782] = { AL["Truk Wildbeard"], BabbleZone["The Hinterlands"], 14.4, 42.5, ALLIANCE},
|
||||
[4877] = { AL["Jandia"], BabbleZone["Thousand Needles"], 46.1, 51.5, HORDE},
|
||||
[4878] = { AL["Montarr"], BabbleZone["Thousand Needles"], 45.2, 50.7, HORDE},
|
||||
[4879] = { AL["Ogg'marr"], BabbleZone["Dustwallow Marsh"], 36.7, 31.0, HORDE},
|
||||
[4897] = { AL["Helenia Olden"], BabbleZone["Dustwallow Marsh"], 66.4, 51.5, ALLIANCE},
|
||||
[5128] = { AL["Bombus Finespindle"], BabbleZone["Ironforge"], 39.6, 34.1, ALLIANCE},
|
||||
[5158] = { AL["Tilli Thistlefuzz"], BabbleZone["Ironforge"], 60.7, 44.2, ALLIANCE},
|
||||
[5160] = { AL["Emrul Riknussun"], BabbleZone["Ironforge"], 59.9, 37.7, ALLIANCE},
|
||||
[5162] = { AL["Tansy Puddlefizz"], BabbleZone["Ironforge"], 48.0, 6.3, ALLIANCE},
|
||||
[5163] = { AL["Burbik Gearspanner"], BabbleZone["Ironforge"], 46.5, 27.1, ALLIANCE},
|
||||
[5175] = { AL["Gearcutter Cogspinner"], BabbleZone["Ironforge"], 68.0, 43.1, ALLIANCE},
|
||||
[5178] = { AL["Soolie Berryfizz"], BabbleZone["Ironforge"], 66.6, 54.5, ALLIANCE},
|
||||
[5411] = { AL["Krinkle Goodsteel"], BabbleZone["Tanaris"], 51.5, 28.8, NEUTRAL},
|
||||
[5483] = { AL["Erika Tate"], BabbleZone["Stormwind City"], 78.5, 53.0, ALLIANCE},
|
||||
[5494] = { AL["Catherine Leland"], BabbleZone["Stormwind City"], 55.1, 69.5, ALLIANCE},
|
||||
[5512] = { AL["Kaita Deepforge"], BabbleZone["Stormwind City"], 63.5, 37.6, ALLIANCE},
|
||||
[5594] = { AL["Alchemist Pestlezugg"], BabbleZone["Tanaris"], 50.9, 27.0, NEUTRAL},
|
||||
[5748] = { AL["Killian Sanatha"], BabbleZone["Silverpine Forest"], 33.0, 17.8, HORDE},
|
||||
[5757] = { AL["Lilly"], BabbleZone["Silverpine Forest"], 43.1, 50.8, HORDE},
|
||||
[5758] = { AL["Leo Sarn"], BabbleZone["Silverpine Forest"], 53.9, 82.3, HORDE},
|
||||
[5783] = { AL["Kalldan Felmoon"], BabbleZone["The Barrens"], 46.2, 36.5, NEUTRAL},
|
||||
[5940] = { AL["Harn Longcast"], BabbleZone["Mulgore"], 47.5, 55.1, HORDE},
|
||||
[5942] = { AL["Zansoa"], BabbleZone["Durotar"], 56.1, 73.4, HORDE},
|
||||
[5944] = { AL["Yonada"], BabbleZone["The Barrens"], 45.0, 59.3, HORDE},
|
||||
[6568] = { AL["Vizzklick"], BabbleZone["Tanaris"], 51.0, 27.4, NEUTRAL},
|
||||
[6567] = { AL["Ghok'kah"], BabbleZone["Dustwallow Marsh"], 35.2, 30.8, HORDE},
|
||||
[6574] = { AL["Jun'ha"], BabbleZone["Arathi Highlands"], 72.7, 36.5, HORDE},
|
||||
[6576] = { AL["Brienna Starglow"], BabbleZone["Feralas"], 89.0, 45.9, ALLIANCE},
|
||||
[6730] = { AL["Jinky Twizzlefixxit"], BabbleZone["Thousand Needles"], 77.7, 77.8, NEUTRAL},
|
||||
[6731] = { AL["Harlown Darkweave"], BabbleZone["Ashenvale"], 18.2, 60.0, ALLIANCE},
|
||||
[6777] = { AL["Zan Shivsproket"], BabbleZone["Alterac Mountains"], 86.0, 80.1, NEUTRAL},
|
||||
[6779] = { AL["Smudge Thunderwood"], BabbleZone["Alterac Mountains"], 86.1, 79.7, NEUTRAL},
|
||||
[7733] = { AL["Innkeeper Fizzgrimble"], BabbleZone["Tanaris"], 52.5, 27.9, NEUTRAL},
|
||||
[7852] = { AL["Pratt McGrubben"], BabbleZone["Feralas"], 30.6, 42.7, ALLIANCE},
|
||||
[7854] = { AL["Jangdor Swiftstrider"], BabbleZone["Feralas"], 74.5, 42.9, HORDE},
|
||||
[7940] = { AL["Darnall"], BabbleZone["Moonglade"], 51.6, 33.3, NEUTRAL},
|
||||
[7947] = { AL["Vivianna"], BabbleZone["Feralas"], 31.3, 43.5, ALLIANCE},
|
||||
[8125] = { AL["Dirge Quikcleave"], BabbleZone["Tanaris"], 52.6, 28.1, NEUTRAL},
|
||||
[8131] = { AL["Blizrik Buckshot"], BabbleZone["Tanaris"], 50.8, 27.6, NEUTRAL},
|
||||
[8137] = { AL["Gikkix"], BabbleZone["Tanaris"], 66.6, 22.1, NEUTRAL},
|
||||
[8139] = { AL["Jabbey"], BabbleZone["Tanaris"], 67.0, 22.0, NEUTRAL},
|
||||
[8145] = { AL["Sheendra Tallgrass"], BabbleZone["Feralas"], 74.5, 42.8, HORDE},
|
||||
[8150] = { AL["Janet Hommers"], BabbleZone["Desolace"], 66.2, 6.7, ALLIANCE},
|
||||
[8157] = { AL["Logannas"], BabbleZone["Feralas"], 32.7, 44.0, ALLIANCE},
|
||||
[8158] = { AL["Bronk"], BabbleZone["Feralas"], 76.1, 43.3, HORDE},
|
||||
[8160] = { AL["Nioma"], BabbleZone["The Hinterlands"], 13.4, 43.3, ALLIANCE},
|
||||
[8161] = { AL["Harggan"], BabbleZone["The Hinterlands"], 13.4, 44.0, ALLIANCE},
|
||||
[8176] = { AL["Gharash"], BabbleZone["Swamp of Sorrows"], 45.5, 51.6, HORDE},
|
||||
[8177] = { AL["Rartar"], BabbleZone["Swamp of Sorrows"], 45.4, 57.0, HORDE},
|
||||
[8178] = { AL["Nina Lightbrew"], BabbleZone["Blasted Lands"], 66.9, 18.3, ALLIANCE},
|
||||
[8307] = { AL["Tarban Hearthgrain"], BabbleZone["The Barrens"], 55.1, 32.1, HORDE},
|
||||
[8363] = { AL["Shadi Mistrunner"], BabbleZone["Thunder Bluff"], 40.4, 63.6, HORDE},
|
||||
[8508] = { AL["Gretta Ganter"], BabbleZone["Dun Morogh"], 31.5, 44.7, ALLIANCE},
|
||||
[8678] = { AL["Jubie Gadgetspring"], BabbleZone["Azshara"], 45.3, 90.9, NEUTRAL},
|
||||
[8679] = { AL["Knaz Blunderflame"], BabbleZone["Stranglethorn Vale"], 51.0, 35.3, NEUTRAL},
|
||||
[8681] = { AL["Outfitter Eric"], BabbleZone["Ironforge"], 43.2, 29.2, ALLIANCE},
|
||||
[8878] = { AL["Muuran"], BabbleZone["Desolace"], 55.6, 56.5, HORDE},
|
||||
[9179] = { AL["Jazzrik"], BabbleZone["Badlands"], 42.5, 52.6, HORDE},
|
||||
[9499] = { BabbleBoss["Plugger Spazzring"], BabbleZone["Blackrock Depths"], 0, 0, NEUTRAL},
|
||||
[9544] = { AL["Yuka Screwspigot"], BabbleZone["Burning Steppes"], 66.0, 22.0, NEUTRAL},
|
||||
[9636] = { AL["Kireena"], BabbleZone["Desolace"], 51.0, 53.5, HORDE},
|
||||
[10118] = { AL["Nessa Shadowsong"], BabbleZone["Teldrassil"], 56.3, 92.4, ALLIANCE},
|
||||
[10856] = { AL["Argent Quartermaster Hasana"], BabbleZone["Tirisfal Glades"], 83.2, 68.1, NEUTRAL},
|
||||
[10857] = { AL["Argent Quartermaster Lightspark"], BabbleZone["Western Plaguelands"], 42.8, 83.8, NEUTRAL},
|
||||
[11185] = { AL["Xizzer Fizzbolt"], BabbleZone["Winterspring"], 60.8, 38.6, NEUTRAL},
|
||||
[11187] = { AL["Himmik"], BabbleZone["Winterspring"], 61.3, 39.1, NEUTRAL},
|
||||
[11189] = { AL["Qia"], BabbleZone["Winterspring"], 61.2, 37.2, NEUTRAL},
|
||||
[11278] = { AL["Magnus Frostwake"], BabbleZone["Western Plaguelands"], 68.1, 77.6, NEUTRAL},
|
||||
[11536] = { AL["Quartermaster Miranda Breechlock"], BabbleZone["Eastern Plaguelands"], 75.8, 54.1, NEUTRAL},
|
||||
[11557] = { AL["Meilosh"], BabbleZone["Felwood"], 65.7, 2.9, HORDE},
|
||||
[11874] = { AL["Masat T'andr"], BabbleZone["Swamp of Sorrows"], 26.3, 31.6, NEUTRAL},
|
||||
[12022] = { AL["Lorelae Wintersong"], BabbleZone["Moonglade"], 48.3, 40.1, NEUTRAL},
|
||||
[12033] = { AL["Wulan"], BabbleZone["Desolace"], 26.2, 69.7, HORDE},
|
||||
[12043] = { AL["Kulwia"], BabbleZone["Stonetalon Mountains"], 45.4, 59.4, HORDE},
|
||||
[12245] = { AL["Vendor-Tron 1000"], BabbleZone["Desolace"], 60.3, 38.1, NEUTRAL},
|
||||
[12246] = { AL["Super-Seller 680"], BabbleZone["Desolace"], 40.5, 79.3, NEUTRAL},
|
||||
[12941] = { AL["Jase Farlane"], BabbleZone["Eastern Plaguelands"], 74.8, 51.8, NEUTRAL},
|
||||
[12942] = { AL["Leonard Porter"], BabbleZone["Western Plaguelands"], 43.0, 84.3, ALLIANCE},
|
||||
[12943] = { AL["Werg Thickblade"], BabbleZone["Tirisfal Glades"], 83.2, 69.7, HORDE},
|
||||
[12944] = { AL["Lokhtos Darkbargainer"], BabbleZone["Blackrock Depths"], 0, 0, NEUTRAL},
|
||||
[12956] = { AL["Zannok Hidepiercer"], BabbleZone["Silithus"], 81.9, 17.8, NEUTRAL},
|
||||
[12957] = { AL["Blimo Gadgetspring"], BabbleZone["Azshara"], 45.3, 90.9, NEUTRAL},
|
||||
[12958] = { AL["Gigget Zipcoil"], BabbleZone["The Hinterlands"], 34.5, 38.5, NEUTRAL},
|
||||
[12959] = { AL["Nergal"], BabbleZone["Un'Goro Crater"], 43.3, 7.7, NEUTRAL},
|
||||
[12962] = { AL["Wik'Tar"], BabbleZone["Ashenvale"], 11.8, 34.1, HORDE},
|
||||
[13420] = { AL["Penney Copperpinch"], BabbleZone["Orgrimmar"], 53.5, 66.1, NEUTRAL},
|
||||
[13429] = { AL["Nardstrum Copperpinch"], BabbleZone["Undercity"], 67.5, 38.7, HORDE},
|
||||
[13432] = { AL["Seersa Copperpinch"], BabbleZone["Thunder Bluff"], 42.0, 55.1, HORDE},
|
||||
[13433] = { AL["Wulmort Jinglepocket"], BabbleZone["Ironforge"], 33.0, 67.6, NEUTRAL},
|
||||
[13435] = { AL["Khole Jinglepocket"], BabbleZone["Stormwind City"], 62.2, 70.6, ALLIANCE},
|
||||
[14371] = { AL["Shen'dralar Provisioner"], BabbleZone["Dire Maul"], 0, 0, NEUTRAL},
|
||||
[14637] = { AL["Zorbin Fandazzle"], BabbleZone["Feralas"], 44.8, 43.4, NEUTRAL},
|
||||
[14738] = { AL["Otho Moji'ko"], BabbleZone["The Hinterlands"], 79.3, 79.1, HORDE},
|
||||
[14921] = { AL["Rin'wosho the Trader"], BabbleZone["Stranglethorn Vale"], 15.1, 16.0, NEUTRAL},
|
||||
[15165] = { AL["Haughty Modiste"], BabbleZone["Tanaris"], 66.5, 22.3, NEUTRAL},
|
||||
[15176] = { AL["Vargus"], BabbleZone["Silithus"], 51.2, 38.8, NEUTRAL},
|
||||
[15179] = { AL["Mishta"], BabbleZone["Silithus"], 49.9, 36.5, NEUTRAL},
|
||||
[15293] = { AL["Aendel Windspear"], BabbleZone["Silithus"], 62.6, 49.8, NEUTRAL},
|
||||
[15419] = { AL["Kania"], BabbleZone["Silithus"], 52.0, 39.6, NEUTRAL},
|
||||
[15471] = { BabbleBoss["Lieutenant General Andorov"], BabbleZone["Ruins of Ahn'Qiraj"], 0, 0, NEUTRAL},
|
||||
[15909] = { AL["Fariel Starsong"], BabbleZone["Moonglade"], 54.0, 35.4, NEUTRAL},
|
||||
[16224] = { AL["Rathis Tomber"], BabbleZone["Ghostlands"], 47.2, 28.7, HORDE},
|
||||
[16253] = { AL["Master Chef Mouldier"], BabbleZone["Ghostlands"], 48.3, 30.9, HORDE},
|
||||
[16262] = { AL["Landraelanis"], BabbleZone["Eversong Woods"], 49.0, 47.0, HORDE},
|
||||
[16365] = { AL["Master Craftsman Omarion"], BabbleZone["Naxxramas"].." (40},", 0, 0, NEUTRAL},
|
||||
[16388] = { AL["Koren"], BabbleZone["Karazhan"], 0, 0, NEUTRAL},
|
||||
[16583] = { AL["Rohok"], BabbleZone["Hellfire Peninsula"], 53.2, 38.2, HORDE},
|
||||
[16585] = { AL["Cookie One-Eye"], BabbleZone["Hellfire Peninsula"], 54.6, 41.1, HORDE},
|
||||
[16588] = { AL["Apothecary Antonivich"], BabbleZone["Hellfire Peninsula"], 52.4, 36.5, HORDE},
|
||||
[16624] = { AL["Gelanthis"], BabbleZone["Silvermoon City"], 90.8, 73.6, HORDE},
|
||||
[16635] = { AL["Lyna"], BabbleZone["Silvermoon City"], 69.1, 24.4, HORDE},
|
||||
[16638] = { AL["Deynna"], BabbleZone["Silvermoon City"], 55.8, 51.0, HORDE},
|
||||
[16641] = { AL["Melaris"], BabbleZone["Silvermoon City"], 66.0, 20.6, HORDE},
|
||||
[16657] = { AL["Feera"], BabbleZone["The Exodar"], 54.0, 90.5, ALLIANCE},
|
||||
[16670] = { AL["Eriden"], BabbleZone["Silvermoon City"], 79.5, 36.2, HORDE},
|
||||
[16677] = { AL["Quelis"], BabbleZone["Silvermoon City"], 69.3, 70.7, HORDE},
|
||||
[16689] = { AL["Zaralda"], BabbleZone["Silvermoon City"], 84.0, 78.8, HORDE},
|
||||
[16705] = { AL["Altaa"], BabbleZone["The Exodar"], 27.5, 62.1, ALLIANCE},
|
||||
[16713] = { AL["Arras"], BabbleZone["The Exodar"], 60.0, 89.5, ALLIANCE},
|
||||
[16718] = { AL["Phea"], BabbleZone["The Exodar"], 54.7, 26.5, ALLIANCE},
|
||||
[16722] = { AL["Egomis"], BabbleZone["The Exodar"], 39.1, 39.4, ALLIANCE},
|
||||
[16748] = { AL["Haferet"], BabbleZone["The Exodar"], 66.0, 74.6, ALLIANCE},
|
||||
[16767] = { AL["Neii"], BabbleZone["The Exodar"], 64.5, 68.5, ALLIANCE},
|
||||
[16782] = { AL["Yatheon"], BabbleZone["Silvermoon City"], 76.0, 37.7, HORDE},
|
||||
[16826] = { AL["Sid Limbardi"], BabbleZone["Hellfire Peninsula"], 54.3, 63.6, ALLIANCE},
|
||||
[17246] = { AL["\"Cookie\" McWeaksauce"], BabbleZone["Azuremyst Isle"], 46.7, 70.5, ALLIANCE},
|
||||
[17512] = { AL["Arred"], BabbleZone["The Exodar"], 45.0, 26.0, ALLIANCE},
|
||||
[17518] = { AL["Ythyar"], BabbleZone["Karazhan"], 0, 0, NEUTRAL},
|
||||
[17585] = { AL["Quartermaster Urgronn"], BabbleZone["Hellfire Peninsula"], 54.9, 37.9, HORDE},
|
||||
[17657] = { AL["Logistics Officer Ulrike"], BabbleZone["Hellfire Peninsula"], 56.7, 62.6, ALLIANCE},
|
||||
[17904] = { AL["Fedryen Swiftspear"], BabbleZone["Zangarmarsh"], 79.3, 63.8, NEUTRAL},
|
||||
[18005] = { AL["Haalrun"], BabbleZone["Zangarmarsh"], 67.8, 48.0, ALLIANCE},
|
||||
[18011] = { AL["Zurai"], BabbleZone["Zangarmarsh"], 85.2, 54.7, HORDE},
|
||||
[18015] = { AL["Gambarinka"], BabbleZone["Zangarmarsh"], 31.7, 49.3, HORDE},
|
||||
[18017] = { AL["Seer Janidi"], BabbleZone["Zangarmarsh"], 32.4, 51.9, HORDE},
|
||||
[18255] = { AL["Apprentice Darius"], BabbleZone["Deadwind Pass"], 47.0, 75.3, NEUTRAL},
|
||||
[18382] = { AL["Mycah"], BabbleZone["Zangarmarsh"], 17.9, 51.2, NEUTRAL},
|
||||
[18427] = { AL["Fazu"], BabbleZone["Bloodmyst Isle"], 53.5, 56.5, ALLIANCE},
|
||||
[18484] = { AL["Wind Trader Lathrai"], BabbleZone["Shattrath City"], 72.3, 31.0, NEUTRAL},
|
||||
[18664] = { AL["Aged Dalaran Wizard"], BabbleZone["Old Hillsbrad Foothills"], 0, 0, NEUTRAL},
|
||||
[18672] = { AL["Thomas Yance"], BabbleZone["Old Hillsbrad Foothills"], 0, 0, NEUTRAL},
|
||||
[18753] = { AL["Felannia"], BabbleZone["Hellfire Peninsula"], 52.3, 36.1, HORDE},
|
||||
[18773] = { AL["Johan Barnes"], BabbleZone["Hellfire Peninsula"], 53.7, 66.1, ALLIANCE},
|
||||
[18775] = { AL["Lebowski"], BabbleZone["Hellfire Peninsula"], 55.7, 65.5, ALLIANCE},
|
||||
[18802] = { AL["Alchemist Gribble"], BabbleZone["Hellfire Peninsula"], 53.8, 65.8, ALLIANCE},
|
||||
[18821] = { AL["Quartermaster Jaffrey Noreliqe"], BabbleZone["Nagrand"], 41.2, 44.3, HORDE},
|
||||
[18822] = { AL["Quartermaster Davian Vaclav"], BabbleZone["Nagrand"], 41.2, 44.3, ALLIANCE},
|
||||
[18911] = { AL["Juno Dufrain"], BabbleZone["Zangarmarsh"], 78.0, 66.1, NEUTRAL},
|
||||
[18951] = { AL["Erilia"], BabbleZone["Eversong Woods"], 55.5, 54.0, HORDE},
|
||||
[18957] = { AL["Innkeeper Grilka"], BabbleZone["Terokkar Forest"], 48.8, 45.1, HORDE},
|
||||
[18960] = { AL["Rungor"], BabbleZone["Terokkar Forest"], 48.8, 46.1, HORDE},
|
||||
[19004] = { AL["Vodesiin"], BabbleZone["Hellfire Peninsula"], 24.4, 38.8, ALLIANCE},
|
||||
[19015] = { AL["Mathar G'ochar"], BabbleZone["Nagrand"], 57.0, 39.6, HORDE},
|
||||
[19017] = { AL["Borto"], BabbleZone["Nagrand"], 53.3, 71.9, ALLIANCE},
|
||||
[19038] = { AL["Supply Officer Mills"], BabbleZone["Terokkar Forest"], 55.7, 53.1, ALLIANCE},
|
||||
[19042] = { AL["Leeli Longhaggle"], BabbleZone["Terokkar Forest"], 57.7, 53.4, ALLIANCE},
|
||||
[19065] = { AL["Inessera"], BabbleZone["Shattrath City"], 34.5, 20.2, NEUTRAL},
|
||||
[19074] = { AL["Skreah"], BabbleZone["Shattrath City"], 46.0, 20.1, NEUTRAL},
|
||||
[19195] = { AL["Jim Saltit"], BabbleZone["Shattrath City"], 63.6, 68.6, NEUTRAL},
|
||||
[19196] = { AL["Cro Threadstrong"], BabbleZone["Shattrath City"], 66.1, 68.7, NEUTRAL},
|
||||
[19213] = { AL["Eiin"], BabbleZone["Shattrath City"], 66.2, 68.7, NEUTRAL},
|
||||
[19234] = { AL["Yurial Soulwater"], BabbleZone["Shattrath City"], 43.5, 96.9, NEUTRAL},
|
||||
[19296] = { AL["Innkeeper Biribi"], BabbleZone["Terokkar Forest"], 56.7, 53.3, ALLIANCE},
|
||||
[19321] = { AL["Quartermaster Endarin"], BabbleZone["Shattrath City"], 47.9, 26.1, NEUTRAL},
|
||||
[19331] = { AL["Quartermaster Enuril"], BabbleZone["Shattrath City"], 60.5, 64.2, NEUTRAL},
|
||||
[19342] = { AL["Krek Cragcrush"], BabbleZone["Shadowmoon Valley"], 28.9, 30.8, HORDE},
|
||||
[19351] = { AL["Daggle Ironshaper"], BabbleZone["Shadowmoon Valley"], 36.8, 54.4, ALLIANCE},
|
||||
[19373] = { AL["Mari Stonehand"], BabbleZone["Shadowmoon Valley"], 36.8, 55.1, ALLIANCE},
|
||||
[19383] = { AL["Captured Gnome"], BabbleZone["Zangarmarsh"], 32.5, 48.1, HORDE},
|
||||
[19521] = { AL["Arrond"], BabbleZone["Shadowmoon Valley"], 55.9, 58.2, NEUTRAL},
|
||||
[19537] = { AL["Dealer Malij"], BabbleZone["Netherstorm"], 44.2, 34.0, NEUTRAL},
|
||||
[19540] = { AL["Asarnan"], BabbleZone["Netherstorm"], 44.2, 33.7, NEUTRAL},
|
||||
[19661] = { AL["Viggz Shinesparked"], BabbleZone["Shattrath City"], 64.9, 69.1, NEUTRAL},
|
||||
[19662] = { AL["Aaron Hollman"], BabbleZone["Shattrath City"], 63.1, 71.1, NEUTRAL},
|
||||
[19663] = { AL["Madame Ruby"], BabbleZone["Shattrath City"], 63.1, 69.3, NEUTRAL},
|
||||
[19694] = { AL["Loolruna"], BabbleZone["Zangarmarsh"], 68.5, 50.1, ALLIANCE},
|
||||
[19722] = { AL["Muheru the Weaver"], BabbleZone["Zangarmarsh"], 40.6, 28.2, ALLIANCE},
|
||||
[19836] = { AL["Mixie Farshot"], BabbleZone["Hellfire Peninsula"], 61.1, 81.5, HORDE},
|
||||
[19837] = { AL["Daga Ramba"], BabbleZone["Blade's Edge Mountains"], 51.1, 57.7, HORDE},
|
||||
[20028] = { AL["Doba"], BabbleZone["Zangarmarsh"], 42.3, 27.9, ALLIANCE},
|
||||
[20096] = { AL["Uriku"], BabbleZone["Nagrand"], 56.2, 73.3, ALLIANCE},
|
||||
[20097] = { AL["Nula the Butcher"], BabbleZone["Nagrand"], 58.0, 35.7, HORDE},
|
||||
[20240] = { AL["Trader Narasu"], BabbleZone["Nagrand"], 54.6, 75.2, ALLIANCE},
|
||||
[20241] = { AL["Provisioner Nasela"], BabbleZone["Nagrand"], 53.5, 36.9, HORDE},
|
||||
[20242] = { AL["Karaaz"], BabbleZone["Netherstorm"], 43.6, 34.3, NEUTRAL},
|
||||
[20916] = { AL["Xerintha Ravenoak"], BabbleZone["Blade's Edge Mountains"], 62.5, 40.3, NEUTRAL},
|
||||
[21113] = { AL["Sassa Weldwell"], BabbleZone["Blade's Edge Mountains"], 61.3, 68.9, ALLIANCE},
|
||||
[21432] = { AL["Almaador"], BabbleZone["Shattrath City"], 51.0, 41.9, NEUTRAL},
|
||||
[21474] = { AL["Coreiel"], BabbleZone["Nagrand"], 42.8, 42.6, HORDE},
|
||||
[21485] = { AL["Aldraan"], BabbleZone["Nagrand"], 42.9, 42.5, ALLIANCE},
|
||||
[21643] = { AL["Alurmi"], BabbleZone["Tanaris"], 63.6, 57.6, NEUTRAL},
|
||||
[21655] = { AL["Nakodu"], BabbleZone["Shattrath City"], 62.1, 69.0, NEUTRAL},
|
||||
[22208] = { AL["Nasmara Moonsong"], BabbleZone["Shattrath City"], 66.0, 69.0, NEUTRAL},
|
||||
[22212] = { AL["Andrion Darkspinner"], BabbleZone["Shattrath City"], 66.0, 67.8, NEUTRAL},
|
||||
[22213] = { AL["Gidge Spellweaver"], BabbleZone["Shattrath City"], 66.0, 67.9, NEUTRAL},
|
||||
[23007] = { AL["Paulsta'ats"], BabbleZone["Nagrand"], 30.6, 57.0, NEUTRAL},
|
||||
[23010] = { AL["Wolgren Jinglepocket"], BabbleZone["The Exodar"], 54.5, 47.2, ALLIANCE},
|
||||
[23012] = { AL["Hotoppik Copperpinch"], BabbleZone["Silvermoon City"], 63.5, 79.1, HORDE},
|
||||
[23064] = { AL["Eebee Jinglepocket"], BabbleZone["Shattrath City"], 51.0, 31.3, NEUTRAL},
|
||||
[23159] = { AL["Okuno"], BabbleZone["Black Temple"], 0, 0, NEUTRAL},
|
||||
[23437] = { AL["Indormi"], BabbleZone["Hyjal Summit"], 0, 0, NEUTRAL},
|
||||
[25032] = { AL["Eldara Dawnrunner"], BabbleZone["Isle of Quel'Danas"], 47.1, 30.0, NEUTRAL},
|
||||
[25950] = { AL["Shaani"], BabbleZone["Isle of Quel'Danas"], 51.5, 32.6, NEUTRAL},
|
||||
[26081] = { AL["High Admiral \"Shelly\" Jorrik"], BabbleZone["Dun Morogh"], 10.9, 76.1, NEUTRAL},
|
||||
[26569] = { AL["Alys Vol'tyr"], BabbleZone["Dragonblight"], 36.3, 46.5, HORDE},
|
||||
[26868] = { AL["Provisioner Lorkran"], BabbleZone["Grizzly Hills"], 22.6, 66.1, HORDE},
|
||||
[27030] = { AL["Bradley Towns"], BabbleZone["Dragonblight"], 76.9, 62.2, HORDE},
|
||||
[27054] = { AL["Modoru"], BabbleZone["Dragonblight"], 28.9, 55.9, ALLIANCE},
|
||||
[27147] = { AL["Librarian Erickson"], BabbleZone["Borean Tundra"], 46.7, 32.5, NEUTRAL},
|
||||
[27666] = { AL["Ontuvo"], BabbleZone["Shattrath City"], 48.7, 41.3, NEUTRAL},
|
||||
[28701] = { AL["Timothy Jones"], BabbleZone["Dalaran"], 40.5, 35.2, NEUTRAL},
|
||||
[28714] = { AL["Ildine Sorrowspear"], BabbleZone["Dalaran"], 39.1, 41.5, NEUTRAL},
|
||||
[28721] = { AL["Tiffany Cartier"], BabbleZone["Dalaran"], 40.5, 34.4, NEUTRAL},
|
||||
[28722] = { AL["Bryan Landers"], BabbleZone["Dalaran"], 39.1, 26.5, NEUTRAL},
|
||||
[28723] = { AL["Larana Drome"], BabbleZone["Dalaran"], 42.3, 37.5, NEUTRAL},
|
||||
[29510] = { AL["Linna Bruder"], BabbleZone["Dalaran"], 34.6, 34.5, NEUTRAL},
|
||||
[29511] = { AL["Lalla Brightweave"], BabbleZone["Dalaran"], 36.5, 33.5, NEUTRAL},
|
||||
[29512] = { AL["Ainderu Summerleaf"], BabbleZone["Dalaran"], 36.5, 34.0, NEUTRAL},
|
||||
[30431] = { AL["Veteran Crusader Aliocha Segard"], BabbleZone["Icecrown"], 87.6, 75.6, NEUTRAL},
|
||||
[30489] = { AL["Morgan Day"], BabbleZone["Wintergrasp"], 49.0, 17.1, ALLIANCE},
|
||||
[30734] = { AL["Jezebel Bican"], BabbleZone["Hellfire Peninsula"], 53.9, 65.5, ALLIANCE},
|
||||
[30735] = { AL["Kul Inkspiller"], BabbleZone["Hellfire Peninsula"], 52.5, 36.0, HORDE},
|
||||
[31031] = { AL["Misensi"], BabbleZone["Dalaran"], 70.1, 38.5, HORDE},
|
||||
[31032] = { AL["Derek Odds"], BabbleZone["Dalaran"], 41.5, 64.8, ALLIANCE},
|
||||
[31910] = { AL["Geen"], BabbleZone["Sholazar Basin"], 54.5, 56.2, NEUTRAL},
|
||||
[31911] = { AL["Tanak"], BabbleZone["Sholazar Basin"], 55.1, 69.1, NEUTRAL},
|
||||
[31916] = { AL["Tanaika"], BabbleZone["Howling Fjord"], 25.5, 58.7, NEUTRAL},
|
||||
[32287] = { AL["Archmage Alvareaux"], BabbleZone["Dalaran"], 25.5, 47.4, NEUTRAL},
|
||||
[32294] = { AL["Knight Dameron"], BabbleZone["Wintergrasp"], 51.7, 17.5, ALLIANCE},
|
||||
[32296] = { AL["Stone Guard Mukar"], BabbleZone["Wintergrasp"], 51.7, 17.5, HORDE},
|
||||
[32514] = { AL["Vanessa Sellers"], BabbleZone["Dalaran"], 38.7, 40.8, NEUTRAL},
|
||||
[32515] = { AL["Braeg Stoutbeard"], BabbleZone["Dalaran"], 37.6, 29.5, NEUTRAL},
|
||||
[32533] = { AL["Cielstrasza"], BabbleZone["Dragonblight"], 59.9, 53.1, NEUTRAL},
|
||||
[32538] = { AL["Duchess Mynx"], BabbleZone["Icecrown"], 43.5, 20.6, NEUTRAL},
|
||||
[32540] = { AL["Lillehoff"], BabbleZone["The Storm Peaks"], 66.2, 61.4, NEUTRAL},
|
||||
[32564] = { AL["Logistics Officer Silverstone"], BabbleZone["Borean Tundra"], 57.7, 66.5, ALLIANCE},
|
||||
[32565] = { AL["Gara Skullcrush"], BabbleZone["Borean Tundra"], 41.4, 53.6, HORDE},
|
||||
[32763] = { AL["Sairuk"], BabbleZone["Dragonblight"], 48.5, 75.7, NEUTRAL},
|
||||
[32773] = { AL["Logistics Officer Brighton"], BabbleZone["Howling Fjord"], 59.7, 63.9, ALLIANCE},
|
||||
[32774] = { AL["Sebastian Crane"], BabbleZone["Howling Fjord"], 79.6, 30.7, HORDE},
|
||||
[33595] = { AL["Mera Mistrunner"], BabbleZone["Icecrown"], 72.4, 20.9, NEUTRAL},
|
||||
[33602] = { AL["Anuur"], BabbleZone["Icecrown"], 71.4, 20.8, NEUTRAL},
|
||||
[33637] = { AL["Kirembri Silvermane"], BabbleZone["Shattrath City"], 58.1, 75.0, NEUTRAL},
|
||||
[33680] = { AL["Nemiha"], BabbleZone["Shattrath City"], 36.1, 47.7, NEUTRAL},
|
||||
[34039] = { AL["Lady Palanseer"], BabbleZone["Orgrimmar"], 37.0, 64.9, HORDE},
|
||||
[34079] = { AL["Captain O'Neal"], BabbleZone["Stormwind City"], 75.7, 66.6, ALLIANCE},
|
||||
[37687] = { AL["Alchemist Finklestein"], BabbleZone["Icecrown Citadel"], 0, 0, NEUTRAL},
|
||||
[40160] = { AL["Frozo the Renowned"], BabbleZone["Dalaran"], 41.0, 28.5, NEUTRAL},
|
||||
|
||||
--Shady Dealers
|
||||
[970000] = { AL["Shady Dealer"], BabbleZone["Wetlands"], 70.8, 79.4, NEUTRAL },
|
||||
[970001] = { AL["Shady Dealer"], BabbleZone["Un'Goro Crater"], 71.7, 75.8, NEUTRAL },
|
||||
[970002] = { AL["Shady Dealer"], BabbleZone["Azshara"], 42.6, 80.3, NEUTRAL },
|
||||
[970003] = { AL["Shady Dealer"], BabbleZone["Tanaris"], 66.8, 22.2, NEUTRAL },
|
||||
[970004] = { AL["Shady Dealer"], BabbleZone["Burning Steppes"], 95.1, 31.7, NEUTRAL },
|
||||
[970005] = { AL["Shady Dealer"], BabbleZone["Stranglethorn Vale"], 35.7, 10.6, NEUTRAL },
|
||||
[970006] = { AL["Shady Dealer"], BabbleZone["Searing Gorge"], 37.8, 49.5, NEUTRAL },
|
||||
[970007] = { AL["Shady Dealer"], BabbleZone["Alterac Mountains"], 20.2, 85.6, NEUTRAL },
|
||||
[970008] = { AL["Shady Dealer"], BabbleZone["Blasted Lands"], 50.7, 14.6, NEUTRAL },
|
||||
[970009] = { AL["Shady Dealer"], BabbleZone["Deadwind Pass"], 50.0, 74.8, NEUTRAL },
|
||||
[970010] = { AL["Shady Dealer"], BabbleZone["Thousand Needles"], 80.2, 77.1, NEUTRAL },
|
||||
[970011] = { AL["Shady Dealer"], BabbleZone["Felwood"], 64.8, 8.0, NEUTRAL },
|
||||
[970012] = { AL["Shady Dealer"], BabbleZone["Eastern Plaguelands"], 43.5, 18.5, NEUTRAL },
|
||||
[970013] = { AL["Shady Dealer"], BabbleZone["The Barrens"], 49.4, 50.6, NEUTRAL },
|
||||
[970014] = { AL["Shady Dealer"], BabbleZone["Duskwood"], 81.8, 19.8, NEUTRAL },
|
||||
[970015] = { AL["Shady Dealer"], BabbleZone["Western Plaguelands"], 45.0, 15.8, NEUTRAL },
|
||||
[970016] = { AL["Shady Dealer"], BabbleZone["Hillsbrad Foothills"], 77.2, 46.3, NEUTRAL },
|
||||
[970017] = { AL["Shady Dealer"], BabbleZone["Moonglade"], 54.4, 37.0, NEUTRAL },
|
||||
[970018] = { AL["Shady Dealer"], BabbleZone["Un'Goro Crater"], 45.2, 5.7, NEUTRAL },
|
||||
[970019] = { AL["Shady Dealer"], BabbleZone["Azshara"], 45.3, 90.9, NEUTRAL },
|
||||
[970020] = { AL["Shady Dealer"], BabbleZone["Azshara"], 50.1, 63.8, NEUTRAL },
|
||||
[970021] = { AL["Shady Dealer"], BabbleZone["Western Plaguelands"], 69.3, 49.8, NEUTRAL },
|
||||
[970022] = { AL["Shady Dealer"], BabbleZone["Western Plaguelands"], 39.5, 66.7, NEUTRAL },
|
||||
[970023] = { AL["Shady Dealer"], BabbleZone["Winterspring"], 49.9, 9.9, NEUTRAL },
|
||||
[970024] = { AL["Shady Dealer"], BabbleZone["Winterspring"], 65.9, 65.2, NEUTRAL },
|
||||
[970025] = { AL["Shady Dealer"], BabbleZone["Winterspring"], 61.9, 37.6, NEUTRAL },
|
||||
[970026] = { AL["Shady Dealer"], BabbleZone["Silithus"], 49.5, 37.6, NEUTRAL },
|
||||
[970027] = { AL["Shady Dealer"], BabbleZone["Silithus"], 41.5, 88.8, NEUTRAL },
|
||||
[970028] = { AL["Shady Dealer"], BabbleZone["Eastern Plaguelands"], 75.2, 51.4, NEUTRAL },
|
||||
[970029] = { AL["Shady Dealer"], BabbleZone["The Barrens"], 62.6, 38.3, NEUTRAL },
|
||||
[970030] = { AL["Shady Dealer"], BabbleZone["Dustwallow Marsh"], 41.8, 74.1, NEUTRAL },
|
||||
[970031] = { AL["Shady Dealer"], BabbleZone["Felwood"], 51.0, 81.4, NEUTRAL },
|
||||
[970032] = { AL["Shady Dealer"], BabbleZone["Stranglethorn Vale"], 26.8, 76.4, NEUTRAL },
|
||||
[970033] = { AL["Shady Dealer"], BabbleZone["Feralas"], 32.0, 77.6, NEUTRAL },
|
||||
[970034] = { AL["Shady Dealer"], BabbleZone["Dustwallow Marsh"], 77.9, 17.2, NEUTRAL },
|
||||
[970035] = { AL["Shady Dealer"], BabbleZone["Desolace"], 61.2, 62.1, NEUTRAL },
|
||||
[970036] = { AL["Shady Dealer"], BabbleZone["Stonetalon Mountains"], 59.0, 62.7, NEUTRAL },
|
||||
[970037] = { AL["Shady Dealer"], BabbleZone["The Hinterlands"], 26.9, 48.8, NEUTRAL },
|
||||
[970038] = { AL["Shady Dealer"], BabbleZone["Ashenvale"], 69.8, 70.4, NEUTRAL },
|
||||
[970039] = { AL["Shady Dealer"], BabbleZone["Badlands"], 62.0, 54.2, NEUTRAL },
|
||||
[970040] = { AL["Shady Dealer"], BabbleZone["Arathi Highlands"], 32.1, 82.9, NEUTRAL },
|
||||
[970041] = { AL["Shady Dealer"], BabbleZone["Arathi Highlands"], 33.8, 27.5, NEUTRAL },
|
||||
[970042] = { AL["Shady Dealer"], BabbleZone["Swamp of Sorrows"], 13.7, 68.6, NEUTRAL },
|
||||
};
|
||||
|
||||
AtlasLoot_CraftingData["MobList"] = {
|
||||
-- Alterac Mountains
|
||||
[2242] = { AL["Syndicate Spy"], BabbleZone["Alterac Mountains"], 63.0, 40.6},
|
||||
[2246] = { AL["Syndicate Assassin"], BabbleZone["Alterac Mountains"], 40.6, 16.8},
|
||||
|
||||
-- Arathi Highlands
|
||||
[2556] = { AL["Witherbark Headhunter"], BabbleZone["Arathi Highlands"], 70.5, 70.4},
|
||||
[2557] = { AL["Witherbark Shadow Hunter"], BabbleZone["Arathi Highlands"], 70.3, 78.9},
|
||||
[2558] = { AL["Witherbark Berserker"], BabbleZone["Arathi Highlands"], 24.2, 66.2},
|
||||
[2606] = { AL["Nimar the Slayer"], BabbleZone["Arathi Highlands"], 66.6, 64.0},
|
||||
[2636] = { AL["Blackwater Deckhand"], BabbleZone["Arathi Highlands"], 33.0, 81.3},
|
||||
|
||||
-- Ashenvale
|
||||
[3834] = { AL["Crazed Ancient"], BabbleZone["Ashenvale"], 59.4, 43.0},
|
||||
[3919] = { AL["Withered Ancient"], BabbleZone["Ashenvale"], 58.5, 36.1},
|
||||
|
||||
-- Azshara
|
||||
[6138] = { AL["Arkkoran Oracle"], BabbleZone["Azshara"], 78.0, 41.8},
|
||||
[6144] = { AL["Son of Arkkoroc"], BabbleZone["Azshara"], 65.5, 54.4},
|
||||
[6146] = { AL["Cliff Breaker"], BabbleZone["Azshara"], 66.0, 13.2},
|
||||
[6201] = { AL["Legashi Rogue"], BabbleZone["Azshara"], 50.1, 19.6},
|
||||
|
||||
-- Blade's Edge Mountains
|
||||
[16952] = { AL["Anger Guard"], BabbleZone["Blade's Edge Mountains"], 72.0, 40.5},
|
||||
[19952] = { AL["Bloodmaul Geomancer"], BabbleZone["Blade's Edge Mountains"], 45.0, 68.5},
|
||||
[19960] = { AL["Doomforge Engineer"], BabbleZone["Blade's Edge Mountains"], 75.1, 39.8},
|
||||
[19973] = { AL["Abyssal Flamebringer"], BabbleZone["Blade's Edge Mountains"], 30.0, 81.0},
|
||||
[19984] = { AL["Vekh'nir Dreadhawk"], BabbleZone["Blade's Edge Mountains"], 78.0, 74.3},
|
||||
[22242] = { AL["Bash'ir Spell-Thief"], BabbleZone["Blade's Edge Mountains"], 51.0, 16.5},
|
||||
[23385] = { AL["Simon Unit"], BabbleZone["Blade's Edge Mountains"], 33.5, 51.5},
|
||||
[23386] = { AL["Gan'arg Analyzer"], BabbleZone["Blade's Edge Mountains"], 33.0, 52.5},
|
||||
|
||||
-- Blasted Lands
|
||||
[5981] = { AL["Portal Seeker"], BabbleZone["Blasted Lands"], 51.1, 34.0},
|
||||
[6005] = { AL["Shadowsworn Thug"], BabbleZone["Blasted Lands"], 63.8, 32.0},
|
||||
|
||||
-- Burning Steppes
|
||||
[7025] = { AL["Blackrock Soldier"], BabbleZone["Burning Steppes"], 44.0, 52.8},
|
||||
[7027] = { AL["Blackrock Slayer"], BabbleZone["Burning Steppes"], 44.4, 50.7},
|
||||
[7029] = { AL["Blackrock Battlemaster"], BabbleZone["Burning Steppes"], 40.5, 35.8},
|
||||
[7035] = { AL["Firegut Brute"], BabbleZone["Burning Steppes"], 82.5, 48.1},
|
||||
[7037] = { AL["Thaurissan Firewalker"], BabbleZone["Burning Steppes"], 61.1, 42.0},
|
||||
[10119] = { AL["Volchan"], BabbleZone["Burning Steppes"], 73.0, 49.3},
|
||||
|
||||
-- Darkshore
|
||||
[2337] = { AL["Dark Strand Voidcaller"], BabbleZone["Darkshore"], 56.2, 26.0},
|
||||
|
||||
-- Deadwind Pass
|
||||
[7372] = { AL["Deadwind Warlock"], BabbleZone["Deadwind Pass"], 59.8, 74.4},
|
||||
|
||||
-- Dragonblight
|
||||
[26343] = { AL["Indu'le Fisherman"], BabbleZone["Dragonblight"], 40.2, 65.5},
|
||||
[26336] = { AL["Indu'le Mystic"], BabbleZone["Dragonblight"], 40.2, 65.5},
|
||||
[26344] = { AL["Indu'le Warrior"], BabbleZone["Dragonblight"], 40.2, 65.5},
|
||||
[27333] = { AL["Onslaught Mason"], BabbleZone["Dragonblight"], 85.8, 36.0},
|
||||
|
||||
-- Duskwood
|
||||
[910 ] = { AL["Defias Enchanter"], BabbleZone["Duskwood"], 49.5, 75.6},
|
||||
|
||||
-- Dustwallow Marsh
|
||||
[4364] = { AL["Strashaz Warrior"], BabbleZone["Dustwallow Marsh"], 76.5, 22.3},
|
||||
[4366] = { AL["Strashaz Serpent Guard"], BabbleZone["Dustwallow Marsh"], 74.1, 18.2},
|
||||
[4368] = { AL["Strashaz Myrmidon"], BabbleZone["Dustwallow Marsh"], 75.1, 14.2},
|
||||
[4834] = { AL["Theramore Infiltrator"], BabbleZone["Dustwallow Marsh"], 44.0, 27.3},
|
||||
[16072] = { AL["Tidelord Rrurgaz"], BabbleZone["Dustwallow Marsh"], 76.7, 19.5},
|
||||
|
||||
-- Eastern Plaguelands
|
||||
[8546] = { AL["Dark Adept"], BabbleZone["Eastern Plaguelands"], 65.8, 37.9},
|
||||
[8550] = { AL["Shadowmage"], BabbleZone["Eastern Plaguelands"], 78.5, 35.3},
|
||||
[8561] = { AL["Mossflayer Shadowhunter"], BabbleZone["Eastern Plaguelands"], 60.9, 21.5},
|
||||
[9451] = { AL["Scarlet Archmage"], BabbleZone["Eastern Plaguelands"], 81.5, 75.4},
|
||||
|
||||
-- Felwood
|
||||
[7106] = { AL["Jadefire Rogue"], BabbleZone["Felwood"], 37.5, 66.5},
|
||||
[7158] = { AL["Deadwood Shaman"], BabbleZone["Felwood"], 62.5, 10.3},
|
||||
[7441] = { AL["Winterfall Totemic"], BabbleZone["Felwood"], 41.5, 42.7},
|
||||
|
||||
-- Grizzly Hills
|
||||
[26270] = { AL["Iron Rune-Shaper"], BabbleZone["Grizzly Hills"], 67.8, 16.3},
|
||||
[26679] = { AL["Silverbrook Trapper"], BabbleZone["Grizzly Hills"], 27.3, 33.9},
|
||||
[26708] = { AL["Silverbrook Villager"], BabbleZone["Grizzly Hills"], 27.3, 33.9},
|
||||
[27546] = { AL["Silverbrook Hunter"], BabbleZone["Grizzly Hills"], 37.5, 68.0},
|
||||
[27676] = { AL["Silverbrook Defender"], BabbleZone["Grizzly Hills"], 24.6, 33.3},
|
||||
|
||||
-- Hillsbrad Foothills
|
||||
[2434] = { AL["Shadowy Assassin"], BabbleZone["Hillsbrad Foothills"], 52.7, 52.8},
|
||||
[2264] = { AL["Hillsbrad Tailor"], BabbleZone["Hillsbrad Foothills"], 36.6, 44.4},
|
||||
[2374] = { AL["Torn Fin Muckdweller"], BabbleZone["Hillsbrad Foothills"], 31.5, 72.1},
|
||||
[2375] = { AL["Torn Fin Coastrunner"], BabbleZone["Hillsbrad Foothills"], 25.1, 70.5},
|
||||
[2376] = { AL["Torn Fin Oracle"], BabbleZone["Hillsbrad Foothills"], 42.0, 68.0},
|
||||
[2377] = { AL["Torn Fin Tidehunter"], BabbleZone["Hillsbrad Foothills"], 39.0, 69.0},
|
||||
[14276] = { AL["Scargil"], BabbleZone["Hillsbrad Foothills"], 26.6, 71.2},
|
||||
|
||||
|
||||
-- Icecrown
|
||||
[30921] = { AL["Skeletal Runesmith"], BabbleZone["Icecrown"], 60.0, 73.1},
|
||||
[31702] = { AL["Frostbrood Spawn"], BabbleZone["Icecrown"], 75.3, 43.4},
|
||||
[32289] = { AL["Damned Apothecary"], BabbleZone["Icecrown"], 49.8, 32.7},
|
||||
[32290] = { AL["Cult Alchemist"], BabbleZone["Icecrown"], 49.5, 33.1},
|
||||
[32297] = { AL["Cult Researcher"], BabbleZone["Icecrown"], 50.7, 30.9},
|
||||
[32349] = { AL["Cultist Shard Watcher"], BabbleZone["Icecrown"], 48.1, 67.9},
|
||||
|
||||
-- Nagrand
|
||||
[17136] = { AL["Boulderfist Warrior"], BabbleZone["Nagrand"], 51.0, 57.0},
|
||||
[17150] = { AL["Vir'aani Arcanist"], BabbleZone["Nagrand"], 40.5, 69.6},
|
||||
[18203] = { AL["Murkblood Raider"], BabbleZone["Nagrand"], 31.5, 43.5},
|
||||
|
||||
-- Netherstorm
|
||||
[18853] = { AL["Sunfury Bloodwarder"], BabbleZone["Netherstorm"], 27.0, 72.0},
|
||||
[18866] = { AL["Mageslayer"], BabbleZone["Netherstorm"], 55.5, 85.5},
|
||||
[18870] = { AL["Voidshrieker"], BabbleZone["Netherstorm"], 60.0, 39.0},
|
||||
[18872] = { AL["Disembodied Vindicator"], BabbleZone["Netherstorm"], 36.0, 55.5},
|
||||
[18873] = { AL["Disembodied Protector"], BabbleZone["Netherstorm"], 31.8, 52.7},
|
||||
[19707] = { AL["Sunfury Archer"], BabbleZone["Netherstorm"], 55.5, 81.0},
|
||||
[22822] = { AL["Ethereum Nullifier"], BabbleZone["Netherstorm"], 66.0, 49.5},
|
||||
[20134] = { AL["Sunfury Arcanist"], BabbleZone["Netherstorm"], 51.0, 82.5},
|
||||
[20135] = { AL["Sunfury Arch Mage"], BabbleZone["Netherstorm"], 46.5, 81.0},
|
||||
[20136] = { AL["Sunfury Researcher"], BabbleZone["Netherstorm"], 48.2, 82.5},
|
||||
[20207] = { AL["Sunfury Bowman"], BabbleZone["Netherstorm"], 61.5, 67.5},
|
||||
[23008] = { AL["Ethereum Jailor"], BabbleZone["Netherstorm"], 58.8, 35.6},
|
||||
[19514] = { BabbleBoss["Al'ar"], BabbleZone["Tempest Keep"], 0, 0},
|
||||
[21216] = { BabbleBoss["Hydross the Unstable"], BabbleZone["Serpentshrine Cavern"], 0, 0},
|
||||
[16457] = { BabbleBoss["Maiden of Virtue"], BabbleZone["Karazhan"], 0, 0},
|
||||
|
||||
-- Searing Gorge
|
||||
[5844] = { AL["Dark Iron Slaver"], BabbleZone["Searing Gorge"], 43.8, 33.8},
|
||||
[5846] = { AL["Dark Iron Taskmaster"], BabbleZone["Searing Gorge"], 44.4, 41.1},
|
||||
[5861] = { AL["Twilight Fire Guard"], BabbleZone["Searing Gorge"], 25.5, 33.8},
|
||||
[8637] = { AL["Dark Iron Watchman"], BabbleZone["Searing Gorge"], 69.3, 34.8},
|
||||
[9026] = { BabbleBoss["Overmaster Pyron"], BabbleZone["Searing Gorge"], 26.2, 74.9},
|
||||
|
||||
-- Shadowmoon Valley
|
||||
[19740] = { AL["Wrathwalker"], BabbleZone["Shadowmoon Valley"], 25.5, 33.0},
|
||||
[19754] = { AL["Deathforge Tinkerer"], BabbleZone["Shadowmoon Valley"], 39.0, 38.7},
|
||||
[19755] = { AL["Mo'arg Weaponsmith"], BabbleZone["Shadowmoon Valley"], 25.5, 31.5},
|
||||
[19756] = { AL["Deathforge Smith"], BabbleZone["Shadowmoon Valley"], 37.5, 42.0},
|
||||
[19768] = { AL["Coilskar Siren"], BabbleZone["Shadowmoon Valley"], 46.5, 30.0},
|
||||
[19792] = { AL["Eclipsion Centurion"], BabbleZone["Shadowmoon Valley"], 48.0, 61.8},
|
||||
[19795] = { AL["Eclipsion Blood Knight"], BabbleZone["Shadowmoon Valley"], 52.7, 63.2},
|
||||
[19796] = { AL["Eclipsion Archmage"], BabbleZone["Shadowmoon Valley"], 49.5, 58.5},
|
||||
[19806] = { AL["Eclipsion Bloodwarder"], BabbleZone["Shadowmoon Valley"], 46.5, 66.0},
|
||||
[19826] = { AL["Dark Conclave Shadowmancer"], BabbleZone["Shadowmoon Valley"], 37.5, 29.0},
|
||||
[20878] = { AL["Deathforge Guardian"], BabbleZone["Shadowmoon Valley"], 39.0, 47.0},
|
||||
[20887] = { AL["Deathforge Imp"], BabbleZone["Shadowmoon Valley"], 40.5, 39.1},
|
||||
[21050] = { AL["Enraged Earth Spirit"], BabbleZone["Shadowmoon Valley"], 46.5, 45.0},
|
||||
[21059] = { AL["Enraged Water Spirit"], BabbleZone["Shadowmoon Valley"], 51.0, 25.5},
|
||||
[21060] = { AL["Enraged Air Spirit"], BabbleZone["Shadowmoon Valley"], 70.5, 28.5},
|
||||
[21061] = { AL["Enraged Fire Spirit"], BabbleZone["Shadowmoon Valley"], 48.0, 43.5},
|
||||
[21302] = { AL["Shadow Council Warlock"], BabbleZone["Shadowmoon Valley"], 22.9, 38.2},
|
||||
[21314] = { AL["Terrormaster"], BabbleZone["Shadowmoon Valley"], 24.0, 45.0},
|
||||
[21454] = { AL["Ashtongue Warrior"], BabbleZone["Shadowmoon Valley"], 57.0, 36.0},
|
||||
[22016] = { AL["Eclipsion Soldier"], BabbleZone["Shadowmoon Valley"], 52.8, 66.5},
|
||||
[22017] = { AL["Eclipsion Spellbinder"], BabbleZone["Shadowmoon Valley"], 52.7, 63.4},
|
||||
[22018] = { AL["Eclipsion Cavalier"], BabbleZone["Shadowmoon Valley"], 52.7, 61.1},
|
||||
[22076] = { AL["Torloth the Magnificent"], BabbleZone["Shadowmoon Valley"], 51.2, 72.5},
|
||||
[22093] = { AL["Illidari Watcher"], BabbleZone["Shadowmoon Valley"], 52.5, 72.0},
|
||||
[23305] = { AL["Crazed Murkblood Foreman"], BabbleZone["Shadowmoon Valley"], 72.3, 90.0},
|
||||
[23324] = { AL["Crazed Murkblood Miner"], BabbleZone["Shadowmoon Valley"], 73.5, 88.5},
|
||||
|
||||
-- Sholazar Basin
|
||||
[28123] = { AL["Venture Co. Excavator"], BabbleZone["Sholazar Basin"], 35.8, 45.5},
|
||||
[28379] = { AL["Shattertusk Mammoth"], BabbleZone["Sholazar Basin"], 53.5, 24.4},
|
||||
|
||||
-- Silithus
|
||||
[14454] = { BabbleBoss["The Windreaver"], BabbleZone["Silithus"], 27.0, 26.8},
|
||||
|
||||
-- Silverpine Forest
|
||||
[3530] = { AL["Pyrewood Tailor"], BabbleZone["Silverpine Forest"], 45.7, 71.0},
|
||||
[3531] = { AL["Moonrage Tailor"], BabbleZone["Silverpine Forest"], 45.5, 73.3},
|
||||
|
||||
-- Stonetalon Mountains
|
||||
[4028] = { AL["Charred Ancient"], BabbleZone["Stonetalon Mountains"], 34.0, 66.1},
|
||||
[4029] = { AL["Blackened Ancient"], BabbleZone["Stonetalon Mountains"], 33.0, 70.7},
|
||||
[4030] = { AL["Vengeful Ancient"], BabbleZone["Stonetalon Mountains"], 33.0, 72.4},
|
||||
|
||||
-- Stranglethorn Vale
|
||||
[674 ] = { AL["Venture Co. Strip Miner"], BabbleZone["Stranglethorn Vale"], 40.5, 43.7},
|
||||
[938 ] = { AL["Kurzen Commando"], BabbleZone["Stranglethorn Vale"], 47.2, 7.6},
|
||||
[1561] = { AL["Bloodsail Raider"], BabbleZone["Stranglethorn Vale"], 27.0, 69.9},
|
||||
|
||||
-- Swamp of Sorrows
|
||||
[764 ] = { AL["Swampwalker"], BabbleZone["Swamp of Sorrows"], 51.0, 36.7},
|
||||
[765 ] = { AL["Swampwalker Elder"], BabbleZone["Swamp of Sorrows"], 12.0, 33.2},
|
||||
[766 ] = { AL["Tangled Horror"], BabbleZone["Swamp of Sorrows"], 12.0, 31.8},
|
||||
[1081] = { AL["Mire Lord"], BabbleZone["Swamp of Sorrows"], 5.6, 31.4},
|
||||
[14448] = { AL["Molt Thorn"], BabbleZone["Swamp of Sorrows"], 30.4, 41.4},
|
||||
|
||||
-- Tanaris
|
||||
[5615] = { AL["Wastewander Rogue"], BabbleZone["Tanaris"], 60.4, 39.3},
|
||||
[5616] = { AL["Wastewander Thief"], BabbleZone["Tanaris"], 63.0, 29.9},
|
||||
[5617] = { AL["Wastewander Shadow Mage"], BabbleZone["Tanaris"], 60.0, 37.4},
|
||||
[5618] = { AL["Wastewander Bandit"], BabbleZone["Tanaris"], 63.6, 30.6},
|
||||
[5623] = { AL["Wastewander Assassin"], BabbleZone["Tanaris"], 58.6, 36.1},
|
||||
[7805] = { AL["Wastewander Scofflaw"], BabbleZone["Tanaris"], 66.1, 35.0},
|
||||
[7883] = { AL["Andre Firebeard"], BabbleZone["Tanaris"], 73.4, 47.1},
|
||||
|
||||
-- Terokkar Forest
|
||||
[16810] = { AL["Bonechewer Backbreaker"], BabbleZone["Terokkar Forest"], 66.0, 55.2},
|
||||
[22148] = { AL["Gordunni Head-Splitter"], BabbleZone["Terokkar Forest"], 22.5, 8.3},
|
||||
[23022] = { AL["Gordunni Soulreaper"], BabbleZone["Terokkar Forest"], 22.9, 8.8},
|
||||
[22143] = { AL["Gordunni Back-Breaker"], BabbleZone["Terokkar Forest"], 21.2, 8.1},
|
||||
[22144] = { AL["Gordunni Elementalist"], BabbleZone["Terokkar Forest"], 21.3, 12.0},
|
||||
|
||||
-- The Barrens
|
||||
[3385] = { AL["Theramore Marine"], BabbleZone["The Barrens"], 61.2, 52.2},
|
||||
[3386] = { AL["Theramore Preserver"], BabbleZone["The Barrens"], 63.1, 56.7},
|
||||
|
||||
-- The Hinterlands
|
||||
[2644] = { AL["Vilebranch Hideskinner"], BabbleZone["The Hinterlands"], 62.2, 69.2},
|
||||
|
||||
-- The Storm Peaks
|
||||
[29370] = { AL["Stormforged Champion"], BabbleZone["The Storm Peaks"], 26.1, 47.5},
|
||||
[29376] = { AL["Stormforged Artificer"], BabbleZone["The Storm Peaks"], 31.5, 44.2},
|
||||
[29402] = { AL["Ironwool Mammoth"], BabbleZone["The Storm Peaks"], 36.0, 83.5},
|
||||
[29570] = { AL["Nascent Val'kyr"], BabbleZone["The Storm Peaks"], 27.1, 60.0},
|
||||
[29792] = { AL["Frostfeather Screecher"], BabbleZone["The Storm Peaks"], 33.5, 65.5},
|
||||
[29793] = { AL["Frostfeather Witch"], BabbleZone["The Storm Peaks"], 33.0, 66.8},
|
||||
[30208] = { AL["Stormforged Ambusher"], BabbleZone["The Storm Peaks"], 70.3, 57.5},
|
||||
[30222] = { AL["Stormforged Infiltrator"], BabbleZone["The Storm Peaks"], 58.5, 63.2},
|
||||
[30260] = { AL["Stoic Mammoth"], BabbleZone["The Storm Peaks"], 54.8, 64.9},
|
||||
[30448] = { AL["Plains Mammoth"], BabbleZone["The Storm Peaks"], 66.1, 45.6},
|
||||
|
||||
-- Thousand Needles
|
||||
[10760] = { AL["Grimtotem Geomancer"], BabbleZone["Thousand Needles"], 33.1, 35.4},
|
||||
|
||||
-- Un'Goro Crater
|
||||
[6556] = { AL["Muculent Ooze"], BabbleZone["Un'Goro Crater"], 62.2, 25.4},
|
||||
[6557] = { AL["Primal Ooze"], BabbleZone["Un'Goro Crater"], 51.8, 34.9},
|
||||
[6559] = { AL["Glutinous Ooze"], BabbleZone["Un'Goro Crater"], 39.0, 37.7},
|
||||
[9477] = { AL["Cloned Ooze"], BabbleZone["Un'Goro Crater"], 45.5, 22.7},
|
||||
|
||||
-- Western Plaguelands
|
||||
[1783] = { AL["Skeletal Flayer"], BabbleZone["Western Plaguelands"], 50.7, 80.5},
|
||||
[1791] = { AL["Slavering Ghoul"], BabbleZone["Western Plaguelands"], 36.0, 56.5},
|
||||
[1812] = { AL["Rotting Behemoth"], BabbleZone["Western Plaguelands"], 64.5, 36.6},
|
||||
[1813] = { AL["Decaying Horror"], BabbleZone["Western Plaguelands"], 62.0, 37.6},
|
||||
[1836] = { AL["Scarlet Cavalier"], BabbleZone["Western Plaguelands"], 42.5, 16.0},
|
||||
[1844] = { AL["Foreman Marcrid"], BabbleZone["Western Plaguelands"], 47.7, 35.4},
|
||||
[1885] = { AL["Scarlet Smith"], BabbleZone["Western Plaguelands"], 45.4, 14.5},
|
||||
[4494] = { AL["Scarlet Spellbinder"], BabbleZone["Western Plaguelands"], 52.7, 38.4},
|
||||
|
||||
-- Westfall
|
||||
[450 ] = { AL["Defias Renegade Mage"], BabbleZone["Westfall"], 53.0, 78.8},
|
||||
[590 ] = { AL["Defias Looter"], BabbleZone["Westfall"], 37.5, 58.4},
|
||||
|
||||
-- Wetlands
|
||||
[1051] = { AL["Dark Iron Dwarf"], BabbleZone["Wetlands"], 60.1, 25.7},
|
||||
[1052] = { AL["Dark Iron Saboteur"], BabbleZone["Wetlands"], 58.5, 24.2},
|
||||
[1053] = { AL["Dark Iron Tunneler"], BabbleZone["Wetlands"], 61.4, 27.7},
|
||||
[1054] = { AL["Dark Iron Demolitionist"], BabbleZone["Wetlands"], 59.5, 29.7},
|
||||
[1160] = { AL["Captain Halyndor"], BabbleZone["Wetlands"], 15.0, 24.0},
|
||||
[1364] = { AL["Balgaras the Foul"], BabbleZone["Wetlands"], 60.0, 28.7},
|
||||
|
||||
-- Winterspring
|
||||
[7428] = { AL["Frostmaul Giant"], BabbleZone["Winterspring"], 58.5, 70.0},
|
||||
[7437] = { AL["Cobalt Mageweaver"], BabbleZone["Winterspring"], 59.5, 49.2},
|
||||
[7438] = { AL["Winterfall Ursa"], BabbleZone["Winterspring"], 67.5, 36.3},
|
||||
[7440] = { AL["Winterfall Den Watcher"], BabbleZone["Winterspring"], 68.0, 35.5},
|
||||
[7524] = { AL["Anguished Highborne"], BabbleZone["Winterspring"], 50.7, 41.9},
|
||||
[14457] = { BabbleBoss["Princess Tempestria"], BabbleZone["Winterspring"], 52.7, 41.9},
|
||||
|
||||
-- Zul'drak
|
||||
[28851] = { AL["Enraged Mammoth"], BabbleZone["Zul'Drak"], 72.0, 41.1},
|
||||
[29235] = { AL["Gundrak Savage"], BabbleZone["Zul'Drak"], 66.8, 42.4},
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
-- Instances
|
||||
-------------------------------------------------------------------------------
|
||||
-- Ahn'kahet: The Old Kingdom
|
||||
[29311] = { BabbleBoss["Herald Volazj"], BabbleZone["Ahn'kahet: The Old Kingdom"], 0, 0},
|
||||
|
||||
-- Auchenai Crypts
|
||||
[18497] = { AL["Auchenai Monk"], BabbleZone["Auchenai Crypts"], 0, 0},
|
||||
[18521] = { AL["Raging Skeleton"], BabbleZone["Auchenai Crypts"], 0, 0},
|
||||
|
||||
-- Azjol-Nerub
|
||||
[29120] = { BabbleBoss["Anub'arak"], BabbleZone["Azjol-Nerub"], 0, 0},
|
||||
|
||||
-- Blackrock Depths
|
||||
[8897] = { AL["Doomforge Craftsman"], BabbleZone["Blackrock Depths"], 0, 0},
|
||||
[8898] = { AL["Anvilrage Marshal"], BabbleZone["Blackrock Depths"], 0, 0},
|
||||
[8903] = { AL["Anvilrage Captain"], BabbleZone["Blackrock Depths"], 0, 0},
|
||||
[8920] = { AL["Weapon Technician"], BabbleZone["Blackrock Depths"], 0, 0},
|
||||
[8983] = { BabbleBoss["Golem Lord Argelmach"], BabbleZone["Blackrock Depths"], 0, 0},
|
||||
[9024] = { BabbleBoss["Pyromancer Loregrain"], BabbleZone["Blackrock Depths"], 0, 0},
|
||||
[9025] = { BabbleBoss["Lord Roccor"], BabbleZone["Blackrock Depths"], 0, 0},
|
||||
[9028] = { BabbleBoss["Grizzle"], BabbleZone["Blackrock Depths"], 0, 0},
|
||||
[9499] = { BabbleBoss["Plugger Spazzring"], BabbleZone["Blackrock Depths"], 0, 0},
|
||||
[9543] = { BabbleBoss["Ribbly Screwspigot"], BabbleZone["Blackrock Depths"], 0, 0},
|
||||
[9554] = { AL["Hammered Patron"], BabbleZone["Blackrock Depths"], 0, 0},
|
||||
[10043] = { AL["Ribbly's Crony"], BabbleZone["Blackrock Depths"], 0, 0},
|
||||
|
||||
-- Blackrock Spire
|
||||
[9216] = { AL["Spirestone Warlord"], BabbleZone["Blackrock Spire"], 0, 0},
|
||||
[9259] = { AL["Firebrand Grunt"], BabbleZone["Blackrock Spire"], 0, 0},
|
||||
[9260] = { AL["Firebrand Legionnaire"], BabbleZone["Blackrock Spire"], 0, 0},
|
||||
[9262] = { AL["Firebrand Invoker"], BabbleZone["Blackrock Spire"], 0, 0},
|
||||
[9264] = { AL["Firebrand Pyromancer"], BabbleZone["Blackrock Spire"], 0, 0},
|
||||
[9596] = { BabbleBoss["Bannok Grimaxe"], BabbleZone["Blackrock Spire"], 0, 0},
|
||||
[9736] = { BabbleBoss["Quartermaster Zigris"], BabbleZone["Blackrock Spire"], 0, 0},
|
||||
[10264] = { BabbleBoss["Solakar Flamewreath"], BabbleZone["Blackrock Spire"], 0, 0},
|
||||
[10317] = { AL["Blackhand Elite"], BabbleZone["Blackrock Spire"], 0, 0},
|
||||
[10339] = { BabbleBoss["Gyth"], BabbleZone["Blackrock Spire"], 0, 0},
|
||||
[10363] = { BabbleBoss["General Drakkisath"], BabbleZone["Blackrock Spire"], 0, 0},
|
||||
[10899] = { BabbleBoss["Goraluk Anvilcrack"], BabbleZone["Blackrock Spire"], 0, 0},
|
||||
|
||||
-- Blackwing Lair
|
||||
[14401] = { AL["Master Elemental Shaper Krixix"], BabbleZone["Blackwing Lair"], 0, 0},
|
||||
|
||||
-- Dire Maul
|
||||
[11487] = { BabbleBoss["Magister Kalendris"], BabbleZone["Dire Maul"], 59.04, 48.82},
|
||||
[14354] = { BabbleBoss["Pusillin"], BabbleZone["Dire Maul"], 59.04, 48.82},
|
||||
|
||||
-- Drak'Tharon Keep
|
||||
[26632] = { BabbleBoss["The Prophet Tharon'ja"], BabbleZone["Drak'Tharon Keep"], 0, 0},
|
||||
|
||||
-- Gnomeregan
|
||||
[7800] = { BabbleBoss["Mekgineer Thermaplugg"], BabbleZone["Gnomeregan"], 0, 0},
|
||||
|
||||
-- Halls of Lightning
|
||||
[28923] = { BabbleBoss["Loken"], BabbleZone["Halls of Lightning"], 0, 0},
|
||||
|
||||
-- Halls of Stone
|
||||
[27978] = { BabbleBoss["Sjonnir The Ironshaper"], BabbleZone["Halls of Stone"], 0, 0},
|
||||
|
||||
-- Karazhan
|
||||
[16406] = { AL["Phantom Attendant"], BabbleZone["Karazhan"], 0, 0},
|
||||
[16408] = { AL["Phantom Valet"], BabbleZone["Karazhan"], 0, 0},
|
||||
[16472] = { AL["Phantom Stagehand"], BabbleZone["Karazhan"], 0, 0},
|
||||
[15687] = { BabbleBoss["Moroes"], BabbleZone["Karazhan"], 0, 0},
|
||||
[15688] = { BabbleBoss["Terestian Illhoof"], BabbleZone["Karazhan"], 0, 0},
|
||||
[16152] = { BabbleBoss["Attumen the Huntsman"], BabbleZone["Karazhan"], 0, 0},
|
||||
[16524] = { BabbleBoss["Shade of Aran"], BabbleZone["Karazhan"], 0, 0},
|
||||
|
||||
-- Magister's Terrace
|
||||
[24560] = { BabbleBoss["Priestess Delrissa"], BabbleZone["Magisters' Terrace"], 0, 0},
|
||||
[24664] = { BabbleBoss["Kael'thas Sunstrider"], BabbleZone["Magisters' Terrace"], 0, 0},
|
||||
|
||||
-- Mana-Tombs
|
||||
[18314] = { AL["Nexus Stalker"], BabbleZone["Mana-Tombs"], 0, 0},
|
||||
[18317] = { AL["Ethereal Priest"], BabbleZone["Mana-Tombs"], 0, 0},
|
||||
[18344] = { BabbleBoss["Nexus-Prince Shaffar"], BabbleZone["Mana-Tombs"], 0, 0},
|
||||
|
||||
-- Oculus
|
||||
[27656] = { BabbleBoss["Ley-Guardian Eregos"], BabbleZone["The Oculus"], 0, 0},
|
||||
|
||||
-- Old Hillsbrad Foothills
|
||||
[17820] = { AL["Durnholde Rifleman"], BabbleZone["Old Hillsbrad Foothills"], 0, 0},
|
||||
[17862] = { BabbleBoss["Captain Skarloc"], BabbleZone["Old Hillsbrad Foothills"], 0, 0},
|
||||
[18096] = { BabbleBoss["Epoch Hunter"], BabbleZone["Old Hillsbrad Foothills"], 0, 0},
|
||||
[28132] = { AL["Don Carlos"], BabbleZone["Old Hillsbrad Foothills"], 0, 0},
|
||||
|
||||
-- Ruins of Ahn'Qiraj
|
||||
[15340] = { BabbleBoss["Moam"], BabbleZone["Ruins of Ahn'Qiraj"], 0, 0},
|
||||
|
||||
-- Scholomance
|
||||
[1853] = { BabbleBoss["Darkmaster Gandling"], BabbleZone["Scholomance"], 0, 0},
|
||||
[10469] = { AL["Scholomance Adept"], BabbleZone["Scholomance"], 0, 0},
|
||||
[10499] = { AL["Spectral Researcher"], BabbleZone["Scholomance"], 0, 0},
|
||||
[10503] = { BabbleBoss["Jandice Barov"], BabbleZone["Scholomance"], 0, 0},
|
||||
[10508] = { BabbleBoss["Ras Frostwhisper"], BabbleZone["Scholomance"], 0, 0},
|
||||
|
||||
-- Sethekk Halls
|
||||
[18320] = { AL["Time-Lost Shadowmage"], BabbleZone["Sethekk Halls"], 0, 0},
|
||||
[18322] = { AL["Sethekk Ravenguard"], BabbleZone["Sethekk Halls"], 0, 0},
|
||||
[18472] = { BabbleBoss["Darkweaver Syth"], BabbleZone["Sethekk Halls"], 0, 0},
|
||||
|
||||
-- Shadow Labyrinth
|
||||
[18667] = { BabbleBoss["Blackheart the Inciter"], BabbleZone["Shadow Labyrinth"], 0, 0},
|
||||
[18708] = { BabbleBoss["Murmur"], BabbleZone["Shadow Labyrinth"], 0, 0},
|
||||
[18830] = { AL["Cabal Fanatic"], BabbleZone["Shadow Labyrinth"], 0, 0},
|
||||
|
||||
-- Stratholme
|
||||
[10398] = { AL["Thuzadin Shadowcaster"], BabbleZone["Stratholme"], 0, 0},
|
||||
[10422] = { AL["Crimson Sorcerer"], BabbleZone["Stratholme"], 0, 0},
|
||||
[10426] = { AL["Crimson Inquisitor"], BabbleZone["Stratholme"], 0, 0},
|
||||
[10813] = { BabbleBoss["Balnazzar"], BabbleZone["Stratholme"], 0, 0},
|
||||
[10438] = { BabbleBoss["Maleki the Pallid"], BabbleZone["Stratholme"], 0, 0},
|
||||
[10997] = { BabbleBoss["Cannon Master Willey"], BabbleZone["Stratholme"], 0, 0},
|
||||
|
||||
-- Temple of Ahn'Qiraj
|
||||
[15263] = { BabbleBoss["The Prophet Skeram"], BabbleZone["Temple of Ahn'Qiraj"], 0, 0},
|
||||
[15275] = { BabbleBoss["Emperor Vek'nilash"], BabbleZone["Temple of Ahn'Qiraj"], 0, 0},
|
||||
[15276] = { BabbleBoss["Emperor Vek'lor"], BabbleZone["Temple of Ahn'Qiraj"], 0, 0},
|
||||
|
||||
-- The Arcatraz
|
||||
[20869] = { AL["Arcatraz Sentinel"], BabbleZone["The Arcatraz"], 0, 0},
|
||||
[20880] = { AL["Eredar Deathbringer"], BabbleZone["The Arcatraz"], 0, 0},
|
||||
[20898] = { AL["Gargantuan Abyssal"], BabbleZone["The Arcatraz"], 0, 0},
|
||||
[20900] = { AL["Unchained Doombringer"], BabbleZone["The Arcatraz"], 0, 0},
|
||||
[20885] = { BabbleBoss["Dalliah the Doomsayer"], BabbleZone["The Arcatraz"], 0, 0},
|
||||
|
||||
--The Black Morass
|
||||
[21104] = { AL["Rift Keeper"], BabbleZone["The Black Morass"], 0, 0},
|
||||
[17839] = { AL["Rift Lord"], BabbleZone["The Black Morass"], 0, 0},
|
||||
[17879] = { BabbleBoss["Chrono Lord Deja"], BabbleZone["The Black Morass"], 0, 0},
|
||||
|
||||
-- The Botanica
|
||||
[17975] = { BabbleBoss["High Botanist Freywinn"], BabbleZone["The Botanica"], 0, 0},
|
||||
[18422] = { AL["Sunseeker Botanist"], BabbleZone["The Botanica"], 0, 0},
|
||||
[17977] = { BabbleBoss["Warp Splinter"], BabbleZone["The Botanica"], 0, 0},
|
||||
[17978] = { BabbleBoss["Thorngrin the Tender"], BabbleZone["The Botanica"], 0, 0},
|
||||
|
||||
-- The Deadmines
|
||||
[657 ] = { AL["Defias Pirate"], BabbleZone["The Deadmines"], 0, 0},
|
||||
[1732] = { AL["Defias Squallshaper"], BabbleZone["The Deadmines"], 0, 0},
|
||||
|
||||
-- The Mechanar
|
||||
[19168] = { AL["Sunseeker Astromage"], BabbleZone["The Mechanar"], 0, 0},
|
||||
[19219] = { BabbleBoss["Mechano-Lord Capacitus"], BabbleZone["The Mechanar"], 0, 0},
|
||||
[19220] = { BabbleBoss["Pathaleon the Calculator"], BabbleZone["The Mechanar"], 0, 0},
|
||||
[19221] = { BabbleBoss["Nethermancer Sepethrea"], BabbleZone["The Mechanar"], 0, 0},
|
||||
|
||||
[18831] = { BabbleBoss["High King Maulgar"], BabbleZone["Gruul's Lair"], 0, 0},
|
||||
|
||||
-- The Nexus
|
||||
[26723] = { BabbleBoss["Keristrasza"], BabbleZone["The Nexus"], 0, 0},
|
||||
|
||||
-- The Shattered Halls
|
||||
[17465] = { AL["Shattered Hand Centurion"], BabbleZone["The Shattered Halls"], 0, 0},
|
||||
[16807] = { BabbleBoss["Grand Warlock Nethekurse"], BabbleZone["The Shattered Halls"], 0, 0},
|
||||
|
||||
-- The Slave Pens
|
||||
[17941] = { BabbleBoss["Mennu the Betrayer"], BabbleZone["The Slave Pens"], 0, 0},
|
||||
|
||||
-- The Steamvault
|
||||
[17722] = { AL["Coilfang Sorceress"], BabbleZone["The Steamvault"], 0, 0},
|
||||
[17803] = { AL["Coilfang Oracle"], BabbleZone["The Steamvault"], 0, 0},
|
||||
[17796] = { BabbleBoss["Mekgineer Steamrigger"], BabbleZone["The Steamvault"], 0, 0},
|
||||
[17797] = { BabbleBoss["Hydromancer Thespia"], BabbleZone["The Steamvault"], 0, 0},
|
||||
[17798] = { BabbleBoss["Warlord Kalithresh"], BabbleZone["The Steamvault"], 0, 0},
|
||||
|
||||
-- The Temple of Atal'Hakkar
|
||||
[5226] = { AL["Murk Worm"], BabbleZone["The Temple of Atal'Hakkar"], 0, 0},
|
||||
|
||||
-- The Violet Hold
|
||||
[31134] = { BabbleBoss["Cyanigosa"], BabbleZone["The Violet Hold"], 0, 0},
|
||||
|
||||
-- Utgarde Keep
|
||||
[23954] = { BabbleBoss["Ingvar the Plunderer"], BabbleZone["Utgarde Keep"], 0, 0},
|
||||
|
||||
-- Utgarde Pinnacle
|
||||
[26861] = { BabbleBoss["King Ymiron"], BabbleZone["Utgarde Pinnacle"], 0, 0},
|
||||
|
||||
};
|
||||
|
||||
AtlasLoot_CraftingData["QuestList"] = {
|
||||
|
||||
|
||||
[22] = {BabbleZone["Westfall"], 55.77, 30.92, ALLIANCE},
|
||||
[38] = {BabbleZone["Westfall"], 55.77, 30.92, ALLIANCE},
|
||||
[90] = {BabbleZone["Duskwood"], 73.8, 43.7, ALLIANCE},
|
||||
[92] = {BabbleZone["Redridge Mountains"], 22.7, 44.0, ALLIANCE},
|
||||
[93] = {BabbleZone["Duskwood"], 73.8, 43.7, ALLIANCE},
|
||||
[127] = {BabbleZone["Redridge Mountains"], 27.8, 47.3, ALLIANCE},
|
||||
[296] = {BabbleZone["Wetlands"], 38.0, 49.9, ALLIANCE},
|
||||
[384] = {BabbleZone["Dun Morogh"], 46.8, 52.5, ALLIANCE},
|
||||
[385] = {BabbleZone["Loch Modan"], 81.8, 61.7, ALLIANCE},
|
||||
[418] = {BabbleZone["Loch Modan"], 34.8, 49.1, ALLIANCE},
|
||||
[429] = {BabbleZone["Silverpine Forest"], 53.5, 13.5, HORDE},
|
||||
[471] = {BabbleZone["Wetlands"], 8.6, 55.7, ALLIANCE},
|
||||
[498] = {BabbleZone["Hillsbrad Foothills"], 63.2, 20.7, HORDE},
|
||||
[501] = {BabbleZone["Hillsbrad Foothills"], 61.5, 19.2, HORDE},
|
||||
[555] = {BabbleZone["Hillsbrad Foothills"], 51.8, 58.7, ALLIANCE},
|
||||
[564] = {BabbleZone["Hillsbrad Foothills"], 52.4, 56.0, ALLIANCE},
|
||||
[703] = {BabbleZone["Badlands"], 42.4, 52.8, NEUTRAL},
|
||||
[715] = {BabbleZone["Badlands"], 25.8, 44.4, NEUTRAL},
|
||||
[769] = {BabbleZone["Thunder Bluff"], 44.1, 44.6, HORDE},
|
||||
[862] = {BabbleZone["The Barrens"], 55.3, 31.8, HORDE},
|
||||
[1487] = {BabbleZone["The Barrens"], 45.8, 36.3, NEUTRAL},
|
||||
[1559] = {BabbleZone["Badlands"], 42.4, 52.8, NEUTRAL},
|
||||
[1578] = {BabbleZone["Ironforge"], 48.5, 43.0, ALLIANCE},
|
||||
[1582] = {BabbleZone["Darnassus"], 64.3, 21.9, ALLIANCE},
|
||||
[1618] = {BabbleZone["Ironforge"], 48.5, 43.0, ALLIANCE},
|
||||
[2178] = {BabbleZone["Darkshore"], 37.7, 40.7, ALLIANCE},
|
||||
[2203] = {BabbleZone["Badlands"], 2.5, 46.1, HORDE},
|
||||
[2359] = {BabbleZone["Westfall"], 68.4, 70.0, ALLIANCE},
|
||||
[2478] = {BabbleZone["The Barrens"], 55.5, 5.6, HORDE},
|
||||
[2501] = {BabbleZone["Loch Modan"], 37.0, 49.2, ALLIANCE},
|
||||
[2751] = {BabbleZone["Orgrimmar"], 78.0, 21.4, HORDE},
|
||||
[2752] = {BabbleZone["Orgrimmar"], 78.0, 21.4, HORDE},
|
||||
[2753] = {BabbleZone["Orgrimmar"], 78.0, 21.4, HORDE},
|
||||
[2754] = {BabbleZone["Orgrimmar"], 78.0, 21.4, HORDE},
|
||||
[2755] = {BabbleZone["Orgrimmar"], 78.0, 21.4, HORDE},
|
||||
[2756] = {BabbleZone["Orgrimmar"], 80.7, 23.4, HORDE},
|
||||
[2758] = {BabbleZone["Stormwind City"], 63.0, 36.9, ALLIANCE},
|
||||
[2761] = {BabbleZone["Stranglethorn Vale"], 50.6, 20.5, NEUTRAL},
|
||||
[2762] = {BabbleZone["Stranglethorn Vale"], 50.6, 20.5, NEUTRAL},
|
||||
[2763] = {BabbleZone["Stranglethorn Vale"], 50.6, 20.5, NEUTRAL},
|
||||
[2771] = {BabbleZone["Tanaris"], 51.5, 28.7, NEUTRAL},
|
||||
[2772] = {BabbleZone["Tanaris"], 51.5, 28.7, NEUTRAL},
|
||||
[2773] = {BabbleZone["Tanaris"], 51.5, 28.7, NEUTRAL},
|
||||
[2848] = {BabbleZone["Feralas"], 30.6, 42.7, ALLIANCE},
|
||||
[2849] = {BabbleZone["Feralas"], 30.6, 42.7, ALLIANCE},
|
||||
[2850] = {BabbleZone["Feralas"], 30.6, 42.7, ALLIANCE},
|
||||
[2851] = {BabbleZone["Feralas"], 30.6, 42.7, ALLIANCE},
|
||||
[2852] = {BabbleZone["Feralas"], 30.6, 42.7, ALLIANCE},
|
||||
[2853] = {BabbleZone["Feralas"], 30.6, 42.7, ALLIANCE},
|
||||
[2855] = {BabbleZone["Feralas"], 74.5, 42.9, HORDE},
|
||||
[2856] = {BabbleZone["Feralas"], 74.5, 42.9, HORDE},
|
||||
[2857] = {BabbleZone["Feralas"], 74.5, 42.9, HORDE},
|
||||
[2858] = {BabbleZone["Feralas"], 74.5, 42.9, HORDE},
|
||||
[2859] = {BabbleZone["Feralas"], 74.5, 42.9, HORDE},
|
||||
[2860] = {BabbleZone["Feralas"], 74.5, 42.9, HORDE},
|
||||
[3402] = {BabbleZone["Searing Gorge"], 41.0, 74.8, NEUTRAL},
|
||||
[4083] = {BabbleZone["Blackrock Depths"], 0, 0, NEUTRAL},
|
||||
[4161] = {BabbleZone["Teldrassil"], 57.1, 61.3, ALLIANCE},
|
||||
[5124] = {BabbleZone["Winterspring"], 61.0, 38.7, NEUTRAL},
|
||||
[5127] = {BabbleZone["Winterspring"], 63.8, 73.8, NEUTRAL},
|
||||
[5305] = {BabbleZone["Winterspring"], 61.3, 37.1, NEUTRAL},
|
||||
[5306] = {BabbleZone["Winterspring"], 61.3, 37.1, NEUTRAL},
|
||||
[5307] = {BabbleZone["Winterspring"], 61.3, 37.2, NEUTRAL},
|
||||
[5518] = {BabbleZone["Dire Maul"], 0, 0, NEUTRAL},
|
||||
[6032] = {BabbleZone["Felwood"], 65.7, 2.9, NEUTRAL},
|
||||
[6610] = {BabbleZone["Tanaris"], 52.6, 28.1, NEUTRAL},
|
||||
[6622] = {BabbleZone["Arathi Highlands"], 73.4, 36.8, HORDE},
|
||||
[6624] = {BabbleZone["Dustwallow Marsh"], 67.7, 48.9, ALLIANCE},
|
||||
[7321] = {BabbleZone["Hillsbrad Foothills"], 62.4, 19.1, HORDE},
|
||||
[7493] = {BabbleZone["Orgrimmar"], 51.0, 76.5, HORDE},
|
||||
[7497] = {BabbleZone["Stormwind City"], 67.2, 85.5, ALLIANCE},
|
||||
[7604] = {BabbleZone["Blackrock Depths"], 0, 0, NEUTRAL},
|
||||
[7649] = {BabbleZone["Dire Maul"], 0, 0, NEUTRAL},
|
||||
[7650] = {BabbleZone["Dire Maul"], 0, 0, NEUTRAL},
|
||||
[7651] = {BabbleZone["Dire Maul"], 0, 0, NEUTRAL},
|
||||
[7653] = {BabbleZone["Tanaris"], 51.4, 28.7, NEUTRAL},
|
||||
[7654] = {BabbleZone["Tanaris"], 51.4, 28.7, NEUTRAL},
|
||||
[7655] = {BabbleZone["Tanaris"], 51.4, 28.7, NEUTRAL},
|
||||
[7656] = {BabbleZone["Tanaris"], 51.4, 28.7, NEUTRAL},
|
||||
[7657] = {BabbleZone["Tanaris"], 51.4, 28.7, NEUTRAL},
|
||||
[7658] = {BabbleZone["Tanaris"], 51.4, 28.7, NEUTRAL},
|
||||
[7659] = {BabbleZone["Tanaris"], 51.4, 28.7, NEUTRAL},
|
||||
[8313] = {BabbleZone["Silithus"], 38.0, 45.3, NEUTRAL},
|
||||
[8323] = {BabbleZone["Silithus"], 67.1, 69.7, NEUTRAL},
|
||||
[8586] = {BabbleZone["Tanaris"], 52.6, 28.1, NEUTRAL},
|
||||
[8798] = {BabbleZone["Winterspring"], 60.9, 37.7, NEUTRAL},
|
||||
[9171] = {BabbleZone["Ghostlands"], 48.3, 30.9, HORDE},
|
||||
[9249] = {BabbleZone["Darkmoon Faire"], 0, 0, NEUTRAL},
|
||||
[9356] = {BabbleZone["Hellfire Peninsula"], 49.2, 74.8, NEUTRAL},
|
||||
[9454] = {BabbleZone["Azuremyst Isle"], 49.8, 51.9, ALLIANCE},
|
||||
[9635] = {BabbleZone["Zangarmarsh"], 33.7, 50.2, HORDE},
|
||||
[9636] = {BabbleZone["Zangarmarsh"], 68.6, 50.2, ALLIANCE},
|
||||
[10860] = {BabbleZone["Blade's Edge Mountains"], 76.1, 60.3, HORDE},
|
||||
[11377] = {BabbleZone["Shattrath City"], 61.6, 16.5, NEUTRAL},
|
||||
[11379] = {BabbleZone["Shattrath City"], 61.6, 16.5, NEUTRAL},
|
||||
[11380] = {BabbleZone["Shattrath City"], 61.6, 16.5, NEUTRAL},
|
||||
[11381] = {BabbleZone["Shattrath City"], 61.6, 16.5, NEUTRAL},
|
||||
[11666] = {BabbleZone["Terokkar Forest"], 38.7, 12.8, NEUTRAL},
|
||||
[11667] = {BabbleZone["Terokkar Forest"], 38.7, 12.8, NEUTRAL},
|
||||
[11668] = {BabbleZone["Terokkar Forest"], 38.7, 12.8, NEUTRAL},
|
||||
[11669] = {BabbleZone["Terokkar Forest"], 38.7, 12.8, NEUTRAL},
|
||||
[12889] = {BabbleZone["The Storm Peaks"], 37.7, 46.5, NEUTRAL},
|
||||
[13571] = {BabbleZone["Dalaran"], 0, 0, NEUTRAL},
|
||||
[13087] = {BabbleZone["Howling Fjord"], 58.2, 62.1, ALLIANCE},
|
||||
[13088] = {BabbleZone["Borean Tundra"], 57.9, 71.5, ALLIANCE},
|
||||
[13089] = {BabbleZone["Howling Fjord"], 78.7, 29.5, HORDE},
|
||||
[13090] = {BabbleZone["Borean Tundra"], 42.0, 54.2, HORDE},
|
||||
[13100] = {BabbleZone["Dalaran"], 40.5, 65.8, ALLIANCE},
|
||||
[13101] = {BabbleZone["Dalaran"], 40.5, 65.8, ALLIANCE},
|
||||
[13102] = {BabbleZone["Dalaran"], 40.5, 65.8, ALLIANCE},
|
||||
[13103] = {BabbleZone["Dalaran"], 40.5, 65.8, ALLIANCE},
|
||||
[13107] = {BabbleZone["Dalaran"], 40.5, 65.8, ALLIANCE},
|
||||
[13112] = {BabbleZone["Dalaran"], 70.0, 38.6, HORDE},
|
||||
[13113] = {BabbleZone["Dalaran"], 70.0, 38.6, HORDE},
|
||||
[13114] = {BabbleZone["Dalaran"], 70.0, 38.6, HORDE},
|
||||
[13115] = {BabbleZone["Dalaran"], 70.0, 38.6, HORDE},
|
||||
[13116] = {BabbleZone["Dalaran"], 70.0, 38.6, HORDE},
|
||||
[14151] = {BabbleZone["Dalaran"], 42.5, 32.1, NEUTRAL},
|
||||
[14182] = {AL["Bounty Hunter Kolark"]..WHITE.." - "..BabbleZone["Orgrimmar"], 75.1, 23.0, HORDE},
|
||||
[14183] = {AL["Artilleryman Sheldonore"]..WHITE.." - "..BabbleZone["Ironforge"], 19.7, 51.9, ALLIANCE},
|
||||
};
|
||||
@@ -1957,6 +1957,23 @@ AtlasLoot_Data["TailoringCLASSIC"] = {
|
||||
{
|
||||
Name = AL["High Risk"];
|
||||
[1] = { name = AL["Rare"], icon = "INV_Box_01"},
|
||||
[2] = {itemID = 967817, spellID = 968500 }; --Wrist Wraps of Precision
|
||||
[3] = {itemID = 967813, spellID = 968496 }; --Wrist Wraps of Might
|
||||
[4] = {itemID = 967823, spellID = 968506 }; --Wrist Wraps of Glory
|
||||
[5] = {itemID = 967815, spellID = 968498 }; --Wrist Wraps of Fury
|
||||
[6] = {itemID = 967819, spellID = 968502 }; --Wrist Wraps of Efficiency
|
||||
[7] = {itemID = 967821, spellID = 968504 }; --Wrist Wraps of Crushing
|
||||
[16] = { name = AL["Epic"], icon = "INV_Box_01"},
|
||||
[17] = {itemID = 967818, spellID = 968501 }; --Fitted Wrist Wraps of Precision
|
||||
[18] = {itemID = 967814, spellID = 968497 }; --Fitted Wrist Wraps of Might
|
||||
[19] = {itemID = 967824, spellID = 968507 }; --Fitted Wrist Wraps of Glory
|
||||
[20] = {itemID = 967816, spellID = 968499 }; --Fitted Wrist Wraps of Fury
|
||||
[21] = {itemID = 967820, spellID = 968503 }; --Fitted Wrist Wraps of Efficiency
|
||||
[22] = {itemID = 967822, spellID = 968505 }; --Fitted Wrist Wraps of Crushing
|
||||
};
|
||||
{
|
||||
Name = AL["High Risk"].." Old";
|
||||
[1] = { name = AL["Rare"], icon = "INV_Box_01"},
|
||||
[2] = {itemID = 967215, spellID = 968061 }; --Heavy Dragonweave Cloak Lining
|
||||
[3] = {itemID = 967218, spellID = 968064 }; --Heavy Twilight Cloak Lining
|
||||
[4] = {itemID = 967221, spellID = 968067 }; --Heavy Scarlet Cloak Lining
|
||||
|
||||
@@ -598,6 +598,7 @@ AtlasLoot_Data["AQOpening"] = {
|
||||
AtlasLoot_Data["BlackfathomDeeps"] = {
|
||||
Module = "AtlasLoot_OriginalWoW";
|
||||
Name = BabbleZone["Blackfathom Deeps"];
|
||||
Type = "ClassicDungeon";
|
||||
Map = "BlackfathomDeeps";
|
||||
{
|
||||
Name = BabbleBoss["Ghamoo-ra"];
|
||||
@@ -1997,6 +1998,7 @@ AtlasLoot_Data["DireMaulWest"] = {
|
||||
AtlasLoot_Data["Gnomeregan"] = {
|
||||
Module = "AtlasLoot_OriginalWoW";
|
||||
Name = BabbleZone["Gnomeregan"];
|
||||
Type = "ClassicDungeon";
|
||||
Map = "Gnomeregan";
|
||||
{
|
||||
Name = AL["Namdo Bizzfizzle"];
|
||||
@@ -2071,6 +2073,7 @@ AtlasLoot_Data["Gnomeregan"] = {
|
||||
AtlasLoot_Data["Maraudon"] = {
|
||||
Module = "AtlasLoot_OriginalWoW";
|
||||
Name = BabbleZone["Maraudon"];
|
||||
Type = "ClassicDungeon";
|
||||
Map = "Maraudon";
|
||||
{
|
||||
Name = BabbleBoss["Noxxion"];
|
||||
@@ -2147,6 +2150,7 @@ AtlasLoot_Data["Maraudon"] = {
|
||||
AtlasLoot_Data["RagefireChasm"] = {
|
||||
Module = "AtlasLoot_OriginalWoW";
|
||||
Name = BabbleZone["Ragefire Chasm"];
|
||||
Type = "ClassicDungeon";
|
||||
Map = "RagefireChasm";
|
||||
{
|
||||
Name = BabbleBoss["Taragaman the Hungerer"];
|
||||
@@ -2174,6 +2178,7 @@ AtlasLoot_Data["RagefireChasm"] = {
|
||||
AtlasLoot_Data["RazorfenDowns"] = {
|
||||
Module = "AtlasLoot_OriginalWoW";
|
||||
Name = BabbleZone["Razorfen Downs"];
|
||||
Type = "ClassicDungeon";
|
||||
Map = "RazorfenDowns";
|
||||
{
|
||||
Name = BabbleBoss["Tuten'kash"];
|
||||
@@ -2241,6 +2246,7 @@ AtlasLoot_Data["RazorfenDowns"] = {
|
||||
AtlasLoot_Data["RazorfenKraul"] = {
|
||||
Module = "AtlasLoot_OriginalWoW";
|
||||
Name = BabbleZone["Razorfen Kraul"];
|
||||
Type = "ClassicDungeon";
|
||||
Map = "RazorfenKraul";
|
||||
{
|
||||
Name = AL["Roogug"];
|
||||
@@ -2311,6 +2317,7 @@ AtlasLoot_Data["RazorfenKraul"] = {
|
||||
AtlasLoot_Data["Scarlet Monastery"] = {
|
||||
Module = "AtlasLoot_OriginalWoW";
|
||||
Name = BabbleZone["Scarlet Monastery"];
|
||||
Type = "ClassicDungeon";
|
||||
Map = "ScarletMonastery";
|
||||
{
|
||||
Name = "Armory";
|
||||
@@ -2759,6 +2766,7 @@ AtlasLoot_Data["Scholomance"] = {
|
||||
AtlasLoot_Data["ShadowfangKeep"] = {
|
||||
Module = "AtlasLoot_OriginalWoW";
|
||||
Name = BabbleZone["Shadowfang Keep"];
|
||||
Type = "ClassicDungeon";
|
||||
Map = "ShadowfangKeep";
|
||||
{
|
||||
Name = BabbleBoss["Deathsworn Captain"];
|
||||
@@ -3107,6 +3115,7 @@ AtlasLoot_Data["Stratholme"] = {
|
||||
AtlasLoot_Data["TheDeadmines"] = {
|
||||
Module = "AtlasLoot_OriginalWoW";
|
||||
Name = BabbleZone["The Deadmines"];
|
||||
Type = "ClassicDungeon";
|
||||
Map = "TheDeadmines";
|
||||
{
|
||||
Name = BabbleBoss["Marisa du'Paige"];
|
||||
@@ -3183,6 +3192,7 @@ AtlasLoot_Data["TheDeadmines"] = {
|
||||
AtlasLoot_Data["TheStockade"] = {
|
||||
Module = "AtlasLoot_OriginalWoW";
|
||||
Name = BabbleZone["The Stockade"];
|
||||
Type = "ClassicDungeon";
|
||||
Map = "TheStockade";
|
||||
{
|
||||
Name = BabbleBoss["Targorr the Dread"];
|
||||
@@ -3230,6 +3240,7 @@ AtlasLoot_Data["TheStockade"] = {
|
||||
AtlasLoot_Data["SunkenTemple"] = {
|
||||
Module = "AtlasLoot_OriginalWoW";
|
||||
Name = "Sunken Temple";
|
||||
Type = "ClassicDungeon";
|
||||
Map = "TheSunkenTemple";
|
||||
{
|
||||
Name = "Spawn of Hakkar";
|
||||
@@ -3366,6 +3377,7 @@ AtlasLoot_Data["SunkenTemple"] = {
|
||||
AtlasLoot_Data["Uldaman"] = {
|
||||
Module = "AtlasLoot_OriginalWoW";
|
||||
Name = BabbleZone["Uldaman"];
|
||||
Type = "ClassicDungeon";
|
||||
Map = "Uldaman";
|
||||
{
|
||||
Name = AL["Magregan Deepshadow"];
|
||||
@@ -3497,6 +3509,7 @@ AtlasLoot_Data["Uldaman"] = {
|
||||
AtlasLoot_Data["WailingCaverns"] = {
|
||||
Module = "AtlasLoot_OriginalWoW";
|
||||
Name = BabbleZone["Wailing Caverns"];
|
||||
Type = "ClassicDungeon";
|
||||
Map = "WailingCaverns";
|
||||
{
|
||||
Name = AL["Kalldan Felmoon"];
|
||||
@@ -3578,6 +3591,7 @@ AtlasLoot_Data["WailingCaverns"] = {
|
||||
AtlasLoot_Data["ZulFarrak"] = {
|
||||
Module = "AtlasLoot_OriginalWoW";
|
||||
Name = BabbleZone["Zul'Farrak"];
|
||||
Type = "ClassicDungeon";
|
||||
Map = "ZulFarrak";
|
||||
{
|
||||
Name = BabbleBoss["Antu'sul"];
|
||||
@@ -3729,7 +3743,6 @@ AtlasLoot_Data["ZulGurub"] = {
|
||||
[13] = { itemID = 19893, droprate = "13.11%" }; --Zanzil's Seal
|
||||
[14] = { itemID = 19863, droprate = "12.32%" }; --Primalist's Seal
|
||||
[16] = { icon = "INV_Banner_01", name = "=q4=ZG Sets", ootTable = {{"ZGSets", "AtlasLoot_Data", 1},"Source"} };
|
||||
Module = "AtlasLoot_OriginalWoW";
|
||||
[18] = { itemID = 22637 }; --Primal Hakkari Idol
|
||||
[19] = { itemID = 19943, droprate = "9.4%" }; --Massive Mojo
|
||||
};
|
||||
@@ -3771,14 +3784,12 @@ AtlasLoot_Data["ZulGurub"] = {
|
||||
[8] = { itemID = 20266, droprate = "8.69%" }; --Peacekeeper Leggings
|
||||
[9] = { itemID = 19901, droprate = "13.36%" }; --Zulian Slicer
|
||||
[16] = { icon = "INV_Banner_01", name = "=q4=ZG Sets", ootTable = {{"ZGSets", "AtlasLoot_Data", 1},"Source"} };
|
||||
Module = "AtlasLoot_OriginalWoW";
|
||||
[18] = { itemID = 19943, droprate = "8.3%" }; --Massive Mojo
|
||||
[19] = { itemID = 19881, droprate = "100%" }; --Channeler's Head
|
||||
};
|
||||
{
|
||||
Name = BabbleBoss["High Priestess Arlokk"];
|
||||
[16] = { icon = "INV_Banner_01", name = "=q4=ZG Sets", ootTable = {{"ZGSets", "AtlasLoot_Data", 1},"Source"} };
|
||||
Module = "AtlasLoot_OriginalWoW";
|
||||
[18] = { itemID = 19943, droprate = "5.6%" }; --Massive Mojo
|
||||
[19] = { itemID = 19881, droprate = "100%" }; --Channeler's Head
|
||||
[1] = { itemID = 19910, droprate = "3.62%" }; --Arlokk's Grasp
|
||||
@@ -3791,7 +3802,6 @@ AtlasLoot_Data["ZulGurub"] = {
|
||||
{
|
||||
Name = BabbleBoss["Jin'do the Hexxer"];
|
||||
[16] = { icon = "INV_Banner_01", name = "=q4=ZG Sets", ootTable = {{"ZGSets", "AtlasLoot_Data", 1},"Source"} };
|
||||
Module = "AtlasLoot_OriginalWoW";
|
||||
[18] = { itemID = 22637 }; --Primal Hakkari Idol
|
||||
[19] = { itemID = 19943, droprate = "8.4%" }; --Massive Mojo
|
||||
[1] = { itemID = 19885, droprate = "6.82%" }; --Jin'do's Evil Eye
|
||||
|
||||
Reference in New Issue
Block a user