[Release] AntiDupe Script Update

hrisiz

Active Member
Joined
Feb 3, 2010
Messages
429
Reaction score
81
така ето един лек Update на Antidupe system-a в файловете на DarkMaster beta 25 :)
просто пуснете този код в SQL Analizer(сложил съм го в PHP таг за да не заема много място)
PHP:
USE [MuOnline]
GO

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

SET ANSI_PADDING ON
GO

CREATE TABLE [dbo].[Banned_log](
	[IP] [varchar](15) NOT NULL,
	[Reason] [varchar](100) NOT NULL,
	[number] [bigint] NOT NULL
) ON [PRIMARY]

GO

SET ANSI_PADDING OFF
GO

ALTER TABLE [dbo].[Banned_log] ADD  DEFAULT ((0)) FOR [number]
GO

USE [MuOnline]
GO

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER 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
Declare @IP nvarchar(15);
Declare @all_accs Table(number int IDENTITY(1,1),acc char(10))
Declare @accs_count int;
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
Set @IP = (Select IP From MEMB_STAT Where memb___id=@al_acid)
Insert Into @all_accs Select memb___id From MEMB_STAT Where IP=@IP
SET @accs_count = (Select Max(number) From @all_accs)
while (@accs_count > 0)
BEGIN
	Declare @next char(10);
	SET @next = (Select acc From @all_accs Where number = @accs_count)
	Update MEMB_INFO Set bloc_code = 1 Where memb___id=@next
	SET @accs_count = @accs_count -1
END
Declare @check int
SET @check = (Select Count(*) From Banned_log Where IP=@IP AND Reason='Dupe')
if (@check>0)
BEGIN
	Update Banned_Log Set number = number + 1 Where IP=@IP AND Reason='Dupe'
END
else
BEGIN 
	Insert Into Banned_log values(@IP,'Dupe',0)
END
Update warehouse Set pw=4917 Where AccountID=@al_acid
END
SET NOCOUNT OFF
END
END

Ето едно PHP с което ще виждате IP-тата,причината за бана и броя на това което са правили(в случая дупили, но ако имате и други подобни скриптове можете да им задавате причини и да им записва отделен брой):)

PHP:
<table>
<tr><th>IP</th><th>Reason</th><th>Count</th></tr>
<?php
	$row = mssql_query("Select * From Banned_log");
	for($i = 0; $i < mssql_num_rows(@row);$i++)
	{
		$rows = mssql_fetch_row($row);
		echo"<tr><td>$rows[0]</td><td>$rows[1]</td><td>$rows[2]</td></tr>";		
	}
?>
</table>

не съм тествал, но мисля че работи не извади errors SQL-a правено е на SQL 2012, а разбрах че има разлика за Arrays и затова, ако има проблем кажете ще видя да го оправя :)

КАКВО НОВО:
- слага на съндъка парола за да им засече дупенето, ако ползват съндък
- банва всичките акаунти на този играч
- записва всичко в лесен и прост лог, но разбира се пази и стария понеже с стария можете да видите всички дупени items и кога са го правили :)(заема памет и затова, ако някой има добър shrink ще е добре, ако може да го сподели)

това беше най-доброто, което се сетих за момента :D ако се сетя за по добро ще го Update :)

а ето и едно SQL кодче(тоест го пускате през SQL Analizer) за да ги отблокирате точно дадено ацц или IP, ако решите :D

PHP:
Declare @IP varchar(15)
Declare @username varchar(10)

SET @IP='vuvedi IP-to v kavi4kite ako iska6 po IP ina4e prosto napi6i NULL'
SET @username='vuvedi username v kavi4kite ako iska6 po username ina4e prosto napi6i NULL'

if (@IP = 'NULL' AND @username <> 'NULL')
BEGIN
	Update MEMB_INFO Set bloc_code = 0 Where memb___id=@username
	Update Character Set CtlCode = NULL Where AccountID=@username
END
else if (@IP <> 'NULL' AND @username = 'NULL')
BEGIN
	Declare @all_accs Table(number int IDENTITY(1,1),acc char(10))
	Declare @accs_count int;
	Insert Into @all_accs Select memb___id From MEMB_STAT Where IP=@IP
	SET @accs_count = (Select Max(number) From @all_accs)
	while (@accs_count > 0)
	BEGIN
		Declare @next char(10);
		SET @next = (Select acc From @all_accs Where number = @accs_count)
		Update MEMB_INFO Set bloc_code = 0 Where memb___id=@next
		Update Character Set CtlCode = NULL Where AccountID=@next
		SET @accs_count = @accs_count -1
	END	
END
 
Last edited: