1.
Acesse Menu Iniciar > Microsoft SQL Server > e clique em Query Analizer
2.
Selecione a opção Windows authentication ou SQL Server authentication onde irá necessitar do Login e Senha SQL.
3.
Selecione a database MuOnline, e cole algum comando
no espaço.
4.
Após colar o comando, aperte F5 ou em Play!
Se o código foi adicionado com sucesso irá ser exibido a mensagem "The command(s) completed successfully".
Segue alguns exemplos de comandos para rodar no query analizer:
-- Tornar uma conta VIP
UPDATE MEMB_INFO SET vip=1 WHERE memb___id='nome_da_conta'
-- Tornar uma conta Não VIP (free)
UPDATE MEMB_INFO SET vip=0 WHERE memb___id='nome_da_conta'
-- Listar todas a contas VIP
SELECT memb___id FROM MEMB_INFO WHERE vip=1
--Listar todas a contas Não
VIP
SELECT memb___id FROM MEMB_INFO WHERE vip=0
-- Editar Dias Ban
UPDATE Character SET Dias_Ban=dias do ban WHERE name ='nome do user
-- Editar Resets na Conta
PDATE Character SET Resets=Numero de resets WHERE name ='Nome da conta'
-- Bloquear uma Conta
UPDATE MEMB_INFO SET bloc_code=1 WHERE memb___id='nome_da_conta'
-- Desbloquear uma Conta
UPDATE MEMB_INFO SET bloc_code=0 WHERE memb___id='nome_da_conta'
-- Desbloquear todas Contas
UPDATE MEMB_INFO SET bloc_code=0
-- Bloquear todas Contas
UPDATE MEMB_INFO SET bloc_code=1
--Listar todas a contas bloqueadas
SELECT memb___id FROM MEMB_INFO WHERE bloc_code=1
--Listar todas a contas desbloqueadas
SELECT memb___id FROM MEMB_INFO WHERE bloc_code=0
--Colocar um char de ADM
UPDATE Character SET CtlCode=10 WHERE Name='nome_do_char'
--Retirar um char de ADM
UPDATE Character SET CtlCode=1 WHERE Name='nome_do_char'
--Tornar um char de GM
UPDATE Character SET CtlCode=8 WHERE Name='nome_do_char'
--Retirar um char de GM
UPDATE Character SET CtlCode=1 WHERE Name='nome_do_char'
--Listar Todos Chars de GM
SELECT Name FROM Character WHERE CtlCode=8
--Listar Todos Chars de ADM
SELECT Name FROM Character WHERE CtlCode=10
--Listar Todas Contas Online
SELECT memb___id FROM MEMB_STAT WHERE ConnectStat=1
--Listar Todas Contas Offline
SELECT memb___id FROM MEMB_STAT WHERE ConnectStat=0
--Limpar todas as contas que ficaram online presas (Efetuar este comando com o servidor OFF)
UPDATE MEMB_STAT SET ConnectStat=0 WHERE ConnectStat=1
--Tornar uma Conta VIP
UPDATE MEMB_INFO SET vip=1 WHERE memb___id='nome_da_conta'
--Tornar uma Conta Não VIP
UPDATE MEMB_INFO SET vip=0 WHERE memb___id='nome_da_conta'
--Listar Todas Contas VIP
SELECT memb___id FROM MEMB_INFO WHERE vip=1
--Listar Todas Contas Não VIP
SELECT memb___id FROM MEMB_INFO WHERE vip=0
--Ver Contas de ADM
SELECT memb___id FROM Character WHERE CtlCode=10
--Ver Contas de GM
SELECT memb___id FROM Character WHERE CtlCode=8
--Auto Ban Em Quem Dupa Em Seu Server
if exists(select * from dbo.sysobjects where type='p' and name='WZ_GetItemSerial')
drop procedure WZ_GetItemSerial
go
CREATE procedure WZ_GetItemSerial
as
BEGIN
DECLARE @ItemSerial int
set nocount on
begin transaction
update GameServerInfo set @ItemSerial = ItemCount = (case when ItemCount < 0x7effffff then ItemCount+1
else 1
end )
if(@@error <> 0)
begin
rollback transaction
select-1
end
else
begin
commit transaction
select @ItemSerial
end
END
GO
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[trg_CheckSameID]') and OBJECTPROPERTY(id, N'IsTrigger') = 1)
drop trigger [dbo].[trg_CheckSameID]
GO
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[AllItemsLog]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[AllItemsLog]
GO
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[CopyLog]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[CopyLog]
GO
CREATE TABLE [dbo].[AllItemsLog] (
[items_id] [int] IDENTITY (1, 1) NOT NULL ,
[items_type] (1) NOT NULL ,
[items_serial] (4) NOT NULL ,
[items_acid] [varchar] (10) COLLATE Chinese_PRC_CI_AS NOT NULL
) ON [PRIMARY]
GO
CREATE TABLE [dbo].[CopyLog] (
[copy_id] [int] IDENTITY (1, 1) NOT NULL ,
[copy_acid] [varchar] (10) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[copy_whdata] [binary] (1200) NOT NULL ,
[copy_date] [datetime] NOT NULL
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[AllItemsLog] ADD
CONSTRAINT [DF_CT_ITEM_item] DEFAULT (0) FOR [items_type],
CONSTRAINT [DF_CT_ITEM_itemid] DEFAULT (0) FOR [items_serial],
CONSTRAINT [DF_CT_ITEM_itemrole] DEFAULT ('\') FOR [items_acid]
GO
CREATE INDEX [IX_CT_ITEM] ON [dbo].[AllItemsLog]([items_type], [items_serial]) ON [PRIMARY]
GO
ALTER TABLE [dbo].[CopyLog] ADD
CONSTRAINT [DF_CopyLog_copy_date] DEFAULT (getdate()) FOR [copy_date]
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO
CREATE TRIGGER [dbo].[trg_CheckSameID] ON [dbo].[character]
FOR UPDATE
AS
BEGIN
IF UPDATE(inventory)
BEGIN
SET NOCOUNT ON
DECLARE
@wh_acid varchar(10),
@wh_data binary(1200),
@wh_type binary(1),
@wh_serial binary(4),
@cr_user varchar(10),
@cr_acid varchar(10),
@cr_data binary(760),
@cr_type binary(1),
@cr_serial binary(4),
@al_acid varchar(10),
@j int,
@k int,
@find bit
SELECT @cr_acid=i.accountid,
@cr_data=i.inventory
FROM inserted i
SET @j=0
SET @find=0
WHILE @j<76 AND @cr_data IS NOT NULL
BEGIN
SET @cr_type=SUBSTRING(@cr_data,@j*10+1,1)
SET @cr_serial=SUBSTRING(@cr_data,@j*10+4,4)
IF @cr_type<>0xFF AND @cr_serial<>0x00000000
BEGIN
SELECT @al_acid=items_acid FROM allitemslog WHERE items_type=@cr_type AND items_serial=@cr_serial
IF @al_acid IS NULL
INSERT INTO allitemslog (items_type,items_serial,items_acid) VALUES (@cr_type,@cr_serial,@cr_acid)
ELSE
BEGIN
UPDATE allitemslog SET items_acid=@cr_acid WHERE items_type=@cr_type AND items_serial=@cr_serial
SELECT @wh_data=items FROM warehouse WHERE accountid=@al_acid
SET @k=0
WHILE @k<120 AND @wh_data IS NOT NULL
BEGIN
SET @wh_type=SUBSTRING(@wh_data,@k*10+1,1)
SET @wh_serial=SUBSTRING(@wh_data,@k*10+4,4)
IF @wh_type=@cr_type AND @wh_serial=@cr_serial
SET @find=1
SET @k=@k+1
END
END
END
SET @j=@j+1
END
IF @find=1
BEGIN
INSERT INTO copylog (copy_whdata,copy_acid,copy_date) VALUES (@wh_data,@al_acid,getdate())
-- this is wer u can add more punishment like ban or lock characters
UPDATE Character SET CtlCode=1 WHERE accountid=@al_acid
END
SET NOCOUNT OFF
END
END
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
DECLARE @al_acid char(50)
set @al_acid = 'ASUS'
UPDATE Character SET CtlCode=1 WHERE accountid=@al_acid
go
select * from AllItemsLog
select * from CopyLog
--Auto Backup Sem Gravar Por Cima
Essa job faz backup da data base com a data e hora que foi feito o backup, asssim ele não grava por cima e se ocorrer uma eventualidade você saberá exatamente de quando é o backup que vc está usando. É só criar uma job com esse código. O tempo você escolhe, recomendo colocar de hora em hora.
declare @database varchar(15), @directory varchar(30), @tmp varchar(55)
select @directory = 'c:/backups/', --> Diretório(completo, com '/' no final, como está por padrão)
@database = 'muonline', --> Banco de dados
@tmp = @directory + @database + '_' + convert(varchar(50), replace(replace(getdate(), ' ', '_'), ':', '-')) + '.backup'
backup database @database to disk = @tmp
--Auto Reset Free e Vip
Sistema de Resete:
- Restes Free:
- 1° ao 10° resetes: Ganha 500 pontos, reseta no level 400.
- 11° ao 50° resetes: Ganha 300 pontos, reseta no level 400.
- 51° ao 100° resetes: Ganha 200 pontos, reseta no level 400.
- 101° ao 400° resetes: Ganha 110 pontos, reseta no level 400.
- 401° para frente: Ganha 50 pontos, reseta no level 400.
____________________________________
Volta com: Level 1, e 18 em cada Stats
Zen para resetar: 50.000.000
- Resetes Vip:
1° ao 10° resetes: Ganha 600 pontos, reseta no level 370.
11° ao 50 resetes: Ganha 400 pontos, reseta no level 370.
51° ao 100° resetes: Ganha 250 pontos, reseta no level 370.
101° ao 400° resetes: Ganha 120 pontos, reseta no level 370.
401° para frente: Ganha 60 pontos, reseta no level 370.
____________________________________
Volta com: Level 30, e 100 em cada Stats
Zen para resetar: 1
Com esse sistema a concorrencia fica melhor e mais competitivo.
Vip fica FULL com: 1372
Free fica FULL com: 1773
- Job Resete Free:
UPDATE Character
SET clevel=('1'),
Experience=('0'),
Money=Money-('50000000'),
LevelUpPoint=500+500*resets,
resets=resets+1,
Strength=('18'),
Dexterity=('18'),
Vitality=('18'),
Energy=('18'),
MapNumber=('0'),
MapPosX=('125'),
MapPosY=('125')
FROM Character
JOIN MEMB_STAT ON Character.AccountID=MEMB_STAT.memb___id COLLATE Latin1_General_CS_AS
JOIN MEMB_INFO ON Character.AccountID=MEMB_INFO.memb___id COLLATE Latin1_General_CS_AS
WHERE clevel>399
AND Memb_Stat.ConnectStat = 0
and Money>('50000000')
and resets<10
AND MEMB_INFO.vip = 0
--////
UPDATE Character
SET clevel=('1'),
Experience=('0'),
Money=Money-('50000000'),
LevelUpPoint=2000+300+300*resets,
resets=resets+1,
Strength=('18'),
Dexterity=('18'),
Vitality=('18'),
Energy=('18'),
MapNumber=('0'),
MapPosX=('125'),
MapPosY=('125')
FROM Character
JOIN MEMB_STAT ON Character.AccountID=MEMB_STAT.memb___id COLLATE Latin1_General_CS_AS
JOIN MEMB_INFO ON Character.AccountID=MEMB_INFO.memb___id COLLATE Latin1_General_CS_AS
WHERE clevel>399
AND Memb_Stat.ConnectStat = 0
and Money>('50000000')
and resets>= 10
and resets<50
AND MEMB_INFO.vip = 0
--////
UPDATE Character
SET clevel=('1'),
Experience=('0'),
Money=Money-('50000000'),
LevelUpPoint=6700+200+200*resets,
resets=resets+1,
Strength=('18'),
Dexterity=('18'),
Vitality=('18'),
Energy=('18'),
MapNumber=('0'),
MapPosX=('125'),
MapPosY=('125')
FROM Character
JOIN MEMB_STAT ON Character.AccountID=MEMB_STAT.memb___id COLLATE Latin1_General_CS_AS
JOIN MEMB_INFO ON Character.AccountID=MEMB_INFO.memb___id COLLATE Latin1_General_CS_AS
WHERE clevel>399
AND Memb_Stat.ConnectStat = 0
and Money>('50000000')
and resets>= 50
and resets<100
AND MEMB_INFO.vip = 0
--////
UPDATE Character
SET clevel=('1'),
Experience=('0'),
Money=Money-('50000000'),
LevelUpPoint=15500+110+110*resets,
resets=resets+1,
Strength=('18'),
Dexterity=('18'),
Vitality=('18'),
Energy=('18'),
MapNumber=('0'),
MapPosX=('125'),
MapPosY=('125')
FROM Character
JOIN MEMB_STAT ON Character.AccountID=MEMB_STAT.memb___id COLLATE Latin1_General_CS_AS
JOIN MEMB_INFO ON Character.AccountID=MEMB_INFO.memb___id COLLATE Latin1_General_CS_AS
WHERE clevel>399
AND Memb_Stat.ConnectStat = 0
and Money>('50000000')
and resets>= 100
and resets<400
AND MEMB_INFO.vip = 0
--////
UPDATE Character
SET clevel=('1'),
Experience=('0'),
Money=Money-('50000000'),
LevelUpPoint=39390+50+50*resets,
resets=resets+1,
Strength=('18'),
Dexterity=('18'),
Vitality=('18'),
Energy=('18'),
MapNumber=('0'),
MapPosX=('125'),
MapPosY=('125')
FROM Character
JOIN MEMB_STAT ON Character.AccountID=MEMB_STAT.memb___id COLLATE Latin1_General_CS_AS
JOIN MEMB_INFO ON Character.AccountID=MEMB_INFO.memb___id COLLATE Latin1_General_CS_AS
WHERE clevel>399
AND Memb_Stat.ConnectStat = 0
and Money>('50000000')
and resets>= 400
and resets<4000
AND MEMB_INFO.vip = 0
- Resete Vip:
UPDATE Character
SET clevel=('30'),
Experience=('0'),
Money=Money-('1'),
LevelUpPoint=600+600*resets,
resets=resets+1,
Strength=('100'),
Dexterity=('100'),
Vitality=('100'),
Energy=('100'),
MapNumber=('0'),
MapPosX=('125'),
MapPosY=('125')
FROM Character
JOIN MEMB_STAT ON Character.AccountID=MEMB_STAT.memb___id COLLATE Latin1_General_CS_AS
JOIN MEMB_INFO ON Character.AccountID=MEMB_INFO.memb___id COLLATE Latin1_General_CS_AS
WHERE clevel>369
AND Memb_Stat.ConnectStat = 0
and Money>('1')
and resets<10
AND MEMB_INFO.vip = 1
--////
UPDATE Character
SET clevel=('30'),
Experience=('0'),
Money=Money-('1'),
LevelUpPoint=2000+400+400*resets,
resets=resets+1,
Strength=('100'),
Dexterity=('100'),
Vitality=('100'),
Energy=('100'),
MapNumber=('0'),
MapPosX=('125'),
MapPosY=('125')
FROM Character
JOIN MEMB_STAT ON Character.AccountID=MEMB_STAT.memb___id COLLATE Latin1_General_CS_AS
JOIN MEMB_INFO ON Character.AccountID=MEMB_INFO.memb___id COLLATE Latin1_General_CS_AS
WHERE clevel>369
AND Memb_Stat.ConnectStat = 0
and Money>('1')
and resets>= 10
and resets<50
AND MEMB_INFO.vip = 1
--////
UPDATE Character
SET clevel=('30'),
Experience=('0'),
Money=Money-('1'),
LevelUpPoint=9100+250+250*resets,
resets=resets+1,
Strength=('100'),
Dexterity=('100'),
Vitality=('100'),
Energy=('100')
FROM Character
JOIN MEMB_STAT ON Character.AccountID=MEMB_STAT.memb___id COLLATE Latin1_General_CS_AS
JOIN MEMB_INFO ON Character.AccountID=MEMB_INFO.memb___id COLLATE Latin1_General_CS_AS
WHERE clevel>369
AND Memb_Stat.ConnectStat = 0
and Money>('1')
and resets>= 50
and resets<100
AND MEMB_INFO.vip = 1
--////
UPDATE Character
SET clevel=('30'),
Experience=('0'),
Money=Money-('1'),
LevelUpPoint=21850+120+120*resets,
resets=resets+1,
Strength=('100'),
Dexterity=('100'),
Vitality=('100'),
Energy=('100'),
MapNumber=('0'),
MapPosX=('125'),
MapPosY=('125')
FROM Character
JOIN MEMB_STAT ON Character.AccountID=MEMB_STAT.memb___id COLLATE Latin1_General_CS_AS
JOIN MEMB_INFO ON Character.AccountID=MEMB_INFO.memb___id COLLATE Latin1_General_CS_AS
WHERE clevel>369
AND Memb_Stat.ConnectStat = 0
and Money>('1')
and resets>= 100
and resets<400
AND MEMB_INFO.vip = 1
--////
UPDATE Character
SET clevel=('30'),
Experience=('0'),
Money=Money-('1'),
LevelUpPoint=45730+60+60*resets,
resets=resets+1,
Strength=('100'),
Dexterity=('100'),
Vitality=('100'),
Energy=('100'),
MapNumber=('0'),
MapPosX=('125'),
MapPosY=('125')
FROM Character
JOIN MEMB_STAT ON Character.AccountID=MEMB_STAT.memb___id COLLATE Latin1_General_CS_AS
JOIN MEMB_INFO ON Character.AccountID=MEMB_INFO.memb___id COLLATE Latin1_General_CS_AS
WHERE clevel>369
AND Memb_Stat.ConnectStat = 0
and Money>('1')
and resets>= 400
and resets<4000
AND MEMB_INFO.vip = 1
--Backup de DB
Comece fazendo uma job:
Enterprise Manager>Management>SQL Server Agent>Jobs
- Aba General:
Clicamos com o direito na área a direita e em seguida "New Job". Na primeira tela, em "Name" colocaremos um nome para a job, pode ser "backup"(sem as aspas). Aba Step: Clicamos em "Step" e em baixo "New", uma nova tela abrirá, em "Step name" coloque um nome, pode ser o mesmo colocado no início do processo.
- Em "Type" deixe como está, em "Database" selecione "master", em command cole isto:
BACKUP DATABASE [muonline] TO DISK = N'C:\MuServer\DB Bak\db_muonline.bak' WITH INIT , NOUNLOAD , NAME =N'muonline backup', NOSKIP , STATS = 10, NOFORMAT
- Clique em "Parse", depois "Apply", depois "OK".
[Only registered and activated users can see links]
- Explicando o comando:
C:\MuServer\DB Bak\db_muonline.bak
Esse trecho quer dizer que ele vai salvar o backup no caminho que está ali, no meu caso, criei uma pasta chamada "DB Bak" dentro da pasta do meu MuServer, e lá fica o backup.
"db_muonline.bak" é o nome que vai ficar o arquivo de backup, pode alterar, desde que mantenha o .bak no final.
- Dica: Adicionando a mesma linha duas vezes no comando, só mudando o local onde vai ser salvo, é uma boa para quem pretende salvar o backup em mais de um local ao mesmo tempo.
- Criando a Schedule:
- Depois de dado ok no comando, vamos para a aba "Schedules", clicamos em "New Schedule".
Aba Schedules:
Em "Name" colocamos um nome, pode ser novamente o mesmo do início...
Clicamos lá em baixo, em "Change".
- Na próxima tela vem um passo muito importante, vamos configurar a frequência que será feito o backup, digamos que seja de 4 em 4 horas, configuremos da seguinte maneira:
- Clique em "Daily", observe que ao lado ficou "Every 1 day(s)", quer dizer que vai ocorrer todos os dias, deixe assim.
- Mais abaixo marque "Occurs every:", mais ao lado ponha "4", mais ao lado ponha "Hours"
- Assim ficou configurado para acontecer todos os dias, de 4 em 4 horas, o tempo pode ser mudado a gosto, mas acho que 4 horas tá muito bom.
Dê "OK" na janela, e siga dando "OK" nas demais, em "Jobs" então irá aparecer a job que você criou, clique com o botão direito do mouse sobre ela e ponha "Start Job".
--Bônus Para Novos Personagens
USE MuOnline
IF EXISTS (SELECT name FROM sysobjects
WHERE name = 'MUC_BONUS' AND type = 'TR')
DROP TRIGGER MUC_BONUS
GO
CREATE TRIGGER MUC_BONUS ON Dbo.Character FOR INSERT
AS
BEGIN
-- Bonus para Novos Chars
DECLARE
@Resets INT,
@Pontos INT,
@Dinheiro INT,
@Char varchar(10)
SELECT @Char = Name FROM INSERTED
SET @Resets = 10 -- INSERIR QUANTIDADE DE RESETS
SET @Pontos = 3500 -- INSERIR QUANTIDADE DE PONTOS INICIAIS
SET @Dinheiro = 1000000 -- INSERIR QUANTIDADE DE DINHEIRO
UPDATE Dbo.Character
SET Resets = @Resets, LevelUpPoint = @Pontos, Money = @Dinheiro
WHERE Name = @Char
END
Observação: PARA NÃO USAR MAIS, basta rodar o script abaixo uma única vez no query analyzer e estará removida.
USE MuOnline
IF EXISTS (SELECT name FROM sysobjects
WHERE name = 'MUC_BONUS' AND type = 'TR')
DROP TRIGGER MUC_BONUS
GO
--Bonus em Golds, Semanal ou Mensal com Tempo Online
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
- 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
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'
--Apagar Todas as Contas do Banco de Dado
- Basta colocar no query, selecionar MuOnline e apertar f5. Seu server vai ser totalmente resetado!
Essa query serve pra deletar contas que foram criadas mas nunca foram logadas. Basta executar no query analiser.
DECLARE @Acc varchar(10), @Chars varchar(10), @test int
select @test = 0
DECLARE LISTA CURSOR LOCAL FOR
SELECT memb___id FROM MEMB_INFO
OPEN LISTA
FETCH NEXT FROM LISTA INTO @Acc
WHILE @@FETCH_STATUS = 0
begin
if (SELECT COUNT(*) FROM Character where AccountID=@Acc) = 0
begin
DELETE from MEMB_INFO where memb___id=@Acc
DELETE from VI_CURR_INFO where memb___id=@Acc
select @test = @test + 1
end
FETCH NEXT FROM LISTA INTO @Acc
end
CLOSE LISTA
DEALLOCATE LISTA
print @test
- Lembrando: Sempre fazer backup antes de executar a query, para caso ocorra um problema você não perder os dados.
--Deletar Guilds Com Score Baixo
Essa query e para delatar Guilds com score baixo:
DELETE GuildMember
From GuildMember join Guild on GuildMember.G_Name = Guild.G_Name
where Guild.G_Score < ('10')
DELETE Guild
where G_Score < ('10')
- Em 10 você escolhe o total de score que você quer que ele delete, no caso 10 a query vai deletar de 10 pra menos permanecendo somente os acima de 10.
--Entendendo Jobs
Esta JOB deleta automaticamente chars com nick Webzen
1º - Abra o Enterprise Manager
2º - Vá em SQL Server Group / (LOCAL) (Windows NT) / Management / SQL Server Agent / Jobs
3º - Botão Direito clica em NewJob...
4º - Em General bote o nome WEBZEN
5º - Em Steps clique em New e bote o nome WEBZEN, selecione a Database MuOnline e em command cole esse codigo:
DECLARE @Acc varchar(10), @Chars varchar(10), @test int
select @test = 0
DECLARE LISTA CURSOR LOCAL FOR SELECT name FROM character WHERE name LIKE '%webzen%'
OPEN LISTA
FETCH NEXT FROM LISTA INTO @Acc
WHILE @@FETCH_STATUS = 0
begin
if (SELECT COUNT(*) FROM Character where name=@Acc)>0
begin
DELETE from character where name=@Acc
select @test = @test + 1
end
FETCH NEXT FROM LISTA INTO @Acc
end
CLOSE LISTA
DEALLOCATE LISTA
print @test
- Clique em Apply e OK.
6º - Em Schedules clique em New Schedules e bote o nome WEBZEN, após clique em Change, selecione Dialy e bote para rodar em 1 em 1 minutos.
Pronto ! so da OK em tudo que ficou aberto e Start na JOB e todos que criar char com nick webzen e deletado o char automaticamente.
--Evolução de Classes (BM, DM, HE, LE, GM)
-- Reset por pontos (NÃO VIP)
UPDATE Character
SET clevel=('1') , experience=('0') , LevelUpPoint=300+300*Resets , Resets=Resets+1 , Strength=('20') , Dexterity=('20') , Vitality=('20') , Energy=('20') , Inventory=null, MagicList=null
FROM Character join Memb_Stat on Character.Accountid = Memb_Stat.memb___id COLLATE Latin1_General_CS_AS
JOIN MEMB_INFO ON Character.AccountID=MEMB_INFO.memb___id COLLATE Latin1_General_CS_AS
WHERE clevel>399 and MEMB_INFO.vip=0 and MEMB_STAT.ConnectStat=0
- UPDATE Character = Fazer update na tabela character.
- Set clevel=('1') = O level que ele vai ter após o reset
- experience=('0') = A experiencia q ele vai ter após o reset
- LevelUpPoint=300+300*Resets = Pontos por Reset
- Resets=Resets+1 = Para somar os Resets, ou seja, Resets (os resets atuais dele) +1
- Strength=('20') , Dexterity=('20') , Vitality=('20') , Energy=('20') = Botar os Status dele = 20 se não botar isso, vira Reset Acumulativo
- Inventory=null = Resetar o Inventorio
- MagicList=null = Resetar a Lista de Magias
- WHERE clevel>399 = O level de Reset, tem de deixar 1 level a menos, pois a pessoa já começa level 1, então se for level 350 o reset, tem de botar 349
- MEMB_INFO.vip=0 = Esse seria o vip na MEMB_INFO, se for o reset vip, você coloca 1, supervip, coloca 2 e assim por diante.
- MEMB_STAT.ConnectStat=0 = Esse é somente pra resetar se o ConnectStar tiver "0", ou seja, desconnectado
- O restante é apenas o código para funcionar.
--Deletar Guilds Com Score Baixo
- Nas configurações originais, o char deve ter um power reset (resetao, master reset) e está no mapa e cordenada certa fica com a conta off por 20 minutos.
- Por exemplo, um SM e quer evoluir a classe, deve ter um power reset, ir pra lorencia cordenada 190-30, aguardar 20 minutos e quand voltar irá virar Grand Master.
- Pra fazer a Job você deve ter a column PR (Power Reset)
--PR int 4 [ ] defalut 0
ou mude a linha:
and Character.PR >= 1
Troque as letras "PR" pelo nome da column do seu resetao, power reset, master reset o nome que você usar no seu server.
Pra quem nãoo tem o Power Reset no server mude a linha:
and Character.PR >= 1
Troque "PR" por "Resets" sem aspas e troque o numero "1" pelo numero de resets que você quer que evolua a classe.
Se preferir pode colocar por level, mude a linha:
and Character.PR >= 1
Troque "PR" por "cLevel" sem aspas e troque 1 pelo numero de level que você deseja que evolua a classe.
-> Lembrando na linha and Character.PR >= 1 esta >= ou seja, "maior ou igual a" se quiser que seja numero exato, retire o sinal de > (maior)
1) Abra o SQL Server Enterprise Manager.
2) Vai em Microsoft SQL Server\SQL Server Group\(local)(WindowsNT)\Databases\Management\SQL Server Agent\Jobs.
3) Clique direito em SQL Server Agent e Dê Start.
4) Clique botao direito e New Job.
5) Dê um nome ex: "Evoluir Classe" - sem aspas.
6) Clique na guia Steps.
- Clique no botao New...
- Em Step name: coloque novamente o nome Evoluir Classe
- Type:Transact:SQL Script (TSQL)
- Database: selecione MuOnline
- Em command: coloque esse código
-- Classes
-- BK=17 MG=48 ME=33 DL=64 SM=1
-- BM=18 DM=49 HE=34 LE=65 GM=2
--Money=Money-('1000000000') zen requerido
--Class=X Classe q irá evoluir
--And Memb_Stat.ConnectStat = 0 Checa se a acc ta off
--and Money > ('1000000000') Checa se zen eh maior q 1kkk
--and Character.Class = X Checa a classe
--and Character.PR >= 1 Checa se tem Power Resets
--and Character.MapNumber = 0 Checa o mapa
--and Character.MapPosX = 190 Checa a cordx
--and Character.MapPosY = 130 Checa a cordy
- Virar Grand Master
UPDATE Character SET
Money=Money-('1000000000'),
Class=2
FROM Character
JOIN MEMB_STAT ON Character.AccountID=MEMB_STAT.memb___id COLLATE Latin1_General_CS_AS
JOIN MEMB_INFO ON Character.AccountID=MEMB_INFO.memb___id COLLATE Latin1_General_CS_AS
And Memb_Stat.ConnectStat = 0
and Money > ('1000000000')
and Character.Class = 1
and Character.PR >= 1
and Character.MapNumber = 0
and Character.MapPosX = 190
and Character.MapPosY = 130
- Virar Blade Master
UPDATE Character SET
Money=Money-('1000000000'),
Class=18
FROM Character
JOIN MEMB_STAT ON Character.AccountID=MEMB_STAT.memb___id COLLATE Latin1_General_CS_AS
JOIN MEMB_INFO ON Character.AccountID=MEMB_INFO.memb___id COLLATE Latin1_General_CS_AS
And Memb_Stat.ConnectStat = 0
and Money > ('1000000000')
and Character.Class = 17
and Character.PR >= 1
and Character.MapNumber = 0
and Character.MapPosX = 26
and Character.MapPosY = 247
- Virar High Elf
UPDATE Character SET
Money=Money-('1000000000'),
Class=34
FROM Character
JOIN MEMB_STAT ON Character.AccountID=MEMB_STAT.memb___id COLLATE Latin1_General_CS_AS
JOIN MEMB_INFO ON Character.AccountID=MEMB_INFO.memb___id COLLATE Latin1_General_CS_AS
And Memb_Stat.ConnectStat = 0
and Money > ('1000000000')
and Character.Class = 33
and Character.PR >= 1
and Character.MapNumber = 3
and Character.MapPosX = 4
and Character.MapPosY = 246
- Virar Dual Master
UPDATE Character SET
Money=Money-('1000000000'),
Class=49
FROM Character
JOIN MEMB_STAT ON Character.AccountID=MEMB_STAT.memb___id COLLATE Latin1_General_CS_AS
JOIN MEMB_INFO ON Character.AccountID=MEMB_INFO.memb___id COLLATE Latin1_General_CS_AS
And Memb_Stat.ConnectStat = 0
and Money > ('1000000000')
and Character.Class = 48
and Character.PR >= 1
and Character.MapNumber = 0
and Character.MapPosX = 247
and Character.MapPosY = 153
- Virar Lord Emperor
UPDATE Character SET
Money=Money-('1000000000'),
Class=65
FROM Character
JOIN MEMB_STAT ON Character.AccountID=MEMB_STAT.memb___id COLLATE Latin1_General_CS_AS
JOIN MEMB_INFO ON Character.AccountID=MEMB_INFO.memb___id COLLATE Latin1_General_CS_AS
And Memb_Stat.ConnectStat = 0
and Money > ('1000000000')
and Character.Class = 64
and Character.PR >= 1
and Character.MapNumber = 0
and Character.MapPosX = 46
and Character.MapPosY = 169
- Clique em parse e dê ok na mensagem e ok na janela Edit Job Step
7) Clique na guia Schedules.
- Clique no botao New Schedules...
- Coloque novamente Evoluir Classe
- Marque Recurring e clique em Change...
- Em Occurs marque Daily
- Daily deixe 1
- Daily frequency marque Occurs every:
- Coloque quanto tempo quer para q a acc fique off (no meu caso coloco 20 minutos)
8) Dê ok na janela Edit Recurring Job Schedule, em Edit Job Shedule e na Evoluir Classe Proprieties.
9) Clique direito na Job criada e dê Start Job.
--Gerar ConnectMember
- Antes de tudo: REALIZE UM BACKUP DE SEU BANCO DE DADOS. Independente da ação simples deste script, não custa nada realizar um backup do banco de dados, antes de testar qualquer coisa.
- Qual a função deste script? Este script irá gerar um View das contas VIP do servidor, e uma procedure que poderá ser evocada a qualquer momento para gerar o arquivo ConnectMember.txt
- Vale lembrar que: Se o arquivo ServidorInfo.dat de seu servidor possui a opção ConnectMemberLoad = 1, somente as contas disponibilizadas dentro do ConnectMember.txt que podem se conectar ao servidor.
- Requisito Básico: Conhecimentos básicos no Query Analyzer. O script permanecerá instalado em seu banco de dados, e será chamado sempre que voce solicitar... isso pode ser via job, ou diretamente no Query.
- Como instalar os scripts:
1) Rode o script abaixo 1 vez, para instalar a tabela de View em seu banco de dados. Veja que no script, estou utilizando por padrao a coluna MEMB_INFO.VIP = 1 para os vips... voce pode alterar esta parte para atender suas necessidades.
-- LISTAGEM PARA VISUALIZACAO VIP
USE MuOnline
GO
CREATE VIEW MUC_VW_ML AS
SELECT MEMB___ID = '"' + MEMB___ID + '"'
FROM MEMB_INFO
WHERE VIP = 2
GO
2) Agora rode o script abaixo 1 vez, para instalar a Procedure que realizará a criaçao do arquivo txt sempre que solicitada.
-- PROCEDURE DE EXPORTACAO DE DADOS
USE MuOnline
GO
CREATE Procedure MUC_MEMBERLIST
(
@arquivo varchar(100)
)
AS
BEGIN
DECLARE @lista varchar(8000)
SELECT @lista = 'bcp MuOnline..MUC_VW_ML out '+ @arquivo + ' -c '
EXEC master..xp_cmdshell @lista
END
GO
3) Pronto, agora toda vez que voce precisar gerar um arquivo ConnectMember.txt em seu servidor, ou atualizá-lo, sem ter que digitar um por um, execute o comando abaixo no Query Analyzer.
4) Caso queira deletar o script de seu banco de dados, rode o script abaixo em seu Query Analyzer.
DROP Procedure MUC_MEMBERLIST
DROP View MUC_VW_ML
--Dar Golds Para Jogadores Online a Cada 3 Horas
- A cada 3 horas a job é executada e da para os usuarios online 10 GoldsEvent
- Antes de rodar a query tem que criar a coluna na memb_info a coluna GoldsEvent ! int | desmarcado | (0)
Job na query:
USE [msdb]
GO
BEGIN TRANSACTION
DECLARE @ReturnCode INT
SELECT @ReturnCode = 0
IF NOT EXISTS (SELECT name FROM msdb.dbo.syscategories WHERE name=N'[Uncategorized (Local)]' AND category_class=1)
BEGIN
EXEC @ReturnCode = msdb.dbo.sp_add_category @class=N'JOB', @type=N'LOCAL', @name=N'[Uncategorized (Local)]'
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
SELECT @memb___id=memb___id,@ConnectStat=ConnectStat FROM memb_stat WHERE ConnectStat=''1''
update memb_info set GoldEvent = GoldEvent + 10 where memb___id=@memb___id',
@database_name=N'MuOnline',
@flags=0
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXEC @ReturnCode = msdb.dbo.sp_update_job @job_id = @jobId, @start_step_id = 1
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXEC @ReturnCode = msdb.dbo.sp_add_jobschedule @job_id=@jobId, @name=N'EventGoldsHoras3horas',
@enabled=1,
@freq_type=4,
@freq_interval=1,
@freq_subday_type=8,
@freq_subday_interval=3,
@freq_relative_interval=0,
@freq_recurrence_factor=0,
@active_start_date=20100930,
@active_end_date=99991231,
@active_start_time=0,
@active_end_time=235959
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXEC @ReturnCode = msdb.dbo.sp_add_jobserver @job_id = @jobId, @server_name = N'(local)'
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
COMMIT TRANSACTION
GOTO EndSave
QuitWithRollback:
IF (@@TRANCOUNT > 0) ROLLBACK TRANSACTION
EndSave:
--Dar Golds / Ver IP/ Ver Logins Por Ip / Resetar Master Level
RESETAR MASTER LEVEL, Pontos e XP (Usado da ENC e outros)
- Para Determinado Char.
update T_MasterLevelSystem set MASTER_LEVEL='1', ML_EXP='0', ML_NEXTEXP='0', ML_POINT='0' where CHAR_NAME='Nick'
- Todos os chars.
update T_MasterLevelSystem set MASTER_LEVEL='1', ML_EXP='0', ML_NEXTEXP='0', ML_POINT='0'
Dar Golds/cash etc.. (para quem tiver online)
UPDATE MEMB_INFO SET gold = gold+1
FROM MEMB_INFO JOIN MEMB_STAT ON MEMB_INFO.memb___id = MEMB_STAT.memb___id COLLATE Latin1_general_CI_AI
WHERE (ConnectStat >= 1)
- Observação: Trocar "gold = gold+1" pela moeda que você desejar e trocar o "gold = gold+1" pela quantidade da moeda.
- Ver dados conexão da conta como: horário que logou ou saiu, qual servidor e principalmente IP
select * from memb_stat where memb___id='login'
- Ver todos logins/dados conexão de quem logou com determinado IP
select * from memb_stat where ip='IP'
--Job Para dar Gold Por Reset
declare @AccountID varchar (10)
declare @Name varchar(10)
declare @resetsday int
declare @memb___id varchar (10)
Select top 1 @AccountID=AccountID,@Name=Name,@ResetsDay =ResetsDay from character order by ResetsDay desc, name desc
Update memb_info set gold=gold+@ResetsDay where memb___id=@AccountID
Select @memb___id=memb___id from memb_info where memb___id =@AccountID
update character set ResetsDay = 0 where AccountID=@memb___id
--Apenas Letras e Números em Nome de Guilds
- Como faço um backup da procedure original?
- Abra seu query analyzer
- Conecte-se ao sql server
- No painel à esquerda - chamado "Object Browser" - clique no + na opção "MuOnline"
- Clique no + Stored Procedures
- Procure a procedure WZ_GuildCreate e clique com o botão direito do mouse no mesmo.
- Vá em "Script Object To File As > Alter"
- Salve em qualquer local do seu computador.
- Pronto, o backup da procedure está feito.
- Após ter feito o backup, vá no query analyzer, copie o código abaixo e dê F5:
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO
ALTER procedure WZ_GuildCreate
@GuildName nvarchar(50),
@MasterName nvarchar(10)
as
IF (SELECT COUNT(*) FROM guild where G_Name=@GuildName )=0
BEGIN
DECLARE @p INTEGER
DECLARE @ErrorCode int
SET @ErrorCode = 0
SET XACT_ABORT OFF
Set nocount on
begin transaction
SELECT @p = PATINDEX('%[^a-zA-Z0-9]%',@GuildName)
IF(@p > 0)
BEGIN
SET @ErrorCode = 1
END
IF(@ErrorCode = 0)
BEGIN
INSERT INTO Guild (G_Name,G_Master,G_Score) values (@GuildName, @MasterName, 1)
IF(@@Error <> 0)
BEGIN
SET @ErrorCode = 1
END
END
IF(@ErrorCode = 0)
BEGIN
INSERT GuildMember (Name, G_Name, G_Level) values (@MasterName, @GuildName, 1)
IF (@@Error <> 0)
BEGIN
SET @ErrorCode = 2
END
END
Set @Guild = (Select OWNER_GUILD from MuCastle_DATA)
IF (@Guild <> '')
BEGIN
DECLARE C CURSOR FOR SELECT Name,G_Status FROM GuildMember Where G_Name = @Guild Order By G_Status desc
OPEN C
FETCH NEXT FROM C INTO @Char,@G_Status
WHILE @@FETCH_STATUS = 0
BEGIN
IF @G_Status = 128 -- G_status = 128 (Guild Master)
BEGIN
SET @Premio = 30;
END
IF @G_Status = 64 -- G_status = 64 (Assistente Guild Master)
BEGIN
SET @Premio = 20;
END
IF @G_Status = 32 -- G_status = 32 (Batle Master)
BEGIN
SET @Premio = 10;
END
IF @G_Status = 0 -- G_status = 0 (Membro)
BEGIN
SET @Premio = 5;
END
SET @Conta = '';
SET @Conta = (Select AccountID From Character where Name = @Char)
IF (@Conta <> '')
BEGIN
Update MEMB_INFO set Coins = Coins + @Premio where memb___id = @Conta
END
FETCH NEXT FROM C INTO @Char,@G_Status
END
CLOSE C
DEALLOCATE C
END
- Algumas Explicações:
• Na parte:
IF @G_Status = 128 -- G_status = 128 (Guild Master)
BEGIN
SET @Premio = 30;
END
IF @G_Status = 64 -- G_status = 64 (Assistente Guild Master)
BEGIN
SET @Premio = 20;
END
IF @G_Status = 32 -- G_status = 32 (Batle Master)
BEGIN
SET @Premio = 10;
END
IF @G_Status = 0 -- G_status = 0 (Membro)
BEGIN
SET @Premio = 5;
END
- Comparando a variavel @G_Status que recebe o valor referente a que tipo de membro estamos tratando..
- Onde a Variavel @Premio é o valor definido para Cada posição, ou seja é editavel e fica a seu gosto....
- Na Linha:
Update MEMB_INFO set Coins = Coins + @Premio where memb___id = @Conta
--Premiando os Players Online com Cash
Use webSite
UPDATE webCash
SET amount = webCash_1.amount + 40
FROM MuOnline.dbo.MEMB_STAT INNER JOIN
webCash ON MuOnline.dbo.MEMB_STAT.memb___id = webCash.username CROSS JOIN
webCash AS webCash_1
WHERE (MuOnline.dbo.MEMB_STAT.ConnectStat = '1')
--Premiando Rank Semanal, Rank Mensal
- Primeiro crie uma JOB
- Coloque o nome de Premiando_Semanal
- Vá em step e coloque o codigo a baixo:
declare @AccountID varchar (10)
declare @Name varchar(10)
declare @Semanal int
Select top 1 @AccountID=AccountID,@Name=Name,@Semanal=Semanal from character order by Semanal desc, name desc
Update memb_info set gold=gold+50 where memb___id=@AccountID
Update character set Semanal=0
- Agora vamos entender o código vocês só precisam mudar a parte gold=gold+50 no lugar do 50 o tanto de gold que você deseja!!
- Bom no rank semanal eu uso a tabela Semana então usei essa tabela que se localiza em Character
- Agora vá na aba schedules e poem pra roda de uma em uma semana
- Agora job para premiar o mensal
- Coloque o nome de Premiando_Mensal
- Vá em step e coloque o codigo a baixo:
declare @AccountID varchar (10)
declare @Name varchar(10)
declare @Mensal int
Select top 1 @AccountID=AccountID,@Name=Name,@Mensal=Mensal from character order by Mensal desc, name desc
Update memb_info set gold=gold+50 where memb___id=@AccountID
Update character set Mensal=0
- Agora vamos entender o código vocês só precisam mudar a parte gold=gold+50 no lugar do 50 o tanto de gold que você deseja!!
- Bom no rank mensal eu uso a tabela mensal então usei essa tabela que se localiza em Character
- Agora vá na aba schedules e poem pra roda de uma em uma semana
- Depois que da o premio a job também da um update pra 0 na tabela semanal,mensal.
- Obs: Caso esteja usando o shop da Dark Team na linha:
Update memb_info set gold=gold+50 where memb___id=@AccountID
- Mude Para:
Update DT_SHOP_CREDITS set credits=credits+10 where login=@AccountID
--Procurando Contas Duplicadas
SELECT memb___id,
COUNT(memb___id) AS NumOccurrences
FROM memb_info
GROUP BY memb___id
HAVING ( COUNT(memb___id) > 1 )
--PROCEDURE para Desconectar Usuário
USE [MuOnline]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[WZ_DISCONNECT_MEMB]
@uid varchar(20)
AS
Begin
BEGIN TRANSACTION
SET NOCOUNT ON
IF EXISTS ( SELECT memb___id FROM MEMB_STAT WITH (READUNCOMMITTED) WHERE memb___id = @uid )
Begin
UPDATE MEMB_STAT
SET connectstat = 0 , DisConnectTM = (getdate())
WHERE memb___id = @uid
End
declare @database varchar(15), @directory varchar(30), @tmp varchar(55)
select @directory = 'c:/backups/', -- DIRETÓRIO AQUI (completo, com '/' no final, como está por padrão)
@database = 'muonline', -- BANCO DE DADOS AQUI
@tmp = @directory + @database + '_' + convert(varchar(50), replace(replace(getdate(), ' ', '_'), ':', '-')) + '.backup'
backup database @database to disk = @tmp
- Bônus de Reset + Pontos + Zen ao Criar Conta
IF EXISTS (SELECT name FROM sysobjects
WHERE name = 'MUC_BONUS' AND type = 'TR')
DROP TRIGGER MUC_BONUS
GO
CREATE TRIGGER MUC_BONUS ON Dbo.Character FOR INSERT
AS
BEGIN
DECLARE
@Resets INT,
@Pontos INT,
@Dinheiro INT,
@Char varchar(10)
SELECT @Char = Name FROM INSERTED
SET @Resets = 10
SET @Pontos = 1000
SET @Dinheiro = 1000000000
UPDATE Dbo.Character
SET Resets = @Resets, LevelUpPoint = @Pontos, Money = @Dinheiro
WHERE Name = @Char
END
- Observação: Basta editar a quantidade de resetes, pontos e zen que você quer onde está em negrito.
- Para retirar esse Bonus Execute:
USE MuOnline
IF EXISTS (SELECT name FROM sysobjects
WHERE name = 'MUC_BONUS' AND type = 'TR')
DROP TRIGGER MUC_BONUS
GO
- Editar Resets de Algum Char
UPDATE Character SET Resets=Numero de resets WHERE name ='Nome do char'
- Vip + Golds Para Todas as Contas
update memb_info set creditos = creditos+3
update memb_info set vip = 1 where vip = 0
update DT_SHOP_CREDITS set credits=credits+20
- Observação: No shop Dark Team
- Query Premiação de Golds Para Players Online
USE [MuOnline]
UPDATE webCash.dbo.webSite SET amout=amout + 1
FROM memb_info JOIN MEMB_STAT ON MEMB_INFO.memb___id = memb_stat.memb___id
collate Latin1_general_CI_AS
WHERE MEMB_STAT.ConnectStat = 1
- Observação: Para tabelas no site Leandro Daldegam
FROM Character
JOIN MEMB_STAT ON Character.AccountID=MEMB_STAT.memb___id COLLATE Latin1_General_CS_AS
JOIN MEMB_INFO ON Character.AccountID=MEMB_INFO.memb___id COLLATE Latin1_General_CS_AS
WHERE cLevel > 399
AND Money > 50000000
AND MEMB_STAT.ConnectStat = 0
AND MEMB_INFO.vip = 0
AND Resets <= 5000
FROM Character
JOIN MEMB_STAT ON Character.AccountID=MEMB_STAT.memb___id COLLATE Latin1_General_CS_AS
JOIN MEMB_INFO ON Character.AccountID=MEMB_INFO.memb___id COLLATE Latin1_General_CS_AS
WHERE cLevel > 350
AND Money > 10000000
AND MEMB_STAT.ConnectStat = 0
AND MEMB_INFO.vip = 1
AND Resets <= 5000
FROM Character
JOIN MEMB_STAT ON Character.AccountID=MEMB_STAT.memb___id COLLATE Latin1_General_CS_AS
JOIN MEMB_INFO ON Character.AccountID=MEMB_INFO.memb___id COLLATE Latin1_General_CS_AS
WHERE cLevel > 330
AND Money > 10000000
AND MEMB_STAT.ConnectStat = 0
AND MEMB_INFO.vip = 2
AND Resets <= 5000
--Ranking PK - Acumulando Mortes
- Primeiro vá na Database MuOnline -> Characters e cria uma coluna chamada RankingPk
- RankingPK | int | 4 | desmarcado | default value 0
.Agora vá no Sql Sever Agent e crie uma nova Job, de qualquer nome para ela.
.Agora vá no Sql Sever Agent e crie uma nova Job, de qualquer nome para ela.
.Onde está escrito: Coloque a query do step aqui
- Coloque:
UPDATE Character
SET RankingPK = RankingPK + PkCount
FROM Character JOIN Memb_Stat on Character.Accountid = Memb_Stat.memb___id COLLATE Latin1_General_CS_AS
JOIN MEMB_INFO ON Character.AccountID=MEMB_INFO.memb___id COLLATE Latin1_General_CS_AS
WHERE PkCount > 0 and MEMB_STAT.ConnectStat = 0
- Escolha a Database MuOnline e clique em Parse e depois em Ok.
- Agora clique na aba steps novamente e em New e adicione um segundo step, mesmo procedimento do step acima só que com a seguinte query:
UPDATE Character
SET PkCount = 0
FROM Character JOIN Memb_Stat on Character.Accountid = Memb_Stat.memb___id COLLATE Latin1_General_CS_AS
JOIN MEMB_INFO ON Character.AccountID=MEMB_INFO.memb___id COLLATE Latin1_General_CS_AS
WHERE PkCount > 0 and MEMB_STAT.ConnectStat = 0
- Feito esse segundo step, volte ao primeiro, editar e clique na aba Adavanced, ao lado da aba General.
- Ai vai ter lá: On Success action: coloque para ir ao segundo step e pronto.
- Marque para que atualize a cada 1 minuto.
--Reduzindo Tamanho da BD
- Suas DB estão grandes? Vamos reduzir elas para 200 MB sem perder nada no server.
- Primeiramente faça um backup antes de rodar a query, só por precaução, isso somente na primeira vez que for usar a query.
- Dando certo nas próximas não precisa salvar antes de usar a query, uso ela a anos e nunca me deu problemas
- Faça o seguinte:
1º - Vá no Query Analyzer
2º - Logue com seu ID e senha do SQL
3º - Selecione a DB Mu ONline
4º - Lança essa query
-- FORÇANDO UM CHECKPOINT
CHECKPOINT
-- LIMPANDO O LOG PARA QUE POSSA SER FEITO O REDIMENSIONAMENTO BACKUP LOG MuOnline WITH TRUNCATE_ONLY
-- REDIMENCIONAMENTO DO LOG PARA 200 MB
DBCC SHRINKFILE (MuOnline_log, 200)
5º - Clique no play logo acima
- Aguarde o resultado logo a baixo e pronto !
- Sua DB de GB reduziu para MB sem perder nada no servidor.
FROM Character
JOIN MEMB_STAT ON Character.AccountID=MEMB_STAT.memb___id COLLATE Latin1_General_CS_AS
JOIN MEMB_INFO ON Character.AccountID=MEMB_INFO.memb___id COLLATE Latin1_General_CS_AS
WHERE cLevel > 399
AND Money > 50000000
AND MEMB_STAT.ConnectStat = 0
AND MEMB_INFO.vip = 0
AND Resets <= 5000
FROM Character
JOIN MEMB_STAT ON Character.AccountID=MEMB_STAT.memb___id COLLATE Latin1_General_CS_AS
JOIN MEMB_INFO ON Character.AccountID=MEMB_INFO.memb___id COLLATE Latin1_General_CS_AS
WHERE cLevel > 350
AND Money > 10000000
AND MEMB_STAT.ConnectStat = 0
AND MEMB_INFO.vip = 1
AND Resets <= 5000
FROM Character
JOIN MEMB_STAT ON Character.AccountID=MEMB_STAT.memb___id COLLATE Latin1_General_CS_AS
JOIN MEMB_INFO ON Character.AccountID=MEMB_INFO.memb___id COLLATE Latin1_General_CS_AS
WHERE cLevel > 330
AND Money > 10000000
AND MEMB_STAT.ConnectStat = 0
AND MEMB_INFO.vip = 2
AND Resets <= 5000
UPDATE Character SET LevelUpPoint=0
FROM Character JOIN MEMB_STAT ON Character.AccountID = MEMB_STAT.memb___id COLLATE Latin1_general_CI_AI
WHERE ((Class=0) or (Class=1) or (Class=16) or (Class=17) or (Class=32) or (Class=33) or (Class=48) or (Class=64)) and (cLevel>399) and (Money>100000000) and (PkLevel<4) and (ConnectStat=0)
UPDATE Character SET cLevel=1, LevelUpPoint=300*(Resets+1), Class=0, Experience=0, Strength=18, Dexterity=18, Vitality=15, Energy=30, Inventory=NULL, MagicList=NULL, Money=Money-(100000000), MapNumber=0, MapPosX=125, MapPosY=123, PkLevel=3, PkTime=0, Quest=NULL, Resets=Resets+(1)
FROM Character JOIN MEMB_STAT ON Character.AccountID = MEMB_STAT.memb___id COLLATE Latin1_general_CI_AI
WHERE ((Class=0) or (Class=1)) and (cLevel>399) and (Money>100000000) and (PkLevel<4) and (ConnectStat=0)
UPDATE Character SET cLevel=1, LevelUpPoint=300*(Resets+1), Class=16, Experience=0, Strength=28, Dexterity=20, Vitality=25, Energy=10, Inventory=NULL, MagicList=NULL, Money=Money-(100000000), MapNumber=0, MapPosX=125, MapPosY=123, PkLevel=3, PkTime=0, Quest=NULL, Resets=Resets+(1)
FROM Character JOIN MEMB_STAT ON Character.AccountID = MEMB_STAT.memb___id COLLATE Latin1_general_CI_AI
WHERE ((Class=16) or (Class=17)) and (cLevel>399) and (Money>100000000) and (PkLevel<4) and (ConnectStat=0)
UPDATE Character SET cLevel=1, LevelUpPoint=300*(Resets+1), Class=*** Experience=0, Strength=22, Dexterity=25, Vitality=20, Energy=15, Inventory=NULL, MagicList=NULL, Money=Money-(100000000), MapNumber=0, MapPosX=125, MapPosY=123, PkLevel=3, PkTime=0, Quest=NULL, Resets=Resets+(1)
FROM Character JOIN MEMB_STAT ON Character.AccountID = MEMB_STAT.memb___id COLLATE Latin1_general_CI_AI
WHERE ((Class=32) or (Class=33)) and (cLevel>399) and (Money>100000000) and (PkLevel<4) and (ConnectStat=0)
UPDATE Character SET cLevel=1, LevelUpPoint=300*(Resets+1), Class=48, Experience=0, Strength=26, Dexterity=26, Vitality=26, Energy=26, Inventory=NULL, MagicList=NULL, Money=Money-(100000000), MapNumber=0, MapPosX=125, MapPosY=123, PkLevel=3, PkTime=0, Quest=NULL, Resets=Resets+(1)
FROM Character JOIN MEMB_STAT ON Character.AccountID = MEMB_STAT.memb___id COLLATE Latin1_general_CI_AI
WHERE (Class=48) and (cLevel>399) and (Money>100000000) and (PkLevel<4) and (ConnectStat=0)
UPDATE Character SET cLevel=1, LevelUpPoint=300*(Resets+1), Class=64, Experience=0, Strength=26, Dexterity=26, Vitality=26, Energy=26, Inventory=NULL, MagicList=NULL, Money=Money-(100000000), MapNumber=0, MapPosX=125, MapPosY=123, PkLevel=3, PkTime=0, Quest=NULL, Leadership=26, Resets=Resets+(1)
FROM Character JOIN MEMB_STAT ON Character.AccountID = MEMB_STAT.memb___id COLLATE Latin1_general_CI_AI
WHERE (Class=64) and (cLevel>399) and (Money>100000000) and (PkLevel<4) and (ConnectStat=0)
-- Definindo valor das variaveis (Configure conforme necessário)
-- Contas não VIP
set @MaxLevel = 300 -- Level ao qual poderá resetar
set @PontosReset = 2000 -- Pontos que ganhará por reset (Pontos vezes Resets)
set @ZenReq = 0 -- Zen requerido para resetar
set @Forca = 25 -- Ponto padrão de força que ira retornar após resetar
set @Agilidade = 30 -- Ponto padrão de agilidade que ira retornar após resetar
set @Vitalidade = 15 -- Ponto padrão de vitalidade que ira retornar após resetar
set @Energia = 32 -- Ponto padrão de energia que ira retornar após resetar
FROM Character
JOIN MEMB_STAT ON Character.AccountID=MEMB_STAT.memb___id COLLATE Latin1_General_CS_AS
JOIN MEMB_INFO ON Character.AccountID=MEMB_INFO.memb___id COLLATE Latin1_General_CS_AS
WHERE cLevel > (@MaxLevel - 1)
AND Money > (@ZenReq - 1)
AND MEMB_STAT.ConnectStat = 0
AND MEMB_INFO.vip = 0
AND Resets <= 50
-- Definindo valor das variaveis (Configure conforme necessário)
-- Contas não VIP
set @MaxLevel = 319 -- Level ao qual poderá resetar
set @PontosReset = 1000 -- Pontos que ganhará por reset (Pontos vezes Resets)
set @ZenReq = 0 -- Zen requerido para resetar
set @Forca = 25 -- Ponto padrão de força que ira retornar após resetar
set @Agilidade = 30 -- Ponto padrão de agilidade que ira retornar após resetar
set @Vitalidade = 15 -- Ponto padrão de vitalidade que ira retornar após resetar
set @Energia = 32 -- Ponto padrão de energia que ira retornar após resetar
FROM Character
JOIN MEMB_STAT ON Character.AccountID=MEMB_STAT.memb___id COLLATE Latin1_General_CS_AS
JOIN MEMB_INFO ON Character.AccountID=MEMB_INFO.memb___id COLLATE Latin1_General_CS_AS
WHERE cLevel > (@MaxLevel - 1)
AND Money > (@ZenReq - 1)
AND MEMB_STAT.ConnectStat = 0
AND MEMB_INFO.vip = 0
AND Resets >= 50
AND Resets <= 100
-- Definindo valor das variaveis (Configure conforme necessário)
-- Contas não VIP
set @MaxLevel = 399 -- Level ao qual poderá resetar
set @PontosReset = 500 -- Pontos que ganhará por reset (Pontos vezes Resets)
set @ZenReq = 0 -- Zen requerido para resetar
set @Forca = 25 -- Ponto padrão de força que ira retornar após resetar
set @Agilidade = 30 -- Ponto padrão de agilidade que ira retornar após resetar
set @Vitalidade = 15 -- Ponto padrão de vitalidade que ira retornar após resetar
set @Energia = 32 -- Ponto padrão de energia que ira retornar após resetar
FROM Character
JOIN MEMB_STAT ON Character.AccountID=MEMB_STAT.memb___id COLLATE Latin1_General_CS_AS
JOIN MEMB_INFO ON Character.AccountID=MEMB_INFO.memb___id COLLATE Latin1_General_CS_AS
WHERE cLevel > (@MaxLevel - 1)
AND Money > (@ZenReq - 1)
AND MEMB_STAT.ConnectStat = 0
AND MEMB_INFO.vip = 0
AND Resets >= 101
AND Resets <= 200
-- Definindo valor das variaveis (Configure conforme necessário)
-- Contas não VIP
set @MaxLevel = 399 -- Level ao qual poderá resetar
set @PontosReset = 300 -- Pontos que ganhará por reset (Pontos vezes Resets)
set @ZenReq = 0 -- Zen requerido para resetar
set @Forca = 25 -- Ponto padrão de força que ira retornar após resetar
set @Agilidade = 30 -- Ponto padrão de agilidade que ira retornar após resetar
set @Vitalidade = 15 -- Ponto padrão de vitalidade que ira retornar após resetar
set @Energia = 32 -- Ponto padrão de energia que ira retornar após resetar
FROM Character
JOIN MEMB_STAT ON Character.AccountID=MEMB_STAT.memb___id COLLATE Latin1_General_CS_AS
JOIN MEMB_INFO ON Character.AccountID=MEMB_INFO.memb___id COLLATE Latin1_General_CS_AS
WHERE cLevel > (@MaxLevel - 1)
AND Money > (@ZenReq - 1)
AND MEMB_STAT.ConnectStat = 0
AND MEMB_INFO.vip = 0
AND Resets >= 201
AND Resets <= 9000
--Sistema Anti-GM Ilegal
- Primeiramente tem que ser cria uma coluna em character.
| Permisao | int | 4 | desmarcado | default value 0 |
- Depois disso toda vez que você criar um novo GM , você terá que dar permissao para ele , e tambem dar essa permissao para todos GM's atuais , atraves dessa query.
UPDATE CHARACTER SET PERMISAO =1 WHERE NAME ='LogindoGM'
Oque essa query faz ?
Se alguem descobrir como se tornar GM , editar algo , blockear alguem, etc, se ele nao tiver como " Permissao =1 " ele será bloqueado
- Crie a seguinte Job:
Para Versões 97
UPDATE CHARACTER SET CTLCODE =1,
PERMISAO = 0
WHERE CTLCODE = 8
Versões Acima de 1.02
UPDATE CHARACTER SET CTLCODE =1,
PERMISAO = 0
WHERE CTLCODE = 32
- O ideal e por ela pra rodar de 1 em 1 minuto , mais pode causar lentidao em servidores com muitas contas, então configure a seu gosto.
- Lembrando que essa será a frequência que ira verificar se tem algum GM " ilegal "
--5 Tipos de VIP's Para Seu Servidor
- Com esta Job você consegue criar mais de 5 VIP's. Segue as JOB's:
set @MaxLevel = 400 -- Level ao qual poderá resetar
set @PontosReset = 200 -- Pontos que ganhará por reset
set @ZenReq = 50 -- Zen requerido para resetar
set @Forca = 20 -- Ponto padrão de for´a que ira retornar após
set @Agilidade = 20 -- Ponto padrão de agilidade que ira retornar
set @Vitalidade = 20 -- Ponto padrão de vitalidade que ira retornar
set @Energia = 20 -- Ponto padrão de energia que ira retornar após
set @MaxLevel = 400 -- Level ao qual poderá resetar
set @PontosReset = 200 -- Pontos que ganhará por reset
set @ZenReq = 50 -- Zen requerido para resetar
set @Forca = 20 -- Ponto padrão de for´a que ira retornar após
set @Agilidade = 20 -- Ponto padrão de agilidade que ira retornar
set @Vitalidade = 20 -- Ponto padrão de vitalidade que ira retornar
set @Energia = 20 -- Ponto padrão de energia que ira retornar após
set @MaxLevel = 400 -- Level ao qual poderá resetar
set @PontosReset = 200 -- Pontos que ganhará por reset (Pontos ve
set @ZenReq = 50 -- Zen requerido para resetar
set @Forca = 20 -- Ponto padrão de for´a que ira retornar após
set @Agilidade = 20 -- Ponto padrão de agilidade que ira retornar
set @Vitalidade = 20 -- Ponto padrão de vitalidade que ira retornar
set @Energia = 20 -- Ponto padrão de energia que ira retornar após
set @MaxLevel = 400 -- Level ao qual poderá resetar
set @PontosReset = 200 -- Pontos que ganhará por reset (Pontos ve
set @ZenReq = 50 -- Zen requerido para resetar
set @Forca = 20 -- Ponto padrão de for´a que ira retornar após
set @Agilidade = 20 -- Ponto padrão de agilidade que ira retornar
set @Vitalidade = 20 -- Ponto padrão de vitalidade que ira retornar
set @Energia = 20 -- Ponto padrão de energia que ira retornar após
set @MaxLevel = 400 -- Level ao qual poderá resetar
set @PontosReset = 200 -- Pontos que ganhará por reset (Pontos ve
set @ZenReq = 50 -- Zen requerido para resetar
set @Forca = 20 -- Ponto padrão de for´a que ira retornar após
set @Agilidade = 20 -- Ponto padrão de agilidade que ira retornar
set @Vitalidade = 20 -- Ponto padrão de vitalidade que ira retornar
set @Energia = 20 -- Ponto padrão de energia que ira retornar após
set @MaxLevel = 400 -- Level ao qual poderá resetar
set @PontosReset = 200 -- Pontos que ganhará por reset (Pontos ve
set @ZenReq = 50 -- Zen requerido para resetar
set @Forca = 20 -- Ponto padrão de for´a que ira retornar após
set @Agilidade = 20 -- Ponto padrão de agilidade que ira retornar
set @Vitalidade = 20 -- Ponto padrão de vitalidade que ira retornar
set @Energia = 20 -- Ponto padrão de energia que ira retornar após
FROM Character
JOIN MEMB_STAT ON Character.AccountID=MEMB_STAT.memb___id COLLATE
Latin1_General_CS_AS
JOIN MEMB_INFO ON Character.AccountID=MEMB_INFO.memb___id COLLATE
Latin1_General_CS_AS
WHERE cLevel > (@MaxLevel - 1)
AND Money > (@ZenReq - 1)
AND MEMB_STAT.ConnectStat = 0
AND MEMB_INFO.vip = 5
AND Resets <= 999999
--Query Para Premiar Tops Mensal MuSite Daldegam
DECLARE @username varchar(10);
DECLARE @count int;
SET @count = 0;
DECLARE C CURSOR FOR SELECT TOP 3 [username] FROM [webSite].[webRankingCharactersResetsMonth] ORDER BY [resetsmonth] DESC
OPEN C
FETCH NEXT FROM C INTO @username
WHILE @@FETCH_STATUS = 0
BEGIN
IF @count = 0
UPDATE [webCash] SET [amount]=[amount]+100 WHERE [username] = @username
ELSE
UPDATE [webCash] SET [amount]=[amount]+20 WHERE [username] = @username
SET @count = @count + 1;
FETCH NEXT FROM C INTO @username
END
CLOSE C
DEALLOCATE C
UPDATE [MuOnline].[Character] SET [resetsmonth] = 0 // Certifique-se de qual é sua table na character