欢迎来到THBWiki!
如果您是第一次来到这里,请点击右上角注册一个帐户
有任何意见、建议、求助、反馈都可以在
讨论板
提出
THBWiki以专业性和准确性为目标,如果你发现了任何确定的错误或疏漏,可在登录后直接进行改正
查看“︁模块:单条符卡”︁的源代码
←
模块:单条符卡
跳到导航
跳到搜索
因为以下原因,您没有权限编辑该页面:
您请求的操作仅限属于该用户组的用户执行:
少女
您没有权限编辑
模块
命名空间内的页面。
您必须确认您的电子邮件地址才能编辑页面。请通过
参数设置
设置并确认您的电子邮件地址。
您可以查看和复制此页面的源代码。
local p = {} local libargs = require('Module:libargs') local libstr = require('Module:libstr') local libnames = require('Module:libnames') varLua = mw.ext.VariablesLua local init_cards = {} -- 原始cards数据 -- cards指调用单张符卡模板生成的一行或多行数据 -- 不同难度、不同符卡名都需要在录入SMW的过程中拆开 -- 拆分后的最小单元叫card,每个card可以包含多个难度,但名字应该是唯一的 local card_list = {} -- 这里的cards表存储拆分后的符卡card数据,在录入SMW时使用 local auto_num = 0 local reps = varLua.var('分隔符') local function initCards(frame) -- 一些初始化步骤,处理输入并形成原始数据 local names = {'关卡链接','显示','符卡号','难度','编号','角色符卡号','备注'} init_cards = libargs.namedDict(frame.args,names) init_cards['角色符卡号'] = libstr.split(init_cards['角色符卡号'], reps) local diff = init_cards['难度'] -- 本来可以用getchar拆分成字符,但由于还需要兼容手动输入难度的情况 -- 且出于性能考虑,所以还是用dict local diff_dict = { ['ENHLO'] = {'Easy', 'Normal', 'Hard', 'Lunatic', 'Overdrive'}, ['ENHL'] = {'Easy', 'Normal', 'Hard', 'Lunatic'}, ['ENH'] = {'Easy', 'Normal', 'Hard'}, ['EN'] = {'Easy', 'Normal'}, ['NHLO'] = {'Normal', 'Hard', 'Lunatic', 'Overdrive'}, ['NHL'] = {'Normal', 'Hard', 'Lunatic'}, ['HLO'] = {'Hard', 'Lunatic', 'Overdrive'}, ['HL'] = {'Hard', 'Lunatic'}, ['L'] = {'Lunatic'}, ['H'] = {'Hard'}, ['N'] = {'Normal'}, ['E'] = {'Easy'}, ['S'] = {'Spell card'}, } if diff_dict[diff] ~= nil then init_cards['难度'] = diff_dict[diff] else init_cards['难度'] = libstr.split(diff,reps) end local numbering = init_cards['编号'] if numbering ~= nil then init_cards['编号'] = libstr.split(numbering,reps) end auto_num = tonumber(varLua.var('自动编号')) if auto_num == nil then auto_num = 1 varLua.vardefine('自动编号', 1) end init_cards['角色'] = libstr.split(varLua.var('角色名'),reps) init_cards['关卡名'] = varLua.var('关卡名') end function p.createTable(frame) -- 在页面上生成表格 initCards(frame) if varLua.var('引用') == '1' then return p.createTableRef(frame) end -- TODO: 存入SMW return p.createTableMain(frame) end function p.createTableMain(frame) local disable_cn_num = tonumber(varLua.var('隐藏符卡号')) or 0 local disable_num = tonumber(varLua.var('隐藏编号')) or 0 local disable_diff = tonumber(varLua.var('隐藏难度')) or 0 local work_full = varLua.var('作品名') local work_symbol = varLua.var('作品缩写') local stage_name = varLua.var('关卡名') local is_new_stage = tonumber(varLua.var('新关卡')) or 0 local vname_stage_name_row = work_full..stage_name..'行数' local stage_name_row = tonumber(varLua.var(vname_stage_name_row)) or 0 local chara_name = init_cards['角色'][1] local raw_chara_name = varLua.var('角色名') local is_new_chara = tonumber(varLua.var('新角色')) or 0 local cn_num = tostring(frame.args['符卡号']) or '' local vname_chara_name_row = work_full..stage_name..raw_chara_name..'行数' local chara_name_row = tonumber(varLua.var(vname_chara_name_row)) or 0 local chara_name_display = '[['..chara_name..']]' local chara_name_short = libnames.getCharaTemplateName(chara_name) local stage_row = #init_cards['难度'] if disable_diff == 1 then if disable_num == 1 then stage_row = 1 else stage_row = #init_cards['编号'] end end local trs = {} local chara_linked = {} if #init_cards['角色'] > 1 then for i=1,#init_cards['角色'] do chara_linked[i] = '[['..init_cards['角色'][i]..']]' end if work_symbol == 'PYH' then chara_name_display = chara_linked[1]..'为主役<br>'..chara_linked[2]..'为下仆' else chara_name_display = libstr.join(chara_linked,'<br>&<br>') end end if init_cards['显示'] ~= nil and init_cards['显示'] ~= '' then chara_name_display = init_cards['显示'] end if is_new_stage == 1 then stage_name_row = 0 end stage_name_row = stage_name_row + stage_row varLua.vardefine(vname_stage_name_row, stage_name_row) if is_new_chara == 1 then chara_name_row = 0 end chara_name_row = chara_name_row + stage_row varLua.vardefine(vname_chara_name_row, chara_name_row) for i = 1, stage_row do -- 开始生成表格 local main_tr = mw.html.create('tr') if i == 1 then if is_new_stage == 1 then local stage_name_link = stage_name if stage_name == 'Extra Stage' or stage_name == 'Stage EX' or stage_name == 'Revenging Stage' then stage_name_link = 'Extra' end local stage_link = work_full..'/'..stage_name_link local linked_stage_name = '[['..stage_link..'|'..stage_name..']]' if init_cards['关卡链接'] ~= nil and init_cards['关卡链接'] ~= '' then stage_link = init_cards['关卡链接'] if stage_link == '无' then linked_stage_name = stage_name else linked_stage_name = '[['..stage_link..'|'..stage_name..']]' end end main_tr:tag('td') :wikitext(linked_stage_name) :attr('rowspan', varLua.var_final(vname_stage_name_row, stage_name_row)) end local manul_chara_name_row = tonumber(varLua.var('手动指定'..stage_name..raw_chara_name..'角色行数')) or 0 if is_new_chara == 1 then if manul_chara_name_row ~= 0 then main_tr:tag('td') :wikitext(chara_name_display) :attr('rowspan', manul_chara_name_row) else main_tr:tag('td') :wikitext(chara_name_display) :attr('rowspan', varLua.var_final(vname_chara_name_row, chara_name_row)) end end if disable_cn_num ~= 1 then if cn_num == '/' then main_tr:tag('td') else main_tr:tag('td') :wikitext(cn_num) :attr('rowspan', stage_row) end end end local cardNum = auto_num local cardNumDisplay = '' -- 优先自动编号,如指定了编号则覆盖 if init_cards['编号'] ~= nil then local numbering = init_cards['编号'][i] if work_full == '弹幕天邪鬼' then numbering = stage_name..' 场景'..numbering elseif work_full == '秘封噩梦日记' then numbering = stage_name..' 弹幕梦'..numbering end if numbering and numbering ~= '-' then cardNum = numbering auto_num = auto_num - 1 end end if cardNum ~= '/' then auto_num = auto_num + 1 varLua.vardefine('自动编号', auto_num) end if tonumber(cardNum) ~= nil then cardNumDisplay = libstr.padLeft(cardNum, 3) else cardNumDisplay = cardNum end if disable_diff ~= 1 then main_tr:tag('td') :wikitext(init_cards['难度'][i]) end if disable_num ~= 1 then if work_symbol == 'YYC' then if cardNumDisplay == '/' then main_tr:tag('td') else main_tr:tag('td') :wikitext('[[东方永夜抄/符卡说明#'..stage_name..'|'..cardNumDisplay..']]') end else if cardNumDisplay == '/' then main_tr:tag('td') else main_tr:tag('td') :wikitext(cardNumDisplay) end end end local mapping_id = init_cards['角色符卡号'][i] local card_name_row = 1 if mapping_id ~= '-' then if i == #init_cards['角色符卡号'] then card_name_row = 1 else for j=i+1, #init_cards['角色符卡号'] do if init_cards['角色符卡号'][j] ~= '-' then break end card_name_row = card_name_row + 1 end end local card_name_ja = libnames.getCardName(chara_name_short,work_symbol,mapping_id,'ja') local card_name_ja_display = '' if card_name_ja[1] == nil or card_name_ja[1] == '缺少参数' then local mapping_name = chara_name_short..'符卡名/日文' local linked_name = '[[特殊:管理映射方案/'..mapping_name..'|'..mapping_name..']]' card_name_ja_display = '获取映射失败:'..linked_name..'|'..work_symbol..'-'..mapping_id..'不存在' else card_name_ja_display = card_name_ja[1] end local card_name_zh = libnames.getCardName(chara_name_short,work_symbol,mapping_id,'zh') local card_name_zh_display = '' if card_name_zh[1] == nil or card_name_zh[1] == '缺少参数' then local mapping_name = chara_name_short..'符卡名/中文' local linked_name = '[[特殊:管理映射方案/'..mapping_name..'|'..mapping_name..']]' card_name_zh_display = '获取映射失败:'..linked_name..'|'..work_symbol..'-'..mapping_id..'不存在' else card_name_zh_display = '[['..card_name_zh[1]..']]' end if card_name_zh[2] ~= nil then card_name_zh_display = card_name_zh_display..'('..card_name_zh[2]..')' end main_tr:tag('td') :wikitext(card_name_ja_display) :attr('rowspan', card_name_row) main_tr:tag('td') :wikitext(card_name_zh_display) :attr('rowspan', card_name_row) end table.insert(trs,tostring(main_tr)) end return libstr.join(trs,'') end function p.createTableRef(frame) local work_symbol = varLua.var('作品缩写') local chara_name = varLua.var('引用角色名') local chara_name_master = chara_name local stage_name = init_cards['关卡名'] local target = 0 for j=1, #init_cards['角色'] do if init_cards['角色'][j] == chara_name then target = 1 if j == 2 then chara_name_master = init_cards['角色'][1] end break end end if target ~= 1 then return end local chara_name_short = libnames.getCharaTemplateName(chara_name_master) local trs = {} if #init_cards['难度'] == 0 then -- 隐藏难度的作品 local numbering = init_cards['编号'] if #init_cards['编号'] == 0 then -- 文花帖、文花帖DS等没有编号也没有难度的作品 numbering = {1} end for i = 1, #numbering do -- 开始生成表格 local sg_tr = mw.html.create('tr') local mapping_id = init_cards['角色符卡号'][i] if mapping_id ~= '-' then local card_name_ja = libnames.getCardName(chara_name_short,work_symbol,mapping_id,'ja') local card_name_zh = libnames.getCardName(chara_name_short,work_symbol,mapping_id,'zh') local card_name_ja_display = card_name_ja[1] local card_name_zh_display = '[['..card_name_zh[1]..']]' if card_name_zh[2] ~= nil then card_name_zh_display = card_name_zh_display..'('..card_name_zh[2]..')' end sg_tr:tag('td') :wikitext(card_name_ja_display) sg_tr:tag('td') :wikitext(card_name_zh_display) if work_symbol == 'EMRJ' then sg_tr:tag('td') :wikitext(stage_name..' 弹幕梦'..numbering[i]) else sg_tr:tag('td') :wikitext(stage_name) end local note = init_cards['备注'] or '' local chara_name_linked = '' if #init_cards['角色'] > 1 then local chara_linked = {} for i=1,#init_cards['角色'] do chara_linked[i] = '[['..init_cards['角色'][i]..']]' end if #init_cards['角色'] == 2 then chara_name_linked = chara_linked[1] .. '与' .. chara_linked[2] .. '合作' else local last_chara = chara_linked[#chara_linked] table.remove(chara_linked, #chara_linked) chara_name_linked = libstr.join(chara_linked,'、').. '与' .. last_chara .. '合作' end end local display_note_text = '' if chara_name_linked ~= '' and note ~= '' then display_note_text = chara_name_linked..'<br>'..note else if chara_name_linked ~= '' then display_note_text = chara_name_linked else display_note_text = note end end sg_tr:tag('td') :wikitext(display_note_text) end table.insert(trs,tostring(sg_tr)) end return libstr.join(trs,'') end for i = 1, #init_cards['难度'] do -- 排除自机符卡 local ex_works_ftg = { -- 格斗作 ['CMX'] = true, ['FXT'] = true, ['FXTZ'] = true, ['XQL'] = true, ['SML'] = true, ['PYH'] = true, } local ex_works = { ['YYC'] = true, -- 永夜抄 } if ex_works_ftg[work_symbol] then if init_cards['难度'][i] == '对战使用符卡' then return end end if ex_works[work_symbol] then if init_cards['难度'][i] == 'Spell Card' or init_cards['难度'][i] == 'Last Spell' then return end end -- 开始生成表格 local main_tr = mw.html.create('tr') local mapping_id = init_cards['角色符卡号'][i] local diff_list = {} if mapping_id ~= '-' then if i == #init_cards['角色符卡号'] then -- 单条符卡,直接赋值 table.insert(diff_list,init_cards['难度'][i]) else -- 从下一条开始,看这条符卡对应有多少难度 table.insert(diff_list,init_cards['难度'][i]) for j=i+1, #init_cards['角色符卡号'] do if init_cards['角色符卡号'][j] ~= '-' then break end table.insert(diff_list,init_cards['难度'][j]) end end local card_name_ja = libnames.getCardName(chara_name_short,work_symbol,mapping_id,'ja') local card_name_zh = libnames.getCardName(chara_name_short,work_symbol,mapping_id,'zh') local card_name_ja_display = card_name_ja[1] local card_name_zh_display = '[['..card_name_zh[1]..']]' if card_name_zh[2] ~= nil then card_name_zh_display = card_name_zh_display..'('..card_name_zh[2]..')' end main_tr:tag('td') :wikitext(card_name_ja_display) main_tr:tag('td') :wikitext(card_name_zh_display) if work_symbol == 'DZZ' then main_tr:tag('td') :wikitext(stage_name) else main_tr:tag('td') :wikitext(libstr.join(diff_list, ' / ')) end local note = init_cards['备注'] or '' local chara_name_linked = '' if #init_cards['角色'] > 1 then local chara_linked = {} for i=1,#init_cards['角色'] do chara_linked[i] = '[['..init_cards['角色'][i]..']]' end if #init_cards['角色'] == 2 then if work_symbol == 'PYH' then chara_name_linked = chara_linked[1] .. '为主役,' .. chara_linked[2] .. '为下仆' else chara_name_linked = chara_linked[1] .. '与' .. chara_linked[2] .. '合作' end else local last_chara = chara_linked[#chara_linked] table.remove(chara_linked, #chara_linked) chara_name_linked = libstr.join(chara_linked,'、').. '与' .. last_chara .. '合作' end end local display_note_text = '' if chara_name_linked ~= '' and note ~= '' then display_note_text = chara_name_linked..'<br>'..note else if chara_name_linked ~= '' then display_note_text = chara_name_linked else display_note_text = note end end main_tr:tag('td') :wikitext(display_note_text) end table.insert(trs,tostring(main_tr)) end return libstr.join(trs,'') end return p
该页面使用的模板:
模板:Documentation
(
查看源代码
)(受保护)
模板:Documentation/docname
(
查看源代码
)(受保护)
模块:单条符卡/doc
(
查看源代码
)
返回
模块:单条符卡
。
导航菜单
个人工具
创建账号
登录
命名空间
模块
讨论
查看
阅读
源码
查看历史
更多
搜索
常用
首页
东方Project
上海爱丽丝幻乐团
ZUN
世界观
幻想乡年表
东方年表
东方同人规约
近期新闻
沙盒(建议使用)
讨论板
加入我们
官方作品
官方游戏
旧作
东方灵异传
东方封魔录
东方梦时空
东方幻想乡
东方怪绮谈
东方红魔乡
东方妖妖梦
东方永夜抄
东方花映塚
东方风神录
东方地灵殿
东方星莲船
东方神灵庙
东方辉针城
东方绀珠传
东方天空璋
东方鬼形兽
东方虹龙洞
东方兽王园
东方锦上京
小数点射击游戏
东方文花帖
东方文花帖DS
妖精大战争
弹幕天邪鬼
秘封噩梦日记
弹幕狂们的黑市
黄昏边境合作游戏
东方萃梦想
东方绯想天
东方非想天则
东方心绮楼
东方深秘录
东方凭依华
东方刚欲异闻
官方音乐
原曲列表
非音乐CD音乐列表
音乐CD曲目列表
蓬莱人形
莲台野夜行
梦违科学世纪
卯酉东海道
大空魔术
未知之花 魅知之旅
鸟船遗迹
伊奘诺物质
燕石博物志
旧约酒馆
虹色的北斗七星
七夕坂梦幻能
幺乐团的历史系列
幺乐团的历史 vol.1
幺乐团的历史 vol.2
幺乐团的历史 vol.3
幺乐团的历史 vol.4
幺乐团的历史 vol.5
黄昏游戏OST
幻想曲拔萃
全人类的天乐录
核热造神非想天则
暗黑能乐集心绮楼
深秘乐曲集
深秘乐曲集·补
完全凭依唱片名录
贪欲之兽的音乐
官方出版物附带CD
官方书籍
东方香霖堂
东方儚月抄
漫画
小说
四格
东方三月精
第一季
月之妖精
第二季
第三季
第四季
东方茨歌仙
东方铃奈庵
东方醉蝶华
东方智灵奇传
东方求闻史纪
记忆幻想乡
东方求闻口授
东方文花帖
风之号外
东方文果真报
魔理沙的魔法书
宇佐见的魔法书
东方幻存神签
东方外来韦编
东方人妖名鉴
宵暗篇
常世篇
东方紫香花
六十年不见的紫香花
幻想Narrato Graph
官方角色
公式资料
附带文档
游戏对话
官方作品光盘信息
角色自称用词表
官作译名更改记录
原作物品列表
出典文献列表
ZUN相关
西方Project
Torte Le Magic
黄昏酒场
东方关联人物
游戏攻略
东方相关活动
从第二家开始的广播
东方STATION
数码游戏博览会
PoriPori☆Club
niconico超会议
斗会议
niconico原创游戏祭
枯萎Radio
GDGD
其他相关项目
东方我乐多丛志
东方四方山新闻
Play,Doujin!
东方电书流通
东方音乐流通
二次创作与活动
展会及活动导航
Comic Market
博丽神社例大祭
博丽神社例大祭SP
博丽神社秋季例大祭
博丽神社例大祭in台湾
海外博丽神社例大祭
博丽神社歌谣祭
博丽神社崇敬会相关活动
COMICUP
魅知幻想博览会
上海THONLY
东方Only活动
东方红楼梦
角色Only活动
作品Only活动
地区Only活动
其他地区举办的展会
其他展会
M3
COMIC1
展会作品列表
展会作品数量
展会同人志列表
展会专辑列表
展会软件列表
展会视频列表
商业二次创作
出版物
电脑游戏
东方月神夜
家用机游戏
Play,Doujin
手机游戏
东方大炮弹
东方LostWord
东方Dungeon Dive
东方弹幕神乐
东方幻想Eclipse
同人二次创作
同人社团列表
同人志分类
同人专辑分类
同人专辑搜索
原曲作品数量
同人软件列表
Steam游戏列表
同人角色列表
同人视频列表
其他形式同人
同人文章列表
同人画师列表
同人封面角色
东方相关周边
PVCFigure
GarageKit
小型物品
其他形式周边
MUGEN
THB相关项目
THB策划
中文东方人气投票
东深见讲坛
幻想乡柱状地图
THB衍生
同人专辑搜索
原曲认知测验
东方相关QQ群组列表
THB媒体
微博
Bilibili
直播间
GitHub
THB协力
博丽神主ZUN微博
东方我乐多丛志
MineCraft幻想乡
京都幻想剧团
幻奏盛宴
功能与帮助
最近更改
随机浏览
编写规范
收录方针
命名规范
同人社团
同人音乐
封面图片
二次设定
编辑帮助
基础帮助
常用模板
进阶代码
函数用法
编写翻译表
语义维基
样式类用法
颜色列表
工具
链入页面
相关更改
特殊页面
页面信息
其他
联系管理员
关于THBWiki
捐款支持
语言
English
italiano
日本語
中文