@@ -646,18 +646,31 @@ async def _get_mapping(
646646 if song and (diff := song .get_difficulty (score .type , level_index )):
647647 yield (song , diff , score )
648648
649+ @staticmethod
650+ def _calcuate_dx_star (dx_score : int , max_dx_score : int ) -> int :
651+ THRESHOLD = [0.85 , 0.90 , 0.93 , 0.95 , 0.97 ]
652+
653+ percentage = dx_score / max_dx_score
654+ for i , t in enumerate (THRESHOLD ):
655+ if percentage < t :
656+ return i
657+ return 5
658+
649659 @staticmethod
650660 async def _get_extended (scores : Iterable [Score ], maimai_songs : MaimaiSongs ) -> list [ScoreExtend ]:
651661 extended_scores = []
652662 async for song , diff , score in MaimaiScores ._get_mapping (scores , maimai_songs ):
653663 extended_dict = dataclasses .asdict (score )
664+ level_dx_score = (diff .tap_num + diff .hold_num + diff .slide_num + diff .break_num + diff .touch_num ) * 3
665+ dx_star = MaimaiScores ._calcuate_dx_star (score .dx_score , level_dx_score ) if score .dx_score else None
654666 extended_dict .update (
655667 {
656668 "level" : diff .level , # Ensure level is set correctly.
657669 "title" : song .title ,
670+ "dx_star" : dx_star ,
671+ "version" : diff .version ,
658672 "level_value" : diff .level_value ,
659- "level_dx_score" : (diff .tap_num + diff .hold_num + diff .slide_num + diff .break_num + diff .touch_num )
660- * 3 ,
673+ "level_dx_score" : level_dx_score ,
661674 }
662675 )
663676 extended_scores .append (ScoreExtend (** extended_dict ))
0 commit comments