From c769c4e78d60c5e16523495a2aad5ac4444f5230 Mon Sep 17 00:00:00 2001 From: BrunoMine Date: Tue, 9 Aug 2016 22:57:17 -0300 Subject: [PATCH] =?UTF-8?q?Bug=20de=20arquivo=20depurador=20corrigido=20O?= =?UTF-8?q?=20arquivo=20de=20debug.txt=20n=C3=A3o=20estava=20sendo=20encon?= =?UTF-8?q?trado=20devido=20a=20um=20erro=20de=20caminhos?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- LICENÇA.txt | 80 +++++++++++++++++++++ README.md | 46 +++++++++++- comandos.lua | 35 +++++++++ depends.txt | 0 diretrizes.lua | 24 +++++++ init.lua | 140 ++++++++++++++++++++++++++++++++++++ pingar.sh | 22 ++++++ textures/latent_players.png | Bin 0 -> 3983 bytes 8 files changed, 345 insertions(+), 2 deletions(-) create mode 100644 LICENÇA.txt create mode 100644 comandos.lua create mode 100644 depends.txt create mode 100644 diretrizes.lua create mode 100644 init.lua create mode 100755 pingar.sh create mode 100644 textures/latent_players.png diff --git a/LICENÇA.txt b/LICENÇA.txt new file mode 100644 index 0000000..57efb42 --- /dev/null +++ b/LICENÇA.txt @@ -0,0 +1,80 @@ +LICENÇA CC BY 3.0 BR + +A OBRA (CONFORME DEFINIDA ABAIXO) É DISPONIBILIZADA DE ACORDO COM OS TERMOS DESTA LICENÇA PÚBLICA +CREATIVE COMMONS ("CCPL" OU "LICENÇA"). A OBRA É PROTEGIDA POR DIREITO AUTORAL E/OU OUTRAS LEIS +APLICÁVEIS. QUALQUER USO DA OBRA QUE NÃO O AUTORIZADO SOB ESTA LICENÇA OU PELA LEGISLAÇÃO AUTORAL +É PROIBIDO. + +AO EXERCER QUAISQUER DOS DIREITOS À OBRA AQUI CONCEDIDOS, VOCÊ ACEITA E CONCORDA FICAR OBRIGADO +NOS TERMOS DESTA LICENÇA. O LICENCIANTE CONCEDE A VOCÊ OS DIREITOS AQUI CONTIDOS EM CONTRAPARTIDA +A SUA ACEITAÇÃO DESTES TERMOS E CONDIÇÕES. + +1. Definições + +"Obra Derivada" significa uma Obra baseada na Obra ou na Obra e outras Obras pré-existentes, +tal qual uma tradução, adaptação, arranjo musical ou outras alterações de uma Obra literária, +artística ou científica, ou fonograma ou performance, incluindo adaptações cinematográficas ou +qualquer outra forma na qual a Obra possa ser refeita, transformada ou adaptada, abrangendo +qualquer forma reconhecível como derivada da original, com exceção da Obra que constitua uma +Obra Coletiva, a qual não será considerada uma Obra Derivada para os propósitos desta Licença. +Para evitar dúvidas, quando a Obra for uma Obra musical, performance ou fonograma, a sincronização +da Obra em relação cronometrada com uma imagem em movimento (“synching”) será considerada uma +Obra Derivada para os propósitos desta Licença. + +"Obra Coletiva" significa uma coleção de Obras literárias, artísticas ou científicas, tais quais +enciclopédias e antologias, ou performances, fonogramas ou transmissões, ou outras Obras ou +materiais não indicados na Seção 1(g) abaixo, que em razão da seleção e arranjo do seu conteúdo, +constituam criações intelectuais nas quais a Obra é incluída na sua integridade em forma +não-modificada, juntamente com uma ou mais contribuições, cada qual constituindo separada e +independentemente uma Obra em si própria, que juntas são reunidas em um todo coletivo. A Obra +que constituir uma Obra Coletiva não será considerada uma Obra Derivada (como definido acima) +para os propósitos desta Licença. + +"Distribuir" significa colocar à disposição do público o original e cópias da Obra ou Obra +Derivada, o que for apropriado, por meio de venda ou qualquer outra forma de transferência de +propriedade ou posse. + +"Licenciante" significa a pessoa física ou jurídica que oferece a Obra sob os termos desta Licença. + +"Autor Original" significa, no caso de uma Obra literária, artística ou científica, o indivíduo ou +indivíduos que criaram a Obra ou, se nenhum indivíduo puder ser identificado, a editora. + +"Titular de Direitos Conexos" significa (i) no caso de uma performance os atores, cantores, músicos, +dançarinos, e outras pessoas que atuem, cantem, recitem, declamem, participem em, interpretem ou +façam performances de Obras literárias ou artísticas ou expressões de folclore (ii) no caso de um +fonograma, o produtor, sendo este a pessoa ou entidade legal que primeiramente fixar os sons de +uma performance ou outros sons; e (iii) no caso de radiodifusão, a empresa de radiodifusão. + +"Obra" significa a Obra literária, artística e/ou científica oferecida sob os termos desta Licença, +incluindo, sem limitação, qualquer produção nos domínios literário, artístico e científico, qualquer +que seja o modo ou a forma de sua expressão, incluindo a forma digital, tal qual um livro, brochuras +e outros escritos; uma conferência, alocução, sermão e outras Obras da mesma natureza; uma +Obra dramática ou dramático-musical; uma Obra coreográfica ou pantomima; uma composição musical +com ou sem palavras; uma Obra cinematográfica e as expressas por um processo análogo ao da +cinematografia; uma Obra de desenho, pintura, arquitetura, escultura, gravura ou litografia; uma +Obra fotográfica e as Obras expressas por um processo análogo ao da fotografia; uma Obra de arte +aplicada; uma ilustração, mapa, plano, esboço ou Obra tridimensional relativa a geografia, topografia, +arquitetura ou ciência; uma performance, transmissão ou fonograma, na medida em que tais +Obras/direitos sejam reconhecidos e protegidos pela legislação aplicável; uma compilação de dados, +na extensão em que ela seja protegida como uma Obra sujeita ao regime dos direitos autorais; ou +uma Obra executada por artistas circenses ou de shows de variedade, conforme ela não for considerada +uma Obra literária, artística ou científica. + +"Você" significa a pessoa física ou jurídica exercendo direitos sob esta Licença, que não tenha +previamente violado os termos desta Licença com relação à Obra, ou que tenha recebido permissão +expressa do Licenciante para exercer direitos sob esta Licença apesar de uma violação prévia. + +"Executar Publicamente" significa fazer a utilização pública da Obra e comunicar ao público a Obra, +por qualquer meio ou processo, inclusive por meios com ou sem fio ou performances públicas digitais; +disponibilizar ao público Obras de tal forma que membros do público possam acessar essas Obras de um +local e em um local escolhido individualmente por eles; Executar a Obra para o público por qualquer +meio ou processo e comunicar ao público performances da Obra, inclusive por performance pública +digital; transmitir e retransmitir a Obra por quaisquer meios, inclusive sinais, sons ou imagens. + +"Reproduzir" significa fazer cópias da Obra por qualquer meio, inclusive, sem qualquer limitação, +por gravação sonora ou visual, e o direito de fixar e Reproduzir fixações da Obra, inclusive o +armazenamento de uma performance protegida ou fonograma, em forma digital ou qualquer outro meio +eletrônico. + +Para continuar lendo a licença +https://creativecommons.org/licenses/by/3.0/br/legalcode diff --git a/README.md b/README.md index 944808c..3d28444 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,44 @@ -# latent -Mod para Minetest que verifica o LAG dos jogadores +Latent v0.8-beta +================ + +Por BrunoMine + +Um gestor de servidor de minetest + +LICENÇA LGPL v3 + +Gestor é um software livre; você pode redistribuí-lo e/ou +modificá-lo dentro dos termos da Licença Pública Geral Menor GNU +como publicada pela Fundação do Software Livre (FSF); na versão 3 +da Licença, ou (na sua opinião) qualquer versão. +Este programa é distribuído na esperança de que possa ser útil, +mas SEM NENHUMA GARANTIA; sem uma garantia implícita de ADEQUAÇÃO +a qualquer MERCADO ou APLICAÇÃO EM PARTICULAR. Veja a +Licença Pública Geral Menor GNU para maiores detalhes. +Você deve ter recebido uma cópia da Licença Pública +Geral Menor GNU junto com este programa, +se não, veja . + +Texturas estão sob licença CC-BY 3.0 + + +COMANDOS + +/lag | Abre a lista de jogadores online e o LAG de cada um + + + +REQUISITOS + +- O jogo precisa estar compilado com RUN_IN_PLACE + + +INSTALAR + +Esse mod verifica a latencia dos jogadores + +Modo de Usar (Linux): +Defina a permissao 775 para o arquivo pingar.sh que está no mod +Comando usado seria: +$ chmod 775 pingar.sh + diff --git a/comandos.lua b/comandos.lua new file mode 100644 index 0000000..d9b19e2 --- /dev/null +++ b/comandos.lua @@ -0,0 +1,35 @@ +--[[ + Mod Latent para Minetest + Latent v0.8-beta Copyright (C) 2016 BrunoMine (https://github.com/BrunoMine) + + Recebeste uma cópia da GNU Lesser General + Public License junto com esse software, + se não, veja em . + + Comandos + ]] + +-- Abrir lista de jogadores exibindo a latencia no jogo (LAG) +minetest.register_chatcommand("lag", { + params = "[Nenhum]", + description = "Mostra uma lista de jogadores online e uma listagem de latencia", + func = function(name, param) + if name then + ver_players_online(name) + end + end +}) + +-- Comando de verificacao manual de ips +minetest.register_chatcommand("ips", { + params = "", + description = "Verifica os ips dos jogadores online", + privs = {server=true}, + func = function(name) + for _, player in ipairs(minetest.get_connected_players()) do + local pname = player:get_player_name() + local ip = minetest.get_player_ip(pname) + minetest.chat_send_player(name, pname.." ("..ip..")") + end + end, +}) diff --git a/depends.txt b/depends.txt new file mode 100644 index 0000000..e69de29 diff --git a/diretrizes.lua b/diretrizes.lua new file mode 100644 index 0000000..ac4aeab --- /dev/null +++ b/diretrizes.lua @@ -0,0 +1,24 @@ +--[[ + Mod Latent para Minetest + Latent v0.8-beta Copyright (C) 2016 BrunoMine (https://github.com/BrunoMine) + + Recebeste uma cópia da GNU Lesser General + Public License junto com esse software, + se não, veja em . + + Diretrizes + ]] + +-- Numero de pings no ip (cada um demora 3 segundos) +PINGS = 1 + +-- Valor critico de latencia (em milissegundo) para enviar um aviso ao jogador +LATENCIA_CRITICA = 1000 + +-- Intervalo de tempo de verificação de latencias criticas (em segundos) +PAUSA_VERIFICAR_VALORES_CRITICOS = 45 + +-- Intervalo de tempo entre as verificações (em segundos) +PAUSA = 3 + + diff --git a/init.lua b/init.lua new file mode 100644 index 0000000..71834b7 --- /dev/null +++ b/init.lua @@ -0,0 +1,140 @@ +--[[ + Mod Latent para Minetest + Latent v0.8-beta Copyright (C) 2016 BrunoMine (https://github.com/BrunoMine) + + Recebeste uma cópia da GNU Lesser General + Public License junto com esse software, + se não, veja em . + + Funcionalidades basicas + ]] + +dofile(minetest.get_modpath("latent") .. "/diretrizes.lua") -- Carregar Diretrizes. + +-- Tempo gasto verificando um IP (em segundos) +local TEMPO_VERIFICANDO = ((PINGS * 3) + 3) + +-- Diretorio do mundo/mapa +local dirmapa = string.gsub(minetest.get_worldpath(), "(% +)", "\\ ") + +-- Diretorio do mod +local dirmod = string.gsub(minetest.get_modpath("latent"), "(% +)", "\\ ") + +-- Lista de jogadores online +local lista = {} + +-- Ler resultado do ping +local function ler_ping(ip, slot) + local entrada = io.open(minetest.get_worldpath() .. "/latent_ping" .. slot, "r") + local leitura = tonumber(entrada:read("*l")) + if leitura ~= nil then + lista[ip] = leitura -- Escreve o novo valor de ping no ip + io.close(entrada) + end +end + +-- Pingar um ip +local function pingar(ip, slot) + if ip then + os.execute(dirmod.."/pingar.sh "..PINGS.." "..ip.." > "..dirmapa.."/latent_ping"..slot.." &") + minetest.after(TEMPO_VERIFICANDO, ler_ping, ip, slot) + end +end + + +-- Atualizar lista +local function atualizar_lista() + local slot = 1 + for _, player in ipairs(minetest.get_connected_players()) do + local ip = minetest.get_player_ip(player:get_player_name()) + pingar(ip, slot) + slot = slot + 1 + end + minetest.after(TEMPO_VERIFICANDO+PAUSA, atualizar_lista) +end + + +-- Retira da lista o jogador que sair do servidor +minetest.register_on_leaveplayer(function(player) + local Nlista = {} + for _, player in ipairs(minetest.get_connected_players()) do + local ip = minetest.get_player_ip(player:get_player_name()) + Nlista[ip] = lista[ip] -- Repassa os ips de quem está online + end + lista = Nlista +end) + +-- Adiciona na lista o jogador que entrar no servidor +minetest.register_on_joinplayer(function(player) + lista[minetest.get_player_ip(player:get_player_name())] = tonumber(0) +end) + + +-- Funcao de concatenar valores +local function explode(sep, input) + local t={} + local i=0 + for k in string.gmatch(input,"([^"..sep.."]+)") do + t[i]=k + i=i+1 + end + return t +end +local function get_max_lag() -- pega o lag do servidor + local arrayoutput = explode(", ",minetest.get_server_status()) + local arrayoutput = explode("=",arrayoutput[4]) + return arrayoutput[1] +end + + +-- Funcao de ver players online +function ver_players_online(name) + local texto = "" + local name1 = "" + for _,player in ipairs(minetest.get_connected_players()) do + local name = player:get_player_name() + if texto ~= "" then + texto = texto..","..name + else + texto = name + name1 = name + end + if tonumber(lista[minetest.get_player_ip(name)]) ~= nil then + if tonumber(lista[minetest.get_player_ip(name)]) > 1 then + texto = texto.." ("..lista[minetest.get_player_ip(name)].."ms)" + end + end + end + local lag_server = get_max_lag() + local t = string.split(lag_server, ".") + lag_server = tonumber(t[1]) + minetest.chat_send_all(texto) + minetest.show_formspec(name, "", "size[7,10]".. + "bgcolor[#080808BB;true]".. + "textlist[0,1.5;6.7,6;;"..texto..";0;true]".. + "image[-0.8,0.6;1,1;latent_players.png]".. + "label[0,0.5;LAG do Servidor "..lag_server.."ms\nJogadores Online nesse momento]".. + "button_exit[5,0.5;2,1;;Voltar]" + ) +end + +-- Verificar valores criticos de latencia +local function verificar_valores_criticos() + for _,player in ipairs(minetest.get_connected_players()) do + local name = player:get_player_name() + local ip = minetest.get_player_ip(name) + if lista[ip] then + if tonumber(lista[ip]) >= LATENCIA_CRITICA then + minetest.chat_send_player(name, "[AVISO] Sua conectividade esta muito ruim. Isso Pode afetar severamente a sua jogabilidade") + end + end + end + minetest.after(PAUSA_VERIFICAR_VALORES_CRITICOS ,verificar_valores_criticos) +end + + +dofile(minetest.get_modpath("latent") .. "/comandos.lua") -- Carregar Comandos. + +-- Iniciando loops de verificacao +atualizar_lista() +verificar_valores_criticos() diff --git a/pingar.sh b/pingar.sh new file mode 100755 index 0000000..d2032b3 --- /dev/null +++ b/pingar.sh @@ -0,0 +1,22 @@ +#!/bin/bash + +MEDIA=0 + +# INFORMACOES +# O primeiro valor é o número de pings +# O segundo valor é o endereço IP que vai receber o ping +# O tempo de cada repeticao pode demorar até 2 segundos +# somasse 3 segundos para o relatorio de ping ser criado +# Retorna 0 caso o IP não seja encontrado + + +for i in $(seq $1); do + SAIDA=`ping -c 1 -w 3 $2 | grep time= | awk -F"=" '{print $4}'`; + SAIDA="${SAIDA%.*}" + SAIDA="${SAIDA%ms}" + MEDIA=$((SAIDA+MEDIA)) +done +MEDIA=$((MEDIA/$1)); +MEDIA=$((MEDIA+1)); + +echo ${MEDIA} diff --git a/textures/latent_players.png b/textures/latent_players.png new file mode 100644 index 0000000000000000000000000000000000000000..9bdc006a571a1bb67b36fa3fa5cd8ada30a844bc GIT binary patch literal 3983 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 literal 0 HcmV?d00001