· 7 years ago · Oct 19, 2018, 10:48 AM
1use MuOnline
2if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[DupeCheck_CDC]') and OBJECTPROPERTY(id, N'IsTrigger') = 1)
3drop trigger [dbo].[DupeCheck_CDC]
4GO
5if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[DupeLog_CDC]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
6drop table [dbo].[DupeLog_CDC]
7GO
8CREATE TABLE [dbo].[DupeLog_CDC] (
9 [ID] [int] IDENTITY (1, 1) NOT NULL ,
10 [Cuenta] [varchar] (10) COLLATE Chinese_PRC_CI_AS NOT NULL ,
11 [Personaje] [varchar] (10) COLLATE Chinese_PRC_CI_AS NOT NULL ,
12 [ItemType] [binary] (1) ,
13 [ItemSerial] [binary] (4) ,
14 [Item] [binary] (10) ,
15 [FechaDelDUP] [smalldatetime] NOT NULL
16) ON [PRIMARY]
17GO
18ALTER TABLE [dbo].[DupeLog_CDC] WITH NOCHECK ADD
19CONSTRAINT [PK_DupeLog_CDC] PRIMARY KEY CLUSTERED
20(
21[ID]
22) ON [PRIMARY]
23GO
24ALTER TABLE [dbo].[DupeLog_CDC] ADD
25CONSTRAINT [DF_Table1_FechaDelDUP] DEFAULT (getdate()) FOR [FechaDelDUP]
26GO
27
28SET QUOTED_IDENTIFIER ON
29GO
30SET ANSI_NULLS ON
31GO
32CREATE TRIGGER [dbo].[DupeCheck_CDC] ON [dbo].[character]
33 FOR UPDATE
34 AS
35 BEGIN
36 IF UPDATE(inventory)
37 BEGIN
38 SET NOCOUNT ON
39 DECLARE
40 @Cuenta varchar(10),
41 @Personaje varchar(10),
42 @Inventario binary(760),
43 @Baul binary(1200),
44 @BaulItem binary(10),
45 @BaulTipo binary(1),
46 @BaulSerial binary(4),
47 @BaulClave smallint,
48 @InventarioItem binary(10),
49 @InventarioTipo binary(1),
50 @InventarioSerial binary(4),
51 @InventarioPJ int,
52 @BaulCuenta int,
53 @TamañoBaul int,
54 @Encontrar bit
55 --Seleccionamos la informacion del Personaje y el Baul.
56 SELECT @Cuenta=i.accountid,@Personaje=i.name,@Inventario=i.inventory FROM inserted i
57 SELECT @Baul=items FROM Warehouse WHERE AccountID=@Cuenta
58
59 --Tamaño del Baul
60 SET @TamañoBaul = 1200
61 SET @InventarioPJ=0
62 SET @Encontrar=0
63 WHILE @InventarioPJ<76 AND @Inventario IS NOT NULL
64 BEGIN
65 SET @InventarioTipo=SUBSTRING(@Inventario,@InventarioPJ*10+1,1)
66 SET @InventarioSerial=SUBSTRING(@Inventario,@InventarioPJ*10+4,4)
67 SET @InventarioItem=SUBSTRING(@Inventario,@InventarioPJ*10+1,10)
68 IF @InventarioTipo<>0xFF AND @InventarioSerial<>0x00000000
69 BEGIN
70 SET @BaulCuenta=0
71 WHILE @BaulCuenta<120 AND @Baul IS NOT NULL
72 BEGIN
73 SET @BaulTipo=SUBSTRING(@Baul,@BaulCuenta*10+1,1)
74 SET @BaulSerial=SUBSTRING(@Baul,@BaulCuenta*10+4,4)
75 SET @BaulItem=SUBSTRING(@Baul,@BaulCuenta*10+1,10)
76 IF @BaulTipo=@InventarioTipo AND @BaulSerial=@InventarioSerial
77 BEGIN
78 SET @Encontrar=1
79 INSERT INTO DupeLog_CDC (Cuenta,Personaje,Item,ItemType,ItemSerial) VALUES (@Cuenta,@Personaje,@InventarioItem,@InventarioTipo,@InventarioSerial)
80 SET @Baul=SUBSTRING(@Baul,1,@BaulCuenta*10)+0xFFFFFFFFFFFFFFFFFFFF+SUBSTRING(@Baul,((@BaulCuenta+1)*10+1),@TamañoBaul-(((@BaulCuenta+1)*10)))
81 SET @BaulClave=DATEPART(YYYY,GETDATE()) + DATEPART(MM,GETDATE()) + DATEPART(D,GETDATE())
82 END
83 SET @BaulCuenta=@BaulCuenta+1
84 END
85 END
86 SET @InventarioPJ=@InventarioPJ+1
87 END
88 IF @Encontrar=1
89 BEGIN
90 --A diferencia de todos los scripts, este solamente borra el item Dupeado y bloquea el baul de aquella cuenta que dupea.
91 UPDATE Warehouse SET Items=@Baul,pw=@BaulClave WHERE (AccountID=@Cuenta)
92 --En esta seccion si quieres puedes agregar algun castigo (como ban de todos los personajes)
93 --UPDATE [Character] SET CtlCode=1 WHERE AccountID=@Cuenta
94 END
95 SET NOCOUNT OFF
96 END
97 END
98GO
99SET QUOTED_IDENTIFIER OFF
100GO
101SET ANSI_NULLS ON
102GO
103select * from DupeLog_CDC