Русское сообщество по скриптингу

Не хочет отображать русские символы

Все вопросы по скриптингу для AMXX, помощь в редактировании плагинов.

Модераторы: Subb98, liFe iS GoOD

Правила форума
1. Запрещено материться и оскорблять других участников форума.
2. Запрещен флуд, оффтоп, дабл постинг во всех разделах форума, кроме раздела "Болтовня".
3. Запрещено взламывать сайт/форум или наносить любой вред проекту.
4. Запрещено рекламировать другие ресурсы.
5. Запрещено создавать темы без информативного названия. Название темы должно отображать ее смысл.

В данном разделе форума разрешено создавать темы, касающие только скриптинга для AMX Mod X.

Правила при создании новой темы:
1. При вставке кода плагина необходимо использовать тег [code=php].
2. Любые изображения должны быть загружены, как вложения к вашему сообщению.
3. При описании проблемы или запросе на помощь в редактировании плагина обязательно выкладывайте исходник sma плагина.

Не хочет отображать русские символы

Сообщение simplyDavchik » 11 фев 2018, 16:32

Я сделал что-то типа префиксов для jb мода, вот отрывки кода
Код: Выделить всё

new const g_Library
[] = {"/addons/amxmodx/configs/JBE_Prefix.ini"};

new szAccessUser[33], szInfoPlayerPrefix[33];

public client_connect(id)
{
    szAccessUser[id] = false;
    szInfoPlayerPrefix[id] = false;
    set_task(0.5, "CheckPlayerInfo", id);
}

public client_infochanged(id)
{
    szAccessUser[id] = false;
    szInfoPlayerPrefix[id] = false;
    set_task(0.5, "CheckPlayerInfo", id);
}

public CheckPlayerInfo(id)
{
    
    new szInfo
[256], szName[32], szInfoUser[32], szInfoPrefix[64], iNum;
    
    if 
(!is_user_connected(id))
        return 0;
        
    get_user_name
(id, szName, charsmax(szName));
    
    for
(new iLine = 0; read_file(g_Library[1], iLine, szInfo, charsmax(szInfo), iNum); iLine++) 
    
{
        if(iNum && szInfo[0] != ';')
        {
            parse(szInfo, szInfoUser, charsmax( szInfoUser ),
            szInfoPrefix, charsmax(szInfoPrefix)
            );

            if (equal(szName, szInfoUser))
            {
                copy(szInfoPlayerPrefix[id], charsmax(szInfoPlayerPrefix), szInfoPrefix);
                szAccessUser[id] = true;
                break;
            }
        }
    }
    return 1;
}

Код: Выделить всё
public ct_message_format(id)
{
    new iFlags = get_user_flags(id);
    new szDart[64], szSmotr[64], szCreat[64], szElite[64], szSuper[64], szAdmin[64], szVip[64], szPrefix[64];
    new iName[33]; get_user_name(id, iName, charsmax(iName));
    new iAuth[33]; get_user_authid(id, iAuth, charsmax(iAuth));
    if(szAccessUser[id]) formatex(szPrefix, charsmax(szPrefix), "^x01[^x04%L^x01][^x04%s^x01]", id, g_szRankName[g_iLevel[id]], szInfoPlayerPrefix[id]);
    formatex(szElite, charsmax(szElite), "^x01[^x04%L^x01][^x04Элитный админ^x01]", id, g_szRankName[g_iLevel[id]]);
    formatex(szSuper, charsmax(szSuper), "^x01[^x04%L^x01][^x04Супер Админ^x01]", id, g_szRankName[g_iLevel[id]]);
    formatex(szAdmin, charsmax(szAdmin), "^x01[^x04%L^x01][^x04Админ^x01]", id, g_szRankName[g_iLevel[id]]);
    formatex(szVip, charsmax(szVip), "^x01[^x04%L^x01][^x04Вип^x01]", id, g_szRankName[g_iLevel[id]]);
    formatex(szName, charsmax(szName), "^x01[^x04%L^x01][^x04Игрок^x01]", id, g_szRankName[g_iLevel[id]]);
    if(szAccessUser[id]) return ct_add_to_msg(CT_MSGPOS_PREFIX, szPrefix);
    if(iFlags & ADMIN_LEVEL_A) return ct_add_to_msg(CT_MSGPOS_PREFIX, szDart);
    if(iFlags & ADMIN_LEVEL_C) return ct_add_to_msg(CT_MSGPOS_PREFIX, szSmotr);
    if(iFlags & ADMIN_RCON) return ct_add_to_msg(CT_MSGPOS_PREFIX, szCreat);
    if(iFlags & ADMIN_LEVEL_E) return ct_add_to_msg(CT_MSGPOS_PREFIX, szElite);
    if(iFlags & ADMIN_VOTE) return ct_add_to_msg(CT_MSGPOS_PREFIX, szSuper);
    if(iFlags & ADMIN_BAN) return ct_add_to_msg(CT_MSGPOS_PREFIX, szAdmin);
    if(iFlags & ADMIN_LEVEL_H) return ct_add_to_msg(CT_MSGPOS_PREFIX, szVip);
    if(g_iUserTeam[id] == 1 || g_iUserTeam[id] == 2) return ct_add_to_msg(CT_MSGPOS_PREFIX, szName);
    return PLUGIN_HANDLED;
}


На скринах видно что с английскими символами префикс отображается, а с русскими просто отступ

Добавлено спустя 7 минут 10 секунд:
Ах да, JBE_Prefix.ini в формате UTF-8 без BOM
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Даже если цель не достижима, попробовать стоит.
Аватара пользователя
simplyDavchik
 
Сообщения: 132
Зарегистрирован: 08 апр 2017, 23:28
Откуда: Латвия
Благодарил (а): 15 раз.
Поблагодарили: 0 раз.
Опыт программирования: Около года
Языки программирования: Java
C++
C#
Pawn

Re: Не хочет отображать русские символы

Сообщение Hilarious » 11 фев 2018, 16:48

А если попробовать увеличить размер массивов, содержащих русские символы?
В матрице :-[
Аватара пользователя
Hilarious
 
Сообщения: 69
Зарегистрирован: 07 фев 2018, 08:46
Благодарил (а): 6 раз.
Поблагодарили: 29 раз.

Re: Не хочет отображать русские символы

Сообщение simplyDavchik » 11 фев 2018, 18:02

Hilarious писал(а):А если попробовать увеличить размер массивов, содержащих русские символы?

Неа, все тоже самое
Даже если цель не достижима, попробовать стоит.
Аватара пользователя
simplyDavchik
 
Сообщения: 132
Зарегистрирован: 08 апр 2017, 23:28
Откуда: Латвия
Благодарил (а): 15 раз.
Поблагодарили: 0 раз.
Опыт программирования: Около года
Языки программирования: Java
C++
C#
Pawn

Re: Не хочет отображать русские символы

Сообщение MrJunior » 11 фев 2018, 18:13

Если не ошибаюсь - файл должен быть в кодировке UTF-8 без BOM.
Но мне не помогло, и я изобрел велосипед - использую:
"Игрок" = "Р?РіСЂРѕРє"

Весь код в каракулях, зато работает ¯\_(ツ)_/¯
Аватара пользователя
MrJunior
Скриптер
 
Сообщения: 146
Зарегистрирован: 21 сен 2016, 19:46
Откуда: localhost
Благодарил (а): 3 раз.
Поблагодарили: 31 раз.
Опыт программирования: Больше трех лет
Языки программирования: Pawn | Web | Lua

Re: Не хочет отображать русские символы

Сообщение simplyDavchik » 11 фев 2018, 18:16

MrJunior писал(а):Если не ошибаюсь - файл должен быть в кодировке UTF-8 без BOM.
Но мне не помогло, и я изобрел велосипед - использую:
"Игрок" = "Р?РіСЂРѕРє"

Весь код в каракулях, зато работает ¯\_(ツ)_/¯

Да вот у меня тоже он в UTF-8 без BOM однако не читает русские символы, можно кстати поподробней на счет каракулей? В .ini файле каракули прописывать вместо русских символов или где?
Даже если цель не достижима, попробовать стоит.
Аватара пользователя
simplyDavchik
 
Сообщения: 132
Зарегистрирован: 08 апр 2017, 23:28
Откуда: Латвия
Благодарил (а): 15 раз.
Поблагодарили: 0 раз.
Опыт программирования: Около года
Языки программирования: Java
C++
C#
Pawn

Re: Не хочет отображать русские символы

Сообщение MrJunior » 11 фев 2018, 18:26

Категорически не советую использовать, лучше подождать того, кто знает.

Ну, вот обычный пример:
Код: Выделить всё

server_print
("Р?РіСЂРѕРє Рђ СѓР±РёР» РёРіСЂРѕРєР° Р‘");
/*
Выведет в консоль сервера: "Игрок А убил игрока Б"
*/
 


Сами каракули можно получить в любом декодере кириллицы.

Или как я раньше переводил весь плагин сразу(где уже был русский текст):
Закрыл исходник(в amxmodx studio) -> Открыл его же, только с помощью Notepad++ -> Сменил кодировку на обычный UTF-8 и сохранил -> Открыл исходник в amxmodx studio -> Все русские символы заменены на каракули + в первую строку добавится пару символов - убрать нужно будет.
Аватара пользователя
MrJunior
Скриптер
 
Сообщения: 146
Зарегистрирован: 21 сен 2016, 19:46
Откуда: localhost
Благодарил (а): 3 раз.
Поблагодарили: 31 раз.
Опыт программирования: Больше трех лет
Языки программирования: Pawn | Web | Lua

Re: Не хочет отображать русские символы

Сообщение simplyDavchik » 11 фев 2018, 20:22

MrJunior писал(а):Категорически не советую использовать, лучше подождать того, кто знает.

Ну, вот обычный пример:
Код: Выделить всё

server_print
("Р?РіСЂРѕРє Рђ СѓР±РёР» РёРіСЂРѕРєР° Р‘");
/*
Выведет в консоль сервера: "Игрок А убил игрока Б"
*/


Сами каракули можно получить в любом декодере кириллицы.

Или как я раньше переводил весь плагин сразу(где уже был русский текст):
Закрыл исходник(в amxmodx studio) -> Открыл его же, только с помощью Notepad++ -> Сменил кодировку на обычный UTF-8 и сохранил -> Открыл исходник в amxmodx studio -> Все русские символы заменены на каракули + в первую строку добавится пару символов - убрать нужно будет.

Хорошо, спасибо, учту на будущее

Добавлено спустя 1 час 44 минуты 54 секунды:
Я уже даже по другому пробовал, вот код, взял из плагина lite translit и переделал слегка
Код: Выделить всё
public plugin_cfg()
{
    g_aData = ArrayCreate(DATA);

    new buff[256], fp = fopen("addons/amxmodx/configs/lt_prefixes.ini", "rt");
    if(!fp) return set_fail_state("File ^"addons/amxmodx/configs/lt_prefixes.ini^" not found");

    while(!feof(fp))
    {
        fgets(fp, buff, charsmax(buff));
        if(buff[0] && buff[0] != ';' && parse(buff, g_PlayerData[AUTH], charsmax(g_PlayerData[AUTH]), g_PlayerData[PREFIX], charsmax(g_PlayerData[PREFIX])))
            ArrayPushArray(g_aData, g_PlayerData);
    }
    return fclose(fp);
}

stock SearchClient(const id)
{
    for(new i; i < ArraySize(g_aData); i++)
    {
        static sName[32]; get_user_name(id, sName, charsmax(sName));
        if(!strcmp(g_PlayerData[AUTH], sName)) 
            return copy
(g_szPrefix[id], charsmax(g_szPrefix[]), g_PlayerData[PREFIX]);
    }
    return g_szPrefix[id][0] = 0;
}


Код: Выделить всё
public ct_message_format(id)
{
    new iFlags = get_user_flags(id);
    new szDart[64], szSmotr[64], szCreat[64], szElite[64], szSuper[64], szAdmin[64], szVip[64], szName[64], szPrefix[64];
    new iName[33]; get_user_name(id, iName, charsmax(iName));
    new iAuth[33]; get_user_authid(id, iAuth, charsmax(iAuth));
    if(g_szPrefix[id][0]) formatex(szPrefix, charsmax(szPrefix), "^x01[^x04%s^x01]", g_szPrefix[id]);
    formatex(szDart, charsmax(szDart), "^x01[^x04%L^x01][^x04Дарт Вейдер^x01]", id, g_szRankName[g_iLevel[id]]);
    formatex(szSmotr, charsmax(szSmotr), "^x01[^x04%L^x01][^x04Смотритель^x01]", id, g_szRankName[g_iLevel[id]]);
    formatex(szCreat, charsmax(szCreat), "^x01[^x04Батя сервера^x01]", id, g_szRankName[g_iLevel[id]]);
    formatex(szElite, charsmax(szElite), "^x01[^x04%L^x01][^x04Элитный админ^x01]", id, g_szRankName[g_iLevel[id]]);
    formatex(szSuper, charsmax(szSuper), "^x01[^x04%L^x01][^x04Супер Админ^x01]", id, g_szRankName[g_iLevel[id]]);
    formatex(szAdmin, charsmax(szAdmin), "^x01[^x04%L^x01][^x04Админ^x01]", id, g_szRankName[g_iLevel[id]]);
    formatex(szVip, charsmax(szVip), "^x01[^x04%L^x01][^x04Вип^x01]", id, g_szRankName[g_iLevel[id]]);
    formatex(szName, charsmax(szName), "^x01[^x04%L^x01][^x04Игрок^x01]", id, g_szRankName[g_iLevel[id]]);
    if(g_szPrefix[id][0]) return ct_add_to_msg(CT_MSGPOS_PREFIX, szPrefix);
    if(iFlags & ADMIN_LEVEL_A) return ct_add_to_msg(CT_MSGPOS_PREFIX, szDart);
    if(iFlags & ADMIN_LEVEL_C) return ct_add_to_msg(CT_MSGPOS_PREFIX, szSmotr);
    if(iFlags & ADMIN_RCON) return ct_add_to_msg(CT_MSGPOS_PREFIX, szCreat);
    if(iFlags & ADMIN_LEVEL_E) return ct_add_to_msg(CT_MSGPOS_PREFIX, szElite);
    if(iFlags & ADMIN_VOTE) return ct_add_to_msg(CT_MSGPOS_PREFIX, szSuper);
    if(iFlags & ADMIN_BAN) return ct_add_to_msg(CT_MSGPOS_PREFIX, szAdmin);
    if(iFlags & ADMIN_LEVEL_H) return ct_add_to_msg(CT_MSGPOS_PREFIX, szVip);
    if(g_iUserTeam[id] == 1 || g_iUserTeam[id] == 2) return ct_add_to_msg(CT_MSGPOS_PREFIX, szName);
    return PLUGIN_HANDLED;
}

P.S
Код: Выделить всё
stock SearchClient(const id
вызывается в client_connect
Даже если цель не достижима, попробовать стоит.
Аватара пользователя
simplyDavchik
 
Сообщения: 132
Зарегистрирован: 08 апр 2017, 23:28
Откуда: Латвия
Благодарил (а): 15 раз.
Поблагодарили: 0 раз.
Опыт программирования: Около года
Языки программирования: Java
C++
C#
Pawn

Re: Не хочет отображать русские символы

Сообщение simplyDavchik » 13 фев 2018, 00:15

Не поможет никто?(
Даже если цель не достижима, попробовать стоит.
Аватара пользователя
simplyDavchik
 
Сообщения: 132
Зарегистрирован: 08 апр 2017, 23:28
Откуда: Латвия
Благодарил (а): 15 раз.
Поблагодарили: 0 раз.
Опыт программирования: Около года
Языки программирования: Java
C++
C#
Pawn

Re: Не хочет отображать русские символы

Сообщение RevCrew » 13 фев 2018, 00:44

simplyDavchik, вы случайно не инклуд пишите? скиньте полный код плагина
Аватара пользователя
RevCrew
Скриптер
 
Сообщения: 1648
Зарегистрирован: 15 июл 2013, 20:45
Благодарил (а): 273 раз.
Поблагодарили: 357 раз.
Языки программирования: Unkown

Re: Не хочет отображать русские символы

Сообщение simplyDavchik » 13 фев 2018, 20:39

RevCrew писал(а):simplyDavchik, вы случайно не инклуд пишите? скиньте полный код плагина

Ну, там не плагин, я вшиваю в мод маднеса, но ладно, вот
Строки которые относятся к префиксам:
386-393
459
467
666
697-706
912-923
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Даже если цель не достижима, попробовать стоит.
Аватара пользователя
simplyDavchik
 
Сообщения: 132
Зарегистрирован: 08 апр 2017, 23:28
Откуда: Латвия
Благодарил (а): 15 раз.
Поблагодарили: 0 раз.
Опыт программирования: Около года
Языки программирования: Java
C++
C#
Pawn

След.

Вернуться в Скриптинг

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 12