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
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))
|
|
|