搜索
 找回密码
 加入

80%~90%成功率查复制的方法(只在1299及1311上测试过)

ctgwglzc 2009-7-25 16:01:45 1578
  1. CREATE TABLE ITEM_DECODED(

  2. strUserID char(21) NULL DEFAULT ('-'),

  3. strAccountID char(21) NULL DEFAULT ('-'),

  4. Name varchar(50),

  5. dwID int NULL,

  6. strSerial int NULL,

  7. Durability int NULL,

  8. StackSize smallint NULL,

  9. ii [int] NULL
复制代码
  1. CREATE TABLE DUPERS_LOGGED(

  2. strUserID varchar(50) NULL DEFAULT ('-'),

  3. strAccountID varchar(21) NULL DEFAULT ('-'),

  4. Name char(50) NULL,

  5. dwID int NULL,

  6. strSerial int NULL,

  7. time smalldatetime NULL DEFAULT (getdate()),

  8. ii smallint NULL

  9. )
复制代码
  1. set ANSI_NULLS ON

  2. set QUOTED_IDENTIFIER ON

  3. go

  4. CREATE PROCEDURE [dbo].[decode_all_items_1299]

  5. --By cherry killingzones.com

  6. AS

  7. declare @StrUserID char(21)

  8. truncate table dupers_logged

  9. truncate table item_decoded

  10. DECLARE Backup_Cursor CURSOR

  11. FOR

  12. SELECT struserID from userdata

  13. OPEN Backup_Cursor

  14. FETCH NEXT FROM Backup_Cursor INTO @StrUserID

  15. WHILE @@FETCH_STATUS = 0

  16. BEGIN

  17. DECLARE @row int, @i int, @count int, @dwid int, @type varbinary(4), @StackSize int, @strSerial int, @name char(50)

  18. SET @i = 1

  19. set @name = ''

  20. WHILE @i < 401

  21. BEGIN

  22. SELECT @dwid = cast(cast(substring(cast(substring(strItem, @i,4) as varbinary(4)), 4, 1)+substring(cast(substring(strItem, @i,4) as varbinary(4)), 3, 1)+substring(cast(substring(strItem, @i,4) as varbinary(4)), 2, 1)+substring(cast(substring(strItem, @i,4) as varbinary(4)), 1, 1) as varbinary(4)) as int),

  23. @strSerial = cast(cast(substring(cast(substring(strSerial, @i,4) as varbinary(4)), 4, 1)+substring(cast(substring(strSerial, @i,4) as varbinary(4)), 3, 1)+substring(cast(substring(strSerial, @i,4) as varbinary(4)), 2, 1)+substring(cast(substring(strSerial, @i,4) as varbinary(4)), 1, 1) as varbinary(4)) as int),

  24. @type = cast(substring(strItem, @i+4, 2) as varbinary(2)),

  25. @StackSize = cast(cast(cast( substring(strItem, @i+7, 1) as varbinary(1))+cast(substring(strItem, @i+6, 1) as varbinary(1)) as varbinary(2)) as smallint)

  26. FROM USERDATA

  27. WHERE strUserID = @StrUserID

  28. select @name = strname from item where num = @dwid

  29. IF @dwid <> 0

  30. INSERT INTO ITEM_DECODED (strUserID, Name, dwid, strSerial, Durability, StackSize, ii)

  31. VALUES (@StrUserId, @Name, @dwid, @strSerial, @type, @StackSize, (@i-1) / 8)

  32. SET @i = @i + 8

  33. END

  34. FETCH NEXT FROM Backup_Cursor INTO @StrUserID

  35. END

  36. CLOSE Backup_Cursor

  37. DEALLOCATE Backup_Cursor

  38. exec decode_all_items_inn_1299
复制代码

5 回复

ctgwglzc
2009-7-24 20:38:14
楼主
点击查看详情
  1. set ANSI_NULLS ON

  2. set QUOTED_IDENTIFIER ON

  3. go

  4. CREATE PROCEDURE [dbo].[decode_all_items_inn_1299]

  5. --By cherry killingzones.com

  6. AS

  7. declare @StrAccountID char(21)

  8. DECLARE Backup_Cursor CURSOR

  9. FOR

  10. SELECT straccountID from warehouse

  11. OPEN Backup_Cursor

  12. FETCH NEXT FROM Backup_Cursor INTO @StrAccountID

  13. WHILE @@FETCH_STATUS = 0

  14. BEGIN

  15. DECLARE @row int, @i int, @count int, @dwid int, @type varbinary(4), @StackSize int, @strSerial int, @name char(50)

  16. SET @i = 1

  17. set @name = ''

  18. WHILE @i < 1601

  19. BEGIN

  20. SELECT @dwid = cast(cast(substring(cast(substring(WarehouseData, @i,4) as varbinary(4)), 4, 1)+substring(cast(substring(WarehouseData, @i,4) as varbinary(4)), 3, 1)+substring(cast(substring(WarehouseData, @i,4) as varbinary(4)), 2, 1)+substring(cast(substring(WarehouseData, @i,4) as varbinary(4)), 1, 1) as varbinary(4)) as int),

  21. @strSerial = cast(cast(substring(cast(substring(strSerial, @i,4) as varbinary(4)), 4, 1)+substring(cast(substring(strSerial, @i,4) as varbinary(4)), 3, 1)+substring(cast(substring(strSerial, @i,4) as varbinary(4)), 2, 1)+substring(cast(substring(strSerial, @i,4) as varbinary(4)), 1, 1) as varbinary(4)) as int),

  22. @type = cast(substring(WarehouseData, @i+4, 2) as varbinary(2)),

  23. @StackSize = cast(cast(cast( substring(WarehouseData, @i+7, 1) as varbinary(1))+cast(substring(WarehouseData, @i+6, 1) as varbinary(1)) as varbinary(2)) as smallint)

  24. FROM WAREHOUSE

  25. WHERE StrAccountID = @StrAccountID

  26. select @name = strname from item where num = @dwid

  27. IF @dwid <> 0

  28. INSERT INTO ITEM_DECODED (straccountID, Name, dwid, strSerial, Durability, StackSize, ii)

  29. VALUES (@StrAccountId, @Name, @dwid, @strSerial, @type, @StackSize, (@i-1) / 8)

  30. SET @i = @i + 8

  31. END

  32. FETCH NEXT FROM Backup_Cursor INTO @StrAccountID

  33. END

  34. CLOSE Backup_Cursor

  35. DEALLOCATE Backup_Cursor

  36. exec wipe_decode_all_items_1299
复制代码
  1. set ANSI_NULLS ON

  2. set QUOTED_IDENTIFIER ON

  3. go

  4. CREATE PROCEDURE [dbo].[wipe_decode_all_items_1299]

  5. --By cherry killingzones.com

  6. AS

  7. declare @straccountid char(21), @struserid char(21), @strSerial bigint, @dwid int, @stacksize smallint, @ii smallint

  8. DECLARE Backup_Cursor CURSOR

  9. FOR

  10. SELECT straccountid, struserid, strserial, dwid, stacksize, ii from item_decoded

  11. OPEN Backup_Cursor

  12. FETCH NEXT FROM Backup_Cursor INTO @straccountid, @struserid, @strSerial, @dwid, @stacksize, @ii

  13. WHILE @@FETCH_STATUS = 0

  14. BEGIN

  15. declare @count int

  16. SELECT @count = COUNT(*) FROM ITEM_DECODED WHERE strSerial = @strSerial and dwid = @dwid

  17. IF @count > 1 and @strSerial != 0 and @dwid !=0

  18. BEGIN

  19. INSERT INTO DUPERS_LOGGED (straccountid,struserid,dwid,strserial,ii)

  20. VALUES (@straccountid,@struserid,@dwid,@strSerial,@ii)

  21. END

  22. FETCH NEXT FROM Backup_Cursor INTO @straccountid, @struserid, @strSerial, @dwid, @stacksize, @ii

  23. END

  24. CLOSE Backup_Cursor

  25. DEALLOCATE Backup_Cursor

  26. exec encode_all_items_1299
复制代码
ctgwglzc
2009-7-24 20:38:45
楼主
  1. set ANSI_NULLS ON

  2. set QUOTED_IDENTIFIER ON

  3. go

  4. CREATE procedure [dbo].[encode_all_items_1299]

  5. --by cherry killingzones.com

  6. AS

  7. DECLARE @strUserID char(21),@ii int

  8. DECLARE @strName varchar(50),@dwid int,@dur int,@StackSize smallint, @row int, @i int, @Cdwid varbinary(4), @cdur varchar(2), @cstack varchar(2)

  9. DECLARE Backup_Cursor1 CURSOR

  10. FOR

  11. SELECT struserid,ii from dupers_logged where struserid!='-'

  12. OPEN Backup_Cursor1

  13. FETCH NEXT FROM Backup_Cursor1 INTO @StrUserID,@ii

  14. WHILE @@FETCH_STATUS = 0

  15. BEGIN

  16. set @strName = ''

  17. set @dwid = 0

  18. set @dur = 0

  19. set @StackSize = 0

  20. set @i = @ii * 8 + 1

  21. select @row=count( * ) from item_decoded where struserid=@StrUserID and ii < @ii

  22. if @row=0

  23. begin

  24. Set @Cdwid = Substring(cast(@dwid as varbinary(4)), 4, 1) + Substring(cast(@dwid as varbinary(4)), 3, 1) + Substring(cast(@dwid as varbinary(4)), 2, 1) + Substring(cast(@dwid as varbinary(4)), 1, 1)

  25. Set @Cdur = cast(Substring(cast(@dur as varbinary(2)), 2, 1)+Substring(cast(@dur as varbinary(2)), 1, 1) as varchar(2))

  26. Set @Cstack = cast(Substring(cast(@StackSize as varbinary(2)), 2, 1)+Substring(cast(@StackSize as varbinary(2)), 1, 1) as varchar(2))

  27. update UserData set strItem = cast( substring(strItem, 1, @i-1) + cast(cast(@Cdwid as varchar(4)) + @Cdur + @Cstack as varchar(8)) + substring(strItem, @i+8, 401-@i) as binary(400)) where strUserID = @strUserID

  28. end

  29. if @row>0

  30. Begin

  31. Set @Cdwid = Substring(cast(@dwid as varbinary(4)), 4, 1) + Substring(cast(@dwid as varbinary(4)), 3, 1) + Substring(cast(@dwid as varbinary(4)), 2, 1) + Substring(cast(@dwid as varbinary(4)), 1, 1)

  32. Set @Cdur = cast(Substring(cast(@dur as varbinary(2)), 2, 1)+Substring(cast(@dur as varbinary(2)), 1, 1) as varchar(2))

  33. Set @Cstack = cast(Substring(cast(@StackSize as varbinary(2)), 2, 1)+Substring(cast(@StackSize as varbinary(2)), 1, 1) as varchar(2))

  34. update UserData set strItem = cast( substring(strItem, 1, @i-1) + cast(cast(@Cdwid as varchar(4)) + @Cdur + @Cstack as varchar(8)) + substring(strItem, @i+8, 401-@i) as binary(400)) where strUserID = @strUserID

  35. end

  36. FETCH NEXT FROM Backup_Cursor1 INTO @StrUserID,@ii

  37. END

  38. CLOSE Backup_Cursor1

  39. DEALLOCATE Backup_Cursor1

  40. exec encode_all_items_inn_1299
复制代码
  1. set ANSI_NULLS ON

  2. set QUOTED_IDENTIFIER ON

  3. go

  4. CREATE procedure [dbo].[encode_all_items_inn_1299]

  5. --by cherry killingzones.com

  6. AS

  7. DECLARE @strAccountID char(21),@ii int

  8. DECLARE @strName varchar(50),@dwid int,@dur int,@StackSize smallint, @row int, @i int, @Cdwid varbinary(4), @cdur varchar(2), @cstack varchar(2)

  9. DECLARE Backup_Cursor2 CURSOR

  10. FOR

  11. SELECT straccountid,ii from dupers_logged where straccountid!='-'

  12. OPEN Backup_Cursor2

  13. FETCH NEXT FROM Backup_Cursor2 INTO @strAccountID ,@ii

  14. WHILE @@FETCH_STATUS = 0

  15. BEGIN

  16. set @strName = ''

  17. set @dwid = 0

  18. set @dur = 0

  19. set @StackSize = 0

  20. set @i = @ii * 8 + 1

  21. select @row=count( * ) from item_decoded where straccountid=@strAccountID

  22. if @row>0

  23. begin

  24. Set @Cdwid = Substring(cast(@dwid as varbinary(4)), 4, 1) + Substring(cast(@dwid as varbinary(4)), 3, 1) + Substring(cast(@dwid as varbinary(4)), 2, 1) + Substring(cast(@dwid as varbinary(4)), 1, 1)

  25. Set @Cdur = cast(Substring(cast(@dur as varbinary(2)), 2, 1)+Substring(cast(@dur as varbinary(2)), 1, 1) as varchar(2))

  26. Set @Cstack = cast(Substring(cast(@StackSize as varbinary(2)), 2, 1)+Substring(cast(@StackSize as varbinary(2)), 1, 1) as varchar(2))

  27. update WareHouse set WareHouseData = cast( substring(WareHouseData, 1, @i-1) + cast(cast(@Cdwid as varchar(4)) + @Cdur + @Cstack as varchar(8)) + substring(WareHouseData, @i+8, 1601-@i) as binary(1600)) where strAccountID = @strAccountID

  28. end

  29. FETCH NEXT FROM Backup_Cursor2 INTO @strAccountID,@ii

  30. END

  31. CLOSE Backup_Cursor2

  32. DEALLOCATE Backup_Cursor2

  33. truncate table item_decoded

  34. truncate table dupers_logged
复制代码
ctgwglzc
2009-7-24 20:39:24
楼主
ow this will detect dupes if one item is in the character and the other/others are in the warehouse. Even across different users/accounts.

To run this all your need to do is this:
  1. exec decode_all_items_1299
复制代码
1111
2009-7-25 16:01:24
直接查询分析器?
1111
2009-7-25 16:01:45
都干什么用 有点中文提示就好了哈
高级模式
游客