Проблемы с отображением drawPanelText

BugMaker

Участник
Сообщения
10
Реакции
0
Недавно перевёл плагин на русский язык, но столкнулся с проблемой отображения (Всё в фото).
Если с первыми строчками более-менее понятно почему, то с последней непонятно вообще.
Вот код менюшки
public Handle:Menu_Initial (iCid)
{
new Handle:menu = CreatePanel();
decl String:stPanel[88]; //Пробовал разные размеры массива
SetPanelTitle(menu, "TITLE");

Format(stPanel, 70 /*... и разные размеры строчки, хотя смысл делать отличное от размера массива значение? sizeof(stPanel)?*/, "%t", "InitialMenuPanel1");
DrawPanelText(menu, stPanel);
Format(stPanel, 70, "%t", "InitialMenuPanel2");
DrawPanelText(menu, stPanel);
Format(stPanel, 70, "%t", "InitialMenuPanel3");
DrawPanelItem(menu, stPanel);
if (g_iRandomEnable==0)
DrawPanelItem(menu,"disabled", ITEMDRAW_NOTEXT);
else
{
Format(stPanel, 70, "%t", "InitialMenuPanel4");
DrawPanelText(menu, stPanel);
Format(stPanel, 70, "%t", "InitialMenuPanel5");
DrawPanelText(menu, stPanel);
Format(stPanel, 70, "%t", "InitialMenuPanel6");
DrawPanelItem(menu, stPanel);
}

Format(stPanel, 70, "%t", "InitialMenuPanel7");
DrawPanelText(menu, stPanel);
Format(stPanel, 70, "%t", "InitialMenuPanel8");
DrawPanelText(menu, stPanel);
Format(stPanel, 70, "%t", "InitialMenuPanel9");
DrawPanelText(menu, stPanel);
Format(stPanel, 70, "%t", "InitialMenuPanel10");
DrawPanelItem(menu, stPanel);
return menu;
}
 

Вложения

  • Новый точечный рисунок.bmp
    357.7 КБ · Просмотры: 42

Саша Шеин

Кому костылей?
Сообщения
1,697
Реакции
621
Сама по себе панель (меню) имеет ограничение по количеству символов. Также отдельно строки и заголовок имеют свои размеры.
 
Последнее редактирование:

BugMaker

Участник
Сообщения
10
Реакции
0
Я видел панели почти на весь экран Оффтоп
 

BugMaker

Участник
Сообщения
10
Реакции
0
Как-то так
 

Вложения

  • Bagged.bmp
    292.3 КБ · Просмотры: 23

Саша Шеин

Кому костылей?
Сообщения
1,697
Реакции
621
В здесь примерно 320 символов.

А здесь
Недавно перевёл плагин на русский язык, но столкнулся с проблемой отображения (Всё в фото).
Если с первыми строчками более-менее понятно почему, то с последней непонятно вообще.
Вот код менюшки
public Handle:Menu_Initial (iCid)
{
new Handle:menu = CreatePanel();
decl String:stPanel[88]; //Пробовал разные размеры массива
SetPanelTitle(menu, "TITLE");

Format(stPanel, 70 /*... и разные размеры строчки, хотя смысл делать отличное от размера массива значение? sizeof(stPanel)?*/, "%t", "InitialMenuPanel1");
DrawPanelText(menu, stPanel);
Format(stPanel, 70, "%t", "InitialMenuPanel2");
DrawPanelText(menu, stPanel);
Format(stPanel, 70, "%t", "InitialMenuPanel3");
DrawPanelItem(menu, stPanel);
if (g_iRandomEnable==0)
DrawPanelItem(menu,"disabled", ITEMDRAW_NOTEXT);
else
{
Format(stPanel, 70, "%t", "InitialMenuPanel4");
DrawPanelText(menu, stPanel);
Format(stPanel, 70, "%t", "InitialMenuPanel5");
DrawPanelText(menu, stPanel);
Format(stPanel, 70, "%t", "InitialMenuPanel6");
DrawPanelItem(menu, stPanel);
}

Format(stPanel, 70, "%t", "InitialMenuPanel7");
DrawPanelText(menu, stPanel);
Format(stPanel, 70, "%t", "InitialMenuPanel8");
DrawPanelText(menu, stPanel);
Format(stPanel, 70, "%t", "InitialMenuPanel9");
DrawPanelText(menu, stPanel);
Format(stPanel, 70, "%t", "InitialMenuPanel10");
DrawPanelItem(menu, stPanel);
return menu;
}
Тоже ~300 символов НО русского алфавита поэтому ~300*2=~600 символов.
--- Добавлено позже ---
PHP:
public OnPluginStart(){
char s[] = "Привет";
PrintToServer("Текст: %s\nДлина по факту для сервера: %d\nРазмер строки в плагине: %d",s,strlen(s),sizeof(s));
}
Результат:
S70727-084124.jpg

Оффтоп
 
Последнее редактирование:

Grey83

не пишу плагины с весны 2022
Сообщения
8,521
Реакции
4,980
" Длина по факту для сервера" - незнаю как правильнее написать.
это размер массива (которым являются все строковые переменные), который ты обозвал "Размер строки в плагине", от первого символа до завершающая ячейки, которая содержит ноль. Сама ячейка с нулём в strlen() не считывается.
Если сделать так, то первое число будет равно 12, а второе 128.
PHP:
public OnPluginStart(){
char s[128] = "Привет";
PrintToServer("Текст: %s\nДлина по факту для сервера: %d\nРазмер строки в плагине: %d",s,strlen(s),sizeof(s));
}
--- Добавлено позже ---
Strings are a construct for storing text (or even raw binary data). A string is just an array of characters, except that the final character must be 0 (called the null terminator). Without a null terminator, Pawn would not know where to stop reading the string. All strings are UTF-8 in SourcePawn.
 

BugMaker

Участник
Сообщения
10
Реакции
0
@BugMaker, напиши весь текст по пунктам(Title,item1,item2...) который должен влезть.

Что-то вроде этого.

"InitialMenuPanel1"
{
"ru" "Этот сервер использует Перк-Мод"
}

"InitialMenuPanel2"
{
"ru" "Выбирите пункт 1, чтобы настроить свои перки"
}

"InitialMenuPanel3"
{
"ru" "Настроить перки"
}

"InitialMenuPanel4"
{
"ru" "Вы можете выбрать случайную настройку перков"
}

"InitialMenuPanel5"
{
"ru" "но вы не сможете поменять их потом."
}

"InitialMenuPanel6"
{
"ru" "Случайно выбрать перки"
}

"InitialMenuPanel7"
{
"ru" "Иначе, вы можете использовать перки,"
}

"InitialMenuPanel8"
{
"ru" "которые вы уже выбрали,"
}

"InitialMenuPanel9"
{
"ru" "используя пункт 3."
}

"InitialMenuPanel10"
{
"ru" "ИГРАТЬ СЕЙЧАС!"
}

+ код меню из первого поста

public Handle:Menu_Initial (iCid)
{
new Handle:menu = CreatePanel();
decl String:stPanel[88]; //Пробовал разные размеры массива
SetPanelTitle(menu, "TITLE");

Format(stPanel, 70 /*... и разные размеры строчки, хотя смысл делать отличное от размера массива значение? sizeof(stPanel)?*/, "%t", "InitialMenuPanel1");
DrawPanelText(menu, stPanel);
Format(stPanel, 70, "%t", "InitialMenuPanel2");
DrawPanelText(menu, stPanel);
Format(stPanel, 70, "%t", "InitialMenuPanel3");
DrawPanelItem(menu, stPanel);
if (g_iRandomEnable==0)
DrawPanelItem(menu,"disabled", ITEMDRAW_NOTEXT);
else
{
Format(stPanel, 70, "%t", "InitialMenuPanel4");
DrawPanelText(menu, stPanel);
Format(stPanel, 70, "%t", "InitialMenuPanel5");
DrawPanelText(menu, stPanel);
Format(stPanel, 70, "%t", "InitialMenuPanel6");
DrawPanelItem(menu, stPanel);
}

Format(stPanel, 70, "%t", "InitialMenuPanel7");
DrawPanelText(menu, stPanel);
Format(stPanel, 70, "%t", "InitialMenuPanel8");
DrawPanelText(menu, stPanel);
Format(stPanel, 70, "%t", "InitialMenuPanel9");
DrawPanelText(menu, stPanel);
Format(stPanel, 70, "%t", "InitialMenuPanel10");
DrawPanelItem(menu, stPanel);
return menu;
}

Ну и кодировка. если важно, UTF-8 без BOM
 

Саша Шеин

Кому костылей?
Сообщения
1,697
Реакции
621
это размер массива (которым являются все строковые переменные), который ты обозвал "Размер строки в плагине", от первого символа до завершающая ячейки, которая содержит ноль. Сама ячейка с нулём в strlen() не считывается.
Если сделать так, то первое число будет равно 12, а второе 128.
PHP:
public OnPluginStart(){
char s[128] = "Привет";
PrintToServer("Текст: %s\nДлина по факту для сервера: %d\nРазмер строки в плагине: %d",s,strlen(s),sizeof(s));
}
--- Добавлено позже ---
Тогда пожно сказать что strlen возврашает длину текста(размер), sizeof размер массива.?
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,521
Реакции
4,980

Саша Шеин

Кому костылей?
Сообщения
1,697
Реакции
621
@Kruzya, @Grey83, в своем первом сообщении я это и хотел сказать. Только получилось как-то менее точно.
 

BugMaker

Участник
Сообщения
10
Реакции
0
Я тут покопался в логах и нашёл следующее.
[SM] Fatal error encountered parsing translation file "plugin.txt"
[SM] Error (line 405, column 2): Callback error
Однако он подгружает текст и после 405 строки.
--------------------------------------------------------------------------
Нашёл косяк. В одном из языков не стояла скобка.
 
Сверху Снизу