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: [Somente usuários registrados podem vem os links. ] 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í
use muonline alter table Guild add score_semanal int NOT NULL default (0) alter table Guild add score_total int NOT NULL default (0)
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
<? $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>"; } ?>
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
update guild set score_semanal=0
Hidden Content
Há 1 usuários navegando neste tópico. (0 registrados e 1 visitantes)
Regras do Fórum