익명
×
새 문서 만들기
여기에 문서 제목을 쓰세요:
We currently have 900 articles on 루리위키. Type your article name above or click on one of the titles below and start writing!



900Articles

모듈:궤적시리즈/하늘의 궤적/캐릭터 스테이터스: 두 판 사이의 차이

(새 문서: local p = {} function p.renderStatRow(frame) local raw = frame.args.HP or "" local parts = mw.text.split(raw, "/") return string.format([[ |- ! class="stat-header" | %s | class="stat-row" | %s | class="stat-row" | %s | class="stat-row" | %s | class="stat-row" | %s ]], frame.args.name or "", parts[1] or "", parts[2] or "", parts[3] or "", parts[4] or "" ) end return p)
 
편집 요약 없음
 
(같은 사용자의 중간 판 17개는 보이지 않습니다)
1번째 줄: 1번째 줄:
local p = {}
local p = {}


function p.renderStatRow(frame)
-- 쉼표로 구분된 문자열을 숫자 배열로 변환
     local raw = frame.args.HP or ""
local function parseValues(str)
     local parts = mw.text.split(raw, "/")
    local values = {}
      
    for val in string.gmatch(str or "", "([^,]+)") do
    return string.format([[
        table.insert(values, val)
|-
    end
! class="stat-header" | %s
    return values
| class="stat-row" | %s
end
| class="stat-row" | %s
 
| class="stat-row" | %s
function p.renderCharacterStats(frame)
| class="stat-row" | %s
     local stats = {
]],  
        {name="HP", vals=parseValues(frame.args.HP)},
frame.args.name or "",
        {name="STR", vals=parseValues(frame.args.STR)},
parts[1] or "",
        {name="DEF", vals=parseValues(frame.args.DEF)},
parts[2] or "",
        {name="ATS", vals=parseValues(frame.args.ATS)},
parts[3] or "",
        {name="ADF", vals=parseValues(frame.args.ADF)},
parts[4] or ""
        {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
end


return p
return p

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