bcsfe 3.2.0b2__tar.gz → 3.2.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {bcsfe-3.2.0b2/src/bcsfe.egg-info → bcsfe-3.2.1}/PKG-INFO +98 -12
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/README.md +97 -11
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/__init__.py +1 -1
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/cli/dialog_creator.py +5 -7
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/cli/edits/__init__.py +2 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/cli/edits/basic_items.py +7 -1
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/cli/edits/cat_editor.py +91 -15
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/cli/edits/map.py +11 -1
- bcsfe-3.2.1/src/bcsfe/cli/edits/storage.py +214 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/cli/feature_handler.py +4 -1
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/core/__init__.py +4 -0
- bcsfe-3.2.1/src/bcsfe/core/game/battle/battle_items.py +297 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/core/game/catbase/cat.py +12 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/core/io/path.py +7 -3
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/core/io/save.py +2 -36
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/core/server/game_data_getter.py +47 -19
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/files/locales/en/core/input.properties +2 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/files/locales/en/edits/cats.properties +36 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/files/locales/en/edits/items.properties +9 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/files/locales/vi/core/input.properties +3 -1
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/files/locales/vi/core/main.properties +0 -1
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/files/locales/vi/core/save.properties +8 -1
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/files/locales/vi/core/server.properties +4 -1
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/files/locales/vi/edits/cats.properties +40 -28
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/files/locales/vi/edits/map.properties +0 -41
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/files/locales/vi/edits/treasures.properties +2 -2
- {bcsfe-3.2.0b2 → bcsfe-3.2.1/src/bcsfe.egg-info}/PKG-INFO +98 -12
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe.egg-info/SOURCES.txt +1 -0
- bcsfe-3.2.0b2/src/bcsfe/core/game/battle/battle_items.py +0 -127
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/LICENSE +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/MANIFEST.in +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/pyproject.toml +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/setup.cfg +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/setup.py +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/__main__.py +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/cli/__init__.py +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/cli/color.py +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/cli/edits/aku_realm.py +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/cli/edits/clear_tutorial.py +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/cli/edits/enemy_editor.py +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/cli/edits/event_tickets.py +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/cli/edits/fixes.py +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/cli/edits/max_all.py +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/cli/edits/rare_ticket_trade.py +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/cli/file_dialog.py +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/cli/main.py +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/cli/save_management.py +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/cli/server_cli.py +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/core/country_code.py +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/core/crypto.py +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/core/game/__init__.py +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/core/game/battle/__init__.py +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/core/game/battle/cleared_slots.py +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/core/game/battle/enemy.py +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/core/game/battle/slots.py +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/core/game/catbase/__init__.py +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/core/game/catbase/beacon_base.py +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/core/game/catbase/drop_chara.py +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/core/game/catbase/gambling.py +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/core/game/catbase/gatya.py +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/core/game/catbase/gatya_item.py +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/core/game/catbase/item_pack.py +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/core/game/catbase/login_bonuses.py +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/core/game/catbase/matatabi.py +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/core/game/catbase/medals.py +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/core/game/catbase/mission.py +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/core/game/catbase/my_sale.py +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/core/game/catbase/nyanko_club.py +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/core/game/catbase/officer_pass.py +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/core/game/catbase/playtime.py +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/core/game/catbase/powerup.py +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/core/game/catbase/scheme_items.py +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/core/game/catbase/special_skill.py +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/core/game/catbase/stamp.py +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/core/game/catbase/talent_orbs.py +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/core/game/catbase/unlock_popups.py +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/core/game/catbase/upgrade.py +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/core/game/catbase/user_rank_rewards.py +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/core/game/gamoto/__init__.py +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/core/game/gamoto/base_materials.py +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/core/game/gamoto/cat_shrine.py +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/core/game/gamoto/catamins.py +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/core/game/gamoto/gamatoto.py +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/core/game/gamoto/ototo.py +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/core/game/localizable.py +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/core/game/map/__init__.py +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/core/game/map/aku.py +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/core/game/map/challenge.py +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/core/game/map/chapters.py +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/core/game/map/dojo.py +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/core/game/map/enigma.py +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/core/game/map/event.py +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/core/game/map/ex_stage.py +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/core/game/map/gauntlets.py +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/core/game/map/item_reward_stage.py +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/core/game/map/legend_quest.py +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/core/game/map/map_names.py +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/core/game/map/map_reset.py +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/core/game/map/outbreaks.py +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/core/game/map/story.py +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/core/game/map/timed_score.py +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/core/game/map/tower.py +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/core/game/map/uncanny.py +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/core/game/map/zero_legends.py +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/core/game_version.py +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/core/io/__init__.py +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/core/io/adb_handler.py +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/core/io/bc_csv.py +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/core/io/command.py +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/core/io/config.py +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/core/io/data.py +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/core/io/git_handler.py +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/core/io/json_file.py +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/core/io/root_handler.py +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/core/io/thread_helper.py +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/core/io/waydroid.py +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/core/io/yaml.py +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/core/locale_handler.py +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/core/log.py +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/core/max_value_helper.py +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/core/server/__init__.py +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/core/server/client_info.py +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/core/server/event_data.py +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/core/server/headers.py +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/core/server/managed_item.py +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/core/server/request.py +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/core/server/server_handler.py +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/core/server/updater.py +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/core/theme_handler.py +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/files/locales/en/core/config.properties +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/files/locales/en/core/files.properties +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/files/locales/en/core/locale.properties +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/files/locales/en/core/main.properties +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/files/locales/en/core/save.properties +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/files/locales/en/core/server.properties +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/files/locales/en/core/theme.properties +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/files/locales/en/core/updater.properties +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/files/locales/en/edits/bannable_items.properties +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/files/locales/en/edits/enemy.properties +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/files/locales/en/edits/fixes.properties +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/files/locales/en/edits/gambling.properties +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/files/locales/en/edits/gamototo.properties +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/files/locales/en/edits/gatya.properties +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/files/locales/en/edits/gold_pass.properties +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/files/locales/en/edits/map.properties +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/files/locales/en/edits/medals.properties +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/files/locales/en/edits/missions.properties +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/files/locales/en/edits/playtime.properties +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/files/locales/en/edits/scheme_items.properties +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/files/locales/en/edits/special_skills.properties +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/files/locales/en/edits/talent_orbs.properties +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/files/locales/en/edits/treasures.properties +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/files/locales/en/edits/user_rank.properties +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/files/locales/vi/core/config.properties +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/files/locales/vi/core/files.properties +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/files/locales/vi/core/locale.properties +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/files/locales/vi/core/theme.properties +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/files/locales/vi/core/updater.properties +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/files/locales/vi/edits/bannable_items.properties +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/files/locales/vi/edits/enemy.properties +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/files/locales/vi/edits/fixes.properties +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/files/locales/vi/edits/gambling.properties +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/files/locales/vi/edits/gamototo.properties +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/files/locales/vi/edits/gatya.properties +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/files/locales/vi/edits/gold_pass.properties +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/files/locales/vi/edits/items.properties +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/files/locales/vi/edits/medals.properties +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/files/locales/vi/edits/missions.properties +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/files/locales/vi/edits/playtime.properties +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/files/locales/vi/edits/scheme_items.properties +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/files/locales/vi/edits/special_skills.properties +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/files/locales/vi/edits/talent_orbs.properties +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/files/locales/vi/edits/user_rank.properties +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/files/locales/vi/metadata.json +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/files/max_values.json +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/files/themes/default.json +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/files/themes/discord.json +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe/py.typed +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe.egg-info/dependency_links.txt +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe.egg-info/entry_points.txt +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe.egg-info/requires.txt +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/src/bcsfe.egg-info/top_level.txt +0 -0
- {bcsfe-3.2.0b2 → bcsfe-3.2.1}/tests/test_parse.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: bcsfe
|
|
3
|
-
Version: 3.2.
|
|
3
|
+
Version: 3.2.1
|
|
4
4
|
Summary: A save file editor for The Battle Cats
|
|
5
5
|
Author: fieryhenry
|
|
6
6
|
License-Expression: GPL-3.0-or-later
|
|
@@ -98,7 +98,8 @@ python3 -m pip install bcsfe
|
|
|
98
98
|
py -m ensurepip --upgrade
|
|
99
99
|
```
|
|
100
100
|
|
|
101
|
-
Again change `py` for `python` or `python3` if needed
|
|
101
|
+
Again change `py` for `python` or `python3` if needed. I won't mention this again, so just remember
|
|
102
|
+
the one which works at keep using that.
|
|
102
103
|
|
|
103
104
|
5. To run the editor, as long as Python is in your PATH, you should be able to run:
|
|
104
105
|
|
|
@@ -112,10 +113,20 @@ bcsfe
|
|
|
112
113
|
py -m bcsfe
|
|
113
114
|
```
|
|
114
115
|
|
|
115
|
-
Again change `py` for `python` or `python3` if needed.
|
|
116
|
-
|
|
117
116
|
If you are using Windows and you are still struggling, try watching this video [here](https://codeberg.org/fieryhenry/videos/media/branch/main/bcsfe_windows_help.webm).
|
|
118
117
|
|
|
118
|
+
7. To update the editor run:
|
|
119
|
+
|
|
120
|
+
```powershell
|
|
121
|
+
py -m pip install -U bcsfe
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
8. To uninstall the editor run:
|
|
125
|
+
|
|
126
|
+
```powershell
|
|
127
|
+
py -m pip uninstall bcsfe
|
|
128
|
+
```
|
|
129
|
+
|
|
119
130
|
### Linux
|
|
120
131
|
|
|
121
132
|
1. Install Python 3.9 or later using your system's package manager if you don't already have it
|
|
@@ -145,6 +156,18 @@ bcsfe
|
|
|
145
156
|
6. You may also need to install `tk` with your system package manager to open the
|
|
146
157
|
file selection dialog. This package may be called `tk` or `python-tk` or `python3-tk`.
|
|
147
158
|
|
|
159
|
+
7. To update the editor if you are using pipx run:
|
|
160
|
+
|
|
161
|
+
```sh
|
|
162
|
+
pipx upgrade bcsfe
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
8. To uninstall the editor if you are using pipx run:
|
|
166
|
+
|
|
167
|
+
```sh
|
|
168
|
+
pipx uninstall bcsfe
|
|
169
|
+
```
|
|
170
|
+
|
|
148
171
|
If anyone wants to put the editor on the AUR or another package repo, feel free, I'll be happy to
|
|
149
172
|
help if needed.
|
|
150
173
|
|
|
@@ -207,23 +230,84 @@ selection dialog, you just have to type the file path manually.
|
|
|
207
230
|
For example to save your save file to your downloads directory, the path might look something like
|
|
208
231
|
`/storage/emulated/0/Download/SAVE_DATA` or `/sdcard/Download/SAVE_DATA`
|
|
209
232
|
|
|
233
|
+
5. To update the editor run:
|
|
234
|
+
|
|
235
|
+
```sh
|
|
236
|
+
pip install -U bcsfe
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
Or
|
|
240
|
+
|
|
241
|
+
```sh
|
|
242
|
+
python -m pip install -U bcsfe
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
|
|
246
|
+
5. To uninstall the editor run:
|
|
247
|
+
|
|
248
|
+
```sh
|
|
249
|
+
pip uninstall bcsfe
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
Or
|
|
253
|
+
|
|
254
|
+
```sh
|
|
255
|
+
python -m pip uninstall bcsfe
|
|
256
|
+
```
|
|
210
257
|
|
|
211
258
|
### iOS
|
|
212
259
|
|
|
213
|
-
I do not have an iOS device, so there is no
|
|
214
|
-
|
|
215
|
-
|
|
260
|
+
I do not have an iOS device, so there is no tutorial. The video that was recommended is now outdated.
|
|
261
|
+
But for a general overview of what you need to do:
|
|
262
|
+
|
|
263
|
+
1. Download a-Shell from the App Store
|
|
264
|
+
2. Install the editor with:
|
|
265
|
+
|
|
266
|
+
```sh
|
|
267
|
+
pip install bcsfe
|
|
268
|
+
```
|
|
269
|
+
|
|
270
|
+
3. Run the editor with:
|
|
271
|
+
|
|
272
|
+
```sh
|
|
273
|
+
bcsfe
|
|
274
|
+
```
|
|
275
|
+
|
|
276
|
+
Or if that doesn't work try:
|
|
277
|
+
|
|
278
|
+
```sh
|
|
279
|
+
python -m bcsfe
|
|
280
|
+
```
|
|
281
|
+
|
|
282
|
+
Or
|
|
216
283
|
|
|
284
|
+
```sh
|
|
285
|
+
python3 -m bcsfe
|
|
286
|
+
```
|
|
217
287
|
|
|
288
|
+
4. To update the editor run:
|
|
289
|
+
|
|
290
|
+
```sh
|
|
291
|
+
pip install -U bcsfe
|
|
292
|
+
```
|
|
293
|
+
|
|
294
|
+
5. To uninstall the editor run:
|
|
295
|
+
|
|
296
|
+
```sh
|
|
297
|
+
pip uninstall bcsfe
|
|
298
|
+
```
|
|
218
299
|
## Terms of Use
|
|
219
300
|
|
|
301
|
+
I don't like that I have to have Terms of use but these terms are designed to prevent scams and the
|
|
302
|
+
exploitation of users.
|
|
303
|
+
|
|
220
304
|
By using the editor you agree to the following:
|
|
221
305
|
|
|
222
306
|
If you are using the editor to run a paid service that profits off of the editor
|
|
223
307
|
(e.g a service to provide people with hacked accounts, or a paid discord bot to edit people's accounts,
|
|
224
308
|
etc) you must make it very clear that you are using this save editor.
|
|
225
309
|
|
|
226
|
-
This should be done by linking this
|
|
310
|
+
This should be done by linking this Codeberg page, and explicitly stating that the tool you are
|
|
227
311
|
using is available for free and that they don't need to use your service to hack their account.
|
|
228
312
|
|
|
229
313
|
This information needs to be visible and something the customer agrees to **before** any payment is made.
|
|
@@ -237,8 +321,6 @@ the editor under the hood as long as you abide by the [License](#license). Basic
|
|
|
237
321
|
distributing a program which uses the editor, you need to license your own program under the GPL
|
|
238
322
|
or a compatible license (basically make it open source / free software too).
|
|
239
323
|
|
|
240
|
-
These terms are designed to prevent scams and the exploitation of users.
|
|
241
|
-
|
|
242
324
|
Also if you **are** profiting from the editor, it would be greatly appreciated if you could
|
|
243
325
|
give back something and support me.
|
|
244
326
|
|
|
@@ -348,9 +430,13 @@ You'll need to collect the catfood in-game after each clear though
|
|
|
348
430
|
|
|
349
431
|
### Install from source
|
|
350
432
|
|
|
351
|
-
If you want the latest features then you can install the editor from the
|
|
433
|
+
If you want the latest features then you can install the editor from the git repo.
|
|
352
434
|
|
|
353
|
-
1. Download
|
|
435
|
+
1. Download git:
|
|
436
|
+
- Windows: [Git](https://git-scm.com/downloads)
|
|
437
|
+
- Linux: (use package manager, e.g `sudo apt-get install git` or `sudo pacman -S git`)
|
|
438
|
+
- Android: Termux: `pkg install git`
|
|
439
|
+
- iOS: a-Shell should already include it
|
|
354
440
|
|
|
355
441
|
2. Run the following commands: (You may have to replace `py` with `python` or `python3`)
|
|
356
442
|
|
|
@@ -69,7 +69,8 @@ python3 -m pip install bcsfe
|
|
|
69
69
|
py -m ensurepip --upgrade
|
|
70
70
|
```
|
|
71
71
|
|
|
72
|
-
Again change `py` for `python` or `python3` if needed
|
|
72
|
+
Again change `py` for `python` or `python3` if needed. I won't mention this again, so just remember
|
|
73
|
+
the one which works at keep using that.
|
|
73
74
|
|
|
74
75
|
5. To run the editor, as long as Python is in your PATH, you should be able to run:
|
|
75
76
|
|
|
@@ -83,10 +84,20 @@ bcsfe
|
|
|
83
84
|
py -m bcsfe
|
|
84
85
|
```
|
|
85
86
|
|
|
86
|
-
Again change `py` for `python` or `python3` if needed.
|
|
87
|
-
|
|
88
87
|
If you are using Windows and you are still struggling, try watching this video [here](https://codeberg.org/fieryhenry/videos/media/branch/main/bcsfe_windows_help.webm).
|
|
89
88
|
|
|
89
|
+
7. To update the editor run:
|
|
90
|
+
|
|
91
|
+
```powershell
|
|
92
|
+
py -m pip install -U bcsfe
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
8. To uninstall the editor run:
|
|
96
|
+
|
|
97
|
+
```powershell
|
|
98
|
+
py -m pip uninstall bcsfe
|
|
99
|
+
```
|
|
100
|
+
|
|
90
101
|
### Linux
|
|
91
102
|
|
|
92
103
|
1. Install Python 3.9 or later using your system's package manager if you don't already have it
|
|
@@ -116,6 +127,18 @@ bcsfe
|
|
|
116
127
|
6. You may also need to install `tk` with your system package manager to open the
|
|
117
128
|
file selection dialog. This package may be called `tk` or `python-tk` or `python3-tk`.
|
|
118
129
|
|
|
130
|
+
7. To update the editor if you are using pipx run:
|
|
131
|
+
|
|
132
|
+
```sh
|
|
133
|
+
pipx upgrade bcsfe
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
8. To uninstall the editor if you are using pipx run:
|
|
137
|
+
|
|
138
|
+
```sh
|
|
139
|
+
pipx uninstall bcsfe
|
|
140
|
+
```
|
|
141
|
+
|
|
119
142
|
If anyone wants to put the editor on the AUR or another package repo, feel free, I'll be happy to
|
|
120
143
|
help if needed.
|
|
121
144
|
|
|
@@ -178,23 +201,84 @@ selection dialog, you just have to type the file path manually.
|
|
|
178
201
|
For example to save your save file to your downloads directory, the path might look something like
|
|
179
202
|
`/storage/emulated/0/Download/SAVE_DATA` or `/sdcard/Download/SAVE_DATA`
|
|
180
203
|
|
|
204
|
+
5. To update the editor run:
|
|
205
|
+
|
|
206
|
+
```sh
|
|
207
|
+
pip install -U bcsfe
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
Or
|
|
211
|
+
|
|
212
|
+
```sh
|
|
213
|
+
python -m pip install -U bcsfe
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
|
|
217
|
+
5. To uninstall the editor run:
|
|
218
|
+
|
|
219
|
+
```sh
|
|
220
|
+
pip uninstall bcsfe
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
Or
|
|
224
|
+
|
|
225
|
+
```sh
|
|
226
|
+
python -m pip uninstall bcsfe
|
|
227
|
+
```
|
|
181
228
|
|
|
182
229
|
### iOS
|
|
183
230
|
|
|
184
|
-
I do not have an iOS device, so there is no
|
|
185
|
-
|
|
186
|
-
|
|
231
|
+
I do not have an iOS device, so there is no tutorial. The video that was recommended is now outdated.
|
|
232
|
+
But for a general overview of what you need to do:
|
|
233
|
+
|
|
234
|
+
1. Download a-Shell from the App Store
|
|
235
|
+
2. Install the editor with:
|
|
236
|
+
|
|
237
|
+
```sh
|
|
238
|
+
pip install bcsfe
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
3. Run the editor with:
|
|
242
|
+
|
|
243
|
+
```sh
|
|
244
|
+
bcsfe
|
|
245
|
+
```
|
|
246
|
+
|
|
247
|
+
Or if that doesn't work try:
|
|
248
|
+
|
|
249
|
+
```sh
|
|
250
|
+
python -m bcsfe
|
|
251
|
+
```
|
|
252
|
+
|
|
253
|
+
Or
|
|
187
254
|
|
|
255
|
+
```sh
|
|
256
|
+
python3 -m bcsfe
|
|
257
|
+
```
|
|
188
258
|
|
|
259
|
+
4. To update the editor run:
|
|
260
|
+
|
|
261
|
+
```sh
|
|
262
|
+
pip install -U bcsfe
|
|
263
|
+
```
|
|
264
|
+
|
|
265
|
+
5. To uninstall the editor run:
|
|
266
|
+
|
|
267
|
+
```sh
|
|
268
|
+
pip uninstall bcsfe
|
|
269
|
+
```
|
|
189
270
|
## Terms of Use
|
|
190
271
|
|
|
272
|
+
I don't like that I have to have Terms of use but these terms are designed to prevent scams and the
|
|
273
|
+
exploitation of users.
|
|
274
|
+
|
|
191
275
|
By using the editor you agree to the following:
|
|
192
276
|
|
|
193
277
|
If you are using the editor to run a paid service that profits off of the editor
|
|
194
278
|
(e.g a service to provide people with hacked accounts, or a paid discord bot to edit people's accounts,
|
|
195
279
|
etc) you must make it very clear that you are using this save editor.
|
|
196
280
|
|
|
197
|
-
This should be done by linking this
|
|
281
|
+
This should be done by linking this Codeberg page, and explicitly stating that the tool you are
|
|
198
282
|
using is available for free and that they don't need to use your service to hack their account.
|
|
199
283
|
|
|
200
284
|
This information needs to be visible and something the customer agrees to **before** any payment is made.
|
|
@@ -208,8 +292,6 @@ the editor under the hood as long as you abide by the [License](#license). Basic
|
|
|
208
292
|
distributing a program which uses the editor, you need to license your own program under the GPL
|
|
209
293
|
or a compatible license (basically make it open source / free software too).
|
|
210
294
|
|
|
211
|
-
These terms are designed to prevent scams and the exploitation of users.
|
|
212
|
-
|
|
213
295
|
Also if you **are** profiting from the editor, it would be greatly appreciated if you could
|
|
214
296
|
give back something and support me.
|
|
215
297
|
|
|
@@ -319,9 +401,13 @@ You'll need to collect the catfood in-game after each clear though
|
|
|
319
401
|
|
|
320
402
|
### Install from source
|
|
321
403
|
|
|
322
|
-
If you want the latest features then you can install the editor from the
|
|
404
|
+
If you want the latest features then you can install the editor from the git repo.
|
|
323
405
|
|
|
324
|
-
1. Download
|
|
406
|
+
1. Download git:
|
|
407
|
+
- Windows: [Git](https://git-scm.com/downloads)
|
|
408
|
+
- Linux: (use package manager, e.g `sudo apt-get install git` or `sudo pacman -S git`)
|
|
409
|
+
- Android: Termux: `pkg install git`
|
|
410
|
+
- iOS: a-Shell should already include it
|
|
325
411
|
|
|
326
412
|
2. Run the following commands: (You may have to replace `py` with `python` or `python3`)
|
|
327
413
|
|
|
@@ -150,7 +150,7 @@ class ListOutput:
|
|
|
150
150
|
def __init__(
|
|
151
151
|
self,
|
|
152
152
|
strings: list[str],
|
|
153
|
-
ints: list[int],
|
|
153
|
+
ints: list[int] | list[str],
|
|
154
154
|
dialog: str | None = None,
|
|
155
155
|
perameters: dict[str, Any] | None = None,
|
|
156
156
|
start_index: int = 1,
|
|
@@ -210,7 +210,7 @@ class ChoiceInput:
|
|
|
210
210
|
self,
|
|
211
211
|
items: list[str],
|
|
212
212
|
strings: list[str],
|
|
213
|
-
ints: list[int],
|
|
213
|
+
ints: list[int] | list[str],
|
|
214
214
|
perameters: dict[str, int | str],
|
|
215
215
|
dialog: str,
|
|
216
216
|
single_choice: bool = False,
|
|
@@ -233,7 +233,7 @@ class ChoiceInput:
|
|
|
233
233
|
@staticmethod
|
|
234
234
|
def from_reduced(
|
|
235
235
|
items: list[str],
|
|
236
|
-
ints: list[int] | None = None,
|
|
236
|
+
ints: list[int] | list[str] | None = None,
|
|
237
237
|
perameters: dict[str, int | str] | None = None,
|
|
238
238
|
dialog: str | None = None,
|
|
239
239
|
single_choice: bool = False,
|
|
@@ -482,7 +482,7 @@ class MultiEditor:
|
|
|
482
482
|
choices, all_at_once = ChoiceInput(
|
|
483
483
|
self.items,
|
|
484
484
|
self.strings,
|
|
485
|
-
self.ints or [],
|
|
485
|
+
self.ints or [], # type: ignore
|
|
486
486
|
self.perameters,
|
|
487
487
|
"select_edit",
|
|
488
488
|
).get()
|
|
@@ -588,9 +588,7 @@ class SingleEditor:
|
|
|
588
588
|
self.signed = signed
|
|
589
589
|
|
|
590
590
|
def edit(self, escape_text: bool = True) -> int:
|
|
591
|
-
max_value = self.max_value
|
|
592
|
-
if max_value is None:
|
|
593
|
-
max_value = IntInput.get_max_value(max_value, self.signed)
|
|
591
|
+
max_value = IntInput.get_max_value(self.max_value, self.signed)
|
|
594
592
|
if self.max_value is None:
|
|
595
593
|
dialog = "input_non_max"
|
|
596
594
|
elif self.min_value != 0:
|
|
@@ -165,6 +165,8 @@ class BasicItems:
|
|
|
165
165
|
core.core_data.max_value_manager.get("platinum_tickets")
|
|
166
166
|
- platinum_ticket_amount
|
|
167
167
|
) * 10 + 9
|
|
168
|
+
|
|
169
|
+
max_value = max(0, max_value)
|
|
168
170
|
save_file.platinum_shards = dialog_creator.SingleEditor(
|
|
169
171
|
BasicItems.get_name(name, "platinum_shards"),
|
|
170
172
|
save_file.platinum_shards,
|
|
@@ -193,6 +195,10 @@ class BasicItems:
|
|
|
193
195
|
def edit_battle_items(save_file: core.SaveFile):
|
|
194
196
|
save_file.battle_items.edit(save_file)
|
|
195
197
|
|
|
198
|
+
@staticmethod
|
|
199
|
+
def edit_battle_items_endless(save_file: core.SaveFile):
|
|
200
|
+
save_file.battle_items.edit_endless_items(save_file)
|
|
201
|
+
|
|
196
202
|
@staticmethod
|
|
197
203
|
def edit_catamins(save_file: core.SaveFile):
|
|
198
204
|
names_o = core.core_data.get_gatya_item_names(save_file)
|
|
@@ -249,7 +255,7 @@ class BasicItems:
|
|
|
249
255
|
if items is None:
|
|
250
256
|
return
|
|
251
257
|
names: list[str] = []
|
|
252
|
-
for item in items:
|
|
258
|
+
for item in items[: len(save_file.treasure_chests)]:
|
|
253
259
|
name = names_o.get_name(item.id)
|
|
254
260
|
if name is None:
|
|
255
261
|
name = core.core_data.local_manager.get_key(
|
|
@@ -55,9 +55,8 @@ class CatEditor:
|
|
|
55
55
|
color.ColoredText.localize("selected_cat", id=cat.id, name=names[0])
|
|
56
56
|
|
|
57
57
|
def select(
|
|
58
|
-
self,
|
|
59
|
-
|
|
60
|
-
) -> list[core.Cat] | None:
|
|
58
|
+
self, current_cats: list[core.Cat] | None = None, finish_option: bool = True
|
|
59
|
+
) -> tuple[list[core.Cat], bool]:
|
|
61
60
|
if current_cats is None:
|
|
62
61
|
current_cats = []
|
|
63
62
|
options: dict[str, Callable[[], Any]] = {
|
|
@@ -71,19 +70,25 @@ class CatEditor:
|
|
|
71
70
|
"select_cats_not_unlocked": self.get_non_unlocked_cats,
|
|
72
71
|
"select_cats_not_obtainable": self.get_cats_unobtainable,
|
|
73
72
|
"select_cats_non_gatya": self.get_non_gacha_cats,
|
|
73
|
+
"select_cats_game_version": self.select_cats_game_version,
|
|
74
74
|
}
|
|
75
|
+
if finish_option:
|
|
76
|
+
options["finish"] = lambda: None
|
|
75
77
|
option_id = dialog_creator.ChoiceInput(
|
|
76
78
|
list(options), list(options), [], {}, "select_cats", True
|
|
77
79
|
).single_choice()
|
|
78
80
|
if option_id is None:
|
|
79
|
-
return current_cats
|
|
81
|
+
return current_cats, False
|
|
80
82
|
option_id -= 1
|
|
81
83
|
|
|
84
|
+
if option_id == len(options) - 1 and finish_option:
|
|
85
|
+
return current_cats, True
|
|
86
|
+
|
|
82
87
|
func = options[list(options)[option_id]]
|
|
83
88
|
new_cats = func()
|
|
84
89
|
|
|
85
90
|
if new_cats is None:
|
|
86
|
-
return
|
|
91
|
+
return current_cats, False
|
|
87
92
|
|
|
88
93
|
if current_cats:
|
|
89
94
|
mode_id = dialog_creator.IntInput().get_basic_input_locale("and_mode_q", {})
|
|
@@ -101,12 +106,12 @@ class CatEditor:
|
|
|
101
106
|
mode = SelectMode.OR
|
|
102
107
|
|
|
103
108
|
if mode == SelectMode.AND:
|
|
104
|
-
return list(set(current_cats) & set(new_cats))
|
|
109
|
+
return list(set(current_cats) & set(new_cats)), False
|
|
105
110
|
if mode == SelectMode.OR:
|
|
106
|
-
return list(set(current_cats) | set(new_cats))
|
|
111
|
+
return list(set(current_cats) | set(new_cats)), False
|
|
107
112
|
if mode == SelectMode.REPLACE:
|
|
108
|
-
return new_cats
|
|
109
|
-
return new_cats
|
|
113
|
+
return new_cats, False
|
|
114
|
+
return new_cats, False
|
|
110
115
|
|
|
111
116
|
def select_id(self) -> list[core.Cat] | None:
|
|
112
117
|
cat_ids = dialog_creator.RangeInput(
|
|
@@ -116,6 +121,78 @@ class CatEditor:
|
|
|
116
121
|
return None
|
|
117
122
|
return self.save_file.cats.get_cats_by_ids(cat_ids)
|
|
118
123
|
|
|
124
|
+
def select_cats_game_version(self) -> list[core.Cat] | None:
|
|
125
|
+
unitbuy = core.UnitBuy(self.save_file)
|
|
126
|
+
if unitbuy.unit_buy is None:
|
|
127
|
+
return None
|
|
128
|
+
|
|
129
|
+
versions_set: set[int] = set()
|
|
130
|
+
for cat in unitbuy.unit_buy:
|
|
131
|
+
if cat.game_version == -1:
|
|
132
|
+
continue
|
|
133
|
+
versions_set.add(cat.game_version)
|
|
134
|
+
|
|
135
|
+
if not versions_set:
|
|
136
|
+
return None
|
|
137
|
+
|
|
138
|
+
versions = list(versions_set)
|
|
139
|
+
versions.sort()
|
|
140
|
+
|
|
141
|
+
color.ColoredText.localize("possible_gvs")
|
|
142
|
+
|
|
143
|
+
cur_major_v = -1
|
|
144
|
+
for version in versions:
|
|
145
|
+
gv = core.GameVersion(version)
|
|
146
|
+
major_v = gv.get_parts()[0]
|
|
147
|
+
if major_v != cur_major_v:
|
|
148
|
+
if cur_major_v != -1:
|
|
149
|
+
print()
|
|
150
|
+
cur_major_v = major_v
|
|
151
|
+
else:
|
|
152
|
+
color.ColoredText(", ", end="")
|
|
153
|
+
color.ColoredText(f"<@t>{gv.format()}</>", end="")
|
|
154
|
+
|
|
155
|
+
print()
|
|
156
|
+
|
|
157
|
+
usr_input = dialog_creator.StringInput().get_input_locale("select_gv")
|
|
158
|
+
if usr_input is None:
|
|
159
|
+
return None
|
|
160
|
+
chunks = usr_input.split(" ")
|
|
161
|
+
|
|
162
|
+
versions_selected: list[int] = []
|
|
163
|
+
for chunk in chunks:
|
|
164
|
+
parts = chunk.split("-")
|
|
165
|
+
if len(parts) == 2:
|
|
166
|
+
min = parts[0]
|
|
167
|
+
max = parts[1]
|
|
168
|
+
|
|
169
|
+
v1 = core.GameVersion.from_string(min)
|
|
170
|
+
v2 = core.GameVersion.from_string(max)
|
|
171
|
+
|
|
172
|
+
for v in range(v1.game_version, v2.game_version + 1):
|
|
173
|
+
versions_selected.append(v)
|
|
174
|
+
else:
|
|
175
|
+
v = core.GameVersion.from_string(chunk)
|
|
176
|
+
versions_selected.append(v.game_version)
|
|
177
|
+
|
|
178
|
+
valid_versions: set[int] = set()
|
|
179
|
+
for version in versions_selected:
|
|
180
|
+
if version in versions_set:
|
|
181
|
+
valid_versions.add(version)
|
|
182
|
+
|
|
183
|
+
if not valid_versions:
|
|
184
|
+
color.ColoredText.localize("no_valid_gvs_entered")
|
|
185
|
+
|
|
186
|
+
cats: list[core.Cat] = []
|
|
187
|
+
for cat in self.save_file.cats.cats:
|
|
188
|
+
row = unitbuy.get_unit_buy(cat.id)
|
|
189
|
+
if row is None:
|
|
190
|
+
continue
|
|
191
|
+
if row.game_version in valid_versions:
|
|
192
|
+
cats.append(cat)
|
|
193
|
+
|
|
194
|
+
return cats
|
|
195
|
+
|
|
119
196
|
def select_rarity(self) -> list[core.Cat] | None:
|
|
120
197
|
rarity_names = self.save_file.cats.get_rarity_names(self.save_file)
|
|
121
198
|
rarity_ids, _ = dialog_creator.ChoiceInput(
|
|
@@ -638,11 +715,12 @@ class CatEditor:
|
|
|
638
715
|
stop = False
|
|
639
716
|
cats = []
|
|
640
717
|
while not stop:
|
|
641
|
-
current_cats = cat_editor.select(cats)
|
|
642
|
-
if current_cats is None:
|
|
643
|
-
return None, []
|
|
718
|
+
current_cats, finished = cat_editor.select(cats)
|
|
644
719
|
cats = current_cats
|
|
645
720
|
cat_editor.print_selected_cats(cats)
|
|
721
|
+
if finished:
|
|
722
|
+
stop = True
|
|
723
|
+
continue
|
|
646
724
|
finished = dialog_creator.YesNoInput().get_input_once(
|
|
647
725
|
"finished_cats_selection"
|
|
648
726
|
)
|
|
@@ -681,9 +759,7 @@ class CatEditor:
|
|
|
681
759
|
return False, cats
|
|
682
760
|
option_id -= 1
|
|
683
761
|
if option_id == 0:
|
|
684
|
-
cats_ = self.select(cats)
|
|
685
|
-
if cats_ is None:
|
|
686
|
-
return False, cats
|
|
762
|
+
cats_, _ = self.select(cats, False)
|
|
687
763
|
cats = cats_
|
|
688
764
|
elif option_id == 1:
|
|
689
765
|
self.unlock_remove_cats_run(self.save_file, cats, self)
|
|
@@ -12,6 +12,12 @@ ChaptersType = Union[
|
|
|
12
12
|
]
|
|
13
13
|
|
|
14
14
|
|
|
15
|
+
def get_total_maps(chapters: ChaptersType) -> int:
|
|
16
|
+
if isinstance(chapters, core.EventChapters):
|
|
17
|
+
return chapters.get_lengths()[1]
|
|
18
|
+
return len(chapters.chapters)
|
|
19
|
+
|
|
20
|
+
|
|
15
21
|
def unclear_stage(
|
|
16
22
|
chapters: ChaptersType,
|
|
17
23
|
map: int,
|
|
@@ -98,7 +104,11 @@ def edit_chapters(
|
|
|
98
104
|
map_names = core.MapNames(
|
|
99
105
|
save_file, letter_code, no_r_prefix=no_r_prefix, base_index=base_index
|
|
100
106
|
)
|
|
101
|
-
names =
|
|
107
|
+
names: dict[int, str | None] = {}
|
|
108
|
+
for id, name in map_names.map_names.items():
|
|
109
|
+
if id >= get_total_maps(chapters):
|
|
110
|
+
continue
|
|
111
|
+
names[id] = name
|
|
102
112
|
|
|
103
113
|
choice = dialog_creator.ChoiceInput.from_reduced(
|
|
104
114
|
["clear_stages", "unclear_stages"],
|