1
0
mirror of synced 2024-11-27 23:50:47 +01:00
bemaniutils/bemani/backend/jubeat/common.py

125 lines
4.1 KiB
Python

import time
from bemani.backend.jubeat.base import JubeatBase
from bemani.protocol import Node
class JubeatLoggerReportHandler(JubeatBase):
def handle_logger_report_request(self, request: Node) -> Node:
# Handle this by returning nothing, game doesn't care
root = Node.void("logger")
return root
class JubeatDemodataGetNewsHandler(JubeatBase):
def handle_demodata_get_news_request(self, request: Node) -> Node:
demodata = Node.void("demodata")
data = Node.void("data")
demodata.add_child(data)
officialnews = Node.void("officialnews")
data.add_child(officialnews)
officialnews.set_attribute("count", "0")
return demodata
class JubeatDemodataGetHitchartHandler(JubeatBase):
def handle_demodata_get_hitchart_request(self, request: Node) -> Node:
demodata = Node.void("demodata")
data = Node.void("data")
demodata.add_child(data)
# Not sure what this is, maybe date?
data.add_child(Node.string("update", time.strftime("%d/%m/%Y")))
# No idea which songs are licensed or regular, so only return hit chart
# for all songs on regular mode.
hitchart_lic = Node.void("hitchart_lic")
data.add_child(hitchart_lic)
hitchart_lic.set_attribute("count", "0")
songs = self.data.local.music.get_hit_chart(self.game, self.music_version, 10)
hitchart_org = Node.void("hitchart_org")
data.add_child(hitchart_org)
hitchart_org.set_attribute("count", str(len(songs)))
rank = 1
for song in songs:
rankdata = Node.void("rankdata")
hitchart_org.add_child(rankdata)
rankdata.add_child(Node.s32("music_id", song[0]))
rankdata.add_child(Node.s16("rank", rank))
rankdata.add_child(Node.s16("prev", rank))
rank = rank + 1
return demodata
class JubeatLobbyCheckHandler(JubeatBase):
def handle_lobby_check_request(self, request: Node) -> Node:
root = Node.void("lobby")
data = Node.void("data")
root.add_child(data)
data.add_child(Node.s16("interval", 0))
data.add_child(Node.s16("entry_timeout", 0))
entrant_nr = Node.u32("entrant_nr", 0)
entrant_nr.set_attribute("time", "0")
data.add_child(entrant_nr)
return root
class JubeatGamendRegisterHandler(JubeatBase):
def handle_gameend_regist_request(self, request: Node) -> Node:
data = request.child("data")
player = data.child("player")
if player is not None:
refid = player.child_value("refid")
else:
refid = None
if refid is not None:
userid = self.data.remote.user.from_refid(self.game, self.version, refid)
else:
userid = None
if userid is not None:
oldprofile = self.get_profile(userid)
newprofile = self.unformat_profile(userid, request, oldprofile)
else:
newprofile = None
if userid is not None and newprofile is not None:
self.put_profile(userid, newprofile)
gameend = Node.void("gameend")
data = Node.void("data")
gameend.add_child(data)
player = Node.void("player")
data.add_child(player)
player.add_child(Node.s32("session_id", 1))
player.add_child(Node.s32("end_final_session_id", 1))
return gameend
class JubeatGametopGetMeetingHandler(JubeatBase):
def handle_gametop_get_meeting_request(self, request: Node) -> Node:
gametop = Node.void("gametop")
data = Node.void("data")
gametop.add_child(data)
meeting = Node.void("meeting")
data.add_child(meeting)
single = Node.void("single")
meeting.add_child(single)
single.set_attribute("count", "0")
tag = Node.void("tag")
meeting.add_child(tag)
tag.set_attribute("count", "0")
reward = Node.void("reward")
data.add_child(reward)
reward.add_child(Node.s32("total", -1))
reward.add_child(Node.s32("point", -1))
return gametop