.: Viciados MU :. O Melhor e mais antigo portal de MuOnline do Brasil. www.viciadosmu.com.br | Portal Mu Online, Tutoriais muonline, Criar Mu Online, Servidores, Downloads, Brasil, Game, MMORPG, xat de mu, Chat, scripts e programas mu.
Comandos
SQL - Comandos
úteis para query analyzer
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
season 17licensa morpheuswebmontar staff muyoutubers mu online2022 mu onlinebaixar forum muawayanti hackercorrigir mu onlineforum mu onlineSEO Mu Onlinedivulga turbonovo personagem mulmu server premiumconnect faildivulgar mu onlinemu server season 14lmu server mobilepremiar onlinescripts de mu onlinecomprar um servidor de mumu server premiumdiscord galera mumu novoseason 12launcher updateweb morpheus premiumcomo jogarmu server estavelweb mu season 17divugação de mucriar mu onlineMu Online 2022