Use arcade/network region for default prefecture/region wherever possible, including in facility.get. Allows changing game region.
This commit is contained in:
parent
d05c3f907d
commit
c7affef159
@ -3,8 +3,8 @@ import traceback
|
|||||||
from typing import Any, Dict, Iterator, List, Optional, Set, Tuple, Type
|
from typing import Any, Dict, Iterator, List, Optional, Set, Tuple, Type
|
||||||
from typing_extensions import Final
|
from typing_extensions import Final
|
||||||
|
|
||||||
from bemani.common import Model, ValidatedDict, Profile, PlayStatistics, GameConstants, Time
|
from bemani.common import Model, ValidatedDict, Profile, PlayStatistics, GameConstants, RegionConstants, Time
|
||||||
from bemani.data import Config, Data, Machine, UserID, RemoteUser
|
from bemani.data import Config, Data, Arcade, Machine, UserID, RemoteUser
|
||||||
|
|
||||||
|
|
||||||
class ProfileCreationException(Exception):
|
class ProfileCreationException(Exception):
|
||||||
@ -238,6 +238,12 @@ class Base(ABC):
|
|||||||
"""
|
"""
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
def requires_extended_regions(self) -> bool:
|
||||||
|
"""
|
||||||
|
Override this in your subclass if your game requires an updated region list.
|
||||||
|
"""
|
||||||
|
return False
|
||||||
|
|
||||||
def bind_profile(self, userid: UserID) -> None:
|
def bind_profile(self, userid: UserID) -> None:
|
||||||
"""
|
"""
|
||||||
Handling binding the user's profile to this version on this server.
|
Handling binding the user's profile to this version on this server.
|
||||||
@ -422,6 +428,19 @@ class Base(ABC):
|
|||||||
machine.data = newmachine.data
|
machine.data = newmachine.data
|
||||||
self.data.local.machine.put_machine(machine)
|
self.data.local.machine.put_machine(machine)
|
||||||
|
|
||||||
|
def get_arcade(self) -> Optional[Arcade]:
|
||||||
|
machine = self.get_machine()
|
||||||
|
if machine.arcade is None:
|
||||||
|
return None
|
||||||
|
return self.data.local.machine.get_arcade(machine.arcade)
|
||||||
|
|
||||||
|
def get_machine_region(self) -> int:
|
||||||
|
arcade = self.get_arcade()
|
||||||
|
if arcade is None:
|
||||||
|
return RegionConstants.db_to_game_region(self.requires_extended_regions(), self.config.server.region)
|
||||||
|
else:
|
||||||
|
return RegionConstants.db_to_game_region(self.requires_extended_regions(), arcade.region)
|
||||||
|
|
||||||
def get_game_config(self) -> ValidatedDict:
|
def get_game_config(self) -> ValidatedDict:
|
||||||
machine = self.data.local.machine.get_machine(self.config.machine.pcbid)
|
machine = self.data.local.machine.get_machine(self.config.machine.pcbid)
|
||||||
if machine.arcade is not None:
|
if machine.arcade is not None:
|
||||||
|
@ -2,7 +2,7 @@ import socket
|
|||||||
|
|
||||||
from bemani.backend.base import Base
|
from bemani.backend.base import Base
|
||||||
from bemani.protocol import Node
|
from bemani.protocol import Node
|
||||||
from bemani.common import ID
|
from bemani.common import ID, RegionConstants
|
||||||
|
|
||||||
|
|
||||||
class CoreHandler(Base):
|
class CoreHandler(Base):
|
||||||
@ -120,14 +120,58 @@ class CoreHandler(Base):
|
|||||||
which expects to return a bunch of information about the arcade this
|
which expects to return a bunch of information about the arcade this
|
||||||
cabinet is in, as well as some settings for URLs and the name of the cab.
|
cabinet is in, as well as some settings for URLs and the name of the cab.
|
||||||
"""
|
"""
|
||||||
machine = self.data.local.machine.get_machine(self.config.machine.pcbid)
|
machine = self.get_machine()
|
||||||
|
if machine.arcade is None:
|
||||||
|
region = self.config.server.region
|
||||||
|
else:
|
||||||
|
arcade = self.data.local.machine.get_arcade(machine.arcade)
|
||||||
|
region = arcade.region
|
||||||
|
|
||||||
|
if region == RegionConstants.HONG_KONG:
|
||||||
|
country = "HK"
|
||||||
|
regionstr = ""
|
||||||
|
elif region == RegionConstants.TAIWAN:
|
||||||
|
country = "TW"
|
||||||
|
regionstr = ""
|
||||||
|
elif region == RegionConstants.KOREA:
|
||||||
|
country = "KR"
|
||||||
|
regionstr = ""
|
||||||
|
elif region == RegionConstants.USA:
|
||||||
|
country = "US"
|
||||||
|
regionstr = ""
|
||||||
|
elif region == RegionConstants.THAILAND:
|
||||||
|
country = "TH"
|
||||||
|
regionstr = ""
|
||||||
|
elif region == RegionConstants.INDONESIA:
|
||||||
|
country = "ID"
|
||||||
|
regionstr = ""
|
||||||
|
elif region == RegionConstants.SINGAPORE:
|
||||||
|
country = "SG"
|
||||||
|
regionstr = ""
|
||||||
|
elif region == RegionConstants.PHILLIPINES:
|
||||||
|
country = "PH"
|
||||||
|
regionstr = ""
|
||||||
|
elif region == RegionConstants.MACAO:
|
||||||
|
country = "MO"
|
||||||
|
regionstr = ""
|
||||||
|
elif region >= RegionConstants.MIN_PREF and region <= RegionConstants.MAX_PREF:
|
||||||
|
country = "JP"
|
||||||
|
regionstr = f"JP-{region}"
|
||||||
|
elif region == RegionConstants.EUROPE:
|
||||||
|
# Pick a random country in the "Europe" category.
|
||||||
|
country = "GB"
|
||||||
|
regionstr = ""
|
||||||
|
else:
|
||||||
|
# Pick a random nonsensical code.
|
||||||
|
country = "XX"
|
||||||
|
regionstr = ""
|
||||||
|
|
||||||
root = Node.void('facility')
|
root = Node.void('facility')
|
||||||
root.set_attribute('expire', '600')
|
root.set_attribute('expire', '600')
|
||||||
location = Node.void('location')
|
location = Node.void('location')
|
||||||
location.add_child(Node.string('id', ID.format_machine_id(machine.id)))
|
location.add_child(Node.string('id', ID.format_machine_id(machine.id, region=country)))
|
||||||
location.add_child(Node.string('country', 'US'))
|
location.add_child(Node.string('country', country))
|
||||||
location.add_child(Node.string('region', '.'))
|
location.add_child(Node.string('region', regionstr))
|
||||||
location.add_child(Node.string('name', machine.name))
|
location.add_child(Node.string('name', machine.name))
|
||||||
location.add_child(Node.u8('type', 0))
|
location.add_child(Node.u8('type', 0))
|
||||||
|
|
||||||
|
@ -95,7 +95,7 @@ class DDRGameHiscoreHandler(DDRBase):
|
|||||||
|
|
||||||
typenode.add_child(Node.string('name', users[userid].get_str('name')))
|
typenode.add_child(Node.string('name', users[userid].get_str('name')))
|
||||||
typenode.add_child(Node.u32('score', score.points))
|
typenode.add_child(Node.u32('score', score.points))
|
||||||
typenode.add_child(Node.u16('area', users[userid].get_int('area', 51)))
|
typenode.add_child(Node.u16('area', users[userid].get_int('area', self.get_machine_region())))
|
||||||
typenode.add_child(Node.u8('rank', gamerank))
|
typenode.add_child(Node.u8('rank', gamerank))
|
||||||
typenode.add_child(Node.u8('combo_type', combo_type))
|
typenode.add_child(Node.u8('combo_type', combo_type))
|
||||||
typenode.add_child(Node.u32('code', users[userid].extid))
|
typenode.add_child(Node.u32('code', users[userid].extid))
|
||||||
@ -111,7 +111,7 @@ class DDRGameAreaHiscoreHandler(DDRBase):
|
|||||||
# First, get all users that are in the current shop's area
|
# First, get all users that are in the current shop's area
|
||||||
area_users = {
|
area_users = {
|
||||||
uid: prof for (uid, prof) in self.data.local.user.get_all_profiles(self.game, self.version)
|
uid: prof for (uid, prof) in self.data.local.user.get_all_profiles(self.game, self.version)
|
||||||
if prof.get_int('area', 51) == shop_area
|
if prof.get_int('area', self.get_machine_region()) == shop_area
|
||||||
}
|
}
|
||||||
|
|
||||||
# Second, look up records belonging only to those users
|
# Second, look up records belonging only to those users
|
||||||
@ -134,7 +134,7 @@ class DDRGameAreaHiscoreHandler(DDRBase):
|
|||||||
|
|
||||||
for chart in area_records[song]:
|
for chart in area_records[song]:
|
||||||
userid, score = area_records[song][chart]
|
userid, score = area_records[song][chart]
|
||||||
if area_users[userid].get_int('area', 51) != shop_area:
|
if area_users[userid].get_int('area', self.get_machine_region()) != shop_area:
|
||||||
# Don't return this, this user isn't in this area
|
# Don't return this, this user isn't in this area
|
||||||
continue
|
continue
|
||||||
try:
|
try:
|
||||||
@ -151,7 +151,7 @@ class DDRGameAreaHiscoreHandler(DDRBase):
|
|||||||
|
|
||||||
typenode.add_child(Node.string('name', area_users[userid].get_str('name')))
|
typenode.add_child(Node.string('name', area_users[userid].get_str('name')))
|
||||||
typenode.add_child(Node.u32('score', score.points))
|
typenode.add_child(Node.u32('score', score.points))
|
||||||
typenode.add_child(Node.u16('area', area_users[userid].get_int('area', 51)))
|
typenode.add_child(Node.u16('area', area_users[userid].get_int('area', self.get_machine_region())))
|
||||||
typenode.add_child(Node.u8('rank', gamerank))
|
typenode.add_child(Node.u8('rank', gamerank))
|
||||||
typenode.add_child(Node.u8('combo_type', combo_type))
|
typenode.add_child(Node.u8('combo_type', combo_type))
|
||||||
typenode.add_child(Node.u32('code', area_users[userid].extid))
|
typenode.add_child(Node.u32('code', area_users[userid].extid))
|
||||||
@ -301,7 +301,7 @@ class DDRGameOldHandler(DDRBase):
|
|||||||
oldprofile = previous_version.get_profile(userid)
|
oldprofile = previous_version.get_profile(userid)
|
||||||
if oldprofile is not None:
|
if oldprofile is not None:
|
||||||
game.set_attribute('name', oldprofile.get_str('name'))
|
game.set_attribute('name', oldprofile.get_str('name'))
|
||||||
game.set_attribute('area', str(oldprofile.get_int('area', 51)))
|
game.set_attribute('area', str(oldprofile.get_int('area', self.get_machine_region())))
|
||||||
return game
|
return game
|
||||||
|
|
||||||
|
|
||||||
@ -354,7 +354,7 @@ class DDRGameFriendHandler(DDRBase):
|
|||||||
game.set_attribute('data', '1')
|
game.set_attribute('data', '1')
|
||||||
game.add_child(Node.u32('code', friend.extid))
|
game.add_child(Node.u32('code', friend.extid))
|
||||||
game.add_child(Node.string('name', friend.get_str('name')))
|
game.add_child(Node.string('name', friend.get_str('name')))
|
||||||
game.add_child(Node.u8('area', friend.get_int('area', 51)))
|
game.add_child(Node.u8('area', friend.get_int('area', self.get_machine_region())))
|
||||||
game.add_child(Node.u32('exp', play_stats.get_int('exp')))
|
game.add_child(Node.u32('exp', play_stats.get_int('exp')))
|
||||||
game.add_child(Node.u32('star', friend.get_int('star')))
|
game.add_child(Node.u32('star', friend.get_int('star')))
|
||||||
|
|
||||||
|
@ -169,7 +169,7 @@ class DDR2013(
|
|||||||
flag.set_attribute('t', '0')
|
flag.set_attribute('t', '0')
|
||||||
flag.set_attribute('s1', '0')
|
flag.set_attribute('s1', '0')
|
||||||
flag.set_attribute('s2', '0')
|
flag.set_attribute('s2', '0')
|
||||||
flag.set_attribute('area', '51')
|
flag.set_attribute('area', str(self.get_machine_region()))
|
||||||
flag.set_attribute('is_final', '1')
|
flag.set_attribute('is_final', '1')
|
||||||
|
|
||||||
hit_chart = self.data.local.music.get_hit_chart(self.game, self.music_version, self.GAME_MAX_SONGS)
|
hit_chart = self.data.local.music.get_hit_chart(self.game, self.music_version, self.GAME_MAX_SONGS)
|
||||||
@ -281,7 +281,7 @@ class DDR2013(
|
|||||||
root.add_child(Node.string('seq', ''))
|
root.add_child(Node.string('seq', ''))
|
||||||
root.add_child(Node.u32('code', profile.extid))
|
root.add_child(Node.u32('code', profile.extid))
|
||||||
root.add_child(Node.string('name', profile.get_str('name')))
|
root.add_child(Node.string('name', profile.get_str('name')))
|
||||||
root.add_child(Node.u8('area', profile.get_int('area', 51)))
|
root.add_child(Node.u8('area', profile.get_int('area', self.get_machine_region())))
|
||||||
root.add_child(Node.u32('cnt_s', play_stats.get_int('single_plays')))
|
root.add_child(Node.u32('cnt_s', play_stats.get_int('single_plays')))
|
||||||
root.add_child(Node.u32('cnt_d', play_stats.get_int('double_plays')))
|
root.add_child(Node.u32('cnt_d', play_stats.get_int('double_plays')))
|
||||||
root.add_child(Node.u32('cnt_b', play_stats.get_int('battle_plays'))) # This could be wrong, its a guess
|
root.add_child(Node.u32('cnt_b', play_stats.get_int('battle_plays'))) # This could be wrong, its a guess
|
||||||
@ -416,7 +416,7 @@ class DDR2013(
|
|||||||
friendnode.set_attribute('up', '0')
|
friendnode.set_attribute('up', '0')
|
||||||
friendnode.add_child(Node.u32('code', friend.extid))
|
friendnode.add_child(Node.u32('code', friend.extid))
|
||||||
friendnode.add_child(Node.string('name', friend.get_str('name')))
|
friendnode.add_child(Node.string('name', friend.get_str('name')))
|
||||||
friendnode.add_child(Node.u8('area', friend.get_int('area', 51)))
|
friendnode.add_child(Node.u8('area', friend.get_int('area', self.get_machine_region())))
|
||||||
friendnode.add_child(Node.u32('exp', play_stats.get_int('exp')))
|
friendnode.add_child(Node.u32('exp', play_stats.get_int('exp')))
|
||||||
friendnode.add_child(Node.u32('star', friend.get_int('star')))
|
friendnode.add_child(Node.u32('star', friend.get_int('star')))
|
||||||
|
|
||||||
|
@ -163,7 +163,7 @@ class DDR2014(
|
|||||||
flag.set_attribute('t', '0')
|
flag.set_attribute('t', '0')
|
||||||
flag.set_attribute('s1', '0')
|
flag.set_attribute('s1', '0')
|
||||||
flag.set_attribute('s2', '0')
|
flag.set_attribute('s2', '0')
|
||||||
flag.set_attribute('area', '51')
|
flag.set_attribute('area', str(self.get_machine_region()))
|
||||||
flag.set_attribute('is_final', '0')
|
flag.set_attribute('is_final', '0')
|
||||||
|
|
||||||
# Last month's hit chart
|
# Last month's hit chart
|
||||||
@ -331,7 +331,7 @@ class DDR2014(
|
|||||||
root.add_child(Node.string('seq', ''))
|
root.add_child(Node.string('seq', ''))
|
||||||
root.add_child(Node.u32('code', profile.extid))
|
root.add_child(Node.u32('code', profile.extid))
|
||||||
root.add_child(Node.string('name', profile.get_str('name')))
|
root.add_child(Node.string('name', profile.get_str('name')))
|
||||||
root.add_child(Node.u8('area', profile.get_int('area', 51)))
|
root.add_child(Node.u8('area', profile.get_int('area', self.get_machine_region())))
|
||||||
root.add_child(Node.u32('cnt_s', play_stats.get_int('single_plays')))
|
root.add_child(Node.u32('cnt_s', play_stats.get_int('single_plays')))
|
||||||
root.add_child(Node.u32('cnt_d', play_stats.get_int('double_plays')))
|
root.add_child(Node.u32('cnt_d', play_stats.get_int('double_plays')))
|
||||||
root.add_child(Node.u32('cnt_b', play_stats.get_int('battle_plays'))) # This could be wrong, its a guess
|
root.add_child(Node.u32('cnt_b', play_stats.get_int('battle_plays'))) # This could be wrong, its a guess
|
||||||
@ -471,7 +471,7 @@ class DDR2014(
|
|||||||
friendnode.set_attribute('up', '0')
|
friendnode.set_attribute('up', '0')
|
||||||
friendnode.add_child(Node.u32('code', friend.extid))
|
friendnode.add_child(Node.u32('code', friend.extid))
|
||||||
friendnode.add_child(Node.string('name', friend.get_str('name')))
|
friendnode.add_child(Node.string('name', friend.get_str('name')))
|
||||||
friendnode.add_child(Node.u8('area', friend.get_int('area', 51)))
|
friendnode.add_child(Node.u8('area', friend.get_int('area', self.get_machine_region())))
|
||||||
friendnode.add_child(Node.u32('exp', play_stats.get_int('exp')))
|
friendnode.add_child(Node.u32('exp', play_stats.get_int('exp')))
|
||||||
friendnode.add_child(Node.u32('star', friend.get_int('star')))
|
friendnode.add_child(Node.u32('star', friend.get_int('star')))
|
||||||
|
|
||||||
|
@ -203,7 +203,7 @@ class DDRX2(
|
|||||||
|
|
||||||
typenode.add_child(Node.string('name', users[userid].get_str('name')))
|
typenode.add_child(Node.string('name', users[userid].get_str('name')))
|
||||||
typenode.add_child(Node.u32('score', score.points))
|
typenode.add_child(Node.u32('score', score.points))
|
||||||
typenode.add_child(Node.u16('area', users[userid].get_int('area', 51)))
|
typenode.add_child(Node.u16('area', users[userid].get_int('area', self.get_machine_region())))
|
||||||
typenode.add_child(Node.u8('rank', gamerank))
|
typenode.add_child(Node.u8('rank', gamerank))
|
||||||
typenode.add_child(Node.u8('combo_type', combo_type))
|
typenode.add_child(Node.u8('combo_type', combo_type))
|
||||||
|
|
||||||
@ -307,7 +307,7 @@ class DDRX2(
|
|||||||
root.add_child(Node.string('seq', ''))
|
root.add_child(Node.string('seq', ''))
|
||||||
root.add_child(Node.u32('code', profile.extid))
|
root.add_child(Node.u32('code', profile.extid))
|
||||||
root.add_child(Node.string('name', profile.get_str('name')))
|
root.add_child(Node.string('name', profile.get_str('name')))
|
||||||
root.add_child(Node.u8('area', profile.get_int('area', 51)))
|
root.add_child(Node.u8('area', profile.get_int('area', self.get_machine_region())))
|
||||||
root.add_child(Node.u32('cnt_s', play_stats.get_int('single_plays')))
|
root.add_child(Node.u32('cnt_s', play_stats.get_int('single_plays')))
|
||||||
root.add_child(Node.u32('cnt_d', play_stats.get_int('double_plays')))
|
root.add_child(Node.u32('cnt_d', play_stats.get_int('double_plays')))
|
||||||
root.add_child(Node.u32('cnt_b', play_stats.get_int('battle_plays'))) # This could be wrong, its a guess
|
root.add_child(Node.u32('cnt_b', play_stats.get_int('battle_plays'))) # This could be wrong, its a guess
|
||||||
@ -472,7 +472,7 @@ class DDRX2(
|
|||||||
friendnode.set_attribute('up', '0')
|
friendnode.set_attribute('up', '0')
|
||||||
friendnode.add_child(Node.u32('code', friend.extid))
|
friendnode.add_child(Node.u32('code', friend.extid))
|
||||||
friendnode.add_child(Node.string('name', friend.get_str('name')))
|
friendnode.add_child(Node.string('name', friend.get_str('name')))
|
||||||
friendnode.add_child(Node.u8('area', friend.get_int('area', 51)))
|
friendnode.add_child(Node.u8('area', friend.get_int('area', self.get_machine_region())))
|
||||||
friendnode.add_child(Node.u32('exp', play_stats.get_int('exp')))
|
friendnode.add_child(Node.u32('exp', play_stats.get_int('exp')))
|
||||||
friendnode.add_child(Node.u32('star', friend.get_int('star')))
|
friendnode.add_child(Node.u32('star', friend.get_int('star')))
|
||||||
|
|
||||||
|
@ -356,7 +356,7 @@ class DDRX3(
|
|||||||
root.add_child(Node.string('seq', ''))
|
root.add_child(Node.string('seq', ''))
|
||||||
root.add_child(Node.u32('code', profile.extid))
|
root.add_child(Node.u32('code', profile.extid))
|
||||||
root.add_child(Node.string('name', profile.get_str('name')))
|
root.add_child(Node.string('name', profile.get_str('name')))
|
||||||
root.add_child(Node.u8('area', profile.get_int('area', 51)))
|
root.add_child(Node.u8('area', profile.get_int('area', self.get_machine_region())))
|
||||||
root.add_child(Node.u32('cnt_s', play_stats.get_int('single_plays')))
|
root.add_child(Node.u32('cnt_s', play_stats.get_int('single_plays')))
|
||||||
root.add_child(Node.u32('cnt_d', play_stats.get_int('double_plays')))
|
root.add_child(Node.u32('cnt_d', play_stats.get_int('double_plays')))
|
||||||
root.add_child(Node.u32('cnt_b', play_stats.get_int('battle_plays'))) # This could be wrong, its a guess
|
root.add_child(Node.u32('cnt_b', play_stats.get_int('battle_plays'))) # This could be wrong, its a guess
|
||||||
@ -491,7 +491,7 @@ class DDRX3(
|
|||||||
friendnode.set_attribute('up', '0')
|
friendnode.set_attribute('up', '0')
|
||||||
friendnode.add_child(Node.u32('code', friend.extid))
|
friendnode.add_child(Node.u32('code', friend.extid))
|
||||||
friendnode.add_child(Node.string('name', friend.get_str('name')))
|
friendnode.add_child(Node.string('name', friend.get_str('name')))
|
||||||
friendnode.add_child(Node.u8('area', friend.get_int('area', 51)))
|
friendnode.add_child(Node.u8('area', friend.get_int('area', self.get_machine_region())))
|
||||||
friendnode.add_child(Node.u32('exp', play_stats.get_int('exp')))
|
friendnode.add_child(Node.u32('exp', play_stats.get_int('exp')))
|
||||||
friendnode.add_child(Node.u32('star', friend.get_int('star')))
|
friendnode.add_child(Node.u32('star', friend.get_int('star')))
|
||||||
|
|
||||||
|
@ -149,7 +149,7 @@ class IIDXBase(CoreHandler, CardManagerHandler, PASELIHandler, Base):
|
|||||||
if name is None:
|
if name is None:
|
||||||
name = 'なし'
|
name = 'なし'
|
||||||
if pid is None:
|
if pid is None:
|
||||||
pid = 51
|
pid = self.get_machine_region()
|
||||||
|
|
||||||
userid = self.data.remote.user.from_refid(self.game, self.version, refid)
|
userid = self.data.remote.user.from_refid(self.game, self.version, refid)
|
||||||
profile = Profile(
|
profile = Profile(
|
||||||
|
@ -13,3 +13,6 @@ class IIDXBistrover(IIDXBase):
|
|||||||
|
|
||||||
def previous_version(self) -> Optional[IIDXBase]:
|
def previous_version(self) -> Optional[IIDXBase]:
|
||||||
return IIDXHeroicVerse(self.data, self.config, self.model)
|
return IIDXHeroicVerse(self.data, self.config, self.model)
|
||||||
|
|
||||||
|
def requires_extended_regions(self) -> bool:
|
||||||
|
return True
|
||||||
|
@ -160,6 +160,9 @@ class IIDXCannonBallers(IIDXCourse, IIDXBase):
|
|||||||
],
|
],
|
||||||
}
|
}
|
||||||
|
|
||||||
|
def requires_extended_regions(self) -> bool:
|
||||||
|
return True
|
||||||
|
|
||||||
def db_to_game_status(self, db_status: int) -> int:
|
def db_to_game_status(self, db_status: int) -> int:
|
||||||
return {
|
return {
|
||||||
self.CLEAR_STATUS_NO_PLAY: self.GAME_CLEAR_STATUS_NO_PLAY,
|
self.CLEAR_STATUS_NO_PLAY: self.GAME_CLEAR_STATUS_NO_PLAY,
|
||||||
@ -303,7 +306,7 @@ class IIDXCannonBallers(IIDXCourse, IIDXBase):
|
|||||||
|
|
||||||
root = Node.void('IIDX25shop')
|
root = Node.void('IIDX25shop')
|
||||||
root.set_attribute('opname', machine_name)
|
root.set_attribute('opname', machine_name)
|
||||||
root.set_attribute('pid', '51')
|
root.set_attribute('pid', str(self.get_machine_region()))
|
||||||
root.set_attribute('cls_opt', '1' if close else '0')
|
root.set_attribute('cls_opt', '1' if close else '0')
|
||||||
root.set_attribute('hr', str(hour))
|
root.set_attribute('hr', str(hour))
|
||||||
root.set_attribute('mi', str(minute))
|
root.set_attribute('mi', str(minute))
|
||||||
|
@ -296,7 +296,7 @@ class IIDXCopula(IIDXCourse, IIDXBase):
|
|||||||
root.set_attribute('cls_opt', '0')
|
root.set_attribute('cls_opt', '0')
|
||||||
machine = self.data.local.machine.get_machine(self.config.machine.pcbid)
|
machine = self.data.local.machine.get_machine(self.config.machine.pcbid)
|
||||||
root.set_attribute('opname', machine.name)
|
root.set_attribute('opname', machine.name)
|
||||||
root.set_attribute('pid', '51')
|
root.set_attribute('pid', str(self.get_machine_region()))
|
||||||
return root
|
return root
|
||||||
|
|
||||||
if method == 'savename':
|
if method == 'savename':
|
||||||
|
@ -13,3 +13,6 @@ class IIDXHeroicVerse(IIDXBase):
|
|||||||
|
|
||||||
def previous_version(self) -> Optional[IIDXBase]:
|
def previous_version(self) -> Optional[IIDXBase]:
|
||||||
return IIDXRootage(self.data, self.config, self.model)
|
return IIDXRootage(self.data, self.config, self.model)
|
||||||
|
|
||||||
|
def requires_extended_regions(self) -> bool:
|
||||||
|
return True
|
||||||
|
@ -164,7 +164,7 @@ class IIDXPendual(IIDXCourse, IIDXBase):
|
|||||||
root.set_attribute('cls_opt', '0')
|
root.set_attribute('cls_opt', '0')
|
||||||
machine = self.data.local.machine.get_machine(self.config.machine.pcbid)
|
machine = self.data.local.machine.get_machine(self.config.machine.pcbid)
|
||||||
root.set_attribute('opname', machine.name)
|
root.set_attribute('opname', machine.name)
|
||||||
root.set_attribute('pid', '51')
|
root.set_attribute('pid', str(self.get_machine_region()))
|
||||||
return root
|
return root
|
||||||
|
|
||||||
if method == 'savename':
|
if method == 'savename':
|
||||||
|
@ -161,6 +161,9 @@ class IIDXRootage(IIDXCourse, IIDXBase):
|
|||||||
],
|
],
|
||||||
}
|
}
|
||||||
|
|
||||||
|
def requires_extended_regions(self) -> bool:
|
||||||
|
return True
|
||||||
|
|
||||||
def db_to_game_status(self, db_status: int) -> int:
|
def db_to_game_status(self, db_status: int) -> int:
|
||||||
return {
|
return {
|
||||||
self.CLEAR_STATUS_NO_PLAY: self.GAME_CLEAR_STATUS_NO_PLAY,
|
self.CLEAR_STATUS_NO_PLAY: self.GAME_CLEAR_STATUS_NO_PLAY,
|
||||||
@ -304,7 +307,7 @@ class IIDXRootage(IIDXCourse, IIDXBase):
|
|||||||
|
|
||||||
root = Node.void('IIDX26shop')
|
root = Node.void('IIDX26shop')
|
||||||
root.set_attribute('opname', machine_name)
|
root.set_attribute('opname', machine_name)
|
||||||
root.set_attribute('pid', '51')
|
root.set_attribute('pid', str(self.get_machine_region()))
|
||||||
root.set_attribute('cls_opt', '1' if close else '0')
|
root.set_attribute('cls_opt', '1' if close else '0')
|
||||||
root.set_attribute('hr', str(hour))
|
root.set_attribute('hr', str(hour))
|
||||||
root.set_attribute('mi', str(minute))
|
root.set_attribute('mi', str(minute))
|
||||||
|
@ -303,7 +303,7 @@ class IIDXSinobuz(IIDXCourse, IIDXBase):
|
|||||||
|
|
||||||
root = Node.void('IIDX24shop')
|
root = Node.void('IIDX24shop')
|
||||||
root.set_attribute('opname', machine_name)
|
root.set_attribute('opname', machine_name)
|
||||||
root.set_attribute('pid', '51')
|
root.set_attribute('pid', str(self.get_machine_region()))
|
||||||
root.set_attribute('cls_opt', '1' if close else '0')
|
root.set_attribute('cls_opt', '1' if close else '0')
|
||||||
root.set_attribute('hr', str(hour))
|
root.set_attribute('hr', str(hour))
|
||||||
root.set_attribute('mi', str(minute))
|
root.set_attribute('mi', str(minute))
|
||||||
|
@ -269,7 +269,7 @@ class IIDXSpada(IIDXBase):
|
|||||||
root.set_attribute('cls_opt', '0')
|
root.set_attribute('cls_opt', '0')
|
||||||
machine = self.data.local.machine.get_machine(self.config.machine.pcbid)
|
machine = self.data.local.machine.get_machine(self.config.machine.pcbid)
|
||||||
root.set_attribute('opname', machine.name)
|
root.set_attribute('opname', machine.name)
|
||||||
root.set_attribute('pid', '51')
|
root.set_attribute('pid', str(self.get_machine_region()))
|
||||||
return root
|
return root
|
||||||
|
|
||||||
if method == 'savename':
|
if method == 'savename':
|
||||||
|
@ -268,7 +268,7 @@ class IIDXTricoro(IIDXBase):
|
|||||||
root.set_attribute('cls_opt', '0')
|
root.set_attribute('cls_opt', '0')
|
||||||
machine = self.data.local.machine.get_machine(self.config.machine.pcbid)
|
machine = self.data.local.machine.get_machine(self.config.machine.pcbid)
|
||||||
root.set_attribute('opname', machine.name)
|
root.set_attribute('opname', machine.name)
|
||||||
root.set_attribute('pid', '51')
|
root.set_attribute('pid', str(self.get_machine_region()))
|
||||||
return root
|
return root
|
||||||
|
|
||||||
if method == 'savename':
|
if method == 'savename':
|
||||||
|
@ -459,7 +459,7 @@ class PopnMusicFantasia(PopnMusicBase):
|
|||||||
machine = self.get_machine()
|
machine = self.get_machine()
|
||||||
|
|
||||||
root = Node.void('playerdata')
|
root = Node.void('playerdata')
|
||||||
root.add_child(Node.s8('pref', machine.data.get_int('pref', -1)))
|
root.add_child(Node.s8('pref', machine.data.get_int('pref', self.get_machine_region())))
|
||||||
|
|
||||||
if refid is None:
|
if refid is None:
|
||||||
root.add_child(Node.string('name', ''))
|
root.add_child(Node.string('name', ''))
|
||||||
|
@ -396,7 +396,7 @@ class PopnMusicLapistoria(PopnMusicBase):
|
|||||||
course_id = request.child_value('course_id')
|
course_id = request.child_value('course_id')
|
||||||
if course_id is not None:
|
if course_id is not None:
|
||||||
machine = self.data.local.machine.get_machine(self.config.machine.pcbid)
|
machine = self.data.local.machine.get_machine(self.config.machine.pcbid)
|
||||||
pref = request.child_value('pref') or 51
|
pref = request.child_value('pref') or self.get_machine_region()
|
||||||
profile = self.get_profile(userid) or Profile(self.game, self.version, refid, 0)
|
profile = self.get_profile(userid) or Profile(self.game, self.version, refid, 0)
|
||||||
|
|
||||||
course = self.data.local.user.get_achievement(
|
course = self.data.local.user.get_achievement(
|
||||||
|
@ -543,7 +543,7 @@ class PopnMusicSunnyPark(PopnMusicBase):
|
|||||||
machine = self.get_machine()
|
machine = self.get_machine()
|
||||||
|
|
||||||
root = Node.void('playerdata')
|
root = Node.void('playerdata')
|
||||||
root.add_child(Node.s8('pref', machine.data.get_int('pref', -1)))
|
root.add_child(Node.s8('pref', machine.data.get_int('pref', self.get_machine_region())))
|
||||||
if refid is None:
|
if refid is None:
|
||||||
root.add_child(Node.string('name', ''))
|
root.add_child(Node.string('name', ''))
|
||||||
root.add_child(Node.s8('get_coupon_cnt', -1))
|
root.add_child(Node.s8('get_coupon_cnt', -1))
|
||||||
|
@ -96,13 +96,13 @@ class ReflecBeatLimelight(ReflecBeatBase):
|
|||||||
close = machine.data.get_bool('close')
|
close = machine.data.get_bool('close')
|
||||||
hour = machine.data.get_int('hour')
|
hour = machine.data.get_int('hour')
|
||||||
minute = machine.data.get_int('minute')
|
minute = machine.data.get_int('minute')
|
||||||
pref = machine.data.get_int('pref', 51)
|
pref = machine.data.get_int('pref', self.get_machine_region())
|
||||||
else:
|
else:
|
||||||
machine_name = ''
|
machine_name = ''
|
||||||
close = False
|
close = False
|
||||||
hour = 0
|
hour = 0
|
||||||
minute = 0
|
minute = 0
|
||||||
pref = 51
|
pref = self.get_machine_region()
|
||||||
|
|
||||||
root = Node.void('pcbinfo')
|
root = Node.void('pcbinfo')
|
||||||
info = Node.void('info')
|
info = Node.void('info')
|
||||||
|
@ -89,13 +89,13 @@ class ReflecBeat(ReflecBeatBase):
|
|||||||
close = machine.data.get_bool('close')
|
close = machine.data.get_bool('close')
|
||||||
hour = machine.data.get_int('hour')
|
hour = machine.data.get_int('hour')
|
||||||
minute = machine.data.get_int('minute')
|
minute = machine.data.get_int('minute')
|
||||||
pref = machine.data.get_int('pref', 51)
|
pref = machine.data.get_int('pref', self.get_machine_region())
|
||||||
else:
|
else:
|
||||||
machine_name = ''
|
machine_name = ''
|
||||||
close = False
|
close = False
|
||||||
hour = 0
|
hour = 0
|
||||||
minute = 0
|
minute = 0
|
||||||
pref = 51
|
pref = self.get_machine_region()
|
||||||
|
|
||||||
root = Node.void('pcbinfo')
|
root = Node.void('pcbinfo')
|
||||||
info = Node.void('info')
|
info = Node.void('info')
|
||||||
@ -140,7 +140,7 @@ class ReflecBeat(ReflecBeatBase):
|
|||||||
|
|
||||||
def handle_sysinfo_fan_request(self, request: Node) -> Node:
|
def handle_sysinfo_fan_request(self, request: Node) -> Node:
|
||||||
sysinfo = Node.void('sysinfo')
|
sysinfo = Node.void('sysinfo')
|
||||||
sysinfo.add_child(Node.u8('pref', 51))
|
sysinfo.add_child(Node.u8('pref', self.get_machine_region()))
|
||||||
sysinfo.add_child(Node.string('lid', request.child_value('lid')))
|
sysinfo.add_child(Node.string('lid', request.child_value('lid')))
|
||||||
return sysinfo
|
return sysinfo
|
||||||
|
|
||||||
|
@ -405,6 +405,10 @@ class _RegionConstants:
|
|||||||
MIN: Final[int] = 1
|
MIN: Final[int] = 1
|
||||||
MAX: Final[int] = 56
|
MAX: Final[int] = 56
|
||||||
|
|
||||||
|
# Min/max valid values for JP prefectures
|
||||||
|
MIN_PREF: Final[int] = 1
|
||||||
|
MAX_PREF: Final[int] = 47
|
||||||
|
|
||||||
# This is a really nasty LUT to attempt to make the frontend display
|
# This is a really nasty LUT to attempt to make the frontend display
|
||||||
# the same regardless of the game in question. This is mostly because
|
# the same regardless of the game in question. This is mostly because
|
||||||
# the prefecture/region stored in the profile is editable by IIDX and
|
# the prefecture/region stored in the profile is editable by IIDX and
|
||||||
|
@ -42,11 +42,13 @@ class ID:
|
|||||||
return None
|
return None
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def format_machine_id(machine_id: int) -> str:
|
def format_machine_id(machine_id: int, region: str = 'US') -> str:
|
||||||
"""
|
"""
|
||||||
Take a machine ID as an integer, format it as a string.
|
Take a machine ID as an integer, format it as a string.
|
||||||
"""
|
"""
|
||||||
return f'US-{machine_id}'
|
if region not in {'JP', 'KR', 'TW', 'HK', 'US', 'GB', 'IT', 'ES', 'FR', 'PT'}:
|
||||||
|
raise Exception(f'Invalid region {region}!')
|
||||||
|
return f'{region}-{machine_id}'
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def parse_machine_id(machine_id: str) -> Optional[int]:
|
def parse_machine_id(machine_id: str) -> Optional[int]:
|
||||||
@ -54,7 +56,7 @@ class ID:
|
|||||||
Take a formatted machine ID as a string, returning an int.
|
Take a formatted machine ID as a string, returning an int.
|
||||||
"""
|
"""
|
||||||
try:
|
try:
|
||||||
if machine_id[:3] == 'US-':
|
if machine_id[:2] in {'JP', 'KR', 'TW', 'HK', 'US', 'GB', 'IT', 'ES', 'FR', 'PT'} and machine_id[2] == '-':
|
||||||
return int(machine_id[3:])
|
return int(machine_id[3:])
|
||||||
except ValueError:
|
except ValueError:
|
||||||
pass
|
pass
|
||||||
|
Loading…
Reference in New Issue
Block a user