[Release] Anti Dupe Ban

KR373N

Well-Known Member
Joined
May 18, 2008
Messages
1,943
Reaction score
446
PHP:
 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_whdata] [binary] (1200) NOT NULL ,
[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

SET QUOTED_IDENTIFIER ON
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_acid varchar(10),
@wh_data binary(1200),
@wh_type binary(1),
@wh_serial binary(4),
@cr_user varchar(10),
@cr_acid varchar(10),
@cr_data binary(760),
@cr_type binary(1),
@cr_serial binary(4),
@al_acid varchar(10),
@j int,
@k int,
@find bit
SELECT @cr_acid=i.accountid,
@cr_data=i.inventory
FROM inserted i
SET @j=0
SET @find=0
WHILE @j<76 AND @cr_data IS NOT NULL
BEGIN
SET @cr_type=SUBSTRING(@cr_data,@j*10+1,1)
SET @cr_serial=SUBSTRING(@cr_data,@j*10+4,4)
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

SELECT @wh_data=items FROM warehouse WHERE accountid=@al_acid
SET @k=0
WHILE @k<120 AND @wh_data IS NOT NULL
BEGIN
SET @wh_type=SUBSTRING(@wh_data,@k*10+1,1)
SET @wh_serial=SUBSTRING(@wh_data,@k*10+4,4)
IF @wh_type=@cr_type AND @wh_serial=@cr_serial
SET @find=1
SET @k=@k+1
END
END
END
SET @j=@j+1
END
IF @find=1
BEGIN
INSERT INTO copylog (copy_whdata,copy_acid,copy_date) VALUES (@wh_data,@al_acid,getdate())
-- this is wer u can add more punishment like ban or lock characters
UPDATE Character SET CtlCode=1 WHERE accountid=@al_acid
END
SET NOCOUNT OFF
END
END
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
DECLARE @al_acid char(50)
set @al_acid = 'ASUS'
UPDATE Character SET CtlCode=1 WHERE accountid=@al_acid
go
select * from AllItemsLog
select * from CopyLog


The Best SQL Script!!
 
Last edited:
За коя версия е ?
Има ли бъгове ?

#Няма ли да има лаг?
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]
всички итеми да се лагват в база данни ?
и после как се изкарва лога от там
?
 
Last edited:
  • Like
Reactions: imorala
за всички версий е няма бъг :)
 
  • Like
Reactions: imorala
да наистина,може ли и аз да попитам къде да сложа кода?
 
да наистина,може ли и аз да попитам къде да сложа кода?

Code:
use [B][COLOR="Red"]muonline[/COLOR][/B]
if exists(select * from dbo.sysobjects where type='p' and name='WZ_GetItemSerial')
drop procedure WZ_GetItemSerial
 
PHP:
 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_whdata] [binary] (1200) not null ,
[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

set quoted_identifier on
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_acid varchar(10),
@wh_data binary(1200),
@wh_type binary(1),
@wh_serial binary(4),
@cr_user varchar(10),
@cr_acid varchar(10),
@cr_data binary(760),
@cr_type binary(1),
@cr_serial binary(4),
@al_acid varchar(10),
@j int,
@k int,
@find bit
select @cr_acid=i.accountid,
@cr_data=i.inventory
from inserted i
set @j=0
set @find=0
while @j<76 and @cr_data is not null
begin
set @cr_type=substring(@cr_data,@j*10+1,1)
set @cr_serial=substring(@cr_data,@j*10+4,4)
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

select @wh_data=items from warehouse where accountid=@al_acid
set @k=0
while @k<120 and @wh_data is not null
begin
set @wh_type=substring(@wh_data,@k*10+1,1)
set @wh_serial=substring(@wh_data,@k*10+4,4)
if @wh_type=@cr_type and @wh_serial=@cr_serial
set @find=1
set @k=@k+1
end
end
end
set @j=@j+1
end
if @find=1
begin
insert into copylog (copy_whdata,copy_acid,copy_date) values (@wh_data,@al_acid,getdate())
-- this is wer u can add more punishment like ban or lock characters
update character set ctlcode=1 where accountid=@al_acid
end
set nocount off
end
end
go
set quoted_identifier off
go
set ansi_nulls on
go
declare @al_acid char(50)
set @al_acid = 'asus'
update character set ctlcode=1 where accountid=@al_acid
go
select * from allitemslog
select * from copylog


the best sql script!!


Каде се Добавя това ?
 
Може ли примир ?

Цъкаш на "Start" > All programs > Microsoft SQL Server > Query analizer > Пишеш си SQL Паролата > Влизаш > Цъкаш на MuOnline от ляво в колонката > Слагаш кода който е написан тук и после цъкаш на Зелената стрелка горе в средата ... и мисля, че това е всичко :)
 
Благодаря Отново ми помогна :):yes:
 
добро е но съм чувал че товари сървъра !!
 
Аз съм с подобен скрипт и малко лаги да ви кажа. Ама по добре малко да лаги от колкото секи да си дупи итеми.
 
Аз съм с подобен скрипт и малко лаги да ви кажа. Ама по добре малко да лаги от колкото секи да си дупи итеми.

Много лудо товари сървъра .... Няма ли как да се намали лага ?
 
най-добре ползвайте на SCF Dupe Finger v2.0
 
Много лудо товари сървъра .... Няма ли как да се намали лага ?
Къту си със слаба машина кво сакаш :d
 
Братле компа ми е 4 ГБ рам не мисля че съм със слаб комп :)
 
що си мисля че бачка само на 99б или се заблуждавам