CREATE FUNCTION NameBlock(@name varchar(40))
RETURNS tinyint
AS
BEGIN
DECLARE @result tinyint, @x int
SET @result = 1
SET @x = 1
-- Check If Name Contains Illegal Characters First
WHILE (@x <= LEN(@name))
BEGIN
IF (SUBSTRING (@name, @x, 1) NOT LIKE '***91;0123456789a-zа-я***93;')
RETURN @result
SET @x = @x + 1
END
-- Then Check To Make Sure Its Not In Our Table
SELECT @result = CASE WHEN COUNT(*) = 0 THEN 0 ELSE 1 END FROM illegal_character_names WHERE @name LIKE partial_name
RETURN @result
END
После чего нам необходимо подправить соответствующую процедуру.
Выглядеть она должна следующим образом
PHP код:
USE ***91;RF_WORLD_NOVUS***93;
GO
/****** Object: StoredProcedure ***91;dbo***93;.***91;pInsert_Base***93; Script Date: 06/23/2011 14:01:54 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
/****** ***44060;***52404;: ***51200;***51109; ***54532;***47196;***49884;***51200; dbo.pInsert_Avator_Base ***49828;***53356;***47549;***53944; ***45216;***51676;: 2003-04-10 ***50724;***54980; 9:05:29 ******/
ALTER PROCEDURE ***91;dbo***93;.***91;pInsert_Base***93;
@name VARCHAR(17),
@class VARCHAR(17),
@accountserial int,
@account VARCHAR(17),
@slot int,
@race int,
@baseshape int
AS
Для того, чтобы нельзя было создавать определённые ники (скажем матные, или схожие с ГМскими) необходимо добавить ник в созданную ранее таблицу следующим запросом
PHP код:
INSERT INTO illegal_character_names VALUES('%ник%')
Для отключение возможности менять ник на запрещённый при помощи капсулы смены ника необходимо исправить соответствующую процедуру
PHP код:
USE ***91;RF_WORLD_NOVUS***93;
GO
/****** Object: StoredProcedure ***91;dbo***93;.***91;pUpdate_CharacterReName***93; Script Date: 06/23/2011 15:06:06 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE ***91;dbo***93;.***91;pUpdate_CharacterReName***93;
@name varchar(17),
@serial int
AS
IF (dbo.NameBlock(@name) = 0)
BEGIN UPDATE ***91;dbo***93;.***91;tbl_base***93;
SET name = @name
WHERE Serial = @serial
AND DCK = 0
end
Таким образом, запрещённые символы не будут записаны в базу и запрещённый ник продержится до первого релога персонажа
Для того, чтобы эти же правила распространялись на название гильдий, правим процедуру
PHP код:
USE ***91;RF_WORLD_NOVUS***93;
GO
/****** Object: StoredProcedure ***91;dbo***93;.***91;pInsert_Guild***93; Script Date: 06/23/2011 15:35:23 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
--
ALTER PROCEDURE ***91;dbo***93;.***91;pInsert_Guild***93;
@name varchar(17),
@race int
AS
IF (dbo.NameBlock(@name) = 0)
begin
insert into ***91;dbo***93;.***91;tbl_guild***93; ( id, race ) values( @name, @race )
end
Что в результате получится
1) пропускаться будут только символы 0 - 9 а - я a - z
2) нельзя будет использовать ник, который внесён в таблицу с запрещёнными никами.
P.S. цензор блочит сразу и большие и маленькие буквы
в случае ввода запрещённых символов и ников будет выводить сообщение об ошибке создание персонажа
USE [RF_WORLD_NOVUS]
GO
/****** Object: StoredProcedure [dbo].[pInsert_RenamePotionLog] Script Date: 06/23/2011 22:33:46 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER procedure [dbo].[pInsert_RenamePotionLog]
@Serial int,
@Name varchar(17)
as
IF (dbo.NameBlock(@name) = 0)
BEGIN
insert into [dbo].[tbl_RenamePotion_Log] ( [Serial], [OldName], [NewName] )
values ( @Serial, @Name, @Name )
end