Módulo:EstatisticasAnoSemAssistencia
Ir para navegação
Ir para pesquisar
A documentação para este módulo pode ser criada em Módulo:EstatisticasAnoSemAssistencia/doc
local p = {} -- Tabela de ordenação de posições local ordemPosicoes = { GL = 1, -- Goleiros ZG = 2, -- Zagueiros LT = 3, -- Laterais VL = 4, -- Volantes MC = 5, -- Meio-campistas AT = 6 -- Atacantes } -- Função para processar o nome do jogador local function processarNomeJogador(nome) if not nome then return "N/A" end local nomeSemColchetes = nome:match("%[%[([^|%]]+)%]%]") or nome:match("%[%[([^|%]]+)%|") or nome nomeSemColchetes = nomeSemColchetes:gsub("^:", "") return nomeSemColchetes end -- Função para obter a foto do jogador local function obterFotoJogador(nome, frame) local nomeProcessado = processarNomeJogador(nome) local query = string.format("{{#show: %s |?FotoJogador}}", nomeProcessado) return frame:preprocess(query) end -- Função para verificar se o jogador foi para o banco local function verificarBancario(nome, frame, ano) local nomeProcessado = processarNomeJogador(nome) local query = string.format("{{#ask:[[Banco::%s]][[AnoJogo::%d]]|limit=100000|format=count|default=0}}", nomeProcessado, ano) return frame:preprocess(query) end -- Função para verificar se o jogador foi capitão local function verificarCapitao(nome, frame, ano) local nomeProcessado = processarNomeJogador(nome) local query = string.format("{{#ask:[[Capitao::%s]][[AnoJogo::%d]]|limit=100000|format=count|default=0}}", nomeProcessado, ano) return frame:preprocess(query) end -- Função para contar cartões amarelos local function contarAmarelos(nome, frame, ano) local nomeProcessado = processarNomeJogador(nome) local query = string.format("{{#ask:[[Amarelo::%s]][[AnoJogo::%d]]|limit=100000|format=count|default=0}}", nomeProcessado, ano) return frame:preprocess(query) end -- Função para contar cartões vermelhos local function contarVermelhos(nome, frame, ano) local nomeProcessado = processarNomeJogador(nome) local query = string.format("{{#ask:[[Vermelho::%s]][[AnoJogo::%d]]|limit=100000|format=count|default=0}}", nomeProcessado, ano) return frame:preprocess(query) end -- Função para verificar jogos local function verificarJogos(nome, frame, ano) local nomeProcessado = processarNomeJogador(nome) local query = string.format("{{#ask:[[JogadorNome::%s]][[AnoJogo::%d]]|limit=100000|format=count|default=0}}", nomeProcessado, ano) local resultado = frame:preprocess(query) return tonumber(resultado) or 0 end -- Função para calcular gols de um jogador local function calcularGols(nome, frame, ano) local nomeProcessado = processarNomeJogador(nome) local query = string.format( "{{#expr:{{#ask: [[1Gols::%s]][[AnoJogo::%d]]|limit=100000|format=count|default=0}} + " .. "{{#ask: [[2Gols::%s]][[AnoJogo::%d]]|limit=100000|format=count|default=0}} * 2 + " .. "{{#ask: [[3Gols::%s]][[AnoJogo::%d]]|limit=100000|format=count|default=0}} * 3 + " .. "{{#ask: [[4Gols::%s]][[AnoJogo::%d]]|limit=100000|format=count|default=0}} * 4 + " .. "{{#ask: [[5Gols::%s]][[AnoJogo::%d]]|limit=100000|format=count|default=0}} * 5 + " .. "{{#ask: [[6Gols::%s]][[AnoJogo::%d]]|limit=100000|format=count|default=0}} * 6 + " .. "{{#ask: [[13Gols::%s]][[AnoJogo::%d]]|limit=100000|format=count|default=0}} * 13 + " .. "{{#ask: [[14Gols::%s]][[AnoJogo::%d]]|limit=100000|format=count|default=0}} * 14}}", nomeProcessado, ano, nomeProcessado, ano, nomeProcessado, ano, nomeProcessado, ano, nomeProcessado, ano, nomeProcessado, ano, nomeProcessado, ano, nomeProcessado, ano ) return tonumber(frame:preprocess(query)) or 0 end -- Função Family Search (que estava faltando) local function gerarLinkFamilySearch(nome, frame) local nomeProcessado = processarNomeJogador(nome) local query = string.format( "{{#ifeq: {{#ask: [[PaginaJogador::%s]][[PerfilFS::!null]] |?PerfilFS |format=array |limit=1 |link=none |mainlabel=- |hidegaps=none}} | | | [[Arquivo:Family Search.png|13px|link=https://www.familysearch.org/tree/person/details/{{#ask: [[PaginaJogador::%s]] |?PerfilFS |format=array |limit=1 |link=none |mainlabel=- |hidegaps=none}}|Family Search de %s]] }}", nomeProcessado, nomeProcessado, nomeProcessado ) return frame:preprocess(query) end -- Função Prata da Casa local function gerarLinkPrataDaCasa(nome, frame) local nomeProcessado = processarNomeJogador(nome) local query = string.format("{{#invoke:PrataDaCasa|verificarPrataDaCasa|%s}}", nomeProcessado) local resultado = frame:preprocess(query) if resultado and resultado ~= "" then return "[[Arquivo:Prata da Casa.png|17px|link=:Categoria:Jogadores Base Gremista|alt=Prata da Casa]]" end return "" end -- Função para obter a posição do jogador local function obterPosicaoJogador(nome, frame) local nomeProcessado = processarNomeJogador(nome) local query = string.format("{{#invoke:Posicao|verificarPosicao|%s}}", nomeProcessado) return frame:preprocess(query) or "AT" end -- Função para calcular idade local function calcularIdade(nome, frame, ano) local nomeProcessado = processarNomeJogador(nome) local query = string.format("{{#invoke:IdadeTemporada|calcularIdade|%s|%d}}", nomeProcessado, ano) local resultado = frame:preprocess(query) return (resultado ~= "-" and resultado) or "N/A" end -- Função para buscar todos os jogadores local function buscarTodosJogadores(frame, ano) local queryJogadores = string.format("[[AnoJogo::%d]] |?JogadorNome |limit=1000", ano) local queryBancarios = string.format("[[AnoJogo::%d]] |?Banco |limit=1000", ano) local resultsJogadores = mw.smw.ask(queryJogadores) local resultsBancarios = mw.smw.ask(queryBancarios) local jogadores = {} if resultsJogadores then for _, jogo in ipairs(resultsJogadores) do if jogo.JogadorNome then if type(jogo.JogadorNome) == "string" then jogadores[jogo.JogadorNome] = true else for _, nome in ipairs(jogo.JogadorNome) do jogadores[nome] = true end end end end end if resultsBancarios then for _, jogo in ipairs(resultsBancarios) do if jogo.Banco then if type(jogo.Banco) == "string" then jogadores[jogo.Banco] = true else for _, nome in ipairs(jogo.Banco) do jogadores[nome] = true end end end end end return jogadores end -- Função principal (sem assistências) function p.estatisticas(frame) local ano = tonumber(frame.args[1]) or 1981 local todosJogadores = buscarTodosJogadores(frame, ano) local jogadoresOrdenados = {} for nome, _ in pairs(todosJogadores) do table.insert(jogadoresOrdenados, { nome = nome, gols = calcularGols(nome, frame, ano), bancario = tonumber(verificarBancario(nome, frame, ano)) or 0, capitao = verificarCapitao(nome, frame, ano), amarelos = contarAmarelos(nome, frame, ano), vermelhos = contarVermelhos(nome, frame, ano), jogos = verificarJogos(nome, frame, ano), idade = calcularIdade(nome, frame, ano), posicao = obterPosicaoJogador(nome, frame), ordemPosicao = ordemPosicoes[obterPosicaoJogador(nome, frame)] or 7 }) end -- Ordenação table.sort(jogadoresOrdenados, function(a, b) if a.ordemPosicao ~= b.ordemPosicao then return a.ordemPosicao < b.ordemPosicao end if a.jogos ~= b.jogos then return a.jogos > b.jogos end if a.gols ~= b.gols then return a.gols > b.gols end return a.bancario > b.bancario end) -- Construir tabela sem assistências local tabela = {"{| class='wikitable sortable'"} local cabecalho = string.format("! Posição !! Jogador !! Foto !! Idade !! Jogos !! Gols %s !! Bancário !! Capitão %s !! Cartão %s !! Cartão %s", frame:preprocess("{{gol}}"), frame:preprocess("{{cap}}"), frame:preprocess("{{camarelo}}"), frame:preprocess("{{cvermelho}}") ) table.insert(tabela, cabecalho) for _, jogadorInfo in ipairs(jogadoresOrdenados) do local nomeProcessado = processarNomeJogador(jogadorInfo.nome) local templateJogador = string.format("{{%s}}", nomeProcessado) local wikitexto = frame:preprocess(templateJogador) local fotoJogador = obterFotoJogador(jogadorInfo.nome, frame) local prataDaCasa = gerarLinkPrataDaCasa(jogadorInfo.nome, frame) local linkFamilySearch = gerarLinkFamilySearch(jogadorInfo.nome, frame) local nomeComIcones = string.format("%s %s %s", wikitexto, prataDaCasa, linkFamilySearch) table.insert(tabela, string.format("|-\n| %s || %s || %s || %s || %d || %d || %d || %s || %s || %s", jogadorInfo.posicao, nomeComIcones, fotoJogador, jogadorInfo.idade, jogadorInfo.jogos, jogadorInfo.gols, jogadorInfo.bancario, jogadorInfo.capitao, jogadorInfo.amarelos, jogadorInfo.vermelhos)) end table.insert(tabela, "|}") return table.concat(tabela, "\n") end return p