You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

187 lines
7.0 KiB

--[[
State provider for currencies
]]
local ADDON_NAME, Internal = ...
local External = _G[ADDON_NAME]
local L = Internal.L
L["CYPHER_EQUIPMENT_LEVEL_TOOLTIP_GREEN"] = CYPHER_EQUIPMENT_LEVEL_TOOLTIP:gsub("%%d", "|cFF00FF00%%d|r")
L["CYPHER_EQUIPMENT_LEVEL_TOOLTIP_MATH"] = CYPHER_EQUIPMENT_LEVEL_TOOLTIP:gsub("%%d", "|cFFFFFFFF%%d + %%d|r")
local CharacterDataEnum = {
Level = 1,
Class = 2,
Race = 3,
Faction = 4,
Gender = 5,
ItemLevel = 6,
ItemLevelEquipped = 7,
ItemLevelPvP = 8,
Money = 9,
CypherEquipmentCurrentLevel = 11,
CypherEquipmentMaxLevel = 12,
CypherEquipmentNextLevel = 13,
}
local characterDataMapIDToName = {
[CharacterDataEnum.Level] = L["Level"],
[CharacterDataEnum.Class] = L["Class"],
[CharacterDataEnum.Race] = L["Race"],
[CharacterDataEnum.Faction] = L["Faction"],
[CharacterDataEnum.Gender] = L["Gender"],
[CharacterDataEnum.ItemLevel] = L["Item Level (Overall)"],
[CharacterDataEnum.ItemLevelEquipped] = L["Item Level (Equipped)"],
[CharacterDataEnum.ItemLevelPvP] = L["Item Level (PvP)"],
[CharacterDataEnum.Money] = L["Money"],
[CharacterDataEnum.CypherEquipmentCurrentLevel] = L["Current Cypher Equipment Level"],
[CharacterDataEnum.CypherEquipmentMaxLevel] = L["Max Cypher Equipment Level"],
[CharacterDataEnum.CypherEquipmentNextLevel] = L["Cyphers to Next Equipment Level"],
}
local characterDataMapNameToID = {}
for id,name in pairs(characterDataMapIDToName) do
characterDataMapNameToID[name] = id
end
characterDataMapNameToID[L["Sex"]] = CharacterDataEnum.Gender
characterDataMapNameToID[L["Gold"]] = CharacterDataEnum.Money
local CharacterMixin = CreateFromMixins(External.StateMixin)
function CharacterMixin:Init(dataID)
External.StateMixin.Init(self, dataID)
self.name = characterDataMapIDToName[dataID]
end
function CharacterMixin:GetDisplayName()
return string.format(L["Character: %s"], self:GetName())
end
function CharacterMixin:GetUniqueKey()
return "character:" .. self:GetID()
end
function CharacterMixin:GetName()
return self.name
end
function CharacterMixin:GetValue(raw)
if self.id == CharacterDataEnum.Level then
return self:GetCharacter():GetLevel() or 1
elseif self.id == CharacterDataEnum.Class then
if raw then
return self:GetCharacter():GetClass() or 0
else
local data = C_CreatureInfo.GetClassInfo(self:GetCharacter():GetClass() or 0)
return data and data.className or ""
end
elseif self.id == CharacterDataEnum.Race then
if raw then
return self:GetCharacter():GetRace() or 0
else
local data = C_CreatureInfo.GetRaceInfo(self:GetCharacter():GetRace() or 0)
return data and data.raceName or ""
end
elseif self.id == CharacterDataEnum.Faction then
if raw then
return self:GetCharacter():GetRace() or 0
else
local data = C_CreatureInfo.GetFactionInfo(self:GetCharacter():GetRace() or 0)
return data and data.name or ""
end
elseif self.id == CharacterDataEnum.Sex then
local gender = self:GetCharacter():GetSex()
if raw then
return gender
else
if gender == 2 then
return L["Male"]
elseif gender == 3 then
return L["Female"]
end
return ""
end
elseif self.id == CharacterDataEnum.ItemLevel then
if raw then
return self:GetCharacter():GetItemLevel() or 0
else
return format("%.2f", self:GetCharacter():GetItemLevel() or 0)
end
elseif self.id == CharacterDataEnum.ItemLevelEquipped then
if raw then
return self:GetCharacter():GetItemLevelEquipped() or 0
else
return format("%.2f", self:GetCharacter():GetItemLevelEquipped() or 0)
end
elseif self.id == CharacterDataEnum.ItemLevelPvP then
if raw then
return self:GetCharacter():GetItemLevelPvP() or 0
else
return format("%.2f", self:GetCharacter():GetItemLevelPvP() or 0)
end
elseif self.id == CharacterDataEnum.Money then
if raw then
return self:GetCharacter():GetMoney() or 0
else
return GetMoneyString(self:GetCharacter():GetMoney() or 0, true)
end
elseif self.id == CharacterDataEnum.CypherEquipmentCurrentLevel then
return self:GetCharacter():GetCurrentCypherEquipmentLevel();
elseif self.id == CharacterDataEnum.CypherEquipmentMaxLevel then
return self:GetCharacter():GetMaxCypherEquipmentLevel();
elseif self.id == CharacterDataEnum.CypherEquipmentNextLevel then
return self:GetCharacter():GetCyphersToNextEquipmentLevel();
end
end
function CharacterMixin:RegisterEventsFor(target)
local id = self:GetID()
if id == CharacterDataEnum.ItemLevel or id == CharacterDataEnum.ItemLevelEquipped or id == CharacterDataEnum.ItemLevelPvP then
target:RegisterEvents("PLAYER_ENTERING_WORLD", "PLAYER_AVG_ITEM_LEVEL_UPDATE")
elseif id == CharacterDataEnum.Money then
target:RegisterEvents("PLAYER_ENTERING_WORLD", "PLAYER_MONEY")
elseif id == CharacterDataEnum.CypherEquipmentCurrentLevel or id == CharacterDataEnum.CypherEquipmentMaxLevel or id == CharacterDataEnum.CypherEquipmentNextLevel then
target:RegisterEvents("CYPHER_EQUIPMENT_UPDATE", "GARRISON_TALENT_COMPLETE", "GARRISON_TALENT_UPDATE")
end
end
local CharacterProviderMixin = CreateFromMixins(External.StateProviderMixin)
function CharacterProviderMixin:GetID()
return "character"
end
function CharacterProviderMixin:GetName()
return L["Character Data"]
end
function CharacterProviderMixin:GetAddTitle()
return string.format(BTWTODO_ADD_ITEM, self:GetName()), L["Enter the type of character data below"]
end
function CharacterProviderMixin:Acquire(...)
return CreateAndInitFromMixin(CharacterMixin, ...)
end
function CharacterProviderMixin:GetFunctions()
return {
{
name = "GetValue",
returnValue = "string",
},
}
end
function CharacterProviderMixin:GetDefaults()
return {}, { -- Text
{"GetValue"}
}
end
function CharacterProviderMixin:ParseInput(value)
local num = tonumber(value)
if num ~= nil and characterDataMapIDToName[num] then
return true, num
end
if characterDataMapNameToID[value] then
return true, characterDataMapNameToID[value]
end
return false, L["Invalid character data type"]
end
function CharacterProviderMixin:FillAutoComplete(tbl, text, offset, length)
local text = strsub(text, offset, length):lower()
for value in pairs(characterDataMapNameToID) do
local name = value:lower()
if #name >= #text and strsub(name, offset, length) == text then
tbl[#tbl+1] = value
end
end
end
Internal.RegisterStateProvider(CreateFromMixins(CharacterProviderMixin))