(Created page with "local getArgs = require('Module:Arguments').getArgs local cargo = mw.ext.cargo local html = require('Module:MatchHTML') local Match = {} local VariablesLua = mw.ext.VariablesLua function Match.main(frame) local args = getArgs(frame) local bestof = args.bestof or 3 local maps = {} p1score = args.p1score or 0 p2score = args.p2score or 0 for i = 1, bestof do if args['map' .. i] ~= nil then local map = mw.text.jsonDecode(args['map' .. i]) -- If no score i...") |
mNo edit summary |
||
Line 9: | Line 9: | ||
local args = getArgs(frame) | local args = getArgs(frame) | ||
local bestof = args.bestof or 3 | local bestof = VariablesLua.varexists('bestof') and VariablesLua.var('bestof') or args.bestof or 3 | ||
local maps = {} | local maps = {} | ||
Revision as of 23:25, 5 October 2023
Documentation for this module may be created at Module:Match/doc
local getArgs = require('Module:Arguments').getArgs local cargo = mw.ext.cargo local html = require('Module:MatchHTML') local Match = {} local VariablesLua = mw.ext.VariablesLua function Match.main(frame) local args = getArgs(frame) local bestof = VariablesLua.varexists('bestof') and VariablesLua.var('bestof') or args.bestof or 3 local maps = {} p1score = args.p1score or 0 p2score = args.p2score or 0 for i = 1, bestof do if args['map' .. i] ~= nil then local map = mw.text.jsonDecode(args['map' .. i]) -- If no score is manually set in template, then add to score if map.winner and args.p1score == nil and args.p2score == nil then _G['p' .. map.winner .. 'score'] = _G['p' .. map.winner .. 'score'] + 1 end maps[i] = map end end local neededScore = math.ceil(args.bestof / 2) local winner = (p1score < neededScore and p2score < neededScore ) and 0 or #maps >= neededScore and p1score > p2score and 1 or 2 or 0 -- Start creation of output html local team1 = html.team(args.p1, p1score) local team2 = html.team(args.p2, p2score, true) args.p1 = args.p1 and getTeamPage(args.p1) args.p2 = args.p2 and getTeamPage(args.p2) local container = mw.html.create('div'):addClass('match'):node(team1):node(team2) -- local hover = mw.html.create('div'):addClass('match-details') local hover = html.teamHover(args.p1, args.p2, p1score, p2score, args.date) -- Don't add to database if no teams are entered if args.p1 ~= nil and args.p2 ~= nil then local stage = VariablesLua.varexists('stage') and VariablesLua.var('stage') or nil frame:callParserFunction{name = '#cargo_store:', args = {_table = 'AllMatches', p1 = args.p1, p2 = args.p2, p1score = p1score, p2score = p2score, date = args.date, winner = winner, bestof= args.bestof, stage = stage, casters = args.casters, twitch = args.twitch, youtube = args.youtube}} local pageTitle = mw.title.getCurrentTitle().text local tables = 'AllMatches' local fields = '_ID' local whereStr = '_pageName="' .. pageTitle .. '" AND p1="' .. args.p1 .. '" AND p2="' .. args.p2 .. '" AND date="' .. args.date .. '" AND p1score="' .. p1score .. '" AND p2score="' .. p2score .. '" AND winner="' .. winner .. '" AND bestof="' .. args.bestof .. '"' if stage then whereStr = whereStr .. ' AND stage="' .. stage .. '"' end if args.casters then local casters = mw.text.split(args.casters, ',') for i = 1, #casters do whereStr = whereStr .. ' AND casters HOLDS "' .. mw.text.trim(casters[i]) .. '"' end end if args.twitch then whereStr = whereStr .. ' AND twitch="' .. args.twitch .. '"' end if args.youtube then whereStr = whereStr .. ' AND youtube="' .. args.youtube .. '"' end local cargoArgs = { where = whereStr } local results = cargo.query(tables, fields, cargoArgs) if #results > 0 and #maps > 0 then for i = 1, #maps do local map = maps[i] if string.find(pageTitle, 'Dota2/') then local dota = require('Module:Match/Dota') dota.picksBans(map) frame:callParserFunction{name = '#cargo_store:', args = {_table = 'DotaMaps', map=i, api_id = map.id, matchID = results[1]._ID, duration = map.duration, p1picks = map.p1picks, p2picks = map.p2picks, p1bans = map.p1bans, p2bans = map.p2bans, dire = map.dire, winner = map.winner, vod = map.vod}} dota.main(map, hover, i, results) end end end end container:node(hover) return container end function getTeamPage(team) local currentTitle = mw.title.getCurrentTitle().text local gameCategory = mw.text.split(currentTitle, '/')[1] -- Check if shorthand of a team was used local tables = 'Teams' local fields = '_pageName, shorthand' local cargoArgs = { where = '_pageName LIKE "' .. gameCategory .. '/%" AND shorthand = "' .. team .. '"' } local results = cargo.query(tables, fields, cargoArgs) if #results > 0 then return results[1]._pageName else return gameCategory .. '/' .. team end end return Match