打开主菜单
首页
随机
登录
设置
关于Arcaea中文维基
免责声明
搜索
查看“Module:Aichan”的源代码
←
Module:Aichan
因为以下原因,您没有权限编辑本页:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
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 dateStringToTime(date) if date==nil then return nil end local y,m,d = string.match(date, "([^/]+)/([^/]+)/([^/]+)") return os.time({year=y,month=m,day=d,hour=12,min=30}); end function p.main(frame) local args = getArgs(frame) return p._main(args) end function p._main(args) -- args: -- time: unix时间戳 -- date: YYYY/MM/DD格式的时间, 按这一天的北京时间12:30算 -- delay: 在得到的时间基础上再往后若干天 -- 优先级: time > date > 读取当前时间 local time = args['time'] or dateStringToTime(args['date']) or os.time() time=time+86400*(args['delay'] or 0) 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 resultFree={} local currentFreeCount=0 local resultPaid={} local currentPaidCount=0 local songSize=table.getn(songlist) for i=0,length-1,1 do if currentFreeCount+currentPaidCount>=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 currentFreeCount<1 then currentFreeCount=currentFreeCount+1 resultFree[currentFreeCount]=info end else if currentPaidCount<2 then currentPaidCount=currentPaidCount+1 resultPaid[currentPaidCount]=info end end end end local result if resultPaid[1].date<resultPaid[2].date then result={resultFree[1],resultPaid[1],resultPaid[2]} else result={resultFree[1],resultPaid[2],resultPaid[1]} 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
本页使用的模板:
Module:Aichan/doc
(
查看源代码
)
返回
Module:Aichan
。