Module:Traits: Difference between revisions
From Elwiki
No edit summary |
No edit summary |
||
Line 60: | Line 60: | ||
-- Generate headers based on trait. | -- Generate headers based on trait. | ||
if (traits[i] == 'Light' or traits[i] == 'Critical') then | if (traits[i] == 'Light' or traits[i] == 'Critical') then | ||
headers = {[1] = 'MP Usage'} | headers = { | ||
elseif (traits[i] == 'Heavy' or traits[i] == 'Haste' or traits[i] == 'Regenerating (2)' or traits[i] == 'Ruthless' or traits[i] == 'Powerful') then | [1] = 'MP Usage' | ||
headers = {[1] = 'Cooldown'} | } | ||
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 | elseif (traits[i] == 'Reversed') then | ||
headers = {[1] = 'Cooldown', [2] = 'MP Usage'} | headers = { | ||
[1] = 'Cooldown', | |||
[2] = 'MP Usage' | |||
} | |||
elseif (traits[i] == 'Regenerating (1)') then | elseif (traits[i] == 'Regenerating (1)') then | ||
headers = {[1] = 'MP Recovery'} | headers = { | ||
[1] = 'MP Recovery' | |||
} | |||
elseif (traits[i] == 'Killing Blow (1)') then | elseif (traits[i] == 'Killing Blow (1)') then | ||
headers = {[1] = 'Duration'} | headers = { | ||
[1] = 'Duration' | |||
} | |||
else | else | ||
headers = {} | headers = {} | ||
Line 77: | Line 89: | ||
for k, v in spairs(headers) do | for k, v in spairs(headers) do | ||
header_data[i] = {} | header_data[i] = {} | ||
table.insert(header_data[i], v) | table.insert(header_data[i], trim(v)) | ||
end | end | ||
Line 87: | Line 99: | ||
desc[i] = {} | desc[i] = {} | ||
desc[i][index] = {} | desc[i][index] = {} | ||
desc[i][index][headers[index]] = data[index] | desc[i][index][headers[index]] = trim(data[index]) | ||
index = index + 1 | index = index + 1 | ||
end | end | ||
Line 146: | Line 158: | ||
for k, v in ipairs(desc[i]) do | for k, v in ipairs(desc[i]) do | ||
for k2, v2 in pairs(desc[i][k]) 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 | |||
v2 = '{{#expr:' .. v2 .. '}}' | |||
if (k2 == expr_header_table[1] or k2 == expr_header_table[3]) then | |||
v2 = v2 .. ' MP' | |||
else | |||
v2 = v2 .. ' Seconds' | |||
end | |||
end | |||
tr:tag('td'):wikitext(frame:preprocess(v2)) | tr:tag('td'):wikitext(frame:preprocess(v2)) | ||
end | end |
Revision as of 15:07, 24 August 2022
Documentation for this module may be created at Module:Traits/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 = {}
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] = 'Cooldown',
[2] = 'MP Usage'
}
elseif (traits[i] == 'Regenerating (1)') then
headers = {
[1] = 'MP Recovery'
}
elseif (traits[i] == 'Killing Blow (1)') then
headers = {
[1] = 'Duration'
}
else
headers = {}
end
end
for k, v in spairs(headers) do
header_data[i] = {}
table.insert(header_data[i], trim(v))
end
data = split(data);
counts[i] = 1 + #headers;
local index = 1
while index <= #headers do
desc[i] = {}
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
v2 = '{{#expr:' .. v2 .. '}}'
if (k2 == expr_header_table[1] 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