이 모듈에 대한 설명문서는 모듈:Ensemblestars/설명문서에서 만들 수 있습니다
local p = {}
local function _card(args, frame)
local returnText, images = '', {}
if args['이름'] == nil then
args['이름'] = '없음'
end
if args['개화'] == '전' then
images[#images+1] = '개화 전'
elseif args['개화'] == '후' then
images[#images+1] = '개화 후'
elseif args['개화'] == '전후' then
images[#images+1] = '개화 전'
images[#images+1] = '개화 후'
else
images[#images+1] = '개화 전'
end
local width = 160
local plain = string.find(args[1], "【") == nil
returnText = returnText .. '<table style="display:inline-block;"><tr>'
for i, v in ipairs(images) do
returnText = returnText .. '<td style="border-width:0;width:' .. width .. 'px;height:' .. (width/4*5) .. ';px;padding:0;">'
if plain then
returnText = returnText .. '[[파일:앙상블스타즈 for kakao ' .. args[1] .. ' 카드 ' .. v .. '.png'
else
returnText = returnText .. '[[파일:' .. args[1] .. ' ' .. v .. '.png'
end
returnText = returnText .. '|' .. width .. 'x' .. (width/4*5) .. '픽셀'
local link = args['이미지 링크']
if link ~= nil then
returnText = returnText .. '|링크=' .. link
end
returnText = returnText .. '|' .. args[1] .. ' ' .. v
returnText = returnText .. ']]'
returnText = returnText .. '</td>'
end
returnText = returnText .. '</tr>'
if args['이름'] == '있음' then
returnText = returnText .. '<tr><td style="border-width:0;width:160px;text-align:center;"'
if #images == 2 then
returnText = returnText .. ' colspan=2'
end
if plain then
returnText = returnText .. '>[[' .. args[1] .. '(앙상블스타즈 for kakao 카드)|' .. args[1] .. ']]'
else
returnText = returnText .. '>[[' .. args[1] .. ']]'
end
returnText = returnText .. '</td></tr>'
end
return returnText .. '</table>'
end
local function unitSkillTableStart(label)
return '<table class = "sortable wikitable full-width-on-mobile">' ..
'<tr>' ..
'<th>' .. ( label ~= nil and label or '이름' ) .. '/효과</th>' ..
'<th>멤버</th>' ..
'<th>이벤트</th>' ..
'</tr>'
end
local function unitSkillTableEnd()
return '</table>\n'
end
local function unitSkillRow(datum, frame)
local rt = '<tr>'
--이름/효과 셀을 출력합니다.
local dataSortValue = math.max(0, datum['댄스'] or 0, datum['보컬'] or 0, datum['퍼포먼스'] or 0, datum['Fantasy'] or 0, datum['Cool'] or 0, datum['Active'] or 0, datum['고평점'] or 0)
rt = rt .. '<td data-sort-value='.. dataSortValue ..">'''" .. datum['이름'] .. "'''<br/>"
if datum['아르바이트'] == nil then
for i, v in ipairs( { '댄스', '보컬', '퍼포먼스' } ) do
if datum[v] ~= nil then rt =
rt .. '<span style="background-color: '
.. frame:expandTemplate{
title = '앙상블스타즈 for kakao 속성 색깔',
args = { v }
}
.. '; color:white;border-radius:.3em;padding:.1em .4em;">'
.. v .. '</span> '
.. datum[v] .. '% △'
end
end
else
rt = rt .. '「' .. datum['아르바이트'] .. '」 '
if datum['Fantasy'] ~= nil then rt = rt .. 'Fantasy ' .. datum['Fantasy'] .. '% ' end
if datum['Cool'] ~= nil then rt = rt .. 'Cool ' .. datum['Cool'] .. '% ' end
if datum['Active'] ~= nil then rt = rt .. 'Active ' .. datum['Active'] .. '% ' end
if datum['고평점'] ~= nil then rt = rt .. '고평점 획득 확률 ' .. datum['고평점'] .. '% ' end
rt = rt .. '상승'
end
rt = rt .. '</td>'
--
rt = rt .. '<td style="line-height: 0;" data-sort-value='.. #datum ..'>'
for i, v in ipairs(datum) do
if i==math.floor(i) then
rt = rt .. frame:expandTemplate{
title = '앙상블스타즈 for kakao 아이돌',
args = { v, ["이름"] = '아래' }
}
end
end
rt = rt .. '</td>'
rt = rt .. '<td>' .. (datum['이벤트'] ~= nil and '[[' .. datum['이벤트'] .. '(앙상블스타즈 for kakao)|'..datum['이벤트']..']]' or '') .. '</td>'
return rt .. '</tr>\n';
end
local function _unitSkill(args, frame)
local data, returnText = {}, ''
for i, v in ipairs(args) do
data[#data+1] = {}
for token in string.gmatch(v, '%s*([^,\n]+)%s*') do
local left, right = string.match(token, '(.+):'), string.match(token, ':(.+)')
if left ~= nil and right ~= nil then
data[#data][left] = right
else
data[#data][#data[#data]+1] = token
end
end
end
table.sort(data, function (left, right) return #left < #right end)
returnText = returnText .. '== 효과별 ==\n아래 표에는 종료된 이벤트 유닛 스킬은 제외되어 있다.\n'
returnText = returnText .. '=== 댄스(레드) ===\n'
returnText = returnText .. unitSkillTableStart('이름')
for i, v in ipairs(data) do
if v['댄스'] ~= nil and (v['이벤트'] == nil or v['이벤트'] == args['이벤트']) then
returnText = returnText .. unitSkillRow(v,frame)
end
end
returnText = returnText .. unitSkillTableEnd()
returnText = returnText .. '=== 보컬(블루) ===\n'
returnText = returnText .. unitSkillTableStart('이름')
for i, v in ipairs(data) do
if v['보컬'] ~= nil and (v['이벤트'] == nil or v['이벤트'] == args['이벤트']) then
returnText = returnText .. unitSkillRow(v,frame)
end
end
returnText = returnText .. unitSkillTableEnd()
returnText = returnText .. '=== 퍼포먼스(옐로) ===\n'
returnText = returnText .. unitSkillTableStart('이름')
for i, v in ipairs(data) do
if v['퍼포먼스'] ~= nil and (v['이벤트'] == nil or v['이벤트'] == args['이벤트']) then
returnText = returnText .. unitSkillRow(v,frame)
end
end
returnText = returnText .. unitSkillTableEnd()
returnText = returnText .. '=== 아르바이트 ===\n'
returnText = returnText .. unitSkillTableStart('이름')
for i, v in ipairs(data) do
if v['아르바이트'] ~= nil and (v['이벤트'] == nil or v['이벤트'] == args['이벤트']) then
returnText = returnText .. unitSkillRow(v,frame)
end
end
returnText = returnText .. unitSkillTableEnd()
returnText = returnText .. '== 조건별 ==\n아래 표에는 종료된 이벤트 유닛 스킬은 제외되어 있다.\n'
returnText = returnText .. '=== 유닛 ===\n'
returnText = returnText .. unitSkillTableStart('유닛')
for i, v in ipairs(data) do
if v['조건'] == '유닛' and v['이벤트'] == nil then
returnText = returnText .. unitSkillRow(v,frame)
end
end
returnText = returnText .. unitSkillTableEnd()
returnText = returnText .. '=== 동아리 ===\n'
returnText = returnText .. unitSkillTableStart('동아리')
for i, v in ipairs(data) do
if v['조건'] == '동아리' and v['이벤트'] == nil then
returnText = returnText .. unitSkillRow(v,frame)
end
end
returnText = returnText .. unitSkillTableEnd()
returnText = returnText .. '=== 기타 ===\n'
returnText = returnText .. unitSkillTableStart('이름')
for i, v in ipairs(data) do
if v['조건'] ~= '유닛' and v['조건'] ~= '동아리' and (v['이벤트'] == nil or v['이벤트'] == args['이벤트']) then
returnText = returnText .. unitSkillRow(v,frame)
end
end
returnText = returnText .. unitSkillTableEnd()
returnText = returnText .. '== 전체 ==\n아래 표에는 종료된 이벤트 유닛 스킬도 포함되어 있다.\n'
returnText = returnText .. unitSkillTableStart('이름')
for i, v in ipairs(data) do
returnText = returnText .. unitSkillRow(v,frame)
end
returnText = returnText .. unitSkillTableEnd()
return returnText
-- 조건
-- 유닛 / 동아리
-- 효과
-- 속성 증가(레드, 블루, 옐로) / 아르바이트
-- 인원수
--
end
-------------------------------------
-- 점 항목(2단계부터 시작)으로 된 이벤트 리스트를 만듭니다.
-------------------------------------
local function _eventList(args, frame)
local data, returnText, ct = {}, '', 0
for i, v in ipairs(args) do
if i % 3 == 1 then
data[#data+1] = {}
data[#data]['name'] = v
elseif i % 3 == 2 then
if v == '' then
data[#data]['start'] = 0
else
data[#data]['start'] = frame:callParserFunction('#time', { 'U', v })+0
end
elseif i % 3 == 0 then
if v == '' or v == '\n' then
data[#data]['end'] = 0
else
data[#data]['end'] = frame:callParserFunction('#time', { 'U', v })+0
end
end
end
local format = '* [[파일:앙상블스타즈 for kakao %s 배너.png' ..
'|class=notpageimage' ..
'|204px|링크=%s(앙상블스타즈 for kakao)]]\n'
local now = os.time()+60*60*9
--진행중인 이벤트들을 자례대로 출력합니다.
ct = 0
for i, v in ipairs(data) do
if
( v['start'] ~= 0 or v['end'] ~= 0 )
and ( v['start'] == 0 or now > v['start'] )
and ( v['end'] == 0 or now < v['end'] )
then
ct = ct + 1
returnText = returnText .. string.format(format, v['name'], v['name'])
end
end
if ct == 0 then
returnText = returnText .. '* (없음)\n'
end
--아직 진행 전인 이벤들을 시작이 빠른 순으로 출력합니다.
local notice = ''
ct = 0
table.sort(data, function(left, right) return left['start']<right['start'] end)
for i, v in ipairs(data) do
if
( v['start'] == 0 and v['end'] == 0 )
or (
( v['start'] ~= 0 and now < v['start'] )
and ( v['end'] == 0 or now < v['end'] )
)
then
ct = ct + 1
notice = notice .. string.format(format, v['name'], v['name'])
end
end
if ct ~= 0 then
returnText = returnText .. '** 예고\n' .. notice
end
--종료된 이벤트는 종료가 늦은 순으로 출력합니다.
returnText = returnText .. '* 지난 이벤트\n'
table.sort(data, function(left, right) return left['end']>right['end'] end)
for i, v in ipairs(data) do
if
( v['start'] ~= 0 or v['end'] ~= 0 )
and ( v['end'] ~= 0 and now > v['end'] )
and ( v['start'] == 0 or now > v['start'] )
then
returnText = returnText .. string.format(format, v['name'], v['name'])
end
end
return string.sub(returnText, 1,string.len(returnText)-1) --마지막 문자(\n)는 빼고 출력합니다.
end
-------------------------------------
-- frame 객체가 틀에서 호출되어 생긴 frame인지 바로 모듈이 호출되어 생긴 frame인지와 무관하게 args를 찾습니다.
-- @param frame 호출되면서 자동으로 만들어진 frame 객체.
-- @return args 호출되면서 전달받은 전달인자.
-------------------------------------
local function safeArgs(frame)
if frame.args[1] ~= nil then --frame은 metatable이라 next(frame.args)가 안 된다고 하여 이리 되었습니다.
return frame.args
else
return frame:getParent().args
end
end
function p.card(frame)
return _card(safeArgs(frame), frame)
end
function p.unitSkill(frame)
return _unitSkill(safeArgs(frame), frame)
end
function p.eventList(frame)
return _eventList(safeArgs(frame), frame)
end
return p