-- Originally designed and coded by Maya (U:MJH) local getArgs = require("Module:Arguments").getArgs local FGOData = require("Module:FGOData") local generateTabs = function (args) local retstr = '<div class="Tabs" data-label-side="top" style="width:220px;margin:auto" data-label-padding="2px" data-text-padding="0px 0px">' for i = 1, #(args['卡背args'].labels) do retstr = retstr .. '<div class="Tab"><div class="TabLabelText">' .. args['卡背args'].labels[i] .. [=[</div><div class="TabContentText">[[File:]=] .. args['卡背args'].filenames[i] .. [=[.png|185px]]</div></div>]=] end retstr = retstr .. '</div>' return retstr end local fillDefaultAndConstructArgs = function (args) local i = 1 args['卡背args'] = { labels = {} , filenames = {} } while i <= 3 or args['卡背名称' .. i] do args['卡背args'].labels[i] = args['卡背名称' .. i] or FGOData.classCardTabTitles[-1][i] args['卡背args'].filenames[i] = args['卡背文件名' .. i] or ((args['卡背立绘' .. i] or args['卡背'] or 'Shielder') .. (args['卡背名称' .. i] or FGOData.classCardTabTitles[-1][i])) i = i + 1 end args['伤害系数'] = args['伤害系数'] or FGOData.classAtkCoeff[-1] args['暴击星掉落率'] = args['暴击星掉落率'] or FGOData.baseStarDropRate[-1] args['暴击星集中度'] = args['暴击星集中度'] or FGOData.baseStarWeight[-1] args['被即死率'] = args['被即死率'] or FGOData.baseInstakillRate[-1] args['充能格数'] = args['充能格数'] or FGOData.baseChargeLength[-1] args['行动次数'] = args['行动次数'] or FGOData.baseActionCount[-1] args['行动优先度'] = args['行动优先度'] or FGOData.baseActionPriority[-1] args['攻args'] = {} args['防args'] = {} for i = 1, #FGOData.classKeys do args['攻args'][i] = args[FGOData.classNames[FGOData.classKeys[i]] .. '攻'] or FGOData.getFromDefaultedTable2d(FGOData.classMultFromTo, nil, FGOData.classKeys[i]) args['防args'][i] = args[FGOData.classNames[FGOData.classKeys[i]] .. '防'] or FGOData.getFromDefaultedTable2d(FGOData.classMultFromTo, FGOData.classKeys[i], nil) end end local classDataTableCore = function (args) local tabTemp = '' if next(args['卡背args'].labels) then tabTemp = generateTabs(args) else tabTemp = '卡背暂缺' end local mults = '' local titletemp = '' local atktemp = '' local deftemp = '' for i = 1, #FGOData.classKeys do if i % 7 == 1 then mults = mults .. titletemp .. atktemp .. deftemp titletemp = [[ |- ! style="width:7%" | 职阶相性]] atktemp = [[ |- ! 造成伤害]] deftemp = [[ |- ! 受到伤害]] end titletemp = titletemp .. [=[!![[]=] .. FGOData.classLinks[FGOData.classKeys[i]] .. '|' .. (FGOData.classNamesDisplay[FGOData.classKeys[i]] or FGOData.classNames[FGOData.classKeys[i]]) .. FGOData.getFromDefaultedTable(FGOData.classNamesInfo, FGOData.classKeys[i]) .. [=[]]]=] atktemp = atktemp .. [[ |]] .. FGOData.getClassMultStyle(args['攻args'][i]) .. string.format('%.1f', args['攻args'][i]) deftemp = deftemp .. [[ |]] .. FGOData.getClassMultStyle(args['防args'][i]) .. string.format('%.1f', args['防args'][i]) end local multsSpanTaken = #FGOData.classKeys % 7 if multsSpanTaken ~= 0 then multsRestSpan = 7 - multsSpanTaken titletemp = titletemp .. [[ | rowspan=3 colspan=]] .. multsRestSpan .. ' style="background:#CCC" |' end mults = mults .. titletemp .. atktemp .. deftemp return [[<div style="max-width:100%;overflow:auto"> {| class="wikitable" style="text-align:center;background:#FFF" |- ! rowspan=3 |]] .. (args['图标整体'] or FGOData.getClassIconCore(args['图标'], args['图标链接'], 40)) .. '!! colspan=8 |' .. args['职阶'] .. [[ |- | colspan=8 lang="ja" | -{]] .. args['日文名称'] .. [[}- |- | colspan=8 |]] .. args['中文名称'] .. [[ |- | rowspan=15 style="min-width:230px;margin:auto;" |]] .. tabTemp .. [[ ! rowspan=3 style="min-width:70px;" | 常规数值 !! colspan=4 | 己方 !! colspan=3 | 敌方 |- ! style="min-width:100px" | 伤害系数 ! style="min-width:100px" | 暴击星掉落率 ! style="min-width:100px" | 暴击星集中度 ! style="min-width:100px" | 被即死率 ! style="min-width:100px" | 充能格数 ! style="min-width:100px" | 行动次数 ! style="min-width:100px" | 行动优先度 |- | ]] .. FGOData.getClassAtkCoeffStyle(args['伤害系数']) .. string.format('%.2f', args['伤害系数']) .. '||' .. FGOData.getBaseStarDropRateStyle(args['暴击星掉落率'] or args['掉星率']) .. (args['暴击星掉落率'] or args['掉星率']) .. '%||' .. FGOData.getBaseStarWeightStyle(args['暴击星集中度'] or args['集星权重']) .. (args['暴击星集中度'] or args['集星权重']) .. '||' .. FGOData.getBaseInstakillRateStyle(args['被即死率']) .. (args['被即死率']) .. '%||' .. FGOData.getBaseChargeLengthStyle(args['充能格数']) .. (args['充能格数']) .. '||' .. FGOData.getBaseActionCountStyle(args['行动次数']) .. (args['行动次数']) .. '||' .. FGOData.getBaseActionPriorityStyle(args['行动优先度']) .. (args['行动优先度']) .. mults .. [[ |} </div>]] end local FGOClass = { main = function (frame) local args = getArgs(frame) local classIndex = FGOData.classNamesInverse[args['职阶'] or args[1]] local argsToCore = {} if classIndex then argsToCore['职阶'] = FGOData.classNames[classIndex] argsToCore['中文名称'] = FGOData.classNamesChinese[classIndex] argsToCore['日文名称'] = FGOData.classNamesJapanese[classIndex] argsToCore['图标整体'] = FGOData.getClassIcon(classIndex, 40) local classCardFilenames = {} local classCardFilenameSuffix = FGOData.getFromDefaultedTable(FGOData.classCardFilenameSuffixes, classIndex) for i = 1, #classCardFilenameSuffix do classCardFilenames[i] = FGOData.classNames[classIndex] .. classCardFilenameSuffix[i] end argsToCore['卡背args'] = { labels = FGOData.getFromDefaultedTable(FGOData.classCardTabTitles, classIndex), filenames = classCardFilenames } argsToCore['伤害系数'] = FGOData.getFromDefaultedTable(FGOData.classAtkCoeff, classIndex) argsToCore['暴击星掉落率'] = FGOData.getFromDefaultedTable(FGOData.baseStarDropRate, classIndex) argsToCore['暴击星集中度'] = FGOData.getFromDefaultedTable(FGOData.baseStarWeight, classIndex) argsToCore['被即死率'] = FGOData.getFromDefaultedTable(FGOData.baseInstakillRate, classIndex) argsToCore['充能格数'] = FGOData.getFromDefaultedTable(FGOData.baseChargeLength, classIndex) argsToCore['行动次数'] = FGOData.getFromDefaultedTable(FGOData.baseActionCount, classIndex) argsToCore['行动优先度'] = FGOData.getFromDefaultedTable(FGOData.baseActionPriority, classIndex) argsToCore['攻args'] = {} argsToCore['防args'] = {} for i = 1, #FGOData.classKeys do argsToCore['攻args'][i] = FGOData.getFromDefaultedTable2d(FGOData.classMultFromTo, classIndex, FGOData.classKeys[i]) argsToCore['防args'][i] = FGOData.getFromDefaultedTable2d(FGOData.classMultFromTo, FGOData.classKeys[i], classIndex) end else argsToCore = args fillDefaultAndConstructArgs(argsToCore) end return classDataTableCore(argsToCore) end, classTitle = function (frame) local args = getArgs(frame) local classIndexer = args[1] local size = args[2] local link = args[3] if not tonumber(classIndexer) then classIndexer = FGOData.classNamesInverse[classIndexer] end return FGOData.getClassTitle(classIndexer, size, link) end } return FGOClass