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