모듈:애프터라이프

최근 편집: 2019년 11월 29일 (금) 18:27

이 모듈에 대한 설명문서는 모듈:애프터라이프/설명문서에서 만들 수 있습니다

local p = {}

-------------------------------------
-- 점 항목(2단계부터 시작)으로 된 이벤트 리스트를 만듭니다.
-------------------------------------
function p.eventList(frame)
  local args = frame.args[1] ~= nil and frame.args or frame:getParent().args
  
	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 = '* [[파일:%s(인게임 홈 배너).png|204px|링크=%s(애프터라이프)]]\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

return p