1º Passo:
Crie uma coluna na Table "Character" com os dados:
Código:
Nome da coluna: TempoOnline
Tipo da coluna: int
Default Value: 0 Ou simplesmente use o seguinte código no Query Analizer:
Código:
USE MuOnline
ALTER TABLE Character ADD TempoOnline int DEFAULT (0)
2º Passo:
Vá no Query Analizer e utilize o seguinte código:
Código:
DROP TRIGGER MembStat_RecordOnlineHoursLogo
após usar a query acima, limpe o query analizer e utilize a seguinte query:
Código:
CREATE TRIGGER [MembStat_RecordOnlineHours] ON dbo.MEMB_STAT
AFTER UPDATE
AS
declare @memb___id varchar(10)
declare @connectstat tinyint
SELECT @memb___id=memb___id,@connectstat=connectstat FROM INSERTED
IF (@connectstat = 0)
BEGIN
UPDATE [dbo].[Character]
SET TempoOnline = TempoOnline + datediff(minute, (SELECT ConnectTM FROM MEMB_STAT WHERE memb___id= @memb___id), getdate())
WHERE Name = (SELECT GameIDC FROM AccountCharacter WHERE Id=@memb___id)
END
Legenda:
minute = Altere esse valor pelo o que você quizer, se você quer que salve por horas altere esse valor em vermelho para hour
( Particularmente eu dechei minutes pois acho melhor.)
PHP:
Criei uma função que converte o tempo de Minutos para Horas,
Você deverá adicionar esse codigo no começo da sua pagina:
Código:
<?php
function Minutos2Horas($Mins) {
$Horas = floor($Mins / 60);
$Minutos = ($Mins - ($Horas * 60)) / 100;
$Sep = explode('.', $Horas + $Minutos);
if (strlen($Sep[1]) < 2) { $Sep[1] = $Sep[1] . 0; }
return sprintf('%02dhs e %02dmin', $Sep[0], $Sep[1]);
}
?>
( No site do Daldegam voce pode colocar ele em baixo da insercao dos scripts
<script type="text/javascript" src="templates/darkstyle/js/jquery.js"></script>
<script type="text/javascript" src="templates/darkstyle/js/jquery.tooltips.js"></script>
<script type="text/javascript" src="templates/darkstyle/js/functions.js"></script>
<script type="text/javascript" src="templates/darkstyle/js/ajax.js"></script>
que ficam no inicio do index.tpl.php da pasta de seu template. )
E onde deverá mostrar os minutos você adiciona o seguinte codigo:
Código:
<?php
print Minutos2Horas(Tempo);
?>
Onde Tempo = Tempo em minutos que será convertido. (A variavel que seleciona o tempo).
Créditos: DouglasF
Bom ate este ponto nosso companheiro DouglasF tinha feito para armazenar a informar e o calculo e a variavel para mostrar o total do tempo registrado ate então;
Porem precisamos montar o ranking colocar pra buscar a foto do personagem se nao tiver foto pegar a foto padrao tudo que um ranking precisa.
Bom agora vamos a parte que eu fiz no meu site.
Para quem vai montar de uma foto só segue o script:
Foto Fixa
$Q = @mssql_fetch_object(@mssql_query("SELECT TOP 1 Name,TempoOnline as Temp,Image FROM MuOnline.dbo.Character WHERE CtlCode<2 ORDER BY TempoOnline DESC,cLevel DESC,Name ASC"));
if($Q != false) {
$img = trim($Q->Image);
if(file_exists("modules/uploads/photos/".$img) == false || empty($img) == true) $img = "no-photo.gif";
echo("<a href=\"?page=rankings&char=".urlencode($Q->Name)."\">".$Q->Name." <br />\n");
echo('<img src="modules/uploads/photos/'.$img.'" alt="" width="100" height="100" style="border: 2px solid #222222;" /><br />');
echo(number_format((int)$Q->Temp, 0, null, ".")." Tempo Online</a>");
} else {
echo("Nenhum Resultado");
}
?>
Esse Script de cima funcionou tranquilo, porem eu Fiz um mais complexo, onde eu posso definir as fotos de cada classe caso ele nao encontre a foto do personagem que o player faz o upload.
<h4 class="style1">Ranking Online</h4>
<div class="sidebox" >
<ul class="menu" aling="center">
<?
$query = 'SELECT TOP 5 Name,Class,cLevel,TempoOnline,Image from Character order by TempoOnline desc, cLevel desc ';
$result = mssql_query($query);?>
<?for($i=0;$i < mssql_num_rows($result);++$i)
{
$row = mssql_fetch_row($result);
$rank = $i+1;
if($row[1] == 0){ $row[1] = 'DW';
}
if($row[1] == 1){ $row[1] = 'SM';
}
if($row[1] == 16){ $row[1] = 'DK';
}
if($row[1] == 17){ $row[1] = 'BK';
}
if($row[1] == 32){ $row[1] = 'Elf';
}
if($row[1] == 33){ $row[1] = 'ME';
}
if($row[1] == 48){ $row[1] = 'MG';
}
if($row[1] == 64){ $row[1] = 'DL';
}
if($row[1] == 18){ $row[1] = 'BM';
}
if($row[1] == 65){ $row[1] = 'LE';
}
if($row[1] == 49){ $row[1] = 'DM';
}
if($row[1] == 2) { $row[1] = 'GM';
}
if($row[1] == 80) { $row[1] = 'SUM';
}
if($row[1] == 81) { $row[1] = 'BS';
}
if($row[1] == 82) { $row[1] = 'DMM';
}
if($row[1] == 34){ $row[1] = 'HE';
}
if($row[4] == "")
{
if ($row[1] == 'DW') { $row[4] = 'no-photo.gif'; } // Dark Wiza
if ($row[1] == 'SM') { $row[4] = 'no-photo.gif'; } // Soul Master
if ($row[1] == 'GM') { $row[4] = 'no-photo.gif'; } // Grand Master
if ($row[1] == 'DK') { $row[4] = 'no-photo.gif'; } // Dark Knight
if ($row[1] == 'BK') { $row[4] = 'no-photo.gif'; } // Blade Knight
if ($row[1] == 'BM') { $row[4] = 'no-photo.gif'; } // Blade Master
if ($row[1] == 'ELF') { $row[4] = 'no-photo.gif'; } // Elf
if ($row[1] == 'ME') { $row[4] = 'no-photo.gif'; } // Muse Elf
if ($row[1] == 'HE') { $row[4] = 'no-photo.gif'; } // High Elf
if ($row[1] == 'MG') { $row[4] = 'no-photo.gif'; } // Magic Gladiator
if ($row[1] == 'DM') { $row[4] = 'no-photo.gif'; } // Duel Master
if ($row[1] == 'DL') { $row[4] = 'no-photo.gif'; } // Dark Lord
if ($row[1] == 'LE') { $row[4] = 'no-photo.gif'; } // Lord Emperor
if ($row[1] == 'SUM') { $row[4] = 'no-photo.gif'; } // Summoner
if ($row[1] == 'BS') { $row[4] = 'no-photo.gif'; } // Blood Summoner
if ($row[1] == 'DMM') { $row[4] = 'no-photo.gif'; } // Dimension Master
}
if ($i == 0 ){
$posicao1 = $rank;
$tempo1 = $row[3];
$nome1 = $row[0];
$foto1 = $row[4]; }
if ($i == 1 ){
$posicao2 = $rank;
$tempo2 = $row[3];
$nome2 = $row[0];
$foto2 = $row[4]; }
if ($i == 2 ){
$posicao3 = $rank;
$tempo3 = $row[3];
$nome3 = $row[0];
$foto3 = $row[4]; }
if ($i == 3 ){
$posicao4 = $rank;
$tempo4 = $row[3];
$nome4 = $row[0];
$foto4 = $row[4]; }
if ($i == 4 ){
$posicao5 = $rank;
$tempo5 = $row[3];
$nome5 = $row[0];
$foto5 = $row[4]; }
}
?>
<marquee id="scroller" scrollamount="2" direction="up" style="width:100%; height:150px">
<center><font color="#FFFF00">1°<?=$nome1?></font></center>
<center><font color="#ADFF2F"><?php print Minutos2Horas($tempo1); ?></font></center>
<center><img src="modules/uploads/photos/<?=$foto1?>" width="140" height="100"></center><br><br>
<center><font color="#FFFF00">2°<?=$nome2?></font></center>
<center><font color="#ADFF2F"><?php print Minutos2Horas($tempo2); ?></font></center>
<center><img src="modules/uploads/photos/<?=$foto2?>" width="140" height="100"></center><br><br>
<center><font color="#FFFF00">3°<?=$nome3?></font></center>
<center><font color="#ADFF2F"><?php print Minutos2Horas($tempo3); ?></font></center>
<center><img src="modules/uploads/photos/<?=$foto3?>" width="140" height="100"></center><br><br>
<center><font color="#FFFF00">4°<?=$nome4?></font></center>
<center><font color="#ADFF2F"><?php print Minutos2Horas($tempo4); ?></font></center>
<center><img src="modules/uploads/photos/<?=$foto4?>" width="140" height="100"></center><br><br>
<center><font color="#FFFF00">5°<?=$nome5?></font></center>
<center><font color="#ADFF2F"><?php print Minutos2Horas($tempo5); ?></font></center>
<center><img src="modules/uploads/photos/<?=$foto5?>" width="140" height="100"></center><br><br>
</marquee>
</ul>
</div>
Bom esse ai Faz um select dos 5 primeiros do ranking do TempoOnline e joga no menu
com efeito de Marquee, tranzendo imagen nome e tempo online do Char, no caso eu coloquei um while pra ele pegar a classe do personagem e um for para fazer 5 vezes, aconselho se voce nao souber nada de programação nao mexer nisso rs.
Segue abaixo uma foto do Ranking no meu site:
[Somente usuários registrados podem vem os links. ]
Lembrando que a adaptação foi feita no Template Darkstyle, mas qualquer outro template seria a mesma coisa.
E para finalizar Criei um uma Job com um Step semanal para dar X Golds ao vencedor
Segue a query abaixo:
Use MuOnline
declare @AccountID varchar (10)
declare @Name varchar(10)
declare @TempoOnline int
Select top 1 @AccountID=AccountID,@Name=Name,@TempoOnline=Tempo Online from character order by TempoOnline desc, name desc
Update memb_info set gold=gold+30 where memb___id=@AccountID
Update character set TempoOnline=0
Obs: Isso pra quem utiliza as tabelas do site na propria MuOnline, pra quem utiliza na propria WebSite, ficaria assim:
Use MuOnline
declare @AccountID varchar (10)
declare @Name varchar(10)
declare @TempoOnline int
Select top 1 @AccountID=AccountID,@Name=Name,@TempoOnline=Tempo Online from character order by TempoOnline desc, name desc
Update character set TempoOnline=0
Use WebSite
Update webcash set amount=amount+30 where name=@AccountID
Bom é isso Galera, se aguem tiver alguma duvida, ou melhor ainda uma sugestao ou trazendo uma melhoria esempre bem vindo, e se errei ou infringi alguma regra do forum
peço desculpas, Abraços!
Creditos:
DouglasF < Criaçao do Script para o Ranking >
DouglaSDeV <Adaptação e desenvolvimento do Ranking >