bbe2492a5b
Each DataStore_* / Altoholic_* addon now lives at the repo root, matching the Exiles fork-layout convention (one folder per addon, no wrapper dir).
198 lines
5.1 KiB
Lua
198 lines
5.1 KiB
Lua
--[[ *** DataStore_Currencies ***
|
|
Written by : Thaoky, EU-Marécages de Zangar
|
|
July 6th, 2009
|
|
--]]
|
|
if not DataStore then return end
|
|
|
|
local addonName = "DataStore_Currencies"
|
|
|
|
_G[addonName] = LibStub("AceAddon-3.0"):NewAddon(addonName, "AceConsole-3.0", "AceEvent-3.0", "AceTimer-3.0")
|
|
|
|
local addon = _G[addonName]
|
|
|
|
local THIS_ACCOUNT = "Default"
|
|
|
|
-- Func Call Spam Protection
|
|
local FCSP_timer_OnCurrencyDisplayUpdate
|
|
|
|
local AddonDB_Defaults = {
|
|
global = {
|
|
Characters = {
|
|
['*'] = { -- ["Account.Realm.Name"]
|
|
lastUpdate = nil,
|
|
Currencies = {},
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
-- *** Utility functions ***
|
|
local headersState = {}
|
|
local headerCount
|
|
|
|
local function SaveHeaders()
|
|
headerCount = 0 -- use a counter to avoid being bound to header names, which might not be unique.
|
|
|
|
for i = GetCurrencyListSize(), 1, -1 do -- 1st pass, expand all categories
|
|
local _, isHeader, isExpanded = GetCurrencyListInfo(i)
|
|
if isHeader then
|
|
headerCount = headerCount + 1
|
|
if not isExpanded then
|
|
ExpandCurrencyList(i, 1)
|
|
headersState[headerCount] = true
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
local function RestoreHeaders()
|
|
headerCount = 0
|
|
for i = GetCurrencyListSize(), 1, -1 do
|
|
local _, isHeader = GetCurrencyListInfo(i)
|
|
if isHeader then
|
|
headerCount = headerCount + 1
|
|
if headersState[headerCount] then
|
|
ExpandCurrencyList(i, 0) -- collapses the header
|
|
end
|
|
end
|
|
end
|
|
wipe(headersState)
|
|
end
|
|
|
|
-- *** Scanning functions ***
|
|
local function ScanCurrencies()
|
|
SaveHeaders()
|
|
|
|
local currencies = addon.ThisCharacter.Currencies
|
|
wipe(currencies)
|
|
|
|
for i = 1, GetCurrencyListSize() do
|
|
local name, isHeader, _, _, _, count, _, _, itemID = GetCurrencyListInfo(i);
|
|
|
|
name = name or ""
|
|
if isHeader then
|
|
currencies[i] = "0|" .. name
|
|
else
|
|
currencies[i] = "1|" .. name .. "|" .. (count or 0) .. "|" .. (itemID or 0)
|
|
end
|
|
end
|
|
|
|
RestoreHeaders()
|
|
|
|
addon.ThisCharacter.lastUpdate = time()
|
|
end
|
|
|
|
-- *** Event Handlers ***
|
|
local function OnCurrencyDisplayUpdate()
|
|
FCSP_timer_UNIT_INVENTORY_CHANGED = nil
|
|
ScanCurrencies()
|
|
end
|
|
local function FCSP_timer_OnCurrencyDisplayUpdate()
|
|
-- this function limits calls to "ScanCurrencies" to max 1 every second
|
|
|
|
if FCSP_timer_UNIT_INVENTORY_CHANGED then return end
|
|
FCSP_timer_UNIT_INVENTORY_CHANGED = addon:ScheduleTimer(OnCurrencyDisplayUpdate, 1)
|
|
end
|
|
|
|
-- ** Mixins **
|
|
local function _GetNumCurrencies(character)
|
|
return #character.Currencies
|
|
end
|
|
|
|
local function _GetCurrencyInfo(character, index)
|
|
local currency = character.Currencies[index]
|
|
local isHeader, name, count, itemID = strsplit("|", currency)
|
|
|
|
isHeader = (isHeader == "0" and true or nil)
|
|
|
|
return isHeader, name, tonumber(count), tonumber(itemID)
|
|
end
|
|
|
|
local function _GetCurrencyInfoByName(character, token)
|
|
local name, count, itemID
|
|
|
|
for i = 1, #character.Currencies do
|
|
_, name, count, itemID = strsplit("|", character.Currencies[i])
|
|
|
|
if name == token then -- if it's the token we're looking for, return
|
|
return tonumber(count), tonumber(itemID)
|
|
end
|
|
end
|
|
end
|
|
|
|
local currencyIDs = {
|
|
-- source : http://www.wowhead.com/?items=10
|
|
|
|
-- epic
|
|
[29434] = true, -- badge of justice
|
|
[45624] = true, -- emblem of conquest
|
|
[40752] = true, -- emblem of heroism
|
|
[47241] = true, -- emblem of triumph
|
|
[40753] = true, -- emblem of valor
|
|
[49426] = true, -- emblem of frost (3.3)
|
|
|
|
-- blue
|
|
[43228] = true, -- stone keeper's shard
|
|
|
|
-- green
|
|
[20560] = true, -- alterac mark of honor
|
|
[20559] = true, -- arathi basin mark of honor
|
|
[43016] = true, -- dalaran cooking award
|
|
[41596] = true, -- dalaran jewelcrafting token
|
|
[29024] = true, -- eots mark of honor
|
|
[47395] = true, -- isle of conquest mark of honor
|
|
[42425] = true, -- strand of the ancients mark of honor
|
|
[20558] = true, -- warsong gulch mark of honor
|
|
[43589] = true, -- wintergrasp mark of honor
|
|
|
|
-- white
|
|
[43307] = true, -- arena points
|
|
[44990] = true, -- champion's seal
|
|
[43308] = true, -- honor points
|
|
[37836] = true, -- venture coin
|
|
}
|
|
|
|
local function _GetCurrencyItemCount(character, searchedID)
|
|
if currencyIDs[searchedID] then
|
|
local isHeader, currencyCount, itemID
|
|
|
|
for i = 1, #character.Currencies do
|
|
isHeader, _, currencyCount, itemID = strsplit("|", character.Currencies[i])
|
|
|
|
if isHeader == "1" then
|
|
if tonumber(itemID) == searchedID then
|
|
return tonumber(currencyCount)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
return 0
|
|
end
|
|
|
|
local PublicMethods = {
|
|
GetNumCurrencies = _GetNumCurrencies,
|
|
GetCurrencyInfo = _GetCurrencyInfo,
|
|
GetCurrencyInfoByName = _GetCurrencyInfoByName,
|
|
GetCurrencyItemCount = _GetCurrencyItemCount,
|
|
}
|
|
|
|
function addon:OnInitialize()
|
|
addon.db = LibStub("AceDB-3.0"):New(addonName .. "DB", AddonDB_Defaults)
|
|
|
|
DataStore:RegisterModule(addonName, addon, PublicMethods)
|
|
DataStore:SetCharacterBasedMethod("GetNumCurrencies")
|
|
DataStore:SetCharacterBasedMethod("GetCurrencyInfo")
|
|
DataStore:SetCharacterBasedMethod("GetCurrencyInfoByName")
|
|
DataStore:SetCharacterBasedMethod("GetCurrencyItemCount")
|
|
end
|
|
|
|
function addon:OnEnable()
|
|
-- addon:RegisterEvent("CURRENCY_DISPLAY_UPDATE", OnCurrencyDisplayUpdate)
|
|
addon:RegisterEvent("CURRENCY_DISPLAY_UPDATE", FCSP_timer_OnCurrencyDisplayUpdate)
|
|
end
|
|
|
|
function addon:OnDisable()
|
|
addon:UnregisterEvent("CURRENCY_DISPLAY_UPDATE")
|
|
end
|