From 7cfa3feac072639da56bfb39dad33bda95432c7e Mon Sep 17 00:00:00 2001 From: Hoe Date: Thu, 18 Jul 2024 15:12:55 +0800 Subject: [PATCH 1/4] Let battle_event follow game version --- example_config/idac.yaml | 10 ++++-- titles/idac/config.py | 19 ++++++++---- titles/idac/season2.py | 66 ++++++++++++++++++++++------------------ 3 files changed, 58 insertions(+), 37 deletions(-) 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/season2.py b/titles/idac/season2.py index 0f961bd..1554d90 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.timetrial_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) @@ -1348,10 +1357,10 @@ class IDACSeason2(IDACBase): } # 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 +1380,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 }, -- 2.39.2 From 197a20a3fb44fb756aec8eeec1123ff0fc9f350d Mon Sep 17 00:00:00 2001 From: Hoe Date: Thu, 18 Jul 2024 15:23:33 +0800 Subject: [PATCH 2/4] Fix Wrong --- titles/idac/season2.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/titles/idac/season2.py b/titles/idac/season2.py index 1554d90..cb43254 100644 --- a/titles/idac/season2.py +++ b/titles/idac/season2.py @@ -329,7 +329,7 @@ class IDACSeason2(IDACBase): battle_gift_event = [] if ver_str in self.battle_gift_event: - battle_gift_event_data = self.timetrial_event.get(ver_str, {}) + battle_gift_event_data = self.battle_gift_event.get(ver_str, {}) # check if battle gift event time is valid start_dt = battle_gift_event_data.get("start_dt", 0) end_dt = battle_gift_event_data.get("end_dt", 0) -- 2.39.2 From d039638a164b1a0d8f7f3be89ef765632ea55c25 Mon Sep 17 00:00:00 2001 From: Hoe Date: Thu, 18 Jul 2024 15:49:56 +0800 Subject: [PATCH 3/4] Update battle_event datetime --- titles/idac/data/battle_gift/touhou_1st.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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": [ -- 2.39.2 From 03d2c42c364c1ecb9cfad41f2fed777f5c5b4b33 Mon Sep 17 00:00:00 2001 From: Hoe Date: Wed, 24 Jul 2024 13:54:31 +0800 Subject: [PATCH 4/4] Fix crash when battle_gift is None --- titles/idac/season2.py | 1 + 1 file changed, 1 insertion(+) diff --git a/titles/idac/season2.py b/titles/idac/season2.py index cb43254..b6b949a 100644 --- a/titles/idac/season2.py +++ b/titles/idac/season2.py @@ -1356,6 +1356,7 @@ class IDACSeason2(IDACBase): "point": timetrial["point"], } + battle_gift_data = {} # check if the battle gift event is active if ver_str in self.battle_gift_event_id: # get the users battle gifts, for the current active battle gift event -- 2.39.2