Toggle menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.

Module:Event bonus cards: Difference between revisions

From Sekaipedia
Content added Content deleted
mNo edit summary
No edit summary
Line 8: Line 8:


local function cargoQuery(where)
local function cargoQuery(where)
local tables = 'Cards'
local tables = 'Cards, card_skills'
local fields = [[
local fields = [[
_pageName,
Cards._pageName = cardPageName,
Cards.card_id,
rarity,
Cards.rarity,
thumbnail,
Cards.thumbnail,
thumbnail_trained,
Cards.thumbnail_trained,
card_name,
Cards.card_name,
card_character
Cards.card_character,
Cards.attribute,
Cards.rarity,
Cards.status,
Cards.acquire,
card_skills.skill_type,
]]
]]
local args = {
local args = {
where = where,
where = where,
join = 'Cards._pageID = card_skills._pageID',
orderBy = 'Cards.rarity DESC, Cards.card_id DESC',
orderBy = 'Cards.rarity DESC, Cards.card_id DESC',
groupBy = 'Cards._pageID'
groupBy = 'Cards._pageID'
Line 82: Line 89:
name = 'id',
name = 'id',
header = 'ID',
header = 'ID',
dataFields = { 'card_id' }
dataFields = { 'Cards.card_id' }
},
},
{
{
name = 'thumbnail',
name = 'thumbnail',
header = 'Thumbnail',
header = 'Thumbnail',
dataFields = { 'thumbnail' },
dataFields = { 'Cards.thumbnail' },
func = formatThumbnail,
func = formatThumbnail,
sortable = false
sortable = false
Line 94: Line 101:
name = 'name',
name = 'name',
header = 'Card name',
header = 'Card name',
dataFields = { 'cardPageName', 'card_name' },
dataFields = { 'cardPageName', 'Cards.card_name' },
func = formatPageLink
func = formatPageLink
},
{
name = 'attribute',
header = 'Attribute',
dataFields = { 'Cards.attribute' },
visible = false
},
{
name = 'rarity',
header = 'Rarity',
dataFields = { 'Cards.rarity' },
visible = false
},
{
name = 'status',
header = 'Status',
dataFields = { 'Cards.status' },
visible = false
},
{
name = 'skill',
header = 'Skill',
dataFields = { 'card_skills.skill_type' },
visible = false
},
{
name = 'acquire',
header = 'Acquisition method(s)',
dataFields = { 'Cards.acquire' },
func = formatAcquire,
visible = false
},
},
}
}

Revision as of 22:24, 20 April 2022

To generate {{Event bonus cards}}, invoke using the main function.


local getArgs = require('Module:Arguments').getArgs
local DatatableBuilder = require('Module:DatatableBuilder')
local utils   = require('Module:Utilities')
local cargo        = mw.ext.cargo
local VariablesLua = mw.ext.VariablesLua

local p = {}

local function cargoQuery(where)
	local tables = 'Cards, card_skills'
	local fields = [[
		Cards._pageName = cardPageName,
		Cards.card_id,
		Cards.rarity,
		Cards.thumbnail,
		Cards.thumbnail_trained,
		Cards.card_name,
		Cards.card_character,
		Cards.attribute,
		Cards.rarity,
		Cards.status,
		Cards.acquire,
		card_skills.skill_type,
	]]
	local args = {
        where = where,
        join = 'Cards._pageID = card_skills._pageID',
        orderBy = 'Cards.rarity DESC, Cards.card_id DESC',
        groupBy = 'Cards._pageID'
    }
    
    return cargo.query( tables, fields, args )
end

local function getVSMapping()
	local virtualSingers = {
		'Hatsune Miku',
		'Kagamine Rin',
		'Kagamine Len',
		'Megurine Luka',
		'MEIKO',
		'KAITO'
	}
	local units = { 
		'Leo/need',
		'MORE MORE JUMP!',
		'Vivid BAD SQUAD',
		'Wonderlands×Showtime',
		'25-ji, Nightcord de.'
	}
	
	local mapping = {}
	
	for _, character in ipairs(virtualSingers) do
		for _, unit in ipairs(units) do
			local key = string.format(
				'%s (%s)',
				character,
				unit
			)
			
			mapping[key] = {
				['character'] = character,
				['support unit'] = unit
			}
		end
	end
	
	for _,character in ipairs(virtualSingers) do
		local key = string.format(
			'%s (VIRTUAL SINGER)',
			character
		)
		
		mapping[key] = {
			['character'] = character,
			['support unit'] = ''
		}
	end
	
	return mapping
end

local function getTable(data)
	local datatable = DatatableBuilder.new()
	datatable
		:setColumns{
			{
				name = 'id',
				header = 'ID',
				dataFields = { 'Cards.card_id' }
			},
			{
				name = 'thumbnail',
				header = 'Thumbnail',
				dataFields = { 'Cards.thumbnail' },
				func = formatThumbnail,
				sortable = false
			},
			{
				name = 'name',
				header = 'Card name',
				dataFields = { 'cardPageName', 'Cards.card_name' },
				func = formatPageLink
			},
			{
				name = 'attribute',
				header = 'Attribute',
				dataFields = { 'Cards.attribute' },
				visible = false
			},
			{
				name = 'rarity',
				header = 'Rarity',
				dataFields = { 'Cards.rarity' },
				visible = false
			},
			{
				name = 'status',
				header = 'Status',
				dataFields = { 'Cards.status' },
				visible = false
			},
			{
				name = 'skill',
				header = 'Skill',
				dataFields = { 'card_skills.skill_type' },
				visible = false
			},
			{
				name = 'acquire',
				header = 'Acquisition method(s)',
				dataFields = { 'Cards.acquire' },
				func = formatAcquire,
				visible = false
			},
		}
		:setData( data )

	return datatable
end

function p.main(frame)
	local args = getArgs(frame)
	
	local characters = args['characters'] or VariablesLua.var('characters')
	local characterList = {}
	
	local attribute = args['attribute'] or VariablesLua.var('attribute')
	local maxDate   = args['max date'] or VariablesLua.var('start')
	
	if maxDate then
		maxDate = mw.text.split(maxDate, ',')[1]
	end
	
	if characters then
		characterList = utils.splitWithDelim(';')(characters)
	end
	
	local vsMapping = getVSMapping()
	
	local characterWheres = {}
	
	for _,character in ipairs(characterList) do
		local vals = vsMapping[character] or
			{ ['character'] = character }
		
		local where = '('
		
		where = where .. string.format(
			"Cards.card_character = '%s'",
			vals['character']
		)
		
		if vals['support unit'] then
			where = where .. string.format(
				" AND Cards.support_unit = '%s'",
				vals['support unit']
			)
		end
		
		where = where .. ')'
		
		table.insert(characterWheres, where)
	end
	
	characterWheres = table.concat(characterWheres, ' OR ')
	
	local wheres = 	"(Cards.attribute = '" .. attribute .. "')" ..
		' AND ' ..
		"(Cards.date <= '" .. maxDate .. "')" ..
		' AND ' ..
		'(' .. characterWheres .. ')'
	
	local results = cargoQuery(wheres)
	
	return getTable(results):tostring() .. wheres
end

return p
Cookies help us deliver our services. By using our services, you agree to our use of cookies.