Everlasting Summer

Everlasting Summer

New Mods Menu
 This topic has been pinned, so it's probably important
Eric Kotato  [developer] 17 Feb, 2015 @ 12:21pm
Баги
Сюда писать в случае обнаружения багов.
< >
Showing 1-10 of 10 comments
Непротив если сюда трейсбэк запихну?
I'm sorry, but an uncaught exception occurred.

While running game code:
File "D:/Steam/steamapps/workshop/content/331470/392818466/mods_rad/mod_selector/mod_selector.rpy", line 80, in <module>
RuntimeError: dictionary changed size during iteration

-- Full Traceback ------------------------------------------------------------

Full traceback:
File "C:/Program Files (x86)/Steam/steamapps/workshop/content/331470/392818466/mods_rad/mod_selector/mod_selector.rpyc", line 73, in script
File "C:\Program Files (x86)\Steam\steamapps\common\Everlasting Summer\renpy\ast.py", line 785, in execute
renpy.python.py_exec_bytecode(self.code.bytecode, self.hide, store=self.store)
File "C:\Program Files (x86)\Steam\steamapps\common\Everlasting Summer\renpy\python.py", line 1449, in py_exec_bytecode
exec bytecode in globals, locals
File "D:/Steam/steamapps/workshop/content/331470/392818466/mods_rad/mod_selector/mod_selector.rpy", line 80, in <module>
RuntimeError: dictionary changed size during iteration

Windows-7-6.1.7601-SP1
Ren'Py 6.99.4.467
Everlasting Summer 1.2
ВАРЕЖКА 15 Oct, 2015 @ 3:22am 
При запуске игры выдаёт: I'm sorry, but an uncaught exception occurred.

While running game code:
File "D:/Steam/steamapps/workshop/content/331470/392818466/mods_rad/mod_selector/mod_selector.rpy", line 73, in script
init 9000 python:
File "D:/Steam/steamapps/workshop/content/331470/392818466/mods_rad/mod_selector/mod_selector.rpy", line 80, in <module>
for m in mod_tags:
RuntimeError: dictionary changed size during iteration

-- Full Traceback ------------------------------------------------------------

Full traceback:
File "D:/Steam/steamapps/workshop/content/331470/392818466/mods_rad/mod_selector/mod_selector.rpy", line 73, in script
init 9000 python:
File "D:\Steam\steamapps\common\Everlasting Summer\renpy\ast.py", line 785, in execute
renpy.python.py_exec_bytecode(self.code.bytecode, self.hide, store=self.store)
File "D:\Steam\steamapps\common\Everlasting Summer\renpy\python.py", line 1449, in py_exec_bytecode
exec bytecode in globals, locals
File "D:/Steam/steamapps/workshop/content/331470/392818466/mods_rad/mod_selector/mod_selector.rpy", line 80, in <module>
for m in mod_tags:
RuntimeError: dictionary changed size during iteration

Windows-7-6.1.7601-SP1
Ren'Py 6.99.4.467
Everlasting Summer 1.2
Moé Homu 8 Dec, 2015 @ 10:01am 
I'm sorry, but an uncaught exception occurred.

While running game code:
File "game/mods_rad/mod_selector/mod_selector.rpy", line 66, in <module>
RuntimeError: dictionary changed size during iteration

-- Full Traceback ------------------------------------------------------------

Full traceback:
File "C:\Program Files (x86)\Steam\steamapps\common\Everlasting Summer\renpy\bootstrap.py", line 288, in bootstrap
renpy.main.main()
File "C:\Program Files (x86)\Steam\steamapps\common\Everlasting Summer\renpy\main.py", line 366, in main
game.context().run(node)
File "C:/Program Files (x86)/Steam/steamapps/workshop/content/331470/562240996/mods_rad/mod_selector/mod_selector.rpyc", line 51, in script
�m }$�5̥~�� �A��j%ƃ�ԏ#�<\y'��؃\D�� |���0b�
File "C:\Program Files (x86)\Steam\steamapps\common\Everlasting Summer\renpy\ast.py", line 785, in execute
renpy.python.py_exec_bytecode(self.code.bytecode, self.hide, store=self.store)
File "C:\Program Files (x86)\Steam\steamapps\common\Everlasting Summer\renpy\python.py", line 1449, in py_exec_bytecode
exec bytecode in globals, locals
File "game/mods_rad/mod_selector/mod_selector.rpy", line 66, in <module>
RuntimeError: dictionary changed size during iteration

Windows-8-6.2.9200
Ren'Py 6.99.4.467
Everlasting Summer 1.2
```
I'm sorry, but an uncaught exception occurred.

While loading <'Image' u'mods_rad/side_menu.png'>:
IOError: Couldn't find file 'mods_rad/side_menu.png'.

-- Full Traceback ------------------------------------------------------------

Full traceback:
File "renpy/common/_layout/screen_main_menu.rpym", line 28, in script
python hide:
File "renpy/ast.py", line 923, in execute
renpy.python.py_exec_bytecode(self.code.bytecode, self.hide, store=self.store)
File "renpy/python.py", line 2235, in py_exec_bytecode
exec(bytecode, globals, locals)
File "renpy/common/_layout/screen_main_menu.rpym", line 28, in <module>
python hide:
File "renpy/common/_layout/screen_main_menu.rpym", line 35, in _execute_python_hide
ui.interact()
File "renpy/ui.py", line 298, in interact
rv = renpy.game.interface.interact(roll_forward=roll_forward, **kwargs)
File "renpy/display/core.py", line 3276, in interact
repeat, rv = self.interact_core(preloads=preloads, trans_pause=trans_pause, pause=pause, pause_start=pause_start, **kwargs)
File "renpy/display/core.py", line 3793, in interact_core
self.draw_screen(root_widget, fullscreen_video, (not fullscreen_video) or video_frame_drawn)
File "renpy/display/core.py", line 2521, in draw_screen
renpy.config.screen_height,
File "render.pyx", line 492, in renpy.display.render.render_screen
File "render.pyx", line 263, in renpy.display.render.render
File "renpy/display/layout.py", line 814, in render
surf = render(child, width, height, cst, cat)
File "render.pyx", line 170, in renpy.display.render.render
File "render.pyx", line 263, in renpy.display.render.render
File "renpy/display/transition.py", line 368, in render
top = render(self.new_widget, width, height, st, at)
File "render.pyx", line 170, in renpy.display.render.render
File "render.pyx", line 263, in renpy.display.render.render
File "renpy/display/layout.py", line 814, in render
surf = render(child, width, height, cst, cat)
File "render.pyx", line 170, in renpy.display.render.render
File "render.pyx", line 263, in renpy.display.render.render
File "renpy/display/layout.py", line 814, in render
surf = render(child, width, height, cst, cat)
File "render.pyx", line 170, in renpy.display.render.render
File "render.pyx", line 263, in renpy.display.render.render
File "renpy/display/screen.py", line 681, in render
child = renpy.display.render.render(self.child, w, h, st, at)
File "render.pyx", line 170, in renpy.display.render.render
File "render.pyx", line 263, in renpy.display.render.render
File "renpy/display/layout.py", line 814, in render
surf = render(child, width, height, cst, cat)
File "render.pyx", line 170, in renpy.display.render.render
File "render.pyx", line 263, in renpy.display.render.render
File "renpy/display/layout.py", line 1238, in render
st, at)
File "render.pyx", line 170, in renpy.display.render.render
File "render.pyx", line 263, in renpy.display.render.render
File "renpy/display/layout.py", line 814, in render
surf = render(child, width, height, cst, cat)
File "render.pyx", line 170, in renpy.display.render.render
File "render.pyx", line 263, in renpy.display.render.render
File "renpy/display/transform.py", line 715, in render
return transform_render(self, width, height, st, at)
File "accelerator.pyx", line 140, in renpy.display.accelerator.transform_render
File "render.pyx", line 263, in renpy.display.render.render
File "renpy/display/im.py", line 607, in render
return cache.get(self, render=True)
File "renpy/display/im.py", line 271, in get
surf = image.load()
File "renpy/display/im.py", line 688, in load
raise e
IOError: Couldn't find file 'mods_rad/side_menu.png'.

Windows-10-10.0.17763
Ren'Py 7.4.8.1895
Everlasting Summer 1.2
Sun Sep 26 19:29:18 2021
```
TheRedoc ;( 7 Mar, 2023 @ 4:37pm 
Приветствую, мод обрабатывает то, что положено в mods не так, как в бл, из-за чего возникает ошибка
В стандартном меню данной ошибки не возникает
Уточню, в переменную mods передаётся не текст


I'm sorry, but an uncaught exception occurred. While running game code: File "../../workshop/content/331470/392818466/mod_selector/mod_selector.rpy", line 104, in execute screen mods_menu_rad(): File "../../workshop/content/331470/392818466/mod_selector/mod_selector.rpy", line 104, in execute screen mods_menu_rad(): File "../../workshop/content/331470/392818466/mod_selector/mod_selector.rpy", line 107, in execute python: File "../../workshop/content/331470/392818466/mod_selector/mod_selector.rpy", line 109, in <module> what_items = [(k, "%s %s" %( "" if k.find("__") == -1 else "{color=#117743}[["+k.split("__")[0]+"]{/color}", __(mods[k]) )) for k in filter_mods_lst(mods.keys())] TypeError: expected string or buffer -- Full Traceback ------------------------------------------------------------ Full traceback: File "renpy/common/_layout/screen_main_menu.rpym", line 28, in script python hide: File "renpy/ast.py", line 928, in execute renpy.python.py_exec_bytecode(self.code.bytecode, self.hide, store=self.store) File "renpy/python.py", line 2245, in py_exec_bytecode exec(bytecode, globals, locals) File "renpy/common/_layout/screen_main_menu.rpym", line 28, in <module> python hide: File "renpy/common/_layout/screen_main_menu.rpym", line 35, in _execute_python_hide ui.interact() File "renpy/ui.py", line 298, in interact rv = renpy.game.interface.interact(roll_forward=roll_forward, **kwargs) File "renpy/display/core.py", line 3325, in interact repeat, rv = self.interact_core(preloads=preloads, trans_pause=trans_pause, pause=pause, pause_start=pause_start, **kwargs) File "renpy/display/core.py", line 3737, in interact_core root_widget.visit_all(lambda i : i.per_interact()) File "renpy/display/core.py", line 568, in visit_all d.visit_all(callback, seen) File "renpy/display/core.py", line 568, in visit_all d.visit_all(callback, seen) File "renpy/display/core.py", line 568, in visit_all d.visit_all(callback, seen) File "renpy/display/core.py", line 568, in visit_all d.visit_all(callback, seen) File "renpy/display/screen.py", line 436, in visit_all callback(self) File "renpy/display/core.py", line 3737, in <lambda> root_widget.visit_all(lambda i : i.per_interact()) File "renpy/display/screen.py", line 447, in per_interact self.update() File "renpy/display/screen.py", line 637, in update self.screen.function(**self.scope) File "../../workshop/content/331470/392818466/mod_selector/mod_selector.rpy", line 104, in execute screen mods_menu_rad(): File "../../workshop/content/331470/392818466/mod_selector/mod_selector.rpy", line 104, in execute screen mods_menu_rad(): File "../../workshop/content/331470/392818466/mod_selector/mod_selector.rpy", line 107, in execute python: File "../../workshop/content/331470/392818466/mod_selector/mod_selector.rpy", line 109, in <module> what_items = [(k, "%s %s" %( "" if k.find("__") == -1 else "{color=#117743}[["+k.split("__")[0]+"]{/color}", __(mods[k]) )) for k in filter_mods_lst(mods.keys())] File "renpy/translation/__init__.py", line 476, in translate_string return stl.translate(s) File "renpy/translation/__init__.py", line 417, in translate notags = re.sub(r"\{\#.*?\}", "", old) File "/home/tom/ab/renpy-build/tmp/install.linux-x86_64/lib/python2.7/re.py", line 155, in sub TypeError: expected string or buffer Windows-10-10.0.19041 Ren'Py 7.4.11.2266 Everlasting Summer 1.6 Wed Mar 8 07:30:59 2023

Last edited by TheRedoc ;(; 7 Mar, 2023 @ 4:42pm
Eric Kotato  [developer] 8 Mar, 2023 @ 11:31am 
@TheRedoc :(
Очень странно, не могу воспроизвести ошибку.

Originally posted by TheRedoc :(:
Уточню, в переменную mods передаётся не текст

По коду mods тоже не как текст обрабатывается. В mods[k] тоже всё нормально должно быть, ибо там должна быть строка с названием мода, а чистая установка работает без проблем, поэтому сложно сказать, что не так.

Могло ли ещё что-то повлиять на переменную mods извне? Другой мод, например.
Last edited by Eric Kotato; 8 Mar, 2023 @ 11:45am
TheRedoc ;( 8 Mar, 2023 @ 12:16pm 
Originally posted by Eric Kotato:
@TheRedoc :(
Очень странно, не могу воспроизвести ошибку.

Originally posted by TheRedoc :(:
Уточню, в переменную mods передаётся не текст

По коду mods тоже не как текст обрабатывается. В mods[k] тоже всё нормально должно быть, ибо там должна быть строка с названием мода, а чистая установка работает без проблем, поэтому сложно сказать, что не так.

Могло ли ещё что-то повлиять на переменную mods извне? Другой мод, например.

На это влияет конкретно мой мод, который модифицирует отдельно кнопку моего мода. Вместо замены полного экрана (например, как в Одержимой, чего стоило бы избегать, ИМХО), в mods[k] записывается значение, являющееся экземпляром класса renpy.display.behavior.ImageButton от чего, само собой, выскакивает трейс, т.к. ваш мод подразумевает, что mods[k] может содержать только текст, что в корне неверно (тк существуют вещи, которые стандартный экран обработает правильно). Бл не обрабатывает содержимое mods[k], а кладёт содержимое в button, от чего данной ошибки, само собой, не возникает
Как вариант решения, при переборе модов проверять, является ли то, что находится в mods[k] строкой
Если да - обрабатываем, нет - ставим дефолтные настройки или считываем их из другого места, если мод разрешает это
При этом есть ещё один немаловажный момент
textbutton данный тип, скорее всего, не поддерживает, от чего придется использовать button (если правильно помню код)
Last edited by TheRedoc ;(; 8 Mar, 2023 @ 1:27pm
Eric Kotato  [developer] 8 Mar, 2023 @ 3:35pm 
@TheRedoc :(
Ну начнём с того, что это не совсем баг моего мода. Класть в mods что-то кроме текста — это скорее хак, чем фича. В Одержимой, полагаю, поэтому и решили заменить полностью экран, чтобы избавить себя от таких проблем.

Главная проблема здесь в том, что все варианты предусмотреть не выйдет заранее, поэтому скорее всего, для каждого придётся делать отдельно, хотя я бы предпочёл что-то, что покрывает большинство случаев.

Originally posted by TheRedoc :(:
нет - ставим дефолтные настройки или считываем их из другого места, если мод разрешает это

Вот тут бы поконкретнее. Что подразумевается под дефолтными настройками? Из какого другого места считывать?
Last edited by Eric Kotato; 8 Mar, 2023 @ 3:35pm
TheRedoc ;( 8 Mar, 2023 @ 8:47pm 
Originally posted by Eric Kotato:
@TheRedoc :(
Ну начнём с того, что это не совсем баг моего мода.
Ну, я считаю это багом условно, т.к. до этого никто не пытался изменить отрисовку своей кнопки таким методом, либо до меня не доходили сведения об этом (хоть и это оказалось позволимым не прибегая к костылям) + при этом вряд-ли разработчик БЛ расчитывал, что туда будут класть полноценную кнопку. Мне не сильно сложно адаптировать кнопку путём проверки, включен ли фильтр, если да - просто класть в mods обычную строку, но так совсем неинтересно
Originally posted by Eric Kotato:
Класть в mods что-то кроме текста — это скорее хак, чем фича.
Возможно оно и так, но с другой стороны это решение будет работать вне зависимости, менял ли другой мод данное меню или же нет. Если логика отображения обычных кнопок не менялась - оно будет работать
Originally posted by Eric Kotato:
Главная проблема здесь в том, что все варианты предусмотреть не выйдет заранее, поэтому скорее всего, для каждого придётся делать отдельно, хотя я бы предпочёл что-то, что покрывает большинство случаев.
Вполне себе возможно предусмотреть, по крайней мере, большинство случаев отображения, как пример:
what_items = list() ## Если я правильно понимаю, список, обработанные данные из mods for k in filter_mods_lst(mods.keys()): ## Судя по всему, текст кнопки находится в what_items[k][1], но вам виднее if type(mods[k]) == str: what_items.append((k, "%s %s" %( "" if k.find("__") == -1 else "{color=#117743}[["+k.split("__")[0]+"]{/color}", __(mods[k]) ))) ## Стандартная обработка else: what_items.append((k, mods[k]))
После чего, на отрисовке, проверяем, чем является содержимое
for lbl, name in sorted(what_items, key=lambda(i, j): (j, i)): hbox: if type(name) == str: ## стандартный случай ## Происходит стандартная обработка else: ## является чем-то другим => обработка как в бл button name style "log_button" text_style "settings_text" action (SetField(persistent, "jump_to", lbl), Start()) ## Стандартная кнопка бл, либо можно её попробовать переработать под ваш мод
Весь код является лишь наработкой из головы, я уверен, что можно было бы и лучше написать + сомневаюсь, что понял структуру what_items, т.к. лень раскрывать всё это, чтобы нормально прочитать. При этом, возникнет такая проблема, как невозможность выбора данной кнопки в случае, если тот, кто будет этим заниматься, в кнопке сразу же передаст значение перехода к метке, но при этом ничего другого совсем страшного произойти не должно. Renpy, в случае, если аргумент не является строкой и, при этом, не обрабатывается button попросту выдаст ошибку, ровно как и в бл, по поводу, насколько изменится сама отрисовка кнопки по сравнению с оригинальным экраном - чёрт его знает. В любом случае, всё это нужно проверять....
Last edited by TheRedoc ;(; 8 Mar, 2023 @ 9:29pm
Eric Kotato  [developer] 9 Mar, 2023 @ 4:35am 
Вообще, лучше всего было бы работать на конкретном примере мода. Так проще будет понять, от чего идти. Я могу просто класть туда кнопку, но название используется ещё и в подробной информации. Плюс, кто-то может предпочесть кнопке с изображением текст, и я бы предпочёл поэтому приделать опцию.
< >
Showing 1-10 of 10 comments
Per page: 1530 50