置顶公告:【置顶】关于临时开启评论区所有功能的公告(2022.10.22) | 【置顶】关于本站Widget恢复使用的公告
  • 你好~!欢迎来到萌娘百科镜像站!如需查看或编辑,请联系本站管理员注册账号。
  • 本镜像站和其他萌娘百科的镜像站无关,请注意分别。

Module:FGOClass

贴贴♀百科,万娘皆可贴的百科全书!转载请标注来源页面的网页链接,并声明引自贴贴百科。内容不可商用。
跳到导航 跳到搜索
Template-info.svg 模块文档  [查看] [编辑] [历史] [刷新]

本模块仅用于{{FGO_职阶信息}},可用来生成Fate/Grand_Order从者的职阶数据表。

  1. -- Originally designed and coded by Maya (U:MJH)
  2. local getArgs = require("Module:Arguments").getArgs
  3. local FGOData = require("Module:FGOData")
  4. local generateTabs = function (args)
  5. local retstr = '<div class="Tabs" data-label-side="top" style="width:220px;margin:auto" data-label-padding="2px" data-text-padding="0px 0px">'
  6. for i = 1, #(args['卡背args'].labels) do
  7. retstr = retstr .. '<div class="Tab"><div class="TabLabelText">' .. args['卡背args'].labels[i] ..
  8. [=[</div><div class="TabContentText">[[File:]=] .. args['卡背args'].filenames[i] .. [=[.png|185px]]</div></div>]=]
  9. end
  10. retstr = retstr .. '</div>'
  11. return retstr
  12. end
  13. local fillDefaultAndConstructArgs = function (args)
  14. local i = 1
  15. args['卡背args'] = { labels = {} , filenames = {} }
  16. while i <= 3 or args['卡背名称' .. i] do
  17. args['卡背args'].labels[i] = args['卡背名称' .. i] or FGOData.classCardTabTitles[-1][i]
  18. args['卡背args'].filenames[i] = args['卡背文件名' .. i] or
  19. ((args['卡背立绘' .. i] or args['卡背'] or 'Shielder') ..
  20. (args['卡背名称' .. i] or FGOData.classCardTabTitles[-1][i]))
  21. i = i + 1
  22. end
  23. args['伤害系数'] = args['伤害系数'] or FGOData.classAtkCoeff[-1]
  24. args['暴击星掉落率'] = args['暴击星掉落率'] or FGOData.baseStarDropRate[-1]
  25. args['暴击星集中度'] = args['暴击星集中度'] or FGOData.baseStarWeight[-1]
  26. args['被即死率'] = args['被即死率'] or FGOData.baseInstakillRate[-1]
  27. args['充能格数'] = args['充能格数'] or FGOData.baseChargeLength[-1]
  28. args['行动次数'] = args['行动次数'] or FGOData.baseActionCount[-1]
  29. args['行动优先度'] = args['行动优先度'] or FGOData.baseActionPriority[-1]
  30. args['攻args'] = {}
  31. args['防args'] = {}
  32. for i = 1, #FGOData.classKeys do
  33. args['攻args'][i] = args[FGOData.classNames[FGOData.classKeys[i]] .. '攻'] or
  34. FGOData.getFromDefaultedTable2d(FGOData.classMultFromTo, nil, FGOData.classKeys[i])
  35. args['防args'][i] = args[FGOData.classNames[FGOData.classKeys[i]] .. '防'] or
  36. FGOData.getFromDefaultedTable2d(FGOData.classMultFromTo, FGOData.classKeys[i], nil)
  37. end
  38. end
  39. local classDataTableCore = function (args)
  40. local tabTemp = ''
  41. if next(args['卡背args'].labels) then tabTemp = generateTabs(args) else tabTemp = '卡背暂缺' end
  42. local mults = ''
  43. local titletemp = ''
  44. local atktemp = ''
  45. local deftemp = ''
  46. for i = 1, #FGOData.classKeys do
  47. if i % 7 == 1 then
  48. mults = mults .. titletemp .. atktemp .. deftemp
  49. titletemp = [[
  50. |-
  51. ! style="width:7%" | 职阶相性]]
  52. atktemp = [[
  53. |-
  54. ! 造成伤害]]
  55. deftemp = [[
  56. |-
  57. ! 受到伤害]]
  58. end
  59. titletemp = titletemp .. [=[!![[]=] .. FGOData.classLinks[FGOData.classKeys[i]] .. '|'
  60. .. (FGOData.classNamesDisplay[FGOData.classKeys[i]] or FGOData.classNames[FGOData.classKeys[i]])
  61. .. FGOData.getFromDefaultedTable(FGOData.classNamesInfo, FGOData.classKeys[i]) .. [=[]]]=]
  62. atktemp = atktemp .. [[
  63. |]] .. FGOData.getClassMultStyle(args['攻args'][i]) .. string.format('%.1f', args['攻args'][i])
  64. deftemp = deftemp .. [[
  65. |]] .. FGOData.getClassMultStyle(args['防args'][i]) .. string.format('%.1f', args['防args'][i])
  66. end
  67. local multsSpanTaken = #FGOData.classKeys % 7
  68. if multsSpanTaken ~= 0 then
  69. multsRestSpan = 7 - multsSpanTaken
  70. titletemp = titletemp .. [[
  71. | rowspan=3 colspan=]] .. multsRestSpan .. ' style="background:#CCC" |'
  72. end
  73. mults = mults .. titletemp .. atktemp .. deftemp
  74. return [[<div style="max-width:100%;overflow:auto">
  75. {| class="wikitable" style="text-align:center;background:#FFF"
  76. |-
  77. ! rowspan=3 |]] .. (args['图标整体'] or FGOData.getClassIconCore(args['图标'], args['图标链接'], 40)) ..
  78. '!! colspan=8 |' .. args['职阶'] .. [[
  79. |-
  80. | colspan=8 lang="ja" | -{]] .. args['日文名称'] .. [[}-
  81. |-
  82. | colspan=8 |]] .. args['中文名称'] .. [[
  83. |-
  84. | rowspan=15 style="min-width:230px;margin:auto;" |]] .. tabTemp ..
  85. [[
  86. ! rowspan=3 style="min-width:70px;" | 常规数值 !! colspan=4 | 己方 !! colspan=3 | 敌方
  87. |-
  88. ! style="min-width:100px" | 伤害系数
  89. ! style="min-width:100px" | 暴击星掉落率
  90. ! style="min-width:100px" | 暴击星集中度
  91. ! style="min-width:100px" | 被即死率
  92. ! style="min-width:100px" | 充能格数
  93. ! style="min-width:100px" | 行动次数
  94. ! style="min-width:100px" | 行动优先度
  95. |-
  96. | ]] .. FGOData.getClassAtkCoeffStyle(args['伤害系数']) .. string.format('%.2f', args['伤害系数']) ..
  97. '||' .. FGOData.getBaseStarDropRateStyle(args['暴击星掉落率'] or args['掉星率']) .. (args['暴击星掉落率'] or args['掉星率']) ..
  98. '%||' .. FGOData.getBaseStarWeightStyle(args['暴击星集中度'] or args['集星权重']) .. (args['暴击星集中度'] or args['集星权重']) ..
  99. '||' .. FGOData.getBaseInstakillRateStyle(args['被即死率']) .. (args['被即死率']) ..
  100. '%||' .. FGOData.getBaseChargeLengthStyle(args['充能格数']) .. (args['充能格数']) ..
  101. '||' .. FGOData.getBaseActionCountStyle(args['行动次数']) .. (args['行动次数']) ..
  102. '||' .. FGOData.getBaseActionPriorityStyle(args['行动优先度']) .. (args['行动优先度']) .. mults .. [[
  103. |}
  104. </div>]]
  105. end
  106. local FGOClass = {
  107. main = function (frame)
  108. local args = getArgs(frame)
  109. local classIndex = FGOData.classNamesInverse[args['职阶'] or args[1]]
  110. local argsToCore = {}
  111. if classIndex then
  112. argsToCore['职阶'] = FGOData.classNames[classIndex]
  113. argsToCore['中文名称'] = FGOData.classNamesChinese[classIndex]
  114. argsToCore['日文名称'] = FGOData.classNamesJapanese[classIndex]
  115. argsToCore['图标整体'] = FGOData.getClassIcon(classIndex, 40)
  116. local classCardFilenames = {}
  117. local classCardFilenameSuffix = FGOData.getFromDefaultedTable(FGOData.classCardFilenameSuffixes, classIndex)
  118. for i = 1, #classCardFilenameSuffix do
  119. classCardFilenames[i] = FGOData.classNames[classIndex] .. classCardFilenameSuffix[i]
  120. end
  121. argsToCore['卡背args'] = {
  122. labels = FGOData.getFromDefaultedTable(FGOData.classCardTabTitles, classIndex),
  123. filenames = classCardFilenames
  124. }
  125. argsToCore['伤害系数'] = FGOData.getFromDefaultedTable(FGOData.classAtkCoeff, classIndex)
  126. argsToCore['暴击星掉落率'] = FGOData.getFromDefaultedTable(FGOData.baseStarDropRate, classIndex)
  127. argsToCore['暴击星集中度'] = FGOData.getFromDefaultedTable(FGOData.baseStarWeight, classIndex)
  128. argsToCore['被即死率'] = FGOData.getFromDefaultedTable(FGOData.baseInstakillRate, classIndex)
  129. argsToCore['充能格数'] = FGOData.getFromDefaultedTable(FGOData.baseChargeLength, classIndex)
  130. argsToCore['行动次数'] = FGOData.getFromDefaultedTable(FGOData.baseActionCount, classIndex)
  131. argsToCore['行动优先度'] = FGOData.getFromDefaultedTable(FGOData.baseActionPriority, classIndex)
  132. argsToCore['攻args'] = {}
  133. argsToCore['防args'] = {}
  134. for i = 1, #FGOData.classKeys do
  135. argsToCore['攻args'][i] = FGOData.getFromDefaultedTable2d(FGOData.classMultFromTo, classIndex, FGOData.classKeys[i])
  136. argsToCore['防args'][i] = FGOData.getFromDefaultedTable2d(FGOData.classMultFromTo, FGOData.classKeys[i], classIndex)
  137. end
  138. else
  139. argsToCore = args
  140. fillDefaultAndConstructArgs(argsToCore)
  141. end
  142. return classDataTableCore(argsToCore)
  143. end,
  144. classTitle = function (frame)
  145. local args = getArgs(frame)
  146. local classIndexer = args[1]
  147. local size = args[2]
  148. local link = args[3]
  149. if not tonumber(classIndexer) then
  150. classIndexer = FGOData.classNamesInverse[classIndexer]
  151. end
  152. return FGOData.getClassTitle(classIndexer, size, link)
  153. end
  154. }
  155. return FGOClass