此模块的文档可以在模块:Gun info/skin/doc创建
local p = {} local gunId local gunData local dialog local skinData = mw.loadData('Module:Gun info/skin data') local modL2D = { [55] = true, [56] = true, [57] = true, [65] = true, [101] = true, [103] = true, [122] = true, [143] = true } local function filepath(filename, frame) local ret = frame:callParserFunction('filepath', filename) return ret ~= '' and string.gsub(ret, 'https?://[w.]-gfwiki%.org', '') or '' end local function findPics(name, frame) local url, dUrl = filepath(name .. '_HD.png', frame) if url ~= '' then dUrl = filepath(name .. '_D_HD.png', frame) else url = filepath(name .. '.png', frame) dUrl = filepath(name .. '_D.png', frame) end return url, dUrl end local function findVoice(gunCode, frame) local fileName = string.format( '%s%s_GAIN_JP.', string.upper(string.sub(gunCode, 1, 1)), string.sub(gunCode, 2) ) local url = filepath(fileName .. 'wav', frame) if url == '' then url = filepath(fileName .. 'mp3', frame) end return url end local function buildParams() local frame = mw.getCurrentFrame() local gunCode = string.gsub(gunData.code, ' ', '_') local imgName = 'Pic_' .. gunCode local args = { dollname = mw.ustring.gsub(gunData.name, '\194\160', ' '), dollvoice = findVoice(gunCode, frame), pic1name = '默认立绘', line1 = dialog, pic1a = 0 } args.pic1, args.pic1d = findPics(imgName, frame) if gunData['mod'] then args.pic2name = '心智升级' args.line2 = dialog args.pic2, args.pic2d = findPics(imgName .. 'Mod', frame) args.pic2a = modL2D[gunData.id] and 2 or 0 end local offset = gunData['mod'] and 2 or 1 for i, v in ipairs(gunData.skins) do local skin = skinData[v] if skin then local n = tostring(i + offset) local pic = 'pic' .. n local fileName = imgName .. '_' .. tostring(v) args[pic .. 'name'] = skin.name args['line' .. n] = skin.dialog args[pic], args[pic .. 'd'] = findPics(fileName, frame) args[pic .. 'a'] = skin['type'] or 0 end end return args end function p.skinInfo(frame) local args = frame:getParent().args gunId = args['编号'] gunId = tonumber(gunId) local dataPage if gunId < 1000 then dataPage = 'Module:Gun info/data_' .. tostring(math.floor((gunId - 1)/100)) else dataPage = 'Module:Gun info/data extra' end gunData = mw.loadData(dataPage)[gunId] dialog = args['获取台词'] and mw.text.trim(args['获取台词']) or '' local params = buildParams() params[1] = 'DollPage/Pic' return frame:callParserFunction('#widget', params) end return p