| 此模块基于Lua语言实现,使用以下模块: |
由于{{Pokemon top}}定义了本模板使用的部分样式,因此在使用本模板时请搭配{{Pokemon top}}使用。
项目填写繁简皆可。由于技术限制,中文请填写简体中文,具体可参照Module:Pokemon Number/Data的写法。
{{Pokemon Infobox
|中文 =
|日文 =
|英文 =
|image =
|编号 =
|gen =
|type1 =
|type2 =
|旧译 =
|常用称呼 =
|分类 =
|特性 =
|隐藏特性 =
|身高 =
|体重 =
|性别比例 =
|蛋群 =
|进化链 =
|声优 =
|多位声优 =
|萌点 =
|相关条目 =
}}
|
{{Pokemon Infobox
|中文 =
|日文 =
|英文 =
|image =
|編號 =
|gen =
|type1 =
|type2 =
|舊譯 =
|常用稱呼 =
|分類 =
|特性 =
|隱藏特性 =
|身高 =
|體重 =
|性別比例 =
|蛋群 =
|進化鏈 =
|聲優 =
|多位聲優 =
|萌點 =
|相關條目 =
}}
|
为了避免冲突,请将不使用的参数删去。
如果在娘化条目中使用本模板,请添加参数“|娘 = 娘”。
对于原型条目,参数“image”是可选的。如果不填写,模板将使用默认的文件名。对于娘化条目,如果不填写参数“image”将会被添加分类Category:无设定图的娘化条目。
参数“gen”为引入的世代,由于第七世代开始出现世代内增加宝可梦的情况,请按需要填写“gen = 7-2”(究极之日/究极之月)、“gen = 7-3”(Let's Go! 皮卡丘/Let's Go! 伊布)等。
参数“声优”会向条目中加入声优的链接和及分类;如有多位声优,请使用参数“多位声优”并手动添加链接和分类。
使用本模板会自动向条目内添加以下分类:
|娘 = 娘”)type1”和“type2”添加)gen”添加,仅添加最初登场的世代,新形态暂时不加入)如需要修改,请直接修改模板,以方便维护。
对于有多种形态的宝可梦,请用“formx”区分形态名,其中“x”为形态数字;“英文x”区分形态英文名(用于自动生成图片名);属性、分类、特性、身高、体重、进化链均可区分形态。需要注意,如果多种形态无第二属性,对应的参数需要留空。
由于地区图鉴会根据游戏发售更新,故将此部分数据模块化,如需修改,请直接修改Module:Pokemon Number/Data。地区图鉴的相关参数不再使用。
{{Pokemon Infobox
|中文 = 妙蛙种子
|日文 = フシギダネ
|英文 = Bulbasaur
|旧译 = 奇异种子
|常用称呼 = {{黑幕|蒜头王八}}
|编号 = 001
|gen = 1
|type1 = 草
|type2 = 毒
|分类 = 种子
|特性 = 茂盛
|隐藏特性 = 叶绿素
|身高 = 0.7 m
|体重 = 6.9 kg
|性别比例 = 雄性:雌性 = 7:1
|蛋群 = 怪兽/植物
|声优 = 林原惠
|进化链 = [[妙蛙种子]]→[[妙蛙草]]→[[妙蛙花]]
|关联条目 = 同组御三家:[[小火龙]]、[[杰尼龟]]
|info = true
}}
{{Pokemon Infobox
|中文 = 喷火龙
|日文 = リザードン
|英文 = Charizard
|常用称呼 = 老喷、{{黑幕|[[增田顺一|增]]火龙}}
|编号 = 006
|gen = 1
|gen2 = 6
|gen3 = 6
|gen4 = 8
|form1 = 喷火龙
|form2 = 超级喷火龙X
|form3 = 超级喷火龙Y
|form4 = 超极巨喷火龙
|英文2 = Mega X
|英文3 = Mega Y
|英文4 = Gigantamax
|type1 = 火
|type2 = 飞行
|type2-2 = 龙
|分类 = 火焰
|特性 = 猛火
|特性2 = 硬爪
|特性3 = 日照
|隐藏特性 = 太阳之力
|隐藏特性2 =
|隐藏特性3 =
|身高 = 1.7 m
|身高4 = 28.0+ m
|体重 = 90.5 kg
|体重2 = 110.5 kg
|体重3 = 100.5 kg
|体重4 = ???.? kg
|性别比例 = 雄性:雌性 = 7:1
|蛋群 = 怪兽/龙
|声优 = 三木真一郎
|进化链 = [[小火龙]]→[[火恐龙]]→[[喷火龙]]
|info = true
}}
local p = {}
local getArgs = require('Module:Arguments').getArgs
local getDexNumber = require('Module:Pokemon Number').main
local error = require('Module:Error').error
local dexNumbers = require('Module:Pokemon Number/Data')
local typeColors = require('Module:Pokemon Color').typeColors
local getTypeColor = function(type)
return typeColors[type] or '68a090'
end
local debut_game = {
['1'] = 'RG',
['1-2'] = 'Bl',
['1-3'] = 'Ye',
['2'] = 'GS',
['2-2'] = 'C',
['3'] = 'RS',
['3-2'] = 'FRLG',
['3-3'] = 'E',
['4'] = 'DP',
['4-2'] = 'Pt',
['4-3'] = 'HGSS',
['5'] = 'BW',
['5-2'] = 'B2W2',
['6'] = 'XY',
['6-2'] = 'ORAS',
['7'] = 'SM',
['7-2'] = 'USUM',
['7-3'] = 'LPLE',
['8'] = 'SWSH',
['8-2'] = 'BDSP',
['8-3'] = 'LA',
['9'] = 'SV',
['9-2'] = 'ZA',
['10'] = 'WW',
}
local debut_generation = {
'一',
'二',
'三',
'四',
'五',
'六',
'七',
'八',
'九',
'十',
}
local arguments_configuration = {
{ '基本资料', {
{ '编号', function(frame, args)
return args['index'] or '???'
end },
{ '初次登场', function(frame, args)
return '{{Pokemon Game|' .. (debut_game[args['gen']]) .. '}}'
end },
{ '中文名', function(frame, args)
return (args['中文'] or '{{PAGENAME}}') .. (args['娘'] or '')
end },
{ '日文名', function(frame, args)
return '{{lang|ja|' .. args['日文'] .. '}}'
end },
{ '英文名', function(frame, args)
return '{{lang|en|' .. args['英文'] .. '}}'
end },
{ '旧译', function(frame, args)
return args['旧译'] or args['舊譯'] or ''
end },
{ '常用称呼', function(frame, args)
return args['常用称呼'] or args['常用稱呼'] or ''
end },
{ '属性', function(frame, args)
local output = {
'{{Pokemon Type|' .. args['type1'] .. '}}{{ArticleCategory|' .. args['type1'] .. '属性宝可梦}}',
}
local type2 = args['type2'] or ''
if type2 ~= '' then
table.insert(output, '{{Pokemon Type|' .. type2 .. '}}{{ArticleCategory|' .. type2 .. '属性宝可梦}}')
end
return table.concat(output, '')
end },
{ '分类', function(frame, args)
return (args['分类'] or args['分類'] or '未知') .. '宝可梦'
end },
{ '特性', function(frame, args)
return args['特性'] or '无'
end },
{ '隐藏特性', function(frame, args)
return args['隐藏特性'] or args['隱藏特性'] or ''
end },
{ '身高', function(frame, args)
return args['身高'] or '未知'
end },
{ '体重', function(frame, args)
return args['体重'] or args['體重'] or '未知'
end },
{ '进化链', function(frame, args)
return args['进化链'] or args['進化鏈'] or ''
end },
{ '地区图鉴', function(frame, args)
local child = frame:newChild({ args = { args['中文'] or '{{PAGENAME}}' } })
return getDexNumber(child)
end },
{ '原型', function(frame, args)
local isMoegirl = args['娘'] or ''
if isMoegirl ~= '' then
return args['原型'] or ('[[' .. (args['中文'] or '{{PAGENAME}}') .. ']]')
else
return ''
end
end },
{ '性别比例', function(frame, args)
local isMoegirl = args['娘'] or ''
if isMoegirl == '' then
return args['性别比例'] or args['性別比例'] or '未知'
else
return ''
end
end },
{ '蛋群', function(frame, args)
local isMoegirl = args['娘'] or ''
if isMoegirl == '' then
return args['蛋群'] or '未知'
else
return ''
end
end },
{ '声优', function(frame, args)
local cv = args['声优'] or args['聲優'] or ''
if cv ~= '' then
return '{{声优|' .. cv .. '}}'
else
return args['多位声优'] or args['多位聲優'] or ''
end
end },
{ '萌点', function(frame, args)
return args['萌点'] or args['萌點'] or ''
end },
} },
{ '相关条目', {
{ '_', function(frame, args)
return args['相关条目'] or args['相關條目'] or ''
end },
} },
{ '注释', {
{ '_', function(frame, args)
return args['注释'] or args['註釋'] or ''
end },
} },
{ '相关链接', {
{ '_', function(frame, args)
local name = args['中文'] or mw.title.getCurrentTitle().text
local encoded_name = mw.uri.encode(name)
local result = {
'* [[cm:Category:{{PAGENAME}}|萌娘共享上的图片]]',
'* [https://wiki.52poke.com/wiki/' .. encoded_name .. ' 神奇宝贝百科上的资料]'
}
local index = args['index']
if index then
table.insert(result,
'* -{zh-cn:[https://pokedex.pokemon.cn/play/pokedex/' ..
index ..
' 宝可梦官网上的介绍];zh-tw:[https://tw.portal-pokemon.com/play/pokedex/' ..
index .. ' 寶可夢官網上的介紹];zh-hk:[https://hk.portal-pokemon.com/play/pokedex/' .. index .. ' 寶可夢官網上的介紹];}-')
end
if dexNumbers['paldea'][name] or dexNumbers['kitakami'][name] or dexNumbers['blueberry'][name] then
table.insert(result, '* [https://sv.xzonn.top/wiki/%E5%BD%A2%E6%80%81:' .. encoded_name .. '-0 朱紫数据库上的资料]')
end
if dexNumbers['lumiose'][name] or dexNumbers['hyperspace'][name] then
table.insert(result, '* [https://za.xzonn.top/p/' .. encoded_name .. ' Z-A数据库上的资料]')
end
local external_links = args['外部链接'] or args['外部連結'] or ''
if external_links ~= '' then
table.insert(result, external_links)
end
return table.concat(result, '\n')
end },
} },
}
function p._form(frame, args)
local output = {
float = 'none',
['m-width'] = '320px',
['m-color'] = '#222; margin: 0',
['l-color'] = '#fff',
title = args['中文'] or '{{PAGENAME}}',
}
local color1 = getTypeColor(args['type1'] or '')
local color2 = getTypeColor(args['type2'] or args['type1'] or '')
output['top-bcolor'] = '#' .. color1
output['t-bcolor'] = '#' .. color1
output['l-bcolor'] = '#' .. color2
local image_name = args['image'] or ''
if image_name == '' then
image_name = 'Pokemon_Gen' .. args['gen'] .. '_' .. args['英文'] .. (args['image_suffix'] or '') .. '.png'
end
output['image'] = image_name
for _, group in ipairs(arguments_configuration) do
local group_name = group[1]
local active = false
for _, item in ipairs(group[2]) do
local key, processor = nil, nil
if type(item) == 'table' then
key = item[1]
processor = item[2]
else
key = item
end
local value = nil
if processor then
value = processor(frame, args)
else
value = args[key] or ''
end
if value and value ~= '' then
if not active then
table.insert(output, '- :: ' .. group_name)
active = true
end
table.insert(output, key .. ' :: ' .. frame:preprocess(value))
end
end
end
return frame:expandTemplate {
title = 'Infobox3',
args = output,
}
end
function p._main(frame, args)
local missing_parameters = {}
local check_parameter = function(key, default_value)
if not args[key] then
table.insert(missing_parameters, key)
args[key] = default_value or '???'
end
end
check_parameter('gen', '1')
check_parameter('type1', '一般')
check_parameter('日文', '???')
check_parameter('英文', '???')
local index = args['编号'] or args['編號'] or '???'
if index ~= '???' then
args['index'] = mw.ustring.format('%04d', tonumber(index))
end
local tabs_output = {
color = 'white',
style = 'float: right; clear: right; margin: 0 0 1em 1em; width: 332px;',
TextPadding = '0',
TextBorderColor = 'transparent',
bt1 = args['中文'] or '{{PAGENAME}}',
tab1 = p._form(frame, args),
}
local color1 = getTypeColor(args['type1'] or '')
local color2 = getTypeColor(args['type2'] or args['type1'] or '')
tabs_output['LabelBorderColor'] = '#' .. color1
tabs_output['LabelColor'] = '#' .. color2
local i = 2
while true do
local form_name = args['form' .. i] or ''
if form_name == '' then
break
end
local form_args = {
type1 = args['type1-' .. i] or args['type1'],
type2 = args['type2-' .. i] or args['type2'],
}
for k, v in pairs(args) do
if k:sub(1, 4) == 'type' then
-- 已经处理过了
else
local suffix = '' .. i
if args[k .. suffix] then
form_args[k] = args[k .. suffix]
else
form_args[k] = v
end
end
end
form_args['英文'] = args['英文']
if form_args['英文' .. i] then
form_args['image_suffix'] = '_' .. form_args['英文' .. i]
end
tabs_output['bt' .. i] = form_name
tabs_output['tab' .. i] = p._form(frame, form_args)
i = i + 1
end
local info_table = {
'{{ArticleCategory|宝可梦' .. (args['娘'] and '娘化' or '') .. '}}',
'{{ArticleCategory|第' .. debut_generation[tonumber(mw.text.split(args['gen'], '-')[1]) or 1] .. '世代宝可梦}}',
}
if #missing_parameters > 0 then
table.insert(info_table,
error({ [['''{{tl|Pokemon Infobox}}缺失以下必要参数:]] .. table.concat(missing_parameters, '、') .. [[''']], tag = 'p' }))
end
if args['info'] then
table.insert(info_table,
"'''" ..
(args['中文'] or '{{PAGENAME}}') ..
"'''({{lang-ja|'''" ..
args['日文'] ..
"'''}},{{lang-en|'''" ..
args['英文'] .. "'''}})是[[宝可梦系列]]登场的宝可梦之一,最初登场于《{{PG|Pokemon|" .. debut_game[args['gen']] .. "}}》。")
end
local info = frame:preprocess(table.concat(info_table, ''))
if i == 2 then
return '<div style="' ..
tabs_output['style'] .. '"><div style="padding: 0 1px;">' .. tabs_output['tab1'] .. '</div></div>' .. info
else
return frame:expandTemplate {
title = 'Tabs',
args = tabs_output,
} .. info
end
end
function p.main(frame)
return p._main(frame, getArgs(frame, { removeBlanks = false }))
end
return p