Team BlueWater Game Online Tutorial's
Bine ati venit la Team-BlueWater!!Tutorial's 4 all Games!

Script Anti-Dupe !

View previous topic View next topic Go down

Script Anti-Dupe !

Post  m4s4cru on Tue Aug 02, 2011 12:56 pm

Acest script sterge toate itemele dupate !
Il bagati in Query Analyzer , ii dati execute , si gata !
De acum incolo toate iteme care vor fi dupate , se vor sterge !
Code:
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_name] [varchar] (15) COLLATE Chinese_PRC_CI_AS NOT NULL ,
   [copy_type] [binary] (1) ,
   [copy_serial] [binary] (4) ,
   [copy_item] [binary] (16) ,
   [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
 
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

GO
SET QUOTED_IDENTIFIER OFF
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_data binary(1920),
         @wh_type binary(1),
         @wh_serial binary(4),
         @wh_item binary(16),
         @cr_acid varchar(10),
         @cr_char varchar(15),
         @cr_data binary(760),
         @cr_type binary(1),
         @cr_serial binary(4),
         @cr_item binary(16),
         @al_acid varchar(10),
         @j int,
         @k int,
         @warehouse_length int,
         @find bit

         -- Selecting information about inserted object
         SELECT @cr_acid=i.accountid, @cr_data=i.inventory ,@cr_char=i.name FROM inserted i
         SELECT @wh_data=items FROM warehouse WHERE accountid=@cr_acid 

         -- Length of the warehouse in binary
         SET @warehouse_length=1920
         
         SET @j=0
         SET @find=0
         WHILE @j<76 AND @cr_data IS NOT NULL
         BEGIN
            SET @cr_type=SUBSTRING(@cr_data,@j*16+1,1)
            SET @cr_serial=SUBSTRING(@cr_data,@j*16+4,4)
            SET @cr_item=SUBSTRING(@cr_data,@j*16+1,16)
            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
                  
                  SET @k=0
                  WHILE @k<120 AND @wh_data IS NOT NULL
                  BEGIN
                     SET @wh_type=SUBSTRING(@wh_data,@k*16+1,1)
                     SET @wh_serial=SUBSTRING(@wh_data,@k*16+4,4)
                     SET @wh_item=SUBSTRING(@wh_data,@k*16+1,16)
                     IF @wh_type=@cr_type AND @wh_serial=@cr_serial
                     BEGIN
                        SET @find=1
                        -- Insert dupe record in to the log (item with serial)
                        INSERT INTO copylog (copy_type,copy_serial,copy_item,copy_acid,copy_name,copy_date) VALUES (@cr_type,@cr_serial,@cr_item,@al_acid,@cr_char,getdate())
                        SET @wh_data=SUBSTRING(@wh_data,1,@k*16)+0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF+SUBSTRING(@wh_data,((@k+1)*16+1),@warehouse_length-(((@k+1)*16)))
                     END
                     SET @k=@k+1
                  END
               END
            END
            SET @j=@j+1
         END
         
         IF @find=1
         BEGIN
            -- Update warehouse, delete dupe
            UPDATE warehouse SET items=@wh_data where accountid=@cr_acid

            -- This is where u can add more punishment like ban or lock characters
            -- Block character that has dupes on him [if you feel like it]
            -- UPDATE Character SET CtlCode=1 WHERE name=@cr_char
         END
         SET NOCOUNT OFF
      END
   END

GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO

Credits : DaRKav
avatar
m4s4cru
Admin
Admin

Mesaje : 172
Data de inscriere : 2011-07-29
Varsta : 26

View user profile

Back to top Go down

View previous topic View next topic Back to top

- Similar topics

 
Permissions in this forum:
You cannot reply to topics in this forum