편집 요약 없음 |
편집 요약 없음 |
||
| (같은 사용자의 중간 판 10개는 보이지 않습니다) | |||
| 1번째 줄: | 1번째 줄: | ||
local p = {} | local p = {} | ||
function | -- 쉼표로 구분된 문자열을 숫자 배열로 변환 | ||
local | local function parseValues(str) | ||
local values = {} | |||
for val in string.gmatch(str or "", "([^,]+)") do | |||
table.insert(values, val) | |||
end | |||
return values | |||
end | |||
function p.renderCharacterStats(frame) | |||
local | local stats = { | ||
{name="HP", vals=parseValues(frame.args.HP)}, | |||
{name="STR", vals=parseValues(frame.args.STR)}, | |||
{name="DEF", vals=parseValues(frame.args.DEF)}, | |||
{name="ATS", vals=parseValues(frame.args.ATS)}, | |||
{name="ADF", vals=parseValues(frame.args.ADF)}, | |||
{name="DEX", vals=parseValues(frame.args.DEX)}, | |||
{name="AGL", vals=parseValues(frame.args.AGL)}, | |||
{name="MOV", vals=parseValues(frame.args.MOV)}, | |||
{name="RNG", vals=parseValues(frame.args.RNG)}, | |||
{name="SPD", vals=parseValues(frame.args.SPD)}, | |||
{name="명중률+", vals=parseValues(frame.args["명중률+"])}, | |||
{name="필살률+", vals=parseValues(frame.args["필살률+"])}, | |||
{name="회피율+", vals=parseValues(frame.args["회피율+"])}, | |||
{name="마법회피율+", vals=parseValues(frame.args["마법회피율+"])} | |||
} | |||
local html = mw.html.create("div") | |||
:css("display","flex") | |||
:css("flex-wrap","wrap") | |||
:css("gap","10px") | |||
:css("justify-content","center") | |||
:css("align-items","flex-start") | |||
local | local function makeTable(tblStats) | ||
local tbl = mw.html.create("table") | |||
:addClass("wikitable") | |||
:css("flex","1") | |||
:css("min-width","300px") | |||
:css("text-align","center") | |||
:css("border-collapse","separate") | |||
:css("border-spacing","0") | |||
:css("margin","0") | |||
:css("border-radius","8px") | |||
:css("overflow","hidden") | |||
-- 헤더 | |||
local tr = tbl:tag("tr") | |||
local headers = {"능력치", "성장치", "Lv1", "Lv50", "Lv120"} | |||
local widths = {"30%", "17.5%", "17.5%", "17.5%", "17.5%"} | |||
for i, header in ipairs(headers) do | |||
tr:tag("th") | |||
:css("background-color","#2E3B84") | |||
:css("color","white") | |||
:css("font-weight","bold") | |||
:css("padding","8px") | |||
:css("width",widths[i]) | |||
:wikitext(header) | |||
end | |||
-- 행 | |||
for i, stat in ipairs(tblStats) do | |||
local tr = tbl:tag("tr") | |||
-- 능력치 이름 | |||
tr:tag("td") | |||
:css("background-color","#446DFF") | |||
:css("color","white") | |||
:css("font-weight","bold") | |||
:css("text-align","left") | |||
:css("padding","6px") | |||
:wikitext(stat.name) | |||
-- 입력값: 홀짝행 배경색 | |||
local bg = (i % 2 == 1) and "#EDF3FF" or "" | |||
for j=1,4 do | |||
tr:tag("td") | |||
:css("background-color",bg) | |||
:css("padding","6px") | |||
:css("width","17.5%") | |||
:wikitext(stat.vals[j] or "") | |||
end | |||
end | |||
return tbl | |||
end | |||
html:node(makeTable({unpack(stats,1,7)})) -- 왼쪽 | |||
html:node(makeTable({unpack(stats,8,14)})) -- 오른쪽 | |||
return tostring(html) | return tostring(html) | ||
2025년 11월 22일 (토) 02:59 기준 최신판
이 모듈에 대한 설명문서는 모듈:궤적시리즈/하늘의 궤적/캐릭터 스테이터스/설명문서에서 만들 수 있습니다
local p = {}
-- 쉼표로 구분된 문자열을 숫자 배열로 변환
local function parseValues(str)
local values = {}
for val in string.gmatch(str or "", "([^,]+)") do
table.insert(values, val)
end
return values
end
function p.renderCharacterStats(frame)
local stats = {
{name="HP", vals=parseValues(frame.args.HP)},
{name="STR", vals=parseValues(frame.args.STR)},
{name="DEF", vals=parseValues(frame.args.DEF)},
{name="ATS", vals=parseValues(frame.args.ATS)},
{name="ADF", vals=parseValues(frame.args.ADF)},
{name="DEX", vals=parseValues(frame.args.DEX)},
{name="AGL", vals=parseValues(frame.args.AGL)},
{name="MOV", vals=parseValues(frame.args.MOV)},
{name="RNG", vals=parseValues(frame.args.RNG)},
{name="SPD", vals=parseValues(frame.args.SPD)},
{name="명중률+", vals=parseValues(frame.args["명중률+"])},
{name="필살률+", vals=parseValues(frame.args["필살률+"])},
{name="회피율+", vals=parseValues(frame.args["회피율+"])},
{name="마법회피율+", vals=parseValues(frame.args["마법회피율+"])}
}
local html = mw.html.create("div")
:css("display","flex")
:css("flex-wrap","wrap")
:css("gap","10px")
:css("justify-content","center")
:css("align-items","flex-start")
local function makeTable(tblStats)
local tbl = mw.html.create("table")
:addClass("wikitable")
:css("flex","1")
:css("min-width","300px")
:css("text-align","center")
:css("border-collapse","separate")
:css("border-spacing","0")
:css("margin","0")
:css("border-radius","8px")
:css("overflow","hidden")
-- 헤더
local tr = tbl:tag("tr")
local headers = {"능력치", "성장치", "Lv1", "Lv50", "Lv120"}
local widths = {"30%", "17.5%", "17.5%", "17.5%", "17.5%"}
for i, header in ipairs(headers) do
tr:tag("th")
:css("background-color","#2E3B84")
:css("color","white")
:css("font-weight","bold")
:css("padding","8px")
:css("width",widths[i])
:wikitext(header)
end
-- 행
for i, stat in ipairs(tblStats) do
local tr = tbl:tag("tr")
-- 능력치 이름
tr:tag("td")
:css("background-color","#446DFF")
:css("color","white")
:css("font-weight","bold")
:css("text-align","left")
:css("padding","6px")
:wikitext(stat.name)
-- 입력값: 홀짝행 배경색
local bg = (i % 2 == 1) and "#EDF3FF" or ""
for j=1,4 do
tr:tag("td")
:css("background-color",bg)
:css("padding","6px")
:css("width","17.5%")
:wikitext(stat.vals[j] or "")
end
end
return tbl
end
html:node(makeTable({unpack(stats,1,7)})) -- 왼쪽
html:node(makeTable({unpack(stats,8,14)})) -- 오른쪽
return tostring(html)
end
return p