Module:Aichan:修订间差异
(bruh) |
(bruh bruh) 标签:撤销 |
||
第18行: | 第18行: | ||
end | end | ||
function p.main(args) | function p.main(frame) | ||
local args = getArgs(frame) | |||
return p._main(args) | |||
end | |||
function p._main(args) | |||
-- arg: time, unix 时间戳 | -- arg: time, unix 时间戳 | ||
-- 不传入则使用当前时间 | -- 不传入则使用当前时间 |
2024年4月11日 (四) 13:35的版本
可在Module:Aichan/doc创建此模块的帮助文档
local getArgs = require('Module:Arguments').getArgs
local songlist = mw.text.jsonDecode(mw.getCurrentFrame():expandTemplate{ title = 'Songlist.json' } ).songs
local mad = require 'Module:AnotherData'
local p={}
local randomizer={}
function initRandomizer(seed)
randomizer.x=seed
randomizer.y=seed
randomizer.z=seed
end
function getNext()
randomizer.x=(171*randomizer.x)%30269
randomizer.y=(172*randomizer.y)%30307
randomizer.z=(170*randomizer.z)%30323
return ((randomizer.x/30269+randomizer.y/30307+randomizer.z/30323)%1)
end
function p.main(frame)
local args = getArgs(frame)
return p._main(args)
end
function p._main(args)
-- arg: time, unix 时间戳
-- 不传入则使用当前时间
local time = args['time'] or os.time()
local seed = math.floor((time-144e2)/864e2)
initRandomizer(seed)
local length=5000
local arr={}
for i=0,length-1,1 do
arr[i]=i
end
for i=length-1,1,-1 do
local r=getNext()
local swapPos=math.floor(r*i)
local temp=arr[i]
arr[i]=arr[swapPos]
arr[swapPos]=temp
end
local result={}
local resultIndex=0
local remainPaidCount=2
local remainFreeCount=1
local songSize=table.getn(songlist)
for i=0,length-1,1 do
if resultIndex>=3 then break end
local value=arr[i]
if value<songSize then
local info=songlist[value+1]
if info.set=='base' or info.id=='innocence' then
if remainFreeCount>0 then
remainFreeCount=remainFreeCount-1
resultIndex=resultIndex+1
result[resultIndex]=info
end
else
if remainPaidCount>0 then
remainPaidCount=remainPaidCount-1
resultIndex=resultIndex+1
result[resultIndex]=info
end
end
end
end
local frame = mw.getCurrentFrame()
local text = mw.html.create 'div'
text=text:wikitext(frame:expandTemplate {title = '组排列', args = {height = 'auto'}})
for i=1,3,1 do
local id=result[i].id
local title=result[i].title_localized.en
local link=mad.linkName(result[i]) or title
text:wikitext(frame:expandTemplate {title = '组排单元', args = {title,id,link=link}})
end
text = text:wikitext(frame:expandTemplate {title = '组排列-end'}):done()
return text
end
return p