Nikita Domres
Участник
- Сообщения
- 12
- Реакции
- 3
Решено на базе SourceBans 1.5.2F
Форумы моддеров и админов серверов Counter-Strike Source забиты вопросами о проблеме с отображением в SourceBans ников игроков, у которых в именах использованы спецсимволы. Иными словами: игрок получает бан на сервере, а в системе SourceBans его ник, если он русскоязычный или составлен из спецсимволов, отображается так называемыми крякозябрами.
Опытным путем удалось установить, что:
1. Ошибка при импорте банов из файла .cfg через веб-интерфейс:
В ошибке отображения ников НЕ виновата БД MySQL, так как по умолчанию сервер БД уже знает все спецсимволы. Проблема возникала в момент запроса системой SourceBans данных о игроке на основе STEAM ID, во время транзакции данных, в том числе и ника игрока возникала ошибка декодинга, вызванная функциями, указанными в файле скрипта system-functions.php в веб-части Source Bans.
Проблема решается закомментированием (или вырезкой) строк:
в разделе функции GetCommunityName
2. Ошибка отображения ника, когда бан происходит через админку в игре.
Здесь все несколько сложнее, проблема кроется уже в плагине sourcebans.smx. Решение подсказала новинка, так называемый плагин коммуникационных банов, с помощью которого блокируются микрофон или чат игроков. Если взглянуть на исходник плагина ком.банов, то там присутствует интересная функция, преписывающая базе данных кодировку UTF-8.
Интуитивным путем, мне удалось составить для плагина sourcebans.smx функцию, повторяющую процедуру, которая обеспечивает правильное кодирование ников в плагине sourcecomms. Необходимо взять исходник sourcebans.sp и добавить следующую строку после фрагмента DB = hndl;
Компилируем, добавляем плагин на сервер, перезапускаем его и все... Проблема века решена.
P.S: Проверено многократным баном самого себя, ник у меня ₥عρђíﻯ†σ, он всегда был кривым в сурсбанс нашего сервера.
Форумы моддеров и админов серверов Counter-Strike Source забиты вопросами о проблеме с отображением в SourceBans ников игроков, у которых в именах использованы спецсимволы. Иными словами: игрок получает бан на сервере, а в системе SourceBans его ник, если он русскоязычный или составлен из спецсимволов, отображается так называемыми крякозябрами.
Опытным путем удалось установить, что:
1. Ошибка при импорте банов из файла .cfg через веб-интерфейс:
В ошибке отображения ников НЕ виновата БД MySQL, так как по умолчанию сервер БД уже знает все спецсимволы. Проблема возникала в момент запроса системой SourceBans данных о игроке на основе STEAM ID, во время транзакции данных, в том числе и ника игрока возникала ошибка декодинга, вызванная функциями, указанными в файле скрипта system-functions.php в веб-части Source Bans.
Проблема решается закомментированием (или вырезкой) строк:
$raw = strip_31_ascii($raw);
$raw = utf8_encode($raw);
в разделе функции GetCommunityName
2. Ошибка отображения ника, когда бан происходит через админку в игре.
Здесь все несколько сложнее, проблема кроется уже в плагине sourcebans.smx. Решение подсказала новинка, так называемый плагин коммуникационных банов, с помощью которого блокируются микрофон или чат игроков. Если взглянуть на исходник плагина ком.банов, то там присутствует интересная функция, преписывающая базе данных кодировку UTF-8.
// Set character set to UTF-8 in the database
if (GetFeatureStatus(FeatureType_Native, "SQL_SetCharset") == FeatureStatus_Available)
{
SQL_SetCharset(g_hDatabase, "utf8");
}
Интуитивным путем, мне удалось составить для плагина sourcebans.smx функцию, повторяющую процедуру, которая обеспечивает правильное кодирование ников в плагине sourcecomms. Необходимо взять исходник sourcebans.sp и добавить следующую строку после фрагмента DB = hndl;
if (GetFeatureStatus(FeatureType_Native, "SQL_SetCharset") == FeatureStatus_Available)
{
SQL_SetCharset(DB, "utf8");
}
Компилируем, добавляем плагин на сервер, перезапускаем его и все... Проблема века решена.
P.S: Проверено многократным баном самого себя, ник у меня ₥عρђíﻯ†σ, он всегда был кривым в сурсбанс нашего сервера.