Блог admin

2014.03.31 admin, rfonline

Запрещаем нежелательные символы и слова в никах и названиях гильдий

Итак, часто можно было увидеть вопросы, как запретить скобки в никах. Ниже опишу один из способов + цензор ников в придачу ;)

начнём

Для начала создадим таблицу

Use RF_WORLD_NOVUS
CREATE TABLE illegal_character_names (partial_name varchar(30))

Далее создаём функцию

CREATE FUNCTION NameBlock(@name varchar(40))
RETURNS tinyint
AS
BEGIN
DECLARE @result tinyint, @x int
SET @result = 1
SET @x = 1
WHILE (@x <= LEN(@name))
BEGIN
IF (SUBSTRING (@name, @x, 1) NOT LIKE '[0123456789a-zа-я]')
RETURN @result
SET @x = @x + 1
END
SELECT @result = CASE WHEN COUNT(*) = 0 THEN 0 ELSE 1 END FROM illegal_character_names WHERE @name LIKE partial_name
RETURN @result
END

После чего нам необходимо подправить соответствующую процедуру. Выглядеть она должна следующим образом

USE [RF_WORLD_NOVUS]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[pInsert_Base]
@name VARCHAR(17),
@class VARCHAR(17),
@accountserial int,
@account VARCHAR(17),
@slot int,
@race int,
@baseshape int
AS
IF (dbo.NameBlock(@name) = 0)
BEGIN
INSERT [dbo].[tbl_base]
(
Name, AccountSerial, Account, Slot, Race, Class, BaseShape
)
VALUES
(
@name, @accountserial, @account, @slot, @race, @class, @baseshape
)
END

Для того, чтобы нельзя было создавать определённые ники (скажем матные, или схожие с ГМскими) необходимо добавить ник в созданную ранее таблицу следующим запросом

INSERT INTO illegal_character_names VALUES('%ник%')

Для отключение возможности менять ник на запрещённый при помощи капсулы смены ника необходимо исправить соответствующую процедуру

USE [RF_WORLD_NOVUS]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[pUpdate_CharacterReName]
@name varchar(17),
@serial int
AS
IF (dbo.NameBlock(@name) = 0)
BEGIN UPDATE [dbo].[tbl_base]
SET name = @name
WHERE Serial = @serial
AND DCK = 0
end

закрываем лог

USE [RF_WORLD_NOVUS]
GO
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

Таким образом, запрещённые символы не будут записаны в базу и запрещённый ник продержится до первого релога персонажа

Для того, чтобы эти же правила распространялись на название гильдий, правим процедуру

USE [RF_WORLD_NOVUS]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[pInsert_Guild]
@name varchar(17),
@race int
AS
IF (dbo.NameBlock(@name) = 0)
begin
insert into [dbo].[tbl_guild] ( id, race ) values( @name, @race )
end

Что в результате получится

  1. пропускаться будут только символы 0 — 9 а — я a — z
  2. нельзя будет использовать ник, который внесён в таблицу с запрещёнными никами.

P.S. цензор НЕ чувствителен к регистру

в случае ввода запрещённых символов и ников будет выводить сообщение об ошибке создание персонажа

Спасибо за внимание.

Тестировалось на 2.2.3

©DENNOR