Bonus em Golds, Semanal ou Mensal com TempoOnline
Olá Galera, achei esse tutorial em outro fórum ele é bem interessante caso alguém quira utilizar em seu servidor.
Bom este tutorial lhe ensinará a criar uma job que premiará com um tipo de bonus em 'golds' para seu servidor.
Codigo:
declare @AccountID varchar (10)
declare @Name varchar(10)
declare @reset int
declare @tempoonline int
declare @ds int
Select top 1 @AccountID=AccountID,@Name=Name,@reset=ResetCount from character order by ResetCount, clevel desc
Update memb_info set gold=gold+5 where memb___id=@AccountID
-----
Select top 1 @AccountID=AccountID,@Name=Name,@tempoonline=tempo online from character order by tempoonline desc, name desc
Update memb_info set gold=gold+5 where memb___id=@AccountID
-----
Select top 1 @AccountID=AccountID,@Name=CharacterName,@ds=Point from EVENT_INFO order by Point desc, CharacterName desc
Update memb_info set gold=gold+5 where memb___id=@AccountID
-------------------------------------------------------------------------
Crie uma Schedule para passar uma vez por semana para criar uma premiação semanal ou se preferir mensal.
--------------------------------------------------------------------------
Entendendo o codigo:
O codigo acima irá premiar o primeiro do Ranking do Devil Square, Resets e Tempo Online automaticamente com '5' Golds.
Sendo que TempoOnline é uma coluna na Character que marca as horas online dos personagens, aqui na tem um trigger que faz este processo, podendo ser em minutos e horas, ,@tempoonline uma coluna virtual para ser passado o codigo, deve ser declarada acima. VEJA ABAIXO NESTE TOPICO O CODIGO DA TRIGGER DE TEMPOONLINE.
Resets a coluna que determina o numero de resets é claro, @resets uma coluna virtual para ser passado o codigo, deve ser declarada acima.
Point a coluna onde marca o numero de pontos na Event_info do Devil Square, @ds a coluna virtual para ser passado o codigo.
Para adicionar mais uma premiação você precisará declarar acima uma coluna virtual e adicionar mais uma linha abaixo dando 'Select ...'.
Digamos que quero premiar o jogador que obtem mais level na determinada hora e dia da semana ou mes marcada pela schedule e claro, veja como ficará:
declare @AccountID varchar (10)
declare @Name varchar(10)
declare @reset int
declare @tempoonline int
declare @ds int
declare @clevel int
Select top 1 @AccountID=AccountID,@Name=Name,@reset=Resets from character order by Resets desc
Update memb_info set gold=gold+5 where memb___id=@AccountID
-----
Select top 1 @AccountID=AccountID,@Name=Name,@tempoonline=tempo online from character order by tempoonline desc
Update memb_info set gold=gold+5 where memb___id=@AccountID
-----
Select top 1 @AccountID=AccountID,@Name=CharacterName,@ds=Point from EVENT_INFO order by Point desc
Update memb_info set gold=gold+5 where memb___id=@AccountID
-----
Select top 1 @AccountID=AccountID,@Name=Name,@clevel=clevel from Character order by clevel desc
Update memb_info set gold=gold+5 where memb___id=@clevel
-------------------------------------------------------------------------
CODIGO PARA CRIAR TRIGGER DE (TEMPO ONLINE) OBTIDO AQUI NA RZBR:
Adicionando Coluna Tempoonline em character:
USE MuOnline
ALTER TABLE Character ADD TempoOnline int DEFAULT (0)
-------------------------------------------------------------------------
Dropando caso sua DB ja tiver esta Trigger:
DROP TRIGGER MembStat_RecordOnlineHours
-------------------------------------------------------------------------
Adicionando Trigger:
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(hour, (SELECT ConnectTM FROM MEMB_STAT WHERE memb___id= @memb___id), getdate())
WHERE Name = (SELECT GameIDC FROM AccountCharacter WHERE Id=@memb___id)
END
Nota: a Trigger acima irá atualizar tempoonline a cada uma hora online, pois assim está determinado no codigo como 'hour', para converter para minutos para colocar onde marquei de vermelho para 'minute'
-------------------------------------------------------------------------
SIMPLES E FACIL, UTILIZO EM MEU SERVIDOR E EM SERVIDOR DE CLIENTES E FUNCIONA PERFEITAMENTE, CASO TIVER DUVIDAS OU EU TENHA ESQUECIDO DE ESCLAREÇER ALGUM DETALHE FAVOR POSTAR NESTE TOPICO.
Creditos:
Codigo para premiação: Jovjr
Codigo de tempoonline: DouglasF