Update
This commit is contained in:
@@ -1,19 +1,19 @@
|
||||
function()
|
||||
results = C_AuctionHouse.GetBrowseResults()
|
||||
-- DevTools_Dump(results)
|
||||
for k,v in ipairs(results) do
|
||||
local itemID = v.itemKey.itemID
|
||||
local itemName = GetItemInfo(itemID)
|
||||
if aura_env.sellPriceThresholds[itemID] then
|
||||
if v.minPrice > aura_env.sellPriceThresholds[itemID] then
|
||||
print(itemName, "too expensive")
|
||||
SendChatMessage("POKE", "WHISPER", nil, UnitName("player"))
|
||||
end
|
||||
elseif aura_env.buyPriceThresholds[itemID] then
|
||||
if v.minPrice < aura_env.buyPriceThresholds[itemID] then
|
||||
print(itemName, "too cheap")
|
||||
SendChatMessage("POKE", "WHISPER", nil, UnitName("player"))
|
||||
end
|
||||
end
|
||||
end
|
||||
function()
|
||||
results = C_AuctionHouse.GetBrowseResults()
|
||||
-- DevTools_Dump(results)
|
||||
for k,v in ipairs(results) do
|
||||
local itemID = v.itemKey.itemID
|
||||
local itemName = GetItemInfo(itemID)
|
||||
if aura_env.sellPriceThresholds[itemID] then
|
||||
if v.minPrice > aura_env.sellPriceThresholds[itemID] then
|
||||
print(itemName, "too expensive")
|
||||
SendChatMessage("POKE", "WHISPER", nil, UnitName("player"))
|
||||
end
|
||||
elseif aura_env.buyPriceThresholds[itemID] then
|
||||
if v.minPrice < aura_env.buyPriceThresholds[itemID] then
|
||||
print(itemName, "too cheap")
|
||||
SendChatMessage("POKE", "WHISPER", nil, UnitName("player"))
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -1,6 +1,6 @@
|
||||
function()
|
||||
if not aura_env.last or aura_env.last < GetTime() - aura_env.throttleTime then
|
||||
aura_env.last = GetTime()
|
||||
AuctionHouseFrame.SearchBar.FavoritesSearchButton:Click()
|
||||
end
|
||||
function()
|
||||
if not aura_env.last or aura_env.last < GetTime() - aura_env.throttleTime then
|
||||
aura_env.last = GetTime()
|
||||
AuctionHouseFrame.SearchBar.FavoritesSearchButton:Click()
|
||||
end
|
||||
end
|
||||
@@ -1,17 +1,17 @@
|
||||
aura_env.throttleTime = 10
|
||||
|
||||
aura_env.sellPriceThresholds = {
|
||||
[168446] = 5000 * 100 * 100; -- Accord of Critical Strike
|
||||
[168447] = 5000 * 100 * 100; -- Accord of Haste
|
||||
[168448] = 5000 * 100 * 100; -- Accord of Mastery
|
||||
[168449] = 5000 * 100 * 100; -- Accord of Versatility
|
||||
[168592] = 4500 * 100 * 100; -- Oceanic Restoration
|
||||
[168496] = 4500 * 100 * 100; -- Force Multiplier
|
||||
[168593] = 4500 * 100 * 100; -- Machinist's Brilliance
|
||||
[168598] = 4500 * 100 * 100; -- Naga Hide
|
||||
}
|
||||
|
||||
aura_env.buyPriceThresholds = {
|
||||
[152576] = 5 * 100 * 100; -- Tidesrpay Linen
|
||||
[152877] = 500 * 100 * 100; -- Veiled Crystal
|
||||
aura_env.throttleTime = 10
|
||||
|
||||
aura_env.sellPriceThresholds = {
|
||||
[168446] = 5000 * 100 * 100; -- Accord of Critical Strike
|
||||
[168447] = 5000 * 100 * 100; -- Accord of Haste
|
||||
[168448] = 5000 * 100 * 100; -- Accord of Mastery
|
||||
[168449] = 5000 * 100 * 100; -- Accord of Versatility
|
||||
[168592] = 4500 * 100 * 100; -- Oceanic Restoration
|
||||
[168496] = 4500 * 100 * 100; -- Force Multiplier
|
||||
[168593] = 4500 * 100 * 100; -- Machinist's Brilliance
|
||||
[168598] = 4500 * 100 * 100; -- Naga Hide
|
||||
}
|
||||
|
||||
aura_env.buyPriceThresholds = {
|
||||
[152576] = 5 * 100 * 100; -- Tidesrpay Linen
|
||||
[152877] = 500 * 100 * 100; -- Veiled Crystal
|
||||
}
|
||||
@@ -1,3 +1,3 @@
|
||||
/run AuctionHouseFrame.SearchBar.FavoritesSearchButton:Click()
|
||||
|
||||
/run AuctionHouseFrame.SearchBar.FavoritesSearchButton:Click()
|
||||
|
||||
/dump C_AuctionHouse.GetBrowseResults()
|
||||
@@ -1,205 +1,205 @@
|
||||
--- LOOT_READY LOOT_OPENED MERCHANT_SHOW QUEST_POI_UPDATE QUEST_DETAIL QUEST_COMPLETE QUEST_GREETING QUEST_PROGRESS GOSSIP_SHOW SCRAPPING_MACHINE_SHOW MERCHANT_CLOSED EQUIP_BIND_CONFIRM
|
||||
function(e)
|
||||
local aura_env = aura_env
|
||||
if e == "LOOT_READY" or e == "LOOT_OPENED" then --Auto Loot
|
||||
local slot = 1
|
||||
local lootinfo = GetLootInfo()
|
||||
for k, v in pairs(lootinfo) do
|
||||
if v.locked == false then
|
||||
local link = GetLootSlotLink(slot)
|
||||
local looted = false
|
||||
if not link then link = GetLootSlotLink(slot) end
|
||||
if aura_env.filter[1] == true and (v.item:match("%d+ Gold") or v.item:match("%d+ Silver") or v.item:match("%d+ Copper")) then
|
||||
LootSlot(slot)
|
||||
elseif aura_env.filter[2] == true and link:match("Azerite") then
|
||||
LootSlot(slot)
|
||||
elseif aura_env.filter[3] == true and v.item:match("War Resources") then
|
||||
LootSlot(slot)
|
||||
elseif aura_env.filter[4] == true and v.item:match("Residuum") then
|
||||
LootSlot(slot)
|
||||
elseif aura_env.filter[5] == true and v.item:match("Manapearl") then
|
||||
LootSlot(slot)
|
||||
end
|
||||
if link then
|
||||
local icon = v.texture
|
||||
local id = link:match("item:(%d+):")
|
||||
local type = select(6, GetItemInfo(link)) or ""
|
||||
local subtype = select(7, GetItemInfo(link)) or ""
|
||||
local ilvl = select(4, GetItemInfo(link)) or 0
|
||||
local equip = select(9, GetItemInfo(link))
|
||||
if aura_env.filter[6] == true and (select(7, GetItemInfo(link)) or 0) == "Mount" then
|
||||
LootSlot(slot)
|
||||
elseif aura_env.filter[7] == true and ilvl > aura_env.ilvlFilter then
|
||||
LootSlot(slot)
|
||||
elseif aura_env.filter[8] == true and (select(7, GetItemInfo(link)) or 0) == "Herb" then
|
||||
LootSlot(slot)
|
||||
elseif aura_env.filter[9] == true and (select(7, GetItemInfo(link)) or 0) == "Cooking" then
|
||||
LootSlot(slot)
|
||||
elseif aura_env.filter[10] == true and (select(7, GetItemInfo(link)) or 0) == "Cloth" and type == "Tradeskill" then
|
||||
LootSlot(slot)
|
||||
elseif aura_env.filter[11] == true and (select(7, GetItemInfo(link)) or 0) == "Metal & Stone" then
|
||||
LootSlot(slot)
|
||||
elseif aura_env.filter[12] == true and (select(11, GetItemInfo(link)) or 0) > aura_env.goldFilter and v.quality == 0 then
|
||||
LootSlot(slot)
|
||||
elseif aura_env.filter[13] == true and v.quality > 1 and v.quality < 4 and type ~= "Weapon" and type ~= "Armor" then
|
||||
LootSlot(slot)
|
||||
elseif aura_env.filter[14] == true and v.isQuestItem == true then
|
||||
LootSlot(slot)
|
||||
elseif aura_env.filter[15] == true and v.quality == 0 then
|
||||
LootSlot(slot)
|
||||
elseif aura_env.filter[16] == true and aura_env.whitelist[v.item] then
|
||||
LootSlot(slot)
|
||||
elseif aura_env.filter[17] == true and type == "Quest" and subtype == "Quest" then
|
||||
LootSlot(slot)
|
||||
elseif aura_env.filter[21] == true and type == "Tradeskill" and subtype == "Elemental" then
|
||||
LootSlot(slot)
|
||||
else
|
||||
if type == "Weapon" or type == "Armor" then
|
||||
if aura_env.filter[18] == true and aura_env.skills[select(3, UnitClass("player"))][subtype] == 1 and v.quality > 2 then
|
||||
LootSlot(slot)
|
||||
elseif aura_env.filter[19] == true and (equip == "INVTYPE_FINGER" or equip == "INVTYPE_TRINKET" or equip == "INVTYPE_CLOAK" or equip == "INVTYPE_NECK") and v.quality > 2 then
|
||||
LootSlot(slot)
|
||||
end
|
||||
elseif aura_env.filter[20] == true and type == "Miscellaneous" then
|
||||
if subtype == "Mount" then
|
||||
LootSlot(slot)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
slot = slot + 1
|
||||
end
|
||||
end
|
||||
--CloseLoot()
|
||||
elseif e == "EQUIP_BIND_CONFIRM" then
|
||||
StaticPopup1Button1:Click()
|
||||
elseif e == "SCRAPPING_MACHINE_SHOW" then
|
||||
for i = 0, 4 do
|
||||
for j = 1, GetContainerNumSlots(i) do
|
||||
local link = select(7, GetContainerItemInfo(i, j))
|
||||
if link then
|
||||
local name = GetItemInfo(link)
|
||||
local rarity = select(3, GetItemInfo(link))
|
||||
local ilvl = select(4, GetItemInfo(link)) or 0
|
||||
local type = select(6, GetItemInfo(link))
|
||||
local equip = select(9, GetItemInfo(link)) or ""
|
||||
local price = select(11, GetItemInfo(link))
|
||||
if aura_env.sellWhitelist[name] ~= 1 then
|
||||
if name and rarity and ilvl and type and equip and price then
|
||||
if (type == "Armor" or type == "Weapon") and rarity <= 3 and aura_env.getequipID(equip) then
|
||||
UseContainerItem(i, j)
|
||||
elseif rarity > 3 and aura_env.getequipID(equip) then
|
||||
if equip ~= "INVTYPE_FINGER" then
|
||||
local eqID = aura_env.getequipID(equip)
|
||||
local elink = GetInventoryItemLink("player", eqID)
|
||||
local eilvl = select(4, GetItemInfo(elink)) or 0
|
||||
if eilvl > ilvl + 5 then
|
||||
print("Scrapping " .. link .. "over " .. eilvl - ilvl .. " ilvl difference from " .. elink)
|
||||
UseContainerItem(i, j)
|
||||
end
|
||||
elseif equip == "INVTYPE_FINGER" then
|
||||
local eqID1, eqID2 = 11, 12
|
||||
local elink1, elink2 = GetInventoryItemLink("player", eqID1), GetInventoryItemLink("player", eqID2)
|
||||
local eilvl1, eilvl2 = select(4, GetItemInfo(elink1)) or 0, select(4, GetItemInfo(elink2)) or 0
|
||||
if eilvl1 > ilvl + 5 then
|
||||
print("Scrapping " .. link .. " over " .. eilvl1 - ilvl .. " ilvl difference from " .. elink1)
|
||||
UseContainerItem(i, j)
|
||||
elseif eilvl2 > ilvl + 5 then
|
||||
print("Scrapping " .. link .. " over " .. eilvl2 - ilvl .. " ilvl difference from " .. elink2)
|
||||
UseContainerItem(i, j)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
elseif e == "MERCHANT_SHOW" then --Sell grey and white wepaon
|
||||
if CanMerchantRepair() == true then RepairAllItems() end
|
||||
local i, j = 0, 1
|
||||
for c = 0, 4 do
|
||||
for s = 1, GetContainerNumSlots(c) do
|
||||
local link = select(7, GetContainerItemInfo(c, s))
|
||||
if link then
|
||||
local name = GetItemInfo(link)
|
||||
local rarity = select(3, GetItemInfo(link))
|
||||
local ilvl = select(4, GetItemInfo(link)) or 0
|
||||
local type = select(6, GetItemInfo(link))
|
||||
local price = select(11, GetItemInfo(link))
|
||||
if price and price > 0 then
|
||||
if aura_env.sellWhitelist[name] ~= 1 then
|
||||
if rarity == 0 then
|
||||
if aura_env.throttleSell == true then
|
||||
aura_env.toSell[#aura_env.toSell + 1] = {["c"] = c, ["s"] = s}
|
||||
else
|
||||
UseContainerItem(c, s)
|
||||
end
|
||||
elseif (type == "Armor" or type == "Weapon") and ilvl < 200 then
|
||||
if aura_env.throttleSell == true then
|
||||
aura_env.toSell[#aura_env.toSell + 1] = {["c"] = c, ["s"] = s}
|
||||
else
|
||||
UseContainerItem(c, s)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
if aura_env.throttleSell == true then
|
||||
aura_env.ticker = C_Timer.NewTicker(0.05, function()
|
||||
if aura_env.toSell[1] then
|
||||
UseContainerItem(aura_env.toSell[1].c, aura_env.toSell[1].s)
|
||||
table.remove(aura_env.toSell, 1)
|
||||
else
|
||||
aura_env.ticker:Cancel()
|
||||
end
|
||||
if j >= GetContainerNumSlots(i) then i = i + 1
|
||||
j = 1 end
|
||||
if i >= 4 then aura_env.ticker:Cancel() end
|
||||
end)
|
||||
end
|
||||
elseif e == "MERCHANT_CLOSED" then
|
||||
if aura_env.ticker then aura_env.ticker:Cancel() end
|
||||
aura_env.toSell = {}
|
||||
elseif e == "QUEST_POI_UPDATE" then
|
||||
CloseGossip()
|
||||
elseif e == "QUEST_DETAIL" then
|
||||
AcceptQuest()
|
||||
elseif e == "QUEST_COMPLETE" then
|
||||
if GetNumQuestChoices() <= 1 then
|
||||
GetQuestReward(1)
|
||||
end
|
||||
elseif e == "GOSSIP_SHOW" then
|
||||
local quests = GetNumGossipAvailableQuests()
|
||||
local complquests = GetNumGossipActiveQuests()
|
||||
local opt = GetNumGossipOptions()
|
||||
if complquests > 0 and opt == 0 then
|
||||
for i = 1, complquests do
|
||||
SelectGossipActiveQuest(i)
|
||||
end
|
||||
end
|
||||
if quests > 0 and opt == 0 then
|
||||
SelectGossipAvailableQuest(1)
|
||||
end
|
||||
if opt == 1 and quests + complquests == 0 then
|
||||
SelectGossipOption(1)
|
||||
end
|
||||
elseif e == "QUEST_GREETING" then
|
||||
local quests = GetNumGossipAvailableQuests()
|
||||
local complquests = GetNumGossipActiveQuests()
|
||||
if complquests > 0 then
|
||||
for i = 1, complquests do
|
||||
SelectActiveQuest(1)
|
||||
end
|
||||
end
|
||||
if quests > 0 then
|
||||
SelectAvailableQuest(1)
|
||||
end
|
||||
elseif e == "QUEST_PROGRESS" then
|
||||
if IsQuestCompletable(i) then
|
||||
CompleteQuest()
|
||||
end
|
||||
end
|
||||
--- LOOT_READY LOOT_OPENED MERCHANT_SHOW QUEST_POI_UPDATE QUEST_DETAIL QUEST_COMPLETE QUEST_GREETING QUEST_PROGRESS GOSSIP_SHOW SCRAPPING_MACHINE_SHOW MERCHANT_CLOSED EQUIP_BIND_CONFIRM
|
||||
function(e)
|
||||
local aura_env = aura_env
|
||||
if e == "LOOT_READY" or e == "LOOT_OPENED" then --Auto Loot
|
||||
local slot = 1
|
||||
local lootinfo = GetLootInfo()
|
||||
for k, v in pairs(lootinfo) do
|
||||
if v.locked == false then
|
||||
local link = GetLootSlotLink(slot)
|
||||
local looted = false
|
||||
if not link then link = GetLootSlotLink(slot) end
|
||||
if aura_env.filter[1] == true and (v.item:match("%d+ Gold") or v.item:match("%d+ Silver") or v.item:match("%d+ Copper")) then
|
||||
LootSlot(slot)
|
||||
elseif aura_env.filter[2] == true and link:match("Azerite") then
|
||||
LootSlot(slot)
|
||||
elseif aura_env.filter[3] == true and v.item:match("War Resources") then
|
||||
LootSlot(slot)
|
||||
elseif aura_env.filter[4] == true and v.item:match("Residuum") then
|
||||
LootSlot(slot)
|
||||
elseif aura_env.filter[5] == true and v.item:match("Manapearl") then
|
||||
LootSlot(slot)
|
||||
end
|
||||
if link then
|
||||
local icon = v.texture
|
||||
local id = link:match("item:(%d+):")
|
||||
local type = select(6, GetItemInfo(link)) or ""
|
||||
local subtype = select(7, GetItemInfo(link)) or ""
|
||||
local ilvl = select(4, GetItemInfo(link)) or 0
|
||||
local equip = select(9, GetItemInfo(link))
|
||||
if aura_env.filter[6] == true and (select(7, GetItemInfo(link)) or 0) == "Mount" then
|
||||
LootSlot(slot)
|
||||
elseif aura_env.filter[7] == true and ilvl > aura_env.ilvlFilter then
|
||||
LootSlot(slot)
|
||||
elseif aura_env.filter[8] == true and (select(7, GetItemInfo(link)) or 0) == "Herb" then
|
||||
LootSlot(slot)
|
||||
elseif aura_env.filter[9] == true and (select(7, GetItemInfo(link)) or 0) == "Cooking" then
|
||||
LootSlot(slot)
|
||||
elseif aura_env.filter[10] == true and (select(7, GetItemInfo(link)) or 0) == "Cloth" and type == "Tradeskill" then
|
||||
LootSlot(slot)
|
||||
elseif aura_env.filter[11] == true and (select(7, GetItemInfo(link)) or 0) == "Metal & Stone" then
|
||||
LootSlot(slot)
|
||||
elseif aura_env.filter[12] == true and (select(11, GetItemInfo(link)) or 0) > aura_env.goldFilter and v.quality == 0 then
|
||||
LootSlot(slot)
|
||||
elseif aura_env.filter[13] == true and v.quality > 1 and v.quality < 4 and type ~= "Weapon" and type ~= "Armor" then
|
||||
LootSlot(slot)
|
||||
elseif aura_env.filter[14] == true and v.isQuestItem == true then
|
||||
LootSlot(slot)
|
||||
elseif aura_env.filter[15] == true and v.quality == 0 then
|
||||
LootSlot(slot)
|
||||
elseif aura_env.filter[16] == true and aura_env.whitelist[v.item] then
|
||||
LootSlot(slot)
|
||||
elseif aura_env.filter[17] == true and type == "Quest" and subtype == "Quest" then
|
||||
LootSlot(slot)
|
||||
elseif aura_env.filter[21] == true and type == "Tradeskill" and subtype == "Elemental" then
|
||||
LootSlot(slot)
|
||||
else
|
||||
if type == "Weapon" or type == "Armor" then
|
||||
if aura_env.filter[18] == true and aura_env.skills[select(3, UnitClass("player"))][subtype] == 1 and v.quality > 2 then
|
||||
LootSlot(slot)
|
||||
elseif aura_env.filter[19] == true and (equip == "INVTYPE_FINGER" or equip == "INVTYPE_TRINKET" or equip == "INVTYPE_CLOAK" or equip == "INVTYPE_NECK") and v.quality > 2 then
|
||||
LootSlot(slot)
|
||||
end
|
||||
elseif aura_env.filter[20] == true and type == "Miscellaneous" then
|
||||
if subtype == "Mount" then
|
||||
LootSlot(slot)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
slot = slot + 1
|
||||
end
|
||||
end
|
||||
--CloseLoot()
|
||||
elseif e == "EQUIP_BIND_CONFIRM" then
|
||||
StaticPopup1Button1:Click()
|
||||
elseif e == "SCRAPPING_MACHINE_SHOW" then
|
||||
for i = 0, 4 do
|
||||
for j = 1, GetContainerNumSlots(i) do
|
||||
local link = select(7, GetContainerItemInfo(i, j))
|
||||
if link then
|
||||
local name = GetItemInfo(link)
|
||||
local rarity = select(3, GetItemInfo(link))
|
||||
local ilvl = select(4, GetItemInfo(link)) or 0
|
||||
local type = select(6, GetItemInfo(link))
|
||||
local equip = select(9, GetItemInfo(link)) or ""
|
||||
local price = select(11, GetItemInfo(link))
|
||||
if aura_env.sellWhitelist[name] ~= 1 then
|
||||
if name and rarity and ilvl and type and equip and price then
|
||||
if (type == "Armor" or type == "Weapon") and rarity <= 3 and aura_env.getequipID(equip) then
|
||||
UseContainerItem(i, j)
|
||||
elseif rarity > 3 and aura_env.getequipID(equip) then
|
||||
if equip ~= "INVTYPE_FINGER" then
|
||||
local eqID = aura_env.getequipID(equip)
|
||||
local elink = GetInventoryItemLink("player", eqID)
|
||||
local eilvl = select(4, GetItemInfo(elink)) or 0
|
||||
if eilvl > ilvl + 5 then
|
||||
print("Scrapping " .. link .. "over " .. eilvl - ilvl .. " ilvl difference from " .. elink)
|
||||
UseContainerItem(i, j)
|
||||
end
|
||||
elseif equip == "INVTYPE_FINGER" then
|
||||
local eqID1, eqID2 = 11, 12
|
||||
local elink1, elink2 = GetInventoryItemLink("player", eqID1), GetInventoryItemLink("player", eqID2)
|
||||
local eilvl1, eilvl2 = select(4, GetItemInfo(elink1)) or 0, select(4, GetItemInfo(elink2)) or 0
|
||||
if eilvl1 > ilvl + 5 then
|
||||
print("Scrapping " .. link .. " over " .. eilvl1 - ilvl .. " ilvl difference from " .. elink1)
|
||||
UseContainerItem(i, j)
|
||||
elseif eilvl2 > ilvl + 5 then
|
||||
print("Scrapping " .. link .. " over " .. eilvl2 - ilvl .. " ilvl difference from " .. elink2)
|
||||
UseContainerItem(i, j)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
elseif e == "MERCHANT_SHOW" then --Sell grey and white wepaon
|
||||
if CanMerchantRepair() == true then RepairAllItems() end
|
||||
local i, j = 0, 1
|
||||
for c = 0, 4 do
|
||||
for s = 1, GetContainerNumSlots(c) do
|
||||
local link = select(7, GetContainerItemInfo(c, s))
|
||||
if link then
|
||||
local name = GetItemInfo(link)
|
||||
local rarity = select(3, GetItemInfo(link))
|
||||
local ilvl = select(4, GetItemInfo(link)) or 0
|
||||
local type = select(6, GetItemInfo(link))
|
||||
local price = select(11, GetItemInfo(link))
|
||||
if price and price > 0 then
|
||||
if aura_env.sellWhitelist[name] ~= 1 then
|
||||
if rarity == 0 then
|
||||
if aura_env.throttleSell == true then
|
||||
aura_env.toSell[#aura_env.toSell + 1] = {["c"] = c, ["s"] = s}
|
||||
else
|
||||
UseContainerItem(c, s)
|
||||
end
|
||||
elseif (type == "Armor" or type == "Weapon") and ilvl < 200 then
|
||||
if aura_env.throttleSell == true then
|
||||
aura_env.toSell[#aura_env.toSell + 1] = {["c"] = c, ["s"] = s}
|
||||
else
|
||||
UseContainerItem(c, s)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
if aura_env.throttleSell == true then
|
||||
aura_env.ticker = C_Timer.NewTicker(0.05, function()
|
||||
if aura_env.toSell[1] then
|
||||
UseContainerItem(aura_env.toSell[1].c, aura_env.toSell[1].s)
|
||||
table.remove(aura_env.toSell, 1)
|
||||
else
|
||||
aura_env.ticker:Cancel()
|
||||
end
|
||||
if j >= GetContainerNumSlots(i) then i = i + 1
|
||||
j = 1 end
|
||||
if i >= 4 then aura_env.ticker:Cancel() end
|
||||
end)
|
||||
end
|
||||
elseif e == "MERCHANT_CLOSED" then
|
||||
if aura_env.ticker then aura_env.ticker:Cancel() end
|
||||
aura_env.toSell = {}
|
||||
elseif e == "QUEST_POI_UPDATE" then
|
||||
CloseGossip()
|
||||
elseif e == "QUEST_DETAIL" then
|
||||
AcceptQuest()
|
||||
elseif e == "QUEST_COMPLETE" then
|
||||
if GetNumQuestChoices() <= 1 then
|
||||
GetQuestReward(1)
|
||||
end
|
||||
elseif e == "GOSSIP_SHOW" then
|
||||
local quests = GetNumGossipAvailableQuests()
|
||||
local complquests = GetNumGossipActiveQuests()
|
||||
local opt = GetNumGossipOptions()
|
||||
if complquests > 0 and opt == 0 then
|
||||
for i = 1, complquests do
|
||||
SelectGossipActiveQuest(i)
|
||||
end
|
||||
end
|
||||
if quests > 0 and opt == 0 then
|
||||
SelectGossipAvailableQuest(1)
|
||||
end
|
||||
if opt == 1 and quests + complquests == 0 then
|
||||
SelectGossipOption(1)
|
||||
end
|
||||
elseif e == "QUEST_GREETING" then
|
||||
local quests = GetNumGossipAvailableQuests()
|
||||
local complquests = GetNumGossipActiveQuests()
|
||||
if complquests > 0 then
|
||||
for i = 1, complquests do
|
||||
SelectActiveQuest(1)
|
||||
end
|
||||
end
|
||||
if quests > 0 then
|
||||
SelectAvailableQuest(1)
|
||||
end
|
||||
elseif e == "QUEST_PROGRESS" then
|
||||
if IsQuestCompletable(i) then
|
||||
CompleteQuest()
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -1,380 +1,380 @@
|
||||
aura_env.debug = true
|
||||
aura_env.filter = {
|
||||
[1] = true, --Gold
|
||||
[2] = true, --Azerite
|
||||
[3] = true, --War resources
|
||||
[4] = true, --Residuum
|
||||
[5] = true, --Manapearls
|
||||
[6] = true, --Mounts
|
||||
[7] = true, --High ilvl
|
||||
[8] = false, --Herbs
|
||||
[9] = true, --Cooking
|
||||
[10] = true, --Cloth
|
||||
[11] = false, --Metal & Stone
|
||||
[12] = true, --Gold filter greys
|
||||
[13] = true, -- >1 && <4 quality items, no gear
|
||||
[14] = true, --Quest items
|
||||
[15] = true, --All greys
|
||||
[16] = true, --Whitelist
|
||||
[17] = true, --Quest items (different filter)
|
||||
[18] = true, --Class aproperiate >2 items
|
||||
[19] = true, --Jewelery >2 quality
|
||||
[20] = true, --Additional mount filter
|
||||
[21] = true, --Tradeskill // Elemental
|
||||
}
|
||||
aura_env.ilvlFilter = 200
|
||||
aura_env.goldFilter = 0.5
|
||||
aura_env.goldFilter = aura_env.goldFilter * 10000
|
||||
aura_env.throttleSell = false
|
||||
|
||||
aura_env.whitelist = {
|
||||
["Pygmy Suckerfish"] = 1,
|
||||
["Drakkari Offerings"] = 1,
|
||||
["Deepcoral Pod"] = 1,
|
||||
["Hardened Spring"] = 1,
|
||||
["Machined Gear Assembly"] = 1,
|
||||
["Tempered Plating"] = 1,
|
||||
["Hefty Glimmershell"] = 1,
|
||||
["Fresh Meat"] = 1,
|
||||
["Wood"] = 1,
|
||||
|
||||
|
||||
["Gloom Dust"] = 1,
|
||||
["Veiled Crytal"] = 1,
|
||||
["Coalescing Visions"] = 1,
|
||||
["Echoes of Ny'alotha"] = 1,
|
||||
["Corrupted Mementos"] = 1,
|
||||
|
||||
["Blood of Sargeras"] = 1,
|
||||
["Primal Sargerite"] = 1,
|
||||
|
||||
["Chain Ignitercoil"] = 1,
|
||||
["Galvanic Oscillator"] = 1,
|
||||
["Corrupted Memento"] = 1,
|
||||
}
|
||||
aura_env.sellWhitelist = {
|
||||
["Blacksmith Hammer"] = 1,
|
||||
["Endless Tincture of Renewed Combat"] = 1,
|
||||
["Mr. Munchykins"] = 1,
|
||||
["Arclight Spanner"] = 1,
|
||||
["Runeblade of Baron Rivendare"] = 1,
|
||||
}
|
||||
aura_env.toSell = {}
|
||||
aura_env.getequipID = function(equip)
|
||||
if equip == "INVTYPE_HEAD" then return 1
|
||||
elseif equip == "INVTYPE_NECK" then return 2
|
||||
elseif equip == "INVTYPE_SHOULDER" then return 3
|
||||
elseif equip == "INVTYPE_BODY" then return 4
|
||||
elseif equip == "INVTYPE_CHEST" or equip == "INVTYPE_ROBE" then return 5
|
||||
elseif equip == "INVTYPE_WAIST" then return 6
|
||||
elseif equip == "INVTYPE_LEGS" then return 7
|
||||
elseif equip == "INVTYPE_FEET" then return 8
|
||||
elseif equip == "INVTYPE_WRIST" then return 9
|
||||
elseif equip == "INVTYPE_HAND" then return 10
|
||||
elseif equip == "INVTYPE_CLOAK" then return 15
|
||||
elseif equip == "INVTYPE_WEAPON" or equip == "INVTYPE_WEAPONMAINHAND" or equip == "INVTYPE_2HWEAPON" then return 16
|
||||
elseif equip == "INVTYPE_SHIELD" then return 17
|
||||
else return nil end
|
||||
end
|
||||
aura_env.skills = {
|
||||
--Warrior
|
||||
[1] = {
|
||||
--Armor Skills
|
||||
["Cloth"] = 0,
|
||||
["Leather"] = 0,
|
||||
["Mail"] = 0,
|
||||
["Plate"] = 1,
|
||||
["Shields"] = 1,
|
||||
--Weapon Skills
|
||||
["One-Handed Axes"] = 1,
|
||||
["Two-Handed Axes"] = 1,
|
||||
["Bows"] = 1,
|
||||
["Guns"] = 1,
|
||||
["One-Handed Maces"] = 1,
|
||||
["Two-Handed Maces"] = 1,
|
||||
["Polearms"] = 1,
|
||||
["One-Handed Swords"] = 1,
|
||||
["Two-Handed Swords"] = 1,
|
||||
["Warglaives"] = 1,
|
||||
["Staves"] = 1,
|
||||
["Fist Weapons"] = 1,
|
||||
["Daggers"] = 1,
|
||||
["Crossbows"] = 1,
|
||||
["Wands"] = 0,
|
||||
},
|
||||
--Paladin
|
||||
[2] = {
|
||||
--Armor Skills
|
||||
["Cloth"] = 0,
|
||||
["Leather"] = 0,
|
||||
["Mail"] = 0,
|
||||
["Plate"] = 1,
|
||||
["Shields"] = 1,
|
||||
--Weapon Skills
|
||||
["One-Handed Axes"] = 1,
|
||||
["Two-Handed Axes"] = 1,
|
||||
["Bows"] = 0,
|
||||
["Guns"] = 0,
|
||||
["One-Handed Maces"] = 1,
|
||||
["Two-Handed Maces"] = 1,
|
||||
["Polearms"] = 1,
|
||||
["One-Handed Swords"] = 1,
|
||||
["Two-Handed Swords"] = 1,
|
||||
["Warglaives"] = 0,
|
||||
["Staves"] = 0,
|
||||
["Fist Weapons"] = 0,
|
||||
["Daggers"] = 0,
|
||||
["Crossbows"] = 0,
|
||||
["Wands"] = 0,
|
||||
},
|
||||
--Hunter
|
||||
[3] = {
|
||||
--Armor Skills
|
||||
["Cloth"] = 0,
|
||||
["Leather"] = 0,
|
||||
["Mail"] = 1,
|
||||
["Plate"] = 0,
|
||||
["Shields"] = 0,
|
||||
--Weapon Skills
|
||||
["One-Handed Axes"] = 1,
|
||||
["Two-Handed Axes"] = 1,
|
||||
["Bows"] = 1,
|
||||
["Guns"] = 1,
|
||||
["One-Handed Maces"] = 0,
|
||||
["Two-Handed Maces"] = 0,
|
||||
["Polearms"] = 1,
|
||||
["One-Handed Swords"] = 1,
|
||||
["Two-Handed Swords"] = 1,
|
||||
["Warglaives"] = 0,
|
||||
["Staves"] = 1,
|
||||
["Fist Weapons"] = 1,
|
||||
["Daggers"] = 1,
|
||||
["Crossbows"] = 1,
|
||||
["Wands"] = 0,
|
||||
},
|
||||
--Rogue
|
||||
[4] = {
|
||||
--Armor Skills
|
||||
["Cloth"] = 0,
|
||||
["Leather"] = 1,
|
||||
["Mail"] = 0,
|
||||
["Plate"] = 0,
|
||||
["Shields"] = 0,
|
||||
--Weapon Skills
|
||||
["One-Handed Axes"] = 1,
|
||||
["Two-Handed Axes"] = 0,
|
||||
["Bows"] = 0,
|
||||
["Guns"] = 0,
|
||||
["One-Handed Maces"] = 1,
|
||||
["Two-Handed Maces"] = 0,
|
||||
["Polearms"] = 0,
|
||||
["One-Handed Swords"] = 1,
|
||||
["Two-Handed Swords"] = 0,
|
||||
["Warglaives"] = 0,
|
||||
["Staves"] = 0,
|
||||
["Fist Weapons"] = 1,
|
||||
["Daggers"] = 1,
|
||||
["Crossbows"] = 0,
|
||||
["Wands"] = 0,
|
||||
},
|
||||
--Priest
|
||||
[5] = {
|
||||
--Armor Skills
|
||||
["Cloth"] = 1,
|
||||
["Leather"] = 0,
|
||||
["Mail"] = 0,
|
||||
["Plate"] = 0,
|
||||
["Shields"] = 0,
|
||||
--Weapon Skills
|
||||
["One-Handed Axes"] = 0,
|
||||
["Two-Handed Axes"] = 0,
|
||||
["Bows"] = 0,
|
||||
["Guns"] = 0,
|
||||
["One-Handed Maces"] = 1,
|
||||
["Two-Handed Maces"] = 0,
|
||||
["Polearms"] = 0,
|
||||
["One-Handed Swords"] = 0,
|
||||
["Two-Handed Swords"] = 0,
|
||||
["Warglaives"] = 0,
|
||||
["Staves"] = 1,
|
||||
["Fist Weapons"] = 0,
|
||||
["Daggers"] = 1,
|
||||
["Crossbows"] = 0,
|
||||
["Wands"] = 1,
|
||||
},
|
||||
--Death Knight
|
||||
[6] = {
|
||||
--Armor Skills
|
||||
["Cloth"] = 0,
|
||||
["Leather"] = 0,
|
||||
["Mail"] = 0,
|
||||
["Plate"] = 1,
|
||||
["Shields"] = 0,
|
||||
--Weapon Skills
|
||||
["One-Handed Axes"] = 1,
|
||||
["Two-Handed Axes"] = 1,
|
||||
["Bows"] = 0,
|
||||
["Guns"] = 0,
|
||||
["One-Handed Maces"] = 1,
|
||||
["Two-Handed Maces"] = 1,
|
||||
["Polearms"] = 1,
|
||||
["One-Handed Swords"] = 1,
|
||||
["Two-Handed Swords"] = 1,
|
||||
["Warglaives"] = 0,
|
||||
["Staves"] = 0,
|
||||
["Fist Weapons"] = 0,
|
||||
["Daggers"] = 0,
|
||||
["Crossbows"] = 0,
|
||||
["Wands"] = 0,
|
||||
},
|
||||
--Shaman
|
||||
[7] = {
|
||||
--Armor Skills
|
||||
["Cloth"] = 0,
|
||||
["Leather"] = 0,
|
||||
["Mail"] = 1,
|
||||
["Plate"] = 0,
|
||||
["Shields"] = 1,
|
||||
--Weapon Skills
|
||||
["One-Handed Axes"] = 1,
|
||||
["Two-Handed Axes"] = 0,
|
||||
["Bows"] = 0,
|
||||
["Guns"] = 0,
|
||||
["One-Handed Maces"] = 1,
|
||||
["Two-Handed Maces"] = 0,
|
||||
["Polearms"] = 0,
|
||||
["One-Handed Swords"] = 0,
|
||||
["Two-Handed Swords"] = 0,
|
||||
["Warglaives"] = 0,
|
||||
["Staves"] = 1,
|
||||
["Fist Weapons"] = 1,
|
||||
["Daggers"] = 1,
|
||||
["Crossbows"] = 0,
|
||||
["Wands"] = 0,
|
||||
},
|
||||
--Mage
|
||||
[8] = {
|
||||
--Armor Skills
|
||||
["Cloth"] = 1,
|
||||
["Leather"] = 0,
|
||||
["Mail"] = 0,
|
||||
["Plate"] = 0,
|
||||
["Shields"] = 0,
|
||||
--Weapon Skills
|
||||
["One-Handed Axes"] = 0,
|
||||
["Two-Handed Axes"] = 0,
|
||||
["Bows"] = 0,
|
||||
["Guns"] = 0,
|
||||
["One-Handed Maces"] = 0,
|
||||
["Two-Handed Maces"] = 0,
|
||||
["Polearms"] = 0,
|
||||
["One-Handed Swords"] = 1,
|
||||
["Two-Handed Swords"] = 0,
|
||||
["Warglaives"] = 0,
|
||||
["Staves"] = 1,
|
||||
["Fist Weapons"] = 0,
|
||||
["Daggers"] = 1,
|
||||
["Crossbows"] = 0,
|
||||
["Wands"] = 1,
|
||||
},
|
||||
--Warlock
|
||||
[9] = {
|
||||
--Armor Skills
|
||||
["Cloth"] = 1,
|
||||
["Leather"] = 0,
|
||||
["Mail"] = 0,
|
||||
["Plate"] = 0,
|
||||
["Shields"] = 0,
|
||||
--Weapon Skills
|
||||
["One-Handed Axes"] = 0,
|
||||
["Two-Handed Axes"] = 0,
|
||||
["Bows"] = 0,
|
||||
["Guns"] = 0,
|
||||
["One-Handed Maces"] = 0,
|
||||
["Two-Handed Maces"] = 0,
|
||||
["Polearms"] = 0,
|
||||
["One-Handed Swords"] = 1,
|
||||
["Two-Handed Swords"] = 0,
|
||||
["Warglaives"] = 0,
|
||||
["Staves"] = 1,
|
||||
["Fist Weapons"] = 0,
|
||||
["Daggers"] = 1,
|
||||
["Crossbows"] = 0,
|
||||
["Wands"] = 1,
|
||||
},
|
||||
--Monk
|
||||
[10] = {
|
||||
--Armor Skills
|
||||
["Cloth"] = 0,
|
||||
["Leather"] = 1,
|
||||
["Mail"] = 0,
|
||||
["Plate"] = 1,
|
||||
["Shields"] = 1,
|
||||
--Weapon Skills
|
||||
["One-Handed Axes"] = 1,
|
||||
["Two-Handed Axes"] = 0,
|
||||
["Bows"] = 0,
|
||||
["Guns"] = 0,
|
||||
["One-Handed Maces"] = 1,
|
||||
["Two-Handed Maces"] = 0,
|
||||
["Polearms"] = 1,
|
||||
["One-Handed Swords"] = 1,
|
||||
["Two-Handed Swords"] = 0,
|
||||
["Warglaives"] = 0,
|
||||
["Staves"] = 1,
|
||||
["Fist Weapons"] = 1,
|
||||
["Daggers"] = 0,
|
||||
["Crossbows"] = 0,
|
||||
["Wands"] = 0,
|
||||
},
|
||||
--Druid
|
||||
[11] = {
|
||||
--Armor Skills
|
||||
["Cloth"] = 0,
|
||||
["Leather"] = 1,
|
||||
["Mail"] = 0,
|
||||
["Plate"] = 0,
|
||||
["Shields"] = 0,
|
||||
--Weapon Skills
|
||||
["One-Handed Axes"] = 0,
|
||||
["Two-Handed Axes"] = 0,
|
||||
["Bows"] = 0,
|
||||
["Guns"] = 0,
|
||||
["One-Handed Maces"] = 1,
|
||||
["Two-Handed Maces"] = 0,
|
||||
["Polearms"] = 1,
|
||||
["One-Handed Swords"] = 0,
|
||||
["Two-Handed Swords"] = 0,
|
||||
["Warglaives"] = 0,
|
||||
["Staves"] = 1,
|
||||
["Fist Weapons"] = 1,
|
||||
["Daggers"] = 1,
|
||||
["Crossbows"] = 0,
|
||||
["Wands"] = 0,
|
||||
},
|
||||
--Demon Hunter
|
||||
[12] = {
|
||||
--Armor Skills
|
||||
["Cloth"] = 0,
|
||||
["Leather"] = 1,
|
||||
["Mail"] = 0,
|
||||
["Plate"] = 0,
|
||||
["Shields"] = 0,
|
||||
--Weapon Skills
|
||||
["One-Handed Axes"] = 1,
|
||||
["Two-Handed Axes"] = 0,
|
||||
["Bows"] = 0,
|
||||
["Guns"] = 0,
|
||||
["One-Handed Maces"] = 0,
|
||||
["Two-Handed Maces"] = 0,
|
||||
["Polearms"] = 0,
|
||||
["One-Handed Swords"] = 1,
|
||||
["Two-Handed Swords"] = 0,
|
||||
["Warglaives"] = 1,
|
||||
["Staves"] = 0,
|
||||
["Fist Weapons"] = 1,
|
||||
["Daggers"] = 0,
|
||||
["Crossbows"] = 0,
|
||||
["Wands"] = 0,
|
||||
},
|
||||
aura_env.debug = true
|
||||
aura_env.filter = {
|
||||
[1] = true, --Gold
|
||||
[2] = true, --Azerite
|
||||
[3] = true, --War resources
|
||||
[4] = true, --Residuum
|
||||
[5] = true, --Manapearls
|
||||
[6] = true, --Mounts
|
||||
[7] = true, --High ilvl
|
||||
[8] = false, --Herbs
|
||||
[9] = true, --Cooking
|
||||
[10] = true, --Cloth
|
||||
[11] = false, --Metal & Stone
|
||||
[12] = true, --Gold filter greys
|
||||
[13] = true, -- >1 && <4 quality items, no gear
|
||||
[14] = true, --Quest items
|
||||
[15] = true, --All greys
|
||||
[16] = true, --Whitelist
|
||||
[17] = true, --Quest items (different filter)
|
||||
[18] = true, --Class aproperiate >2 items
|
||||
[19] = true, --Jewelery >2 quality
|
||||
[20] = true, --Additional mount filter
|
||||
[21] = true, --Tradeskill // Elemental
|
||||
}
|
||||
aura_env.ilvlFilter = 200
|
||||
aura_env.goldFilter = 0.5
|
||||
aura_env.goldFilter = aura_env.goldFilter * 10000
|
||||
aura_env.throttleSell = false
|
||||
|
||||
aura_env.whitelist = {
|
||||
["Pygmy Suckerfish"] = 1,
|
||||
["Drakkari Offerings"] = 1,
|
||||
["Deepcoral Pod"] = 1,
|
||||
["Hardened Spring"] = 1,
|
||||
["Machined Gear Assembly"] = 1,
|
||||
["Tempered Plating"] = 1,
|
||||
["Hefty Glimmershell"] = 1,
|
||||
["Fresh Meat"] = 1,
|
||||
["Wood"] = 1,
|
||||
|
||||
|
||||
["Gloom Dust"] = 1,
|
||||
["Veiled Crytal"] = 1,
|
||||
["Coalescing Visions"] = 1,
|
||||
["Echoes of Ny'alotha"] = 1,
|
||||
["Corrupted Mementos"] = 1,
|
||||
|
||||
["Blood of Sargeras"] = 1,
|
||||
["Primal Sargerite"] = 1,
|
||||
|
||||
["Chain Ignitercoil"] = 1,
|
||||
["Galvanic Oscillator"] = 1,
|
||||
["Corrupted Memento"] = 1,
|
||||
}
|
||||
aura_env.sellWhitelist = {
|
||||
["Blacksmith Hammer"] = 1,
|
||||
["Endless Tincture of Renewed Combat"] = 1,
|
||||
["Mr. Munchykins"] = 1,
|
||||
["Arclight Spanner"] = 1,
|
||||
["Runeblade of Baron Rivendare"] = 1,
|
||||
}
|
||||
aura_env.toSell = {}
|
||||
aura_env.getequipID = function(equip)
|
||||
if equip == "INVTYPE_HEAD" then return 1
|
||||
elseif equip == "INVTYPE_NECK" then return 2
|
||||
elseif equip == "INVTYPE_SHOULDER" then return 3
|
||||
elseif equip == "INVTYPE_BODY" then return 4
|
||||
elseif equip == "INVTYPE_CHEST" or equip == "INVTYPE_ROBE" then return 5
|
||||
elseif equip == "INVTYPE_WAIST" then return 6
|
||||
elseif equip == "INVTYPE_LEGS" then return 7
|
||||
elseif equip == "INVTYPE_FEET" then return 8
|
||||
elseif equip == "INVTYPE_WRIST" then return 9
|
||||
elseif equip == "INVTYPE_HAND" then return 10
|
||||
elseif equip == "INVTYPE_CLOAK" then return 15
|
||||
elseif equip == "INVTYPE_WEAPON" or equip == "INVTYPE_WEAPONMAINHAND" or equip == "INVTYPE_2HWEAPON" then return 16
|
||||
elseif equip == "INVTYPE_SHIELD" then return 17
|
||||
else return nil end
|
||||
end
|
||||
aura_env.skills = {
|
||||
--Warrior
|
||||
[1] = {
|
||||
--Armor Skills
|
||||
["Cloth"] = 0,
|
||||
["Leather"] = 0,
|
||||
["Mail"] = 0,
|
||||
["Plate"] = 1,
|
||||
["Shields"] = 1,
|
||||
--Weapon Skills
|
||||
["One-Handed Axes"] = 1,
|
||||
["Two-Handed Axes"] = 1,
|
||||
["Bows"] = 1,
|
||||
["Guns"] = 1,
|
||||
["One-Handed Maces"] = 1,
|
||||
["Two-Handed Maces"] = 1,
|
||||
["Polearms"] = 1,
|
||||
["One-Handed Swords"] = 1,
|
||||
["Two-Handed Swords"] = 1,
|
||||
["Warglaives"] = 1,
|
||||
["Staves"] = 1,
|
||||
["Fist Weapons"] = 1,
|
||||
["Daggers"] = 1,
|
||||
["Crossbows"] = 1,
|
||||
["Wands"] = 0,
|
||||
},
|
||||
--Paladin
|
||||
[2] = {
|
||||
--Armor Skills
|
||||
["Cloth"] = 0,
|
||||
["Leather"] = 0,
|
||||
["Mail"] = 0,
|
||||
["Plate"] = 1,
|
||||
["Shields"] = 1,
|
||||
--Weapon Skills
|
||||
["One-Handed Axes"] = 1,
|
||||
["Two-Handed Axes"] = 1,
|
||||
["Bows"] = 0,
|
||||
["Guns"] = 0,
|
||||
["One-Handed Maces"] = 1,
|
||||
["Two-Handed Maces"] = 1,
|
||||
["Polearms"] = 1,
|
||||
["One-Handed Swords"] = 1,
|
||||
["Two-Handed Swords"] = 1,
|
||||
["Warglaives"] = 0,
|
||||
["Staves"] = 0,
|
||||
["Fist Weapons"] = 0,
|
||||
["Daggers"] = 0,
|
||||
["Crossbows"] = 0,
|
||||
["Wands"] = 0,
|
||||
},
|
||||
--Hunter
|
||||
[3] = {
|
||||
--Armor Skills
|
||||
["Cloth"] = 0,
|
||||
["Leather"] = 0,
|
||||
["Mail"] = 1,
|
||||
["Plate"] = 0,
|
||||
["Shields"] = 0,
|
||||
--Weapon Skills
|
||||
["One-Handed Axes"] = 1,
|
||||
["Two-Handed Axes"] = 1,
|
||||
["Bows"] = 1,
|
||||
["Guns"] = 1,
|
||||
["One-Handed Maces"] = 0,
|
||||
["Two-Handed Maces"] = 0,
|
||||
["Polearms"] = 1,
|
||||
["One-Handed Swords"] = 1,
|
||||
["Two-Handed Swords"] = 1,
|
||||
["Warglaives"] = 0,
|
||||
["Staves"] = 1,
|
||||
["Fist Weapons"] = 1,
|
||||
["Daggers"] = 1,
|
||||
["Crossbows"] = 1,
|
||||
["Wands"] = 0,
|
||||
},
|
||||
--Rogue
|
||||
[4] = {
|
||||
--Armor Skills
|
||||
["Cloth"] = 0,
|
||||
["Leather"] = 1,
|
||||
["Mail"] = 0,
|
||||
["Plate"] = 0,
|
||||
["Shields"] = 0,
|
||||
--Weapon Skills
|
||||
["One-Handed Axes"] = 1,
|
||||
["Two-Handed Axes"] = 0,
|
||||
["Bows"] = 0,
|
||||
["Guns"] = 0,
|
||||
["One-Handed Maces"] = 1,
|
||||
["Two-Handed Maces"] = 0,
|
||||
["Polearms"] = 0,
|
||||
["One-Handed Swords"] = 1,
|
||||
["Two-Handed Swords"] = 0,
|
||||
["Warglaives"] = 0,
|
||||
["Staves"] = 0,
|
||||
["Fist Weapons"] = 1,
|
||||
["Daggers"] = 1,
|
||||
["Crossbows"] = 0,
|
||||
["Wands"] = 0,
|
||||
},
|
||||
--Priest
|
||||
[5] = {
|
||||
--Armor Skills
|
||||
["Cloth"] = 1,
|
||||
["Leather"] = 0,
|
||||
["Mail"] = 0,
|
||||
["Plate"] = 0,
|
||||
["Shields"] = 0,
|
||||
--Weapon Skills
|
||||
["One-Handed Axes"] = 0,
|
||||
["Two-Handed Axes"] = 0,
|
||||
["Bows"] = 0,
|
||||
["Guns"] = 0,
|
||||
["One-Handed Maces"] = 1,
|
||||
["Two-Handed Maces"] = 0,
|
||||
["Polearms"] = 0,
|
||||
["One-Handed Swords"] = 0,
|
||||
["Two-Handed Swords"] = 0,
|
||||
["Warglaives"] = 0,
|
||||
["Staves"] = 1,
|
||||
["Fist Weapons"] = 0,
|
||||
["Daggers"] = 1,
|
||||
["Crossbows"] = 0,
|
||||
["Wands"] = 1,
|
||||
},
|
||||
--Death Knight
|
||||
[6] = {
|
||||
--Armor Skills
|
||||
["Cloth"] = 0,
|
||||
["Leather"] = 0,
|
||||
["Mail"] = 0,
|
||||
["Plate"] = 1,
|
||||
["Shields"] = 0,
|
||||
--Weapon Skills
|
||||
["One-Handed Axes"] = 1,
|
||||
["Two-Handed Axes"] = 1,
|
||||
["Bows"] = 0,
|
||||
["Guns"] = 0,
|
||||
["One-Handed Maces"] = 1,
|
||||
["Two-Handed Maces"] = 1,
|
||||
["Polearms"] = 1,
|
||||
["One-Handed Swords"] = 1,
|
||||
["Two-Handed Swords"] = 1,
|
||||
["Warglaives"] = 0,
|
||||
["Staves"] = 0,
|
||||
["Fist Weapons"] = 0,
|
||||
["Daggers"] = 0,
|
||||
["Crossbows"] = 0,
|
||||
["Wands"] = 0,
|
||||
},
|
||||
--Shaman
|
||||
[7] = {
|
||||
--Armor Skills
|
||||
["Cloth"] = 0,
|
||||
["Leather"] = 0,
|
||||
["Mail"] = 1,
|
||||
["Plate"] = 0,
|
||||
["Shields"] = 1,
|
||||
--Weapon Skills
|
||||
["One-Handed Axes"] = 1,
|
||||
["Two-Handed Axes"] = 0,
|
||||
["Bows"] = 0,
|
||||
["Guns"] = 0,
|
||||
["One-Handed Maces"] = 1,
|
||||
["Two-Handed Maces"] = 0,
|
||||
["Polearms"] = 0,
|
||||
["One-Handed Swords"] = 0,
|
||||
["Two-Handed Swords"] = 0,
|
||||
["Warglaives"] = 0,
|
||||
["Staves"] = 1,
|
||||
["Fist Weapons"] = 1,
|
||||
["Daggers"] = 1,
|
||||
["Crossbows"] = 0,
|
||||
["Wands"] = 0,
|
||||
},
|
||||
--Mage
|
||||
[8] = {
|
||||
--Armor Skills
|
||||
["Cloth"] = 1,
|
||||
["Leather"] = 0,
|
||||
["Mail"] = 0,
|
||||
["Plate"] = 0,
|
||||
["Shields"] = 0,
|
||||
--Weapon Skills
|
||||
["One-Handed Axes"] = 0,
|
||||
["Two-Handed Axes"] = 0,
|
||||
["Bows"] = 0,
|
||||
["Guns"] = 0,
|
||||
["One-Handed Maces"] = 0,
|
||||
["Two-Handed Maces"] = 0,
|
||||
["Polearms"] = 0,
|
||||
["One-Handed Swords"] = 1,
|
||||
["Two-Handed Swords"] = 0,
|
||||
["Warglaives"] = 0,
|
||||
["Staves"] = 1,
|
||||
["Fist Weapons"] = 0,
|
||||
["Daggers"] = 1,
|
||||
["Crossbows"] = 0,
|
||||
["Wands"] = 1,
|
||||
},
|
||||
--Warlock
|
||||
[9] = {
|
||||
--Armor Skills
|
||||
["Cloth"] = 1,
|
||||
["Leather"] = 0,
|
||||
["Mail"] = 0,
|
||||
["Plate"] = 0,
|
||||
["Shields"] = 0,
|
||||
--Weapon Skills
|
||||
["One-Handed Axes"] = 0,
|
||||
["Two-Handed Axes"] = 0,
|
||||
["Bows"] = 0,
|
||||
["Guns"] = 0,
|
||||
["One-Handed Maces"] = 0,
|
||||
["Two-Handed Maces"] = 0,
|
||||
["Polearms"] = 0,
|
||||
["One-Handed Swords"] = 1,
|
||||
["Two-Handed Swords"] = 0,
|
||||
["Warglaives"] = 0,
|
||||
["Staves"] = 1,
|
||||
["Fist Weapons"] = 0,
|
||||
["Daggers"] = 1,
|
||||
["Crossbows"] = 0,
|
||||
["Wands"] = 1,
|
||||
},
|
||||
--Monk
|
||||
[10] = {
|
||||
--Armor Skills
|
||||
["Cloth"] = 0,
|
||||
["Leather"] = 1,
|
||||
["Mail"] = 0,
|
||||
["Plate"] = 1,
|
||||
["Shields"] = 1,
|
||||
--Weapon Skills
|
||||
["One-Handed Axes"] = 1,
|
||||
["Two-Handed Axes"] = 0,
|
||||
["Bows"] = 0,
|
||||
["Guns"] = 0,
|
||||
["One-Handed Maces"] = 1,
|
||||
["Two-Handed Maces"] = 0,
|
||||
["Polearms"] = 1,
|
||||
["One-Handed Swords"] = 1,
|
||||
["Two-Handed Swords"] = 0,
|
||||
["Warglaives"] = 0,
|
||||
["Staves"] = 1,
|
||||
["Fist Weapons"] = 1,
|
||||
["Daggers"] = 0,
|
||||
["Crossbows"] = 0,
|
||||
["Wands"] = 0,
|
||||
},
|
||||
--Druid
|
||||
[11] = {
|
||||
--Armor Skills
|
||||
["Cloth"] = 0,
|
||||
["Leather"] = 1,
|
||||
["Mail"] = 0,
|
||||
["Plate"] = 0,
|
||||
["Shields"] = 0,
|
||||
--Weapon Skills
|
||||
["One-Handed Axes"] = 0,
|
||||
["Two-Handed Axes"] = 0,
|
||||
["Bows"] = 0,
|
||||
["Guns"] = 0,
|
||||
["One-Handed Maces"] = 1,
|
||||
["Two-Handed Maces"] = 0,
|
||||
["Polearms"] = 1,
|
||||
["One-Handed Swords"] = 0,
|
||||
["Two-Handed Swords"] = 0,
|
||||
["Warglaives"] = 0,
|
||||
["Staves"] = 1,
|
||||
["Fist Weapons"] = 1,
|
||||
["Daggers"] = 1,
|
||||
["Crossbows"] = 0,
|
||||
["Wands"] = 0,
|
||||
},
|
||||
--Demon Hunter
|
||||
[12] = {
|
||||
--Armor Skills
|
||||
["Cloth"] = 0,
|
||||
["Leather"] = 1,
|
||||
["Mail"] = 0,
|
||||
["Plate"] = 0,
|
||||
["Shields"] = 0,
|
||||
--Weapon Skills
|
||||
["One-Handed Axes"] = 1,
|
||||
["Two-Handed Axes"] = 0,
|
||||
["Bows"] = 0,
|
||||
["Guns"] = 0,
|
||||
["One-Handed Maces"] = 0,
|
||||
["Two-Handed Maces"] = 0,
|
||||
["Polearms"] = 0,
|
||||
["One-Handed Swords"] = 1,
|
||||
["Two-Handed Swords"] = 0,
|
||||
["Warglaives"] = 1,
|
||||
["Staves"] = 0,
|
||||
["Fist Weapons"] = 1,
|
||||
["Daggers"] = 0,
|
||||
["Crossbows"] = 0,
|
||||
["Wands"] = 0,
|
||||
},
|
||||
}
|
||||
@@ -1,69 +1,69 @@
|
||||
-- LOOT_READY LOOT_OPENED
|
||||
|
||||
function(e, ...)
|
||||
local slot = 1
|
||||
local lootinfo = GetLootInfo()
|
||||
for k, v in pairs(lootinfo) do
|
||||
if v.locked == false then
|
||||
local link = GetLootSlotLink(slot)
|
||||
if not link then link = GetLootSlotLink(slot) end
|
||||
if aura_env.filter[1] == true and (v.item:match("%d+ Gold") or v.item:match("%d+ Silver") or v.item:match("%d+ Copper")) then
|
||||
LootSlot(slot)
|
||||
elseif aura_env.filter[2] == true and link:match("Azerite") then
|
||||
LootSlot(slot)
|
||||
elseif aura_env.filter[3] == true and v.item:match("War Resources") then
|
||||
LootSlot(slot)
|
||||
elseif aura_env.filter[4] == true and v.item:match("Residuum") then
|
||||
LootSlot(slot)
|
||||
elseif aura_env.filter[5] == true and v.item:match("Manapearl") then
|
||||
LootSlot(slot)
|
||||
end
|
||||
if link then
|
||||
local type = select(6, GetItemInfo(link)) or ""
|
||||
local subtype = select(7, GetItemInfo(link)) or ""
|
||||
local ilvl = select(4, GetItemInfo(link)) or 0
|
||||
local equip = select(9, GetItemInfo(link))
|
||||
if aura_env.filter[6] == true and (select(7, GetItemInfo(link)) or 0) == "Mount" then
|
||||
LootSlot(slot)
|
||||
elseif aura_env.filter[7] == true and ilvl > aura_env.ilvlFilter then
|
||||
LootSlot(slot)
|
||||
elseif aura_env.filter[8] == true and (select(7, GetItemInfo(link)) or 0) == "Herb" then
|
||||
LootSlot(slot)
|
||||
elseif aura_env.filter[9] == true and (select(7, GetItemInfo(link)) or 0) == "Cooking" then
|
||||
LootSlot(slot)
|
||||
elseif aura_env.filter[10] == true and (select(7, GetItemInfo(link)) or 0) == "Cloth" and type == "Tradeskill" then
|
||||
LootSlot(slot)
|
||||
elseif aura_env.filter[11] == true and (select(7, GetItemInfo(link)) or 0) == "Metal & Stone" then
|
||||
LootSlot(slot)
|
||||
elseif aura_env.filter[12] == true and (select(11, GetItemInfo(link)) or 0) > aura_env.goldFilter and v.quality == 0 then
|
||||
LootSlot(slot)
|
||||
elseif aura_env.filter[13] == true and v.quality > 1 and v.quality < 4 and type ~= "Weapon" and type ~= "Armor" then
|
||||
LootSlot(slot)
|
||||
elseif aura_env.filter[14] == true and v.isQuestItem == true then
|
||||
LootSlot(slot)
|
||||
elseif aura_env.filter[15] == true and v.quality == 0 then
|
||||
LootSlot(slot)
|
||||
elseif aura_env.filter[16] == true and aura_env.whitelist[v.item] then
|
||||
LootSlot(slot)
|
||||
elseif aura_env.filter[17] == true and type == "Quest" and subtype == "Quest" then
|
||||
LootSlot(slot)
|
||||
elseif aura_env.filter[21] == true and type == "Tradeskill" and subtype == "Elemental" then
|
||||
LootSlot(slot)
|
||||
else
|
||||
if type == "Weapon" or type == "Armor" then
|
||||
if aura_env.filter[18] == true and aura_env.skills[select(3, UnitClass("player"))][subtype] == 1 and v.quality > 2 then
|
||||
LootSlot(slot)
|
||||
elseif aura_env.filter[19] == true and (equip == "INVTYPE_FINGER" or equip == "INVTYPE_TRINKET" or equip == "INVTYPE_CLOAK" or equip == "INVTYPE_NECK") and v.quality > 2 then
|
||||
LootSlot(slot)
|
||||
end
|
||||
elseif aura_env.filter[20] == true and type == "Miscellaneous" then
|
||||
if subtype == "Mount" then
|
||||
LootSlot(slot)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
slot = slot + 1
|
||||
end
|
||||
end
|
||||
-- LOOT_READY LOOT_OPENED
|
||||
|
||||
function(e, ...)
|
||||
local slot = 1
|
||||
local lootinfo = GetLootInfo()
|
||||
for k, v in pairs(lootinfo) do
|
||||
if v.locked == false then
|
||||
local link = GetLootSlotLink(slot)
|
||||
if not link then link = GetLootSlotLink(slot) end
|
||||
if aura_env.filter[1] == true and (v.item:match("%d+ Gold") or v.item:match("%d+ Silver") or v.item:match("%d+ Copper")) then
|
||||
LootSlot(slot)
|
||||
elseif aura_env.filter[2] == true and link:match("Azerite") then
|
||||
LootSlot(slot)
|
||||
elseif aura_env.filter[3] == true and v.item:match("War Resources") then
|
||||
LootSlot(slot)
|
||||
elseif aura_env.filter[4] == true and v.item:match("Residuum") then
|
||||
LootSlot(slot)
|
||||
elseif aura_env.filter[5] == true and v.item:match("Manapearl") then
|
||||
LootSlot(slot)
|
||||
end
|
||||
if link then
|
||||
local type = select(6, GetItemInfo(link)) or ""
|
||||
local subtype = select(7, GetItemInfo(link)) or ""
|
||||
local ilvl = select(4, GetItemInfo(link)) or 0
|
||||
local equip = select(9, GetItemInfo(link))
|
||||
if aura_env.filter[6] == true and (select(7, GetItemInfo(link)) or 0) == "Mount" then
|
||||
LootSlot(slot)
|
||||
elseif aura_env.filter[7] == true and ilvl > aura_env.ilvlFilter then
|
||||
LootSlot(slot)
|
||||
elseif aura_env.filter[8] == true and (select(7, GetItemInfo(link)) or 0) == "Herb" then
|
||||
LootSlot(slot)
|
||||
elseif aura_env.filter[9] == true and (select(7, GetItemInfo(link)) or 0) == "Cooking" then
|
||||
LootSlot(slot)
|
||||
elseif aura_env.filter[10] == true and (select(7, GetItemInfo(link)) or 0) == "Cloth" and type == "Tradeskill" then
|
||||
LootSlot(slot)
|
||||
elseif aura_env.filter[11] == true and (select(7, GetItemInfo(link)) or 0) == "Metal & Stone" then
|
||||
LootSlot(slot)
|
||||
elseif aura_env.filter[12] == true and (select(11, GetItemInfo(link)) or 0) > aura_env.goldFilter and v.quality == 0 then
|
||||
LootSlot(slot)
|
||||
elseif aura_env.filter[13] == true and v.quality > 1 and v.quality < 4 and type ~= "Weapon" and type ~= "Armor" then
|
||||
LootSlot(slot)
|
||||
elseif aura_env.filter[14] == true and v.isQuestItem == true then
|
||||
LootSlot(slot)
|
||||
elseif aura_env.filter[15] == true and v.quality == 0 then
|
||||
LootSlot(slot)
|
||||
elseif aura_env.filter[16] == true and aura_env.whitelist[v.item] then
|
||||
LootSlot(slot)
|
||||
elseif aura_env.filter[17] == true and type == "Quest" and subtype == "Quest" then
|
||||
LootSlot(slot)
|
||||
elseif aura_env.filter[21] == true and type == "Tradeskill" and subtype == "Elemental" then
|
||||
LootSlot(slot)
|
||||
else
|
||||
if type == "Weapon" or type == "Armor" then
|
||||
if aura_env.filter[18] == true and aura_env.skills[select(3, UnitClass("player"))][subtype] == 1 and v.quality > 2 then
|
||||
LootSlot(slot)
|
||||
elseif aura_env.filter[19] == true and (equip == "INVTYPE_FINGER" or equip == "INVTYPE_TRINKET" or equip == "INVTYPE_CLOAK" or equip == "INVTYPE_NECK") and v.quality > 2 then
|
||||
LootSlot(slot)
|
||||
end
|
||||
elseif aura_env.filter[20] == true and type == "Miscellaneous" then
|
||||
if subtype == "Mount" then
|
||||
LootSlot(slot)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
slot = slot + 1
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -1,20 +1,20 @@
|
||||
{
|
||||
IsOnCooldown = {
|
||||
type = "bool",
|
||||
test = function(state, needle)
|
||||
return state.IsOnCooldown == (needle == 1)
|
||||
end,
|
||||
},
|
||||
IsActive = {
|
||||
type = "bool",
|
||||
test = function(state, needle)
|
||||
return state.IsActive == (needle == 1)
|
||||
end,
|
||||
},
|
||||
IsDebuff = {
|
||||
type = "bool",
|
||||
test = function(state, needle)
|
||||
return state.IsBad == (needle == 1)
|
||||
end,
|
||||
},
|
||||
{
|
||||
IsOnCooldown = {
|
||||
type = "bool",
|
||||
test = function(state, needle)
|
||||
return state.IsOnCooldown == (needle == 1)
|
||||
end,
|
||||
},
|
||||
IsActive = {
|
||||
type = "bool",
|
||||
test = function(state, needle)
|
||||
return state.IsActive == (needle == 1)
|
||||
end,
|
||||
},
|
||||
IsDebuff = {
|
||||
type = "bool",
|
||||
test = function(state, needle)
|
||||
return state.IsBad == (needle == 1)
|
||||
end,
|
||||
},
|
||||
}
|
||||
@@ -1,11 +1,11 @@
|
||||
function()
|
||||
if aura_env.state.pname then
|
||||
output = ""
|
||||
if aura_env.state.pclass then
|
||||
output = aura_env.GetClassColor(aura_env.state.pclass) .. aura_env.state.pname .. "\124r"
|
||||
else
|
||||
output = aura_env.state.pname
|
||||
end
|
||||
return output
|
||||
end
|
||||
function()
|
||||
if aura_env.statee.pname then
|
||||
output = ""
|
||||
if aura_env.statee.pclass then
|
||||
output = aura_env.GetClassColor(aura_env.statee.pclass) .. aura_env.statee.pname .. "\124r"
|
||||
else
|
||||
output = aura_env.statee.pname
|
||||
end
|
||||
return output
|
||||
end
|
||||
end
|
||||
@@ -1,308 +1,308 @@
|
||||
local function StrSplit(inputString, separator)
|
||||
local outputTable = {}
|
||||
for str in string.gmatch(inputString, "([^" .. separator .. "]+)") do
|
||||
outputTable[#outputTable + 1] = str
|
||||
end
|
||||
return outputTable
|
||||
end
|
||||
|
||||
local function PrintTable(table)
|
||||
for k,v in pairs(table) do
|
||||
print(k .. " " .. v)
|
||||
end
|
||||
end
|
||||
|
||||
aura_env.GetClassColor = function(class)
|
||||
if class == "Death Knight" then
|
||||
return "\124cFFC41E3A"
|
||||
elseif class == "Druid" then
|
||||
return "\124cFFFF7C0A"
|
||||
elseif class == "Hunter" then
|
||||
return "\124cFFAAD372"
|
||||
elseif class == "Mage" then
|
||||
return "\124cFF3FC7EB"
|
||||
elseif class == "Paladin" then
|
||||
return "\124cFFF48CBA"
|
||||
elseif class == "Priest" then
|
||||
return "\124cFFFFFFFF"
|
||||
elseif class == "Rogue" then
|
||||
return "\124cFFFFF468"
|
||||
elseif class == "Shaman" then
|
||||
return "\124cFF0070DD"
|
||||
elseif class == "Warlock" then
|
||||
return "\124cFF8788EE"
|
||||
elseif class == "Warrior" then
|
||||
return "\124cFFC69B6D"
|
||||
end
|
||||
end
|
||||
|
||||
local Unit = {
|
||||
New = function(self, unit)
|
||||
o = {
|
||||
["unit"] = unit,
|
||||
}
|
||||
setmetatable(o, self)
|
||||
self.__index = self
|
||||
return o
|
||||
end,
|
||||
|
||||
GetAuras = function(self, auraFunc, name, type)
|
||||
return nil
|
||||
end,
|
||||
}
|
||||
local BasicUnit = Unit:New("player")
|
||||
function BasicUnit:GetAuras(auraFunc, name)
|
||||
local aura, _, _, stacks, _, duration, expirationTime, _, _, _, spellID = auraFunc(self.unit, name)
|
||||
if aura ~= nil then
|
||||
return {
|
||||
[UnitName(self.unit)] = {
|
||||
["duration"] = duration,
|
||||
["expirationTime"] = expirationTime,
|
||||
["spellID"] = spellID,
|
||||
["stacks"] = stacks or 1,
|
||||
}
|
||||
}
|
||||
else
|
||||
return {}
|
||||
end
|
||||
end
|
||||
-- Maybe implement some sort of throttle to group unit?
|
||||
local GroupUnit = Unit:New("group")
|
||||
function GroupUnit:GetAuras(auraFunc, name)
|
||||
local raidMem = GetNumRaidMembers()
|
||||
local num = GetNumPartyMembers()
|
||||
local unitPrefix = "party"
|
||||
if raidMem > num then
|
||||
unitPrefix = "raid"
|
||||
num = raidMem
|
||||
end
|
||||
auras = {}
|
||||
for i = 1, num do
|
||||
local aura, _, _, stacks, _, duration, expirationTime, _, _, _, spellID = auraFunc(unitPrefix .. i, name)
|
||||
if aura ~= nil then
|
||||
auras[UnitName(unitPrefix .. i)] = {
|
||||
["duration"] = duration,
|
||||
["expirationTime"] = expirationTime,
|
||||
["spellID"] = spellID,
|
||||
["class"] = UnitClass(unitPrefix .. i) or "Paladin",
|
||||
["stacks"] = stacks or 1,
|
||||
}
|
||||
end
|
||||
end
|
||||
if unitPrefix == "party" then
|
||||
local aura, _, _, stacks, _, duration, expirationTime, _, _, _, spellID = auraFunc("player", name)
|
||||
if aura ~= nil then
|
||||
auras[UnitName("player")] = {
|
||||
["duration"] = duration,
|
||||
["expirationTime"] = expirationTime,
|
||||
["spellID"] = spellID,
|
||||
["class"] = UnitClass(unitPrefix .. i) or "Paladin",
|
||||
["stacks"] = stacks or 1,
|
||||
}
|
||||
end
|
||||
end
|
||||
return auras
|
||||
end
|
||||
-- Nameplate does not work, find out why?
|
||||
local NameplateUnit = Unit:New("nameplate")
|
||||
function NameplateUnit:GetAuras(auraFunc, name)
|
||||
local unitPrefix = "nameplate"
|
||||
auras = {}
|
||||
for i = 1, 40 do
|
||||
local aura, _, _, stacks, _, duration, expirationTime, _, _, _, spellID = auraFunc(auraPrefix .. i, name)
|
||||
if aura ~= nil then
|
||||
auras[UnitName(unitPrefix .. i)] = {
|
||||
["duration"] = duration,
|
||||
["expirationTime"] = expirationTime,
|
||||
["spellID"] = spellID,
|
||||
["stacks"] = stacks or 1,
|
||||
}
|
||||
end
|
||||
end
|
||||
return auras
|
||||
end
|
||||
|
||||
local UnitFactory = {
|
||||
New = function(self)
|
||||
o = {}
|
||||
setmetatable(o, self)
|
||||
self.__index = self
|
||||
return o
|
||||
end,
|
||||
|
||||
CreateUnit = function(self, target)
|
||||
target = string.lower(target)
|
||||
if target == "player" or target == "target" or target == "focus" then
|
||||
return BasicUnit:New(target)
|
||||
elseif target == "group" then
|
||||
return GroupUnit:New(target)
|
||||
elseif target == "nameplate" then
|
||||
return NameplateUnit:New(target)
|
||||
end
|
||||
end,
|
||||
}
|
||||
local unitFactory = UnitFactory:New()
|
||||
|
||||
local Aura = {
|
||||
New = function(self, entry, index)
|
||||
o = {
|
||||
["name"] = entry.auraName,
|
||||
["unit"] = entry.target,
|
||||
["hasCooldown"] = entry.hasCooldown,
|
||||
["index"] = index,
|
||||
["GetAura"] = entry.GetAura,
|
||||
}
|
||||
setmetatable(o, self)
|
||||
self.__index = self
|
||||
return o
|
||||
end,
|
||||
|
||||
IsActive = function(self)
|
||||
for k,v in pairs(self.unit:GetAuras(self.GetAura, self.name)) do
|
||||
for k2, v2 in pairs(v) do
|
||||
end
|
||||
return true
|
||||
end
|
||||
return false
|
||||
end,
|
||||
IsOnCooldown = function(self)
|
||||
if not self.hasCooldown then
|
||||
return false
|
||||
end
|
||||
return GetSpellCooldown(self.name) > 0
|
||||
end,
|
||||
|
||||
AddAsAura = function(self, allstates)
|
||||
local auras = self.unit:GetAuras(self.GetAura, self.name)
|
||||
for k,v in pairs(auras) do
|
||||
duration = v.duration
|
||||
expirationTime = v.expirationTime
|
||||
icon = self:GetAuraIcon(v.spellID)
|
||||
allstates[self.name .. k] = {
|
||||
changed = true,
|
||||
show = true,
|
||||
resort = true,
|
||||
progressType = "timed",
|
||||
duration = duration,
|
||||
expirationTime = expirationTime,
|
||||
index = self.index,
|
||||
icon = icon,
|
||||
pname = k,
|
||||
stacks = v.stacks,
|
||||
pclass = v.class,
|
||||
IsOnCooldown = true,
|
||||
IsActive = true,
|
||||
IsBad = self.GetAura == UnitDebuff,
|
||||
}
|
||||
end
|
||||
end,
|
||||
AddAsCooldown = function(self, allstates)
|
||||
if not self.hasCooldown then
|
||||
return false
|
||||
end
|
||||
startTime, duration = GetSpellCooldown(self.name)
|
||||
icon = self:GetSpellIcon()
|
||||
allstates[self.name] = {
|
||||
changed = true,
|
||||
show = true,
|
||||
resort = true,
|
||||
progressType = "timed",
|
||||
duration = duration,
|
||||
expirationTime = startTime + duration,
|
||||
index = self.index,
|
||||
icon = icon,
|
||||
IsOnCooldown = true,
|
||||
IsActive = false,
|
||||
IsBad = self.GetAura == UnitDebuff,
|
||||
}
|
||||
end,
|
||||
AddAsIcon = function(self, allstates)
|
||||
if not self.hasCooldown then
|
||||
return false
|
||||
end
|
||||
icon = self:GetSpellIcon()
|
||||
allstates[self.name] = {
|
||||
changed = true,
|
||||
show = true,
|
||||
resort = true,
|
||||
progressType = "static",
|
||||
value = 1,
|
||||
total = 1,
|
||||
index = self.index,
|
||||
icon = icon,
|
||||
IsOnCooldown = false,
|
||||
IsActive = false,
|
||||
IsBad = self.GetAura == UnitDebuff,
|
||||
}
|
||||
end,
|
||||
|
||||
GetSpellIcon = function(self)
|
||||
return select(3, GetSpellInfo(self.name))
|
||||
end,
|
||||
GetAuraIcon = function(self, spellID)
|
||||
return select(3, GetSpellInfo(spellID))
|
||||
end,
|
||||
}
|
||||
|
||||
local Entry = {
|
||||
New = function(self, entry)
|
||||
entry = self:TrimWhitespace(entry)
|
||||
|
||||
local entryData = StrSplit(entry, ",")
|
||||
local name = self:ReadEntryData(entryData, 1)
|
||||
local type = self:ReadEntryData(entryData, 2) or "Buff"
|
||||
local target = unitFactory:CreateUnit(self:ReadEntryData(entryData, 3) or "Player")
|
||||
local cooldown = (self:ReadEntryData(entryData, 4) == "0") or false
|
||||
cooldown = not cooldown
|
||||
local GetAura = UnitBuff
|
||||
|
||||
if type == "Debuff" then GetAura = UnitDebuff end
|
||||
|
||||
o = {
|
||||
["entry"] = entry,
|
||||
["auraName"] = name,
|
||||
["GetAura"] = GetAura,
|
||||
["target"] = target,
|
||||
["hasCooldown"] = cooldown,
|
||||
}
|
||||
setmetatable(o, self)
|
||||
self.__index = self
|
||||
return o
|
||||
end,
|
||||
|
||||
ReadEntryData = function(self, entryData, index)
|
||||
local str = entryData[index]
|
||||
if str == nil then
|
||||
return nil
|
||||
end
|
||||
str = self:TrimWhitespace(str)
|
||||
return str
|
||||
end,
|
||||
|
||||
TrimWhitespace = function(self, str)
|
||||
str = str:gsub("^[ ]+", "")
|
||||
str = str:gsub("\n$", "")
|
||||
str = str:gsub("[ ]+$", "")
|
||||
return str
|
||||
end,
|
||||
}
|
||||
|
||||
aura_env.auras = {}
|
||||
for entry in string.gmatch(aura_env.config.spellList, "([a-zA-Z,0-9 ]+)") do
|
||||
entry = Entry:New(entry)
|
||||
|
||||
auraObj = Aura:New(entry, #aura_env.auras + 1)
|
||||
aura_env.auras[#aura_env.auras + 1] = auraObj
|
||||
end
|
||||
|
||||
aura_env.HandleEvent = function(allstates)
|
||||
for k, v in ipairs(aura_env.auras) do
|
||||
if v:IsActive() then
|
||||
v:AddAsAura(allstates)
|
||||
elseif v:IsOnCooldown() and not v:IsActive() then
|
||||
v:AddAsCooldown(allstates)
|
||||
elseif not v:IsOnCooldown() and not v:IsActive() then
|
||||
v:AddAsIcon(allstates)
|
||||
end
|
||||
end
|
||||
local function StrSplit(inputString, separator)
|
||||
local outputTable = {}
|
||||
for str in string.gmatch(inputString, "([^" .. separator .. "]+)") do
|
||||
outputTable[#outputTable + 1] = str
|
||||
end
|
||||
return outputTable
|
||||
end
|
||||
|
||||
local function PrintTable(table)
|
||||
for k,v in pairs(table) do
|
||||
print(k .. " " .. v)
|
||||
end
|
||||
end
|
||||
|
||||
aura_env.GetClassColor = function(class)
|
||||
if class == "Death Knight" then
|
||||
return "\124cFFC41E3A"
|
||||
elseif class == "Druid" then
|
||||
return "\124cFFFF7C0A"
|
||||
elseif class == "Hunter" then
|
||||
return "\124cFFAAD372"
|
||||
elseif class == "Mage" then
|
||||
return "\124cFF3FC7EB"
|
||||
elseif class == "Paladin" then
|
||||
return "\124cFFF48CBA"
|
||||
elseif class == "Priest" then
|
||||
return "\124cFFFFFFFF"
|
||||
elseif class == "Rogue" then
|
||||
return "\124cFFFFF468"
|
||||
elseif class == "Shaman" then
|
||||
return "\124cFF0070DD"
|
||||
elseif class == "Warlock" then
|
||||
return "\124cFF8788EE"
|
||||
elseif class == "Warrior" then
|
||||
return "\124cFFC69B6D"
|
||||
end
|
||||
end
|
||||
|
||||
local Unit = {
|
||||
New = function(self, unit)
|
||||
o = {
|
||||
["unit"] = unit,
|
||||
}
|
||||
setmetatable(o, self)
|
||||
self.__index = self
|
||||
return o
|
||||
end,
|
||||
|
||||
GetAuras = function(self, auraFunc, name, type)
|
||||
return nil
|
||||
end,
|
||||
}
|
||||
local BasicUnit = Unit:New("player")
|
||||
function BasicUnit:GetAuras(auraFunc, name)
|
||||
local aura, _, _, stacks, _, duration, expirationTime, _, _, _, spellID = auraFunc(self.unit, name)
|
||||
if aura ~= nil then
|
||||
return {
|
||||
[UnitName(self.unit)] = {
|
||||
["duration"] = duration,
|
||||
["expirationTime"] = expirationTime,
|
||||
["spellID"] = spellID,
|
||||
["stacks"] = stacks or 1,
|
||||
}
|
||||
}
|
||||
else
|
||||
return {}
|
||||
end
|
||||
end
|
||||
-- Maybe implement some sort of throttle to group unit?
|
||||
local GroupUnit = Unit:New("group")
|
||||
function GroupUnit:GetAuras(auraFunc, name)
|
||||
local raidMem = GetNumRaidMembers()
|
||||
local num = GetNumPartyMembers()
|
||||
local unitPrefix = "party"
|
||||
if raidMem > num then
|
||||
unitPrefix = "raid"
|
||||
num = raidMem
|
||||
end
|
||||
auras = {}
|
||||
for i = 1, num do
|
||||
local aura, _, _, stacks, _, duration, expirationTime, _, _, _, spellID = auraFunc(unitPrefix .. i, name)
|
||||
if aura ~= nil then
|
||||
auras[UnitName(unitPrefix .. i)] = {
|
||||
["duration"] = duration,
|
||||
["expirationTime"] = expirationTime,
|
||||
["spellID"] = spellID,
|
||||
["class"] = UnitClass(unitPrefix .. i) or "Paladin",
|
||||
["stacks"] = stacks or 1,
|
||||
}
|
||||
end
|
||||
end
|
||||
if unitPrefix == "party" then
|
||||
local aura, _, _, stacks, _, duration, expirationTime, _, _, _, spellID = auraFunc("player", name)
|
||||
if aura ~= nil then
|
||||
auras[UnitName("player")] = {
|
||||
["duration"] = duration,
|
||||
["expirationTime"] = expirationTime,
|
||||
["spellID"] = spellID,
|
||||
["class"] = UnitClass(unitPrefix .. i) or "Paladin",
|
||||
["stacks"] = stacks or 1,
|
||||
}
|
||||
end
|
||||
end
|
||||
return auras
|
||||
end
|
||||
-- Nameplate does not work, find out why?
|
||||
local NameplateUnit = Unit:New("nameplate")
|
||||
function NameplateUnit:GetAuras(auraFunc, name)
|
||||
local unitPrefix = "nameplate"
|
||||
auras = {}
|
||||
for i = 1, 40 do
|
||||
local aura, _, _, stacks, _, duration, expirationTime, _, _, _, spellID = auraFunc(auraPrefix .. i, name)
|
||||
if aura ~= nil then
|
||||
auras[UnitName(unitPrefix .. i)] = {
|
||||
["duration"] = duration,
|
||||
["expirationTime"] = expirationTime,
|
||||
["spellID"] = spellID,
|
||||
["stacks"] = stacks or 1,
|
||||
}
|
||||
end
|
||||
end
|
||||
return auras
|
||||
end
|
||||
|
||||
local UnitFactory = {
|
||||
New = function(self)
|
||||
o = {}
|
||||
setmetatable(o, self)
|
||||
self.__index = self
|
||||
return o
|
||||
end,
|
||||
|
||||
CreateUnit = function(self, target)
|
||||
target = string.lower(target)
|
||||
if target == "player" or target == "target" or target == "focus" then
|
||||
return BasicUnit:New(target)
|
||||
elseif target == "group" then
|
||||
return GroupUnit:New(target)
|
||||
elseif target == "nameplate" then
|
||||
return NameplateUnit:New(target)
|
||||
end
|
||||
end,
|
||||
}
|
||||
local unitFactory = UnitFactory:New()
|
||||
|
||||
local Aura = {
|
||||
New = function(self, entry, index)
|
||||
o = {
|
||||
["name"] = entry.auraName,
|
||||
["unit"] = entry.target,
|
||||
["hasCooldown"] = entry.hasCooldown,
|
||||
["index"] = index,
|
||||
["GetAura"] = entry.GetAura,
|
||||
}
|
||||
setmetatable(o, self)
|
||||
self.__index = self
|
||||
return o
|
||||
end,
|
||||
|
||||
IsActive = function(self)
|
||||
for k,v in pairs(self.unit:GetAuras(self.GetAura, self.name)) do
|
||||
for k2, v2 in pairs(v) do
|
||||
end
|
||||
return true
|
||||
end
|
||||
return false
|
||||
end,
|
||||
IsOnCooldown = function(self)
|
||||
if not self.hasCooldown then
|
||||
return false
|
||||
end
|
||||
return GetSpellCooldown(self.name) > 0
|
||||
end,
|
||||
|
||||
AddAsAura = function(self, allstates)
|
||||
local auras = self.unit:GetAuras(self.GetAura, self.name)
|
||||
for k,v in pairs(auras) do
|
||||
duration = v.duration
|
||||
expirationTime = v.expirationTime
|
||||
icon = self:GetAuraIcon(v.spellID)
|
||||
allstates[self.name .. k] = {
|
||||
changed = true,
|
||||
show = true,
|
||||
resort = true,
|
||||
progressType = "timed",
|
||||
duration = duration,
|
||||
expirationTime = expirationTime,
|
||||
index = self.index,
|
||||
icon = icon,
|
||||
pname = k,
|
||||
stacks = v.stacks,
|
||||
pclass = v.class,
|
||||
IsOnCooldown = true,
|
||||
IsActive = true,
|
||||
IsBad = self.GetAura == UnitDebuff,
|
||||
}
|
||||
end
|
||||
end,
|
||||
AddAsCooldown = function(self, allstates)
|
||||
if not self.hasCooldown then
|
||||
return false
|
||||
end
|
||||
startTime, duration = GetSpellCooldown(self.name)
|
||||
icon = self:GetSpellIcon()
|
||||
allstates[self.name] = {
|
||||
changed = true,
|
||||
show = true,
|
||||
resort = true,
|
||||
progressType = "timed",
|
||||
duration = duration,
|
||||
expirationTime = startTime + duration,
|
||||
index = self.index,
|
||||
icon = icon,
|
||||
IsOnCooldown = true,
|
||||
IsActive = false,
|
||||
IsBad = self.GetAura == UnitDebuff,
|
||||
}
|
||||
end,
|
||||
AddAsIcon = function(self, allstates)
|
||||
if not self.hasCooldown then
|
||||
return false
|
||||
end
|
||||
icon = self:GetSpellIcon()
|
||||
allstates[self.name] = {
|
||||
changed = true,
|
||||
show = true,
|
||||
resort = true,
|
||||
progressType = "static",
|
||||
value = 1,
|
||||
total = 1,
|
||||
index = self.index,
|
||||
icon = icon,
|
||||
IsOnCooldown = false,
|
||||
IsActive = false,
|
||||
IsBad = self.GetAura == UnitDebuff,
|
||||
}
|
||||
end,
|
||||
|
||||
GetSpellIcon = function(self)
|
||||
return select(3, GetSpellInfo(self.name))
|
||||
end,
|
||||
GetAuraIcon = function(self, spellID)
|
||||
return select(3, GetSpellInfo(spellID))
|
||||
end,
|
||||
}
|
||||
|
||||
local Entry = {
|
||||
New = function(self, entry)
|
||||
entry = self:TrimWhitespace(entry)
|
||||
|
||||
local entryData = StrSplit(entry, ",")
|
||||
local name = self:ReadEntryData(entryData, 1)
|
||||
local type = self:ReadEntryData(entryData, 2) or "Buff"
|
||||
local target = unitFactory:CreateUnit(self:ReadEntryData(entryData, 3) or "Player")
|
||||
local cooldown = (self:ReadEntryData(entryData, 4) == "0") or false
|
||||
cooldown = not cooldown
|
||||
local GetAura = UnitBuff
|
||||
|
||||
if type == "Debuff" then GetAura = UnitDebuff end
|
||||
|
||||
o = {
|
||||
["entry"] = entry,
|
||||
["auraName"] = name,
|
||||
["GetAura"] = GetAura,
|
||||
["target"] = target,
|
||||
["hasCooldown"] = cooldown,
|
||||
}
|
||||
setmetatable(o, self)
|
||||
self.__index = self
|
||||
return o
|
||||
end,
|
||||
|
||||
ReadEntryData = function(self, entryData, index)
|
||||
local str = entryData[index]
|
||||
if str == nil then
|
||||
return nil
|
||||
end
|
||||
str = self:TrimWhitespace(str)
|
||||
return str
|
||||
end,
|
||||
|
||||
TrimWhitespace = function(self, str)
|
||||
str = str:gsub("^[ ]+", "")
|
||||
str = str:gsub("\n$", "")
|
||||
str = str:gsub("[ ]+$", "")
|
||||
return str
|
||||
end,
|
||||
}
|
||||
|
||||
aura_env.auras = {}
|
||||
for entry in string.gmatch(aura_env.config.spellList, "([a-zA-Z,0-9 ]+)") do
|
||||
entry = Entry:New(entry)
|
||||
|
||||
auraObj = Aura:New(entry, #aura_env.auras + 1)
|
||||
aura_env.auras[#aura_env.auras + 1] = auraObj
|
||||
end
|
||||
|
||||
aura_env.HandleEvent = function(allstates)
|
||||
for k, v in ipairs(aura_env.auras) do
|
||||
if v:IsActive() then
|
||||
v:AddAsAura(allstates)
|
||||
elseif v:IsOnCooldown() and not v:IsActive() then
|
||||
v:AddAsCooldown(allstates)
|
||||
elseif not v:IsOnCooldown() and not v:IsActive() then
|
||||
v:AddAsIcon(allstates)
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -1,317 +1,317 @@
|
||||
local function StrSplit(inputString, separator)
|
||||
local outputTable = {}
|
||||
for str in string.gmatch(inputString, "([^" .. separator .. "]+)") do
|
||||
outputTable[#outputTable + 1] = str
|
||||
end
|
||||
return outputTable
|
||||
end
|
||||
|
||||
local function PrintTable(table)
|
||||
for k,v in pairs(table) do
|
||||
print(k .. " " .. v)
|
||||
end
|
||||
end
|
||||
|
||||
local function GetAuraIndex(func, unit, name)
|
||||
for i = 1, 40 do
|
||||
local aura = func(unit, i)
|
||||
if aura == "name" then return i end
|
||||
if aura == nil then return 0 end
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
aura_env.GetClassColor = function(class)
|
||||
if class == "Death Knight" then
|
||||
return "\124cFFC41E3A"
|
||||
elseif class == "Druid" then
|
||||
return "\124cFFFF7C0A"
|
||||
elseif class == "Hunter" then
|
||||
return "\124cFFAAD372"
|
||||
elseif class == "Mage" then
|
||||
return "\124cFF3FC7EB"
|
||||
elseif class == "Paladin" then
|
||||
return "\124cFFF48CBA"
|
||||
elseif class == "Priest" then
|
||||
return "\124cFFFFFFFF"
|
||||
elseif class == "Rogue" then
|
||||
return "\124cFFFFF468"
|
||||
elseif class == "Shaman" then
|
||||
return "\124cFF0070DD"
|
||||
elseif class == "Warlock" then
|
||||
return "\124cFF8788EE"
|
||||
elseif class == "Warrior" then
|
||||
return "\124cFFC69B6D"
|
||||
end
|
||||
end
|
||||
|
||||
local Unit = {
|
||||
New = function(self, unit)
|
||||
o = {
|
||||
["unit"] = unit,
|
||||
}
|
||||
setmetatable(o, self)
|
||||
self.__index = self
|
||||
return o
|
||||
end,
|
||||
|
||||
GetAuras = function(self, auraFunc, name, type)
|
||||
return nil
|
||||
end,
|
||||
}
|
||||
local BasicUnit = Unit:New("player")
|
||||
function BasicUnit:GetAuras(auraFunc, name)
|
||||
local aura, _, _, stacks, _, duration, expirationTime, _, _, _, spellID = auraFunc(self.unit, name)
|
||||
if aura ~= nil then
|
||||
return {
|
||||
[UnitName(self.unit)] = {
|
||||
["duration"] = duration,
|
||||
["expirationTime"] = expirationTime,
|
||||
["spellID"] = spellID,
|
||||
["stacks"] = stacks or 1,
|
||||
}
|
||||
}
|
||||
else
|
||||
return {}
|
||||
end
|
||||
end
|
||||
-- Maybe implement some sort of throttle to group unit?
|
||||
local GroupUnit = Unit:New("group")
|
||||
function GroupUnit:GetAuras(auraFunc, name)
|
||||
local num = GetNumGroupMembers()
|
||||
local unitPrefix = "party"
|
||||
if IsInRaid() then
|
||||
unitPrefix = "raid"
|
||||
end
|
||||
auras = {}
|
||||
for i = 1, num do
|
||||
-- local aura, _, _, stacks, _, duration, expirationTime, _, _, _, spellID = auraFunc(unitPrefix .. i, name)
|
||||
local auraIndex = GetAuraIndex(auraFunc, unitPrefix .. i, name)
|
||||
if auraIndex > 0 then
|
||||
local aura, _, _, stacks, _, duration, expirationTime, _, _, _, spellID = auraFunc(unitPrefix .. i, auraIndex)
|
||||
auras[UnitName(unitPrefix .. i)] = {
|
||||
["duration"] = duration,
|
||||
["expirationTime"] = expirationTime,
|
||||
["spellID"] = spellID,
|
||||
["class"] = UnitClass(unitPrefix .. i) or "Paladin",
|
||||
["stacks"] = stacks or 1,
|
||||
}
|
||||
end
|
||||
end
|
||||
if unitPrefix == "party" then
|
||||
-- local aura, _, _, stacks, _, duration, expirationTime, _, _, _, spellID = auraFunc("player", name)
|
||||
local auraIndex = GetAuraIndex(auraFunc, "player", name)if auraIndex > 0 then
|
||||
local aura, _, _, stacks, _, duration, expirationTime, _, _, _, spellID = auraFunc("player", auraIndex)
|
||||
auras[UnitName("player")] = {
|
||||
["duration"] = duration,
|
||||
["expirationTime"] = expirationTime,
|
||||
["spellID"] = spellID,
|
||||
["class"] = UnitClass(unitPrefix .. i) or "Paladin",
|
||||
["stacks"] = stacks or 1,
|
||||
}
|
||||
end
|
||||
end
|
||||
return auras
|
||||
end
|
||||
-- Nameplate does not work, find out why?
|
||||
local NameplateUnit = Unit:New("nameplate")
|
||||
function NameplateUnit:GetAuras(auraFunc, name)
|
||||
local unitPrefix = "nameplate"
|
||||
auras = {}
|
||||
for i = 1, 40 do
|
||||
-- local aura, _, _, stacks, _, duration, expirationTime, _, _, _, spellID = auraFunc(unitPrefix .. i, name)
|
||||
local auraIndex = GetAuraIndex(auraFunc, unitPrefix .. i, name)if auraIndex > 0 then
|
||||
local aura, _, _, stacks, _, duration, expirationTime, _, _, _, spellID = auraFunc("player", auraIndex)
|
||||
auras[UnitName(unitPrefix .. i)] = {
|
||||
["duration"] = duration,
|
||||
["expirationTime"] = expirationTime,
|
||||
["spellID"] = spellID,
|
||||
["stacks"] = stacks or 1,
|
||||
}
|
||||
end
|
||||
end
|
||||
return auras
|
||||
end
|
||||
|
||||
local UnitFactory = {
|
||||
New = function(self)
|
||||
o = {}
|
||||
setmetatable(o, self)
|
||||
self.__index = self
|
||||
return o
|
||||
end,
|
||||
|
||||
CreateUnit = function(self, target)
|
||||
target = string.lower(target)
|
||||
if target == "player" or target == "target" or target == "focus" then
|
||||
return BasicUnit:New(target)
|
||||
elseif target == "group" then
|
||||
return GroupUnit:New(target)
|
||||
elseif target == "nameplate" then
|
||||
return NameplateUnit:New(target)
|
||||
end
|
||||
end,
|
||||
}
|
||||
local unitFactory = UnitFactory:New()
|
||||
|
||||
local Aura = {
|
||||
New = function(self, entry, index)
|
||||
o = {
|
||||
["name"] = entry.auraName,
|
||||
["unit"] = entry.target,
|
||||
["hasCooldown"] = entry.hasCooldown,
|
||||
["index"] = index,
|
||||
["GetAura"] = entry.GetAura,
|
||||
}
|
||||
setmetatable(o, self)
|
||||
self.__index = self
|
||||
return o
|
||||
end,
|
||||
|
||||
IsActive = function(self)
|
||||
for k,v in pairs(self.unit:GetAuras(self.GetAura, self.name)) do
|
||||
return true
|
||||
end
|
||||
return false
|
||||
end,
|
||||
IsOnCooldown = function(self)
|
||||
if not self.hasCooldown then
|
||||
return false
|
||||
end
|
||||
return GetSpellCooldown(self.name) > 0
|
||||
end,
|
||||
|
||||
AddAsAura = function(self, allstates)
|
||||
local auras = self.unit:GetAuras(self.GetAura, self.name)
|
||||
for k,v in pairs(auras) do
|
||||
duration = v.duration
|
||||
expirationTime = v.expirationTime
|
||||
icon = self:GetAuraIcon(v.spellID)
|
||||
allstates[self.name .. k] = {
|
||||
changed = true,
|
||||
show = true,
|
||||
resort = true,
|
||||
progressType = "timed",
|
||||
duration = duration,
|
||||
expirationTime = expirationTime,
|
||||
index = self.index,
|
||||
icon = icon,
|
||||
pname = k,
|
||||
stacks = v.stacks,
|
||||
pclass = v.class,
|
||||
IsOnCooldown = true,
|
||||
IsActive = true,
|
||||
IsBad = self.GetAura == UnitDebuff,
|
||||
}
|
||||
end
|
||||
end,
|
||||
AddAsCooldown = function(self, allstates)
|
||||
if not self.hasCooldown then
|
||||
return false
|
||||
end
|
||||
startTime, duration = GetSpellCooldown(self.name)
|
||||
icon = self:GetSpellIcon()
|
||||
allstates[self.name] = {
|
||||
changed = true,
|
||||
show = true,
|
||||
resort = true,
|
||||
progressType = "timed",
|
||||
duration = duration,
|
||||
expirationTime = startTime + duration,
|
||||
index = self.index,
|
||||
icon = icon,
|
||||
IsOnCooldown = true,
|
||||
IsActive = false,
|
||||
IsBad = self.GetAura == UnitDebuff,
|
||||
}
|
||||
end,
|
||||
AddAsIcon = function(self, allstates)
|
||||
if not self.hasCooldown then
|
||||
return false
|
||||
end
|
||||
icon = self:GetSpellIcon()
|
||||
allstates[self.name] = {
|
||||
changed = true,
|
||||
show = true,
|
||||
resort = true,
|
||||
progressType = "static",
|
||||
value = 1,
|
||||
total = 1,
|
||||
index = self.index,
|
||||
icon = icon,
|
||||
IsOnCooldown = false,
|
||||
IsActive = false,
|
||||
IsBad = self.GetAura == UnitDebuff,
|
||||
}
|
||||
end,
|
||||
|
||||
GetSpellIcon = function(self)
|
||||
return select(3, GetSpellInfo(self.name))
|
||||
end,
|
||||
GetAuraIcon = function(self, spellID)
|
||||
return select(3, GetSpellInfo(spellID))
|
||||
end,
|
||||
}
|
||||
|
||||
local Entry = {
|
||||
New = function(self, entry)
|
||||
entry = self:TrimWhitespace(entry)
|
||||
|
||||
local entryData = StrSplit(entry, ",")
|
||||
local name = self:ReadEntryData(entryData, 1)
|
||||
local type = self:ReadEntryData(entryData, 2) or "Buff"
|
||||
local target = unitFactory:CreateUnit(self:ReadEntryData(entryData, 3) or "Player")
|
||||
local cooldown = (self:ReadEntryData(entryData, 4) == "0") or false
|
||||
cooldown = not cooldown
|
||||
local GetAura = UnitBuff
|
||||
|
||||
if type == "Debuff" then GetAura = UnitDebuff end
|
||||
|
||||
o = {
|
||||
["entry"] = entry,
|
||||
["auraName"] = name,
|
||||
["GetAura"] = GetAura,
|
||||
["target"] = target,
|
||||
["hasCooldown"] = cooldown,
|
||||
}
|
||||
setmetatable(o, self)
|
||||
self.__index = self
|
||||
return o
|
||||
end,
|
||||
|
||||
ReadEntryData = function(self, entryData, index)
|
||||
local str = entryData[index]
|
||||
if str == nil then
|
||||
return nil
|
||||
end
|
||||
str = self:TrimWhitespace(str)
|
||||
return str
|
||||
end,
|
||||
|
||||
TrimWhitespace = function(self, str)
|
||||
str = str:gsub("^[ ]+", "")
|
||||
str = str:gsub("\n$", "")
|
||||
str = str:gsub("[ ]+$", "")
|
||||
return str
|
||||
end,
|
||||
}
|
||||
|
||||
aura_env.auras = {}
|
||||
for entry in string.gmatch(aura_env.config.spellList, "([a-zA-Z,0-9 ]+)") do
|
||||
entry = Entry:New(entry)
|
||||
|
||||
auraObj = Aura:New(entry, #aura_env.auras + 1)
|
||||
aura_env.auras[#aura_env.auras + 1] = auraObj
|
||||
end
|
||||
|
||||
aura_env.HandleEvent = function(allstates)
|
||||
for k, v in ipairs(aura_env.auras) do
|
||||
if v:IsActive() then
|
||||
v:AddAsAura(allstates)
|
||||
elseif v:IsOnCooldown() and not v:IsActive() then
|
||||
v:AddAsCooldown(allstates)
|
||||
elseif not v:IsOnCooldown() and not v:IsActive() then
|
||||
v:AddAsIcon(allstates)
|
||||
end
|
||||
end
|
||||
local function StrSplit(inputString, separator)
|
||||
local outputTable = {}
|
||||
for str in string.gmatch(inputString, "([^" .. separator .. "]+)") do
|
||||
outputTable[#outputTable + 1] = str
|
||||
end
|
||||
return outputTable
|
||||
end
|
||||
|
||||
local function PrintTable(table)
|
||||
for k,v in pairs(table) do
|
||||
print(k .. " " .. v)
|
||||
end
|
||||
end
|
||||
|
||||
local function GetAuraIndex(func, unit, name)
|
||||
for i = 1, 40 do
|
||||
local aura = func(unit, i)
|
||||
if aura == "name" then return i end
|
||||
if aura == nil then return 0 end
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
aura_env.GetClassColor = function(class)
|
||||
if class == "Death Knight" then
|
||||
return "\124cFFC41E3A"
|
||||
elseif class == "Druid" then
|
||||
return "\124cFFFF7C0A"
|
||||
elseif class == "Hunter" then
|
||||
return "\124cFFAAD372"
|
||||
elseif class == "Mage" then
|
||||
return "\124cFF3FC7EB"
|
||||
elseif class == "Paladin" then
|
||||
return "\124cFFF48CBA"
|
||||
elseif class == "Priest" then
|
||||
return "\124cFFFFFFFF"
|
||||
elseif class == "Rogue" then
|
||||
return "\124cFFFFF468"
|
||||
elseif class == "Shaman" then
|
||||
return "\124cFF0070DD"
|
||||
elseif class == "Warlock" then
|
||||
return "\124cFF8788EE"
|
||||
elseif class == "Warrior" then
|
||||
return "\124cFFC69B6D"
|
||||
end
|
||||
end
|
||||
|
||||
local Unit = {
|
||||
New = function(self, unit)
|
||||
o = {
|
||||
["unit"] = unit,
|
||||
}
|
||||
setmetatable(o, self)
|
||||
self.__index = self
|
||||
return o
|
||||
end,
|
||||
|
||||
GetAuras = function(self, auraFunc, name, type)
|
||||
return nil
|
||||
end,
|
||||
}
|
||||
local BasicUnit = Unit:New("player")
|
||||
function BasicUnit:GetAuras(auraFunc, name)
|
||||
local aura, _, _, stacks, _, duration, expirationTime, _, _, _, spellID = auraFunc(self.unit, name)
|
||||
if aura ~= nil then
|
||||
return {
|
||||
[UnitName(self.unit)] = {
|
||||
["duration"] = duration,
|
||||
["expirationTime"] = expirationTime,
|
||||
["spellID"] = spellID,
|
||||
["stacks"] = stacks or 1,
|
||||
}
|
||||
}
|
||||
else
|
||||
return {}
|
||||
end
|
||||
end
|
||||
-- Maybe implement some sort of throttle to group unit?
|
||||
local GroupUnit = Unit:New("group")
|
||||
function GroupUnit:GetAuras(auraFunc, name)
|
||||
local num = GetNumGroupMembers()
|
||||
local unitPrefix = "party"
|
||||
if IsInRaid() then
|
||||
unitPrefix = "raid"
|
||||
end
|
||||
auras = {}
|
||||
for i = 1, num do
|
||||
-- local aura, _, _, stacks, _, duration, expirationTime, _, _, _, spellID = auraFunc(unitPrefix .. i, name)
|
||||
local auraIndex = GetAuraIndex(auraFunc, unitPrefix .. i, name)
|
||||
if auraIndex > 0 then
|
||||
local aura, _, _, stacks, _, duration, expirationTime, _, _, _, spellID = auraFunc(unitPrefix .. i, auraIndex)
|
||||
auras[UnitName(unitPrefix .. i)] = {
|
||||
["duration"] = duration,
|
||||
["expirationTime"] = expirationTime,
|
||||
["spellID"] = spellID,
|
||||
["class"] = UnitClass(unitPrefix .. i) or "Paladin",
|
||||
["stacks"] = stacks or 1,
|
||||
}
|
||||
end
|
||||
end
|
||||
if unitPrefix == "party" then
|
||||
-- local aura, _, _, stacks, _, duration, expirationTime, _, _, _, spellID = auraFunc("player", name)
|
||||
local auraIndex = GetAuraIndex(auraFunc, "player", name)if auraIndex > 0 then
|
||||
local aura, _, _, stacks, _, duration, expirationTime, _, _, _, spellID = auraFunc("player", auraIndex)
|
||||
auras[UnitName("player")] = {
|
||||
["duration"] = duration,
|
||||
["expirationTime"] = expirationTime,
|
||||
["spellID"] = spellID,
|
||||
["class"] = UnitClass(unitPrefix .. i) or "Paladin",
|
||||
["stacks"] = stacks or 1,
|
||||
}
|
||||
end
|
||||
end
|
||||
return auras
|
||||
end
|
||||
-- Nameplate does not work, find out why?
|
||||
local NameplateUnit = Unit:New("nameplate")
|
||||
function NameplateUnit:GetAuras(auraFunc, name)
|
||||
local unitPrefix = "nameplate"
|
||||
auras = {}
|
||||
for i = 1, 40 do
|
||||
-- local aura, _, _, stacks, _, duration, expirationTime, _, _, _, spellID = auraFunc(unitPrefix .. i, name)
|
||||
local auraIndex = GetAuraIndex(auraFunc, unitPrefix .. i, name)if auraIndex > 0 then
|
||||
local aura, _, _, stacks, _, duration, expirationTime, _, _, _, spellID = auraFunc("player", auraIndex)
|
||||
auras[UnitName(unitPrefix .. i)] = {
|
||||
["duration"] = duration,
|
||||
["expirationTime"] = expirationTime,
|
||||
["spellID"] = spellID,
|
||||
["stacks"] = stacks or 1,
|
||||
}
|
||||
end
|
||||
end
|
||||
return auras
|
||||
end
|
||||
|
||||
local UnitFactory = {
|
||||
New = function(self)
|
||||
o = {}
|
||||
setmetatable(o, self)
|
||||
self.__index = self
|
||||
return o
|
||||
end,
|
||||
|
||||
CreateUnit = function(self, target)
|
||||
target = string.lower(target)
|
||||
if target == "player" or target == "target" or target == "focus" then
|
||||
return BasicUnit:New(target)
|
||||
elseif target == "group" then
|
||||
return GroupUnit:New(target)
|
||||
elseif target == "nameplate" then
|
||||
return NameplateUnit:New(target)
|
||||
end
|
||||
end,
|
||||
}
|
||||
local unitFactory = UnitFactory:New()
|
||||
|
||||
local Aura = {
|
||||
New = function(self, entry, index)
|
||||
o = {
|
||||
["name"] = entry.auraName,
|
||||
["unit"] = entry.target,
|
||||
["hasCooldown"] = entry.hasCooldown,
|
||||
["index"] = index,
|
||||
["GetAura"] = entry.GetAura,
|
||||
}
|
||||
setmetatable(o, self)
|
||||
self.__index = self
|
||||
return o
|
||||
end,
|
||||
|
||||
IsActive = function(self)
|
||||
for k,v in pairs(self.unit:GetAuras(self.GetAura, self.name)) do
|
||||
return true
|
||||
end
|
||||
return false
|
||||
end,
|
||||
IsOnCooldown = function(self)
|
||||
if not self.hasCooldown then
|
||||
return false
|
||||
end
|
||||
return GetSpellCooldown(self.name) > 0
|
||||
end,
|
||||
|
||||
AddAsAura = function(self, allstates)
|
||||
local auras = self.unit:GetAuras(self.GetAura, self.name)
|
||||
for k,v in pairs(auras) do
|
||||
duration = v.duration
|
||||
expirationTime = v.expirationTime
|
||||
icon = self:GetAuraIcon(v.spellID)
|
||||
allstates[self.name .. k] = {
|
||||
changed = true,
|
||||
show = true,
|
||||
resort = true,
|
||||
progressType = "timed",
|
||||
duration = duration,
|
||||
expirationTime = expirationTime,
|
||||
index = self.index,
|
||||
icon = icon,
|
||||
pname = k,
|
||||
stacks = v.stacks,
|
||||
pclass = v.class,
|
||||
IsOnCooldown = true,
|
||||
IsActive = true,
|
||||
IsBad = self.GetAura == UnitDebuff,
|
||||
}
|
||||
end
|
||||
end,
|
||||
AddAsCooldown = function(self, allstates)
|
||||
if not self.hasCooldown then
|
||||
return false
|
||||
end
|
||||
startTime, duration = GetSpellCooldown(self.name)
|
||||
icon = self:GetSpellIcon()
|
||||
allstates[self.name] = {
|
||||
changed = true,
|
||||
show = true,
|
||||
resort = true,
|
||||
progressType = "timed",
|
||||
duration = duration,
|
||||
expirationTime = startTime + duration,
|
||||
index = self.index,
|
||||
icon = icon,
|
||||
IsOnCooldown = true,
|
||||
IsActive = false,
|
||||
IsBad = self.GetAura == UnitDebuff,
|
||||
}
|
||||
end,
|
||||
AddAsIcon = function(self, allstates)
|
||||
if not self.hasCooldown then
|
||||
return false
|
||||
end
|
||||
icon = self:GetSpellIcon()
|
||||
allstates[self.name] = {
|
||||
changed = true,
|
||||
show = true,
|
||||
resort = true,
|
||||
progressType = "static",
|
||||
value = 1,
|
||||
total = 1,
|
||||
index = self.index,
|
||||
icon = icon,
|
||||
IsOnCooldown = false,
|
||||
IsActive = false,
|
||||
IsBad = self.GetAura == UnitDebuff,
|
||||
}
|
||||
end,
|
||||
|
||||
GetSpellIcon = function(self)
|
||||
return select(3, GetSpellInfo(self.name))
|
||||
end,
|
||||
GetAuraIcon = function(self, spellID)
|
||||
return select(3, GetSpellInfo(spellID))
|
||||
end,
|
||||
}
|
||||
|
||||
local Entry = {
|
||||
New = function(self, entry)
|
||||
entry = self:TrimWhitespace(entry)
|
||||
|
||||
local entryData = StrSplit(entry, ",")
|
||||
local name = self:ReadEntryData(entryData, 1)
|
||||
local type = self:ReadEntryData(entryData, 2) or "Buff"
|
||||
local target = unitFactory:CreateUnit(self:ReadEntryData(entryData, 3) or "Player")
|
||||
local cooldown = (self:ReadEntryData(entryData, 4) == "0") or false
|
||||
cooldown = not cooldown
|
||||
local GetAura = UnitBuff
|
||||
|
||||
if type == "Debuff" then GetAura = UnitDebuff end
|
||||
|
||||
o = {
|
||||
["entry"] = entry,
|
||||
["auraName"] = name,
|
||||
["GetAura"] = GetAura,
|
||||
["target"] = target,
|
||||
["hasCooldown"] = cooldown,
|
||||
}
|
||||
setmetatable(o, self)
|
||||
self.__index = self
|
||||
return o
|
||||
end,
|
||||
|
||||
ReadEntryData = function(self, entryData, index)
|
||||
local str = entryData[index]
|
||||
if str == nil then
|
||||
return nil
|
||||
end
|
||||
str = self:TrimWhitespace(str)
|
||||
return str
|
||||
end,
|
||||
|
||||
TrimWhitespace = function(self, str)
|
||||
str = str:gsub("^[ ]+", "")
|
||||
str = str:gsub("\n$", "")
|
||||
str = str:gsub("[ ]+$", "")
|
||||
return str
|
||||
end,
|
||||
}
|
||||
|
||||
aura_env.auras = {}
|
||||
for entry in string.gmatch(aura_env.config.spellList, "([a-zA-Z,0-9 ]+)") do
|
||||
entry = Entry:New(entry)
|
||||
|
||||
auraObj = Aura:New(entry, #aura_env.auras + 1)
|
||||
aura_env.auras[#aura_env.auras + 1] = auraObj
|
||||
end
|
||||
|
||||
aura_env.HandleEvent = function(allstates)
|
||||
for k, v in ipairs(aura_env.auras) do
|
||||
if v:IsActive() then
|
||||
v:AddAsAura(allstates)
|
||||
elseif v:IsOnCooldown() and not v:IsActive() then
|
||||
v:AddAsCooldown(allstates)
|
||||
elseif not v:IsOnCooldown() and not v:IsActive() then
|
||||
v:AddAsIcon(allstates)
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -1,11 +1,11 @@
|
||||
## While aura is active show aura
|
||||
|
||||
## While aura is inactive and off cooldown show icon
|
||||
|
||||
## While aura is inactive and on cooldown show cooldown
|
||||
|
||||
## Use tsu
|
||||
|
||||
### ACTIONBAR_UPDATE_COOLDOWN when anything on bar goes on cooldown
|
||||
|
||||
## While aura is active show aura
|
||||
|
||||
## While aura is inactive and off cooldown show icon
|
||||
|
||||
## While aura is inactive and on cooldown show cooldown
|
||||
|
||||
## Use tsu
|
||||
|
||||
### ACTIONBAR_UPDATE_COOLDOWN when anything on bar goes on cooldown
|
||||
|
||||
### UNIT_AURA with one argument which is unit when aura fades/gets applied
|
||||
@@ -1,12 +1,12 @@
|
||||
function(allstates, e, ...)
|
||||
for _,v in pairs(allstates) do
|
||||
v.show = false
|
||||
v.changed = true
|
||||
end
|
||||
|
||||
aura_env.HandleEvent(allstates)
|
||||
return true
|
||||
end
|
||||
|
||||
-- /run WeakAuras.ScanEvents("SPELL_UPDATE_COOLDOWN")
|
||||
function(allstates, e, ...)
|
||||
for _,v in pairs(allstates) do
|
||||
v.show = false
|
||||
v.changed = true
|
||||
end
|
||||
|
||||
aura_env.HandleEvent(allstates)
|
||||
return true
|
||||
end
|
||||
|
||||
-- /run WeakAuras.ScanEvents("SPELL_UPDATE_COOLDOWN")
|
||||
-- /dump UnitAura("player", "Blessing of Might")
|
||||
@@ -1,102 +1,102 @@
|
||||
function()
|
||||
--- @class Item
|
||||
--- @field id number
|
||||
--- @field name string
|
||||
--- @field ilvl number
|
||||
--- @field type string
|
||||
|
||||
--- @field new function
|
||||
Item = {
|
||||
--- @param self Item
|
||||
--- @return Item
|
||||
new = function(self)
|
||||
local obj = {}
|
||||
obj.id = id or -1
|
||||
obj.name = name or ""
|
||||
obj.ilvl = ilvl or -1
|
||||
obj.type = type or ""
|
||||
setmetatable(obj, self)
|
||||
self.__index = self
|
||||
return obj
|
||||
end,
|
||||
}
|
||||
|
||||
--- @class ItemSet
|
||||
--- @field items Item[]
|
||||
|
||||
--- @field new function
|
||||
--- @field equip function
|
||||
ItemSet = {
|
||||
--- @param self ItemSet
|
||||
--- @return ItemSet
|
||||
new = function(self, items)
|
||||
local obj = {}
|
||||
obj.items = items or {}
|
||||
setmetatable(obj, self)
|
||||
self.__index = self
|
||||
return obj
|
||||
end,
|
||||
|
||||
equip = function(self)
|
||||
local equippedItems = getEquippedItems()
|
||||
print(#equippedItems .. " items equipped")
|
||||
|
||||
for itemSlot, eqItem in pairs(equippedItems) do
|
||||
local item = self.items[itemSlot]
|
||||
|
||||
if (eqItem.id ~= item.id and eqItem.ilvl ~= item.ilvl) then
|
||||
print("Unequip " .. itemSlot)
|
||||
PickupInventoryItem(itemSlot)
|
||||
PutItemInBag(22)
|
||||
print("Equip " .. item.id)
|
||||
EquipItemByName(item.id, itemSlot)
|
||||
end
|
||||
end
|
||||
end
|
||||
}
|
||||
|
||||
--- @return string
|
||||
function getItemName(itemLink)
|
||||
return select(1, GetItemInfo(itemLink))
|
||||
end
|
||||
|
||||
--- @return number
|
||||
function getItemIlvl(itemLink)
|
||||
return select(4, GetItemInfo(itemLink))
|
||||
end
|
||||
|
||||
--- @return string
|
||||
function getItemType(itemLink)
|
||||
return select(9, GetItemInfo(itemLink))
|
||||
end
|
||||
|
||||
--- @return Item[]
|
||||
function getEquippedItems()
|
||||
--- @type Item[]
|
||||
local items = {}
|
||||
|
||||
for i = 1, 19 do
|
||||
--- @type Item
|
||||
local item = Item:new()
|
||||
--- @type string
|
||||
local eqItemLink = GetInventoryItemLink("player", i)
|
||||
--- @type number
|
||||
local eqItemId = GetInventoryItemID("player", i)
|
||||
|
||||
if (eqItemLink ~= nil) then
|
||||
item.name = getItemName(eqItemLink)
|
||||
item.ilvl = getItemIlvl(eqItemLink)
|
||||
item.type = getItemType(eqItemLink)
|
||||
item.id = eqItemId
|
||||
|
||||
items[i] = item
|
||||
end
|
||||
end
|
||||
|
||||
return items
|
||||
end
|
||||
|
||||
--- @type ItemSet
|
||||
local set = ItemSet:new(getEquippedItems())
|
||||
set:equip()
|
||||
end
|
||||
function()
|
||||
--- @class Item
|
||||
--- @field id number
|
||||
--- @field name string
|
||||
--- @field ilvl number
|
||||
--- @field type string
|
||||
|
||||
--- @field new function
|
||||
Item = {
|
||||
--- @param self Item
|
||||
--- @return Item
|
||||
new = function(self)
|
||||
local obj = {}
|
||||
obj.id = id or -1
|
||||
obj.name = name or ""
|
||||
obj.ilvl = ilvl or -1
|
||||
obj.type = type or ""
|
||||
setmetatable(obj, self)
|
||||
self.__index = self
|
||||
return obj
|
||||
end,
|
||||
}
|
||||
|
||||
--- @class ItemSet
|
||||
--- @field items Item[]
|
||||
|
||||
--- @field new function
|
||||
--- @field equip function
|
||||
ItemSet = {
|
||||
--- @param self ItemSet
|
||||
--- @return ItemSet
|
||||
new = function(self, items)
|
||||
local obj = {}
|
||||
obj.items = items or {}
|
||||
setmetatable(obj, self)
|
||||
self.__index = self
|
||||
return obj
|
||||
end,
|
||||
|
||||
equip = function(self)
|
||||
local equippedItems = getEquippedItems()
|
||||
print(#equippedItems .. " items equipped")
|
||||
|
||||
for itemSlot, eqItem in pairs(equippedItems) do
|
||||
local item = self.items[itemSlot]
|
||||
|
||||
if (eqItem.id ~= item.id and eqItem.ilvl ~= item.ilvl) then
|
||||
print("Unequip " .. itemSlot)
|
||||
PickupInventoryItem(itemSlot)
|
||||
PutItemInBag(22)
|
||||
print("Equip " .. item.id)
|
||||
EquipItemByName(item.id, itemSlot)
|
||||
end
|
||||
end
|
||||
end
|
||||
}
|
||||
|
||||
--- @return string
|
||||
function getItemName(itemLink)
|
||||
return select(1, GetItemInfo(itemLink))
|
||||
end
|
||||
|
||||
--- @return number
|
||||
function getItemIlvl(itemLink)
|
||||
return select(4, GetItemInfo(itemLink))
|
||||
end
|
||||
|
||||
--- @return string
|
||||
function getItemType(itemLink)
|
||||
return select(9, GetItemInfo(itemLink))
|
||||
end
|
||||
|
||||
--- @return Item[]
|
||||
function getEquippedItems()
|
||||
--- @type Item[]
|
||||
local items = {}
|
||||
|
||||
for i = 1, 19 do
|
||||
--- @type Item
|
||||
local item = Item:new()
|
||||
--- @type string
|
||||
local eqItemLink = GetInventoryItemLink("player", i)
|
||||
--- @type number
|
||||
local eqItemId = GetInventoryItemID("player", i)
|
||||
|
||||
if (eqItemLink ~= nil) then
|
||||
item.name = getItemName(eqItemLink)
|
||||
item.ilvl = getItemIlvl(eqItemLink)
|
||||
item.type = getItemType(eqItemLink)
|
||||
item.id = eqItemId
|
||||
|
||||
items[i] = item
|
||||
end
|
||||
end
|
||||
|
||||
return items
|
||||
end
|
||||
|
||||
--- @type ItemSet
|
||||
local set = ItemSet:new(getEquippedItems())
|
||||
set:equip()
|
||||
end
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
function()
|
||||
if select(2, CombatLogGetCurrentEventInfo()) == "SPELL_AURA_APPLIED" then
|
||||
local target = select(5, CombatLogGetCurrentEventInfo())
|
||||
local buff = select(13, CombatLogGetCurrentEventInfo())
|
||||
if target == UnitName("player") and aura_env.buffs[buff] ~= nil then
|
||||
aura_env.max = aura_env.GetAbsorbs()
|
||||
end
|
||||
end
|
||||
return aura_env.GetAbsorbs() > 0
|
||||
function()
|
||||
if select(2, CombatLogGetCurrentEventInfo()) == "SPELL_AURA_APPLIED" then
|
||||
local target = select(5, CombatLogGetCurrentEventInfo())
|
||||
local buff = select(13, CombatLogGetCurrentEventInfo())
|
||||
if target == UnitName("player") and aura_env.buffs[buff] ~= nil then
|
||||
aura_env.max = aura_env.GetAbsorbs()
|
||||
end
|
||||
end
|
||||
return aura_env.GetAbsorbs() > 0
|
||||
end
|
||||
@@ -1,10 +1,10 @@
|
||||
function()
|
||||
if select(2, CombatLogGetCurrentEventInfo()) == "SPELL_AURA_APPLIED" then
|
||||
local target = select(5, CombatLogGetCurrentEventInfo())
|
||||
local buff = select(13, CombatLogGetCurrentEventInfo())
|
||||
if target == UnitName("player") and aura_env.buffs[buff] ~= nil then
|
||||
aura_env.timeApplied = GetTime()
|
||||
return true
|
||||
end
|
||||
end
|
||||
function()
|
||||
if select(2, CombatLogGetCurrentEventInfo()) == "SPELL_AURA_APPLIED" then
|
||||
local target = select(5, CombatLogGetCurrentEventInfo())
|
||||
local buff = select(13, CombatLogGetCurrentEventInfo())
|
||||
if target == UnitName("player") and aura_env.buffs[buff] ~= nil then
|
||||
aura_env.timeApplied = GetTime()
|
||||
return true
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -1,3 +1,3 @@
|
||||
function()
|
||||
return aura_env.GetAbsorbs(), aura_env.max, 1
|
||||
function()
|
||||
return aura_env.GetAbsorbs(), aura_env.max, 1
|
||||
end
|
||||
@@ -1,3 +1,3 @@
|
||||
function()
|
||||
return 15, aura_env.timeApplied + 15
|
||||
function()
|
||||
return 15, aura_env.timeApplied + 15
|
||||
end
|
||||
@@ -1,37 +1,37 @@
|
||||
aura_env.buffs = {
|
||||
["Null Barrier"] = 1,
|
||||
["Empowered Null Barrier"] = 1,
|
||||
}
|
||||
aura_env.max = 0
|
||||
|
||||
aura_env.GetBuff = function(name)
|
||||
for i = 1, 40 do
|
||||
if UnitBuff("player", i) == name then
|
||||
return i
|
||||
end
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
aura_env.GetAbsorb = function(name)
|
||||
local temp = select(16, UnitBuff("player", aura_env.GetBuff(name)))
|
||||
if temp then return temp else return 0 end
|
||||
end
|
||||
|
||||
aura_env.GetAbsorbs = function()
|
||||
local abs = 0
|
||||
for k, v in pairs(aura_env.buffs) do
|
||||
abs = abs + aura_env.GetAbsorb(k)
|
||||
end
|
||||
return abs
|
||||
end
|
||||
|
||||
aura_env.PrettyPrintNum = function(n)
|
||||
if n > 1e6 then
|
||||
return string.format("%.2fM", n / 1e6)
|
||||
elseif n > 1e3 then
|
||||
return string.format("%.2fk", n / 1e3)
|
||||
else
|
||||
return n
|
||||
end
|
||||
aura_env.buffs = {
|
||||
["Null Barrier"] = 1,
|
||||
["Empowered Null Barrier"] = 1,
|
||||
}
|
||||
aura_env.max = 0
|
||||
|
||||
aura_env.GetBuff = function(name)
|
||||
for i = 1, 40 do
|
||||
if UnitBuff("player", i) == name then
|
||||
return i
|
||||
end
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
aura_env.GetAbsorb = function(name)
|
||||
local temp = select(16, UnitBuff("player", aura_env.GetBuff(name)))
|
||||
if temp then return temp else return 0 end
|
||||
end
|
||||
|
||||
aura_env.GetAbsorbs = function()
|
||||
local abs = 0
|
||||
for k, v in pairs(aura_env.buffs) do
|
||||
abs = abs + aura_env.GetAbsorb(k)
|
||||
end
|
||||
return abs
|
||||
end
|
||||
|
||||
aura_env.PrettyPrintNum = function(n)
|
||||
if n > 1e6 then
|
||||
return string.format("%.2fM", n / 1e6)
|
||||
elseif n > 1e3 then
|
||||
return string.format("%.2fk", n / 1e3)
|
||||
else
|
||||
return n
|
||||
end
|
||||
end
|
||||
@@ -1,4 +1,4 @@
|
||||
aura_env.buffs = {
|
||||
["Null Barrier"] = 1,
|
||||
}
|
||||
aura_env.buffs = {
|
||||
["Null Barrier"] = 1,
|
||||
}
|
||||
aura_env.timeApplied = 0
|
||||
@@ -1,3 +1,3 @@
|
||||
function()
|
||||
return aura_env.PrettyPrintNum(aura_env.GetAbsorbs())
|
||||
function()
|
||||
return aura_env.PrettyPrintNum(aura_env.GetAbsorbs())
|
||||
end
|
||||
@@ -1,41 +1,41 @@
|
||||
aura_env.buffs = {
|
||||
["Null Barrier"] = 1,
|
||||
["Empowered Null Barrier"] = 1,
|
||||
["Resounding Protection"] = 1,
|
||||
["Guard"] = 1,
|
||||
["Void Shroud"] = 1,
|
||||
["Stoneskin"] = 1,
|
||||
}
|
||||
aura_env.max = 0
|
||||
|
||||
aura_env.GetBuff = function(name)
|
||||
for i = 1, 40 do
|
||||
if UnitBuff("player", i) == name then
|
||||
return i
|
||||
end
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
aura_env.GetAbsorb = function(name)
|
||||
local temp = select(16, UnitBuff("player", aura_env.GetBuff(name)))
|
||||
if temp then return temp else return 0 end
|
||||
end
|
||||
|
||||
aura_env.GetAbsorbs = function()
|
||||
local abs = 0
|
||||
for k, v in pairs(aura_env.buffs) do
|
||||
abs = abs + aura_env.GetAbsorb(k)
|
||||
end
|
||||
return abs
|
||||
end
|
||||
|
||||
aura_env.PrettyPrintNum = function(n)
|
||||
if n > 1e6 then
|
||||
return string.format("%.2fM", n / 1e6)
|
||||
elseif n > 1e3 then
|
||||
return string.format("%.2fk", n / 1e3)
|
||||
else
|
||||
return n
|
||||
end
|
||||
aura_env.buffs = {
|
||||
["Null Barrier"] = 1,
|
||||
["Empowered Null Barrier"] = 1,
|
||||
["Resounding Protection"] = 1,
|
||||
["Guard"] = 1,
|
||||
["Void Shroud"] = 1,
|
||||
["Stoneskin"] = 1,
|
||||
}
|
||||
aura_env.max = 0
|
||||
|
||||
aura_env.GetBuff = function(name)
|
||||
for i = 1, 40 do
|
||||
if UnitBuff("player", i) == name then
|
||||
return i
|
||||
end
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
aura_env.GetAbsorb = function(name)
|
||||
local temp = select(16, UnitBuff("player", aura_env.GetBuff(name)))
|
||||
if temp then return temp else return 0 end
|
||||
end
|
||||
|
||||
aura_env.GetAbsorbs = function()
|
||||
local abs = 0
|
||||
for k, v in pairs(aura_env.buffs) do
|
||||
abs = abs + aura_env.GetAbsorb(k)
|
||||
end
|
||||
return abs
|
||||
end
|
||||
|
||||
aura_env.PrettyPrintNum = function(n)
|
||||
if n > 1e6 then
|
||||
return string.format("%.2fM", n / 1e6)
|
||||
elseif n > 1e3 then
|
||||
return string.format("%.2fk", n / 1e3)
|
||||
else
|
||||
return n
|
||||
end
|
||||
end
|
||||
@@ -1,7 +1,7 @@
|
||||
function(e, ...)
|
||||
aura_env.currentStat = aura_env.GetPrimaryStat()
|
||||
if aura_env.maxStat < aura_env.currentStat then
|
||||
aura_env.maxStat = aura_env.currentStat
|
||||
end
|
||||
return true
|
||||
function(e, ...)
|
||||
aura_env.currentStat = aura_env.GetPrimaryStat()
|
||||
if aura_env.maxStat < aura_env.currentStat then
|
||||
aura_env.maxStat = aura_env.currentStat
|
||||
end
|
||||
return true
|
||||
end
|
||||
@@ -1,3 +1,3 @@
|
||||
function()
|
||||
return aura_env.currentStat, aura_env.maxStat, 1
|
||||
function()
|
||||
return aura_env.currentStat, aura_env.maxStat, 1
|
||||
end
|
||||
@@ -1,17 +1,17 @@
|
||||
aura_env.specStatTable = {
|
||||
["Windwalker"] = 2,
|
||||
["Brewmaster"] = 2,
|
||||
["Mistweaver"] = 4,
|
||||
}
|
||||
aura_env.maxStat = 0
|
||||
aura_env.currentStat = 0
|
||||
|
||||
aura_env.GetPrimaryStat = function()
|
||||
stat = UnitStat("player", aura_env.GetPrimStatID())
|
||||
return stat
|
||||
end
|
||||
|
||||
aura_env.GetPrimStatID = function()
|
||||
specID, specName = GetSpecializationInfo(GetSpecialization())
|
||||
return aura_env.specStatTable[specName]
|
||||
aura_env.specStatTable = {
|
||||
["Windwalker"] = 2,
|
||||
["Brewmaster"] = 2,
|
||||
["Mistweaver"] = 4,
|
||||
}
|
||||
aura_env.maxStat = 0
|
||||
aura_env.currentStat = 0
|
||||
|
||||
aura_env.GetPrimaryStat = function()
|
||||
stat = UnitStat("player", aura_env.GetPrimStatID())
|
||||
return stat
|
||||
end
|
||||
|
||||
aura_env.GetPrimStatID = function()
|
||||
specID, specName = GetSpecializationInfo(GetSpecialization())
|
||||
return aura_env.specStatTable[specName]
|
||||
end
|
||||
Reference in New Issue
Block a user