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.
-
Breci
- Newbie
- Posts: 9
- Joined: Thu Dec 18, 2014 4:07 pm
- Organization: Edarion
- IRC Nick: Breci
- Skype: albatorb
- Location: France
- Contact:
Catching ScriptError exception
#1
Post
by Breci » Fri Feb 20, 2015 1:17 pm
Hello,
I have been trying to catch the ScriptError exception for a dynamic jump.
Here is the error when there is no try/except :
While running game code:
File «game/calendarfunctions.rpy», line 58, in script
python:
ScriptError: could not find label ‘test’.— Full Traceback ————————————————————
Full traceback:
File «C:UsersBreciDesktoprenpy-6.18.3-sdkrenpybootstrap.py», line 289, in bootstrap
renpy.main.main()
File «C:UsersBreciDesktoprenpy-6.18.3-sdkrenpymain.py», line 357, in main
run(restart)
File «C:UsersBreciDesktoprenpy-6.18.3-sdkrenpymain.py», line 77, in run
renpy.execution.run_context(True)
File «C:UsersBreciDesktoprenpy-6.18.3-sdkrenpyexecution.py», line 598, in run_context
context.run()
File «game/calendarfunctions.rpy», line 58, in script
python:
File «C:UsersBreciDesktoprenpy-6.18.3-sdkrenpyscript.py», line 595, in lookup
raise ScriptError(«could not find label ‘%s’.» % str(label))
ScriptError: could not find label ‘test’.Windows-7-6.1.7601-SP1
Ren’Py 6.18.3.761
testCalendar 0.0
Here is the error with the code when I’m using a catch/except:
Code: Select all
label start_new_day:
python:
try :
next_day()
except ScriptError :
renpy.jump("error")
I’m sorry, but an uncaught exception occurred.
While running game code:
File «game/calendarfunctions.rpy», line 58, in script
python:
File «game/calendarfunctions.rpy», line 61, in <module>
except ScriptError as e:
NameError: name ‘ScriptError’ is not defined— Full Traceback ————————————————————
Full traceback:
File «game/calendarfunctions.rpy», line 58, in script
python:
File «C:UsersBreciDesktoprenpy-6.18.3-sdkrenpyast.py», line 785, in execute
renpy.python.py_exec_bytecode(self.code.bytecode, self.hide, store=self.store)
File «C:UsersBreciDesktoprenpy-6.18.3-sdkrenpypython.py», line 1382, in py_exec_bytecode
exec bytecode in globals, locals
File «game/calendarfunctions.rpy», line 61, in <module>
except ScriptError :
NameError: name ‘ScriptError’ is not definedWindows-7-6.1.7601-SP1
Ren’Py 6.18.3.761
testCalendar 0.0
Any idea how I can manage to catch it?
-
PyTom
- Ren’Py Creator
- Posts: 15919
- 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: Catching ScriptError exception
#2
Post
by PyTom » Sat Feb 21, 2015 12:48 am
There isn’t a good way to catch exceptions in Ren’Py script code. Exceptions aren’t a general form of flow control.
What do you think about my adding config.missing_label_callback, a function that is called when a label is missing? It could return a label to jump to or run arbitrary cleanup code.
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
-
Breci
- Newbie
- Posts: 9
- Joined: Thu Dec 18, 2014 4:07 pm
- Organization: Edarion
- IRC Nick: Breci
- Skype: albatorb
- Location: France
- Contact:
Re: Catching ScriptError exception
#3
Post
by Breci » Sun Feb 22, 2015 3:44 pm
Because I need to check ir for different purpose I checked a bit more on the forum.
So now I am using the haslabel() function to solve my problem.
I’m making a game using Ren’py (based on python) and most errors aren’t shown, especially the errors in python code. Is there a possibility to check for possible errors at compile time and how do I get where some errors occur? If there are errors the game normally doesn’t run or breaks at the a errors appearance without a message.Is there maybe a file, where they are written in or something like that? Or do I have to debug using logs everywhere?
asked Dec 27, 2013 at 2:01
0
Compile errors will be shown when you first try to compile the RPY files. They will be put in «errors.txt» in your project directory. Most errors are not found at compile-time, however, and will only show up once you encounter them at run-time.
You can use Lint to check for some common errors (It’s called «Check Script (Lint)»), but mostly you’ll have to playtest to ensure there are no errors. Errors during playback should pop up a gray screen showing the error and traceback with the option to Ignore, Rollback, or Quit. Is this screen not showing up for you?
answered Mar 2, 2015 at 23:08
If you’re looking for some kind of intellisense like you have for some languages, where as you write the code the IDE shows errors, then it doesn’t exist. You have to launch the game so that the code is compiled, just then Ren’py will show you errors. You can see them in the editor or in the errors.txt that Ren’Py creates. To test you python code you can launch the game and type Shift + O to open the console.
answered Jul 6, 2019 at 23:33
-
GameMaker174
- Сообщений: 37
- Зарегистрирован: 24 ноя 2015, 17:55
- Откуда: Челябинск
Re: Вопросы-ответы по RenPy
Эм…такой вопрос возник, можно ли добавить картинку персонажа сразу в init, так что бы картинка персонажа, сразу вставлялась в текст???что бы не писать каждый раз точто перс появляется на фоне спасибо за ответ заранее)))
-
Skaz
- Администратор
- Сообщений: 1987
- Зарегистрирован: 30 июл 2015, 14:52
- Контактная информация:
Re: Вопросы-ответы по RenPy
Сообщение Skaz » 24 дек 2015, 12:03
Вопрос сформулирован непонятно.
Напишите подробнее чего хотите и приведите пример кода.
-
Vitamin05
- Сообщений: 156
- Зарегистрирован: 31 июл 2015, 19:59
Re: Вопросы-ответы по RenPy
Сообщение Vitamin05 » 07 янв 2016, 11:44
Здравствуйте, решил чисто для себя попробовать RenPy, ну и попробовать силы решил в русификации Академии Эшворда. Скачал и установил RenPy, редактором скриптов открыл скрипт «achievements.rpy» и попробовал перевести текстовые сообщения. Получил файл скрипта такого вида.
Свернутый текст
Сохранив скрипт попробовал запустить игру и получил следующую ошибку:
Свернутый текст
Насколько я из сообщения понял, игра ругается на кодировку «UTF8», видимо весь введённый мной в скрипт русский текст отображается именно в ней. Возникает вопрос, куда посмотреть, где почитать и что добавить, чтобы игра увидела русские буквы.
-
Khan
- Сообщений: 877
- Зарегистрирован: 30 июл 2015, 17:38
- Контактная информация:
Re: Вопросы-ответы по RenPy
Сообщение Khan » 07 янв 2016, 13:32
Vitamin05 писал(а):Здравствуйте, решил чисто для себя попробовать RenPy, ну и попробовать силы решил в русификации Академии Эшворда. Скачал и установил RenPy, редактором скриптов открыл скрипт «achievements.rpy» и попробовал перевести текстовые сообщения. Получил файл скрипта такого вида.
Свернутый текст
Сохранив скрипт попробовал запустить игру и получил следующую ошибку:
Свернутый текст
Насколько я из сообщения понял, игра ругается на кодировку «UTF8», видимо весь введённый мной в скрипт русский текст отображается именно в ней. Возникает вопрос, куда посмотреть, где почитать и что добавить, чтобы игра увидела русские буквы.
Необходимо изменить саму кодировку файла на UTF8.
После перевода могут появиться артефакты в коде, их надо будет необходимо устранить.
-
Prohogiy
- Сообщений: 6
- Зарегистрирован: 09 янв 2016, 05:12
Re: Вопросы-ответы по RenPy
Сообщение Prohogiy » 09 янв 2016, 05:22
Как сделать заставку, которая автоматически включалась бы перед стартовым меню?
-
Prohogiy
- Сообщений: 6
- Зарегистрирован: 09 янв 2016, 05:12
Re: Вопросы-ответы по RenPy
Сообщение Prohogiy » 13 янв 2016, 09:50
Прошу прощения за беспокойство. Сам разобрался.
-
SmoOke
- Сообщений: 1
- Зарегистрирован: 17 янв 2016, 16:45
Re: Вопросы-ответы по RenPy
Сообщение SmoOke » 17 янв 2016, 16:48
Помогите!
В общем делаю вот так — стоит выбор,2 локации. и эти 2 локации нам нужно посетить.
1 лок — душ
2 лок — туалет.
Как сделать так,чтобы если мы пошли сначала в душ,а потом в туалет,в туалете не выпадало опять меню «в душ»?
Так же и наоборот
-
Skaz
- Администратор
- Сообщений: 1987
- Зарегистрирован: 30 июл 2015, 14:52
-
Контактная информация:
Re: Вопросы-ответы по RenPy
Сообщение Skaz » 18 янв 2016, 12:47
SmoOke писал(а):Как сделать так,чтобы если мы пошли сначала в душ,а потом в туалет,в туалете не выпадало опять меню «в душ»?
Так же и наоборот
Пример кода в студию.
-
Prohogiy
- Сообщений: 6
- Зарегистрирован: 09 янв 2016, 05:12
Re: Вопросы-ответы по RenPy
Сообщение Prohogiy » 27 янв 2016, 05:28
С уважением и надеждой, здравствуйте.
Здесь разобраться самостоятельно как-то не получается.
Дело вот в чём.
Картинки объявлены правильно, потому что как изображения они нормально отображаются. Но только прописываешь их в анимацию, программа говорит, что файлы не загружаемые.
Помогите, если не трудно.
-
Skaz
- Администратор
- Сообщений: 1987
- Зарегистрирован: 30 июл 2015, 14:52
- Контактная информация:
Re: Вопросы-ответы по RenPy
Сообщение Skaz » 27 янв 2016, 07:30
Prohogiy писал(а):Картинки объявлены правильно, потому что как изображения они нормально отображаются. Но только прописываешь их в анимацию, программа говорит, что файлы не загружаемые.
Помогите, если не трудно.
Оставляя подобные сообщение, добавляйте
а) Код, который работает
б) Код, который не работает.
в) Текст ошибки
-
Prohogiy
- Сообщений: 6
- Зарегистрирован: 09 янв 2016, 05:12
Re: Вопросы-ответы по RenPy
Сообщение Prohogiy » 27 янв 2016, 17:19
Прошу прощения. Сейчас исправлюсь.
Когда показываешь картинку
scene bg blak
show star28 at Position(xpos=.5, ypos=.5, xanchor=0, yanchor=0)
всё работает.
Стоит прописать самую простую анимацию, вот так:
image star1a = Animation(
«star6.png», 1.0,
«star16.png», 1.0,
«star28.png», 1.0)
выдаёт ошибку:
C:Torrenpy-6.9.3-rusItana/game/script.rpy:36 Image star1a uses file ‘star6.png’, which is not loadable.
C:Torrenpy-6.9.3-rusItana/game/script.rpy:36 Image star1a uses file ‘star16.png’, which is not loadable.
C:Torrenpy-6.9.3-rusItana/game/script.rpy:36 Image star1a uses file ‘star28.png’, which is not loadable.
-
Dron
- Сообщений: 346
- Зарегистрирован: 31 июл 2015, 15:30
Re: Вопросы-ответы по RenPy
Сообщение Dron » 27 янв 2016, 18:11
Prohogiy писал(а):Прошу прощения. Сейчас исправлюсь.
Когда показываешь картинку
scene bg blak
show star28 at Position(xpos=.5, ypos=.5, xanchor=0, yanchor=0)
всё работает.
Стоит прописать самую простую анимацию, вот так:
image star1a = Animation(
«star6.png», 1.0,
«star16.png», 1.0,
«star28.png», 1.0)
выдаёт ошибку:
C:Torrenpy-6.9.3-rusItana/game/script.rpy:36 Image star1a uses file ‘star6.png’, which is not loadable.C:Torrenpy-6.9.3-rusItana/game/script.rpy:36 Image star1a uses file ‘star16.png’, which is not loadable.
C:Torrenpy-6.9.3-rusItana/game/script.rpy:36 Image star1a uses file ‘star28.png’, which is not loadable.
Возможно я не прав, но у вас наверное картинки star6.png и т.п. лежат не в папке game, а где-то в подпапках ? Потому что обычно такое сообщение возникает при неправильном пути к изображению. Путь считается относительно папки game. А в первом примере путь как раз не задается, там вызывается уже описанное в другом месте (с правильным путем) изображение.
В любом деле главное — творческий подход.
-
Prohogiy
- Сообщений: 6
- Зарегистрирован: 09 янв 2016, 05:12
Re: Вопросы-ответы по RenPy
Сообщение Prohogiy » 28 янв 2016, 11:21
Вы совершенно правы. Огромное спасибо!
Просто в демке никак не видно, что для анимации нужно прописывать полный путь к картинке.
Теперь возник другой вопрос.
А можно ли сделать, чтобы заставка, сделанная с помощью label splashscreen, при первом запуске игры была не кликабельна, то есть не выключалась при нажатии на кнопку мыши? А при последующих запусках выключалась, чтобы не грузить пользователя повторными просмотрами.
И ещё. Последняя версия RenPy у меня тоже есть, но она глючит. Не отображаются переходы. Вместо них экран в клеточку. Я думаю, что это из-за слабости компа. Процессор: два ядра по 1,6 ГГц (нетбук). Или могут быть другие причины?
-
Prohogiy
- Сообщений: 6
- Зарегистрирован: 09 янв 2016, 05:12
Re: Вопросы-ответы по RenPy
Сообщение Prohogiy » 29 янв 2016, 04:00
Прошу прощения, если слишком много спрашиваю, но когда очень хочется освоить эту программу, вопросы сыпятся, как из рога изобилия.
Поэтому буду спрашивать.
1. SMAnimation работает только с цветом фона, как в демке, или может работать и с другими объектами? Например, с картинками.
2. Короткая анимация (около 1,5 с) появляется в случайном месте экрана.
$ gtms1 = renpy.random.randint(1, 948)
$ gtms2 = renpy.random.randint(1, 568)
show star1b at Position(xpos=gtms1, ypos=gtms2, xanchor=0.5, yanchor=0.5)
Как это зациклить, чтобы для каждой новой прокрутки генерировалось новое местоположение?
-
Skaz
- Администратор
- Сообщений: 1987
- Зарегистрирован: 30 июл 2015, 14:52
- Контактная информация:
Re: Вопросы-ответы по RenPy
Сообщение Skaz » 29 янв 2016, 10:51
Prohogiy писал(а):2. Короткая анимация (около 1,5 с) появляется в случайном месте экрана.
$ gtms1 = renpy.random.randint(1, 948)
$ gtms2 = renpy.random.randint(1, 568)
show star1b at Position(xpos=gtms1, ypos=gtms2, xanchor=0.5, yanchor=0.5)
Как это зациклить, чтобы для каждой новой прокрутки генерировалось новое местоположение?
Насколько я понял, вам нужен оператор цикла.
Почитайте про цикл while здесь:
http://www.renpy.org/doc/html/conditional.html
-
tukreb
- Сообщений: 14
- Зарегистрирован: 30 ноя 2015, 04:36
Re: Вопросы-ответы по RenPy
Сообщение tukreb » 27 фев 2016, 22:47
Кстати, побуду КО, если в курсе.
Но файл script.rpy можно здорово разгрузить, разбив на множество под файлов, по крайне мере вытащить инициализацию картинок в отдельный файл.
-
tukreb
- Сообщений: 14
- Зарегистрирован: 30 ноя 2015, 04:36
Re: Вопросы-ответы по RenPy
Сообщение tukreb » 28 фев 2016, 20:57
Если у кого-нить идея, как лучше реализовать систему ивентов? Чтобы она была понятной и не сложной. Та, что в Тренере Ведьм, как то выглядит не совсем понятно, либо я не уловил всей её сути.
-
Skaz
- Администратор
- Сообщений: 1987
- Зарегистрирован: 30 июл 2015, 14:52
- Контактная информация:
Re: Вопросы-ответы по RenPy
Сообщение Skaz » 29 фев 2016, 11:02
tukreb писал(а):Если у кого-нить идея, как лучше реализовать систему ивентов? Чтобы она была понятной и не сложной. Та, что в Тренере Ведьм, как то выглядит не совсем понятно, либо я не уловил всей её сути.
Система ивентов в Тренере ведьмы действительно нетривиальна. Достоинство ее в том, что можно задать условия выполнения ивентов большой сложности. Например:
Исполнить ивент А только в том случае, если распущенность Гермионы между 6 и 9, при этом не выполнен ивент С, а ивент В выполнен хотя бы трижды, но с момента его последнего выполнения прошло не больше суток игрового времени.
Исполнить ивент А два только раза, второй раз можно исполнить только если после первого исполнения прошло больше двух суток игрового времени.
Условия выполнения всех ивентов описаны в одной секции, что довольно наглядно, есть система разрешения конфликтов (если одновременно наступают условия выполнения двух ивентов) и пр.
Из-за такой навороченности пользоваться ей без подробного описания классов вряд ли получится.
Если нужно что-то совсем простое, можно предложить систему, которой пользовался Акабур. На каждый ивент по одному или несколько флажков (флажок — логическая или целая переменная). После выполнения ивента флажок меняется.
Чтобы не таскать кучу флажков все это можно запихнуть в единый словарь. Если посмотреть реализацию системы ивентов в Ведьме, то, грубо говоря, там так и сделано, а для работы со словарем состояний ивентов написаны классы.
-
tukreb
- Сообщений: 14
- Зарегистрирован: 30 ноя 2015, 04:36
Re: Вопросы-ответы по RenPy
Сообщение tukreb » 01 мар 2016, 01:00
Skaz писал(а):
tukreb писал(а):Если у кого-нить идея, как лучше реализовать систему ивентов? Чтобы она была понятной и не сложной. Та, что в Тренере Ведьм, как то выглядит не совсем понятно, либо я не уловил всей её сути.
Система ивентов в Тренере ведьмы действительно нетривиальна. Достоинство ее в том, что можно задать условия выполнения ивентов большой сложности. Например:
Исполнить ивент А только в том случае, если распущенность Гермионы между 6 и 9, при этом не выполнен ивент С, а ивент В выполнен хотя бы трижды, но с момента его последнего выполнения прошло не больше суток игрового времени.
Исполнить ивент А два только раза, второй раз можно исполнить только если после первого исполнения прошло больше двух суток игрового времени.Условия выполнения всех ивентов описаны в одной секции, что довольно наглядно, есть система разрешения конфликтов (если одновременно наступают условия выполнения двух ивентов) и пр.
Из-за такой навороченности пользоваться ей без подробного описания классов вряд ли получится.
Если нужно что-то совсем простое, можно предложить систему, которой пользовался Акабур. На каждый ивент по одному или несколько флажков (флажок — логическая или целая переменная). После выполнения ивента флажок меняется.
Чтобы не таскать кучу флажков все это можно запихнуть в единый словарь. Если посмотреть реализацию системы ивентов в Ведьме, то, грубо говоря, там так и сделано, а для работы со словарем состояний ивентов написаны классы.
Частично я разобрался в сути, и уже заметил некоторые удобные возможности в условиях, но есть некоторые сложности в частности, я не понимаю, почему не идёт на True, если я правильно понял, как работает это
Код: Выбрать все
this.Where({"DAY"}) .AddStep("begin_01:test-true", ready= lambda e: day == 5 )
Далее
Код: Выбрать все
label begin_01:
m "Хм....."
m "Хмхмхм.."
menu:
" True " if this.Has("test-true"):
m "test-true is True"
" False ":
m "test-true is False"
$this.begin_01.Finalize()
jump night_start
В данном случае всегда получается False, что я упустил, если у Вас есть идеи?
-
tukreb
- Сообщений: 14
- Зарегистрирован: 30 ноя 2015, 04:36
Re: Вопросы-ответы по RenPy
Сообщение tukreb » 01 мар 2016, 01:21
А уже всё понял как это работает, если кому интересно, то этот код всё объяснит
Код: Выбрать все
this.Where({"DAY"}) .AddStep("begin_01:test-true", ready= lambda e: day == 5 )
this .AddStep("begin_00", ready= lambda e: day == 6 )
После выполнения begin_01 и его завершение, на флаг test-true выставиться true.
Код: Выбрать все
label begin_00:
m "Хм....."
m "Хм....Хм....."
menu:
" True " if this.Has("test-true"):
m "test-true is True"
" False ":
m "test-true is False"
$this.begin_00.Finalize()
jump night_start
label begin_01:
m "Хм....."
m "Хм....Хм....."
menu:
" True " if this.Has("test-true"):
m "test-true is True"
" False ":
m "test-true is False"
$this.begin_01.Finalize()
jump night_start
и правда это избавляет от ненужный переменных в дальнейшем.
-
Skaz
- Администратор
- Сообщений: 1987
- Зарегистрирован: 30 июл 2015, 14:52
-
Контактная информация:
Re: Вопросы-ответы по RenPy
Сообщение Skaz » 01 мар 2016, 10:20
tukreb писал(а):А уже всё понял как это работает, если кому интересно, то этот код всё объяснит
Энтузиазм радует.
В качестве подарка:
Можно сделать еще более изящно.
Код: Выбрать все
this.Where({"DAY"}) .AddStep("begin_01", ready= lambda e: day == 5 )
this .AddStep("begin_00", ready= lambda e: day == 6 )
Код: Выбрать все
label begin_00:
m "Хм....."
m "Хм....Хм....."
menu:
" True " if this.begin_01.IsDone():
m "test-true is True"
" False ":
m "test-true is False"
wtevent.Finalize("night_start")
Ну и т.п.
-
tukreb
- Сообщений: 14
- Зарегистрирован: 30 ноя 2015, 04:36
Re: Вопросы-ответы по RenPy
Сообщение tukreb » 01 мар 2016, 18:53
Спасибо, осталось только разобраться, как определить $wtevent., чтобы она заработала, а то лишь объявлена.
В моей случае, пока проще заменить на это $this.begin_00.Finalize(«night_start») Пока не могу разобраться с $wtevent
-
Skaz
- Администратор
- Сообщений: 1987
- Зарегистрирован: 30 июл 2015, 14:52
- Контактная информация:
Re: Вопросы-ответы по RenPy
Сообщение Skaz » 02 мар 2016, 10:20
tukreb писал(а):В моей случае, пока проще заменить на это $this.begin_00.Finalize(«night_start»)
Да, думаю, в новом проекте так будет проще.
-
tukreb
- Сообщений: 14
- Зарегистрирован: 30 ноя 2015, 04:36
Re: Вопросы-ответы по RenPy
Сообщение tukreb » 04 мар 2016, 04:02
Глупости написал Потом перефразирую может быть. (можно удалить это сообщение)
-
tukreb
- Сообщений: 14
- Зарегистрирован: 30 ноя 2015, 04:36
Re: Вопросы-ответы по RenPy
Сообщение tukreb » 04 мар 2016, 04:53
нужно сделать кнопку удалить или уберите ограничение с редактирование А то, плодятся сообщения. Я всё мучаю $wtevent.Finalize пытаясь понять секрет, как его заставить заработать
Вернуться в «Разработка игр на RenPy»
Кто сейчас на форуме
Количество пользователей, которые сейчас просматривают этот форум: нет зарегистрированных пользователей и 0 гостей