Решение проблемы с крякозябрами в никах и причинах бана SourceBans.

Nikita Domres

Участник
Сообщения
12
Реакции
3
Решено на базе SourceBans 1.5.2F

Форумы моддеров и админов серверов 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: Проверено многократным баном самого себя, ник у меня ₥عρђíﻯ†σ, он всегда был кривым в сурсбанс нашего сервера.
 

Nikita Domres

Участник
Сообщения
12
Реакции
3
Nikita Domres, попробую сделать

Напишите, получилось или нет, интересно с работает на других версиях SB или нет :-D
На эту ерунду ушло 2 недели, проверил буквально все, а загвоздка была всего лишь в паре строк кода ))
 

komashchenko

Идиот
Сообщения
916
Реакции
2,569
Втулил в плагины которые использовали utf8 за день ни разу не вылезло крякозябр (в сб 1.5.1 тоже)
Оффтоп
 

Arthur Don

Участник
Сообщения
1,696
Реакции
256
Nikita Domres, сколько сидел думал но так и не понял, куда нужно прописать эту строку в плагине?
 

Tallanvor

НЕ ПИШУ я плагины!!! И не правлю! И ваще...
Сообщения
1,352
Реакции
554

Nikita Domres

Участник
Сообщения
12
Реакции
3
artushonok,

Подозреваю, что имелась ввиду строка 956


В любом случае, ничего более подходящее под данное условие не нашёл.

Только учтите что если у вас там написано Database вместо DB, тоесть Database = hndl;то и в строчке, которую мы вставляем дальше нужно прописать Database, а не DB:

if (GetFeatureStatus(FeatureType_Native, "SQL_SetCharset") == FeatureStatus_Available)
{
SQL_SetCharset(Database, "utf8");
}
 

Arthur Don

Участник
Сообщения
1,696
Реакции
256
Сделал в исходнике все как написано, теперь сервак падает часто, и в логах ошибки
L 09/02/2015 - 14:58:33: [SM] Native "SQL_FetchRow" reported: No current result set
L 09/02/2015 - 14:58:33: [SM] Displaying call stack trace for plugin "sourcebans.smx":
L 09/02/2015 - 14:58:33: [SM] [0] Line 1941, C:\Users\јртур\Desktop\scripting\sourcebans.sp::OverridesDone()
 

Вложения

  • sourcebans.rar
    15.1 КБ · Просмотры: 15

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #9
Сделал в исходнике все как написано, теперь сервак падает часто, и в логах ошибки
L 09/02/2015 - 14:58:33: [SM] Native "SQL_FetchRow" reported: No current result set
L 09/02/2015 - 14:58:33: [SM] Displaying call stack trace for plugin "sourcebans.smx":
L 09/02/2015 - 14:58:33: [SM] [0] Line 1941, C:\Users\јртур\Desktop\scripting\sourcebans.sp::OverridesDone()

На АМ нашел что эта ошибка из-за ошибки в синтаксисе запроса.
 

SaInT.P

Участник
Сообщения
1,268
Реакции
226
может кто скинуть скомпиленый плагин 1.4.9 соурсбанса с исправлеными крякозябрами, спасибо
 

SaInT.P

Участник
Сообщения
1,268
Реакции
226
Добавил, при попытке скомпилить выдает
sourcebans.sp(75) : error 021: symbol already defined: "Database"
sourcebans.sp(235) : warning 234: symbol "GetClientAuthString" is marked as depr ecated: Use GetClientAuthId

sourcebans.sp(318) : error 174: symbol 'Database' is a type and cannot be used a s a value
sourcebans.sp(331) : error 174: symbol 'Database' is a type and cannot be used a s a value
sourcebans.sp(348) : error 174: symbol 'Database' is a type and cannot be used a s a value
sourcebans.sp(355) : error 174: symbol 'Database' is a type and cannot be used a s a value
sourcebans.sp(509) : warning 234: symbol "GetClientAuthString" is marked as depr ecated: Use GetClientAuthId

sourcebans.sp(525) : error 174: symbol 'Database' is a type and cannot be used a s a value
sourcebans.sp(557) : warning 234: symbol "GetClientAuthString" is marked as depr ecated: Use GetClientAuthId

sourcebans.sp(574) : error 174: symbol 'Database' is a type and cannot be used a s a value
sourcebans.sp(631) : warning 234: symbol "GetClientAuthString" is marked as depr ecated: Use GetClientAuthId

sourcebans.sp(647) : error 174: symbol 'Database' is a type and cannot be used a s a value
sourcebans.sp(946) : error 174: symbol 'Database' is a type and cannot be used a s a value
sourcebans.sp(946) : warning 215: expression has no effect
sourcebans.sp(949) : error 017: undefined symbol "DB"
sourcebans.sp(954) : error 174: symbol 'Database' is a type and cannot be used a s a value
sourcebans.sp(970) : error 174: symbol 'Database' is a type and cannot be used a s a value
sourcebans.sp(1004) : error 174: symbol 'Database' is a type and cannot be used as a value
sourcebans.sp(1107) : error 174: symbol 'Database' is a type and cannot be used as a value
sourcebans.sp(1139) : error 174: symbol 'Database' is a type and cannot be used as a value
sourcebans.sp(1190) : error 174: symbol 'Database' is a type and cannot be used as a value
sourcebans.sp(1225) : error 174: symbol 'Database' is a type and cannot be used as a value
sourcebans.sp(1276) : error 174: symbol 'Database' is a type and cannot be used as a value
sourcebans.sp(1308) : error 174: symbol 'Database' is a type and cannot be used as a value
sourcebans.sp(1405) : error 174: symbol 'Database' is a type and cannot be used as a value
sourcebans.sp(1452) : error 174: symbol 'Database' is a type and cannot be used as a value
sourcebans.sp(1482) : warning 234: symbol "GetClientAuthString" is marked as dep recated: Use GetClientAuthId

sourcebans.sp(1490) : error 174: symbol 'Database' is a type and cannot be used as a value
sourcebans.sp(1506) : error 174: symbol 'Database' is a type and cannot be used as a value
sourcebans.sp(1748) : error 174: symbol 'Database' is a type and cannot be used as a value
sourcebans.sp(1804) : warning 234: symbol "GetClientAuthString" is marked as dep recated: Use GetClientAuthId

sourcebans.sp(2057) : warning 234: symbol "GetClientAuthString" is marked as dep recated: Use GetClientAuthId

sourcebans.sp(2065) : warning 234: symbol "GetClientAuthString" is marked as dep recated: Use GetClientAuthId

sourcebans.sp(2092) : error 174: symbol 'Database' is a type and cannot be used as a value
sourcebans.sp(2115) : error 174: symbol 'Database' is a type and cannot be used as a value

Compilation aborted.
Пофиксите чтоб компилился плиз
 

Вложения

  • sourcebans.zip
    14.5 КБ · Просмотры: 12

SaInT.P

Участник
Сообщения
1,268
Реакции
226
White Wolf, Спасибо, пашет норм теперь все)
 

graveworm

Участник
Сообщения
15
Реакции
3
Всем привет версия соурсбанс 1.4.11
проблема добавления бана через админку в нике и причине бана вместо русского отображается иероглифами.
это началось после обновления сурсмода с версии 1.7.3 +dev 5283 до версии
1.7.3 +dev 5290.

кто поможет разобраться в данной причине?
перечитал тему пробовал добавлять строки которые описаны но он находит ошибки и не компелит плагин. выкладываю исходник соурсбанса.
кто чем может помогите народ.

Еще заметил следующие, когда я добавляю бан из игры то причина бана отображается корректно на русском языке, а когда добавляет бан другой админ то у него в причине бана иероглифы. Вот такая вот странная ситуация.
 

Вложения

  • sourcebans.7z
    14.4 КБ · Просмотры: 7
Последнее редактирование:

Артур1992

Участник
Сообщения
1
Реакции
0
Только учтите что если у вас там написано Database вместо DB, тоесть Database = hndl;то и в строчке, которую мы вставляем дальше нужно прописать Database, а не DB:

if (GetFeatureStatus(FeatureType_Native, "SQL_SetCharset") == FeatureStatus_Available)
{
SQL_SetCharset(Database, "utf8");
}

помоги с сб 1,4,10
 

Вложения

  • sourcebans.sp
    72.9 КБ · Просмотры: 16

SAZONISCHE

Участник
Сообщения
405
Реакции
232
Давно знал про ету тему все ленился сам сказать!
Делал так, ищем кусок (SET NAMES \"UTF8\")

PHP:
    SQL_SetCharset(DB, "utf8"); + // Добавляем недостающий код и все
    decl String:query[1024];
    FormatEx(query, sizeof(query), "SET NAMES \"UTF8\"");
 
Последнее редактирование:
S

SDI

Ребят, выручайте пожалуйста. Не могу никак скомпилировать, вылезает такая же ошибка как и у человека под ником SaInT.P, который тоже писал с такой же ошибкой в этой теме.
 

Вложения

  • SourceBans 1.5.1.rar
    50.1 КБ · Просмотры: 12
Сверху Снизу