Как вывести текст

oleg_nelasy

Участник
Сообщения
664
Реакции
46
В плагине таким образом формируются пункты меню. Хочу вывести все пункты меню в файл перевода. Для теста создал чар и положил в него текс при компиляции получаю ошибку.
prophunt/shop_items.sp(8) : error 047: array sizes do not match, or destination array is too small

это строка где я пытаюсь вывести текс из буфера.

C-подобный:
void RegisterItems()
{
    char sBuffer[256];
    Format(sBuffer, sizeof(sBuffer), "test");
    
    RegisterShopItem("Heal",         CS_TEAM_T, g_cvShopHiderHealPrice.IntValue,             g_cvShopHiderHealSort.IntValue,             g_cvShopHiderHealUnlockTime.IntValue, false);
    RegisterShopItem("Change Model (Random)",                 CS_TEAM_T, g_cvShopHiderMorphPrice.IntValue,             g_cvShopHiderMorphSort.IntValue,         g_cvShopHiderMorphUnlockTime.IntValue, false);
    RegisterShopItem(sBuffer,     CS_TEAM_T, g_cvShopHiderAirFreezePrice.IntValue,         g_cvShopHiderAirFreezeSort.IntValue,     g_cvShopHiderAirFreezeUnlockTime.IntValue, false);
    RegisterShopItem("Speed Upgrade",     CS_TEAM_T, g_cvShopHiderSpeedPrice.IntValue,         g_cvShopHiderSpeedSort.IntValue,     g_cvShopHiderSpeedUnlockTime.IntValue, false);
    RegisterShopItem("Low Gravity Upgrade",     CS_TEAM_T, g_cvShopHiderGravityPrice.IntValue,         g_cvShopHiderGravitySort.IntValue,     g_cvShopHiderGravityUnlockTime.IntValue, false);
    
    RegisterShopItem("Healthshot",             CS_TEAM_CT, g_cvShopSeekerHealthshotPrice.IntValue,     g_cvShopSeekerHealthshotSort.IntValue,     g_cvShopSeekerHealthshotUnlockTime.IntValue, false);
    RegisterShopItem("Grenade",             CS_TEAM_CT, g_cvShopSeekerGrenadePrice.IntValue,         g_cvShopSeekerGrenadeSort.IntValue,     g_cvShopSeekerGrenadeUnlockTime.IntValue, false);
    RegisterShopItem("FiveSeven",             CS_TEAM_CT, g_cvShopSeekerFiveSevenPrice.IntValue,         g_cvShopSeekerFiveSevenSort.IntValue,     g_cvShopSeekerFiveSevenUnlockTime.IntValue, false);
    RegisterShopItem("XM1014",             CS_TEAM_CT, g_cvShopSeekerXM1014Price.IntValue,         g_cvShopSeekerXM1014Sort.IntValue,     g_cvShopSeekerXM1014UnlockTime.IntValue, false);
    RegisterShopItem("MP9",                 CS_TEAM_CT, g_cvShopSeekerMP9Price.IntValue,             g_cvShopSeekerMP9Sort.IntValue,         g_cvShopSeekerMP9UnlockTime.IntValue, false);
    RegisterShopItem("M4A1",                 CS_TEAM_CT, g_cvShopSeekerM4A1Price.IntValue,            g_cvShopSeekerM4A1Sort.IntValue,         g_cvShopSeekerM4A1UnlockTime.IntValue, false);
    RegisterShopItem("AWP",                 CS_TEAM_CT, g_cvShopSeekerAWPPrice.IntValue,             g_cvShopSeekerAWPSort.IntValue,         g_cvShopSeekerAWPUnlockTime.IntValue, false);
}
 

Madness aka null138

Участник
Сообщения
713
Реакции
734
полный код выложи. а именно часть где есть сама функция RegisterShopItem
 

oleg_nelasy

Участник
Сообщения
664
Реакции
46
полный код выложи. а именно часть где есть сама функция RegisterShopItem
Честно я без понятия где сама функция . Файл Shop_items
Сообщения автоматически склеены:

C-подобный:
public int Native_RegisterShopItem(Handle plugin, int numParams)
{
    char sName[32];
    GetNativeString(1, sName, sizeof(sName));
    return RegisterShopItem(sName, GetNativeCell(2), GetNativeCell(3), GetNativeCell(4), GetNativeCell(5), GetNativeCell(6));
}
Насколько понял могу только использовать 32 символа?
 

Вложения

  • prophunt.zip
    48.3 КБ · Просмотры: 5
Последнее редактирование:

RusJJ

Доброе утро девачьки
Сообщения
2,582
Реакции
1,075
Насколько понял могу только использовать 32 символа?
Боже, ну и чел. Да.
Сообщения автоматически склеены:

Если "точнее" - 31. В конце обязательно ставится невидимый нулевой символ
 

oleg_nelasy

Участник
Сообщения
664
Реакции
46
Боже, ну и чел. Да.
Сообщения автоматически склеены:

Если "точнее" - 31. В конце обязательно ставится невидимый нулевой символ
Ну простите не все такие умные как вы.

Вопрос следующий. Сделал:
C-подобный:
public int Native_RegisterShopItem(Handle plugin, int numParams)
{
    char sName[128];
    GetNativeString(1, sName, sizeof(sName));
    return RegisterShopItem(sName, GetNativeCell(2), GetNativeCell(3), GetNativeCell(4), GetNativeCell(5), GetNativeCell(6));
}
 и
    char sBuffer[5][128];
    FormatEx(sBuffer[3], sizeof(sBuffer[]), "%t", "Freeze Height Limit Upgrade");
Если использовать 32 то все работает. Если я хочу увеличить размер массива тогда получаю туже ошибку несовпадения размера или он мал.
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,520
Реакции
4,979
@oleg_nelasy, это не пункты в меню, чтобы туда писать много текста
 

RusJJ

Доброе утро девачьки
Сообщения
2,582
Реакции
1,075
Нужно русский перевод вписать.
это не пункты в меню
ало
Сообщения автоматически склеены:

Ну простите не все такие умные как вы.
Не надо быть умным. Открыть инклюд ака заголовочный файл и читать, что делает функция, а не тыкать в первый попавшийся аргумент строку размером с высоту мира в майнкрафте
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,520
Реакции
4,979
@oleg_nelasy, русский текст пишется в файл перевода.
А туда - только имя подпункта шопа, для регистрации функции в ядре.
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,520
Реакции
4,979
@oleg_nelasy, там и не должно быть русского.
Там должна любая комбинация символов (до 31 шт. латиницей) для регистрации функции в шопе.
Сам текст кнопки в менюшке задаётся файлом перевода и только им.
 

oleg_nelasy

Участник
Сообщения
664
Реакции
46
@oleg_nelasy, там и не должно быть русского.
Там должна любая комбинация символов (до 31 шт. латиницей) для регистрации функции в шопе.
Сам текст кнопки в менюшке задаётся файлом перевода и только им.
Дело в том что в моде здесь формируются итемы и потом они выводятся в минюшках разных и в других сообщениях и оно все связано именно тут. Поэтому логично выглядит чтобы перевод делать именно тут. На текущий момент у меня остался один вопрос. Есть функция чтобы получить в нутри этого кода индекс клиента чтобы применить SetGlobalTransTarget() для корректной обработки Format()?

C-подобный:
void RegisterIt+ems()
{
   
    char sBuffer[5][32];
    //SetGlobalTransTarget(iClient);
    Format(sBuffer[0], sizeof(sBuffer[]), "%t", "Heal");
    Format(sBuffer[1], sizeof(sBuffer[]), "%t", "Change Model");
    Format(sBuffer[2], sizeof(sBuffer[]), "%t", "Freeze Height Limit Upgrade");
    Format(sBuffer[3], sizeof(sBuffer[]), "%t", "Speed Upgrade");
    Format(sBuffer[4], sizeof(sBuffer[]), "%t", "Low Gravity Upgrade");
   
    RegisterShopItem(sBuffer[0],         CS_TEAM_T, g_cvShopHiderHealPrice.IntValue,             g_cvShopHiderHealSort.IntValue,             g_cvShopHiderHealUnlockTime.IntValue, false);
    RegisterShopItem(sBuffer[1],                 CS_TEAM_T, g_cvShopHiderMorphPrice.IntValue,             g_cvShopHiderMorphSort.IntValue,         g_cvShopHiderMorphUnlockTime.IntValue, false);
    RegisterShopItem(sBuffer[2],     CS_TEAM_T, g_cvShopHiderAirFreezePrice.IntValue,         g_cvShopHiderAirFreezeSort.IntValue,     g_cvShopHiderAirFreezeUnlockTime.IntValue, false);
    RegisterShopItem(sBuffer[3],     CS_TEAM_T, g_cvShopHiderSpeedPrice.IntValue,         g_cvShopHiderSpeedSort.IntValue,     g_cvShopHiderSpeedUnlockTime.IntValue, false);
    RegisterShopItem(sBuffer[4],     CS_TEAM_T, g_cvShopHiderGravityPrice.IntValue,         g_cvShopHiderGravitySort.IntValue,     g_cvShopHiderGravityUnlockTime.IntValue, false);
}
 
Последнее редактирование:

Madness aka null138

Участник
Сообщения
713
Реакции
734
Если использовать 32 то все работает. Если я хочу увеличить размер массива тогда получаю туже ошибку несовпадения размера или он мал.
потому что ты меняешь только внутри натива, а он вызывает функцию самого ядра где опять таки стоит старый размер. следовательно и там надо поменять.
1633546930986.png
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,520
Реакции
4,979
Поэтому логично выглядит чтобы перевод делать именно тут.
Все претензии к автору шопа.
И хотелки свои Zipcore предъявляй ему в гитхабе.
Сообщения автоматически склеены:

Не говоря уж о том, что количество текста в меню ограничено и ты не сможешь туда запихать больше лимита, т.к. всё, что свыше лимита проссто не отобразится.
И ты придёшь сюда с жалобами, что у тебя менюшка отображает не все пункты.
Сообщения автоматически склеены:

Вообще свои переводы тебе следовало бы пихать в функцию Menu_Shop() из инклюда shop.sp
Конкретно строки 205, 206.
C-подобный:
        if(iPrice == 0)
            Format(sBuffer, sizeof(sBuffer), "free - %s", sName);
        else Format(sBuffer, sizeof(sBuffer), "$%i - %s", iPrice, sName);
==>
C-подобный:
        if(iPrice == 0)
            Format(sBuffer, sizeof(sBuffer), "free - %T", sName, iClient);
        else Format(sBuffer, sizeof(sBuffer), "$%i - %T", iPrice, sName, iClient);
 
Последнее редактирование:

oleg_nelasy

Участник
Сообщения
664
Реакции
46
Все претензии к автору шопа.
И хотелки свои Zipcore предъявляй ему в гитхабе.
Сообщения автоматически склеены:

Не говоря уж о том, что количество текста в меню ограничено и ты не сможешь туда запихать больше лимита, т.к. всё, что свыше лимита проссто не отобразится.
И ты придёшь сюда с жалобами, что у тебя менюшка отображает не все пункты.
Сообщения автоматически склеены:

Вообще свои переводы тебе следовало бы пихать в функцию Menu_Shop() из инклюда shop.sp
Конкретно строки 205, 206.
C-подобный:
        if(iPrice == 0)
            Format(sBuffer, sizeof(sBuffer), "free - %s", sName);
        else Format(sBuffer, sizeof(sBuffer), "$%i - %s", iPrice, sName);
==>
C-подобный:
        if(iPrice == 0)
            Format(sBuffer, sizeof(sBuffer), "free - %T", sName, iClient);
        else Format(sBuffer, sizeof(sBuffer), "$%i - %T", iPrice, sName, iClient);
Претензий у меня не к кому нет. Я программирую нет так много и пытаюсь потихоньку разобраться. Поскольку возникли трудности в виду того что я не опытный написал сюда с целью получить ответы. Всем большое спасибо я очень благодарен за помощь.
 
Сверху Снизу