留学之家留学DIY社区

首页 » 休闲频道 » 电脑网络 » 系统网络 » 完全防止复制的代码
venkatmba - 2008-5-17 10:34:00
完全防止复制的代码:      [原创]发布完全防止复制的代码~建意停服运行,前面发的代码不清楚的和复制代码时出错的部分都修改好了,大家复制代码时注意换行,有的地方发在论坛上时自动加入了换行符,请把它去掉否则有可能不正常DÔÓ&decYþ­ forum.pre-mbaclub.comˆ1PÓLÒhÿ¥*
      首先,大家研究的那种取消T键和D键以及分线防复制的思路都是不正确的,不过增加了复制的难度而以,不是真正的治根的方法。我的这种方法大部分源程序来源于别人写的,是谁写的我也不知道,转贴的人太多了。不过当时他没有能解决掉清除复制品和踢人下线的这两个问题,复制品照样可以转给别人,并且实时检测非常浪费内存,等于没有作用。先在你的memb_info 表中加入一个字段FZ,类型为int,默认值是0,用做记录复制次数DÔÓ&decYþ­ forum.pre-mbaclub.comˆ1PÓLÒhÿ¥*
        在autogmgg 表中加入一个字段gq,类型为int,默认值是0,用做清除过期的公告DÔÓ&decYþ­ forum.pre-mbaclub.comˆ1PÓLÒhÿ¥*
        原理:复制成功后自动改了仓库密码使用户无法打开仓库,并且自动记录并且发布到自动公告中去,在下线时自动清空仓库,超过三次自动封账号。DÔÓ&decYþ­ forum.pre-mbaclub.comˆ1PÓLÒhÿ¥*
      以前这种方法因为没办法及时把用户踢下线而无法正常使用,现在这种解决方法应当不存在了,我用了一个月服务器基本没有人敢复制了。前题是你已经清除掉了那些已经被复制过的物品,这个方法不会清除0编号的物品,对已经复制过的物品也无效果。DÔÓ&decYþ­ forum.pre-mbaclub.comˆ1PÓLÒhÿ¥*
        第一段,触发器,直接在查询分析器中对着你的数据表运行就可以了DÔÓ&decYþ­ forum.pre-mbaclub.comˆ1PÓLÒhÿ¥*
      --建立数据表DÔÓ&decYþ­ forum.pre-mbaclub.comˆ1PÓLÒhÿ¥*
      ifexists (select * from dbo.sysobjects where id =object_id(N'[dbo].[trg_CheckSameID]') and OBJECTPROPERTY(id,N'IsTrigger') = 1)DÔÓ&decYþ­ forum.pre-mbaclub.comˆ1PÓLÒhÿ¥*
        drop trigger [dbo].[trg_CheckSameID]DÔÓ&decYþ­ forum.pre-mbaclub.comˆ1PÓLÒhÿ¥*
        GODÔÓ&decYþ­ forum.pre-mbaclub.comˆ1PÓLÒhÿ¥*
      if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[AllItemsLog]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)DÔÓ&decYþ­ forum.pre-mbaclub.comˆ1PÓLÒhÿ¥*
        drop table [dbo].[AllItemsLog]DÔÓ&decYþ­ forum.pre-mbaclub.comˆ1PÓLÒhÿ¥*
        GODÔÓ&decYþ­ forum.pre-mbaclub.comˆ1PÓLÒhÿ¥*
      if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[CopyLog]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)DÔÓ&decYþ­ forum.pre-mbaclub.comˆ1PÓLÒhÿ¥*
        drop table [dbo].[CopyLog]DÔÓ&decYþ­ forum.pre-mbaclub.comˆ1PÓLÒhÿ¥*
        GODÔÓ&decYþ­ forum.pre-mbaclub.comˆ1PÓLÒhÿ¥*
      CREATE TABLE [dbo].[AllItemsLog] (DÔÓ&decYþ­ forum.pre-mbaclub.comˆ1PÓLÒhÿ¥*
        [items_id] [int] IDENTITY (1, 1) NOT NULL ,DÔÓ&decYþ­ forum.pre-mbaclub.comˆ1PÓLÒhÿ¥*
        [items_type] [binary] (1) NOT NULL ,DÔÓ&decYþ­ forum.pre-mbaclub.comˆ1PÓLÒhÿ¥*
        [items_serial] [binary] (4) NOT NULL ,DÔÓ&decYþ­ forum.pre-mbaclub.comˆ1PÓLÒhÿ¥*
        [items_acid] [varchar] (10) COLLATE Chinese_PRC_CI_AS NOT NULL DÔÓ&decYþ­ forum.pre-mbaclub.comˆ1PÓLÒhÿ¥*
        ) ON [PRIMARY]DÔÓ&decYþ­ forum.pre-mbaclub.comˆ1PÓLÒhÿ¥*
        GODÔÓ&decYþ­ forum.pre-mbaclub.comˆ1PÓLÒhÿ¥*
      CREATE TABLE [dbo].[CopyLog] (DÔÓ&decYþ­ forum.pre-mbaclub.comˆ1PÓLÒhÿ¥*
        [copy_id] [int] IDENTITY (1, 1) NOT NULL ,DÔÓ&decYþ­ forum.pre-mbaclub.comˆ1PÓLÒhÿ¥*
        [copy_acid] [varchar] (10) COLLATE Chinese_PRC_CI_AS NOT NULL ,DÔÓ&decYþ­ forum.pre-mbaclub.comˆ1PÓLÒhÿ¥*
        [copy_whdata] [binary] (1200) NOT NULL ,DÔÓ&decYþ­ forum.pre-mbaclub.comˆ1PÓLÒhÿ¥*
        [copy_date] [datetime] NOT NULL DÔÓ&decYþ­ forum.pre-mbaclub.comˆ1PÓLÒhÿ¥*
        ) ON [PRIMARY]DÔÓ&decYþ­ forum.pre-mbaclub.comˆ1PÓLÒhÿ¥*
        GODÔÓ&decYþ­ forum.pre-mbaclub.comˆ1PÓLÒhÿ¥*
      ALTER TABLE [dbo].[AllItemsLog] ADD DÔÓ&decYþ­ forum.pre-mbaclub.comˆ1PÓLÒhÿ¥*
        CONSTRAINT [DF_CT_ITEM_item] DEFAULT (0) FOR [items_type],DÔÓ&decYþ­ forum.pre-mbaclub.comˆ1PÓLÒhÿ¥*
        CONSTRAINT [DF_CT_ITEM_itemid] DEFAULT (0) FOR [items_serial],DÔÓ&decYþ­ forum.pre-mbaclub.comˆ1PÓLÒhÿ¥*
        CONSTRAINT [DF_CT_ITEM_itemrole] DEFAULT (0) FOR [items_acid]DÔÓ&decYþ­ forum.pre-mbaclub.comˆ1PÓLÒhÿ¥*
        GODÔÓ&decYþ­ forum.pre-mbaclub.comˆ1PÓLÒhÿ¥*
      CREATE INDEX [IX_CT_ITEM] ON [dbo].[AllItemsLog]([items_type], [items_serial]) ON [PRIMARY]DÔÓ&decYþ­ forum.pre-mbaclub.comˆ1PÓLÒhÿ¥*
        GODÔÓ&decYþ­ forum.pre-mbaclub.comˆ1PÓLÒhÿ¥*
      ALTER TABLE [dbo].[CopyLog] ADD DÔÓ&decYþ­ forum.pre-mbaclub.comˆ1PÓLÒhÿ¥*
        CONSTRAINT [DF_CopyLog_copy_date] DEFAULT (getdate()) FOR [copy_date]DÔÓ&decYþ­ forum.pre-mbaclub.comˆ1PÓLÒhÿ¥*
        GODÔÓ&decYþ­ forum.pre-mbaclub.comˆ1PÓLÒhÿ¥*
      SET QUOTED_IDENTIFIER ON DÔÓ&decYþ­ forum.pre-mbaclub.comˆ1PÓLÒhÿ¥*
        GODÔÓ&decYþ­ forum.pre-mbaclub.comˆ1PÓLÒhÿ¥*
        SET ANSI_NULLS ON DÔÓ&decYþ­ forum.pre-mbaclub.comˆ1PÓLÒhÿ¥*
        GODÔÓ&decYþ­ forum.pre-mbaclub.comˆ1PÓLÒhÿ¥*
      DÔÓ&decYþ­ forum.pre-mbaclub.comˆ1PÓLÒhÿ¥*
      --建触发器DÔÓ&decYþ­ forum.pre-mbaclub.comˆ1PÓLÒhÿ¥*
      DÔÓ&decYþ­ forum.pre-mbaclub.comˆ1PÓLÒhÿ¥*
      CREATE TRIGGER [dbo].[trg_CheckSameID] ON [dbo].[character]DÔÓ&decYþ­ forum.pre-mbaclub.comˆ1PÓLÒhÿ¥*
        FOR UPDATEDÔÓ&decYþ­ forum.pre-mbaclub.comˆ1PÓLÒhÿ¥*
        ASDÔÓ&decYþ­ forum.pre-mbaclub.comˆ1PÓLÒhÿ¥*
        BEGINDÔÓ&decYþ­ forum.pre-mbaclub.comˆ1PÓLÒhÿ¥*
        IF UPDATE(inventory)DÔÓ&decYþ­ forum.pre-mbaclub.comˆ1PÓLÒhÿ¥*
        BEGINDÔÓ&decYþ­ forum.pre-mbaclub.comˆ1PÓLÒhÿ¥*
        SET NOCOUNT ONDÔÓ&decYþ­ forum.pre-mbaclub.comˆ1PÓLÒhÿ¥*
        DECLAREDÔÓ&decYþ­ forum.pre-mbaclub.comˆ1PÓLÒhÿ¥*
        @wh_acid varchar(10),DÔÓ&decYþ­ forum.pre-mbaclub.comˆ1PÓLÒhÿ¥*
        @wh_data binary(1200),DÔÓ&decYþ­ forum.pre-mbaclub.comˆ1PÓLÒhÿ¥*
        @wh_type binary(1),DÔÓ&decYþ­ forum.pre-mbaclub.comˆ1PÓLÒhÿ¥*
        @wh_serial binary(4),DÔÓ&decYþ­ forum.pre-mbaclub.comˆ1PÓLÒhÿ¥*
        @cr_user varchar(10),DÔÓ&decYþ­ forum.pre-mbaclub.comˆ1PÓLÒhÿ¥*
        @cr_acid varchar(10),DÔÓ&decYþ­ forum.pre-mbaclub.comˆ1PÓLÒhÿ¥*
        @cr_data binary(760),DÔÓ&decYþ­ forum.pre-mbaclub.comˆ1PÓLÒhÿ¥*
        @cr_type binary(1),DÔÓ&decYþ­ forum.pre-mbaclub.comˆ1PÓLÒhÿ¥*
        @cr_serial binary(4),DÔÓ&decYþ­ forum.pre-mbaclub.comˆ1PÓLÒhÿ¥*
        @al_acid varchar(10),DÔÓ&decYþ­ forum.pre-mbaclub.comˆ1PÓLÒhÿ¥*
        @j int,DÔÓ&decYþ­ forum.pre-mbaclub.comˆ1PÓLÒhÿ¥*
        @k int,DÔÓ&decYþ­ forum.pre-mbaclub.comˆ1PÓLÒhÿ¥*
        @find bitDÔÓ&decYþ­ forum.pre-mbaclub.comˆ1PÓLÒhÿ¥*
        SELECT @cr_acid=i.accountid,DÔÓ&decYþ­ forum.pre-mbaclub.comˆ1PÓLÒhÿ¥*
        @cr_data=i.inventoryDÔÓ&decYþ­ forum.pre-mbaclub.comˆ1PÓLÒhÿ¥*
        FROM inserted iDÔÓ&decYþ­ forum.pre-mbaclub.comˆ1PÓLÒhÿ¥*
        SET @j=0DÔÓ&decYþ­ forum.pre-mbaclub.comˆ1PÓLÒhÿ¥*
        SET @find=0DÔÓ&decYþ­ forum.pre-mbaclub.comˆ1PÓLÒhÿ¥*
        WHILE @j<76 AND @cr_data IS NOT NULLDÔÓ&decYþ­ forum.pre-mbaclub.comˆ1PÓLÒhÿ¥*
        BEGINDÔÓ&decYþ­ forum.pre-mbaclub.comˆ1PÓLÒhÿ¥*
        SET @cr_type=SUBSTRING(@cr_data,@j*10+1,1)DÔÓ&decYþ­ forum.pre-mbaclub.comˆ1PÓLÒhÿ¥*
        SET @cr_serial=SUBSTRING(@cr_data,@j*10+4,4)DÔÓ&decYþ­ forum.pre-mbaclub.comˆ1PÓLÒhÿ¥*
        IF @cr_type<>0xFF AND @cr_serial<>0x00000000DÔÓ&decYþ­ forum.pre-mbaclub.comˆ1PÓLÒhÿ¥*
        BEGINDÔÓ&decYþ­ forum.pre-mbaclub.comˆ1PÓLÒhÿ¥*
        SELECT @al_acid=items_acid FROM allitemslog WHERE items_type=@cr_type AND items_serial=@cr_serialDÔÓ&decYþ­ forum.pre-mbaclub.comˆ1PÓLÒhÿ¥*
        --给物品加上新主人标识DÔÓ&decYþ­ forum.pre-mbaclub.comˆ1PÓLÒhÿ¥*
        IF @al_acid IS NULLDÔÓ&decYþ­ forum.pre-mbaclub.comˆ1PÓLÒhÿ¥*
        INSERT INTO allitemslog (items_type,items_serial,items_acid) VALUES (@cr_type,@cr_serial,@cr_acid)DÔÓ&decYþ­ forum.pre-mbaclub.comˆ1PÓLÒhÿ¥*
        ELSEDÔÓ&decYþ­ forum.pre-mbaclub.comˆ1PÓLÒhÿ¥*
        BEGINDÔÓ&decYþ­ forum.pre-mbaclub.comˆ1PÓLÒhÿ¥*
        UPDATE allitemslog SET items_acid=@cr_acid WHERE items_type=@cr_type AND items_serial=@cr_serialDÔÓ&decYþ­ forum.pre-mbaclub.comˆ1PÓLÒhÿ¥*
        --从旧主人仓库中查找是否还有同样ID物品DÔÓ&decYþ­ forum.pre-mbaclub.comˆ1PÓLÒhÿ¥*
        SELECT @wh_data=items FROM warehouse WHERE accountid=@al_acidDÔÓ&decYþ­ forum.pre-mbaclub.comˆ1PÓLÒhÿ¥*
        SET @k=0DÔÓ&decYþ­ forum.pre-mbaclub.comˆ1PÓLÒhÿ¥*
        WHILE @k<120 AND @wh_data IS NOT NULLDÔÓ&decYþ­ forum.pre-mbaclub.comˆ1PÓLÒhÿ¥*
        BEGINDÔÓ&decYþ­ forum.pre-mbaclub.comˆ1PÓLÒhÿ¥*
        SET @wh_type=SUBSTRING(@wh_data,@k*10+1,1)DÔÓ&decYþ­ forum.pre-mbaclub.comˆ1PÓLÒhÿ¥*
        SET @wh_serial=SUBSTRING(@wh_data,@k*10+4,4)DÔÓ&decYþ­ forum.pre-mbaclub.comˆ1PÓLÒhÿ¥*
        IF @wh_type=@cr_type AND @wh_serial=@cr_serialDÔÓ&decYþ­ forum.pre-mbaclub.comˆ1PÓLÒhÿ¥*
        SET @find=1DÔÓ&decYþ­ forum.pre-mbaclub.comˆ1PÓLÒhÿ¥*
        SET @k=@k+1DÔÓ&decYþ­ forum.pre-mbaclub.comˆ1PÓLÒhÿ¥*
        ENDDÔÓ&decYþ­ forum.pre-mbaclub.comˆ1PÓLÒhÿ¥*
        ENDDÔÓ&decYþ­ forum.pre-mbaclub.comˆ1PÓLÒhÿ¥*
        ENDDÔÓ&decYþ­ forum.pre-mbaclub.comˆ1PÓLÒhÿ¥*
        SET @j=@j+1DÔÓ&decYþ­ forum.pre-mbaclub.comˆ1PÓLÒhÿ¥*
        ENDDÔÓ&decYþ­ forum.pre-mbaclub.comˆ1PÓLÒhÿ¥*
        --发现就给仓库上锁DÔÓ&decYþ­ forum.pre-mbaclub.comˆ1PÓLÒhÿ¥*
        IF @find=1DÔÓ&decYþ­ forum.pre-mbaclub.comˆ1PÓLÒhÿ¥*
        BEGINDÔÓ&decYþ­ forum.pre-mbaclub.comˆ1PÓLÒhÿ¥*
        INSERT INTO copylog (copy_whdata,copy_acid,copy_date) VALUES (@wh_data,@al_acid,getdate())DÔÓ&decYþ­ forum.pre-mbaclub.comˆ1PÓLÒhÿ¥*
        update memb_info set fz=fz+1 where memb___id= @al_acidDÔÓ&decYþ­ forum.pre-mbaclub.comˆ1PÓLÒhÿ¥*
        --注意这里的PW=多少改成自已才知道的4位数字密码DÔÓ&decYþ­ forum.pre-mbaclub.comˆ1PÓLÒhÿ¥*
        update warehouse set pw=5555 WHERE accountid=@al_acidDÔÓ&decYþ­ forum.pre-mbaclub.comˆ1PÓLÒhÿ¥*
      --修改仓库密码第一次发的有问题这里多了一行,现在改好了DÔÓ&decYþ­ forum.pre-mbaclub.comˆ1PÓLÒhÿ¥*
      INSERTINTO autogmgg(Valid,SvrID,Type,BeginTM,EndTM,DispJG,WorkMINU,LoopMINU,Notice,gq)values(1,0,0,getdate(),getdate()+2,15,15,15,@al_acid+'在'+convert(varchar(10),getdate(),111)+''+convert(varchar(10),getdate(),8)+'进行了复制行为,已经被记录,并且被自动清空仓库,超过三次自动删除此账号',1)DÔÓ&decYþ­ forum.pre-mbaclub.comˆ1PÓLÒhÿ¥*
        ENDDÔÓ&decYþ­ forum.pre-mbaclub.comˆ1PÓLÒhÿ¥*
        SET NOCOUNT OFFDÔÓ&decYþ­ forum.pre-mbaclub.comˆ1PÓLÒhÿ¥*
        ENDDÔÓ&decYþ­ forum.pre-mbaclub.comˆ1PÓLÒhÿ¥*
        ENDDÔÓ&decYþ­ forum.pre-mbaclub.comˆ1PÓLÒhÿ¥*
      第二段。下线自动清空仓库,改回密码,打开企业管理器,选中你的数据表,选中存贮过程,选中WZ_DISCONNECT_MEMB,点右键选属性,就可以看见代码了,在DÔÓ&decYþ­ forum.pre-mbaclub.comˆ1PÓLÒhÿ¥*
      UPDATE MEMB_STATDÔÓ&decYþ­ forum.pre-mbaclub.comˆ1PÓLÒhÿ¥*
        这句代码下面加入DÔÓ&decYþ­ forum.pre-mbaclub.comˆ1PÓLÒhÿ¥*
        update memb_info set bloc_code=1 where memb___id=@uid and fz > 3DÔÓ&decYþ­ forum.pre-mbaclub.comˆ1PÓLÒhÿ¥*
        --超过三次被自动封好DÔÓ&decYþ­ forum.pre-mbaclub.comˆ1PÓLÒhÿ¥*
        update warehouse set items = null , pw=0 WHERE accountid= @uid and pw=5555DÔÓ&decYþ­ forum.pre-mbaclub.comˆ1PÓLÒhÿ¥*
        --这里是你上面设置的那个密码5555,把它改成只有你知道的,要和上面一样才行DÔÓ&decYþ­ forum.pre-mbaclub.comˆ1PÓLÒhÿ¥*
      第三段,清除过期的公告,和第二段的加入方法一样DÔÓ&decYþ­ forum.pre-mbaclub.comˆ1PÓLÒhÿ¥*
        在这个存贮过程MyGSFun_SBKEND,中加入,加在这句下面"set @ec=0"DÔÓ&decYþ­ forum.pre-mbaclub.comˆ1PÓLÒhÿ¥*
        --自动删除过期的复制品广告DÔÓ&decYþ­ forum.pre-mbaclub.comˆ1PÓLÒhÿ¥*
        delete from autogmgg where gq=1 and getdate()-BeginTM>1DÔÓ&decYþ­ forum.pre-mbaclub.comˆ1PÓLÒhÿ¥*
        --删除结束后面的那个1表示删除过期一天的复制公告,如果为2表明公告二天。DÔÓ&decYþ­ forum.pre-mbaclub.comˆ1PÓLÒhÿ¥*
1
查看完整版本: 完全防止复制的代码