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