Fazendo Ranking de Guild semanal com premiação!
Olá ImperyusGames!
Irei ensinar à vocês como fazer um Ranking de Guild Semanal com premiação!
Um tutorial muito procurado pelos Admin's de MuOnline..
Procurei e pedi esta job durante 2 ANOS mas quem tinha não queria disponibilizar! Se eu não conseguisse por mim mesmo, ainda estaria procurando por aí..
Mas como não sou igual a essas pessoas, estou postando aqui pra vocês :)...
Vamos lá,
Primeiramente vamos rodar as querys abaixo para criar as tabelas necessárias:
Código:
use muonline
alter table Guild add score_semanal int NOT NULL default (0)
alter table Guild add score_total int NOT NULL default (0)
--------
Lembrando: A partir daí, vocês terão que usar as colunas: score_semanal -> para scores semanais / score_total -> para scores total.
Ambas colunas estão na tabela Guild.
-------
Agora vamos rodar a Trigger para que seja contabilizados os Scores:
Código:
CREATE TRIGGER [dbo].[RankingGuild]
ON [dbo].[Guild]
after update
as
IF UPDATE(g_score)
begin SET NOCOUNT ON;
Update [Guild] set [Guild].score_total=score_total+3,[Guild].score_semanal=score_semanal+3, g_score=0
Where [Guild].g_name=(SELECT g_name FROM Inserted)
and [Guild].g_name=(SELECT g_name FROM Inserted) and [Guild].g_score > 0
end
Agora vamos fazer o Script para aparecer o top 5 de guilds semanal no site:
Código:
<?
$query = 'SELECT TOP 5 G_Name,G_Mark,score_semanal FROM MuOnline.dbo.Guild ORDER BY score_semanal DESC';
$result = mssql_query($query);
?>
<?
for($i=0;$i < mssql_num_rows($result);++$i)
{
$row = mssql_fetch_row($result);
$rank = $i+1;
echo "
<li><a href='?page=guild_info&name=$row[0]'><img src='gmark/gmark.class?m=".urlencode(bin2hex($row[1]))."'></a>
<h1>$rankº Lugar</h1>
<h2>Guild: <span>$row[0]</span></h2>
<h3>( $row[2] ) Scores</h3>
</li>";
}
?>
------
Baixe aqui o arquivo para aparecer as logos da guild no site: [Only registered and activated users can see links. Click Here To Register...]
Deixe o arquivo na pasta raíz da hospedagem.
------
Agora vamos à premiação da Guild..
Crie uma JOB para rodar todo sábado às 23:00h:
Código:
Declare @Guild varchar(10);
Declare @Char varchar(10);
Declare @Conta varchar(10);
Declare @Premio int;
Declare @G_Level int;
Set @Guild = (Select top 1 G_Name from Guild order by score_semanal desc, G_name desc)
IF (@Guild <> '')
BEGIN
DECLARE C CURSOR FOR SELECT Name,G_Level FROM GuildMember Where G_Name = @Guild Order By G_Level desc
OPEN C
FETCH NEXT FROM C INTO @Char,@G_Level
WHILE @@FETCH_STATUS = 0
BEGIN
IF @G_Level = 1 -- G_Level = 1 (Guild Master)
BEGIN
SET @Premio = 20;
END
IF @G_Level = 0 -- G_Level = 0 (Membro)
BEGIN
SET @Premio = 10;
END
SET @Conta = '';
SET @Conta = (Select AccountID From Character where Name = @Char)
IF (@Conta <> '')
BEGIN
Update DT_SHOP_CREDITS set credits = credits + @Premio where login = @Conta
END
FETCH NEXT FROM C INTO @Char,@G_Level
END
CLOSE C
DEALLOCATE C
END
-------------
Aonde estiver em vermelho é a premiação em Golds/Cashs da guild.
Entendam aqui:
@Premio = 20; -- é a quantidade de golds/cashs que o guild master da guild irá ganhar.
@Premio = 10; --- é a quantidade de golds/cashs que os membros da guild irão ganhar.
* OBS: A JOB irá premiar somente a guild 1º colocada no ranking semanal, caso alguém consiga adaptá-la para premiar as 3 primeiras guilds, posta aí pra gente! :)
* OBS 2: A JOB está programada para dar Golds/Cashs no shop DT, quem estiver usando outro Shop, é só modificar as tabelas e colunas que estão em cor azul.
--------------
Por fim, vamos criar a JOB para Zerar o Ranking Semanal de Guild:
Código:
update guild set score_semanal=0
* OBS: Coloque a JOB para rodar todo sábado às 00:00h.
----------------
Créditos do Tutorial, Script do Ranking de Guild e Trigger: Eu.
Créditos do Script para aparecer a logo da Guild: Fabricionaweb.
Créditos da JOB para premiar Guild: Originalmente postada pelo Prøjë¢T para premiar Castle Siege, e alterada por mim para premiar TOP Guild.
-------------
Acho que ajudei bastante né? Então clica em agradecer aí :)