Module:Test: Difference between revisions
From Elwiki
No edit summary |
No edit summary |
||
Line 71: | Line 71: | ||
elseif (traits[i] == 'Reversed') then | elseif (traits[i] == 'Reversed') then | ||
headers = { | headers = { | ||
[1] = ' | [1] = 'MP Usage', | ||
[2] = ' | [2] = 'Cooldown' | ||
} | } | ||
elseif (traits[i] == 'Regenerating (1)') then | elseif (traits[i] == 'Regenerating (1)') then |
Revision as of 20:05, 24 August 2022
Documentation for this module may be created at Module:Test/doc
require('Module:CommonFunctions')
local getArgs = require('Module:Arguments').getArgs
local p = {}
-- Main process
function p.main(frame)
local args = getArgs(frame);
-- Argument init
local traits = args[3]
if (traits == nil) then
traits = '-, -'
end
traits = split(traits);
local skill = args[2]
-- Attribute effect
local effects = {
[1] = {},
[2] = {}
}
args.effects1 = args.effects1 or args[4]
args.effects2 = args.effects2 or args[5]
if args.effects1 ~= nil then
effects[1] = split(args.effects1)
end
if args.effects2 ~= nil then
effects[2] = split(args.effects2)
end
local desc = {}
-- Extra effects
local counts = {}
local desc_arg = nil;
local header_data = {}
local headers={};
for i = 1, 2, 1 do
if (i == 1) then
desc_arg = args[6]
else
desc_arg = args[7]
end
if desc_arg == nil then
desc_arg = args['desc' .. i]
end
if desc_arg ~= nil then
traits[i] = trim(traits[i]);
local data_split = split(desc_arg, ';');
--local headers;
local data;
if (#data_split >= 2) then
headers = split(data_split[1]);
data = data_split[2];
else
data = data_split[1];
-- Generate headers based on trait.
if (traits[i] == 'Light' or traits[i] == 'Critical') then
headers = {
[1] = 'MP Usage'
}
elseif (traits[i] == 'Heavy' or traits[i] == 'Haste' or traits[i] == 'Regenerating (2)' or traits[i] ==
'Ruthless' or traits[i] == 'Powerful') then
headers = {
[1] = 'Cooldown'
}
elseif (traits[i] == 'Reversed') then
headers = {
[1] = 'MP Usage',
[2] = 'Cooldown'
}
elseif (traits[i] == 'Regenerating (1)') then
headers = {
[1] = 'MP Recovery'
}
elseif (traits[i] == 'Killing Blow (1)') then
headers = {
[1] = 'Duration'
}
else
headers = {}
end
end
if (header_data[i] == nil) then
header_data[i] = {}
end
for k, v in spairs(headers) do
table.insert(header_data[i], trim(v))
end
data = split(data);
counts[i] = 1 + #headers;
if (desc[i] == nil) then
desc[i] = {}
end
local index = 1
while index <= #headers do
desc[i][index] = {}
desc[i][index][headers[index]] = trim(data[index])
index = index + 1
end
end
end
-- Main block
local trait_table = mw.html.create('table'):attr({
['cellpadding'] = '5',
['border'] = '1'
}):css({
['border-collapse'] = 'collapse',
['text-align'] = 'center'
})
-- Get table head color
local function color(char)
char = char or args[1]
return frame:expandTemplate{
title = 'ColorSel',
args = {'CharLight', char}
}:gsub("#", "#")
end
function newtr()
return trait_table:tag('tr'):css('background-color', color())
end
-- Spawn headers
local thead = newtr()
thead:tag('th'):attr('colspan', counts[1]):wikitext(traits[1] .. ' ' .. skill)
thead:tag('th'):attr('colspan', counts[2]):wikitext(traits[2] .. ' ' .. skill)
local no_desc;
local tr_2 = newtr();
for i = 1, 2, 1 do
no_desc = args['desc' .. i] == nil and args[6] == nil and args[7] == nil;
tr_2:tag('th'):wikitext('Attribute Effect')
if not (no_desc or header_data[i] == nil) then
for k, v in ipairs(header_data[i]) do
v = frame:preprocess(v);
tr_2:tag('th'):wikitext(v)
end
end
end
-- Spawn information
local tr = trait_table:tag('tr')
for i = 1, 2, 1 do
no_desc = args['desc' .. i] == nil and args[6] == nil and args[7] == nil;
tr:tag('td'):wikitext(frame:expandTemplate{
title = 'SkillText',
args = {traits[i], effects[i][1], effects[i][2]}
})
if not (no_desc or desc[i] == nil) then
for k, v in ipairs(desc[i]) do
for k2, v2 in pairs(desc[i][k]) do
local expr_header_table = {
[1] = 'Cooldown',
[2] = 'MP Usage',
[3] = 'MP Recovery',
[4] = 'Duration'
}
if (table.containsValue(expr_header_table, k2)) then
if not string.find(v2, "%*") then
if (traits[i] == 'Light' or traits[i] == 'Critical' or traits[i] == 'Haste' or (traits[i] == 'Reversed' and k2 == expr_header_table[2])) then
v2 = effects[i][1] * (v2 / 100)
elseif (string.find(traits[i], 'Regenerating') or (traits[i] == 'Reversed' and k2 == expr_header_table[1])) then
v2 = effects[i][2] * (v2 / 100)
end
else
v2 = '{{#expr:' .. v2 .. '}}'
end
if (k2 == expr_header_table[2] or k2 == expr_header_table[3]) then
v2 = v2 .. ' MP'
else
v2 = v2 .. ' Seconds'
end
end
tr:tag('td'):wikitext(frame:preprocess(v2))
end
end
end
end
-- Output point
return tostring(trait_table);
end
return p