chore: flatten Altoholic-Addon/ wrapper + add standard .gitignore/.gitattributes
Each DataStore_* / Altoholic_* addon now lives at the repo root, matching the Exiles fork-layout convention (one folder per addon, no wrapper dir).
This commit is contained in:
@@ -0,0 +1,197 @@
|
||||
--[[ *** 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
|
||||
Reference in New Issue
Block a user