Difference between revisions of "Module:Backpack item"
Line 29: | Line 29: | ||
end | end | ||
− | -- Colors are from styles in https: | + | -- Colors are from styles in https://wiki.teamfortress.com/wiki/MediaWiki:Common.css |
local grade_colors = { | local grade_colors = { | ||
civilian = 'B0C3D9', | civilian = 'B0C3D9', | ||
Line 82: | Line 82: | ||
end | end | ||
− | local icon_begin = '<div style="width:26px; height:26px; ' .. template('Lang', { | + | local icon_begin = '<div style="width: 26px; height: 26px; ' .. template('Lang', { |
− | ['ar'] = 'float:left; right:86px;', | + | ['ar'] = 'float: left; right: 86px;', |
-- English and default | -- English and default | ||
− | ['en'] = 'float:right; left:86px;', | + | ['en'] = 'float: right; left: 86px;', |
− | }) .. ' position:absolute; top:6px;">' | + | }) .. ' position: absolute; top: 6px;">' |
local icon_end = '</div>' | local icon_end = '</div>' | ||
Line 118: | Line 118: | ||
-- The color and font for the full name of the item | -- The color and font for the full name of the item | ||
function get_full_item_name_style(args) | function get_full_item_name_style(args) | ||
− | local | + | local color |
if args['custom-color'] then | if args['custom-color'] then | ||
− | + | color = args['custom-color'] | |
elseif grade_colors[args['grade']] then | elseif grade_colors[args['grade']] then | ||
− | style = ' | + | style = '#' .. grade_colors[args['grade']] |
elseif quality_colors[args['quality']] then | elseif quality_colors[args['quality']] then | ||
− | style = ' | + | style = '#' .. quality_colors[args['quality']] |
else | else | ||
− | style = ' | + | style = '#' .. quality_colors['unique'] |
end | end | ||
− | style = | + | local style = 'color: ' .. color .. '; font-size:18px; line-height:16px; text-shadow: 2px 1px 1px #24201B; font-family:' |
-- Specific fonts for some languages that aren't supported by the standard TF2 Build font. | -- Specific fonts for some languages that aren't supported by the standard TF2 Build font. | ||
Line 264: | Line 264: | ||
-- Adapted from WebAPI | -- Adapted from WebAPI | ||
− | -- Missing languages: fi, fr, nl | + | -- Missing languages: fi, fr, ja, nl |
-- Self translated: none | -- Self translated: none | ||
if args['limited'] then -- mark | if args['limited'] then -- mark | ||
Line 273: | Line 273: | ||
['en'] = 'Limited', | ['en'] = 'Limited', | ||
['es'] = 'de Edición Limitada', | ['es'] = 'de Edición Limitada', | ||
− | ['hu'] = 'Limitált', -- No space | + | ['hu'] = 'Limitált', -- No space |
['it'] = 'Edizione limitata', | ['it'] = 'Edizione limitata', | ||
− | |||
['ko'] = '한정', | ['ko'] = '한정', | ||
['nl'] = 'Beperkt', -- No space | ['nl'] = 'Beperkt', -- No space | ||
['no'] = 'Begrenset', -- No space | ['no'] = 'Begrenset', -- No space | ||
− | ['pl'] = '', | + | ['pl'] = 'Biały Kruk', |
['pt'] = 'de Edição Limitada', | ['pt'] = 'de Edição Limitada', | ||
['pt-br'] = 'Edição Limitada', | ['pt-br'] = 'Edição Limitada', | ||
− | + | ['ro'] = 'Limitat', -- No space | |
− | + | ['ru'] = 'ограниченной серии', | |
− | + | ['sv'] = 'Begränsad', -- No space | |
− | -- | + | ['tr'] = 'Sınırlı', -- No space |
− | [' | + | ['zh-hans'] = '限量', -- No space |
− | + | ['zh-hant'] = '限量版', -- No space | |
− | |||
− | -- | ||
− | |||
− | -- | ||
− | -- | ||
}) .. '</span>]] ' | }) .. '</span>]] ' | ||
-- Option 1: Use | -- Option 1: Use | ||
Line 340: | Line 334: | ||
['ja'] = 'レベル ' .. item_level, | ['ja'] = 'レベル ' .. item_level, | ||
['ko'] = '레벨 ' .. item_level, | ['ko'] = '레벨 ' .. item_level, | ||
− | ['no'] = item_level .. ' - Nivå 10', | + | ['no'] = item_level .. ' - Nivå 10', -- Verify |
['pl'] = 'poziomu ' .. item_level, | ['pl'] = 'poziomu ' .. item_level, | ||
['pt'] = '- Nível ' .. item_level, | ['pt'] = '- Nível ' .. item_level, | ||
['pt-br'] = 'nível ' .. item_level, | ['pt-br'] = 'nível ' .. item_level, | ||
− | + | ['ro'] = 'de Nivel ' .. item_level, | |
− | + | ['ru'] = item_level .. '-го уровня', | |
− | + | ['sv'] = 'Nivå ' .. item_level, | |
− | + | ['tr'] = 'Seviye ' .. item_level, | |
− | - | + | ['zh-hans'] = '等级' .. item_level, |
− | + | ['zh-hant'] = '等級' .. item_level, | |
− | |||
− | |||
− | |||
− | |||
}) .. ' ' | }) .. ' ' | ||
end | end | ||
Line 383: | Line 373: | ||
['pt'] = item_kind .. strange_rank_name .. limited .. rankson, | ['pt'] = item_kind .. strange_rank_name .. limited .. rankson, | ||
['pt-br'] = item_kind .. strange_rank_name .. limited .. rankson, | ['pt-br'] = item_kind .. strange_rank_name .. limited .. rankson, | ||
− | + | ['ro'] = limited .. strange_rank_name .. item_kind .. rankson, | |
− | + | ['ru'] = item_kind .. strange_rank_name .. limited .. rankson, | |
− | + | ['sv'] = limited .. strange_rank_name .. item_kind .. rankson, | |
− | + | ['tr'] = limited .. strange_rank_name .. item_kind .. rankson, | |
− | + | ['zh-hans'] = limited .. strange_rank_name .. item_kind .. rankson, | |
− | + | ['zh-hant'] = limited .. strange_rank_name .. item_kind .. rankson, | |
− | |||
}) | }) | ||
elseif grade ~= '' then | elseif grade ~= '' then | ||
Line 463: | Line 452: | ||
end | end | ||
− | return '<span style="color:' .. color .. '">' .. full_item_level .. '</span>' | + | return '<span style="color: ' .. color .. '">' .. full_item_level .. '</span>' |
end | end | ||
Line 496: | Line 485: | ||
return '<br><font color="#8650AC">★ ' .. unusual_effect .. '</font>' | return '<br><font color="#8650AC">★ ' .. unusual_effect .. '</font>' | ||
end | end | ||
− | |||
− | |||
− | |||
-- Adapted from WebAPI | -- Adapted from WebAPI | ||
Line 665: | Line 651: | ||
-- Add a div for the secondary attributes | -- Add a div for the secondary attributes | ||
− | + | body = body .. '<div style="font-family: ' .. template('Lang', { | |
− | body = body .. '<div style="font-family:TF2 Secondary, Verdana, Geneva, sans-serif; font-size: 15px">' | + | -- Specific fonts for some languages that aren't supported by the standard TF2 Secondary font. --> |
+ | ['en'] = 'TF2 Secondary, Verdana, Geneva, sans-serif;', | ||
+ | ['hu'] = 'Verdana, Genva, sans-serif; font-weight: bold;', | ||
+ | ['ja'] = 'TF2 Secondary, Shin Go, Heisei Kaku Gothic W5; font-weight: bold;', | ||
+ | ['ko'] = 'Pathang, sans-serif, Totum, Kodig, serif; font-weight: bold;', | ||
+ | ['zh-hans'] = 'SimSum-18030, SimHei, serif;', | ||
+ | ['zh-hant'] = 'JhengHei, JhengHei, sans-serif;', | ||
+ | }) .. 'font-size: 15px">' | ||
body = body .. get_full_item_level(args) | body = body .. get_full_item_level(args) | ||
Line 676: | Line 669: | ||
end | end | ||
− | -- | + | for n = 1, 8 do |
− | -- | + | if args['att-' .. n .. '-positive'] then |
+ | body = body .. '<br><span class="att_positive">' .. args['att-' .. n .. '-positive'] .. '</span>' | ||
+ | elseif args['att-' .. n .. '-negative'] then | ||
+ | body = body .. '<br><span class="att_negative">' .. args['att-' .. n .. '-negative'] .. '</span>' | ||
+ | elseif args['att-' .. n .. '-neutral'] then | ||
+ | body = body .. '<br><span class="att_neutral">' .. args['att-' .. n .. '-neutral'] .. '</span>' | ||
+ | end | ||
+ | end | ||
+ | |||
+ | local item_description | ||
+ | if args['custom-description'] then | ||
+ | item_description = '"' .. args['custom-description'] .. '"' | ||
+ | elseif args['item-description'] then | ||
+ | item_description = args['item-description'] | ||
+ | end | ||
+ | if item_description ~= nil then | ||
+ | -- TODO: Span containing just an nbsp? Why? | ||
+ | body = body .. '<br><span style="line-height: 0.3em;"> </span>' | ||
+ | body = body .. '<br><span class="att_neutral" style="line-height: 1.2em; font-size: 95%; width: 80%;">' .. item_description .. '</span>' | ||
+ | end | ||
if args['gift-from'] then | if args['gift-from'] then |
Revision as of 06:29, 3 May 2019
This module is very complex. If you have questions about this module, feel free to ask on the IRC. Darkid has offered to maintain this module, you may contact them if you need further assistance. |
This template is used to display item stats similar to how they appear in-game.
Parameters
Parameter | Example | Description | Code Example | Result |
---|---|---|---|---|
Basics | ||||
item-name
|
Condor Cap
|
Proper item name in English (Condor Cap instead of Bonnet de condor, for example). Automatically grabs the item's icon. The item name is automatically translated on any language subpages. |
{{Backpack item | item-name = Condor Cap | item-kind = Hat }} |
|
custom-name
|
Spam Hammer
|
Adds a custom name with quotation marks. Still needs item-name to produce the correct image.
|
{{Backpack item | item-name = Homewrecker | custom-name = Spam Hammer | item-kind = Sledgehammer | item-level = 5 | att-1-positive = +100% damage vs buildings | att-2-positive = Damage removes Sappers | att-3-negative = -25% damage vs players }} |
|
no-custom-name-quotes
|
yes
|
Removes quotation marks from custom names if the custom-name field is used. Used in conjunction with custom-name .
|
{{Backpack item | item-name = Texas Slim's Dome Shine | custom-name = Cream Gravy | no-custom-name-quotes = yes | item-kind = Hat | item-description = Sometimes you just need a little less hat. }} |
|
custom-icon
|
BLU Bombcart.png
|
Adds a custom icon for users' own purposes. This parameter is independent from item-name parameter.
|
{{Backpack item | item-name = Mr. Quackers | custom-icon = BLU Bombcart.png | item-kind = Mask | grade = Assassin }} |
|
item-description
|
This hat is the greatest.
|
For items that have an in-game description. Will not display if a custom-description is set. Can use a custom value.
|
{{Backpack item | item-name = Yule Hog | item-kind = Hat | grade = Mercenary | item-description = This hat is the greatest. }} |
|
custom-description
|
This hat is also the greatest.
|
For items that have a custom in-game description (from a Description Tag). Displays like a normal description but has quotation marks surrounding it. Can use a custom value. |
{{Backpack item | item-name = Napper's Respite | item-kind = Hat | custom-description = This hat is also the greatest. }} |
|
prefix
|
none The Best
|
Set to "none" to hide any prefix added by quality , while keeping the quality's color. Can use a custom value.
|
{{Backpack item | item-name = Flare Gun | prefix = The Best | item-kind = Flare Gun | item-level = 10 | item-description = This weapon will reload when not active | att-1-positive = 100% critical hit vs burning players }} |
|
suffix
|
none (Slight Return)
|
Similar to prefix , mainly for use in non-en pages. Can use a custom value.
|
{{Backpack item | item-name = Flame Thrower | suffix = (Slight Return) | quality = normal | item-kind = Flame Thrower | item-level = 1 | att-1-positive = Extinguishing teammates restores 20 health | item-description = Afterburn reduces Medi Gun healing and resist shield effects.<br>Alt-Fire: Release a blast of air that pushes enemies and projectiles and extinguish teammates that are on fire. }} |
|
item-level
|
none
|
The item's level. Set to "none" to hide the level. Defaults to "Level 1 - 100". Can use a custom value. |
{{Backpack item | item-name = Antarctic Researcher | prefix = The | item-kind = Coat | item-level = 68 }} |
|
item-kind
|
Hat
|
Item kind. This string is not automatically translated. |
{{Backpack item | item-name = Lucky Cat Hat | grade = Elite | item-kind = Absolute Meower }} |
|
Quality | ||||
quality
|
genuine
|
Defaults to "unique " (the standard item yellow). See Item quality for a list of accepted values.
|
{{Backpack item | item-name = Horseless Headless Horsemann's Headtaker | quality = genuine | item-kind = Axe | item-description = Cursed by dark spirits similar to those that dwell within the Eyelander. | item-flags = Not Tradable or Marketable | att-1-neutral = This weapon has a large melee range and deploys and holsters slower | att-2-negative = No random critical hits | att-3-negative = -25 max health on wearer }} |
|
unusual-effect
|
Stormy Storm
|
Adds the specified Unusual effect to the item's description. Also adds an Unusual at the top right of the item icon, indicating the item has an Unusual effect. See Unusual for a list of accepted values. |
{{Backpack item | item-name = Rimmed Raincatcher | unusual-effect = Stormy Storm | quality = unusual | item-kind = Hat | item-description = Because there's no alliteration like alliteration with an 'ARR!' }} |
|
rankson
|
Buildings Sapped
|
Primary stat being tracked for a Strange item. |
{{Backpack item | item-name = Shovel | strange-icon = yes | rankson = Buildings Sapped | killcount = 0 | quality = strange | item-kind = Shovel }} |
|
killcount
|
7613
|
Number of points for the primary stat being tracked. Can use a custom value. |
{{Backpack item | item-name = Big Elfin Deal | strange-icon = yes | rankson = Points Scored | killcount = 7613 | quality = strange | item-kind = Hat | item-description = You ask me if I wanna be a dentist one more time, pal, I'm gonna kick your teeth in. }} |
|
rankson2
|
Kill assists
|
For Strange Parts or the secondary stat being tracked. rankson3 and rankson4 work similarly.
|
{{Backpack item | item-name = Medi Gun | strange-icon = yes | rankson = Ubers | rankson2 = Kill Assists | killcount = 0 | killcount2 = 0 | quality = strange | item-kind = Medi Gun }} |
|
killcount2
|
50
|
Number of points for Strange Parts or the secondary stat being tracked. killcount3 and killcount4 work similarly. Can use a custom value.
|
{{Backpack item | item-name = Sniper Rifle | strange-icon = yes | rankson = Kills | rankson2 = Damage Dealt | killcount = 0 | killcount2 = 50 | quality = strange | item-kind = Sniper Rifle }} |
|
filter
|
Coldfront
|
Adds the appropriate Strange Filter prefix/suffix to the weapon. See List of maps for a list of accepted values. |
{{Backpack item | item-name = Shotgun | filter = Coldfront | strange-icon = yes | rankson = kills | killcount = 0 | quality = strange | item-kind = Shotgun | item-level = 1 }} |
|
strange-icon
|
yes
|
Adds an icon at the top right of the item icon, indicating the item is Strange. |
{{Backpack item | item-name = Scattergun | strange-icon = yes | rankson = kills | killcount = 0 | quality = strange | item-kind = Scattergun }} |
|
limited
|
yes
|
If set to "yes", the the item kind will be colored yellow, and the word "Limited" will be added with a link to Limited Quantity. |
{{Backpack item | item-name = Batter's Helmet | limited = yes | item-kind = Hat | item-description = You'll be batting a thousand (skulls in) when you don this red piece of plastic! }} |
Batter's Helmet |
grade
|
Commando
|
Colors the item's name according to the specified grade, and treats it like a graded item. Valid options are Civilian , Freelance , Mercenary , Commando , Assassin , and Elite .
|
{{Backpack item | item-name = Sapper | grade = Commando | quality = Normal | item-kind = Sapper | item-description = Place on enemy buildings to disable and slowly drain away its health. Placing a sapper does not remove your disguise }} |
|
wear
|
Field-Tested
|
For use on Decorated weapons. Valid options are Battle Scarred , Well-Worn , Field-Tested , Minimal Wear , and Factory New .
|
{{Backpack item | item-name = Minigun | wear = Field-Tested | skin = War Room | grade = Commando | item-kind = Minigun }} |
|
skin
|
Warhawk
|
Decorated skin name. See Template:Dictionary/decorated#Skins for a list of accepted values. |
{{Backpack item | item-name = Rocket Launcher | wear = Factory New | skin = Warhawk | grade = Elite | item-kind = Rocket Launcher }} |
|
stat-icon
|
yes
|
Adds an icon at the top right of the backpack image, indicating the item is Graded and Strange. |
{{Backpack item | item-name = Revolver | wear = Factory New | skin = Blitzkrieg | grade = Mercenary | quality = Strange | stat-icon = yes | rankson = kills | killcount = 25 | item-kind = Revolver }} |
|
pyroland-icon
|
yes
|
Adds an icon at the top right of the backpack image, indicating the item is only visible in Pyroland. |
{{Backpack item | item-name = Pyrovision Goggles | item-kind = Pyrovision Goggles | item-level = 1-100 | pyroland-icon = yes | item-description = Enter a world of imagination that's far superior to the crap-ass worlds of imagination you get from books. Pyrovision lets you see the TF2niverse from our favorite arsonist's perspective. | item-flags = Achievement Item: Not Tradable or Marketable | att-1-positive = On Equip: Visit Pyroland }} |
Pyrovision Goggles |
halloween-icon
|
yes
|
Adds an icon at the top right of the backpack image, indicating the item is only visible during Halloween/Full Moon. |
{{Backpack item | item-name = Chicken Kiev | prefix = The | item-kind = Bird Head | halloween-icon = yes | att-1-negative = Holiday Restriction: Halloween / Full Moon }} |
|
loaner-icon
|
yes
|
Adds an icon at the top right of the backpack image, indicating the item is being loaned. |
{{Backpack item | item-name = Black Box | item-kind = Rocket Launcher | item-level = 5 | loaner-icon = yes | prefix = The | att-1-positive = On Hit: Gain up to +20 health per attack | att-2-negative = -25% clip size | item-flags = Loaner - Cannot be traded, marketed, crafted, or modified }} |
|
Attributes | ||||
paint-color
|
Mann Co. Orange
|
Adds a colored paint splat at the top right of the item icon, indicating the item is painted. See Paint Can for a list of accepted values. |
{{Backpack item | item-name = Mislaid Sweater | paint-color = Mann Co. Orange | prefix = The | item-kind = Sweater | grade = commando }} |
|
decal-icon
|
yes
|
Adds this icon at the top right of the item icon, indicating the item has a Decal applied. |
{{Backpack item | item-name = Photo Badge | decal-icon = yes | item-kind = Photo Badge | item-level = 20 | item-description = Discourage identity theft.<br><br>Custom decals can be applied to this item. }} |
|
|
|
Displays up to 8 positive, negative, or neutral values. Can use custom values. |
{{Backpack item | item-name = Dead Ringer | item-kind = Invis Watch | item-level = 5 | att-1-neutral = Cloak Type: Feign Death | att-2-positive = Live forever! | att-3-negative = Just kidding. }} |
|
gift-from
|
Robin
|
Display the source of a gifted item. Can use a custom value. |
{{Backpack item | item-name = Robin Walkers | item-kind = Slippers | grade = Elite | gift-from = Robin | date-received = Mar 29, 2018 (21:43:08) }} |
|
date-received
|
Sep 13, 2188 (06:30:00)
|
Display the date a gifted item was received. Will not appear if no gift-from is defined. Can use a custom value.
|
{{Backpack item | item-name = Level Three Chin | item-kind = Chin | prefix = The | item-level = 3 | gift-from = Gabe Newell | date-received = Sep 13, 2188 (06:30:00) }} |
|
item-expiration
|
Dec 31, 2010 (23:00:00)
|
For items that expire. Can use a custom value. |
{{Backpack item | item-name = Gift-Stuffed Stocking | item-uses = 1 | item-level = 13 | item-kind = Gift | item-flags = Not Tradable or Marketable | item-description = Contains an assortment of goodies for good little Mercenaries. | item-expiration = Dec 31, 2010 (23:00:00) }} |
|
item-uses
|
4
|
For items that have a limited number of uses. Can use a custom value. |
{{Backpack item | item-name = Noise Maker - Black Cat | item-uses = 4 | item-level = 5 | item-kind = Party Favor }} |
|
item-flags
|
Not Tradable, Marketable, or Usable in Crafting
|
For item flags. Displays them inside brackets. Can use a custom value. |
{{Backpack item | item-name = Wiki Cap | quality = community | item-kind = Hat | item-level = 20 | unusual-effect = Community Sparkle | item-description = Given to valuable Community Contributors<br>Given to valuable contributors to the official TF2 wiki<br>https://wiki.teamfortress.com/ | item-flags = Not Tradable, Marketable, or Usable in Crafting }} |
|
Styling | ||||
width
|
75%
|
Width parameter. Defaults to 100% in infoboxes, but for other usages, can be any value (%, px, pt, em).
|
{{Backpack item | item-name = Jumper's Jeepcap | width = 75% | item-kind = Hat }} |
|
style
|
background: #490040;
|
Style parameter. Can add any valid CSS style to the main div. |
{{Backpack item | item-name = Burstchester | style = background: #490040; | prefix = Taunt: | item-kind = Special Taunt | grade = Assassin | item-description = Community Created All Class Taunt }} |
See also
Image insertion templates (
)- Team Fortress 2
{{Backpack icon}}
– for inserting an image from the backpack.{{Backpack item}}
– for displaying loadout stats.{{Icon class}}
– for displaying class icons.{{Icon item}}
– for displaying images from the item icons done in Shugo style.{{Icon killicon}}
– for displaying kill icon images.{{Kill notice}}
– for displaying a kill notice.
- Wiki-related
{{Possession}}
– for displaying the icons used in{{Item checklist}}
.{{User halloween mask possession}}
– for displaying Halloween Mask icons used in hat and item checklists.{{Comment}}
– for displaying "Support", "Oppose" and "Comment" symbols.{{Pro}}
,{{Con}}
&{{Neut}}
; Compact form for common uses of{{Comment}}
{{Flagicon}}
– generates the flag icon of a country when given the country code.
-- TODO: Search everything which uses 'Lang' and make sure they're done / as done as I can. local p = {} -- Defined here so that it can be referenced inside the next function local frame = nil --[[ A more natural way to invoke templates in lua. Examples: {{If lang}} -> template('If lang') {{See also|Foo}} -> template('See also', 'Foo') {{Hatnote|Foo|Bar}} -> template('Hatnote', {'Foo', 'Bar'}) {{Lang | de = German | en = English | ru = Russian }} -> template('Lang', { ['de'] = 'German', ['en'] = 'English', ['ru'] = 'Russian', } ]] function template(title, args) if type(args) == 'string' then args = {args} end return frame:expandTemplate{title=title, args=args} end -- Colors are from styles in https://wiki.teamfortress.com/wiki/MediaWiki:Common.css local grade_colors = { civilian = 'B0C3D9', freelance = '5E98D9', mercenary = '4B69FF', commando = '8847FF', assassin = 'D32CE6', elite = 'EB4B4B', } local quality_colors = { normal = 'B2B2B2', unusual = '8650AC', vintage = '476291', unique = 'FFD700', community = '70B04A', valve = 'A50F79', ['self-made'] = '70B04A', customized = '476291', genuine = '4D7455', strange = 'CF6A32', completed = '8650AC', haunted = '38F3AB', collectors = 'C00000', decorated = 'FAFAFA', } -- Potentially add the icon in the corner (paint splotch, unusual, pyroland, etc) function get_corner_icon(args) local image local image_link if args['paint-color'] then image = 'Paint Splat ' .. args['paint-color'] image_link = 'Paint Can' elseif args['unusual-effect'] then image = 'Viewmode unusual' image_link = 'Unusual' elseif args['decal-icon'] then image = 'Paint Splat Decal' image_link = 'Decal Tool' elseif args['strange-icon'] then image = 'Viewmode strange' image_link = 'Strange' elseif args['stat-icon'] then image = 'Viewmode statclock' image_link = 'Decorated' elseif args['pyroland-icon'] then image = 'Viewmode pyrovision' image_link = 'Pyroland' else -- Early exit if there's no icon, there's no reason to make an empty div return '' end local icon_begin = '<div style="width: 26px; height: 26px; ' .. template('Lang', { ['ar'] = 'float: left; right: 86px;', -- English and default ['en'] = 'float: right; left: 86px;', }) .. ' position: absolute; top: 6px;">' local icon_end = '</div>' return icon_begin .. '[[File:' .. image .. '.png|25px|link=' .. image_link .. template('if lang') .. ']]' .. icon_end end -- The main item image (and link) function get_main_image(args) local image local image_link = args['item-name'] if args['custom-icon'] then image = args['custom-icon'] image_link = '{{{BASEPAGENAME}}' elseif args['grade'] and args['wear'] then image = 'Backpack ' .. args['item-name'] .. ' ' .. args['item-kind'] .. ' ' .. args['wear'] .. '.png' elseif args['festivized'] then image = 'Backpack Festivized ' .. args['item-name'] .. '.png' elseif args['item-name'] then image = 'Backpack ' .. args['item-name'] .. '.png' else image = 'Backpack Unknownweapon.png' end wikitext = '[[File:' .. image .. '|90x90px' if args['file-link'] ~= nil then wikitext = wikitext .. '|link=' .. image_link end return wikitext .. ']]' end -- The color and font for the full name of the item function get_full_item_name_style(args) local color if args['custom-color'] then color = args['custom-color'] elseif grade_colors[args['grade']] then style = '#' .. grade_colors[args['grade']] elseif quality_colors[args['quality']] then style = '#' .. quality_colors[args['quality']] else style = '#' .. quality_colors['unique'] end local style = 'color: ' .. color .. '; font-size:18px; line-height:16px; text-shadow: 2px 1px 1px #24201B; font-family:' -- Specific fonts for some languages that aren't supported by the standard TF2 Build font. style = style .. template('Lang', { ['ar'] = 'مبنيات TF2, bold;', ['en'] = 'TF2 Build, Verdana, Geneva, sans-serif;', ['hu'] = 'Verdana, Geneva, sans-serif; font-weight: bold;', ['ja'] = 'TF2 Build, Shin Go, Heisei Kaku Gothic W5; font-weight: bold;', ['ko'] = 'Pathang, sans-serif, Totum, Kodig, serif; font-weight: bold;', ['zh-hans'] = 'SimSum-18030, SimHei, serif; font-weight: bold;', ['zh-hant'] = 'JhengHei, Verdana, JhengHei, JhengHei, sans-serif; font-weight: bold;', }) return style end -- The full name of the item, including any prefixes and suffixes function get_full_item_name(args) if args['custom-name'] then if args['no-custom-name-quotes'] == 'yes' then return args['custom_name'] else return '"' .. args['custom-name'] .. '"' end end -- A list of strings which mean "don't show" rather than "use me" local negatives = { ['none'] = true, ['no'] = true, ['0'] = true, ['false'] = true, ['hide'] = true, ['negative'] = true, [''] = true, } -- A function for handling args['prefix'] local prefix = function(default) if negatives[args['prefix']] then return '' elseif args['prefix'] ~= nil then return args['prefix'] .. ' ' elseif default == nil then return '' else return default end end -- A function for handling args['suffix'] local suffix = function(default) if negatives[args['suffix']] then return '' elseif args['suffix'] ~= nil then return args['suffix'] elseif default == nil then return '' else return default end end -- Step 1: Precompute a bunch of language-aware strings local filter = '' local festivized = '' local killstreak = '' local quality = '' if args['filter'] then filter = template('Item name', 'from ' .. args['filter']) .. ' ' end local item_name if args['item-name-local'] then item_name = args['item-name-local'] .. ' ' else item_name = template('Item name', args['item-name']) .. ' ' end -- Step 2: Compute the quality string, with some slight modifications per language -- TODO: There are many more language modifications. Let's take it slow, though. if args['quality'] == 'unique' or args['quality'] == 'normal' then -- Unique and Normal weapons do not get a prefix. elseif args['quality'] == 'strange' then quality = template('Strange rank name', {['item-name']=args['item-name'], rankson=args['rankson'], kills=args['killcount']}) .. ' ' elseif args['quality'] ~= nil then -- Not one of the above qualities, default to the quality name. Lang probably strips it anyways. quality = template('Item name', args['quality']) .. ' ' end -- Step 3: Allow individual languages to specify how to order the strings -- TODO: Definitely look these up. return template('Lang', { -- ['cs'] = -- ['da'] = -- ['de'] = ['en'] = prefix(quality .. festivized .. filter .. killstreak) .. item_name .. suffix(), -- ['es'] = -- ['fi'] = -- ['fr'] = -- ['hu'] = -- ['it'] = -- ['ja'] = -- ['ko'] = -- ['nl'] = -- ['no'] = -- ['pl'] = -- ['pt'] = -- ['pt-br'] = -- ['ro'] = -- ['ru'] = -- ['sv'] = -- ['tr'] = -- ['zh-hans'] = -- ['zh-hant'] = -- ["ar"] = prefix() .. item_name .. suffix(quality), -- ["ru"] = prefix() .. item_name .. suffix(filter .. quality), }) end -- The full level of the item, including any strange suffixes, wears, grades, etc function get_full_item_level(args) if args['no-level'] == 'yes' then return '' end -- Step 1: Precompute a bunch of language-aware strings local limited = '' local item_kind = '' local grade = '' local wear = '' local rankson = '' local strange_rank_name = '' local item_level = '' -- Adapted from WebAPI -- Missing languages: fi, fr, ja, nl -- Self translated: none if args['limited'] then -- mark limited = '[[Limited Quantity' .. template('If lang') .. '|<span style="color:yellow; hover:yellow">' .. template('Lang', { ['cs'] = 'Limitovaný', ['da'] = 'Begrænset', ['de'] = 'Limitiert:', ['en'] = 'Limited', ['es'] = 'de Edición Limitada', ['hu'] = 'Limitált', -- No space ['it'] = 'Edizione limitata', ['ko'] = '한정', ['nl'] = 'Beperkt', -- No space ['no'] = 'Begrenset', -- No space ['pl'] = 'Biały Kruk', ['pt'] = 'de Edição Limitada', ['pt-br'] = 'Edição Limitada', ['ro'] = 'Limitat', -- No space ['ru'] = 'ограниченной серии', ['sv'] = 'Begränsad', -- No space ['tr'] = 'Sınırlı', -- No space ['zh-hans'] = '限量', -- No space ['zh-hant'] = '限量版', -- No space }) .. '</span>]] ' -- Option 1: Use -- Option 2: Have follow-up if lang() (if == specific -- do nothing else foo = foo .. ' ' end) -- Option 3: Require spaces in the main template. I'm not super happy about this idea, but it would work. end if args['item-kind'] then item_kind = args['item-kind'] .. ' ' end if args['grade'] then grade = template('Decorated name', args['grade'] .. ' grade') .. ' ' item_kind = template('Item name', item_kind) .. ' ' end if args['wear'] then -- TODO: Pull in the parens() function wear = '(' .. template('Decorated name', args['wear']) .. ')' .. ' ' end if args['rankson'] then strange_rank_name = template('Strange rank name', {['item-name']=args['item-name'], rankson=args['rankson'], kills=args['killcount']}) .. ' ' rankson = '- ' .. template('Item name', args['rankson']) .. ': ' .. args['killcount'] .. ' ' for n = 2, 10 do if args['rankson' .. n] then if args['killcount' .. n] == nil then args['killcount' .. n] = 0 end rankson = rankson .. '<br>(' .. template('Item name', args['rankson' .. n]) .. ': ' .. args['killcount' .. n] .. ')' end end end -- Adapted from WebAPI -- Missing languages: de, fi, nl -- Self translated: none if args['item-level'] then item_level = args['item-level'] if args['item-kind'] then item_level = template('Lang', { -- mark ['cs'] = '(úroveň ' .. item_level .. ')', ['da'] = 'Niveau ' .. item_level, ['en'] = 'Level ' .. item_level, ['es'] = 'de Nivel ' .. item_level, ['fr'] = 'niveau ' .. item_level, ['hu'] = item_level .. '. szintű', ['it'] = '- Livello ' .. item_level, ['ja'] = 'レベル ' .. item_level, ['ko'] = '레벨 ' .. item_level, ['no'] = item_level .. ' - Nivå 10', -- Verify ['pl'] = 'poziomu ' .. item_level, ['pt'] = '- Nível ' .. item_level, ['pt-br'] = 'nível ' .. item_level, ['ro'] = 'de Nivel ' .. item_level, ['ru'] = item_level .. '-го уровня', ['sv'] = 'Nivå ' .. item_level, ['tr'] = 'Seviye ' .. item_level, ['zh-hans'] = '等级' .. item_level, ['zh-hant'] = '等級' .. item_level, }) .. ' ' end -- Do this after the item-kind switch, since item level is sometimes suffixed. item_level = item_level .. ' ' end -- Step 2: Allow individual languages to specify how to order the strings -- Note that there are essentially three types of weapon levels: Strange, Grade/Wear, and default. local full_item_level if strange_rank_name ~= '' then -- Adapted from WebAPI -- Missing translation: fi, fr (limited is missing), pl -- Self translated: none full_item_level = template('Lang', { -- mark ['cs'] = limited .. strange_rank_name .. item_kind .. rankson, ['da'] = limited .. item_kind .. strange_rank_name .. rankson, ['de'] = limited .. item_kind .. strange_rank_name .. rankson, ['en'] = limited .. strange_rank_name .. item_kind .. rankson, ['es'] = item_kind .. strange_rank_name .. limited .. rankson, ['fr'] = item_kind .. strange_rank_name .. rankson, ['hu'] = limited .. strange_rank_name .. item_kind .. rankson, ['it'] = item_kind .. '- ' .. limited .. strange_rank_name .. rankson, ['ja'] = limited .. strange_rank_name .. item_kind .. rankson, ['ko'] = limited .. strange_rank_name .. item_kind .. rankson, ['nl'] = limited .. strange_rank_name .. item_kind .. rankson, ['no'] = limited .. item_kind .. strange_rank_name .. rankson, ['pt'] = item_kind .. strange_rank_name .. limited .. rankson, ['pt-br'] = item_kind .. strange_rank_name .. limited .. rankson, ['ro'] = limited .. strange_rank_name .. item_kind .. rankson, ['ru'] = item_kind .. strange_rank_name .. limited .. rankson, ['sv'] = limited .. strange_rank_name .. item_kind .. rankson, ['tr'] = limited .. strange_rank_name .. item_kind .. rankson, ['zh-hans'] = limited .. strange_rank_name .. item_kind .. rankson, ['zh-hant'] = limited .. strange_rank_name .. item_kind .. rankson, }) elseif grade ~= '' then -- Adapted from WebAPI -- Missing translation: all -- Self translated: none --[[ full_item_level = template('Lang', { ['cs'] = ['da'] = ['de'] = ['en'] = grade .. item_kind .. wear, ['es'] = ['fi'] = ['fr'] = ['hu'] = ['it'] = ['ja'] = ['ko'] = ['nl'] = ['no'] = ['pl'] = ['pt'] = ['pt-br'] = ['ro'] = ['ru'] = ['sv'] = ['tr'] = ['zh-hans'] = ['zh-hant'] = }) ]] full_item_level = grade .. item_kind .. wear else -- Adapted from WebAPI -- Missing translation: all -- Self translated: none --[[ full_item_level = template('Lang', { ['cs'] = ['da'] = ['de'] = ['en'] = limited .. item_level .. item_kind, ['es'] = ['fi'] = ['fr'] = ['hu'] = ['it'] = ['ja'] = ['ko'] = ['nl'] = ['no'] = ['pl'] = ['pt'] = ['pt-br'] = ['ro'] = ['ru'] = ['sv'] = ['tr'] = ['zh-hans'] = ['zh-hant'] = }) ]] full_item_level = limited .. item_level .. item_kind end -- Step 3: Add coloring for certain types local color = '#756B5E' if args['limited'] then color = 'yellow' elseif grade_colors[args['grade']] then color = '#' .. grade_colors[args['grade']] end return '<span style="color: ' .. color .. '">' .. full_item_level .. '</span>' end -- Adapted from WebAPI -- Missing translation: none -- Self translated: none function get_unusual_effect(args) local unusual_effect = template('Lang', { ['cs'] = 'Unusual efekt: ' .. args['unusual-effect'], ['da'] = 'Usædvanlig effekt: ' .. args['unusual-effect'], ['de'] = 'Ungewöhnlicher Effekt: ' .. args['unusual-effect'], ['en'] = 'Unusual Effect: ' .. args['unusual-effect'], ['es'] = 'Efecto Inusual: ' .. args['unusual-effect'], ['fi'] = 'Epätavallinen tehoste: ' .. args['unusual-effect'], ['fr'] = 'Effet inhabituel : ' .. args['unusual-effect'], ['hu'] = 'Rendkívüli effekt: ' .. args['unusual-effect'], ['it'] = 'Effetto Insolito: ' .. args['unusual-effect'], ['ja'] = 'アンユージュアルエフェクト: ' .. args['unusual-effect'], ['ko'] = '범상찮은 효과: ' .. args['unusual-effect'], ['nl'] = 'Bijzonder effect: ' .. args['unusual-effect'], ['no'] = 'Rendkívüli effekt: ' .. args['unusual-effect'], ['pl'] = 'Nietypowy efekt: ' .. args['unusual-effect'], ['pt'] = 'Efeito Inusual: ' .. args['unusual-effect'], ['pt-br'] = 'Efeito Incomum: ' .. args['unusual-effect'], ['ro'] = 'Efect neobișnuit: ' .. args['unusual-effect'], ['ru'] = 'Эффект необычного типа: ' .. args['unusual-effect'], ['sv'] = 'Ovanlig Effekt: ' .. args['unusual-effect'], ['tr'] = 'Olağandışı Efekt: ' .. args['unusual-effect'], ['zh-hans'] = '特殊效果:' .. args['unusual-effect'], ['zh-hant'] = '異常效果:' .. args['unusual-effect'], }) return '<br><font color="#8650AC">★ ' .. unusual_effect .. '</font>' end -- Adapted from WebAPI -- Missing translation: none -- Self translated: none function get_gift_from(args) local gift_from = template('Lang', { ['cs'] = 'Dárek od: ' .. args['gift_from'], ['da'] = 'Gave fra: ' .. args['gift_from'] .. '.', ['de'] = 'Geschenk von: ' .. args['gift_from'], ['en'] = 'Gift from: ' .. args['gift_from'], ['es'] = 'Regalo de: ' .. args['gift_from'], ['fi'] = 'Lahjan alkuperä: ' .. args['gift_from'] .. '.', ['fr'] = 'Cadeau de : ' .. args['gift_from'], ['hu'] = '' .. args['gift_from'] .. ' adta ajándékba', ['it'] = 'Dono da parte di: ' .. args['gift_from'], ['ja'] = 'ギフト提供者:' .. args['gift_from'] .. '。', ['ko'] = '보낸 사람: ' .. args['gift_from'] .. '.', ['nl'] = 'Gekregen van: ' .. args['gift_from'] .. '.', ['no'] = 'Gave fra: ' .. args['gift_from'] .. '.', ['pl'] = 'Prezent od: ' .. args['gift_from'], ['pt'] = 'Presente de: ' .. args['gift_from'], ['pt-br'] = 'Presente de: ' .. args['gift_from'], ['ro'] = 'Cadou de la: ' .. args['gift_from'], ['ru'] = 'Подарок от: ' .. args['gift_from'], ['sv'] = 'Gåva från: ' .. args['gift_from'] .. '.', ['tr'] = 'Hediye eden: ' .. args['gift_from'], ['zh-hans'] = '赠送者:' .. args['gift_from'], ['zh-hant'] = '禮物來源:' .. args['gift_from'] .. '。', }) return '<br><br><span class="att_positive">' .. gift_from .. '</span>' end -- Adapted from WebAPI -- Missing translation: none -- Self translated: none function get_date_recieved(args) local date_recieved = template('Lang', { ['cs'] = 'Datum získání: ' .. args['date-recieved'], ['da'] = 'Dato modtaget: ' .. args['date-recieved'], ['de'] = 'Erhalten am: ' .. args['date-recieved'], ['en'] = 'Date Received: ' .. args['date-recieved'], ['es'] = 'Fecha de recepción: ' .. args['date-recieved'], ['fi'] = 'Vastaanottopäivämäärä: ' .. args['date-recieved'], ['fr'] = 'Date de réception : ' .. args['date-recieved'], ['hu'] = 'Ekkor kaptad: ' .. args['date-recieved'], ['it'] = 'Data Ricezione: ' .. args['date-recieved'], ['ja'] = '受領日:' .. args['date-recieved'], ['ko'] = '받은 날짜: ' .. args['date-recieved'], ['nl'] = 'Datum ontvangen: ' .. args['date-recieved'], ['no'] = 'Dato mottatt: ' .. args['date-recieved'], ['pl'] = 'Data otrzymania: ' .. args['date-recieved'], ['pt'] = 'Data de Receção: ' .. args['date-recieved'], ['pt-br'] = 'Data de recebimento: ' .. args['date-recieved'], ['ro'] = 'Data primirii: ' .. args['date-recieved'], ['ru'] = 'Дата получения: ' .. args['date-recieved'], ['sv'] = 'Datum Mottaget: ' .. args['date-recieved'], ['tr'] = 'Alma Tarihi: ' .. args['date-recieved'], ['zh-hans'] = '授勋日期:' .. args['date-recieved'], ['zh-hant'] = '收到日期:' .. args['date-recieved'], }) return '<br><span class="att_neutral">' .. date_recieved .. '</span>' end -- Adapted from WebAPI -- Missing translation: none -- Self translated: ar, ja function get_item_expiration(args) local item_expiration = template('Lang', { ['ar'] = 'البند تنتهي في وسوف ' .. args['item-expiration'] .. '.', ['cs'] = 'Tento předmět vyprší v ' .. args['item-expiration'] .. '.', ['da'] = 'Denne genstand vil udløbe d. ' .. args['item-expiration'] .. '.', ['de'] = 'Dieser Gegenstand wird am ' .. args['item-expiration'] .. ' ablaufen.', ['en'] = 'This item will expire on ' .. args['item-expiration'] .. '.', ['es'] = 'Este objeto caducará el ' .. args['item-expiration'] .. '.', ['fi'] = 'Esineen erääntymispäivä: ' .. args['item-expiration'] .. '.', ['fr'] = 'Cet objet expirera le ' .. args['item-expiration'] .. '.', ['hu'] = 'Ez a tárgy ' .. args['item-expiration'] .. ' időpontban lejár.', ['it'] = 'Scadenza per questo oggetto: ' .. args['item-expiration'], ['ja'] = 'このアイテムは ' .. args['item-expiration'] .. 'に消滅します。', ['ko'] = '이 아이템은 ' .. args['item-expiration'] .. '에 파기됩니다.', ['nl'] = 'Dit voorwerp verloopt op ' .. args['item-expiration'] .. '.', ['no'] = 'Denne gjenstanden utløper den ' .. args['item-expiration'] .. '.', ['pl'] = 'Ważność tego przedmiotu wygaśnie w dniu ' .. args['item-expiration'] .. '.', ['pt'] = 'Este item irá expirar em ' .. args['item-expiration'] .. '.', ['pt-br'] = 'Este item expirará em ' .. args['item-expiration'] .. '.', ['ro'] = 'Acest obiect va expira la ' .. args['item-expiration'] .. '.', ['ru'] = 'Этот предмет исчезнет ' .. args['item-expiration'] .. '.', ['sv'] = 'Det här föremålet kommer att upphöra den ' .. args['item-expiration'] .. '.', ['tr'] = 'Son kullanma tarihi: ' .. args['item-expiration'], ['zh-hans'] = '这件物品将于' .. args['item-expiration'] .. '过期。', ['zh-hant'] = '此物品將會在' .. args['item-expiration'] .. '到期。', }) return '<br><br><span class="att_negative" style="line-height:1.2em; font-size:95%; width:80%;">' .. item_expiration .. '</span>' end -- Adapted from localization files in the GCF files -- Missing translations: none -- Self translated: ar function get_item_uses(args) local item_uses = template('Lang', { ['ar'] = 'هذا الأيتم يستخدم لفترة محدودة: ' .. args['item-uses'] .. '.', ['cs'] = 'Tento předmět má omezený počet použití. Použití: ' .. args['item-uses'], ['da'] = 'Dette er en genstand med begrænset anvendelse. Anvendelser: ' .. args['item-uses'], ['de'] = 'Dies ist ein Gegenstand mit beschränkter Anwendung. Verbleibende Anwendungen: ' .. args['item-uses'] .. '.', ['en'] = 'This is a limited use item. Uses: ' .. args['item-uses'], ['es'] = 'Objeto con límite de usos. Usos restantes: ' .. args['item-uses'], ['fi'] = 'Rajoitetun käytön esine. Käyttöjä jäljellä: ' .. args['item-uses'] .. '.', ['fr'] = 'Cet objet a un nombre d\'utilisations limité. Utilisations restantes : ' .. args['item-uses'], ['hu'] = 'A tárgy használatainak száma korlátozott. Használatok: ' .. args['item-uses'], ['it'] = 'Questo è un oggetto a uso limitato. Utilizzi rimasti: ' .. args['item-uses'] .. '.', ['ja'] = '使用回数制限アイテム。残り使用回数:' .. args['item-uses'] .. '。', ['ko'] = '사용 횟수가 제한된 아이템으로 ' .. args['item-uses'] .. '번 사용할 수 있습니다.', ['nl'] = 'Dit voorwerp kun je maar een beperkt aantal keren gebruiken. Resterend: ' .. args['item-uses'], ['no'] = 'Denne gjenstanden har begrenset bruk. Gjenstående bruk: ' .. args['item-uses'], ['pl'] = 'Ten przedmiot ma ograniczoną liczbę użyć. Pozostało: ' .. args['item-uses'], ['pt'] = 'Este é um item de utilização limitada. Usos: ' .. args['item-uses'] .. '.', ['pt-br'] = 'Este é um item de uso limitado. Usos: ' .. args['item-uses'], ['ro'] = 'Acesta este un obiect cu număr limitat de utilizări. Utilizări: ' .. args['item-uses'], ['ru'] = 'Число использований ограничено. Осталось: ' .. args['item-uses'] .. ' раз(а)', ['sv'] = 'Det här föremålet har begränsad användning. Gånger kvar: ' .. args['item-uses'], ['tr'] = 'Bu eşyanın kullanım sınırı vardır. Kullanım: ' .. args['item-uses'], ['zh-hans'] = '此物品使用次数有限。剩余次数:' .. args['item-uses'], ['zh-hant'] = '這是有使用限制的物品。剩餘使用次數:' .. args['item-uses'], }) return '<br><br><span class="att_uses">' .. item_uses .. '</span>' end function p.backpack_item(f) frame = f -- TODO: Trying this, it may not work. local args = f.args if #args == 0 then args = f.args end -- Setting some defaults for parameters if args['width'] == nil then args['width'] = '100%' end if args['style'] == nil then args['style'] = '' end if args['killcount'] == nil then args['killcount'] = 0 end if args['item-level'] == nil then args['item-level'] = '1-100' end -- Normalize some parameters if args['quality'] ~= nil then args['quality'] = args['quality']:lower() end if args['grade'] ~= nil then args['grade'] = args['grade']:lower() end if args['no-custom-name-quotes'] ~= nil then args['no-custom-name-quotes'] = args['no-custom-name-quotes']:lower() end if args['prefix'] ~= nil then args['prefix'] = args['prefix']:lower() end if args['suffix'] ~= nil then args['suffix'] = args['suffix']:lower() end -- Define the div for the darker, background box with rounded corners body = '<div style="text-align: center; background: #24201B; width: ' .. args['width'] .. '; -moz-border-radius: 10px; border-radius: 10px; padding:7px 0px; ' .. args['style'] .. '">' -- Add the div for the lighter, foreground box which holds the item image -- TODO: <center>? This is probably not needed. body = body .. '<center><div style="align:center; width: 120px; height: 90px; -moz-border-radius: 10px; border-radius: 10px; background: #3C362F; margin-bottom: 5px; border: 0px #847668 solid; position:relative;">' body = body .. get_corner_icon(args) body = body .. get_main_image(args) -- End of foreground box body = body .. '</div></center>' -- Add a transparent div for the text. body = body .. '<div style="-moz-border-radius: 10px; border-radius: 10px; background: transparent; padding: 5px; margin: 0px 7px;">' -- Add the main item name (and style) body = body .. '<span style="' .. get_full_item_name_style(args) .. '">' .. get_full_item_name(args) .. '</span>' -- Add a div for the secondary attributes body = body .. '<div style="font-family: ' .. template('Lang', { -- Specific fonts for some languages that aren't supported by the standard TF2 Secondary font. --> ['en'] = 'TF2 Secondary, Verdana, Geneva, sans-serif;', ['hu'] = 'Verdana, Genva, sans-serif; font-weight: bold;', ['ja'] = 'TF2 Secondary, Shin Go, Heisei Kaku Gothic W5; font-weight: bold;', ['ko'] = 'Pathang, sans-serif, Totum, Kodig, serif; font-weight: bold;', ['zh-hans'] = 'SimSum-18030, SimHei, serif;', ['zh-hant'] = 'JhengHei, JhengHei, sans-serif;', }) .. 'font-size: 15px">' body = body .. get_full_item_level(args) -- Something legacy with strange-secondary and att-strangerank? if args['unusual-effect'] then body = body .. get_unusual_effect(args) end for n = 1, 8 do if args['att-' .. n .. '-positive'] then body = body .. '<br><span class="att_positive">' .. args['att-' .. n .. '-positive'] .. '</span>' elseif args['att-' .. n .. '-negative'] then body = body .. '<br><span class="att_negative">' .. args['att-' .. n .. '-negative'] .. '</span>' elseif args['att-' .. n .. '-neutral'] then body = body .. '<br><span class="att_neutral">' .. args['att-' .. n .. '-neutral'] .. '</span>' end end local item_description if args['custom-description'] then item_description = '"' .. args['custom-description'] .. '"' elseif args['item-description'] then item_description = args['item-description'] end if item_description ~= nil then -- TODO: Span containing just an nbsp? Why? body = body .. '<br><span style="line-height: 0.3em;"> </span>' body = body .. '<br><span class="att_neutral" style="line-height: 1.2em; font-size: 95%; width: 80%;">' .. item_description .. '</span>' end if args['gift-from'] then body = body .. get_gift_from(args) if args['date-recieved'] then body = body .. get_date_recieved(args) end end if args['item-expiration'] then body = body .. get_item_expiration(args) end if args['item-uses'] then body = body .. get_item_uses(args) end if args['item-flags'] then body = body .. '<br><br><span class="att_neutral">(' .. args['item-flags'] .. ')</span>' end -- End of secondary attributes div -- End of transparent div -- End of darker, background box body = body .. '</div></div></div>' return body end return p