bcsfe-wrapper-python 0.1.15__py3-none-any.whl → 0.1.17__py3-none-any.whl

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_wrapper/wrapper.py CHANGED
@@ -7,7 +7,7 @@ from bcsfe import core
7
7
  from bcsfe.cli import edits
8
8
 
9
9
  class BCSFEWrapper:
10
- def __init__(self, save_path_or_data: Union[str, bytes], cc: str = "jp", gv: str = "13.1.0"):
10
+ def __init__(self, save_path_or_data: Union[str, bytes, core.Data], cc: str = "jp", gv: str = "13.4.0"):
11
11
  self._init_core()
12
12
  self.cc = core.CountryCode.from_code(cc)
13
13
  self.gv = core.GameVersion.from_string(gv)
@@ -21,38 +21,54 @@ class BCSFEWrapper:
21
21
  self.save_path = core.Path(save_path_or_data)
22
22
  self.save_file = core.SaveFile(self.save_path.read(), cc=self.cc, gv=self.gv)
23
23
  self.save_file.save_path = self.save_path
24
- else:
24
+ elif isinstance(save_path_or_data, bytes):
25
25
  self.save_file = core.SaveFile(core.Data(save_path_or_data), cc=self.cc, gv=self.gv)
26
26
  self.save_path = None
27
+ elif isinstance(save_path_or_data, core.Data):
28
+ self.save_file = core.SaveFile(save_path_or_data, cc=self.cc, gv=self.gv)
29
+ self.save_path = None
30
+ else:
31
+ # すでにSaveFileオブジェクトなどが渡された場合
32
+ self.save_file = save_path_or_data
33
+ self.save_path = getattr(save_path_or_data, "save_path", None)
27
34
 
28
35
  def _init_core(self):
29
36
  data_folder = core.Path.get_data_folder()
30
37
  core.set_config_path(data_folder.add("config.yaml"))
31
38
  core.set_log_path(data_folder.add("log.txt"))
32
39
  core.core_data.init_data()
33
- core.core_data.config.set(core.ConfigKey.STRICT_UPGRADE, False)
34
- try:
35
- core.core_data.config.set(core.ConfigKey.UPDATE_TO_BETAS, False)
36
- except AttributeError:
37
- # 最新バージョンではUPDATE_TO_BETAに変更されている可能性がある
40
+
41
+ # 設定項目の安全な設定
42
+ def safe_set(key_name, value):
38
43
  try:
39
- core.core_data.config.set(core.ConfigKey.UPDATE_TO_BETA, False)
40
- except (AttributeError, ValueError):
44
+ if hasattr(core.ConfigKey, key_name):
45
+ core.core_data.config.set(getattr(core.ConfigKey, key_name), value)
46
+ except:
41
47
  pass
48
+
49
+ safe_set("STRICT_UPGRADE", False)
50
+ safe_set("UPDATE_TO_BETAS", False)
51
+ safe_set("UPDATE_TO_BETA", False)
52
+ safe_set("SHOW_LOGS", False)
53
+
42
54
  core.print_config_err = False
43
55
 
44
56
  @classmethod
45
57
  def from_server(cls, transfer_code: str, confirmation_code: str, cc: str = "jp", gv: str = "13.4.0") -> 'BCSFEWrapper':
46
- # ダミーの初期化を回避
47
- wrapper = cls(b"", cc=cc, gv=gv)
58
+ # coreの初期化のみ行う
59
+ dummy = cls(None, cc=cc, gv=gv)
60
+ dummy._init_core()
61
+
48
62
  server_handler, result = core.ServerHandler.from_codes(
49
63
  transfer_code, confirmation_code, core.CountryCode.from_code(cc), core.GameVersion.from_string(gv), print=False
50
64
  )
51
65
  if server_handler is None:
52
66
  raise RuntimeError(f"Download failed: {result}")
53
67
 
54
- wrapper.save_file = server_handler.save_file
55
- return wrapper
68
+ # ダウンロードしたデータから実体を生成
69
+ instance = cls(server_handler.save_file.to_data(), cc=cc, gv=gv)
70
+ instance.save_file = server_handler.save_file
71
+ return instance
56
72
 
57
73
  def save(self, output_path: Optional[str] = None):
58
74
  path = core.Path(output_path) if output_path else self.save_path
@@ -75,11 +91,20 @@ class BCSFEWrapper:
75
91
  def edit_leadership(self, amount: int): self._set_val("leadership", amount)
76
92
 
77
93
  def edit_battle_items(self, amount: int):
78
- for item in self.save_file.battle_items.items: item.amount = amount
94
+ for item in self.save_file.battle_items.items:
95
+ item.amount = amount
79
96
  def edit_catseyes(self, amount: int):
80
- for i in range(len(self.save_file.catseyes)): self.save_file.catseyes[i] = amount
97
+ self.save_file.catseyes = [amount] * len(self.save_file.catseyes)
81
98
  def edit_catfruit(self, amount: int):
82
- for i in range(len(self.save_file.catfruit)): self.save_file.catfruit[i] = amount
99
+ self.save_file.catfruit = [amount] * len(self.save_file.catfruit)
100
+ def edit_catamins(self, amount: int):
101
+ self.save_file.catamins = [amount] * len(self.save_file.catamins)
102
+ def edit_talent_orbs(self, amount: int):
103
+ for orb in self.save_file.talent_orbs.orbs.values():
104
+ orb.value = amount
105
+ def edit_castle_materials(self, amount: int):
106
+ for material in self.save_file.ototo.base_materials.materials:
107
+ material.amount = amount
83
108
 
84
109
  def unlock_cats(self, cat_ids: List[int]):
85
110
  for cid in cat_ids:
@@ -147,14 +172,52 @@ class BCSFEWrapper:
147
172
  def unlock_aku_realm(self): edits.aku_realm.unlock_aku_realm(self.save_file)
148
173
 
149
174
  def unlock_all_medals(self):
150
- for i in range(len(self.save_file.medals.medals)):
151
- self.save_file.medals.medals[i] = True
175
+ # メダルはIDのリスト形式
176
+ for i in range(150): # おおよその最大数
177
+ self.save_file.medals.add_medal(i)
152
178
 
153
179
  def claim_all_stamps(self):
154
180
  for stamp in self.save_file.stamps.stamps:
155
181
  stamp.received = True
156
182
  stamp.current_stamp = stamp.total_stamps
157
183
 
184
+ def set_gold_pass(self):
185
+ self.save_file.officer_pass.gold_pass.get_gold_pass(30) # 30日間
186
+ def set_playtime(self, hours: int):
187
+ # プレイ時間はフレーム単位 (1秒=30フレーム)
188
+ self.save_file.officer_pass.play_time = hours * 60 * 60 * 30
189
+ def max_gamatoto(self):
190
+ self.legend_all_gamatoto_members()
191
+ levels = core.core_data.get_gamatoto_levels(self.save_file)
192
+ max_level = levels.get_max_level()
193
+ self.save_file.gamatoto.xp = levels.get_xp_from_level(max_level)
194
+ def max_ototo_upgrades(self):
195
+ for cannon in self.save_file.ototo.cannons.cannons.values():
196
+ # 全ての形態をレベル20にする
197
+ cannon.levels = [19] * len(cannon.levels)
198
+ cannon.development = 19
199
+ def max_cat_shrine(self):
200
+ levels = core.CatShrineLevels.create(self.save_file)
201
+ if levels:
202
+ self.save_file.cat_shrine.xp_offering = levels.get_max_xp()
203
+ def unlock_all_enemies(self):
204
+ # 敵キャラ図鑑はリスト形式
205
+ for i in range(1000): # 十分な範囲
206
+ if i not in self.save_file.enemy_guide:
207
+ self.save_file.enemy_guide.append(i)
208
+ self.save_file.enemy_guide.sort()
209
+ def clear_all_missions(self):
210
+ for mission_id in self.save_file.missions.clear_states:
211
+ self.save_file.missions.clear_states[mission_id] = 4 # 完了状態
212
+ def claim_all_user_rank_rewards(self):
213
+ for reward in self.save_file.user_rank_rewards.rewards:
214
+ reward.claimed = True
215
+ def claim_all_login_bonuses(self):
216
+ for login_set in self.save_file.logins.login_sets:
217
+ for login in login_set.logins.values():
218
+ login.count = 30 # 最大数にするなどの処理
219
+ login.received = True
220
+
158
221
  def legend_all_gamatoto_members(self):
159
222
  members_name = core.core_data.get_gamatoto_members_name(self.save_file)
160
223
  legend_ids = [m.member_id for m in members_name.members if m.rarity == 2]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: bcsfe-wrapper-python
3
- Version: 0.1.15
3
+ Version: 0.1.17
4
4
  Summary: A Python wrapper for BCSFE-Python to easily interact with Battle Cats save files.
5
5
  Home-page: https://github.com/fieryhenry/BCSFE-Python
6
6
  Author: Manus AI
@@ -1,5 +1,5 @@
1
1
  bcsfe_wrapper/__init__.py,sha256=o2LbyVJjuRV1gap8wDbsv39kEUJM1rt8Lq49u1RYYXA,268
2
- bcsfe_wrapper/wrapper.py,sha256=JnN7UdZ0CA-l4pVhobIH7zAOkUqWO0cl30um-GAdyNg,9918
2
+ bcsfe_wrapper/wrapper.py,sha256=iaiBEPUwthUy4gpmK2dqL9Zm7RvytYAcmfBKa9fnfqg,12777
3
3
  bcsfe_wrapper/bcsfe/__init__.py,sha256=vCHjSoJq5u684HLQXahhtA64MZWffNHFdhweP7RM0f4,144
4
4
  bcsfe_wrapper/bcsfe/__main__.py,sha256=Dam14Fv6L-tRRufIkIRpr69dM0b2ybU1eALJxIw_eFI,2091
5
5
  bcsfe_wrapper/bcsfe/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -198,7 +198,7 @@ bcsfe_wrapper/bcsfe/files/locales/vi/edits/treasures.properties,sha256=U9uKsF4y0
198
198
  bcsfe_wrapper/bcsfe/files/locales/vi/edits/user_rank.properties,sha256=FcldhzKM0UmuhmGzI3dGzxstuKcw-t-gkbmKLZT4VKg,603
199
199
  bcsfe_wrapper/bcsfe/files/themes/default.json,sha256=w8eqqd9ATIFwUcvOWTdJjyd1T3LGgUm3iVkJhT5wfEo,392
200
200
  bcsfe_wrapper/bcsfe/files/themes/discord.json,sha256=W1dtEev6tap_waHOxvSqENDcMRA9jfBvjW7t-ssdGs4,370
201
- bcsfe_wrapper_python-0.1.15.dist-info/METADATA,sha256=t_d1WGXr6Hs4fIPHMwkxVX3QziitNgOVsuws2mas5X8,4327
202
- bcsfe_wrapper_python-0.1.15.dist-info/WHEEL,sha256=aeYiig01lYGDzBgS8HxWXOg3uV61G9ijOsup-k9o1sk,91
203
- bcsfe_wrapper_python-0.1.15.dist-info/top_level.txt,sha256=kqyMKpAdNg39_kGGtqsxOSLPIb-qx7R1mQj1hReUsYM,14
204
- bcsfe_wrapper_python-0.1.15.dist-info/RECORD,,
201
+ bcsfe_wrapper_python-0.1.17.dist-info/METADATA,sha256=VfEdKy5cfCbSkOz7Aufi8lMy3ID6nI5ciHrG6RaVHQ4,4327
202
+ bcsfe_wrapper_python-0.1.17.dist-info/WHEEL,sha256=aeYiig01lYGDzBgS8HxWXOg3uV61G9ijOsup-k9o1sk,91
203
+ bcsfe_wrapper_python-0.1.17.dist-info/top_level.txt,sha256=kqyMKpAdNg39_kGGtqsxOSLPIb-qx7R1mQj1hReUsYM,14
204
+ bcsfe_wrapper_python-0.1.17.dist-info/RECORD,,