Template Editato By Force Downs

Auto Mensagem

sábado, 21 de janeiro de 2012
  Auto Mensagem

 1° Abra seu Enterprise Manager
  2º Vá database, Muonline, Tables depois em AutoGMGG
  3º Clique com o botão direito do mouse e vá em Open Tables depois Return All Arows
  4º Clique em Return All Arows 
 5º Veja a foto como colocar as mensagens, o tempo e etc.
  6º Apois ter colocado as msg vai em um ponto de ! (esclamação) para da o RUN  7º Agora napasta     Game Server abra o arquivo MyGSFun  8º vai esta ServerID=0 mude para ServerID=1  9º em AutoGmGG=0 mude para AutoGmGG=1 10º Pronto já esta fucionando a auto mensagem

 Enjooy (:
Blockear Itens No Trade
Neste tutorial ensinaremos como blockear itens no trade em muservers (versões mais novas) que possuem a pasta SCFData.

Explicaremos exatamente como você pode estar desativando o comércio ilegal em seu server passando itens full (+13/+12/+11) pelo trade.

• Primeiro procure a pasta SCFData e depois abra o SCF_Itens e procure a linha abaixo que postei abaixo. Caso não tenha, adicione que não haverá problemas.
Código:
[ItemMoveLimit]
SCFItemTradeLimit=0
SCFItemSellLimit=0
SCFItemMixLimit=0
SCFItemPshopLimit=0
SCFItemPlusLimit=13
SCFExItemPlusLimit=14
SCFExItemOpLimit=4
SCFSetItemPlusLimit=14
SCFIsOpenErrorItemUpgrade=0
SCFErrorItemLevelCheck=14
SCFItemJinhuaLimit=0 ;//Default = 1 
• Depois de aplicar esse código não irá continuar passando itens full pelo trade.

SCFItemTradeLimit=0 ---> 0= Desativado

• Para os procedimentos começarem a funcionar, ao término deles você tem que dar um Restart em seu servidor.

Em Aida tem o Npc com a pedra Joel Stone.

- Código :
370 33 0 86 13 2 // Jeridon

• V
á nele com a pedra para adicionar o item rosa, más ao inves de colocar, você tira o opicional e depois tirando um opcional ele já transfere o item no trade.

- Depois use o mesmo NPC para adicionar o item " opcional ".

Solução para tirar os seguintes NPC's.
Código :
//369 33 0 80 14 3 // Osborne
//370 33 0 86 13 2 // Jeridon 
>


Enjooy (:


Auto Ban


• Vá em Iniciar >>Todos os Programas >> Microsoft SQL Server >> Query Analyzer

• Será aberto um recorrente que diz conectar ao SQL Server, em seguida entre com seu Loguim e Senha do SQL.

• Após entrar no Query analyzer irá abrir um grande espaço para inserir um texto, neste espaço cole o seguinte código:

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] [binary] (1) NOT NULL ,
[items_serial] [binary] (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

• Presione F5 e depois Ctrl+N.

• Irá abrir outra tela, nesta outra tela cole o seguinte código:
select * from AllItemsLog
select * from CopyLog
• Dê F5 e Ctrl+N novamente e mais uma vez irá abrir outra tela, cole o código abaixo:
select * from CopyLog
• Pressione F5 e está pronto, em seguida feche todas as janelas abertas salvando os "logs" aonde desejar.

Obs: O Sistema funciona apenas com os players Online. 

Enjooy (: 
Auto Reset:
1º Va em SLQ Server Enterprise Manager.
2º Va em Databases, Muonline e Tables.
3º Na tabela Character Click com botão direito, Design Table.
4º Va até o ultimo campo (collun name) escrito e crie um chamado Reset.
5º Colunname = Reset , DataType = int , Default value = 1 , salve e feche.
6º Agora em Management.
7º Va em SQL Server Agent.
8º Va em Jobs, e click com botão direito e NewJob.
9º Va em General coloque um nome como AutoReset.
10º Depois vai em Steps.
11º New em Steps em "name" coloque AutoReset tambem.
12º Va em Type deixe Transact-SQL Script (TSQL).
13º Em Database selecione MUOnline.
14º No Command coloque o codigo do reset desejado, escolhe eles abaixo:

[ Auto Reset Para Vip na table MEMB_INFO ]
-- =============================================
-- Reset não acumulativo (Pontos x Resets) + VIP
-- =============================================

--
-- Definindo as variaveis (Não mexer)
declare
@MaxLevel int,
@PontosReset int,
@ZenReq int,
@Forca int,
@Agilidade int,
@Vitalidade int,
@Energia int,
@MaxLevelVIP int,
@PontosResetVIP int,
@ZenReqVIP int,
@ForcaVIP int,
@AgilidadeVIP int,
@VitalidadeVIP int,
@EnergiaVIP int

-- Definindo valor das variaveis (Configure conforme necessário)
--
-- Contas não VIP
set @MaxLevel = 349 -- Level ao qual poderá resetar
set @PontosReset = 300 -- Pontos que ganhará por reset (Pontos vezes Resets)
set @ZenReq = 50000000 -- Zen requerido para resetar
set @Forca = 30 -- 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 = 30 -- Ponto padrão de vitalidade que ira retornar após resetar
set @Energia = 30 -- Ponto padrão de energia que ira retornar após resetar
-- Contas VIP
set @MaxLevelVIP = 299 -- Level ao qual poderá resetar
set @PontosResetVIP = 400 -- Pontos que ganhará por reset (Pontos vezes Resets)
set @ZenReqVIP = 20000000 -- Zen requerido para resetar
set @ForcaVIP = 100 -- Ponto padrão de força que ira retornar após resetar
set @AgilidadeVIP = 100 -- Ponto padrão de agilidade que ira retornar após resetar
set @VitalidadeVIP = 100 -- Ponto padrão de vitalidade que ira retornar após resetar
set @EnergiaVIP = 100 -- Ponto padrão de energia que ira retornar após resetar
-- Execução do comando SQL (Não mexer)
--
-- Contas não VIP
UPDATE Character
SET cLevel = 1,
Experience = 0,
LevelUpPoint = @PontosReset * (Resets + 1),
Strength = @Forca,
Dexterity = @Agilidade,
Vitality = @Vitalidade,
Energy = @Energia,
Money = Money - @ZenReq,
Resets = Resets + 1
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 <= 150
-- Contas VIP
UPDATE Character
SET cLevel = 1,
Experience = 0,
LevelUpPoint = @PontosResetVIP * (Resets + 1),
Strength = @ForcaVIP,
Dexterity = @AgilidadeVIP,
Vitality = @VitalidadeVIP,
Energy = @EnergiaVIP,
Money = Money - @ZenReqVIP,
Resets = Resets + 1
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 > (@MaxLevelVIP - 1)
AND Money > (@ZenReqVIP - 1)
AND MEMB_STAT.ConnectStat = 0
AND MEMB_INFO.vip = 1
AND Resets <= 1000

-------------------------------------------------------------------------------------------------------------
 [ Auto Reset Para Vip na table Character ]
   Auto Reset para GM's
UPDATE Character
SET clevel=('50'), Experience=('0'),Money=Money-('0'), Reset=Reset+1, Strength=('32500'), Dexterity=('26000'), Vitality=('32500'), Energy=('32500')
FROM Character join Memb_Stat on Character.Accountid=Memb_Stat.memb___id
collate Latin1_general_CI_AS
WHERE clevel>349 AND Vip = 8 AND Memb_Stat.ConnectStat = 0

   Auto Reset para Usuários Normais ( and Vip = 0 ) :Ganhando 350 pontos, Resetando lvl 350

UPDATE Character
SET clevel=('1'), Experience=('0'),Money=Money-('0'),LevelUpPoint=350+350*Reset, Reset=Reset+1,Strength=('30'), Dexterity=('30'), Vitality=('30'),Energy=('30')
FROM Character join Memb_Stat on Character.Accountid=Memb_Stat.memb___id
collate Latin1_general_CI_AS
WHERE clevel>349 AND Memb_Stat.ConnectStat = 0 and Vip = 0 and Money>('0')

   Auto Reset para Users Normais ( and Vip = 0 ) :Ganhando 350 pontos, Resetando lvl 350, Resetando Itens

UPDATE Character
SET clevel=('1'), Experience=('0'),Money=Money-('0'),LevelUpPoint=350+350*Reset, Reset=Reset+1,
Strength=('30'), Dexterity=('30'), Vitality=('30'),Energy=('30'), Inventory=null, MagicList=null
FROM Character join Memb_Stat on Character.Accountid=Memb_Stat.memb___id
collate Latin1_general_CI_AS
WHERE clevel>349 AND Memb_Stat.ConnectStat = 0 and Vip = 0 and Money>('0')

   Auto Reset para Usuários Vips ( and Vip = 1 ) : Ganhando 400 pontos, Resetando lvl 350

UPDATE Character
SET clevel=('1'), Experience=('0'),Money=Money-('0'),LevelUpPoint = 400+400*Reset, Reset=Reset+1, Strength=('50'), Dexterity=('50'), Vitality=('50'), Energy=('50')
FROM Character join Memb_Stat on Character.Accountid=Memb_Stat.memb___id
collate Latin1_general_CI_AS
WHERE clevel>349 AND Vip = 1 AND Memb_Stat.ConnectStat = 0

   Auto Reset para Qualquer Usuário Acumulativo : Resetando lvl 350 Acumulativo

UPDATE Character
SET clevel= ('1') , experience= ('0')
WHERE clevel>349

-------------------------------------------------------------------------------------------------------------

Mudando o Código:

LevelUpPoint = 300*Reset
Significa que os pontos por reset vão ser definidos assim:
300 multiplicado pelo numero de resets atuais.

Strength= ('20') , Dexterity= ('20') , Vitality= ('20') , Energy= ('20')
Isso são os atributos que o char recomeça, ou seja, esse char recomeçaria com 20 pontos em todos os atributos (skills).

WHERE clevel>349
Level de Reset ( deixe -1 do lvl desejado ), nesse ele resetaria no 350.

-------------------------------------------------------------------------------------------------------------

15º Depois clique em Parse e de OK.
16º Va para Schedules.
17º Em New Sechedule coloque tambem la AutoReset.
18º Depois clique em Change.
19º Na primeira parte selecione Daily e deixe em Every 1 day(s).
20º Depois selecione em baixo Occurs every e troque Hour(s) por Minute(s).
21º Duration selecione a data atual do dia e de ok.
22º Agora e so finalizar dando Aplicar e OK.
23º Pronto está feito AUTORESET.

24º Sempre de Start no SQL Server Agent, e deixe como auto start para facilitar.

Enjooy (:
AutoPK :
1º Va em SLQ Server Enterprise Manager.
2º Va em Management.
3º Va em SQL Server Agent.
4º Va em Jobs, e click com botão direito e NewJob.
5º Va em General coloque um nome como AutoPK.
6º Depois vai em Steps.
7º New em Steps em "name" coloque AutoPK tambem.
8º Va em Type deixe Transact-SQL Script (TSQL).
9º Em Database selecione MUOnline.
10ºNo Command coloque o seguinte codigo :


AutoPK - Pago 50 milhões
UPDATE Character
SET PkCount= ('0') , PkLevel= ('2') , PkTime= ('-100')
WHERE Money=('50000000')
AutoPK - Free
Citação:
UPDATE Character
SET PkCount= ('0') , PkLevel= ('2') , PkTime= ('-100')


11º Depois clique em Parse e de OK.
12º Va para Schedules.
13º Em New Sechedule coloque tambem la AutoPK.
14º Depois clique em Change.
15º Na primeira parte selecione Daily e deixe em Every 1 day(s).
16º Depois selecione em baixo Occurs every e troque Hour(s) por Minute(s).
17º Duration selecione a data atual do dia e de ok.

18º Agora e so finalizar dando Aplicar e OK.
19º Pronto está feito AUTOPK.

20º Sempre de Start no SQL Server Agent, e deixe como auto start para facilitar.

Enjooy (: 

Deletando contas inativas

terça-feira, 17 de janeiro de 2012
Deletando contas inativas

Esse Script irá deletar todas contas que ainda não possui personagens.

• Acesse seu SQL >> Query Analizer >> DataBase [DB] MuOnline
• Execute a seguinte Query:
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

• Para deletar as contas que estão a tantos dias sem connectar basta executar a seguinte query:
begin tran
delete memb_info
from
(
select memb___id from memb_stat where getdate()-DisConnectTM>365 --> (Número de dias que a conta está inativa)
) tbl
where memb_info.memb___id = tbl.memb___id collate database_default
commit 
Transferir Contas

Aprenda Aqui a fazer tranfência de acc:
1º Crie uma pasta chama Backup DB
2º Va no Microsoft SQL Server >>> Enterprise Manager >>> Data Bases
3º Selecione a Data Base MuOnline, click com botão direito
4º Va em Todas Tarefas >>> Backup DataBase
5º Em destination selecione a pasta que você crio
6º E de OK, ele vai cria um backup igual aos da db baks
7º Faça o mesmo com a DataBase Ranking
8º Agora quando você for transferiar as acc's para outro server é só você restaura normalmente com esses backups.

BY: ~~ConeCrew~~