-=Comunidad Fenix-Games=-
Registrate Para Ser Parte De Esta Gran Comunidad, No Te Lo Podes Perder.

Saludos Att: Staff Fenix-Games
Contacto:
Facebook: https://facebook.com/Matty.De.Newells
Msn: WaChiiTooH@hotmail.com
-=Comunidad Fenix-Games=-
Registrate Para Ser Parte De Esta Gran Comunidad, No Te Lo Podes Perder.

Saludos Att: Staff Fenix-Games
Contacto:
Facebook: https://facebook.com/Matty.De.Newells
Msn: WaChiiTooH@hotmail.com
-=Comunidad Fenix-Games=-
¿Quieres reaccionar a este mensaje? Regístrate en el foro con unos pocos clics o inicia sesión para continuar.

-=Comunidad Fenix-Games=-

La mejor comunidad gamer existente
 
Índice-CHAT-GaleríaÚltimas imágenesBuscarRegistrarseConectarse

Comparte | 
 

 (SQL) Anti dup 100 % funcional.

Ver el tema anterior Ver el tema siguiente Ir abajo 
AutorMensaje
AreePiola~
Novato
Novato


Signo chinoCerdo

Mensajes : 20

Fecha de inscripción : 13/09/2011

Edad : 28


(SQL) Anti dup 100 % funcional. Empty
MensajeTema: (SQL) Anti dup 100 % funcional.   (SQL) Anti dup 100 % funcional. EmptySá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:

(SQL) Anti dup 100 % funcional. 16k4yfb

Baúl bloqueado:
(SQL) Anti dup 100 % funcional. R2w3d4

Pj desconectándose:

(SQL) Anti dup 100 % funcional. 2m3rygk

Tabla qué contiene los logs:


(SQL) Anti dup 100 % funcional. X2mgk3

Descripción de los logs:

(SQL) Anti dup 100 % funcional. B52tzd

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.-
Volver arriba Ir abajo
 

(SQL) Anti dup 100 % funcional.

Ver el tema anterior Ver el tema siguiente Volver arriba 

 Temas similares

-
» Anti-Dup Sql 99b
» [Aporte] Anti Ataques DoS/SYN
Página 1 de 1.

Permisos de este foro:No puedes responder a temas en este foro.
-=Comunidad Fenix-Games=- :: Mu Online! :: Utilidades Mu Online-