Диалоговые окна + ошибка ureachable code [225]
#1

Здрасьте. Давно я не кодил в pawno, и тут вдруг закодил. Так вот: проблема заключается в диалоговых окнах. А именно:
Сегодня я работал с диалогами, и делал меню для сервера (Style: List). В главном меню допустим 6 пунктов, и они запускаются. Допустим в первом пункте главного меню (путь называться будет "Телепорты") есть 3 категории, которые в свою очередь должны запускать какую-то функцию, чего они не делают. На примере кода разберём ошибку:

Код главного меню:
PHP код:
    if(dialogid == && response){ //Меню сервера
        
switch(listitem){
            case 
0:{
                if(
IsPlayerInAnyVehicle(playerid)) "Code";
                else 
"Code";}
            case 
1:{
                if(!
IsPlayerAdmin(playerid)) "Code";
                else 
"Code";}
            case 
2ShowPlayerDialog(playerid5dl"Телепорты""Дрифт\nСтант\nПаркур\nБейзджамп\nПо городу""Выбор""Назад"); //Пункт "телепорты"
            
case 3"Code";
            
//case 4: "Code";
            
case 5"Code";}}
    else return 
1
Запомним число 5 - это ID диалога о телепортах. Теперь посмотрим, что таит в себе 5й диалог:
PHP код:
    if(dialogid == && response){//Телепорты
        
if(listitem == 0ShowPlayerDialog(playerid17dl"Дрифт Зоны""""Выбор""Назад");
        if(
listitem == 1ShowPlayerDialog(playerid18dl"Стант Зоны""""Выбор""Назад");
        if(
listitem == 2ShowPlayerDialog(playerid19dl"Паркур Зоны""""Выбор""Назад");
        if(
listitem == 3ShowPlayerDialog(playerid20dl"Зоны свободного полёта""""Выбор""Назад");
        if(
listitem == 4ShowPlayerDialog(playerid21dl"Прочие мета (по городу)""Южный\nАрзамас""Выбор""Назад");
        return 
1;}
    if(
dialogid == && !response){
        if(
IsPlayerInAnyVehicle(playerid)) ShowPlayerDialog(playerid1dl"Меню сервера""Тюнинг\nОружия\nТелепорты\nНастройки игрока\nАдминистрация\nАвторы""Выбор""Отмена");
        else 
ShowPlayerDialog(playerid1dl"Меню сервера""Автомобили\nОружия\nТелепорты\nНастройки игрока\nАдминистрация\nАвторы""Выбор""Отмена");
        return 
1;} 
Как видим, 5й диалог должен показывать диалоги 17, 18, 19, 20 и 21, и по нажатию кнопочки "Назад" выдать снова главное меню.
Давайте теперь взглянем допустим на диалог 21:
PHP код:
    if(dialogid == 21 && response){//Прочие места
        
switch(listitem){
            case 
0:{
                
GetPlayerName(playeridnamess25);
                
SetPlayerPos(playerid2552.7283, -2202.126222.2232);
                
SetPlayerFacingAngle(playerid0.0);
                
format(mess100"-** %s (%d) {82FF82}телепортировался в Южный **-"namessplayerid);
                
SendClientMessageToAll(GetPlayerColor(playerid), mess); return 1;}
            case 
1:{
                
GetPlayerName(playeridnamess25);
                
SetPlayerPos(playerid, -62.5303646.723912.1285);
                
SetPlayerFacingAngle(playerid175.0);
                
format(mess100"-** %s (%d) {82FF82}телепортировался в Арзамас **-"namessplayerid);
                
SendClientMessageToAll(GetPlayerColor(playerid), mess); return 1;}}
        return 
1;}
    if(
dialogid == 21 && !response){
        
ShowPlayerDialog(playerid5dl"Телепорты""Дрифт\nСтант\nПаркур\nБейзджамп\nПо городу""Выбор""Назад");
        return 
1;} 
Так вот тут возможно тоже нет ничего ошибочного, но (!) все пункты после главного меню не отображаются, точнее не отображается диалог 21, и другие диалоги или функции, которые находятся внутри диалога главного меню. Отображается только 7 диалогов, это собственно само меню, и 6 его пунктов. В этих пунктах (повторюсь) ничего не открывается (диалог тупо закрывается), не работает даже кнопка "Назад".
Ранее до этой ошибки была ошибка Runtime error 20, которую я исправил благодаря main(){}.
Теперь о Unreachable Code
Возьмём код
PHP код:
    if(dialogid == 15 && response){ //Авто 2
        
new string[128], carvlad[20], idFloatxFloatyFloatzFloatata4ka[MAX_PLAYERS];
        
GetPlayerPos(playeridxyz);
        
GetPlayerFacingAngle(playerida);
        switch(
listitem){
            case 
0carvlad "Катер Сквало"id 446;
            case 
1carvlad "Катер Спидер"id 452;
            case 
2carvlad "Катер Рыбалка"id 453;
            case 
3carvlad "Катер Тропик"id 454;
            case 
4carvlad "Лайнер"id 484;}
        
format(string,sizeof(string),"%s заспавнен",carvlad);
        
SendClientMessage(playerid0x21DD00FFstring);
        if(
ta4ka[playerid])DestroyVehicle(ta4ka[playerid]);
        
ta4ka[playerid] = CreateVehicle(idxyza, -1, -150000);
        
LinkVehicleToInterior(ta4ka[playerid], GetPlayerInterior(playerid));
        
SetVehicleVirtualWorld(ta4ka[playerid], GetPlayerVirtualWorld(playerid));
        
PutPlayerInVehicle(playeridta4ka[playerid], 0);
        return 
1;}
    if(
dialogid == 15 && !responseShowPlayerDialog(playerid3dl"Автомобили""Классические\nCriminal Russia\nМотоциклы\nАвтобусы\nАвиа Транспорт\nЛодки\nRC авто""Выбор""Назад"); return 1
В нём самая первая строка является unreachable code. Тоже не понятна история сей ошибки.
Reply
#2

Quote:

В нём самая первая строка является unreachable code. Тоже не понятна история сей ошибки.

покажи строку до неё
Reply
#3

Quote:
Originally Posted by DartfoL
Посмотреть сообщение
покажи строку до неё
PHP код:
    if(dialogid == && !response){
        if(
IsPlayerInAnyVehicle(playerid)) ShowPlayerDialog(playerid1dl"Меню сервера""Тюнинг\nОружия\nТелепорты\nНастройки игрока\nАдминистрация\nАвторы""Выбор""Отмена");
        else 
ShowPlayerDialog(playerid1dl"Меню сервера""Автомобили\nОружия\nТелепорты\nНастройки игрока\nАдминистрация\nАвторы""Выбор""Отмена");
        return 
1;} 
Reply
#4

ureachable code означает что код с этой строк и далее никогда не выполнится. Т.е. ты где-то накосячил со скобками и у тебя весь колбек вне зависимости от условий обрывается строкой ранее, вероятней всего retrun 1;.
Не зря везде и всегда просят оформлять код правильно и красиво, и не пренебрегать скобками даже для одной единственной функции!
Reply
#5

С unreachable code разобрался - там ретурны лишние я сделал случайно. Теперь хочется разробраться с диалогами
Reply
#6

Подниму
Reply
#7

Код ужасный по всем параметрам, нечего теперь удивляться, что что-то там не работает.

По сути, все диалоги, что идут ниже этого, уже работать не будут, т.к. если !(dialogid == 1 && response), то выполнение заканчивается (else return 1). От этого и unreachable code.

pawn Код:
if(dialogid == 1 && response){ //Меню сервера
        switch(listitem){
            case 0:{
                if(IsPlayerInAnyVehicle(playerid)) "Code";
                else "Code";}
            case 1:{
                if(!IsPlayerAdmin(playerid)) "Code";
                else "Code";}
            case 2: ShowPlayerDialog(playerid, 5, dl, "Телепорты", "Дрифт\nСтант\nПаркур\nБейзджамп\nПо городу", "Выбор", "Назад"); //Пункт "телепорты"
            case 3: "Code";
            //case 4: "Code";
            case 5: "Code";}}
    else return 1;
Reply
#8

То-есть if(dialogid && !response) не сможет помоч мне?
Код я подстраивал под себя, ибо мне уже привычен вид кода как в Lua
Тогда какой вид должен иметь код, чтобы пункты работали, и по нажатию на вторую кнопку (окна, не меню) переходило назад (или показывало другой диалог).
Reply
#9

разобрался с диалогом, разобрался с кнопкой назад (вынес response отдельно в проверку).
Теперь такой вопрос. Тоже про те-же внутренние пукнты меню (на примере телепортов).
Так вот - первые пункты не высвечиваются, когда я кликаю по ним. Вторые и более - высвечивают нормально диалоги, и функционируют, но первые пункты все не функционируют (кроме пункта Автомобили в главном меню).
Reply
#10

Разобрался. Спасибо всем. Прошу тему закрыть.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)