PDA

Просмотр полной версии : [Вопрос] Проблема с диалогом



DmitriyVasilev
12.03.2019, 12:59
Привет , делаю большой диалог но проблема, почему первая строчка в начале а остальные расположены по центру, помогите
CMD:mm(playerid)
{
return ShowPlayerDialogEx(playerid, 9623, DIALOG_STYLE_LIST, !"{33AA33}[Главное меню]",
!"{00B2EE}1. {ffffff}Игровые настройки\n\
{00B2EE}2. {ffffff}Статистика пероснажа\n\
{00B2EE}3. {ffffff}Команды сервера\n\
{00B2EE}4. {ffffff}Задать вопрос по игре\n\
{00B2EE}5. {ffffff}Репорт\n\
{00B2EE}6. {ffffff}Смена пароля\n\
t{00B2EE}7. {ffffff}Очистить чат\n\
t{00B2EE}8. {ffffff}Правила\n\
t{00B2EE}9. {ffffff}Безопасность\n\
t{00B2EE}10. {ffffff}Смена ника\n\
t{ff0000}11. {ffffff}Донат\n\
t{00B2EE}12. {ffffff}Бонусы\n\
t{00B2EE}13. {ffffff}Прочее", !">>", !"X");
}

DeimoS
12.03.2019, 15:13
Скачай последнюю версию компилятора - https://github.com/pawn-lang/compiler/releases

DmitriyVasilev
12.03.2019, 19:13
после компилирования тупо флудит в окне компилятора
warning 239: literal array/string passed to a non-const parameter

DeimoS
12.03.2019, 19:41
Исправить так - http://pro-pawn.ru/showthread.php?16434-const-%D0%BA%D0%BE%D1%80%D1%80%D0%B5%D0%BA%D1%82%D0%BD%D0%BE%D1%81%D1%82%D1%8C

Но можно отключить, вставив в начало скрипта:
#pragma warning disable 239
#pragma warning disable 214

DmitriyVasilev
13.03.2019, 12:54
у меня варнингов около 3к появилось, их че теперь все исправлять?:search:

DeimoS
13.03.2019, 13:05
Большая часть из них указывает на строки использования функций, в которых нарушена const-корректность. А проблема именно в коде объявления функций. И если исправить те самые функции, то и все ошибки, связанные с функцией, сразу исчезнут.

То бишь:

public SomePublic1()
{
SomeFunc("Привет");// Компилятор укажет на эту строку
}

public SomePublic2()
{
SomeFunc("Привет");// И на эту
}

stock SomeFunc(text[])// А проблема в отсутствии "const" тут
{

}

DmitriyVasilev
13.03.2019, 14:24
у меня на это ругается, получается перед каждым аргументом ставить const?
stock ShowPlayerDialogEx(playerid, dialogid, style, caption[], info[], button1[], button2[])
{
ShowPlayerDialog(playerid, dialogid, style, caption, info, button1, button2);
SetPVarInt(playerid, "USEDIALOGID", dialogid);
return 1;
}

DeimoS
13.03.2019, 14:38
stock ShowPlayerDialogEx(playerid, dialogid, style, const caption[], const info[], const button1[], const button2[])
{
ShowPlayerDialog(playerid, dialogid, style, caption, info, button1, button2);
SetPVarInt(playerid, "USEDIALOGID", dialogid);
return 1;
}

И в a_samp так же изменить нативку
native ShowPlayerDialog(playerid, dialogid, style, const caption[], const info[], const button1[], const button2[]);

DmitriyVasilev
13.03.2019, 17:25
Спасибо, а вот здесь нормально сделал? почитал тему но так и не понял, везде const ставить или где - то еще дополнительно что-то делать.
stock UpdateTable(const table[], const set[], set_, const where[], where_)
{
mysql_format(DATABASE,QUERY,300,"UPDATE `%s` SET %s = %i WHERE %s = %i",table,set,set_,where,where_);
return mysql_function_query(DATABASE,QUERY,false,"","");
}
и еще не понял все таки как пофиксить callcmd::bonuson(playerid,"3");

DeimoS
14.03.2019, 03:17
Ошибка появляется когда у функции есть параметры в виде массивов и в эти параметры передаются не массивы, а строковые литералы (то бишь, просто текст). Соответственно, const нужно устанавливать для тех параметров, в которые передаются строковые литералы. Ну или можешь вообще для всех параметров указывать. Главное, чтоб в эти параметры не происходила запись значений во время работы функции (в этом случае компилятор выдаст ошибку).

В первом примере всё правильно.
Во втором - Найди код команды и все внутренности вынеси в отдельную функцию, а-ля:

stock SomeFunc(playerid, params[])
{
// Код команды
}
А после уже в самой команде допиши к "params[]" атрибут "const" и сделай вызов функции внутри команды:

CMD:bonuson(playerid, const params[])
{
return SomeFunc(playerid, params);
}
Вот тут объяснено почему нельзя просто добавить const - http://pro-pawn.ru/showthread.php?16434-const-%D0%BA%D0%BE%D1%80%D1%80%D0%B5%D0%BA%D1%82%D0%BD%D0%BE%D1%81%D1%82%D1%8C&p=92402&viewfull=1#post92402

DmitriyVasilev
14.03.2019, 12:11
капец, все команды переводить? это что-то дает вообще? просто не уверен что многие проекты так делают.
а вообще какие траблы могут случиться?

DeimoS
14.03.2019, 12:39
В той теме, которую я изначально скинул, всё описано. А так же скинул вариант отключения этих предупреждений, чтоб ничего не исправлять.

Многие проекты вообще непонятно как работают и имеют кучу говнокода в себе. На них явно не стоит ровняться.

DmitriyVasilev
15.03.2019, 12:06
все команды переведенные в тот способ не будут считаться говнокодом?

DeimoS
15.03.2019, 13:18
все команды переведенные в тот способ не будут считаться говнокодом?

Не будут. Наоборот, такой код менее подвержен ошибкам, а значит лучше

Сергей
16.03.2019, 12:58
Всё очень, и очень полезно)

DmitriyVasilev
16.03.2019, 14:17
а на быстродействии не скажется?

DeimoS
16.03.2019, 19:13
Нет