Как сделать?
…
:loop
$имя = INPUT('<B>Тогда я попрошу вас сказать свое имя</B>')
IF $имя = '':
MSG '<B>Извините, нам нужно знать ваше имя</B>'
JUMP 'loop'
END
Спс
Вопрос не совсем по теме, но все же…
Имеется ошибка следующего содержания:
место при посещении
строка: 31
код ошибки: 113
Описание: указанная метка не найдена
Переход на метку описан в действии примерно таким образом:
act ‘Открыть дверь’ :
[тут манипуляции с несколькими переменными через &] & jump ‘start’
end
Метки в локации всего две: start и start01. Переписал их всех заново несколько раз, ‘a’ в названии английская - это 100%. В чем причина ошибки понять не могу. Но самое интересное тут то, что в локации ВООБЩЕ НЕТ 31 строки, указанной в ошибке! Их там всего 17, та что с jump ‘start’ - одна из последних.
Что еще интереснее, если изменить написание действия на
act ‘Открыть дверь’ : [манипуляции с переменными] & jump ‘start’
то строка в сообщение об ошибки выводится “правильная” (16 или 17ая), но вот откуда она там берется - все равно не понятно.
Это такой баг плеера что ли? Как от этого избавиться?
АПДЕЙТ: все, кажется разобрался соорудив тестовый пример.
a=10
:loop
a=a-1
if a=0 : ‘<<c>>’ & jump ‘act’
c=c+5
jump ‘loop’
:act
act ‘a=10’ :
a=10
jump ‘loop’
end
Выводит число ’45’, но при нажатии ‘a=10’ выдает ошибку - причем в *18ой* строке. Это точно так и должно быть?..
В любом случае, стоило бы написать в справке о том, что jump нельзя использовать в действиях. А то столько неоправданного недоумения. Буду думать как достичь желаемого при помощи других средств..
Плеер не понимает команду jump в тех случаях когда она находится в одном из действий.
Ник-То,
Все не так.
JUMP можно использовать в действиях. Но, только внутри самого действия, т.е. если метка находится между ACT и END.
JUMP - переход в пределах “видимости”, при выполнении действия этой областью является действие, при выполнении кода локации - является код локации.
Пытаться через JUMP перейти из действия “наружу” - ошибка распространенная, я задокументирую эту граблю.
Верно подмечено насчет справки, в ней не упомянуто, что есть “область видимости” для меток, справка давным-давно нуждается в доработке и переработке.
Чтобы перейти на определенный участок кода локации из ACT, можно сделать так.
В действии:
jumper = 1
XGOTO $CURLOC
В начале локации:
IF jumper = 1:
jumper = 0
JUMP 'label'
END
Но следует учитывать, что попытка перейти из кода действия на метку в коде локации свидетельствует о запутанном и некрасивом коде. Лучшим решением будет обойтись вообще без JUMP.
Про описание ошибки плеером и номера строк - это, возможно, косяк плеера. Насчет этого лучше скажет Байт.
Да, с номерами строк здесь ошибка плеера. Исправим.
UPD: Исправил в репозитории. Вообще странно, что этот баг не нашли раньше.
Nex, спасибо за вариант решения проблемы. Я примерно о чем-то таком и сам думал, то есть о переходе на саму локацию, а затем на нужную метку в ней посредством переключенного в действии флага. Не могу не заметить, что невозможность использования jump напрямую из действия противоречит интуитивному восприятию, по крайней мере моему. Особенно если прописывать действия в основной части кода, как в данном случае.
Когда я встречаю неявную ошибку, результирующего неправильной работой того что я пишу, то дописываю в код вывод всех промежуточных переменных, чтобы понять где и в какой именно момент она происходит. Если ошибка конкретная, выводимая плеером, то я исправляю то, чьл нагородил в указанной им строке. Но в этой ситуации ни один метод не помог, так как ошибка заключалась в специфике восприятия кода плеером. В результате я попросту впал в ступор :).
А что касается запутанного кода, то большого значения это не имеет: я не делаю свою игру, а экспериментирую чтобы лучше понимать как работают чужие.
невозможность использования jump напрямую из действия противоречит интуитивному восприятию
Это верно, но только до тех пор, пока автор не осознает, что такое код действия. В любом случае, как-нибудь мы этот момент проясним в будущем, в справке и в “граблях”.
У меня вопрос.
Почему не работает код, который должен выводить время через опред. промежутки? Выводится только *pl после act - и все.
act 'Любовно погладить ручку сейфа и свалиться в мягкую кровать': *clr & delact $selact & *pl ' Едва коснувшись щекой подушки, вы сладко засыпаете.'
wait 2000
! центрировать каретку
*pl ''
*pl '23.50'
wait 1000
*pl ''
*pl '00.00'
wait 1000
*pl ''
*pl '00.10'
wait 1000
*pl ''
*pl '00.20'
*pl ''
*pl '...'
wait 2000
*pl ''
*pl '02.30'
wait 1000
*pl ''
*pl '...дзынь...'
wait 1500
*pl ''
*pl ' Вы просыпаетесь от тихого звенящего звука, раздавшегося с первого этажа. Кажется, ваза разбилась. Больше никаких звуков не доносится. Как вы думаете, это случайность?'
wait 1000
act ' - Да, случайность! Не мешай мне спать!': gt 'death-1'
act ' - Наверно, нет... Лучше проверить.': gt 'Spalna-1'
И еще: как отцентрировать курсор, чтобы время выводилось посередине основного окна?
AleKon,
1. см. Граблю #1 - https://qsp.org/forum/comments/9256
2. Использовать HTML-режим и тег <center>.
AleKon, на, я тебе код поправил. Некс не ругайся. Я знаю что нужно учится самому и т.д и т.п, но всё равно. Пусть посмотрит код и поймёт что и как.
Евген, спасибо. Шо б я без тебя делал.
Nex, тоже спасибо. Я бы и сам все посмотрел и уточнил, просто мой “скоростной” инет особенно подвисает на больших темах форума. Так что быстрее и проще у людей спросить.
Всегда рад помочь
И никогда не используй однострочные ифы и остальное, а также забудь про знак & я его ваще никогда не использовал.
AleKon,
ну главное чтоб прочитал все-таки про граблю, и посмотрел, что в коде не так.
Ведь иначе еще не раз на этом застрянешь.