tmarenko / mff_auto

Game bot for Marvel Future Fight game.
Apache License 2.0
26 stars 15 forks source link

Each Update breaks the quest list #21

Closed KnightM1 closed 3 years ago

KnightM1 commented 3 years ago

2021-03-29 19:50:34,918 - updater - INFO - Loaded version: mff_auto=0.7.12, game=6.9.0, updater=1.1.0 2021-03-29 19:50:35,355 - updater - INFO - Current version 0.7.12 is up to date for MFF 6.9.0. 2021-03-29 19:50:36,041 - root - DEBUG - Creating 4 Tesseract API(s) with 'eng' language. 2021-03-29 19:50:36,344 - root - DEBUG - Creating 2 Tesseract API(s) with 'mff+eng' language. 2021-03-29 19:50:37,001 - root - DEBUG - NoxPlayer1 7.0.0.9: found Close App shortcut at position 8 2021-03-29 19:50:37,031 - main - INFO - Team number for TimeLine battles : 1 2021-03-29 19:50:37,032 - main - INFO - Team number for missions : 1 2021-03-29 19:50:37,032 - main - INFO - Acquire Heroic Quest rewards: True 2021-03-29 19:50:37,036 - root - ERROR - Expecting value: line 1 column 1 (char 0) Traceback (most recent call last): File "app_gui.py", line 32, in main() File "app_gui.py", line 12, in main window = MainWindow(file_logger=file_logger) File "C:\Users\xxx\Desktop\mff_auto-0.7.12-build\lib\gui\widgets\main.py", line 64, in init self.queue_button_3, self.queue_button_4]) File "C:\Users\xxx\Desktop\mff_auto-0.7.12-build\lib\gui\queue_manager.py", line 59, in init self.load_queue_from_file() File "C:\Users\xxx\Desktop\mff_auto-0.7.12-build\lib\gui\queue_manager.py", line 137, in load_queue_from_file queues_list = load_queue_list() File "C:\Users\xxx\Desktop\mff_auto-0.7.12-build\lib\gui\queue_manager.py", line 19, in load_queue_list return json.load(json_data) File "C:\Users\xxx\Desktop\mff_auto-0.7.12-build\python\App\Python\lib\json__init__.py", line 299, in load parse_constant=parse_constant, object_pairs_hook=object_pairs_hook, **kw) File "C:\Users\xxx\Desktop\mff_auto-0.7.12-build\python\App\Python\lib\json__init__.py", line 354, in loads return _default_decoder.decode(s) File "C:\Users\xxx\Desktop\mff_auto-0.7.12-build\python\App\Python\lib\json\decoder.py", line 339, in decode obj, end = self.raw_decode(s, idx=_w(s, 0).end()) File "C:\Users\xxx\Desktop\mff_auto-0.7.12-build\python\App\Python\lib\json\decoder.py", line 357, in raw_decode raise JSONDecodeError("Expecting value", s, err.value) from None json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

What is the problem? Why do I need to re-configure the task list every time for the program to work? If I delete the old task list everything works correctly. Do you understand Russian?

tmarenko commented 3 years ago

Do you have the corrupted queue_list.json file after update? If so please attach it.

Why do I need to re-configure the task list every time for the program to work?

Usually you don't need to. Updater doesn't download or change anything in settings/gui folder. So previous task list should work fine as before.

Do you understand Russian?

Yes.

KnightM1 commented 3 years ago

Do you have the corrupted queue_list.json file after update? If so please attach it.

Why do I need to re-configure the task list every time for the program to work?

Usually you don't need to. Updater doesn't download or change anything in settings/gui folder. So previous task list should work fine as before.

Do you understand Russian?

Yes.

Вот, и даже если я его закидываю в свежий мфф авто, тоже самое происходит. И это уже не первый раз, уже раз 5 приходится все заново делать что бы работало. В чем может быть причина? Может быть связанно с обновой винды? queue_list.zip

tmarenko commented 3 years ago

Может быть связанно с обновой винды?

Возможно. Мне сложно сказать, баг ли это где-то внутри mff_auto или нет, т.к. game.json сохраняется по тому же принципу, но я так понимаю, что он не портится, верно? Сохранение и загрузка происходит через встроенный функционал из Python: https://github.com/tmarenko/mff_auto/blob/f21743da7fb02a41972a4b2bfbdfa41bef07eed0/lib/gui/queue_manager.py#L24-L25

У прикрепленного файла хоть и есть данные, но там только куча \x00 (NUL). Конкретно почему повреждается файл трудно сказать, может быть особенность винды или жесткого диска (битые сектора). Если попробовать неповрежденному queue_list.json выставить в свойствах "Только для чтения", он тоже потом ломается?

Для дебага можно конечно проверить, не ломаются ли данные внутри памяти, например заменить код в этом месте: https://github.com/tmarenko/mff_auto/blob/f21743da7fb02a41972a4b2bfbdfa41bef07eed0/lib/gui/queue_manager.py#L22-L25 на этот:

def save_queue_list(json_data, path="settings/gui/queue_list.json"):
    """Store queue list."""
    logger.debug(f"JSON content:\n{json_data}")
    with open(path, mode='w', encoding='utf-8') as file:
        json.dump(json_data, file)

чтобы удостовериться, что именно нужные данные заливаются в файл. Так же, можно еще в конец файла start.bat в новой строке дописать @pause, чтобы консольное окно сразу не закрывалось. Это позволит увидеть ошибку сохранения (если таковая случается вообще) при закрытии основного приложения, когда оно сохраняет файл очереди. Либо поискать в старых лог-файлах, может там что-то видно еще.

KnightM1 commented 3 years ago

Возможно. Мне сложно сказать, баг ли это где-то внутри mff_auto или нет, т.к. game.json сохраняется по тому же принципу, но я так понимаю, что он не портится, верно?

Верно, он не портится.

Если попробовать неповрежденному queue_list.json выставить в свойствах "Только для чтения", он тоже потом ломается?

Нет, работает исправно.

def save_queue_list(json_data, path="settings/gui/queue_list.json"): """Store queue list.""" logger.debug(f"JSON content:\n{json_data}") with open(path, mode='w', encoding='utf-8') as file: json.dump(json_data, file)

Заменил, никакого эффекта не дало.

cmd_knluYYETES

Я почти уверен что это связано с обновлением винды, либо просто совпадение. Нашел бекап который делал за 2 дня до слета, теперь все работает. В других логах такая же ошибка. В следующий раз попробую точно определить после чего слетает.

Еще хотел спросить по поводу функционала программы, возможно ли сделать старт/стоп программы по таймеру? Что бы не использовать кликер. Иногда программа на режиме Рейд Босса(Молд/Галактус) когда остаешься 1 в комнате программа ждет игроков, но при этом комната не делается общественной(значит зайти никто не может), и таким образом не перепрыгивает на следующую задачу. Кликер спасает что нажимает старт/стоп, но это своего рода костыль.

tmarenko commented 3 years ago

Заменил, никакого эффекта не дало.

Имелось ввиду заменить эту часть кода, восстановить рабочий файл очереди и ждать пока он сломается. По идее при сохранении в логе должно будет писать

2021-03-30 13:04:17,747 - queue_manager - DEBUG - Saving queue #1 list with 17 items.
2021-03-30 13:04:17,747 - queue_manager - DEBUG - Saving queue #2 list with 8 items.
2021-03-30 13:04:17,747 - queue_manager - DEBUG - Saving queue #3 list with 1 items.
2021-03-30 13:04:17,747 - queue_manager - DEBUG - Saving queue #4 list with 1 items.

и выводить собственно контент, который пишется в файл. Таким образом можно будет убедиться, что в файл пытается пройти запись валидного формата, т.е. что проблема не в mff_auto.

Иногда программа на режиме Рейд Босса(Молд/Галактус) когда остаешься 1 в комнате программа ждет игроков, но при этом комната не делается общественной(значит зайти никто не может), и таким образом не перепрыгивает на следующую задачу.

GBR был добавлен в режиме беты, т.к. полностью все отладить и сценарии прописать не удалось сразу, а фармить токены/кубики очень хотелось. Конкретно данное зависание в лобби известно, но мне до сих пор не удается его словить на запись, чтобы потом добавить обход этой ситуации. Возможно, как вариант, стоит попробовать будет поменять логику на создание своего лобби сразу, вместо поиска чужого.

Кликер спасает что нажимает старт/стоп, но это своего рода костыль.

Если проблема только с режимом GBR, то функционал "старт/стоп по таймеру" добавлять в планах нет.

tmarenko commented 3 years ago

Возможно, как вариант, стоит попробовать будет поменять логику на создание своего лобби сразу, вместо поиска чужого.

В общем, действительно оказалось проще. GBR будет адекватно работать в https://github.com/tmarenko/mff_auto/commit/752cf68033a5226f3f1768ad4f42ba3c79c56b7c , в ближайшем релизе.

Я почти уверен что это связано с обновлением винды, либо просто совпадение. Нашел бекап который делал за 2 дня до слета, теперь все работает. В других логах такая же ошибка. В следующий раз попробую точно определить после чего слетает.

Если появится какая-либо новая информация, то нужно будет переоткрыть issue.