diff --git a/example_config/idac.yaml b/example_config/idac.yaml index bafca27..80afd1b 100644 --- a/example_config/idac.yaml +++ b/example_config/idac.yaml @@ -21,15 +21,21 @@ stamp: - "touhou_remilia_scarlet" - "touhou_flandre_scarlet" - "touhou_sakuya_izayoi" + 170: + - "touhou_remilia_scarlet" + - "touhou_flandre_scarlet" + - "touhou_sakuya_izayoi" timetrial: enable: True enabled_timetrial: 150: "touhou_remilia_scarlet" + 170: "touhou_remilia_scarlet" battle_event: - enabled: True - enabled_battle_event: "touhou_1st" + enable: True + enabled_battle_event: + 170: "touhou_1st" round_event: enable: True diff --git a/titles/idac/config.py b/titles/idac/config.py index efbcc58..32c0eee 100644 --- a/titles/idac/config.py +++ b/titles/idac/config.py @@ -155,17 +155,24 @@ class IDACTBattleGiftConfig: @property def enable(self) -> bool: return CoreConfig.get_config_field( - self.__config, "idac", "battle_gift", "enable", default=True + self.__config, "idac", "battle_event", "enable", default=True ) @property - def enabled_battle_gift(self) -> str: + def enabled_battle_event(self) -> Dict: + """ + In the form of: + : + + f.e.: + 170: "touhou_1st" + """ return CoreConfig.get_config_field( self.__config, "idac", - "battle_gift", - "enabled_battle_gift", - default="touhou_1st", + "battle_event", + "enabled_battle_event", + default={}, ) class IDACRoundConfig: @@ -205,5 +212,5 @@ class IDACConfig(dict): self.timerelease = IDACTimereleaseConfig(self) self.stamp = IDACStampConfig(self) self.timetrial = IDACTimetrialConfig(self) - self.battle_gift = IDACTBattleGiftConfig(self) + self.battle_event = IDACTBattleGiftConfig(self) self.round_event = IDACRoundConfig(self) diff --git a/titles/idac/data/battle_gift/touhou_1st.json b/titles/idac/data/battle_gift/touhou_1st.json index 20704ad..81a2b91 100644 --- a/titles/idac/data/battle_gift/touhou_1st.json +++ b/titles/idac/data/battle_gift/touhou_1st.json @@ -2,7 +2,7 @@ "battle_gift_event_id": 2, "event_nm": "東方Projectコラボ", "start_dt": "2024-04-01", - "end_dt": "2024-06-03", + "end_dt": "2029-01-01", "mode_id": 1, "delivery_type": 1, "gift_data": [ diff --git a/titles/idac/season2.py b/titles/idac/season2.py index 0f961bd..b6b949a 100644 --- a/titles/idac/season2.py +++ b/titles/idac/season2.py @@ -83,23 +83,32 @@ class IDACSeason2(IDACBase): asyncio.create_task(self._load_round_event()) # load the user configured battle gifts (only one) - self.battle_gift_event = None - if self.game_config.battle_gift.enable: - battle_gift = self.game_config.battle_gift.enabled_battle_gift - if battle_gift is not None: - if not os.path.exists( - f"./titles/idac/data/battle_gift/{battle_gift}.json" - ): - self.logger.warning( - f"Battle gift {battle_gift} is enabled but does not exist!" - ) - else: - self.logger.debug(f"Loading battle gift {battle_gift}") - with open( - f"./titles/idac/data/battle_gift/{battle_gift}.json", - encoding="UTF-8", - ) as f: - self.battle_gift_event = self._fix_dates(json.load(f)) + self.battle_gift_event = {} + self.battle_gift_event_id = {} + if self.game_config.battle_event.enable: + enabled_battle_event = self.game_config.battle_event.enabled_battle_event + if isinstance(enabled_battle_event, Dict): + for game_ver in enabled_battle_event.keys(): + battle_gift = enabled_battle_event[game_ver] + if battle_gift is not None: + if not os.path.exists( + f"./titles/idac/data/battle_gift/{battle_gift}.json" + ): + self.logger.warning( + f"Battle gift {battle_gift} is enabled but does not exist!" + ) + else: + self.logger.debug(f"Loading battle gift {battle_gift}") + with open( + f"./titles/idac/data/battle_gift/{battle_gift}.json", + encoding="UTF-8", + ) as f: + self.battle_gift_event[game_ver] = self._fix_dates(json.load(f)) + + # required for saving + self.battle_gift_event_id[game_ver] = self.battle_gift_event.get( + game_ver + ).get("battle_gift_event_id") async def _load_round_event(self): self.round_event_id = 0 @@ -319,13 +328,14 @@ class IDACSeason2(IDACBase): } battle_gift_event = [] - if self.battle_gift_event: + if ver_str in self.battle_gift_event: + battle_gift_event_data = self.battle_gift_event.get(ver_str, {}) # check if battle gift event time is valid - start_dt = self.battle_gift_event.get("start_dt", 0) - end_dt = self.battle_gift_event.get("end_dt", 0) + start_dt = battle_gift_event_data.get("start_dt", 0) + end_dt = battle_gift_event_data.get("end_dt", 0) if start_dt < int(datetime.now().timestamp()) < end_dt: - battle_gift_event = [self.battle_gift_event] + battle_gift_event = [battle_gift_event_data] return { "status_code": "0", @@ -1075,8 +1085,7 @@ class IDACSeason2(IDACBase): round_info.append(tmp) return round_info - def _choose_gift_id(self) -> Dict: - gift_data = self.battle_gift_event["gift_data"] + def _choose_gift_id(self, gift_data: Dict) -> Dict: # calculate the total_rate based on the first_distribution_rate total_rate = sum(gift["first_distribution_rate"] for gift in gift_data) @@ -1347,11 +1356,12 @@ class IDACSeason2(IDACBase): "point": timetrial["point"], } + battle_gift_data = {} # check if the battle gift event is active - if self.battle_gift_event: + if ver_str in self.battle_gift_event_id: # get the users battle gifts, for the current active battle gift event battle_gifts = await self.data.item.get_battle_gifts( - user_id, self.battle_gift_event.get("battle_gift_event_id") + user_id, self.battle_gift_event_id[ver_str] ) if battle_gifts: @@ -1371,15 +1381,14 @@ class IDACSeason2(IDACBase): ] else: # get a random gift from the active battle gift event - gift_id = self._choose_gift_id()["gift_id"] + gift_data = self.battle_gift_event.get(ver_str, {}).get("gift_data", {}) + gift_id = self._choose_gift_id(gift_data).get("gift_id") # save the battle_gift inside the database await self.data.item.put_battle_gift( user_id, { - "battle_gift_event_id": self.battle_gift_event.get( - "battle_gift_event_id" - ), + "battle_gift_event_id": self.battle_gift_event_id[ver_str], "gift_id": gift_id, "gift_status": 1, # aquired },