Module:ItemTooltip
Jump to navigation
Jump to search
ItemTooltip builds tooltips of Risk of Rain 2's items.
Documentation
Package items
itemtooltip.GetRarity(frame)
(function)- Gets the item rarity.
- Parameter:
frame
Frame object w/ first argument being the item name and 2nd argument being to use simple form of rarity (default false) (table) - Returns: Item rarity name (string)
itemtooltip.GetDescription(frame, item)
(function)- Gets the item description.
- Parameters:
frame
Frame object w/ first argument being the item name (table)item
Item database entry (table; optional)
- Returns: Item description (string)
itemtooltip.GetQuote(frame, item)
(function)- Gets the item flavor text quote.
- Parameters:
frame
Frame object w/ first argument being the item name (table)item
Item database entry (table; optional)
- Returns: Item quote (string)
itemtooltip.GetTooltip(frame)
(function)- Gets the item's tooltip.
- Parameter:
frame
Frame object w/ first argument being the item name (table) - Returns: Wikitext of tooltip (string)
Modules and Lua Libraries | |
---|---|
Databases | |
Module:Challenges (/Data) • Module:Enemies (/Data) • M:Environments (/Data) • Module:Equipment (/Data) • M:Interactables (/Data) • M:Items (/Data, /LogbookData) • M:Lore (/Data) • M:Skills (/Data) • M:StatusEffect (/Data) • M:Survivors (/Data) • M:Test Version History (/Data) | |
Wiki | |
M:EnvironmentTooltip • M:ItemTooltip • M:MonsterTooltip • M:StatusEffectTooltip • M:SurvivorTooltip | |
Template Databases | |
T:FriendlyNameToInternal • T:InternalNameToFriendly • T:Keyword | |
Full MediaWiki List • Full Module List • Full Template List • Lua reference manual |
--- '''ItemTooltip''' builds tooltips of Risk of Rain 2's items.
--
-- @module itemtooltip
-- @alias p
-- @author [[User:Paradoxzyx]]
-- @require [[Module:Items/Data]]
-- @require [[Module:Equipment/Data]]
-- @release stable
--<nowiki>
local p = {}
local all_items = mw.loadData("Module:Items/Data").items
local all_equipment = mw.loadData("Module:Equipment/Data").equipment
--- Gets the table entry for an item or equipment.
-- @function GetItemOrEquipment
-- @param {string} item_name Item name
-- @return {table} Item database entry
-- @local
function GetItemOrEquipment(item_name)
assert(item_name ~= nil, 'Error: Name missing. 1st parameter is required.')
local item = all_items[item_name] or all_equipment[item_name]
assert(item ~= nil, 'Error: Incorrect name "' .. item_name .. '". Check capitalization.')
return item
end
--- Gets the item rarity.
-- @function p.GetRarity
-- @param {table} frame Frame object w/ first argument being the item name and 2nd argument being
-- to use simple form of rarity (default false)
-- @return {string} Item rarity name
function p.GetRarity(frame)
local item_name = frame.args[1]
local simple_form = frame.args[2] or false
local item = GetItemOrEquipment(item_name)
if type(item) == 'string' then
return item
end
local rarity = item.Rarity
if simple_form and rarity == 'Elite Equipment' then
rarity = 'Equipment'
elseif simple_form and rarity == 'Lunar Equipment' then
rarity = 'Lunar'
end
return rarity
end
--- Gets the item description.
-- @function p.GetDescription
-- @param {table} frame Frame object w/ first argument being the item name
-- @param[opt] {table} item Item database entry
-- @return {string} Item description
function p.GetDescription(frame, item)
local item_name = frame.args[1]
item = item or GetItemOrEquipment(item_name)
if type(item) == 'string' then
return item
else
return frame:preprocess(item.Desc:gsub("\r\n", "<br>"))
end
end
--- Gets the item flavor text quote.
-- @function p.GetQuote
-- @param {table} frame Frame object w/ first argument being the item name
-- @param[opt] {table} item Item database entry
-- @return {string} Item quote
function p.GetQuote(frame, item)
local item_name = frame.args[1]
item = item or GetItemOrEquipment(item_name)
if type(item) == 'string' then
return item
else
return frame:preprocess(item.Quote)
end
end
-- local GetItemBox()
local itembox_template = '<span style="position: relative; display: inline-flex;">' ..
'[[File:bg%s.png|%spx|link=%s]]' ..
'<span style="position: absolute; left: %spx; top: %spx;">' ..
'[[File:%s.png|%spx|link=%s]]' ..
'</span>' ..
'</span>'
--- Gets the item's tooltip image box.
-- @function GetItemBox
-- @param {table} frame Frame object
-- @param {string} name Item name
-- @param {number} size Width of item image in px
-- @return {string} Wikitext of tooltip image box
-- @local
local function GetItemBox(frame, name, size)
frame.args[1] = name
frame.args[2] = 'simple'
local rarity = p.GetRarity(frame)
local itemSize = math.floor(size * 0.9375)
local offset = (size - itemSize) / 2
return string.format(itembox_template,
rarity,
size,
name,
offset,
offset,
name,
itemSize,
name
)
end
-- GetTooltip()
local tooltip_template = '<span class="tooltip-block nomobile">' ..
'<span class="tooltip-icon">' ..
'<span>%s</span>' ..
'%s' ..
'</span>' ..
'<span style="%s">' ..
'%s<span style="color:#959494;">%s</span><br><span class="makeshift-hr"></span>%s' ..
'</span>' ..
'</span>'
--- Gets the item's tooltip.
-- @function p.GetTooltip
-- @param {table} frame Frame object w/ first argument being the item name
-- @return {string} Wikitext of tooltip
function p.GetTooltip(frame)
local item_name = frame.args[1]
local item = GetItemOrEquipment(item_name)
if type(item) == 'string' then
return item
end
local item_box = GetItemBox(frame, item_name, 48)
local quote = p.GetQuote(frame, item)
local desc = p.GetDescription(frame, item)
local cooldown = item.Cooldown and string.format('<span class="cooldown">%ss</span>', item.Cooldown) or ''
local style = ''
local function strip(txt) return txt:gsub('<span.->(.-)</span>', '%1'):gsub('+', '') end -- remove tags and + sign
if strip(quote) == strip(desc) then
quote = ''
style = 'align-self: center;'
end
return string.format(tooltip_template,
item_box,
cooldown,
style,
frame:preprocess((item.Expansion and "{{" .. item.Expansion .. "}}" or "") .. item_name),
quote == '' and "" or ("<br>" .. quote),
desc
)
end
return p
--</nowiki>