Seguridad parte III

Bienvenidos a un nuevo tutorial, hoy aprenderemos algo más sobre seguridad. Esta vez estará aplicada a evitar el dupeo en nuestro Servidor MuOnline.
Lo que vamos a utilizar es un script el cual detectará items dupeados y baneará las cuentas de quien los poseea.
Este script fue probado en versiones anteriores a las 0.99B, y es importante saber que para que funcione correctamente, nuestro servidor MuOnline debe tener activado el "Lector de serial de los items de nuestro server"

Seguridad muonline

1)Para aplicar estas querrys, lo que debemos hacer es ingresar al "Analizador de consultas", logearnos y seleccionar como base de datos la llamada "MuOnline"
Luego copian lo siguiente:

use muonline
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="and" br="br" cr_data="cr_data" is="is" not="not" null="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="and" br="br" is="is" not="not" null="null" wh_data="wh_data">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
2) El paso siguiente será presionar F5 y luego presionar "Ctrl+n"

3) Luego de presionar esta combinación de letras, se abrirá otro recuadro y deberán copiar lo siguiente:
use MuOnline
select * from AllItemsLog
select * from CopyLog
4) El paso siguiente sera presionar F5 y luego presionar "Ctrl+n"

5) Luego de presionar esta combinación de letras, se abrirá otro recuadro y deberán copiar lo siguiente:
use MuOnline
select * from CopyLog
6)Presionas F5 y listo, luego cierras las ventanas y guardas los cambios en donde tu quieras.
Con ese script el antidup ya estará funcionando.
AntiDup.sql [11 kb]

¿Necesitas ayuda? Visita www.iceventas.com y nosotros lo hacemos por ti.

Se han publicado un total de 9 comentarios en Mu Online Tutoriales :

21 de septiembre de 2013, 18:08

t encargo si me puedes dar una explicacion del principio nomas para entenderlo mejor
gracias y disculpa las molestias

21 de septiembre de 2013, 20:20

Anónimo : ¿Dime que necesitas entender o mejor dicho, que no has entendido?
Saludos

24 de septiembre de 2013, 4:06

HOLA AMIGO. CREE UN MU 99B VERCION VIEJA. Y E ECHO TODO LO Q DICE AHI. PERO NO ANDA. FINALICE SIN ERRORES Y TODO PERO NO ENTIENDO POR Q MOTIVOS NO ANDA. DEBO CERRAR AL SERVER Y VOLVERLO A PRENDER??

24 de septiembre de 2013, 10:26

Anónimo : A que llamas ¿No anda?
Saludos

16 de mayo de 2014, 2:40

holaaa probe todo lo q dijisteentre al serve y dupie para ver si funcionaba al costado me decia algo d item dupeado hablar con un gm algo asi y me desconectaba significa q funciona? el tema q no baneaba el pj..

16 de mayo de 2014, 19:41

Anónimo : ¿Qué versión MuOnline tienes?
Saludos

17 de mayo de 2014, 14:10

99b

18 de mayo de 2014, 20:57

Hola, necesito hacer esto en mi version 0.97 pero no entiendo lo del principio "Lector de seriales... como se sil otengo o no en mi version? No quiero meter mano sin entender eso.

Gracias!

19 de mayo de 2014, 10:37

Anónimo : Como dice la guia, es para versiones anteriores a la 0.99b, segun lo que comentas en tu caso no es necesario.

Jhonny Alvarez : Lo puedes ver en el archivo comonserver.cfg
Saludos

Publicar un comentario en la entrada