Jump to content

[metin2] ranking jogadores


tierrilopes

Recommended Posts

Contador para números de jogadores em cada reino.

Citando outro post:

 

Hoje em dia, a maioria dos websites, cada vez que a página é carregada executa uma query para obter os jogadores online consoante o last_play.

Isto pode ser abusado para sobrecarregar a base de dados.

 

Uma alternativa bastante simples e rápida de implementar é fazer com que esta query só seja executada uma vez a cada 5 minutos por exemplo, independentemente do número de acesso na página.

 

 

Para tal, criar este ficheiro na base do vosso dedicado (será usado /cron_rank_jogadores.php como exemplo) e colar o seguinte conteúdo:

 

 

<?php
/*Tierri LopesAbyssMt2 CMS
https://tlthings.net*/
//Localização do ficheiro de dump
$dumpFile = "/usr/local/www/apache24/data/dump_rank_jogadores.php";
//Ligação à base de dados
$con =mysqli_connect("localhost","utilizador","password","player"); //ip, user, password, db
//Aviso em caso de erro ao ligar à base de dados
if (mysqli_connect_errno()){
echo "Failed to connect to MySQL: " . mysqli_connect_error();}

// Ranking de jogadores
$sql = mysqli_query($con, "SELECT name, level, exp FROM player LEFT JOIN account.account ON account_id = account.id WHERE account.status = 'OK' AND name NOT LIKE '[%' ORDER BY level DESC, exp DESC LIMIT 5"); 

// TOP 5
$jogadores = "array(";
$i = 1;
while($row = mysqli_fetch_assoc($sql)){
$jogadores .= "{$i} => \"Jogador:{$row["name"]} Nivel:{$row["level"]} Experiência:{$row["exp"]}\",";$i++;}
$jogadores .= ")";

//Escrever conteúdo do ficheiro dump_reinos
$file = fopen($dumpFile, "w");
fwrite($file, "<?php\n\n");
fwrite($file, " /* Gerado pelo cron */\n\n");
fwrite($file, " \$ranking_jogadores = " . $jogadores . ";\n");
fwrite($file, "\n\n?>");fclose($file);

//Limpar resultado da query de ranking de jogadores
mysqli_free_result($sql);
//Fechar ligação
mysqli_close($con);?>
 

 

 

 

Ajustar a localização do ficheiro dump_rank_jogadores.php (caso seja diferente)

Preencher os dados de ligação à base de dados e gravar o ficheiro.

Criar um ficheiro vazio chamado dump_rank_jogadores.php (na localização definida no código acima) e dar-lhe permissões 646.

 

Abrir o ficheiro /etc/crontab

Debaixo de:

 

# Save some entropy so that /dev/random can re-seed on boot.*/11 * * * * operator /usr/libexec/save-entropy
 

 

 

Colar isto debaixo:

 

#Ranking jogadores TOP 5*/5 * * * * php /cron_rank_jogadores.php >/dev/null 2>&1
 

 

 

No vosso ficheiro index.php (ou onde tiverem o código de jogadores online), adicionem o seguinte no topo do ficheiro (após <?php):

 

include "dump_rank_jogadores.php";
 

 

Para mostrar o resultado, devem ter um echo/print com a variável de uma query.

Basta mudarem/adicionarem o nome dessas variáveis.

 

Mostrar jogador no primeiro lugar:

 

$ranking_jogadores[1];
 

 

Mostrar jogador no segundo lugar:

 

$ranking_jogadores[2];
 

 

Mostrar jogador no terceiro lugar:

 

$ranking_jogadores[3];
 

 

Mostrar jogador no quarto lugar:

 

$ranking_jogadores[4];
 

 

Mostrar jogador no quinto lugar:

 

$ranking_jogadores[5];
 

 

 

Reiniciar o crontab com o seguinte comando:

 

/etc/rc.d/cron restart
 

 

O crontab chamará o ficheiro /cron_rank_jogadores.php a cada 5 minutos.

Executará duas query, na qual obterá o top 5 jogadores, ordenados por nivel mais alto e por maior quantidade de experiência.

Excluirá as contas que não estiverem normais (account_status = OK) e nomes começados por [ (para excluir os GM).

Gravará tudo para o ficheiro dump_raking_jogadores.php

Desta maneira, todos os pedidos ao website utilizarão a informação colocada no ficheiro dump_ranking_jogadores.php, poupando bastantes querys. (duas por carregamento de página)

 

Exemplo:

imagemb6df4.png

 

imagem.png

Link to comment
  • 6 months later...

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...