bcsfe 3.1.0__tar.gz → 3.2.0__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.1.0/src/bcsfe.egg-info → bcsfe-3.2.0}/PKG-INFO +101 -13
- {bcsfe-3.1.0 → bcsfe-3.2.0}/README.md +100 -12
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/__init__.py +1 -1
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/__main__.py +3 -1
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/cli/color.py +4 -14
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/cli/dialog_creator.py +6 -2
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/cli/edits/__init__.py +2 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/cli/edits/basic_items.py +6 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/cli/edits/cat_editor.py +91 -16
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/cli/edits/event_tickets.py +2 -1
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/cli/edits/map.py +5 -1
- bcsfe-3.2.0/src/bcsfe/cli/edits/storage.py +214 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/cli/feature_handler.py +13 -3
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/cli/save_management.py +90 -27
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/core/__init__.py +24 -2
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/core/game/catbase/__init__.py +2 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/core/game/catbase/cat.py +14 -30
- bcsfe-3.2.0/src/bcsfe/core/game/catbase/gambling.py +111 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/core/game/map/enigma.py +5 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/core/game/map/gauntlets.py +4 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/core/game/map/map_names.py +56 -18
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/core/game/map/outbreaks.py +2 -10
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/core/game/map/story.py +1 -1
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/core/game/map/zero_legends.py +16 -3
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/core/io/bc_csv.py +1 -1
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/core/io/config.py +5 -6
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/core/io/path.py +9 -9
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/core/io/save.py +32 -155
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/core/server/game_data_getter.py +128 -118
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/core/server/updater.py +1 -2
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/files/locales/en/core/input.properties +2 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/files/locales/en/core/main.properties +4 -1
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/files/locales/en/core/save.properties +13 -3
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/files/locales/en/core/server.properties +4 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/files/locales/en/edits/cats.properties +36 -0
- bcsfe-3.2.0/src/bcsfe/files/locales/en/edits/gambling.properties +3 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/files/locales/en/edits/items.properties +3 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/files/locales/en/edits/map.properties +3 -1
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/files/locales/en/edits/treasures.properties +2 -2
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/files/locales/vi/core/input.properties +3 -1
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/files/locales/vi/core/main.properties +3 -1
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/files/locales/vi/core/save.properties +8 -1
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/files/locales/vi/core/server.properties +4 -1
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/files/locales/vi/edits/cats.properties +40 -28
- bcsfe-3.2.0/src/bcsfe/files/locales/vi/edits/gambling.properties +3 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/files/locales/vi/edits/items.properties +4 -1
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/files/locales/vi/edits/map.properties +4 -41
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/files/locales/vi/edits/treasures.properties +2 -2
- {bcsfe-3.1.0 → bcsfe-3.2.0/src/bcsfe.egg-info}/PKG-INFO +101 -13
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe.egg-info/SOURCES.txt +4 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/LICENSE +0 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/MANIFEST.in +0 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/pyproject.toml +0 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/setup.cfg +0 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/setup.py +0 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/cli/__init__.py +0 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/cli/edits/aku_realm.py +0 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/cli/edits/clear_tutorial.py +0 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/cli/edits/enemy_editor.py +0 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/cli/edits/fixes.py +0 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/cli/edits/max_all.py +0 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/cli/edits/rare_ticket_trade.py +0 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/cli/file_dialog.py +0 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/cli/main.py +0 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/cli/server_cli.py +0 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/core/country_code.py +0 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/core/crypto.py +0 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/core/game/__init__.py +0 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/core/game/battle/__init__.py +0 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/core/game/battle/battle_items.py +0 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/core/game/battle/cleared_slots.py +0 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/core/game/battle/enemy.py +0 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/core/game/battle/slots.py +0 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/core/game/catbase/beacon_base.py +0 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/core/game/catbase/drop_chara.py +0 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/core/game/catbase/gatya.py +0 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/core/game/catbase/gatya_item.py +0 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/core/game/catbase/item_pack.py +0 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/core/game/catbase/login_bonuses.py +0 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/core/game/catbase/matatabi.py +0 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/core/game/catbase/medals.py +0 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/core/game/catbase/mission.py +0 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/core/game/catbase/my_sale.py +0 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/core/game/catbase/nyanko_club.py +0 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/core/game/catbase/officer_pass.py +0 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/core/game/catbase/playtime.py +0 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/core/game/catbase/powerup.py +0 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/core/game/catbase/scheme_items.py +0 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/core/game/catbase/special_skill.py +0 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/core/game/catbase/stamp.py +0 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/core/game/catbase/talent_orbs.py +0 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/core/game/catbase/unlock_popups.py +0 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/core/game/catbase/upgrade.py +0 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/core/game/catbase/user_rank_rewards.py +0 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/core/game/gamoto/__init__.py +0 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/core/game/gamoto/base_materials.py +0 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/core/game/gamoto/cat_shrine.py +0 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/core/game/gamoto/catamins.py +0 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/core/game/gamoto/gamatoto.py +0 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/core/game/gamoto/ototo.py +0 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/core/game/localizable.py +0 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/core/game/map/__init__.py +0 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/core/game/map/aku.py +0 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/core/game/map/challenge.py +0 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/core/game/map/chapters.py +0 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/core/game/map/dojo.py +0 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/core/game/map/event.py +0 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/core/game/map/ex_stage.py +0 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/core/game/map/item_reward_stage.py +0 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/core/game/map/legend_quest.py +0 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/core/game/map/map_reset.py +0 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/core/game/map/timed_score.py +0 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/core/game/map/tower.py +0 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/core/game/map/uncanny.py +0 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/core/game_version.py +0 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/core/io/__init__.py +0 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/core/io/adb_handler.py +0 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/core/io/command.py +0 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/core/io/data.py +0 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/core/io/git_handler.py +0 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/core/io/json_file.py +0 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/core/io/root_handler.py +0 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/core/io/thread_helper.py +0 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/core/io/waydroid.py +0 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/core/io/yaml.py +0 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/core/locale_handler.py +0 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/core/log.py +0 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/core/max_value_helper.py +0 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/core/server/__init__.py +0 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/core/server/client_info.py +0 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/core/server/event_data.py +0 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/core/server/headers.py +0 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/core/server/managed_item.py +0 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/core/server/request.py +0 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/core/server/server_handler.py +0 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/core/theme_handler.py +0 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/files/locales/en/core/config.properties +0 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/files/locales/en/core/files.properties +0 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/files/locales/en/core/locale.properties +0 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/files/locales/en/core/theme.properties +0 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/files/locales/en/core/updater.properties +0 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/files/locales/en/edits/bannable_items.properties +0 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/files/locales/en/edits/enemy.properties +0 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/files/locales/en/edits/fixes.properties +0 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/files/locales/en/edits/gamototo.properties +0 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/files/locales/en/edits/gatya.properties +0 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/files/locales/en/edits/gold_pass.properties +0 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/files/locales/en/edits/medals.properties +0 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/files/locales/en/edits/missions.properties +0 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/files/locales/en/edits/playtime.properties +0 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/files/locales/en/edits/scheme_items.properties +0 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/files/locales/en/edits/special_skills.properties +0 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/files/locales/en/edits/talent_orbs.properties +0 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/files/locales/en/edits/user_rank.properties +0 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/files/locales/vi/core/config.properties +0 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/files/locales/vi/core/files.properties +0 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/files/locales/vi/core/locale.properties +0 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/files/locales/vi/core/theme.properties +0 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/files/locales/vi/core/updater.properties +0 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/files/locales/vi/edits/bannable_items.properties +0 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/files/locales/vi/edits/enemy.properties +0 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/files/locales/vi/edits/fixes.properties +0 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/files/locales/vi/edits/gamototo.properties +0 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/files/locales/vi/edits/gatya.properties +0 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/files/locales/vi/edits/gold_pass.properties +0 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/files/locales/vi/edits/medals.properties +0 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/files/locales/vi/edits/missions.properties +0 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/files/locales/vi/edits/playtime.properties +0 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/files/locales/vi/edits/scheme_items.properties +0 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/files/locales/vi/edits/special_skills.properties +0 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/files/locales/vi/edits/talent_orbs.properties +0 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/files/locales/vi/edits/user_rank.properties +0 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/files/locales/vi/metadata.json +0 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/files/max_values.json +0 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/files/themes/default.json +0 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/files/themes/discord.json +0 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe/py.typed +0 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe.egg-info/dependency_links.txt +0 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe.egg-info/entry_points.txt +0 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe.egg-info/requires.txt +0 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/src/bcsfe.egg-info/top_level.txt +0 -0
- {bcsfe-3.1.0 → bcsfe-3.2.0}/tests/test_parse.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: bcsfe
|
|
3
|
-
Version: 3.
|
|
3
|
+
Version: 3.2.0
|
|
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:
|
|
216
271
|
|
|
272
|
+
```sh
|
|
273
|
+
bcsfe
|
|
274
|
+
```
|
|
275
|
+
|
|
276
|
+
Or if that doesn't work try:
|
|
217
277
|
|
|
278
|
+
```sh
|
|
279
|
+
python -m bcsfe
|
|
280
|
+
```
|
|
281
|
+
|
|
282
|
+
Or
|
|
283
|
+
|
|
284
|
+
```sh
|
|
285
|
+
python3 -m bcsfe
|
|
286
|
+
```
|
|
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
|
|
|
@@ -368,10 +454,12 @@ Alternatively you can use pip directly, although it won't auto-update with the l
|
|
|
368
454
|
git commits.
|
|
369
455
|
|
|
370
456
|
```sh
|
|
371
|
-
py -m pip install git+https://codeberg.org/fieryhenry/BCSFE-Python.git
|
|
457
|
+
py -m pip install -U git+https://codeberg.org/fieryhenry/BCSFE-Python.git
|
|
372
458
|
py -m bcsfe
|
|
373
459
|
```
|
|
374
460
|
|
|
461
|
+
Again, you might need change `py` for `python` or `python3`
|
|
462
|
+
|
|
375
463
|
If you want to use the editor again all you need to do is run the `py -m bcsfe` command
|
|
376
464
|
|
|
377
465
|
## Documentation
|
|
@@ -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:
|
|
187
242
|
|
|
243
|
+
```sh
|
|
244
|
+
bcsfe
|
|
245
|
+
```
|
|
246
|
+
|
|
247
|
+
Or if that doesn't work try:
|
|
188
248
|
|
|
249
|
+
```sh
|
|
250
|
+
python -m bcsfe
|
|
251
|
+
```
|
|
252
|
+
|
|
253
|
+
Or
|
|
254
|
+
|
|
255
|
+
```sh
|
|
256
|
+
python3 -m bcsfe
|
|
257
|
+
```
|
|
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
|
|
|
@@ -339,10 +425,12 @@ Alternatively you can use pip directly, although it won't auto-update with the l
|
|
|
339
425
|
git commits.
|
|
340
426
|
|
|
341
427
|
```sh
|
|
342
|
-
py -m pip install git+https://codeberg.org/fieryhenry/BCSFE-Python.git
|
|
428
|
+
py -m pip install -U git+https://codeberg.org/fieryhenry/BCSFE-Python.git
|
|
343
429
|
py -m bcsfe
|
|
344
430
|
```
|
|
345
431
|
|
|
432
|
+
Again, you might need change `py` for `python` or `python3`
|
|
433
|
+
|
|
346
434
|
If you want to use the editor again all you need to do is run the `py -m bcsfe` command
|
|
347
435
|
|
|
348
436
|
## Documentation
|
|
@@ -52,7 +52,9 @@ def main():
|
|
|
52
52
|
cli.main.Main.leave()
|
|
53
53
|
except Exception as e:
|
|
54
54
|
tb = traceback.format_exc()
|
|
55
|
-
cli.color.ColoredText.localize(
|
|
55
|
+
cli.color.ColoredText.localize(
|
|
56
|
+
"error", error=e, version=bcsfe.__version__, traceback=tb
|
|
57
|
+
)
|
|
56
58
|
try:
|
|
57
59
|
cli.main.Main.exit_editor()
|
|
58
60
|
except Exception:
|
|
@@ -113,13 +113,9 @@ class ColoredText:
|
|
|
113
113
|
print(colored.stylize(text, fg), end="") # type: ignore
|
|
114
114
|
|
|
115
115
|
@staticmethod
|
|
116
|
-
def localize(
|
|
117
|
-
string: str, escape: bool = True, **kwargs: Any
|
|
118
|
-
) -> ColoredText:
|
|
116
|
+
def localize(string: str, escape: bool = True, **kwargs: Any) -> ColoredText:
|
|
119
117
|
return ColoredText(
|
|
120
|
-
core.core_data.local_manager.get_key(
|
|
121
|
-
string, escape=escape, **kwargs
|
|
122
|
-
)
|
|
118
|
+
core.core_data.local_manager.get_key(string, escape=escape, **kwargs)
|
|
123
119
|
)
|
|
124
120
|
|
|
125
121
|
def parse(self, txt: str) -> list[tuple[str, str]]:
|
|
@@ -134,11 +130,7 @@ class ColoredText:
|
|
|
134
130
|
special_chars = core.LocalManager.get_special_chars()
|
|
135
131
|
while i < len(txt):
|
|
136
132
|
char = txt[i]
|
|
137
|
-
if (
|
|
138
|
-
char == "\\"
|
|
139
|
-
and i + 1 < len(txt)
|
|
140
|
-
and txt[i + 1] in special_chars
|
|
141
|
-
):
|
|
133
|
+
if char == "\\" and i + 1 < len(txt) and txt[i + 1] in special_chars:
|
|
142
134
|
i += 1
|
|
143
135
|
char = txt[i]
|
|
144
136
|
text += char
|
|
@@ -183,7 +175,5 @@ class ColoredInput:
|
|
|
183
175
|
return input()
|
|
184
176
|
|
|
185
177
|
def localize(self, string: str, escape: bool = True, **kwargs: Any) -> str:
|
|
186
|
-
text = core.core_data.local_manager.get_key(
|
|
187
|
-
string, escape=escape, **kwargs
|
|
188
|
-
)
|
|
178
|
+
text = core.core_data.local_manager.get_key(string, escape=escape, **kwargs)
|
|
189
179
|
return self.get(text)
|
|
@@ -327,7 +327,7 @@ class ChoiceInput:
|
|
|
327
327
|
dialog = core.core_data.local_manager.get_key(key).format(
|
|
328
328
|
min=self.get_min_value(), max=self.get_max_value()
|
|
329
329
|
)
|
|
330
|
-
usr_input = color.ColoredInput().get(dialog).split(" ")
|
|
330
|
+
usr_input = color.ColoredInput().get(dialog).strip().split(" ")
|
|
331
331
|
int_vals: list[int] = []
|
|
332
332
|
for inp in usr_input:
|
|
333
333
|
try:
|
|
@@ -689,7 +689,11 @@ class YesNoInput:
|
|
|
689
689
|
|
|
690
690
|
if usr_input == core.core_data.local_manager.get_key("quit_key"):
|
|
691
691
|
return None
|
|
692
|
-
return
|
|
692
|
+
return (
|
|
693
|
+
usr_input == core.core_data.local_manager.get_key("yes_key")
|
|
694
|
+
or usr_input.lower().strip()
|
|
695
|
+
== core.core_data.local_manager.get_key("yes").lower().strip()
|
|
696
|
+
)
|
|
693
697
|
|
|
694
698
|
|
|
695
699
|
class DialogBuilder:
|
|
@@ -12,6 +12,12 @@ class BasicItems:
|
|
|
12
12
|
return core.core_data.local_manager.get_key(key)
|
|
13
13
|
return name.strip()
|
|
14
14
|
|
|
15
|
+
@staticmethod
|
|
16
|
+
def reset_golden_cat_cpus(save_file: core.SaveFile):
|
|
17
|
+
save_file.golden_cpu_count = 0
|
|
18
|
+
|
|
19
|
+
color.ColoredText.localize("reset_golden_cat_cpus_success")
|
|
20
|
+
|
|
15
21
|
@staticmethod
|
|
16
22
|
def edit_catfood(save_file: core.SaveFile):
|
|
17
23
|
should_exit = not dialog_creator.YesNoInput().get_input_once("catfood_warning")
|
|
@@ -48,7 +48,6 @@ class CatEditor:
|
|
|
48
48
|
if len(current_cats) > 50:
|
|
49
49
|
color.ColoredText.localize("total_selected_cats", total=len(current_cats))
|
|
50
50
|
else:
|
|
51
|
-
self.save_file.cats.bulk_download_names(self.save_file, current_cats)
|
|
52
51
|
for cat in current_cats:
|
|
53
52
|
names = cat.get_names_cls(self.save_file)
|
|
54
53
|
if not names:
|
|
@@ -56,9 +55,8 @@ class CatEditor:
|
|
|
56
55
|
color.ColoredText.localize("selected_cat", id=cat.id, name=names[0])
|
|
57
56
|
|
|
58
57
|
def select(
|
|
59
|
-
self,
|
|
60
|
-
|
|
61
|
-
) -> list[core.Cat] | None:
|
|
58
|
+
self, current_cats: list[core.Cat] | None = None, finish_option: bool = True
|
|
59
|
+
) -> tuple[list[core.Cat], bool]:
|
|
62
60
|
if current_cats is None:
|
|
63
61
|
current_cats = []
|
|
64
62
|
options: dict[str, Callable[[], Any]] = {
|
|
@@ -72,19 +70,25 @@ class CatEditor:
|
|
|
72
70
|
"select_cats_not_unlocked": self.get_non_unlocked_cats,
|
|
73
71
|
"select_cats_not_obtainable": self.get_cats_unobtainable,
|
|
74
72
|
"select_cats_non_gatya": self.get_non_gacha_cats,
|
|
73
|
+
"select_cats_game_version": self.select_cats_game_version,
|
|
75
74
|
}
|
|
75
|
+
if finish_option:
|
|
76
|
+
options["finish"] = lambda: None
|
|
76
77
|
option_id = dialog_creator.ChoiceInput(
|
|
77
78
|
list(options), list(options), [], {}, "select_cats", True
|
|
78
79
|
).single_choice()
|
|
79
80
|
if option_id is None:
|
|
80
|
-
return current_cats
|
|
81
|
+
return current_cats, False
|
|
81
82
|
option_id -= 1
|
|
82
83
|
|
|
84
|
+
if option_id == len(options) - 1 and finish_option:
|
|
85
|
+
return current_cats, True
|
|
86
|
+
|
|
83
87
|
func = options[list(options)[option_id]]
|
|
84
88
|
new_cats = func()
|
|
85
89
|
|
|
86
90
|
if new_cats is None:
|
|
87
|
-
return
|
|
91
|
+
return current_cats, False
|
|
88
92
|
|
|
89
93
|
if current_cats:
|
|
90
94
|
mode_id = dialog_creator.IntInput().get_basic_input_locale("and_mode_q", {})
|
|
@@ -102,12 +106,12 @@ class CatEditor:
|
|
|
102
106
|
mode = SelectMode.OR
|
|
103
107
|
|
|
104
108
|
if mode == SelectMode.AND:
|
|
105
|
-
return list(set(current_cats) & set(new_cats))
|
|
109
|
+
return list(set(current_cats) & set(new_cats)), False
|
|
106
110
|
if mode == SelectMode.OR:
|
|
107
|
-
return list(set(current_cats) | set(new_cats))
|
|
111
|
+
return list(set(current_cats) | set(new_cats)), False
|
|
108
112
|
if mode == SelectMode.REPLACE:
|
|
109
|
-
return new_cats
|
|
110
|
-
return new_cats
|
|
113
|
+
return new_cats, False
|
|
114
|
+
return new_cats, False
|
|
111
115
|
|
|
112
116
|
def select_id(self) -> list[core.Cat] | None:
|
|
113
117
|
cat_ids = dialog_creator.RangeInput(
|
|
@@ -117,6 +121,78 @@ class CatEditor:
|
|
|
117
121
|
return None
|
|
118
122
|
return self.save_file.cats.get_cats_by_ids(cat_ids)
|
|
119
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
|
+
|
|
120
196
|
def select_rarity(self) -> list[core.Cat] | None:
|
|
121
197
|
rarity_names = self.save_file.cats.get_rarity_names(self.save_file)
|
|
122
198
|
rarity_ids, _ = dialog_creator.ChoiceInput(
|
|
@@ -639,11 +715,12 @@ class CatEditor:
|
|
|
639
715
|
stop = False
|
|
640
716
|
cats = []
|
|
641
717
|
while not stop:
|
|
642
|
-
current_cats = cat_editor.select(cats)
|
|
643
|
-
if current_cats is None:
|
|
644
|
-
return None, []
|
|
718
|
+
current_cats, finished = cat_editor.select(cats)
|
|
645
719
|
cats = current_cats
|
|
646
720
|
cat_editor.print_selected_cats(cats)
|
|
721
|
+
if finished:
|
|
722
|
+
stop = True
|
|
723
|
+
continue
|
|
647
724
|
finished = dialog_creator.YesNoInput().get_input_once(
|
|
648
725
|
"finished_cats_selection"
|
|
649
726
|
)
|
|
@@ -682,9 +759,7 @@ class CatEditor:
|
|
|
682
759
|
return False, cats
|
|
683
760
|
option_id -= 1
|
|
684
761
|
if option_id == 0:
|
|
685
|
-
cats_ = self.select(cats)
|
|
686
|
-
if cats_ is None:
|
|
687
|
-
return False, cats
|
|
762
|
+
cats_, _ = self.select(cats, False)
|
|
688
763
|
cats = cats_
|
|
689
764
|
elif option_id == 1:
|
|
690
765
|
self.unlock_remove_cats_run(self.save_file, cats, self)
|
|
@@ -20,7 +20,8 @@ class EventTickets:
|
|
|
20
20
|
)
|
|
21
21
|
|
|
22
22
|
cli.color.ColoredText.localize("downloading_gatya_data")
|
|
23
|
-
|
|
23
|
+
temp_save_file = core.SaveFile(cc=save_file.cc, gv=save_file.game_version)
|
|
24
|
+
gatya_event_data = core.ServerHandler(temp_save_file).download_gatya_data()
|
|
24
25
|
|
|
25
26
|
if gatya_event_data is None:
|
|
26
27
|
cli.color.ColoredText.localize("download_gatya_data_fail")
|
|
@@ -92,8 +92,12 @@ def edit_chapters(
|
|
|
92
92
|
chapters: ChaptersType,
|
|
93
93
|
letter_code: str,
|
|
94
94
|
type: int | None = None,
|
|
95
|
+
no_r_prefix: bool = False,
|
|
96
|
+
base_index: int | None = None,
|
|
95
97
|
) -> dict[int, bool] | None:
|
|
96
|
-
map_names = core.MapNames(
|
|
98
|
+
map_names = core.MapNames(
|
|
99
|
+
save_file, letter_code, no_r_prefix=no_r_prefix, base_index=base_index
|
|
100
|
+
)
|
|
97
101
|
names = map_names.map_names
|
|
98
102
|
|
|
99
103
|
choice = dialog_creator.ChoiceInput.from_reduced(
|