forked from Hay1tsme/artemis
Add team support, implement team upsert, add rivals
This commit is contained in:
parent
09c4f8cda4
commit
75842b5a88
@ -361,11 +361,98 @@ class ChuniBase:
|
|||||||
"userDuelList": duel_list,
|
"userDuelList": duel_list,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
def handle_get_user_rival_data_api_request(self, data: Dict) -> Dict:
|
||||||
|
p = self.data.profile.get_rival(data["rivalId"])
|
||||||
|
if p is None:
|
||||||
|
return {}
|
||||||
|
userRivalData = {
|
||||||
|
"rivalId": p.user,
|
||||||
|
"rivalName": p.userName
|
||||||
|
}
|
||||||
|
return {
|
||||||
|
"userId": data["userId"],
|
||||||
|
"userRivalData": userRivalData
|
||||||
|
}
|
||||||
|
|
||||||
|
def handle_get_user_rival_music_api_request(self, data: Dict) -> Dict:
|
||||||
|
m = self.data.score.get_rival_music(data["rivalId"], data["nextIndex"], data["maxCount"])
|
||||||
|
if m is None:
|
||||||
|
return {}
|
||||||
|
|
||||||
|
user_rival_music_list = []
|
||||||
|
for music in m:
|
||||||
|
actual_music_id = self.data.static.get_song(music["musicId"])
|
||||||
|
if actual_music_id is None:
|
||||||
|
music_id = music["musicId"]
|
||||||
|
else:
|
||||||
|
music_id = actual_music_id["songId"]
|
||||||
|
level = music["level"]
|
||||||
|
score = music["score"]
|
||||||
|
rank = music["rank"]
|
||||||
|
|
||||||
|
# Find the existing entry for the current musicId in the user_rival_music_list
|
||||||
|
music_entry = next((entry for entry in user_rival_music_list if entry["musicId"] == music_id), None)
|
||||||
|
|
||||||
|
if music_entry is None:
|
||||||
|
# If the entry doesn't exist, create a new entry
|
||||||
|
music_entry = {
|
||||||
|
"musicId": music_id,
|
||||||
|
"length": 0,
|
||||||
|
"userRivalMusicDetailList": []
|
||||||
|
}
|
||||||
|
user_rival_music_list.append(music_entry)
|
||||||
|
|
||||||
|
# Check if the current score is higher than the previous highest score for the level
|
||||||
|
level_entry = next(
|
||||||
|
(
|
||||||
|
entry
|
||||||
|
for entry in music_entry["userRivalMusicDetailList"]
|
||||||
|
if entry["level"] == level
|
||||||
|
),
|
||||||
|
None,
|
||||||
|
)
|
||||||
|
if level_entry is None or score > level_entry["scoreMax"]:
|
||||||
|
# If the level entry doesn't exist or the score is higher, update or add the entry
|
||||||
|
level_entry = {
|
||||||
|
"level": level,
|
||||||
|
"scoreMax": score,
|
||||||
|
"scoreRank": rank
|
||||||
|
}
|
||||||
|
|
||||||
|
if level_entry not in music_entry["userRivalMusicDetailList"]:
|
||||||
|
music_entry["userRivalMusicDetailList"].append(level_entry)
|
||||||
|
|
||||||
|
music_entry["length"] = len(music_entry["userRivalMusicDetailList"])
|
||||||
|
|
||||||
|
result = {
|
||||||
|
"userId": data["userId"],
|
||||||
|
"rivalId": data["rivalId"],
|
||||||
|
"nextIndex": -1,
|
||||||
|
"userRivalMusicList": user_rival_music_list
|
||||||
|
}
|
||||||
|
|
||||||
|
return result
|
||||||
|
def handle_get_user_rival_music_api_requestded(self, data: Dict) -> Dict:
|
||||||
|
m = self.data.score.get_rival_music(data["rivalId"], data["nextIndex"], data["maxCount"])
|
||||||
|
if m is None:
|
||||||
|
return {}
|
||||||
|
|
||||||
|
userRivalMusicList = []
|
||||||
|
for music in m:
|
||||||
|
self.logger.debug(music["point"])
|
||||||
|
|
||||||
|
return {
|
||||||
|
"userId": data["userId"],
|
||||||
|
"rivalId": data["rivalId"],
|
||||||
|
"nextIndex": -1
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
def handle_get_user_favorite_item_api_request(self, data: Dict) -> Dict:
|
def handle_get_user_favorite_item_api_request(self, data: Dict) -> Dict:
|
||||||
user_fav_item_list = []
|
user_fav_item_list = []
|
||||||
|
|
||||||
# still needs to be implemented on WebUI
|
# still needs to be implemented on WebUI
|
||||||
# 1: Music, 3: Character
|
# 1: Music, 2: User, 3: Character
|
||||||
fav_list = self.data.item.get_all_favorites(
|
fav_list = self.data.item.get_all_favorites(
|
||||||
data["userId"], self.version, fav_kind=int(data["kind"])
|
data["userId"], self.version, fav_kind=int(data["kind"])
|
||||||
)
|
)
|
||||||
@ -600,25 +687,43 @@ class ChuniBase:
|
|||||||
}
|
}
|
||||||
|
|
||||||
def handle_get_user_team_api_request(self, data: Dict) -> Dict:
|
def handle_get_user_team_api_request(self, data: Dict) -> Dict:
|
||||||
# TODO: use the database "chuni_profile_team" with a GUI
|
# Default values
|
||||||
|
team_id = 65535
|
||||||
team_name = self.game_cfg.team.team_name
|
team_name = self.game_cfg.team.team_name
|
||||||
if team_name == "":
|
team_rank = 0
|
||||||
|
|
||||||
|
# Get user profile
|
||||||
|
profile = self.data.profile.get_profile_data(data["userId"], self.version)
|
||||||
|
if profile and profile["teamId"]:
|
||||||
|
# Get team by id
|
||||||
|
team = self.data.profile.get_team_by_id(profile["teamId"])
|
||||||
|
|
||||||
|
if team:
|
||||||
|
team_id = team["id"]
|
||||||
|
team_name = team["teamName"]
|
||||||
|
# Determine whether to use scaled ranks, or original system
|
||||||
|
if self.game_cfg.team.rank_scale:
|
||||||
|
team_rank = self.data.profile.get_team_rank(team["id"])
|
||||||
|
else:
|
||||||
|
team_rank = self.data.profile.get_team_rank_actual(team["id"])
|
||||||
|
|
||||||
|
# Don't return anything if no team name has been defined for defaults and there is no team set for the player
|
||||||
|
if not profile["teamId"] and team_name == "":
|
||||||
return {"userId": data["userId"], "teamId": 0}
|
return {"userId": data["userId"], "teamId": 0}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
"userId": data["userId"],
|
"userId": data["userId"],
|
||||||
"teamId": 1,
|
"teamId": team_id,
|
||||||
"teamRank": 1,
|
"teamRank": team_rank,
|
||||||
"teamName": team_name,
|
"teamName": team_name,
|
||||||
"userTeamPoint": {
|
"userTeamPoint": {
|
||||||
"userId": data["userId"],
|
"userId": data["userId"],
|
||||||
"teamId": 1,
|
"teamId": team_id,
|
||||||
"orderId": 1,
|
"orderId": 1,
|
||||||
"teamPoint": 1,
|
"teamPoint": 1,
|
||||||
"aggrDate": data["playDate"],
|
"aggrDate": data["playDate"],
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
def handle_get_team_course_setting_api_request(self, data: Dict) -> Dict:
|
def handle_get_team_course_setting_api_request(self, data: Dict) -> Dict:
|
||||||
return {
|
return {
|
||||||
"userId": data["userId"],
|
"userId": data["userId"],
|
||||||
@ -709,9 +814,25 @@ class ChuniBase:
|
|||||||
self.data.score.put_playlog(user_id, playlog)
|
self.data.score.put_playlog(user_id, playlog)
|
||||||
|
|
||||||
if "userTeamPoint" in upsert:
|
if "userTeamPoint" in upsert:
|
||||||
# TODO: team stuff
|
team_points = upsert["userTeamPoint"]
|
||||||
pass
|
try:
|
||||||
|
for tp in team_points:
|
||||||
|
if tp["teamId"] != '65535':
|
||||||
|
# Fetch the current team data
|
||||||
|
current_team = self.data.profile.get_team_by_id(tp["teamId"])
|
||||||
|
|
||||||
|
# Calculate the new teamPoint
|
||||||
|
new_team_point = int(tp["teamPoint"]) + current_team["teamPoint"]
|
||||||
|
|
||||||
|
# Prepare the data to update
|
||||||
|
team_data = {
|
||||||
|
"teamPoint": new_team_point
|
||||||
|
}
|
||||||
|
|
||||||
|
# Update the team data
|
||||||
|
self.data.profile.update_team(tp["teamId"], team_data)
|
||||||
|
except:
|
||||||
|
pass # Probably a better way to catch if the team is not set yet (new profiles), but let's just pass
|
||||||
if "userMapAreaList" in upsert:
|
if "userMapAreaList" in upsert:
|
||||||
for map_area in upsert["userMapAreaList"]:
|
for map_area in upsert["userMapAreaList"]:
|
||||||
self.data.item.put_map_area(user_id, map_area)
|
self.data.item.put_map_area(user_id, map_area)
|
||||||
|
Loading…
Reference in New Issue
Block a user