125 lines
4.1 KiB
Python
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
|