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.
353 lines
14 KiB
353 lines
14 KiB
local _,rematch = ...
|
|
local L = rematch.localization
|
|
local C = rematch.constants
|
|
local settings = rematch.settings
|
|
|
|
--[[
|
|
The following table is an ordered list of stats to display on the pet card: smallish buttons with an icon, text and tooltip, and possibly a function
|
|
to run when clicked. These are stacked along the left side of the front of the pet card, possibly in two columns if the card is minimized.
|
|
|
|
To add new stats, add them to this table any time. Most of these values can be a literal or a function. If it's a function it will use the
|
|
returned value.
|
|
|
|
text: text to display for the stat
|
|
icon: path to the icon that will display to the left of the text
|
|
tooltipTitle: title of the tooltip for this stat
|
|
tooltipBody: body of the tooltip for this stat
|
|
isWide: true/false if the stat is wide/can take up two columns
|
|
show: function that returns true if the stat should show for the petID
|
|
click: function to run when the stat is clicked
|
|
|
|
Notes:
|
|
- All functions are passed (self,petInfo)
|
|
- Stats that are isWide will list first, otherwise stats appear in the order they're in the following table
|
|
- A stat with a click will have a "push" effect added automatically
|
|
|
|
]]
|
|
|
|
local reusedStrongVsWeights = {} -- reusing tables to reduce garbage creation
|
|
local reusedStrongVsOrder = {}
|
|
|
|
|
|
rematch.petCardStats = {
|
|
-- Revoked
|
|
{
|
|
icon = "Interface\\Buttons\\UI-GroupLoot-Pass-Down",
|
|
tooltipTitle = L["Revoked"],
|
|
tooltipBody = L["This pet has been revoked, which means Blizzard withdrew your ability to use this pet.\n\nThis commonly happens when a pet no longer meet a condition for ownership, such as the Core Hound Pup requiring an authenticator attached to the account."],
|
|
isWide = true,
|
|
value = L["Revoked"],
|
|
show = function(self,petInfo)
|
|
return petInfo.isOwned and petInfo.isRevoked
|
|
end
|
|
},
|
|
-- Can't Summon
|
|
{
|
|
icon = "Interface\\Buttons\\UI-GroupLoot-Pass-Down",
|
|
tooltipTitle = L["Can't Summon"],
|
|
tooltipBody = function(self,petInfo)
|
|
return petInfo.summonErrorText
|
|
end,
|
|
isWide = true,
|
|
value = function(self,petInfo)
|
|
return petInfo.summonShortError
|
|
end,
|
|
show = function(self,petInfo)
|
|
return petInfo.isOwned and not petInfo.isSummonable and not petInfo.isRevoked and not petInfo.isDead
|
|
end
|
|
},
|
|
-- Expansion
|
|
{
|
|
icon = "Interface\\Store\\category-icon-wow",
|
|
iconCoords = {0.25,0.75,0.25,0.75},
|
|
tooltipTitle = L["Expansion"],
|
|
tooltipBody = L["The World of Warcraft expansion this pet is from."],
|
|
isWide = true,
|
|
value = function(self,petInfo)
|
|
return rematch.utils:GetFormattedExpansionName(petInfo.expansionID)
|
|
end,
|
|
show = function(self,petInfo)
|
|
return petInfo.expansionID and settings.PetCardShowExpansionStat
|
|
end
|
|
},
|
|
-- New Pet
|
|
{
|
|
icon = "Interface\\AddOns\\Rematch\\textures\\badges-borderless",
|
|
iconCoords = {0.625,0.75,0.75,0.875},
|
|
tooltipTitle = L["New Pet"],
|
|
tooltipBody = format(L["This pet was recently added to your collection."]),
|
|
value = C.HEX_GREEN..L["New Pet"],
|
|
show = function(self,petInfo)
|
|
return petInfo.isStickied
|
|
end
|
|
},
|
|
-- Pet Marker
|
|
{
|
|
icon = "Interface\\TargetingFrame\\UI-RaidTargetingIcons",
|
|
iconCoords = function(self,petInfo)
|
|
local coords = petInfo.marker and C.COORDS_4X4[petInfo.marker]
|
|
if coords then
|
|
return coords[1],coords[2],coords[3],coords[4]
|
|
else
|
|
return 0,1,0,1
|
|
end
|
|
end,
|
|
tooltipTitle = function(self,petInfo)
|
|
return rematch.utils:GetFormattedMarkerName(petInfo.marker)
|
|
end,
|
|
tooltipBody = L["This is the pet marker you've chosen for this pet. You can change the marker from the pet's right-click menu."],
|
|
isWide = true,
|
|
value = function(self,petInfo)
|
|
return rematch.utils:GetFormattedMarkerName(petInfo.marker)
|
|
end,
|
|
show = function(self,petInfo)
|
|
return petInfo.marker and true
|
|
end
|
|
},
|
|
-- Slotted
|
|
{
|
|
icon = "Interface\\RaidFrame\\ReadyCheck-Ready",
|
|
tooltipTitle = L["Slotted"],
|
|
tooltipBody = L["This pet is currently slotted in one of the three battle pet slots."],
|
|
value = L["Slotted"],
|
|
show = function(self,petInfo)
|
|
return petInfo.isSlotted
|
|
end
|
|
},
|
|
-- Favorite
|
|
{
|
|
icon = "Interface\\Common\\FavoritesIcon",
|
|
iconCoords = {0.125,0.71875,0.09375,0.6875},
|
|
tooltipTitle = L["Favorite"],
|
|
tooltipBody = L["This pet is marked as a favorite from its right-click menu."],
|
|
value = L["Favorite"],
|
|
show = function(self,petInfo)
|
|
return petInfo.isFavorite
|
|
end
|
|
},
|
|
-- Leveling
|
|
{
|
|
icon = "Interface\\AddOns\\Rematch\\textures\\levelingstat",
|
|
tooltipTile = L["Leveling"],
|
|
tooltipBody = L["This pet is in Rematch's leveling queue."],
|
|
value = L["Leveling"],
|
|
show = function(self,petInfo)
|
|
return petInfo.isLeveling
|
|
end
|
|
},
|
|
-- Health
|
|
{
|
|
icon = "Interface\\PetBattles\\PetBattle-StatIcons",
|
|
iconCoords = {0.5,1,0.5,1},
|
|
tooltipTitle = PET_BATTLE_STAT_HEALTH,
|
|
tooltipBody = PET_BATTLE_TOOLTIP_HEALTH_MAX,
|
|
value = function(self,petInfo)
|
|
return petInfo.health==petInfo.maxHealth and petInfo.maxHealth or format("%s%d/%d",C.HEX_RED,petInfo.health,petInfo.maxHealth)
|
|
end,
|
|
show = function(self,petInfo)
|
|
return petInfo.canBattle and petInfo.health
|
|
end
|
|
},
|
|
-- Power
|
|
{
|
|
icon = "Interface\\PetBattles\\PetBattle-StatIcons",
|
|
iconCoords = {0,0.5,0,0.5},
|
|
tooltipTitle = PET_BATTLE_STAT_POWER,
|
|
tooltipBody = PET_BATTLE_TOOLTIP_POWER,
|
|
value = function(self,petInfo)
|
|
return petInfo.power
|
|
end,
|
|
show = function(self,petInfo)
|
|
return petInfo.canBattle and petInfo.power
|
|
end
|
|
},
|
|
-- Speed
|
|
{
|
|
icon = "Interface\\PetBattles\\PetBattle-StatIcons",
|
|
iconCoords = {0,0.5,0.5,1},
|
|
tooltipTitle = PET_BATTLE_STAT_SPEED,
|
|
tooltipBody = PET_BATTLE_TOOLTIP_SPEED,
|
|
value = function(self,petInfo)
|
|
return petInfo.speed
|
|
end,
|
|
show = function(self,petInfo)
|
|
return petInfo.canBattle and petInfo.speed
|
|
end
|
|
},
|
|
-- Rarity
|
|
{
|
|
icon = "Interface\\PetBattles\\PetBattle-StatIcons",
|
|
iconCoords = {0.5,1,0,0.5},
|
|
tooltipTitle = PET_BATTLE_STAT_QUALITY,
|
|
tooltipBody = PET_BATTLE_TOOLTIP_RARITY,
|
|
value = function(self,petInfo)
|
|
return format("%s%s",petInfo.color.hex,_G["BATTLE_PET_BREED_QUALITY"..(min(6,petInfo.rarity))])
|
|
end,
|
|
show = function(self,petInfo)
|
|
return petInfo.canBattle and petInfo.rarity and not settings.PetCardMinimized
|
|
end
|
|
},
|
|
-- Breed
|
|
{
|
|
altTooltip = "Breed", -- flag that this stat may have an alternate tooltip
|
|
icon = "Interface\\AchievementFrame\\UI-Achievement-Progressive-Shield",
|
|
iconCoords = {0.09375,0.578125,0.140625,0.625},
|
|
tooltipTitle = L["Breed"],
|
|
tooltipBody = function(self,petInfo)
|
|
local breedSource,breedSourceName = rematch.breedInfo:GetBreedSource()
|
|
if breedSource then
|
|
return format(L["Determines how stats are distributed. All breed data is pulled from your installed %s%s\124r addon."],C.HEX_WHITE,breedSourceName)
|
|
end
|
|
end,
|
|
value = function(self,petInfo)
|
|
if rematch.breedInfo:GetBreedSource() then
|
|
return petInfo.breedName or UNKNOWN
|
|
end
|
|
end,
|
|
show = function(self,petInfo)
|
|
return rematch.breedInfo:GetBreedSource() and petInfo.canBattle and petInfo.breedID
|
|
end
|
|
},
|
|
-- Teams
|
|
{
|
|
icon = "Interface\\AddOns\\Rematch\\textures\\badges-borderless",
|
|
iconCoords = {0.5,0.625,0.125,0.25},
|
|
tooltipTitle = L["Teams"],
|
|
tooltipBody = format(L["%s Click to find all teams that include this specific pet."],C.LMB_TEXT_ICON),
|
|
value = function(self,petInfo)
|
|
return format(L["%d Teams"],petInfo.numTeams or 0)
|
|
end,
|
|
show = function(self,petInfo)
|
|
return petInfo.inTeams
|
|
end,
|
|
click = function(self,petInfo)
|
|
if petInfo.isOwned and petInfo.idType=="pet" then
|
|
local petID = petInfo.petID -- about to clobber this if moving to teams view
|
|
rematch.layout:SummonView("teams")
|
|
rematch.teamsPanel:SetSearch(petID)
|
|
elseif petInfo.idType=="species" then
|
|
local name = petInfo.speciesName
|
|
rematch.layout:SummonView("teams")
|
|
rematch.teamsPanel:SetSearch(name)
|
|
end
|
|
end,
|
|
},
|
|
-- Not Tradable
|
|
{
|
|
icon = "Interface\\Common\\icon-noloot",
|
|
tooltipTitle = L["Not Tradable"],
|
|
tooltipBody = L["This pet cannot be caged or given to others."],
|
|
value = L["No Trade"],
|
|
show = function(self,petInfo)
|
|
return petInfo.isObtainable and not petInfo.isTradable
|
|
end
|
|
},
|
|
-- Unique
|
|
{
|
|
icon = "Interface\\AddOns\\Rematch\\textures\\unique",
|
|
tooltipTitle = L["Unique"],
|
|
tooltipBody = L["Only one copy of this pet can be owned at a time."],
|
|
value = L["Unique"],
|
|
show = function(self,petInfo)
|
|
return petInfo.isObtainable and petInfo.isUnique
|
|
end
|
|
},
|
|
-- Collected (stat version displays 3/3 rather than listing all collected versions)
|
|
{
|
|
icon = "Interface\\Icons\\INV_Box_PetCarrier_01",
|
|
iconCoords = {0.075,0.925,0.075,0.925},
|
|
tooltipTitle = COLLECTED,
|
|
tooltipBody = function(self,petInfo)
|
|
return rematch.petCard:GetCollectedList(petInfo)
|
|
end,
|
|
value = function(self,petInfo)
|
|
return format("%s%d/%d",petInfo.countColor,petInfo.count or 0,petInfo.maxCount or 0)
|
|
end,
|
|
show = function(self,petInfo)
|
|
return (settings.PetCardMinimized or settings.PetCardCompactCollected) and petInfo.count
|
|
end
|
|
},
|
|
-- Strong Vs
|
|
{
|
|
icon = "Interface\\PetBattles\\BattleBar-AbilityBadge-Strong",
|
|
iconCoords = {0.1,0.9,0.1,0.9},
|
|
tooltipTitle = L["Strongest Vs"],
|
|
tooltipBody = L["These are the pet types this pet is strongest against. One or more of this pet's attack abilities will deal extra damage to these pet types."],
|
|
value = function(self,petInfo)
|
|
local results = L["vs "]
|
|
for _,petType in pairs(petInfo.strongVs) do -- weigh the strong vs types
|
|
reusedStrongVsWeights[petType] = (reusedStrongVsWeights[petType] or 0)+1
|
|
end
|
|
for k,v in pairs(reusedStrongVsWeights) do -- put the indexes of the weights into an ordered list
|
|
tinsert(reusedStrongVsOrder,k)
|
|
end
|
|
table.sort(reusedStrongVsOrder,function(e1,e2) -- order the list
|
|
return reusedStrongVsWeights[e1] > reusedStrongVsWeights[e2]
|
|
end)
|
|
for i=1,3 do -- and add them to results to return
|
|
if reusedStrongVsOrder[i] then
|
|
results = results..rematch.utils:PetTypeAsText(reusedStrongVsOrder[i],16,true)
|
|
end
|
|
end
|
|
wipe(reusedStrongVsOrder) -- done with tables, can clean up
|
|
wipe(reusedStrongVsWeights)
|
|
return results
|
|
end,
|
|
show = function(self,petInfo)
|
|
return settings.ShowStrongestVsStat and petInfo.canBattle
|
|
end,
|
|
},
|
|
-- Species ID
|
|
{
|
|
icon = "Interface\\WorldMap\\Gear_64Grey",
|
|
iconCoords = {0.1,0.9,0.1,0.9},
|
|
tooltipTitle = L["Species ID"],
|
|
tooltipBody = L["All versions of this pet share this unique identifying number."],
|
|
value = function(self,petInfo)
|
|
return petInfo.speciesID
|
|
end,
|
|
show = function(self,petInfo)
|
|
return settings.ShowSpeciesID and not petInfo.isSpecialType
|
|
end
|
|
},
|
|
-- Notes
|
|
{
|
|
icon = "Interface\\AddOns\\Rematch\\textures\\notesmicrobutton",
|
|
iconCoords = {0,0.5,0,1},
|
|
value = L["Notes"],
|
|
show = function(self,petInfo)
|
|
return petInfo.hasNotes
|
|
end,
|
|
enter = function(self,petInfo)
|
|
rematch.cardManager:OnEnter(rematch.notes,self,petInfo.petID)
|
|
end,
|
|
leave = function(self,petInfo)
|
|
rematch.cardManager:OnLeave(rematch.notes,self,petInfo.petID)
|
|
end,
|
|
click = function(self,petInfo)
|
|
rematch.cardManager:OnClick(rematch.notes,self,petInfo.petID)
|
|
end
|
|
},
|
|
-- Search
|
|
{
|
|
icon = "Interface\\Minimap\\Tracking\\None",
|
|
tooltipTitle = SEARCH,
|
|
tooltipBody = format(L["%s Click to search for all versions of this pet."],C.LMB_TEXT_ICON),
|
|
value = SEARCH,
|
|
show = function(self,petInfo)
|
|
return petInfo.isObtainable
|
|
end,
|
|
click = function(self,petInfo) -- clicking the search stat will look for an "Exact Species Name" to find all copies of the pet
|
|
local petID = petInfo.petID -- SummonView may potentially clobber the passed petInfo; hold onto the petID just in case
|
|
rematch.layout:SummonView("pets")
|
|
petInfo = rematch.petInfo:Fetch(petID)
|
|
rematch.filters:ClearAll()
|
|
local exactSearch = "\""..petInfo.speciesName.."\""
|
|
rematch.filters:SetSearch(exactSearch)
|
|
rematch.petsPanel.Top.SearchBox:SetText(exactSearch)
|
|
rematch.petsPanel:Update()
|
|
rematch.petCard:Hide()
|
|
end
|
|
},
|
|
|
|
}
|