Forum rules
This is the right place for Ren’Py help. Please ask one question per thread, use a descriptive subject like ‘NotFound error in option.rpy’ , and include all the relevant information — especially any relevant code and traceback messages. Use the code tag to format scripts.
-
PyTom
- Ren’Py Creator
- Posts: 15992
- Joined: Mon Feb 02, 2004 10:58 am
- Completed: Moonlight Walks
- Projects: Ren’Py
- IRC Nick: renpytom
- Github: renpytom
- itch: renpytom
- Location: Kings Park, NY
- Contact:
Re: PROBLEM with ‘Choice menuitem expects a non-empty block’
#2
Post
by PyTom » Sat Feb 08, 2014 9:30 pm
You need to indent «jump enter» and «jump back».
Supporting creators since 2004
(When was the last time you backed up your game?)
«Do good work.» — Virgil Ivan «Gus» Grissom
Software > Drama • https://www.patreon.com/renpytom
-
JellieBBs
- Newbie
- Posts: 5
- Joined: Sat Feb 08, 2014 9:01 pm
- Contact:
Re: PROBLEM with ‘Choice menuitem expects a non-empty block’
#3
Post
by JellieBBs » Sat Feb 08, 2014 9:41 pm
PyTom wrote:You need to indent «jump enter» and «jump back».
I am sorry but can you help me how to do it?
I’ve no idea… can you give the structure it would help me A LOT =3
-
philat
- Eileen-Class Veteran
- Posts: 1883
- Joined: Wed Dec 04, 2013 12:33 pm
- Contact:
Re: PROBLEM with ‘Choice menuitem expects a non-empty block’
#4
Post
by philat » Sat Feb 08, 2014 10:53 pm
Code: Select all
menu:
"... little peek won't hurt me, right?":
jump enter
He means put spaces before the «jump enter» line and «jump back» line, like the above. Right now, you have the little peek part and jump enter at the same level.
-
Alex
- Lemma-Class Veteran
- Posts: 3081
- Joined: Fri Dec 11, 2009 5:25 pm
- Contact:
Re: PROBLEM with ‘Choice menuitem expects a non-empty block’
#5
Post
by Alex » Sun Feb 09, 2014 3:57 am
Get the Reddit app
Scan this QR code to download the app now
Or check it out in the app stores
Go to RenPy
r/RenPy
r/RenPy
A place for discussion about the Ren’Py visual novel engine and related topics and technologies.
Members
Online
•
by
[deleted]
It has a problem with my code on line 71: Choice menuitem expects a non-empty block. Please help.
Neks писал(а):Как извлечь код игр, сделанных на RenPy?
Как распаковывать архив *.rpa
Картинки и код ивентов игр упакованы в файлы *.rpa, которые находятся в папке game . Процесс распаковки не очень сложен, но нередко вызывает вопросы.
Чтобы распаковать архив необходимо выполнить следующие действия:
1. Скачайте python версию 2.x (на момент написания этого руководства последняя версия 2.7.9)
https://www.python.org/downloads/
и установите ее.
2. Скачайте модуль UNRPA :
https://github.com/Lattyware/unrpa
, запишите его файлы в отдельную папку.
3. Вызовите консоль (cmd) из папки, где находится unrpa, наберите:
C:\Путь_к_Пайтон\python.exe unrpa -m -p C:\Путь_Куда_Распаковать_Без_Слеша C:\Путь_к_Файлу_Архиву_Игры\archive.rpa
ПРИМЕР:
Пусть в игре архив имеет название archive.rpa.
Если поместить archive.rpa в папку, где находится само UnRPA, а python в c:\Programs\Python279 , то командная строку можно написать такую:
c:\Programs\Python279\python.exe unrpa -m -p c:\unrpa archive.rpa
в этом случае результат можно найти в папке: c:\unrpa.
Все распакованное содержимое необходимо поместить в папку game игры.
Программный код игры содержится в файлах *.rpy
После распаковки файлы *.rpa, *.rpyb и *.rpyc можно удалить.
—
P.S. Y-Art предложил альтернативу:
видео
http://sn34kymofo.com/rpaextractor/RPA% … indows.zip
архив для распаковки игры
запуск через консоль (cmd) из папки
-x извлечь.
-о указать выходной каталог для файлов.
Пример: RPAExtractor -x foo.rpa -o Sn34kyMofoIsAwesome
#361
93Mangaka
-
- Участники
-
- Cообщений: 3
Новичок
0
Обычный
Отправлено 22 Июль 2011 — 21:38
Спасибо большое! мне это очень помогло!
-
0
- Наверх
#362
93Mangaka
93Mangaka
-
- Участники
-
- Cообщений: 3
Новичок
0
Обычный
Отправлено 23 Июль 2011 — 10:42
Пытаюсь следовать руководству,однако после самой первой записи,при запуске проекта,программа выводит ошибку.
-
0
- Наверх
#363
Andy_Scull
Отправлено 23 Июль 2011 — 11:39
Пытаюсь следовать руководству,однако после самой первой записи,при запуске проекта,программа выводит ошибку.
Как человек, пишущий на питоне, скажу — требуются команды после init:, уж хз какие там должны быть.
Ошибку он пишет потому что там ничего нет — init: начат блок, и после него сразу начало другого блока label start:
Если в init ничего не требуется вставлять, то можно либо убрать совсем либо всунуть в него команду pass
Либо если label start должно быть внутри init, то надо вставить отступ перед label start — чтобы он понимал, что это внутри инит, а не после него
Сообщение отредактировал Andy_Scull: 23 Июль 2011 — 13:41
-
0
- Наверх
#364
Евгений Рысь
Евгений Рысь
-
- Участники
-
- Cообщений: 7
Новичок
2
Обычный
Отправлено 23 Июль 2011 — 23:15
Приветствую!
Вопрос по работе с DSE framework. Собственно задача (думаю) достаточно простая – в некоторый момент игры необходимо поменять выбор действий в планировщике для определенного периода.
В качестве основы под игру использовал пример из демки.
Вот кусок из секции init python в файле main.rpy:
dp_period(«Afternoon», «afternoon_act»)
dp_choice(«Study», «study»)
dp_choice(«Hang Out», «hang»)
dp_choice(«Shop», «shop», enable=»False», show=»True» )
Последнее действие – shop, оно показывается, но не активно.
Теперь вопрос – как в процессе игры поменять для shop значение enable=»False» на enable=»True»?
Сначала я просто пытался добавить новое действие, вызывая функцию dp_choice для добавления нового выбора в процессе игры, но не получилось. Из любого места ее не вызывать, только из init, а сделав еще один блок init далее в файле main.rpy в игре просто сразу показывается последнее заданное значение.
В любом случае мне нужно понять как управлять значениями enable и show, так как в процессе игры некоторые выборы из планировщика потребуется убрать.
Перебрал кучу вариантов, но так как пока плохо знаю Ren’Py и Python — результата и не добился.
Кто работает с DSE, подскажите пожалуйста, как в процессе игры управлять возможными действиями в планировщике событий (убирать или делать неактивными старые, добавлять новые)?
-
0
- Наверх
#365
Алекс__
Отправлено 24 Июль 2011 — 00:31
С DSE не работал, но есть мысль…
dp_choice("Shop", "shop", enable="False", show="True" )
присваивает параметрам <enable> и <show> значения «False» и «True» соответственно. Попробуйте вместо конкретных значений использовать переменные, значения которых можно будет менять в процессе игры (только в блоке init: или в самом начале блока start: надо будет присвоить этим переменным начальные значения)
init: $ shop_enable_value = "False" $ shop_show_value = "True" ... ... ... dp_choice("Shop", "shop", enable=shop_enable_value, show=shop_show_value ) ... ... ... label start: ... ... ... $ shop_enable_value = "True"
, а сделав еще один блок init далее в файле main.rpy в игре просто сразу показывается последнее заданное значение
Так и должно быть — Рен’пи обрабатывает сразу все «.rpy» файлы в папке с игрой (как если бы это был один файл, содержащий все блоки), а далее исполняет блоки в последовательности:
— init python (в соответствии с очередностью — -5 раньше, чем -2)
— init (в соответствии с очередностью)
— start
-
0
- Наверх
#366
Евгений Рысь
Евгений Рысь
-
- Участники
-
- Cообщений: 7
Новичок
2
Обычный
Отправлено 24 Июль 2011 — 09:45
Алекс, к сожалению не получилось добиться нужного результата.
Я сделал вот так:
init python:
…
shop_enable_value = «False»
shop_show_value = «True»
…
dp_choice(«Shop», «shop», enable=shop_enable_value, show=shop_show_value)
…
label start:
…
label shop_ok:
…
$ shop_enable_value = «True»
Когда доходит до shop_ok, то сообщений об ошибке не выдает, но выбор shop в меню остается не доступен.
Возможно я что-то делаю не так?
Сообщение отредактировал Евгений Рысь: 27 Июль 2011 — 19:46
-
0
- Наверх
#367
Алекс__
Отправлено 24 Июль 2011 — 15:27
Ммм, хорошо… Синтаксис был неправильный…((
http://lemmasoft.ren…hilit=dp_choice
Здесь рассказано, как правильно указать условия для <dp_choice>.
init python: shop_enable_value = False # убираем кавычки - теперь значение будет не текст "False", а логическое "ложь" shop_show_value = True dp_period(какой-то код) dp_choice("Shop", "shop", enable="shop_enable_value==True", show="shop_show_value==True" ) # проверяем значения переменных "shop_enable_value" и "shop_show_value" - если их значения "истина" (True без кавычек), то наши условия ("shop_enable_value==True" и "shop_show_value==True") вернут значения "истина" и все сработает. # если мы в начале присвоили значения переменным "shop_enable_value" и "shop_show_value" с кавычками ("True"), то получается, что значение - это некий текст (с учетом больших и маленьких букв). Тогда в условиях для <dp_choice> значения нужно было бы писать тоже в кавычках (одинарных, что бы не запутать Рен'пи) - enable="shop_enable_value == 'True' " label shop_ok: $ shop_enable_value = True # в этом примере значения везде используются без кавычек
Также, если значением переменной может быть только «истина» / «ложь», то
можно сократить код
if my_var — это тоже самое, что и if my_var == True
Тоесть код можно записать так:
init python: shop_enable_value = False shop_show_value = True dp_period(какой-то код) dp_choice("Shop", "shop", enable="shop_enable_value", show="shop_show_value" ) label shop_ok: $ shop_enable_value = True
-
0
- Наверх
#368
Евгений Рысь
Евгений Рысь
-
- Участники
-
- Cообщений: 7
Новичок
2
Обычный
Отправлено 24 Июль 2011 — 15:48
Алекс, спасибо за ссылку на доки и за код. Все работает отлично!
-
0
- Наверх
#369
Nekofrenik
Nekofrenik
1 134
Понивластелин
Отправлено 24 Июль 2011 — 19:23
Здравствуйте. Хотел бы спросить у гуру конкретно про эту ошибку
On line 15 of C:\Program Files\!Dvijok dlya novell\Nyaka-chan/game/script.rpy: end of line expected.
jump dush:
^
и узнать есть ли где-нибудь список выскакивающих ошибок с кратким указанием, что делать в таком случае?
-
0
- Наверх
#370
Евгений Рысь
Евгений Рысь
-
- Участники
-
- Cообщений: 7
Новичок
2
Обычный
Отправлено 24 Июль 2011 — 21:32
У тебя ошибка в синтаксисе. Вот правильный пример:
label start: scene ... a "text..." menu: "выбор А": jump aaa "выбор Б": jump bbb
-
1
- Наверх
#371
Алекс__
Отправлено 24 Июль 2011 — 23:44
end of line expected
Рен’пи ожидал конец строки, а обнаружил двоеточие… (должно быть просто <jump dush>) Двоеточие ставится в конце первой строки блока — оно показывает, что последующие строки этого блока должны иметь дополнительный отступ (indentation).
Главное в сообщениях об ошибке — номер строки в которой она обнаружена.
А вообще, сообщения об ошибках в Рен’пи простые и понятные…
Indentation mismatch (и другие ошибки, где есть слово Indentation) — все, что связано с неправильной индентацией строк (лишние пробелы или их не хватает)
end of line expected — когда логически строка должна закончиться, но Рен’пи находит еще какие-либо символы в ней (кроме комментариев).
…expects a non-empty block — пустой блок (так быть не должно). Либо исправить индентацию (в следующих строках добавить пробелы, если это действительно блок), либо добавить в пустой блок строку <pass> (команда, которая ничего не делает, но заполняет собой блок), либо убрать двоеточие в строке, если это на самом деле не блок.
expected ‘name’ not found — когда ожидается некое название (изображения, блока и т.д.), а вместо этого написано что-либо другое
name ‘имя переменной’ is not defined — когда используется переменная, значение которой ранее не определено (поэтому, лучше всего присваивать значения всем переменным в самом начале блока «старт»).
Name u’название блока’ is defined twice — два блока с одинаковыми названиями. Названия блоков должны быть уникальными (начинаться с буквы и быть одним словом, т.е. не содержать пробелов (можно использовать нижнее подчеркивание))
… is not terminated with newline. (Check strings and parenthesis.) — необходимо проверить соответствие открывающих и закрывающих скобок
invalid syntax — неправильный синтаксис (возможно пропущены запятые, ошибки в названиях команд (большие и маленькие буквы учитываются)
expected statement — Рен’пи не нашел известной ему команды (возможно ошибка в написании, либо пропущен знак $ в начале единичной строки на питоне)
%d format: a number is required, not str — если формат вывода данных <%d> (т.е. числовые данные), но при этом переменной присвоено текстовое значение.
expected ‘simple_expression’ not found. — проблема со значениями, которые указаны для команд (например xpos = «text» вместо числового значения — текст)
u’какое-то слово’ is not a keyword argument or valid child for… — для данной функции, введенная команда не является правильным аргументом или дочерним элементом (?) (ошибка в названии или для данной функции такая команда просто не применима)
Уфф, вот — что смог припомнить…))
-
2
- Наверх
#372
Евгений Рысь
Евгений Рысь
-
- Участники
-
- Cообщений: 7
Новичок
2
Обычный
Отправлено 27 Июль 2011 — 09:23
В РенПи действительно простые сообщения об ошибках, чтобы даже не программист смог разобраться. Но шпаргалку от Алекса я все-таки себе распечатал. Пригодится
-
0
- Наверх
#373
Vicente
Отправлено 27 Июль 2011 — 17:45
Помогите мне (опять).
У меня есть несколько(5) меню с выборами ответов(правильный и не правильные). Чтобы продвинуться дальше по сюжету нужно набрать определенное количество очков(т.е правильно ответить на эти вопросы). Если очков будет не достаточно, то должна быть плохая концовка.
Как мне это реализовать? К сожалению ничего из этого руководства мне не помогло.
-
0
- Наверх
#374
Евгений Рысь
Евгений Рысь
-
- Участники
-
- Cообщений: 7
Новичок
2
Обычный
Отправлено 27 Июль 2011 — 19:41
Ну, если кратко, то все просто.
1. Заводим переменную, в ней и будем хранить количество правильных ответов
$ victory = 0
2. В процессе игры, при правильном ответе увеличиваем значение переменной
$ victory += 1
3. В финале игры (или там где нужно) проверяем что получилось:
if victory == 5: #проверяем что количество правильных ответов равно 5
jump good_end #переходим к хорошему финалу
#… так же можно проверить и для другого количества правильных ответов, ну а для тех, кто не набрал:
jump bad_end
Вот небольшой пример в виде кода:
define e = Character('Eileen', color="#c8ffc8") label start: $ victory = 0 menu: "Правильный ответ": e "Ответ правильный" $victory += 5 "Ошибочный ответ": e "Ответ ошибочный" if victory == 5: e "Ты победил" return e "Ты проиграл" return
Собственно это все премудрости, если что не понятно, пиши.
-
0
- Наверх
#375
Vicente
Отправлено 27 Июль 2011 — 20:56
Делаю вроде бы все по Вашей инструкции, но что-то не получается.
Для начала:
$ victory = 0
Что означает цифра ноль?
victory — произвольное название?
$victory += 5
Пробел разве не нужен после доллара?
В общем делаю так:
В каждом меню ставлю переменные
В конце ставлю иф:
Запускаю игру, отвечаю правильно на все вопросы — выпадает «плохая концовка». Что же не правильно?
-
0
- Наверх
#376
Алекс__
Отправлено 27 Июль 2011 — 21:20
Vicente, вы точно ответили на 5 вопросов правильно? Не на 4, не на 6, т.к. у вас стоит условие <if victory == 5>.
Возможно в коде неправильно организованы jump’ы… Вообще, зачем прыгать по блокам? Можно задать вопросы подряд, разбавив неким текстом между менюшками…
label start: $ victory = 0 # начальное значение menu: "Первый вопрос": "Правильный ответ": $ victory +=1 "Неправильный ответ": pass menu: "Второй вопрос": "Правильный ответ": $ victory +=1 "Неправильный ответ": pass menu: "Третий вопрос": "Правильный ответ": $ victory +=1 "Неправильный ответ": pass menu: "Четвертый вопрос": "Правильный ответ": $ victory +=1 "Неправильный ответ": pass menu: "Пятый вопрос": "Правильный ответ": $ victory +=1 "Неправильный ответ": pass "Вот и все с вопросами. Теперь узнаем результат..." jump result label result: if victory >4: "Похоже, что это победа...))" else: "Всего %(victory)d правильных ответов, а надо - 5."
В процессе можно использовать Developer tool (Shift + d — язык должен быть английским) — в открывшемся меню выбрать Variable Viewer (просмотр переменных). Там будут написаны текущие значения игровых переменных.
Сообщение отредактировал Алекс__: 27 Июль 2011 — 21:24
-
0
- Наверх
#377
Vicente
Отправлено 27 Июль 2011 — 21:55
Использовала джамп, лейбл и элз и все получилось
В процессе можно использовать Developer tool
Очень полезная штука. Надеюсь она не работает в финальной версии. А то как-то по-читерски это выглядит.
-
0
- Наверх
#378
Алекс__
Отправлено 27 Июль 2011 — 22:04
Очень полезная штука. Надеюсь она не работает в финальной версии. А то как-то по-читерски это выглядит.
Дык, отключать надо…))
http://www.renpy.org…Developer_Tools
http://www.renpy.org…onfig.developer
http://www.renpy.org…asing-your-game
-
0
- Наверх
#379
Vicente
Отправлено 27 Июль 2011 — 22:13
Спасибо(в очередной раз). Я обещаю, что еще вернусь сюда со своими вопросами.
-
0
- Наверх
#380
Vicente
Отправлено 29 Июль 2011 — 18:41
А видео для вставки должно быть какие-то особенное? А то у меня игра зависает перед тем как оно должно воспроизвестись(AVI подогнано под размер окна(800х600))
Как можно ввести текст в центре на весь экран?
Сообщение отредактировал Vicente: 29 Июль 2011 — 19:04
-
0
- Наверх
need help with code errors
# fixed, thank you everyone for helping!
hey, im new to renpy coding and for some reason some er…
caked_pie
1/4/2023·r/RenPy
fixed, thank you everyone for helping!
hey, im new to renpy coding and for some reason some errors show up. i tried fixing them myself, but it didnt really work.heres the code:
I'm sorry, but errors were detected in your script. Please correct the
errors listed below, and try again.
File "game/script.rpy", line 32: choice menuitem expects a non-empty block.
"im grill":
^
File "game/script.rpy", line 41: Line is indented, but the preceding one-line python statement statement does not expect a block. Please check this line's indentation.
show c flushed
^
File "game/script.rpy", line 55: Line is indented, but the preceding one-line python statement statement does not expect a block. Please check this line's indentation.
show c angry
^
can anyone please explain what i have to do/fix? thank you!!
P.S. sorry for my bad english. English isnt my first language.
Add a comment…
Hi, thats not your code, thats the error log when you run it. Not a lot we can do.
However, the one about line 32 shows you have a menu choice («im grill»:) and it says its an empty block. You need to add something indented under that menu choice.
It could be some text «You selected im grill» or if you want a menu choice that does nothing at all you can use the word pass. Fix that first.
Hi, thats not your code, thats the error log when you run it. Not a lot we can do.
However, the one about line 32 shows you have a menu choice («im grill»:) and it says its an empty block. You need to add something indented under that menu choice.
It could be some text «You selected im grill» or if you want a menu choice that does nothing at all you can use the word pass. Fix that first.
oh woops
anyways, the error log now shows this
I’m sorry, but errors were detected in your script. Please correct the
errors listed below, and try again.
File "game/script.rpy", line 32: end of line expected.
"im grill":pass
^
everything else is the same
oh woops
anyways, the error log now shows this
I’m sorry, but errors were detected in your script. Please correct the
errors listed below, and try again.
File "game/script.rpy", line 32: end of line expected.
"im grill":pass
^
everything else is the same
You have to put pass on the line below it, with a proper indent.
it this is the menu item it should be like this
menu:
"im grill":
show c flushed
it this is the menu item it should be like this
menu:
"im grill":
show c flushed
You don’t need to use pass unless you want to have a menu choice that literally doesn’t do anything. If you did it would go on the next line, indented under the menu choice.
- Remove the word pass from both statements
- The jump statements need another indent. They should be indented under their respective menu item.
You don’t need to use pass unless you want to have a menu choice that literally doesn’t do anything. If you did it would go on the next line, indented under the menu choice.
- Remove the word pass from both statements
- The jump statements need another indent. They should be indented under their respective menu item.
2
for it to work correctly, it should look like this
menu:
"I'm a grill":
show c flushed
"What? I'm not a grill?":
jump no_grill
the pass statements should not be there
for it to work correctly, it should look like this
menu:
"I'm a grill":
show c flushed
"What? I'm not a grill?":
jump no_grill
the pass statements should not be there
for lines 41 and 55, is the rest of the code in the same label as them indented the same amount as they are? if not, move lines 41 and 55 to the same indentation as the lines around them, which should be parallel to their following dialogue/narration.
label example:
show c flushed
c "text"
menu:
"choice":
show c happy
c "i picked this"
etc
for lines 41 and 55, is the rest of the code in the same label as them indented the same amount as they are? if not, move lines 41 and 55 to the same indentation as the lines around them, which should be parallel to their following dialogue/narration.
label example:
show c flushed
c "text"
menu:
"choice":
show c happy
c "i picked this"
etc
could you explain what you mean? by » is the rest of the code in the same label as them indented the same amount as they are?»
does the code look like
label example1:
c "text"
show c angry
c "more text"
(here, the only issue is the image is indented too much).
or does it look something like this
label example2:
c "text"
show c angry
c "more text"
(here, the code nested in the label isn’t indented at all but the image still is).
because either of those would give you an error.
c "text"
and
show c angry
should have the same number of spaces at the beginning of their lines
does the code look like
label example1:
c "text"
show c angry
c "more text"
(here, the only issue is the image is indented too much).
or does it look something like this
label example2:
c "text"
show c angry
c "more text"
(here, the code nested in the label isn’t indented at all but the image still is).
because either of those would give you an error.
c "text"
and
show c angry
should have the same number of spaces at the beginning of their lines