更多操作
小无编辑摘要 |
小无编辑摘要 |
||
(未显示同一用户的4个中间版本) | |||
第13行: | 第13行: | ||
local fields = 'fighter,name,input,subtitle,caption,notation,dmg,meter,guard,properties,startup,active,recovery,hitstop,hitstun,blockstun,onhit,onblock,pic,hitbox' | local fields = 'fighter,name,input,subtitle,caption,notation,dmg,meter,guard,properties,startup,active,recovery,hitstop,hitstun,blockstun,onhit,onblock,pic,hitbox' | ||
local args = { | local args = { | ||
where = string.format('MoveData. | where = string.format('MoveData.fighter="%s" and MoveData.input="%s"', chara, input), | ||
orderBy = '_rowID', | orderBy = '_rowID', | ||
limit = "101", | limit = "101", | ||
第40行: | 第40行: | ||
end | end | ||
-- 生成包含招式信息的HTML代码 | -- 生成包含招式信息的HTML代码 | ||
local function getHTML( move, label, hitboxMode, imageNumber | local function getHTML( move, label, hitboxMode, imageNumber ) | ||
-- 创建一个tooltip类的span标签,若写入了@param2标签文本则显示,否则显示传入的move表中的input值 | -- 创建一个tooltip类的span标签,若写入了@param2标签文本则显示,否则显示传入的move表中的input值 | ||
local html = mw.html.create('span'):addClass('tooltip') | local html = mw.html.create('span'):addClass('tooltip') | ||
第72行: | 第72行: | ||
:tag('span'):addClass('tmp-items') | :tag('span'):addClass('tmp-items') | ||
:tag('span'):addClass('tmp-item') | :tag('span'):addClass('tmp-item') | ||
:tag('span'):addClass('tmp-item-label') | --[[:tag('span'):addClass('tmp-item-label') | ||
:wikitext('防御') | :wikitext('防御') | ||
:done() | :done()]] | ||
:tag('span'):addClass('tmp-item-data') | :tag('span'):addClass('tmp-item-data') | ||
:wikitext( move[' | :wikitext( move['notation'] ) | ||
:done() | :done() | ||
:done() | :done() | ||
:tag('span'):addClass('tmp-item') | :tag('span'):addClass('tmp-item') | ||
:tag('span'):addClass('tmp-item-label') | --[[:tag('span'):addClass('tmp-item-label') | ||
:wikitext('启动帧') | :wikitext('启动帧') | ||
:done() | :done()]] | ||
:tag('span'):addClass('tmp-item-data') | :tag('span'):addClass('tmp-item-data') | ||
:wikitext( move[' | :wikitext( move['name'] ) | ||
:done() | :done() | ||
:done() | :done() | ||
:tag('span'):addClass('tmp-item') | :tag('span'):addClass('tmp-itemm, tmp-item-colspan') | ||
:tag('span'):addClass('tmp-item-label') | --[[:tag('span'):addClass('tmp-item-label') | ||
:wikitext('收招帧') | :wikitext('收招帧') | ||
:done() | :done()]] | ||
:tag('span'):addClass('tmp-item-data') | :tag('span'):addClass('tmp-item-data') | ||
:wikitext( move[' | :wikitext( move['caption'] ) | ||
:done() | :done() | ||
:done() | :done() | ||
:tag('span'):addClass('tmp-item') | --[[:tag('span'):addClass('tmp-item') | ||
:tag('span'):addClass('tmp-item-label') | :tag('span'):addClass('tmp-item-label') | ||
:wikitext('加减帧') | :wikitext('加减帧') | ||
第102行: | 第102行: | ||
:wikitext( move['onblock'] ) | :wikitext( move['onblock'] ) | ||
:done() | :done() | ||
:done() | :done()]] | ||
:done() | :done() | ||
:done() | :done() | ||
第110行: | 第110行: | ||
html:done() | html:done() | ||
return html | return html | ||
end | end | ||
-- 从字符串@param1中删除指定的字符串@param2 | -- 从字符串@param1中删除指定的字符串@param2 | ||
第138行: | 第129行: | ||
local hitboxMode = args['hitboxMode'] | local hitboxMode = args['hitboxMode'] | ||
local imageNumber = args['imageNumber'] | local imageNumber = args['imageNumber'] | ||
-- 如果input未指定,报错 | -- 如果input未指定,报错 | ||
if not input then | if not input then | ||
error( 'No inputs specified for the template' ) | error( 'No inputs specified for the template' ) | ||
end | end | ||
-- 调用getMove获取匹配的招式数据 | -- 调用getMove获取匹配的招式数据 | ||
local moves = getMove( chara, input ) | local moves = getMove( chara, input ) |
2025年1月13日 (一) 14:35的最新版本
此模块的文档可以在模块:MMC/doc创建
local p = {}
local mArguments
local cargo
local cache = {}
-- splitStringIntoTable函数以@param2为分隔符,将@param1拆分成字符串并放入表中,如果@param3为true,还要修剪每个部分前后的空白
local splitString = require( 'Module:SplitStringToTable' ).splitStringIntoTable
-- 使用cargo查询招式数据并缓存
local function getMovesData( chara, input )
-- 如果cache字符串长度大于0(即有数据)则直接返回缓存
if #cache > 0 then return cache end
cargo = require( 'Module:Cargo' )
local tables = 'MoveData'
local fields = 'fighter,name,input,subtitle,caption,notation,dmg,meter,guard,properties,startup,active,recovery,hitstop,hitstun,blockstun,onhit,onblock,pic,hitbox'
local args = {
where = string.format('MoveData.fighter="%s" and MoveData.input="%s"', chara, input),
orderBy = '_rowID',
limit = "101",
}
local results = cargo.getQueryResults( tables, fields, args, false )
-- 结果存储于items中,键为input
local items = {}
for _, result in pairs( results ) do
items[result.input] = result
end
-- 返回包含结果的缓存表
cache = items
return cache
end
-- 从缓存数据中获取匹配的招式,检查是否存在匹配招式,若不存在,报错
-- 若存在,将匹配的招式存储在moves表中并返回
local function getMove( chara, input )
local data = getMovesData( chara, input )
local moves = {}
local match = data[ input ]
if not match then
error( string.format( 'Could not find matching move ( %s: %s)', chara, input ) )
end
moves[ input ] = data[ input ]
return moves
end
-- 生成包含招式信息的HTML代码
local function getHTML( move, label, hitboxMode, imageNumber )
-- 创建一个tooltip类的span标签,若写入了@param2标签文本则显示,否则显示传入的move表中的input值
local html = mw.html.create('span'):addClass('tooltip')
if label then
html:wikitext(label)
else
html:wikitext( move['input'] )
end
-- 如果@param3为true则显示move表中的hitbox,否则显示pic,如果未查询到图片,报错
local imgString
if hitboxMode then
imgString = move['hitbox']
else
imgString = move['pic']
end
if not imgString then
error( string.format( 'Image not found' ) )
end
-- 若未提供imageNumber,默认为1
if not imageNumber then imageNumber = 1 end
-- 分隔符是什么呢?暂定为;吧
local imagesTable
imagesTable = splitString( imgString, ';' )
-- 创建tooltiptext类的span标签并添加图片和各类招式信息(可更改)
local ttText = mw.html.create('span'):addClass('tooltiptext')
:tag('span'):addClass('mw-parser-output')
:tag('span'):addClass('tmp')
:tag('span'):addClass('tmp-image')
:wikitext( string.format('[[File:%s|130x200px]]', imagesTable[tonumber(imageNumber)] ) )
:done()
:tag('span'):addClass('tmp-items')
:tag('span'):addClass('tmp-item')
--[[:tag('span'):addClass('tmp-item-label')
:wikitext('防御')
:done()]]
:tag('span'):addClass('tmp-item-data')
:wikitext( move['notation'] )
:done()
:done()
:tag('span'):addClass('tmp-item')
--[[:tag('span'):addClass('tmp-item-label')
:wikitext('启动帧')
:done()]]
:tag('span'):addClass('tmp-item-data')
:wikitext( move['name'] )
:done()
:done()
:tag('span'):addClass('tmp-itemm, tmp-item-colspan')
--[[:tag('span'):addClass('tmp-item-label')
:wikitext('收招帧')
:done()]]
:tag('span'):addClass('tmp-item-data')
:wikitext( move['caption'] )
:done()
:done()
--[[:tag('span'):addClass('tmp-item')
:tag('span'):addClass('tmp-item-label')
:wikitext('加减帧')
:done()
:tag('span'):addClass('tmp-item-data')
:wikitext( move['onblock'] )
:done()
:done()]]
:done()
:done()
:done()
:done()
html:node(ttText)
html:done()
return html
end
-- 从字符串@param1中删除指定的字符串@param2
function removeSubstring(largerString, substring)
local result = largerString:gsub(substring, '')
return result
end
-- 处理模板调用的入口函数,引入Arguments模块获取参数,调用p._main函数处理参数并返回生成的Wiki文本
function p.main(frame)
mArguments = require( 'Module:Arguments' )
local args = mArguments.getArgs(frame)
return p._main(args)
end
-- 提取参数表中的各类参数
function p._main( args )
local chara = args['chara']
local input = args['input']
local label = args['label']
local hitboxMode = args['hitboxMode']
local imageNumber = args['imageNumber']
-- 如果input未指定,报错
if not input then
error( 'No inputs specified for the template' )
end
-- 调用getMove获取匹配的招式数据
local moves = getMove( chara, input )
-- 调用getHTML生成HTML代码并返回
local html = getHTML( moves[input], label, hitboxMode, imageNumber )
-- 添加样式表引用
return tostring(html) .. mw.getCurrentFrame():extensionTag{
name = 'templatestyles', args = { src = 'Template:TooltipMovePreview/styles.css' }
}
end
return p