AreePiola~ Novato
Mensajes : 20
Fecha de inscripción : 13/09/2011
Edad : 28
| Tema: (SQL) Anti dup 100 % funcional. Sáb Sep 17, 2011 5:39 pm | |
| Bueno ya que la mayoría tiene problemas con el antidup que anda circulando que banea a cualquier pj, se me dio por aportar este que tenia yo, que es mucho mejor que el otro, paso a dar las características: Banea al pj que dupea. Bloquea su baul. Deja un log en una tabla llamada DupesDetected, que te registra, que cuenta, que pj, en que espacio del baúl, y a que horario y que día dupeo la persona. Desconecta al user que haya dupeado.Dejo algunas imágenes Pj Banned:Baúl bloqueado:Pj desconectándose: Tabla qué contiene los logs:Descripción de los logs:Y por último dejo el script: - Citación :
- --==============================================================
-- = -- Script creado por JefimxD, Fixeado por Virus~. = -- = --============================================================== if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[DupesDetected]') and OBJECTPROPERTY(id, N'IsUserTable') = 1) drop table [dbo].[DupesDetected] GO CREATE TABLE [dbo].[DupesDetected] ( [ID] [int] IDENTITY (1, 1) NOT NULL , [AccountID] [varchar] (10) COLLATE Chinese_PRC_CI_AS NOT NULL , [Name] [varchar] (10) COLLATE Chinese_PRC_CI_AS NOT NULL , [ITEM_TYPE] [binary] (1) NOT NULL , [ITEM_SERIAL] [binary] (4) NOT NULL , [INV_POSITION] [smallint] NOT NULL , [WH_POSITION] [smallint] NOT NULL , [TIMESTAMP] [smalldatetime] NOT NULL ) ON [PRIMARY] GO ALTER TABLE [dbo].[DupesDetected] WITH NOCHECK ADD CONSTRAINT [PK_DupesDetected] PRIMARY KEY CLUSTERED ( [ID] ) ON [PRIMARY] GO ALTER TABLE [dbo].[DupesDetected] ADD CONSTRAINT [DF_Table1_TIMESTAMP] DEFAULT (getdate()) FOR [TIMESTAMP] GO CREATE TRIGGER [dbo].[DUPEFINDER] ON [dbo].[character] FOR UPDATE AS IF UPDATE(inventory) BEGIN SET NOCOUNT ON DECLARE @CHARNAME varchar(10), @ACCOUNT_ID varchar(10), @INV binary(760), @ITEM_TYPE binary(1), @ITEM_SERIAL binary(4), @WAREHOUSE binary(1200), @j smallint, @k smallint, @PWOLD smallint, @PWNEW smallint --TOMAMOS EL INVENTARIO Y LOS DATOS DEL USUARIO SELECT @ACCOUNT_ID=accountid,@CHARNAME=Name,@INV=inventory FROM inserted SET @j=0 --ITEM POR ITEM WHILE (@j<76) AND (@INV IS NOT NULL) BEGIN --TOMAMOS EL TIPO Y EL SERIAL DEL ITEM SET @ITEM_TYPE=SUBSTRING(@INV,@j*10+1,1) SET @ITEM_SERIAL=SUBSTRING(@INV,@j*10+4,4) --SI EL TIPO ES VÁLIDO Y EL SERIAL NO ES "0" IF @ITEM_TYPE<>0xFF AND @ITEM_SERIAL<>0x00000000 BEGIN --SI NO TENEMOS EL WAREHOUSE DATA LO OBTENEMOS (ESTO SUCEDERÁ UNA SOLA VEZ) IF (@WAREHOUSE IS NULL) BEGIN SELECT @WAREHOUSE=items, @PWOLD=pw FROM warehouse WHERE accountid=@ACCOUNT_ID END --POR CADA SLOT EN EL BAULT SET @k=0 WHILE (@k<120) AND (@WAREHOUSE IS NOT NULL) BEGIN --SI EL TIPO Y SERIAL COINCIDEN ENTONCES IF (SUBSTRING(@WAREHOUSE,@k*10+1,1)=@ITEM_TYPE) AND (SUBSTRING(@WAREHOUSE,@k*10+4,4)=@ITEM_SERIAL) BEGIN --GUARDAMOS EL ITEM EN EL LOG INSERT INTO DupesDetected (AccountID,Name,ITEM_TYPE,ITEM_SERIAL,INV_POSITION,WH_POSITION) VALUES (@ACCOUNT_ID,@CHARNAME,@ITEM_TYPE,@ITEM_SERIAL,@j,@k) --DESCONECTAMOS AL USUARIO UPDATE MEMB__STAT SET CONNECTSTAT=0 WHERE ACCOUNTID=@ACCOUNT_ID --BLOQUEAMOS EL BAULT --OBTENEMOS EL NUEVO LOCK CODE SET @PWNEW = DATEPART(YYYY,GETDATE()) + DATEPART(MM,GETDATE()) + DATEPART(D,GETDATE()) --BLOQUEAMOS EL BAULT UPDATE WAREHOUSE SET PW=@PWNEW, LASTPW=@PWOLD WHERE (ACCOUNTID=@ACCOUNT_ID) --BANEAMOS TODOS LOS PJS DE LA CUENTA UPDATE [CHARACTER] SET CTLCODE=1 WHERE ACCOUNTID=@ACCOUNT_ID END --AVANZAMOS UNO EN EL CONTADOR SET @k=@k+1 END END SET @j=@j+1 END SET NOCOUNT ON END --================================ --Créditos: === --JefimxD=: Por el script base.=== --Virus~: Fixearlo y Aportarlo.=== --================================ La sentencia se ejecuta en el analizador de consultas con la DB MuOnline seleccionada(Por favor correr el script una sola vez, ya que si lo corren dos veces les va a decir que el parámetro 'DUPEFINDER' ya se encuentra en la db, pero es común, significa que se ejecuto correctamente). Espero que les haya servido, saludos. Créditos: JefimxD: Por el script base. Virus~: Fixearlo y Aportarlo. Saludos.- |
|