bcsfe 3.5.0__tar.gz → 3.5.2__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.5.0/src/bcsfe.egg-info → bcsfe-3.5.2}/PKG-INFO +1 -1
- {bcsfe-3.5.0 → bcsfe-3.5.2}/pyproject.toml +3 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/__init__.py +8 -3
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/cli/color.py +4 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/cli/dialog_creator.py +59 -61
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/cli/edits/basic_items.py +32 -16
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/cli/edits/cat_editor.py +10 -4
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/cli/edits/enemy_editor.py +5 -2
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/cli/edits/event_tickets.py +4 -1
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/cli/edits/map.py +1 -1
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/cli/edits/max_all.py +20 -21
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/cli/edits/rare_ticket_trade.py +1 -1
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/cli/file_dialog.py +1 -1
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/cli/main.py +2 -1
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/core/__init__.py +70 -4
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/core/game/battle/battle_items.py +1 -1
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/core/game/battle/enemy.py +1 -1
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/core/game/battle/slots.py +1 -1
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/core/game/catbase/beacon_base.py +3 -3
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/core/game/catbase/gatya.py +3 -3
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/core/game/catbase/my_sale.py +3 -3
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/core/game/catbase/talent_orbs.py +6 -3
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/core/game/catbase/upgrade.py +8 -4
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/core/game/gamoto/base_materials.py +3 -1
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/core/game/gamoto/cat_shrine.py +8 -2
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/core/game/gamoto/gamatoto.py +8 -2
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/core/game/gamoto/ototo.py +7 -7
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/core/game/map/event.py +18 -6
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/core/game/map/story.py +57 -42
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/core/io/bc_csv.py +2 -2
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/core/io/config.py +1 -1
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/core/io/path.py +8 -5
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/core/server/event_data.py +1 -1
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/core/server/game_data_getter.py +2 -1
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/core/server/request.py +1 -1
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/core/server/server_handler.py +2 -4
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/files/locales/en/core/input.properties +1 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/files/locales/en/core/save.properties +2 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/files/locales/en/edits/map.properties +2 -2
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/files/locales/vi/edits/map.properties +1 -1
- {bcsfe-3.5.0 → bcsfe-3.5.2/src/bcsfe.egg-info}/PKG-INFO +1 -1
- {bcsfe-3.5.0 → bcsfe-3.5.2}/LICENSE +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/MANIFEST.in +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/README.md +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/setup.cfg +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/setup.py +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/__main__.py +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/cli/__init__.py +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/cli/color_hex.py +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/cli/edits/__init__.py +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/cli/edits/aku_realm.py +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/cli/edits/clear_tutorial.py +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/cli/edits/fixes.py +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/cli/edits/storage.py +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/cli/feature_handler.py +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/cli/recent_saves.py +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/cli/save_management.py +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/cli/server_cli.py +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/core/country_code.py +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/core/crypto.py +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/core/game/__init__.py +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/core/game/battle/__init__.py +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/core/game/battle/cleared_slots.py +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/core/game/catbase/__init__.py +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/core/game/catbase/cat.py +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/core/game/catbase/drop_chara.py +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/core/game/catbase/gambling.py +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/core/game/catbase/gatya_item.py +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/core/game/catbase/item_pack.py +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/core/game/catbase/login_bonuses.py +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/core/game/catbase/matatabi.py +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/core/game/catbase/medals.py +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/core/game/catbase/mission.py +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/core/game/catbase/nyanko_club.py +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/core/game/catbase/officer_pass.py +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/core/game/catbase/playtime.py +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/core/game/catbase/powerup.py +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/core/game/catbase/scheme_items.py +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/core/game/catbase/special_skill.py +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/core/game/catbase/stamp.py +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/core/game/catbase/unlock_popups.py +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/core/game/catbase/user_rank_rewards.py +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/core/game/gamoto/__init__.py +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/core/game/gamoto/catamins.py +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/core/game/localizable.py +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/core/game/map/__init__.py +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/core/game/map/aku.py +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/core/game/map/challenge.py +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/core/game/map/chapters.py +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/core/game/map/dojo.py +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/core/game/map/enigma.py +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/core/game/map/ex_stage.py +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/core/game/map/gauntlets.py +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/core/game/map/item_reward_stage.py +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/core/game/map/legend_quest.py +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/core/game/map/map_names.py +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/core/game/map/map_option.py +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/core/game/map/map_reset.py +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/core/game/map/outbreaks.py +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/core/game/map/timed_score.py +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/core/game/map/tower.py +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/core/game/map/uncanny.py +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/core/game/map/zero_legends.py +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/core/game_version.py +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/core/io/__init__.py +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/core/io/adb_handler.py +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/core/io/command.py +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/core/io/data.py +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/core/io/git_handler.py +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/core/io/json_file.py +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/core/io/root_handler.py +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/core/io/save.py +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/core/io/thread_helper.py +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/core/io/waydroid.py +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/core/io/yaml.py +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/core/locale_handler.py +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/core/log.py +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/core/max_value_helper.py +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/core/server/__init__.py +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/core/server/client_info.py +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/core/server/headers.py +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/core/server/managed_item.py +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/core/server/updater.py +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/core/theme_handler.py +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/files/locales/en/core/config.properties +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/files/locales/en/core/files.properties +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/files/locales/en/core/locale.properties +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/files/locales/en/core/main.properties +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/files/locales/en/core/server.properties +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/files/locales/en/core/theme.properties +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/files/locales/en/core/updater.properties +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/files/locales/en/edits/bannable_items.properties +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/files/locales/en/edits/cats.properties +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/files/locales/en/edits/enemy.properties +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/files/locales/en/edits/fixes.properties +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/files/locales/en/edits/gambling.properties +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/files/locales/en/edits/gamototo.properties +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/files/locales/en/edits/gatya.properties +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/files/locales/en/edits/gold_pass.properties +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/files/locales/en/edits/items.properties +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/files/locales/en/edits/medals.properties +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/files/locales/en/edits/missions.properties +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/files/locales/en/edits/playtime.properties +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/files/locales/en/edits/scheme_items.properties +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/files/locales/en/edits/special_skills.properties +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/files/locales/en/edits/talent_orbs.properties +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/files/locales/en/edits/treasures.properties +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/files/locales/en/edits/user_rank.properties +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/files/locales/tw/core/config.properties +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/files/locales/tw/core/files.properties +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/files/locales/tw/core/input.properties +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/files/locales/tw/core/locale.properties +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/files/locales/tw/core/main.properties +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/files/locales/tw/core/save.properties +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/files/locales/tw/core/server.properties +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/files/locales/tw/core/theme.properties +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/files/locales/tw/core/updater.properties +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/files/locales/tw/edits/bannable_items.properties +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/files/locales/tw/edits/cats.properties +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/files/locales/tw/edits/enemy.properties +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/files/locales/tw/edits/fixes.properties +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/files/locales/tw/edits/gambling.properties +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/files/locales/tw/edits/gamototo.properties +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/files/locales/tw/edits/gatya.properties +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/files/locales/tw/edits/gold_pass.properties +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/files/locales/tw/edits/items.properties +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/files/locales/tw/edits/map.properties +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/files/locales/tw/edits/medals.properties +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/files/locales/tw/edits/missions.properties +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/files/locales/tw/edits/playtime.properties +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/files/locales/tw/edits/scheme_items.properties +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/files/locales/tw/edits/special_skills.properties +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/files/locales/tw/edits/talent_orbs.properties +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/files/locales/tw/edits/treasures.properties +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/files/locales/tw/edits/user_rank.properties +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/files/locales/tw/metadata.json +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/files/locales/vi/core/config.properties +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/files/locales/vi/core/files.properties +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/files/locales/vi/core/input.properties +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/files/locales/vi/core/locale.properties +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/files/locales/vi/core/main.properties +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/files/locales/vi/core/save.properties +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/files/locales/vi/core/server.properties +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/files/locales/vi/core/theme.properties +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/files/locales/vi/core/updater.properties +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/files/locales/vi/edits/bannable_items.properties +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/files/locales/vi/edits/cats.properties +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/files/locales/vi/edits/enemy.properties +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/files/locales/vi/edits/fixes.properties +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/files/locales/vi/edits/gambling.properties +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/files/locales/vi/edits/gamototo.properties +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/files/locales/vi/edits/gatya.properties +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/files/locales/vi/edits/gold_pass.properties +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/files/locales/vi/edits/items.properties +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/files/locales/vi/edits/medals.properties +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/files/locales/vi/edits/missions.properties +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/files/locales/vi/edits/playtime.properties +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/files/locales/vi/edits/scheme_items.properties +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/files/locales/vi/edits/special_skills.properties +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/files/locales/vi/edits/talent_orbs.properties +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/files/locales/vi/edits/treasures.properties +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/files/locales/vi/edits/user_rank.properties +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/files/locales/vi/metadata.json +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/files/themes/default.json +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/files/themes/discord.json +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe/py.typed +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe.egg-info/SOURCES.txt +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe.egg-info/dependency_links.txt +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe.egg-info/entry_points.txt +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe.egg-info/requires.txt +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/src/bcsfe.egg-info/top_level.txt +0 -0
- {bcsfe-3.5.0 → bcsfe-3.5.2}/tests/test_parse.py +0 -0
|
@@ -1,15 +1,20 @@
|
|
|
1
|
-
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
__version__ = "3.5.2"
|
|
2
4
|
|
|
3
5
|
__app_name__ = "bcsfe"
|
|
4
6
|
|
|
5
|
-
|
|
7
|
+
try:
|
|
8
|
+
from importlib.resources.abc import Traversable
|
|
9
|
+
except ImportError:
|
|
10
|
+
pass
|
|
6
11
|
|
|
7
12
|
from bcsfe import core, cli
|
|
8
13
|
|
|
9
14
|
__all__ = ["core", "cli"]
|
|
10
15
|
|
|
11
16
|
|
|
12
|
-
def copy_to_data_dir(base_path: Traversable, path: Traversable):
|
|
17
|
+
def copy_to_data_dir(base_path: "Traversable", path: "Traversable"):
|
|
13
18
|
if path.is_dir():
|
|
14
19
|
for item in path.iterdir():
|
|
15
20
|
copy_to_data_dir(base_path, item)
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
|
-
from collections.abc import Callable
|
|
2
|
+
from collections.abc import Callable
|
|
3
3
|
from typing import Any, Generic, TypeVar
|
|
4
4
|
|
|
5
5
|
from bcsfe import core
|
|
@@ -146,16 +146,12 @@ def yes_no_raw(dialog: str) -> bool | None:
|
|
|
146
146
|
|
|
147
147
|
|
|
148
148
|
def range_multi_input_key(
|
|
149
|
-
dialog: str, max: MaxValue
|
|
149
|
+
dialog: str, max: MaxValue, min: int = 0, escape: bool = True, **kwargs: Any
|
|
150
150
|
) -> list[int] | None:
|
|
151
151
|
return range_multi_input_raw(core.localize(dialog, escape, **kwargs), max, min)
|
|
152
152
|
|
|
153
153
|
|
|
154
|
-
def range_basic_parse(
|
|
155
|
-
usr_input: str, max: MaxValue | int, min: int = 0
|
|
156
|
-
) -> list[int] | None:
|
|
157
|
-
if isinstance(max, int):
|
|
158
|
-
max = MaxValue.specific(max)
|
|
154
|
+
def range_basic_parse(usr_input: str, max: MaxValue, min: int = 0) -> list[int] | None:
|
|
159
155
|
nums: list[int] = []
|
|
160
156
|
for part in usr_input.split(" "):
|
|
161
157
|
if part.isdigit():
|
|
@@ -164,8 +160,8 @@ def range_basic_parse(
|
|
|
164
160
|
color.color_print_key("invalid_input_int", min=min, max=max.max)
|
|
165
161
|
return None
|
|
166
162
|
nums.append(int(part))
|
|
167
|
-
elif "
|
|
168
|
-
min_v, max_v = part.split("
|
|
163
|
+
elif "-" in part:
|
|
164
|
+
min_v, max_v = part.split("-", 1)
|
|
169
165
|
if not min_v.isdigit() or not max_v.isdigit():
|
|
170
166
|
return None
|
|
171
167
|
min_i = int(min_v)
|
|
@@ -182,11 +178,7 @@ def range_basic_parse(
|
|
|
182
178
|
return nums
|
|
183
179
|
|
|
184
180
|
|
|
185
|
-
def range_multi_input_raw(
|
|
186
|
-
dialog: str, max: MaxValue | int, min: int = 0
|
|
187
|
-
) -> list[int] | None:
|
|
188
|
-
if isinstance(max, int):
|
|
189
|
-
max = MaxValue.specific(max)
|
|
181
|
+
def range_multi_input_raw(dialog: str, max: MaxValue, min: int = 0) -> list[int] | None:
|
|
190
182
|
usr_input = color.color_input(dialog)
|
|
191
183
|
if usr_input == core.localize("quit_key"):
|
|
192
184
|
return None
|
|
@@ -199,8 +191,8 @@ def range_multi_input_raw(
|
|
|
199
191
|
color.color_print_key("invalid_input_int", min=min, max=max.max)
|
|
200
192
|
continue
|
|
201
193
|
nums.append(int(part))
|
|
202
|
-
elif "
|
|
203
|
-
min_v, max_v = part.split("
|
|
194
|
+
elif "-" in part:
|
|
195
|
+
min_v, max_v = part.split("-", 1)
|
|
204
196
|
if not min_v.isdigit() or not max_v.isdigit():
|
|
205
197
|
color.color_print_key("invalid_range", val=part)
|
|
206
198
|
continue
|
|
@@ -416,45 +408,64 @@ def basic_keys_pick_key_entry(
|
|
|
416
408
|
|
|
417
409
|
|
|
418
410
|
class MaxValue:
|
|
419
|
-
def __init__(self, max: int, show: bool = True):
|
|
411
|
+
def __init__(self, max: int, bits: int, show: bool = True):
|
|
420
412
|
self.max = max
|
|
421
413
|
self.show = show
|
|
414
|
+
self.bits = bits
|
|
422
415
|
|
|
423
416
|
def hide_max(self) -> MaxValue:
|
|
424
417
|
self.show = False
|
|
425
418
|
return self
|
|
426
419
|
|
|
427
420
|
@staticmethod
|
|
428
|
-
def
|
|
429
|
-
return MaxValue(max)
|
|
421
|
+
def always_cap(max: int) -> MaxValue:
|
|
422
|
+
return MaxValue(max, 32)
|
|
423
|
+
|
|
424
|
+
@staticmethod
|
|
425
|
+
def specific(max: int, bits: int) -> MaxValue:
|
|
426
|
+
if core.core_data.config.get_bool(core.ConfigKey.DISABLE_MAXES):
|
|
427
|
+
return MaxValue.none(bits).hide_max()
|
|
428
|
+
return MaxValue(max, bits)
|
|
430
429
|
|
|
431
430
|
@staticmethod
|
|
432
431
|
def none(bits: int) -> MaxValue:
|
|
433
|
-
return MaxValue((2**bits) - 1)
|
|
432
|
+
return MaxValue((2**bits) - 1, bits)
|
|
433
|
+
|
|
434
|
+
@staticmethod
|
|
435
|
+
def new_bits(max: int | None, bits: int) -> MaxValue:
|
|
436
|
+
if max is None:
|
|
437
|
+
return MaxValue.none(bits)
|
|
438
|
+
return MaxValue.specific(max, bits)
|
|
439
|
+
|
|
440
|
+
@staticmethod
|
|
441
|
+
def i32(max: int | None = None) -> MaxValue:
|
|
442
|
+
return MaxValue.new_bits(max, 31)
|
|
434
443
|
|
|
435
444
|
@staticmethod
|
|
436
|
-
def
|
|
437
|
-
return MaxValue.
|
|
445
|
+
def u32(max: int | None = None) -> MaxValue:
|
|
446
|
+
return MaxValue.new_bits(max, 32)
|
|
438
447
|
|
|
439
448
|
@staticmethod
|
|
440
|
-
def
|
|
441
|
-
return MaxValue.
|
|
449
|
+
def i16(max: int | None = None) -> MaxValue:
|
|
450
|
+
return MaxValue.new_bits(max, 15)
|
|
442
451
|
|
|
443
452
|
@staticmethod
|
|
444
|
-
def
|
|
445
|
-
return MaxValue.
|
|
453
|
+
def u16(max: int | None = None) -> MaxValue:
|
|
454
|
+
return MaxValue.new_bits(max, 16)
|
|
446
455
|
|
|
447
456
|
@staticmethod
|
|
448
|
-
def
|
|
449
|
-
return MaxValue.
|
|
457
|
+
def i8(max: int | None = None) -> MaxValue:
|
|
458
|
+
return MaxValue.new_bits(max, 7)
|
|
459
|
+
|
|
460
|
+
@staticmethod
|
|
461
|
+
def u8(max: int | None = None) -> MaxValue:
|
|
462
|
+
return MaxValue.new_bits(max, 8)
|
|
450
463
|
|
|
451
464
|
def clamp(self, v: int) -> int:
|
|
452
465
|
return min(self.max, v)
|
|
453
466
|
|
|
454
467
|
|
|
455
|
-
def edit_int_raw(item_name: str, current_value: int, max: MaxValue
|
|
456
|
-
if isinstance(max, int):
|
|
457
|
-
max = MaxValue.specific(max)
|
|
468
|
+
def edit_int_raw(item_name: str, current_value: int, max: MaxValue) -> int:
|
|
458
469
|
if max.show:
|
|
459
470
|
key = "input"
|
|
460
471
|
else:
|
|
@@ -481,7 +492,7 @@ def edit_str_raw(item_name: str, current_value: str) -> str:
|
|
|
481
492
|
|
|
482
493
|
def int_input_key(
|
|
483
494
|
dialog: str,
|
|
484
|
-
_max: MaxValue
|
|
495
|
+
_max: MaxValue,
|
|
485
496
|
min: int = 0,
|
|
486
497
|
default: int | None = None,
|
|
487
498
|
auto_clamp: bool = False,
|
|
@@ -499,13 +510,11 @@ def str_input_key(dialog: str, escape: bool = True, **kwargs: Any) -> str | None
|
|
|
499
510
|
|
|
500
511
|
def int_input_raw(
|
|
501
512
|
dialog: str,
|
|
502
|
-
_max: MaxValue
|
|
513
|
+
_max: MaxValue,
|
|
503
514
|
_min: int = 0,
|
|
504
515
|
default: int | None = None,
|
|
505
516
|
auto_clamp: bool = False,
|
|
506
517
|
) -> int | None:
|
|
507
|
-
if isinstance(_max, int):
|
|
508
|
-
_max = MaxValue.specific(_max)
|
|
509
518
|
quit_key = core.localize("quit_key")
|
|
510
519
|
while True:
|
|
511
520
|
inp = color.color_input(dialog)
|
|
@@ -542,7 +551,7 @@ def str_input_raw(dialog: str) -> str | None:
|
|
|
542
551
|
def edit_int_key(
|
|
543
552
|
item_key: str,
|
|
544
553
|
current_value: int,
|
|
545
|
-
max: MaxValue
|
|
554
|
+
max: MaxValue,
|
|
546
555
|
escape: bool = True,
|
|
547
556
|
**kwargs: Any,
|
|
548
557
|
) -> int:
|
|
@@ -563,13 +572,11 @@ class CumulativeMax:
|
|
|
563
572
|
self.max = max
|
|
564
573
|
|
|
565
574
|
@staticmethod
|
|
566
|
-
def specific(max: int) -> CumulativeMax:
|
|
567
|
-
return CumulativeMax(MaxValue.specific(max))
|
|
575
|
+
def specific(max: int, bits: int) -> CumulativeMax:
|
|
576
|
+
return CumulativeMax(MaxValue.specific(max, bits))
|
|
568
577
|
|
|
569
578
|
@staticmethod
|
|
570
|
-
def new(max:
|
|
571
|
-
if isinstance(max, int):
|
|
572
|
-
return CumulativeMax.specific(max)
|
|
579
|
+
def new(max: MaxValue):
|
|
573
580
|
return CumulativeMax(max)
|
|
574
581
|
|
|
575
582
|
def get(self, current_values: list[int], ids: list[int] | int) -> MaxValue:
|
|
@@ -580,7 +587,7 @@ class CumulativeMax:
|
|
|
580
587
|
for id in ids:
|
|
581
588
|
v += current_values[id]
|
|
582
589
|
|
|
583
|
-
return MaxValue.specific(self.max.max - sum(current_values) + v)
|
|
590
|
+
return MaxValue.specific(self.max.max - sum(current_values) + v, self.max.bits)
|
|
584
591
|
|
|
585
592
|
|
|
586
593
|
class MultiMax:
|
|
@@ -588,16 +595,8 @@ class MultiMax:
|
|
|
588
595
|
self.maxes = maxes
|
|
589
596
|
|
|
590
597
|
@staticmethod
|
|
591
|
-
def new(maxes:
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
for m in maxes:
|
|
595
|
-
if isinstance(m, int):
|
|
596
|
-
new.append(MaxValue.specific(m))
|
|
597
|
-
else:
|
|
598
|
-
new.append(m)
|
|
599
|
-
|
|
600
|
-
return MultiMax(new)
|
|
598
|
+
def new(maxes: list[MaxValue]) -> MultiMax:
|
|
599
|
+
return MultiMax(maxes)
|
|
601
600
|
|
|
602
601
|
def get(self, id: int) -> MaxValue | None:
|
|
603
602
|
if id < 0 or id >= len(self.maxes):
|
|
@@ -605,7 +604,7 @@ class MultiMax:
|
|
|
605
604
|
return self.maxes[id]
|
|
606
605
|
|
|
607
606
|
def maximal(self, ids: list[int]) -> MaxValue:
|
|
608
|
-
m = MaxValue.specific(0)
|
|
607
|
+
m = MaxValue.specific(0, 0)
|
|
609
608
|
for id in ids:
|
|
610
609
|
m_v = self.get(id)
|
|
611
610
|
if m_v is None:
|
|
@@ -620,7 +619,7 @@ def edit_ints_key(
|
|
|
620
619
|
group_name: str,
|
|
621
620
|
item_names: list[str],
|
|
622
621
|
current_values: list[int],
|
|
623
|
-
max: MultiMax | CumulativeMax | MaxValue
|
|
622
|
+
max: MultiMax | CumulativeMax | MaxValue,
|
|
624
623
|
escape: bool = True,
|
|
625
624
|
**kwargs: Any,
|
|
626
625
|
) -> list[int]:
|
|
@@ -633,7 +632,7 @@ def edit_ints_raw(
|
|
|
633
632
|
group_name: str,
|
|
634
633
|
item_names: list[str],
|
|
635
634
|
current_values: list[int],
|
|
636
|
-
max: MultiMax | CumulativeMax | MaxValue
|
|
635
|
+
max: MultiMax | CumulativeMax | MaxValue,
|
|
637
636
|
) -> list[int]:
|
|
638
637
|
entries = multi_select_indexes_key(
|
|
639
638
|
[
|
|
@@ -672,7 +671,7 @@ def edit_ints_raw(
|
|
|
672
671
|
|
|
673
672
|
def edit_individual(
|
|
674
673
|
current_values: list[int],
|
|
675
|
-
max: MaxValue | MultiMax | CumulativeMax
|
|
674
|
+
max: MaxValue | MultiMax | CumulativeMax,
|
|
676
675
|
entries: list[int],
|
|
677
676
|
names: list[str],
|
|
678
677
|
):
|
|
@@ -693,18 +692,17 @@ def edit_individual(
|
|
|
693
692
|
|
|
694
693
|
def edit_many(
|
|
695
694
|
current_values: list[int],
|
|
696
|
-
max: MaxValue | MultiMax | CumulativeMax
|
|
695
|
+
max: MaxValue | MultiMax | CumulativeMax,
|
|
697
696
|
entries: list[int],
|
|
698
697
|
group_name: str,
|
|
699
698
|
names: list[str],
|
|
700
699
|
):
|
|
701
|
-
if isinstance(max, int):
|
|
702
|
-
max = MaxValue.specific(max)
|
|
703
|
-
|
|
704
700
|
if isinstance(max, MultiMax):
|
|
705
701
|
_max = max.maximal(entries)
|
|
706
702
|
elif isinstance(max, CumulativeMax):
|
|
707
|
-
_max = MaxValue.specific(
|
|
703
|
+
_max = MaxValue.specific(
|
|
704
|
+
max.get(current_values, entries).max // len(entries), max.max.bits
|
|
705
|
+
)
|
|
708
706
|
else:
|
|
709
707
|
_max = max
|
|
710
708
|
val = int_input_key(
|
|
@@ -30,7 +30,7 @@ class BasicItems:
|
|
|
30
30
|
save_file.catfood = dialog_creator.edit_int_raw(
|
|
31
31
|
BasicItems.get_name(name, "catfood"),
|
|
32
32
|
save_file.catfood,
|
|
33
|
-
core.core_data.max_value_manager.catfood,
|
|
33
|
+
dialog_creator.MaxValue.i32(core.core_data.max_value_manager.catfood),
|
|
34
34
|
)
|
|
35
35
|
change = save_file.catfood - original_amount
|
|
36
36
|
core.BackupMetaData(save_file).add_managed_item(
|
|
@@ -43,7 +43,7 @@ class BasicItems:
|
|
|
43
43
|
save_file.xp = dialog_creator.edit_int_raw(
|
|
44
44
|
BasicItems.get_name(name, "xp"),
|
|
45
45
|
save_file.xp,
|
|
46
|
-
core.core_data.max_value_manager.xp,
|
|
46
|
+
dialog_creator.MaxValue.i32(core.core_data.max_value_manager.xp),
|
|
47
47
|
)
|
|
48
48
|
|
|
49
49
|
@staticmethod
|
|
@@ -52,7 +52,9 @@ class BasicItems:
|
|
|
52
52
|
save_file.normal_tickets = dialog_creator.edit_int_raw(
|
|
53
53
|
BasicItems.get_name(name, "normal_tickets"),
|
|
54
54
|
save_file.normal_tickets,
|
|
55
|
-
|
|
55
|
+
dialog_creator.MaxValue.i32(
|
|
56
|
+
core.core_data.max_value_manager.normal_tickets
|
|
57
|
+
),
|
|
56
58
|
)
|
|
57
59
|
|
|
58
60
|
@staticmethod
|
|
@@ -62,7 +64,9 @@ class BasicItems:
|
|
|
62
64
|
save_file.hundred_million_ticket = dialog_creator.edit_int_raw(
|
|
63
65
|
BasicItems.get_name(name, "100_million_tickets"),
|
|
64
66
|
save_file.hundred_million_ticket,
|
|
65
|
-
|
|
67
|
+
dialog_creator.MaxValue.i32(
|
|
68
|
+
core.core_data.max_value_manager.hundred_million_tickets
|
|
69
|
+
),
|
|
66
70
|
)
|
|
67
71
|
|
|
68
72
|
@staticmethod
|
|
@@ -102,7 +106,7 @@ class BasicItems:
|
|
|
102
106
|
save_file.rare_tickets = dialog_creator.edit_int_raw(
|
|
103
107
|
BasicItems.get_name(name, "rare_tickets"),
|
|
104
108
|
save_file.rare_tickets,
|
|
105
|
-
core.core_data.max_value_manager.rare_tickets,
|
|
109
|
+
dialog_creator.MaxValue.i32(core.core_data.max_value_manager.rare_tickets),
|
|
106
110
|
)
|
|
107
111
|
change = save_file.rare_tickets - original_amount
|
|
108
112
|
core.BackupMetaData(save_file).add_managed_item(
|
|
@@ -125,7 +129,9 @@ class BasicItems:
|
|
|
125
129
|
save_file.platinum_tickets = dialog_creator.edit_int_raw(
|
|
126
130
|
BasicItems.get_name(name, "platinum_tickets"),
|
|
127
131
|
save_file.platinum_tickets,
|
|
128
|
-
|
|
132
|
+
dialog_creator.MaxValue.i32(
|
|
133
|
+
core.core_data.max_value_manager.platinum_tickets
|
|
134
|
+
),
|
|
129
135
|
)
|
|
130
136
|
change = save_file.platinum_tickets - original_amount
|
|
131
137
|
core.BackupMetaData(save_file).add_managed_item(
|
|
@@ -142,7 +148,9 @@ class BasicItems:
|
|
|
142
148
|
save_file.legend_tickets = dialog_creator.edit_int_raw(
|
|
143
149
|
BasicItems.get_name(name, "legend_tickets"),
|
|
144
150
|
save_file.legend_tickets,
|
|
145
|
-
|
|
151
|
+
dialog_creator.MaxValue.i32(
|
|
152
|
+
core.core_data.max_value_manager.legend_tickets
|
|
153
|
+
),
|
|
146
154
|
)
|
|
147
155
|
change = save_file.legend_tickets - original_amount
|
|
148
156
|
core.BackupMetaData(save_file).add_managed_item(
|
|
@@ -161,7 +169,7 @@ class BasicItems:
|
|
|
161
169
|
save_file.platinum_shards = dialog_creator.edit_int_raw(
|
|
162
170
|
BasicItems.get_name(name, "platinum_shards"),
|
|
163
171
|
save_file.platinum_shards,
|
|
164
|
-
max_value,
|
|
172
|
+
dialog_creator.MaxValue.i32(max_value),
|
|
165
173
|
)
|
|
166
174
|
|
|
167
175
|
@staticmethod
|
|
@@ -170,7 +178,7 @@ class BasicItems:
|
|
|
170
178
|
save_file.np = dialog_creator.edit_int_raw(
|
|
171
179
|
BasicItems.get_name(name, "np"),
|
|
172
180
|
save_file.np,
|
|
173
|
-
core.core_data.max_value_manager.np,
|
|
181
|
+
dialog_creator.MaxValue.i32(core.core_data.max_value_manager.np),
|
|
174
182
|
)
|
|
175
183
|
|
|
176
184
|
@staticmethod
|
|
@@ -179,7 +187,7 @@ class BasicItems:
|
|
|
179
187
|
save_file.leadership = dialog_creator.edit_int_raw(
|
|
180
188
|
BasicItems.get_name(name, "leadership"),
|
|
181
189
|
save_file.leadership,
|
|
182
|
-
core.core_data.max_value_manager.leadership,
|
|
190
|
+
dialog_creator.MaxValue.i16(core.core_data.max_value_manager.leadership),
|
|
183
191
|
)
|
|
184
192
|
|
|
185
193
|
@staticmethod
|
|
@@ -208,7 +216,7 @@ class BasicItems:
|
|
|
208
216
|
"catamins",
|
|
209
217
|
names,
|
|
210
218
|
save_file.catamins,
|
|
211
|
-
core.core_data.max_value_manager.catamins,
|
|
219
|
+
dialog_creator.MaxValue.i32(core.core_data.max_value_manager.catamins),
|
|
212
220
|
)
|
|
213
221
|
save_file.catamins = values
|
|
214
222
|
|
|
@@ -231,7 +239,7 @@ class BasicItems:
|
|
|
231
239
|
"catseyes",
|
|
232
240
|
names,
|
|
233
241
|
save_file.catseyes,
|
|
234
|
-
core.core_data.max_value_manager.catseyes,
|
|
242
|
+
dialog_creator.MaxValue.i32(core.core_data.max_value_manager.catseyes),
|
|
235
243
|
)
|
|
236
244
|
save_file.catseyes = values
|
|
237
245
|
|
|
@@ -256,7 +264,9 @@ class BasicItems:
|
|
|
256
264
|
"treasure_chests",
|
|
257
265
|
names,
|
|
258
266
|
save_file.treasure_chests,
|
|
259
|
-
|
|
267
|
+
dialog_creator.MaxValue.i32(
|
|
268
|
+
core.core_data.max_value_manager.treasure_chests
|
|
269
|
+
),
|
|
260
270
|
)
|
|
261
271
|
save_file.treasure_chests = values
|
|
262
272
|
|
|
@@ -285,9 +295,13 @@ class BasicItems:
|
|
|
285
295
|
|
|
286
296
|
if save_file.game_version < 110400:
|
|
287
297
|
max_value = core.core_data.max_value_manager.catfruit_old
|
|
288
|
-
max = dialog_creator.CumulativeMax.new(
|
|
298
|
+
max = dialog_creator.CumulativeMax.new(
|
|
299
|
+
dialog_creator.MaxValue.i32(max_value)
|
|
300
|
+
)
|
|
289
301
|
else:
|
|
290
|
-
max_value =
|
|
302
|
+
max_value = dialog_creator.MaxValue.i32(
|
|
303
|
+
core.core_data.max_value_manager.catfruit_new
|
|
304
|
+
)
|
|
291
305
|
max = max_value
|
|
292
306
|
|
|
293
307
|
names = names[: len(save_file.catfruit)]
|
|
@@ -371,7 +385,9 @@ class BasicItems:
|
|
|
371
385
|
"labyrinth_medals",
|
|
372
386
|
names,
|
|
373
387
|
save_file.labyrinth_medals,
|
|
374
|
-
|
|
388
|
+
dialog_creator.MaxValue.i32(
|
|
389
|
+
core.core_data.max_value_manager.labyrinth_medals
|
|
390
|
+
),
|
|
375
391
|
)
|
|
376
392
|
save_file.labyrinth_medals = values
|
|
377
393
|
|
|
@@ -114,7 +114,9 @@ class CatEditor:
|
|
|
114
114
|
return current_cats, False
|
|
115
115
|
|
|
116
116
|
if current_cats:
|
|
117
|
-
mode_id = dialog_creator.int_input_key(
|
|
117
|
+
mode_id = dialog_creator.int_input_key(
|
|
118
|
+
"and_mode_q", dialog_creator.MaxValue.always_cap(3)
|
|
119
|
+
)
|
|
118
120
|
if mode_id is None:
|
|
119
121
|
mode = SelectMode.OR
|
|
120
122
|
elif mode_id == 1:
|
|
@@ -138,7 +140,8 @@ class CatEditor:
|
|
|
138
140
|
|
|
139
141
|
def select_id(self) -> list[core.Cat] | None:
|
|
140
142
|
cat_ids = dialog_creator.range_multi_input_key(
|
|
141
|
-
"enter_cat_ids",
|
|
143
|
+
"enter_cat_ids",
|
|
144
|
+
dialog_creator.MaxValue.always_cap(len(self.save_file.cats.cats) - 1),
|
|
142
145
|
)
|
|
143
146
|
if cat_ids is None:
|
|
144
147
|
return None
|
|
@@ -326,7 +329,8 @@ class CatEditor:
|
|
|
326
329
|
.add_new_key(
|
|
327
330
|
"by_id",
|
|
328
331
|
lambda _: dialog_creator.range_multi_input_key(
|
|
329
|
-
"select_gatya_banner",
|
|
332
|
+
"select_gatya_banner",
|
|
333
|
+
dialog_creator.MaxValue.always_cap(len(gset) - 1),
|
|
330
334
|
),
|
|
331
335
|
)
|
|
332
336
|
.add_new_key("by_name", lambda _: self.select_gatya_banner_name()),
|
|
@@ -570,7 +574,9 @@ class CatEditor:
|
|
|
570
574
|
"talents",
|
|
571
575
|
talent_names,
|
|
572
576
|
current_levels,
|
|
573
|
-
dialog_creator.MultiMax.new(
|
|
577
|
+
dialog_creator.MultiMax.new(
|
|
578
|
+
[dialog_creator.MaxValue.i32(max_level) for max_level in max_levels]
|
|
579
|
+
),
|
|
574
580
|
)
|
|
575
581
|
current_levels = values
|
|
576
582
|
for i, id in enumerate(ids):
|
|
@@ -55,7 +55,9 @@ class EnemyEditor:
|
|
|
55
55
|
return None
|
|
56
56
|
|
|
57
57
|
if current_enemies:
|
|
58
|
-
mode_id = dialog_creator.int_input_key(
|
|
58
|
+
mode_id = dialog_creator.int_input_key(
|
|
59
|
+
"and_mode_q", dialog_creator.MaxValue.always_cap(3)
|
|
60
|
+
)
|
|
59
61
|
if mode_id is None:
|
|
60
62
|
mode = SelectMode.OR
|
|
61
63
|
elif mode_id == 1:
|
|
@@ -101,7 +103,8 @@ class EnemyEditor:
|
|
|
101
103
|
|
|
102
104
|
def select_id(self) -> list[core.Enemy] | None:
|
|
103
105
|
enemy_ids = dialog_creator.range_multi_input_key(
|
|
104
|
-
"enter_enemy_ids",
|
|
106
|
+
"enter_enemy_ids",
|
|
107
|
+
dialog_creator.MaxValue.always_cap(len(self.save_file.enemy_guide) - 1),
|
|
105
108
|
)
|
|
106
109
|
if enemy_ids is None:
|
|
107
110
|
return None
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
from bcsfe import cli, core
|
|
3
|
+
from bcsfe.cli import dialog_creator
|
|
3
4
|
from bcsfe.core.game.catbase.gatya import GatyaEventType
|
|
4
5
|
from bcsfe.core.server.event_data import split_hhmm, split_yyyymmdd
|
|
5
6
|
|
|
@@ -108,7 +109,9 @@ class EventTickets:
|
|
|
108
109
|
"event_tickets",
|
|
109
110
|
event_names,
|
|
110
111
|
values,
|
|
111
|
-
max=
|
|
112
|
+
max=dialog_creator.MaxValue.i32(
|
|
113
|
+
core.core_data.max_value_manager.event_tickets
|
|
114
|
+
),
|
|
112
115
|
)
|
|
113
116
|
|
|
114
117
|
for (event_item, gset, gatya_item), value in zip(event_ticket_items, values):
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
-
from collections.abc import Callable
|
|
4
3
|
from bcsfe import core
|
|
5
4
|
|
|
6
5
|
|
|
@@ -104,23 +103,23 @@ def max_normal_tickets(save_file: core.SaveFile):
|
|
|
104
103
|
save_file.normal_tickets = core.core_data.max_value_manager.normal_tickets
|
|
105
104
|
|
|
106
105
|
|
|
107
|
-
def max_all(save_file: core.SaveFile):
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
106
|
+
# def max_all(save_file: core.SaveFile):
|
|
107
|
+
# maxes = core.core_data.max_value_manager
|
|
108
|
+
# features: dict[str, Callable[[core.SaveFile], None]] = {
|
|
109
|
+
# "catfood": max_catfood,
|
|
110
|
+
# "xp": max_xp,
|
|
111
|
+
# "normal_tickets": max_normal_tickets,
|
|
112
|
+
# "rare_tickets": max_rare_tickets,
|
|
113
|
+
# "platinum_tickets": max_plat_tickets,
|
|
114
|
+
# "legend_tickets": max_legend_tickets,
|
|
115
|
+
# "platinum_shards": max_plat_shards,
|
|
116
|
+
# "np": max_np,
|
|
117
|
+
# "leadership": max_leadership,
|
|
118
|
+
# "battle_items": max_battle_items,
|
|
119
|
+
# "catseyes": max_catseyes,
|
|
120
|
+
# "catamins": max_catamins,
|
|
121
|
+
# "labyrinth_medals": max_labyrinth_medals,
|
|
122
|
+
# "100_million_ticket": max_100_million_ticket,
|
|
123
|
+
# "treasure_chests": max_treasure_chests,
|
|
124
|
+
# }
|
|
125
|
+
# TODO: finish
|
|
@@ -49,7 +49,7 @@ class FileDialog:
|
|
|
49
49
|
|
|
50
50
|
files_str_ls = [file.basename() for file in files]
|
|
51
51
|
|
|
52
|
-
dialog_creator.single_select_key(
|
|
52
|
+
return dialog_creator.single_select_key(
|
|
53
53
|
dialog_creator.Actions[Optional[str]]
|
|
54
54
|
.new()
|
|
55
55
|
.add_new_raw(files_str_ls, lambda index: files[index].to_str())
|
|
@@ -13,6 +13,7 @@ from bcsfe.cli import (
|
|
|
13
13
|
dialog_creator,
|
|
14
14
|
)
|
|
15
15
|
from bcsfe import core
|
|
16
|
+
import json
|
|
16
17
|
|
|
17
18
|
|
|
18
19
|
class Main:
|
|
@@ -289,7 +290,7 @@ class Main:
|
|
|
289
290
|
return None
|
|
290
291
|
try:
|
|
291
292
|
json_data = core.JsonFile.from_data(path.read()).as_object()
|
|
292
|
-
except (
|
|
293
|
+
except (json.JSONDecodeError, UnicodeDecodeError):
|
|
293
294
|
color.color_print_key("parse_json_fail")
|
|
294
295
|
return None
|
|
295
296
|
try:
|