mirror of
https://github.com/DragonMinded/bemaniutils.git
synced 2026-08-23 19:04:24 -05:00
iidx: fix region select and add qpro select
This commit is contained in:
@@ -317,15 +317,20 @@ def viewsettings() -> Response:
|
||||
djinfo = frontend.get_all_player_info([userid])[userid]
|
||||
if not djinfo:
|
||||
abort(404)
|
||||
|
||||
versions = sorted(
|
||||
[version for (game, version, name) in frontend.all_games()],
|
||||
reverse=True,
|
||||
)
|
||||
return render_react(
|
||||
'IIDX Game Settings',
|
||||
'iidx/settings.react.js',
|
||||
{
|
||||
'player': djinfo,
|
||||
'versions': {version: name for (game, version, name) in frontend.all_games()},
|
||||
'qpros': frontend.get_all_items(versions),
|
||||
},
|
||||
{
|
||||
'updateqpro': url_for('iidx_pages.updateqpro'),
|
||||
'updateflags': url_for('iidx_pages.updateflags'),
|
||||
'updatesettings': url_for('iidx_pages.updatesettings'),
|
||||
'updatename': url_for('iidx_pages.updatename'),
|
||||
@@ -362,11 +367,15 @@ def updateflags() -> Dict[str, Any]:
|
||||
flagint += 0x040 if flags['rival_win_lose'] else 0
|
||||
flagint += 0x080 if flags['rival_info'] else 0
|
||||
flagint += 0x100 if flags['hide_play_count'] else 0
|
||||
flagint += 0x200 if flags['disable_graph_cutin'] else 0
|
||||
flagint += 0x400 if flags['classic_hispeed'] else 0
|
||||
flagint += 0x1000 if flags['hide_iidx_id'] else 0
|
||||
settings_dict.replace_int('flags', flagint)
|
||||
|
||||
# Update special case flags
|
||||
settings_dict.replace_int('disable_song_preview', 1 if flags['disable_song_preview'] else 0)
|
||||
settings_dict.replace_int('effector_lock', 1 if flags['effector_lock'] else 0)
|
||||
settings_dict.replace_int('disable_hcn_color', 1 if flags['disable_hcn_color'] else 0)
|
||||
|
||||
# Update the settings dict
|
||||
profile.replace_dict('settings', settings_dict)
|
||||
@@ -379,6 +388,37 @@ def updateflags() -> Dict[str, Any]:
|
||||
}
|
||||
|
||||
|
||||
@iidx_pages.route('/options/qpro/update', methods=['POST'])
|
||||
@jsonify
|
||||
@loginrequired
|
||||
def updateqpro() -> Dict[str, Any]:
|
||||
frontend = IIDXFrontend(g.data, g.config, g.cache)
|
||||
qpros = request.get_json()['qpro']
|
||||
version = int(request.get_json()['version'])
|
||||
user = g.data.local.user.get_user(g.userID)
|
||||
if user is None:
|
||||
raise Exception('Unable to find user to update!')
|
||||
|
||||
# Grab profile and qpro dict that needs updating
|
||||
profile = g.data.local.user.get_profile(GameConstants.IIDX, version, user.id)
|
||||
if profile is None:
|
||||
raise Exception('Unable to find profile to update!')
|
||||
qpro_dict = profile.get_dict('qpro')
|
||||
|
||||
for qpro in qpros:
|
||||
qpro_dict.replace_int(qpro, qpros[qpro])
|
||||
|
||||
# Update the qpro dict
|
||||
profile.replace_dict('qpro', qpro_dict)
|
||||
g.data.local.user.put_profile(GameConstants.IIDX, version, user.id, profile)
|
||||
|
||||
# Return updated qpro
|
||||
return {
|
||||
'qpro': frontend.format_qpro(qpro_dict),
|
||||
'version': version,
|
||||
}
|
||||
|
||||
|
||||
@iidx_pages.route('/options/settings/update', methods=['POST'])
|
||||
@jsonify
|
||||
@loginrequired
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# vim: set fileencoding=utf-8
|
||||
from typing import Any, Dict, Iterator, Optional, Tuple
|
||||
from typing import Any, Dict, Iterator, Optional, Tuple, List
|
||||
|
||||
from flask_caching import Cache # type: ignore
|
||||
|
||||
@@ -60,6 +60,18 @@ class IIDXFrontend(FrontendBase):
|
||||
21066: 16212,
|
||||
23030: 22096,
|
||||
23051: 22097,
|
||||
11101: 21214,
|
||||
14101: 21221,
|
||||
15104: 21225,
|
||||
15102: 21226,
|
||||
15101: 21231,
|
||||
15103: 21237,
|
||||
16105: 21240,
|
||||
16104: 21242,
|
||||
16103: 21253,
|
||||
16102: 21258,
|
||||
16101: 21262,
|
||||
14100: 21220,
|
||||
}
|
||||
# Some charts were changed, and others kept the same on these
|
||||
if chart in [0, 1, 2]:
|
||||
@@ -113,8 +125,12 @@ class IIDXFrontend(FrontendBase):
|
||||
'rival_win_lose': (flags & 0x040) != 0,
|
||||
'rival_info': (flags & 0x080) != 0,
|
||||
'hide_play_count': (flags & 0x100) != 0,
|
||||
'disable_graph_cutin': (flags & 0x200) != 0,
|
||||
'classic_hispeed': (flags & 0x400) != 0,
|
||||
'hide_iidx_id': (flags & 0x1000) != 0,
|
||||
'disable_song_preview': settings_dict.get_int('disable_song_preview') != 0,
|
||||
'effector_lock': settings_dict.get_int('effector_lock') != 0,
|
||||
'disable_hcn_color': settings_dict.get_int('disable_hcn_color') != 0,
|
||||
}
|
||||
|
||||
def format_settings(self, settings_dict: ValidatedDict) -> Dict[str, Any]:
|
||||
@@ -132,6 +148,41 @@ class IIDXFrontend(FrontendBase):
|
||||
'judge': settings_dict.get_int('judge'),
|
||||
'pacemaker': settings_dict.get_int('pacemaker'),
|
||||
'effector_preset': settings_dict.get_int('effector_preset'),
|
||||
'explosion_size': settings_dict.get_int('explosion_size'),
|
||||
'note_preview': settings_dict.get_int('note_preview'),
|
||||
}
|
||||
|
||||
def format_qpro(self, qpro_dict: ValidatedDict) -> Dict[str, Any]:
|
||||
return {
|
||||
'body': qpro_dict.get_int('body'),
|
||||
'face': qpro_dict.get_int('face'),
|
||||
'hair': qpro_dict.get_int('hair'),
|
||||
'hand': qpro_dict.get_int('hand'),
|
||||
'head': qpro_dict.get_int('head'),
|
||||
}
|
||||
|
||||
def get_all_items(self, versions: list) -> Dict[str, List[Dict[str, Any]]]:
|
||||
result = {}
|
||||
for version in versions:
|
||||
qpro = self.__format_iidx_extras(version)
|
||||
result[version] = qpro['qpros']
|
||||
return result
|
||||
|
||||
def __format_iidx_extras(self, version) -> Dict[str, List[Dict[str, Any]]]:
|
||||
# Gotta look up the unlock catalog
|
||||
items = self.data.local.game.get_items(self.game, version)
|
||||
|
||||
return {
|
||||
"qpros": [
|
||||
{
|
||||
"identifier": item.data.get_str("identifier"),
|
||||
"id": str(item.id),
|
||||
"name": item.data.get_str("name"),
|
||||
"type": item.type[3:],
|
||||
}
|
||||
for item in items
|
||||
if item.type in ['qp_body', 'qp_face', 'qp_hair', 'qp_hand', 'qp_head']
|
||||
],
|
||||
}
|
||||
|
||||
def format_profile(self, profile: ValidatedDict, playstats: ValidatedDict) -> Dict[str, Any]:
|
||||
@@ -149,6 +200,7 @@ class IIDXFrontend(FrontendBase):
|
||||
'ddan': self.format_dan_rank(profile.get_int('dgrade', -1)),
|
||||
'srank': profile.get_int('sgrade', -1),
|
||||
'drank': profile.get_int('dgrade', -1),
|
||||
'qpro': self.format_qpro(profile.get_dict('qpro')),
|
||||
})
|
||||
if 'shop_location' in profile:
|
||||
shop_id = profile.get_int('shop_location')
|
||||
|
||||
@@ -5,10 +5,14 @@ var pagenav = new History(valid_versions);
|
||||
|
||||
var menu_option_names = {
|
||||
'alphabet': 'alphabet folders',
|
||||
'classic_hispeed': 'classic hispeed',
|
||||
'difficulty': 'difficulty folders',
|
||||
'disable_graph_cutin': 'disable graph cut-in',
|
||||
'disable_hcn_color': 'disable hcn color',
|
||||
'disable_song_preview': 'disable song previews',
|
||||
'effector_lock': 'lock effector',
|
||||
'grade': 'grade folders',
|
||||
'hide_iidx_id': 'hide iidx id',
|
||||
'hide_play_count': 'hide play count on profile',
|
||||
'rival_info': 'rival info box',
|
||||
'rival_played': 'rival played folders',
|
||||
@@ -24,8 +28,12 @@ var valid_menu_options = [
|
||||
'rival_win_lose',
|
||||
'rival_info',
|
||||
'hide_play_count',
|
||||
'disable_graph_cutin',
|
||||
'classic_hispeed',
|
||||
'hide_iidx_id',
|
||||
'disable_song_preview',
|
||||
'effector_lock',
|
||||
'disable_hcn_color',
|
||||
];
|
||||
var theme_option_names = {
|
||||
'beam': 'Note Beam',
|
||||
@@ -40,7 +48,16 @@ var theme_option_names = {
|
||||
'voice': 'Menu Announcer Voice',
|
||||
'pacemaker': 'Pacemaker Skin',
|
||||
'effector_preset': 'Effector Preset',
|
||||
'explosion_size': 'Explosion Size',
|
||||
'note_preview': 'Note Preview',
|
||||
};
|
||||
var valid_qpro_options = [
|
||||
'body',
|
||||
'face',
|
||||
'hair',
|
||||
'hand',
|
||||
'head',
|
||||
];
|
||||
|
||||
var settings_view = React.createClass({
|
||||
|
||||
@@ -53,10 +70,13 @@ var settings_view = React.createClass({
|
||||
version: version,
|
||||
menu_changed: {},
|
||||
theme_changed: {},
|
||||
qpro_changed: {},
|
||||
menu_saving: {},
|
||||
theme_saving: {},
|
||||
qpro_saving: {},
|
||||
menu_saved: {},
|
||||
theme_saved: {},
|
||||
qpro_saved: {},
|
||||
new_name: window.player[version].name,
|
||||
editing_name: false,
|
||||
new_prefecture: window.player[version].prefecture,
|
||||
@@ -77,6 +97,21 @@ var settings_view = React.createClass({
|
||||
}
|
||||
},
|
||||
|
||||
setQproChanged: function(val) {
|
||||
this.state.qpro_changed[this.state.version] = val;
|
||||
return this.state.qpro_changed
|
||||
},
|
||||
|
||||
setQproSaving: function(val) {
|
||||
this.state.qpro_saving[this.state.version] = val;
|
||||
return this.state.qpro_saving;
|
||||
},
|
||||
|
||||
setQproSaved: function(val) {
|
||||
this.state.qpro_saved[this.state.version] = val;
|
||||
return this.state.qpro_saved;
|
||||
},
|
||||
|
||||
setMenuChanged: function(val) {
|
||||
this.state.menu_changed[this.state.version] = val;
|
||||
return this.state.menu_changed;
|
||||
@@ -107,6 +142,27 @@ var settings_view = React.createClass({
|
||||
return this.state.theme_saved;
|
||||
},
|
||||
|
||||
saveQproOptions: function(event) {
|
||||
this.setState({qpro_saving: this.setQproSaving(true), qpro_saved: this.setQproSaved(false)});
|
||||
AJAX.post(
|
||||
Link.get('updateqpro'),
|
||||
{
|
||||
version: this.state.version,
|
||||
qpro: this.state.player[this.state.version].qpro,
|
||||
},
|
||||
function(response) {
|
||||
var player = this.state.player
|
||||
player[response.version].qpro = response.qpro;
|
||||
this.setState({
|
||||
player: player,
|
||||
qpro_saving: this.setQproSaving(false),
|
||||
qpro_saved: this.setQproSaved(true),
|
||||
qpro_changed: this.setQproChanged(false),
|
||||
})
|
||||
}.bind(this)
|
||||
)
|
||||
},
|
||||
|
||||
saveMenuOptions: function(event) {
|
||||
this.setState({menu_saving: this.setMenuSaving(true), menu_saved: this.setMenuSaved(false)});
|
||||
AJAX.post(
|
||||
@@ -258,11 +314,12 @@ var settings_view = React.createClass({
|
||||
},
|
||||
|
||||
renderPrefecture: function(player) {
|
||||
regions = this.state.version >= 25 ? Regions2 : Regions;
|
||||
return (
|
||||
<LabelledSection vertical={true} label="Prefecture">{
|
||||
!this.state.editing_prefecture ?
|
||||
<span>
|
||||
<span>{Regions[player.prefecture]}</span>
|
||||
<span>{regions[player.prefecture]}</span>
|
||||
<Edit
|
||||
onClick={function(event) {
|
||||
this.setState({editing_prefecture: true});
|
||||
@@ -273,7 +330,7 @@ var settings_view = React.createClass({
|
||||
<SelectInt
|
||||
name="prefecture"
|
||||
value={this.state.new_prefecture}
|
||||
choices={Regions}
|
||||
choices={regions}
|
||||
onChange={function(choice) {
|
||||
this.setState({new_prefecture: choice});
|
||||
}.bind(this)}
|
||||
@@ -351,6 +408,62 @@ var settings_view = React.createClass({
|
||||
{this.renderPrefecture(player)}
|
||||
{this.renderHomeArcade(player)}
|
||||
</div>
|
||||
<div className="section">
|
||||
<h3>QPro</h3>
|
||||
<form className="inline">
|
||||
<div className="fields">
|
||||
{
|
||||
valid_qpro_options.map(function(qpro_option) {
|
||||
var player = this.state.player[this.state.version]
|
||||
var items = window.qpros[this.state.version].filter(function (qpro) {
|
||||
return qpro.type == qpro_option
|
||||
});
|
||||
var results = {};
|
||||
items
|
||||
.map(function(item) { return { 'id': item.id, 'name': `${item.name}` } })
|
||||
.forEach (value => results[value.id] = value.name);
|
||||
return (
|
||||
<div className="field">
|
||||
<b>{qpro_option}</b>
|
||||
<br/>
|
||||
<SelectInt
|
||||
name={qpro_option}
|
||||
value={player.qpro[qpro_option]}
|
||||
choices={results}
|
||||
onChange={function(choice) {
|
||||
var player = this.state.player;
|
||||
player[this.state.version].qpro[qpro_option] = choice;
|
||||
this.setState({
|
||||
player: player,
|
||||
qpro_changed: this.setQproChanged(true),
|
||||
})
|
||||
}.bind(this)}
|
||||
/>
|
||||
</div>
|
||||
)
|
||||
}.bind(this))
|
||||
}
|
||||
<div className="field">
|
||||
<input
|
||||
type="submit"
|
||||
value="save"
|
||||
disabled={!this.state.qpro_changed[this.state.version]}
|
||||
onClick={function(event) {
|
||||
this.saveQproOptions(event);
|
||||
}.bind(this)}
|
||||
/>
|
||||
{ this.state.qpro_saving[this.state.version] ?
|
||||
<img className="loading" src={Link.get('static', 'loading-16.gif')} /> :
|
||||
null
|
||||
}
|
||||
{ this.state.qpro_saved[this.state.version] ?
|
||||
<span>✓</span> :
|
||||
null
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<div className="section">
|
||||
<h3>Theme</h3>
|
||||
{Object.keys(IIDXOptions[this.state.version]).map(function(theme_option) {
|
||||
|
||||
@@ -1047,4 +1047,913 @@ var IIDXOptions = {
|
||||
"PITCH",
|
||||
],
|
||||
},
|
||||
"25": {
|
||||
"turntable": [
|
||||
"DEFAULT",
|
||||
"TRAN",
|
||||
"TAITYOU",
|
||||
"DELTA",
|
||||
"HAPPYSKY",
|
||||
"DISTORTED",
|
||||
"GOLD",
|
||||
"TROOPERS",
|
||||
"EMPRESS",
|
||||
"SIRIUS",
|
||||
"RESORT",
|
||||
"LINCLE",
|
||||
"TRICORO",
|
||||
"SPADA",
|
||||
"SHAKUNETSU",
|
||||
"SUPER STAR",
|
||||
"PENDUAL",
|
||||
"COPULA",
|
||||
"SINOBUZ",
|
||||
"CANNON BALLERS",
|
||||
],
|
||||
"burst": [
|
||||
"DEFAULT",
|
||||
"1ST",
|
||||
"9TH",
|
||||
"RED",
|
||||
"HAPPYSKY",
|
||||
"DISTORTED",
|
||||
"GOLD",
|
||||
"TROOPERS",
|
||||
"EMPRESS",
|
||||
"SIRIUS",
|
||||
"RESORT",
|
||||
"LINCLE",
|
||||
"TRICORO",
|
||||
"SPADA",
|
||||
"SUPER STAR",
|
||||
"PENDUAL",
|
||||
"COPULA",
|
||||
"SINOBUZ",
|
||||
"CANNON SPARK",
|
||||
],
|
||||
"towel": [
|
||||
"DEFAULT",
|
||||
"SIGSIG",
|
||||
"NAIBU FRAME",
|
||||
"SKY",
|
||||
"KAMAITACHI",
|
||||
"TAORU",
|
||||
"COSMOS",
|
||||
"DOKYO KYODAI",
|
||||
"BLIND J",
|
||||
"MEISAI",
|
||||
"BLOOMIN",
|
||||
"MARIE A",
|
||||
"ELISHA",
|
||||
"KUNG-FU",
|
||||
"TUNE BEAT3",
|
||||
"EMPRESS",
|
||||
"PRO WORLD",
|
||||
"3Y3S",
|
||||
"UMEGIRI",
|
||||
"KANZAKI",
|
||||
"ROCK DA H",
|
||||
"DOOR RAINBOW",
|
||||
"AEGIS",
|
||||
"VERMILLION",
|
||||
"PHOENIX",
|
||||
"LUCKY DAYS",
|
||||
"ALMACE",
|
||||
"DIAMOND CROSS",
|
||||
"MAMONIS",
|
||||
"ASHEMU",
|
||||
"BULLUVEGOLA",
|
||||
"BERIDZEBETH1",
|
||||
"LEVASLATER",
|
||||
"STN",
|
||||
"RCHE1",
|
||||
"NEULAKYUSSRA",
|
||||
"CYBELE",
|
||||
"CUVELIA",
|
||||
"LIBERATION",
|
||||
"PRALUDIUM",
|
||||
"SHOJO ALICE",
|
||||
"REGENERATION",
|
||||
"20SYSTEM BG",
|
||||
"DOGMA A",
|
||||
"DOGMA B",
|
||||
"ELEKTRICK U",
|
||||
"MAGIC LOVE",
|
||||
"SPADA",
|
||||
"S!CK",
|
||||
"CONCEPTUAL",
|
||||
"ELPIS1",
|
||||
"RUMRUM",
|
||||
"SYNC-ANTHEM",
|
||||
"THOR'S HAM",
|
||||
"PLAN 8",
|
||||
"KASOKUKAN",
|
||||
"8BIT P",
|
||||
"PLANARIAN",
|
||||
"DYNAMITE",
|
||||
"DECOHERENCE",
|
||||
"TORIKAGO",
|
||||
"PROOF",
|
||||
"BRAVE GLOW1",
|
||||
"BRAVE GLOW2",
|
||||
"VEGA1",
|
||||
"VEGA2",
|
||||
"CASINO FIRE",
|
||||
"NEW LIGHTS",
|
||||
"SHAKUNETSU2",
|
||||
"NOCHOKU",
|
||||
"KYATORARE",
|
||||
"ONLY ONE",
|
||||
"JIZAL",
|
||||
"JACKTILLO",
|
||||
"JACKHANS",
|
||||
"JENS",
|
||||
"AMDUSIAN",
|
||||
"MAXWELLION",
|
||||
"LAPLASIA",
|
||||
"RCHE2",
|
||||
"SUMOMO",
|
||||
"FAULA",
|
||||
"BERIDZEBETH2",
|
||||
"ELPIS2",
|
||||
"FERIRA",
|
||||
"ALL PATONA",
|
||||
"MEISAI",
|
||||
"NINGYO",
|
||||
"URARA",
|
||||
"SHELTER",
|
||||
"ACID PUMPER",
|
||||
"X",
|
||||
"ON THE FM",
|
||||
"NIGHTMARE",
|
||||
"HIGHCHARGE",
|
||||
"GODSPEED1",
|
||||
"GODSPEED2",
|
||||
"GENERATE",
|
||||
"DYNAMITE",
|
||||
"DEVIL'S GEAR",
|
||||
"DPS",
|
||||
"AZISAI",
|
||||
"LA DOLCE",
|
||||
"AO-1",
|
||||
"HELL OR HELL",
|
||||
"RYOUSHI",
|
||||
"EKINEKO",
|
||||
"FUYUTUBAKI",
|
||||
"PAPAYAPA",
|
||||
"KARASU",
|
||||
"ASIAN DIS",
|
||||
"TOGAKUSHI",
|
||||
"MODULAR TEC",
|
||||
"SHISHIKASUMU",
|
||||
"MUSIC IS ANS",
|
||||
"VIVA",
|
||||
"SINOBUZ",
|
||||
"CHASER XX",
|
||||
"AMOR",
|
||||
"EDIBLE FLWR",
|
||||
"HI*BISCUS",
|
||||
"MIDNIGHT LDY",
|
||||
"FUTURE IS D",
|
||||
"BREAK STASIS",
|
||||
"SOGEN NO OJO",
|
||||
"EXHAUST HYPE",
|
||||
"25UI",
|
||||
"ENGOKU OVRKL",
|
||||
"BREAKIN CHAN",
|
||||
"TSUGARU SETS",
|
||||
"YELLOW SKTCH",
|
||||
"STEEL EDGE",
|
||||
"GO AHEAD!!",
|
||||
"[[dummy-133]]",
|
||||
"IZANAMI",
|
||||
"GUNGNIR",
|
||||
"[[dummy-136]]",
|
||||
"BROGAMER",
|
||||
"[[dummy-138]]",
|
||||
"[[dummy-139]]",
|
||||
"QUAKES",
|
||||
"[[dummy-141]]",
|
||||
"ECHIDNA",
|
||||
"SNAKEY KUNGF",
|
||||
"BUZRA",
|
||||
"SHINOBI RNK",
|
||||
"HOUGU BZR",
|
||||
],
|
||||
"noteskin": [
|
||||
"DEFAULT",
|
||||
"6DOT",
|
||||
"4DOT",
|
||||
"GORGEOUS",
|
||||
"AQUA",
|
||||
"GAL",
|
||||
"FOTON",
|
||||
"PASTEL",
|
||||
"SIMPLE",
|
||||
"LIGHT",
|
||||
"TRICORO",
|
||||
"BUBBLE",
|
||||
],
|
||||
"full_combo": [
|
||||
"DEFAULT",
|
||||
"RED",
|
||||
"HAPPYSKY",
|
||||
"DISTORTED",
|
||||
"GOLD",
|
||||
"TROOPERS",
|
||||
"EMPRESS",
|
||||
"SIRIUS",
|
||||
"RESORT",
|
||||
"LINCLE",
|
||||
"TRICORO",
|
||||
"SPADA",
|
||||
"SUPER STAR",
|
||||
"PENDUAL",
|
||||
"COPULA",
|
||||
"SINOBUZ",
|
||||
"CANNON FINISH",
|
||||
],
|
||||
"beam": [
|
||||
"DEFAULT",
|
||||
"SHORT",
|
||||
"LONG",
|
||||
"ORANGE",
|
||||
"PINK",
|
||||
"MONOCHRO",
|
||||
"VERY SHORT",
|
||||
"LIGHTNING",
|
||||
"SUPER STAR",
|
||||
"COPULIGHT",
|
||||
"CB BEAM",
|
||||
],
|
||||
"judge": [
|
||||
"DEFAULT",
|
||||
"DIGITAL",
|
||||
"SMART",
|
||||
"METALLIC",
|
||||
"TECHNO",
|
||||
"WIRE",
|
||||
"ABYSS",
|
||||
"SPADA",
|
||||
"ANCIENT",
|
||||
"SUPER STAR",
|
||||
"ELECTRONIC",
|
||||
"SINOBUZ",
|
||||
"SEGMENT",
|
||||
],
|
||||
"pacemaker": [
|
||||
"DEFAULT",
|
||||
"SIGSIG",
|
||||
"NAIBU FRAME",
|
||||
"SKY",
|
||||
"KAMAITACHI",
|
||||
"TAORU",
|
||||
"COSMOS",
|
||||
"DOKYO KYODAI",
|
||||
"BLIND J",
|
||||
"MEISAI",
|
||||
"BLOOMIN",
|
||||
"MARIE A",
|
||||
"ELISHA",
|
||||
"KUNG-FU",
|
||||
"TUNE BEAT3",
|
||||
"EMPRESS",
|
||||
"PRO WORLD",
|
||||
"3Y3S",
|
||||
"UMEGIRI",
|
||||
"KANZAKI",
|
||||
"ROCK DA H",
|
||||
"DOOR RAINBOW",
|
||||
"AEGIS",
|
||||
"VERMILLION",
|
||||
"PHOENIX",
|
||||
"LUCKY DAYS",
|
||||
"ALMACE",
|
||||
"DIAMOND CROSS",
|
||||
"MAMONIS",
|
||||
"ASHEMU",
|
||||
"BULLUVEGOLA",
|
||||
"BERIDZEBETH1",
|
||||
"LEVASLATER",
|
||||
"STN",
|
||||
"RCHE1",
|
||||
"NEULAKYUSSRA",
|
||||
"CYBELE",
|
||||
"CUVELIA",
|
||||
"LIBERATION",
|
||||
"PRALUDIUM",
|
||||
"SHOJO ALICE",
|
||||
"REGENERATION",
|
||||
"20SYSTEM BG",
|
||||
"DOGMA A",
|
||||
"DOGMA B",
|
||||
"ELEKTRICK U",
|
||||
"MAGIC LOVE",
|
||||
"SPADA",
|
||||
"S!CK",
|
||||
"CONCEPTUAL",
|
||||
"ELPIS1",
|
||||
"RUMRUM",
|
||||
"SYNC-ANTHEM",
|
||||
"THOR'S HAM",
|
||||
"PLAN 8",
|
||||
"KASOKUKAN",
|
||||
"8BIT P",
|
||||
"PLANARIAN",
|
||||
"DYNAMITE",
|
||||
"DECOHERENCE",
|
||||
"TORIKAGO",
|
||||
"PROOF",
|
||||
"BRAVE GLOW1",
|
||||
"BRAVE GLOW2",
|
||||
"VEGA1",
|
||||
"VEGA2",
|
||||
"CASINO FIRE",
|
||||
"NEW LIGHTS",
|
||||
"SHAKUNETSU2",
|
||||
"NOCHOKU",
|
||||
"KYATORARE",
|
||||
"ONLY ONE",
|
||||
"JIZAL",
|
||||
"JACKTILLO",
|
||||
"JACKHANS",
|
||||
"JENS",
|
||||
"AMDUSIAN",
|
||||
"MAXWELLION",
|
||||
"LAPLASIA",
|
||||
"RCHE2",
|
||||
"SUMOMO",
|
||||
"FAULA",
|
||||
"BERIDZEBETH2",
|
||||
"ELPIS2",
|
||||
"FERIRA",
|
||||
"ALL PATONA",
|
||||
"MEISAI",
|
||||
"NINGYO",
|
||||
"URARA",
|
||||
"SHELTER",
|
||||
"ACID PUMPER",
|
||||
"X",
|
||||
"ON THE FM",
|
||||
"NIGHTMARE",
|
||||
"HIGHCHARGE",
|
||||
"GODSPEED1",
|
||||
"GODSPEED2",
|
||||
"GENERATE",
|
||||
"DYNAMITE",
|
||||
"DEVIL'S GEAR",
|
||||
"DPS",
|
||||
"AZISAI",
|
||||
"LA DOLCE",
|
||||
"AO-1",
|
||||
"HELL OR HELL",
|
||||
"RYOUSHI",
|
||||
"EKINEKO",
|
||||
"FUYUTUBAKI",
|
||||
"PAPAYAPA",
|
||||
"KARASU",
|
||||
"ASIAN DIS",
|
||||
"TOGAKUSHI",
|
||||
"MODULAR TEC",
|
||||
"SHISHIKASUMU",
|
||||
"MUSIC IS ANS",
|
||||
"VIVA",
|
||||
"SINOBUZ",
|
||||
"CHASER XX",
|
||||
"AMOR",
|
||||
"EDIBLE FLWR",
|
||||
"HI*BISCUS",
|
||||
"MIDNIGHT LDY",
|
||||
"FUTURE IS D",
|
||||
"BREAK STASIS",
|
||||
"SOGEN NO OJO",
|
||||
"EXHAUST HYPE",
|
||||
"25UI",
|
||||
"ENGOKU OVRKL",
|
||||
"BREAKIN CHAN",
|
||||
"TSUGARU SETS",
|
||||
"YELLOW SKTCH",
|
||||
"STEEL EDGE",
|
||||
"GO AHEAD!!",
|
||||
"[[dummy-133]]",
|
||||
"IZANAMI",
|
||||
"GUNGNIR",
|
||||
"[[dummy-136]]",
|
||||
"BROGAMER",
|
||||
"[[dummy-138]]",
|
||||
"[[dummy-139]]",
|
||||
"QUAKES",
|
||||
"[[dummy-141]]",
|
||||
"ECHIDNA",
|
||||
"SNAKEY KUNGF",
|
||||
"BUZRA",
|
||||
"SHINOBI RNK",
|
||||
"HOUGU BZR",
|
||||
],
|
||||
"effector_preset": [
|
||||
"OFF",
|
||||
"ECHO",
|
||||
"COMPRESSOR",
|
||||
"CHORUS",
|
||||
"GARGLE",
|
||||
"EQ ONLY",
|
||||
],
|
||||
"voice": [
|
||||
"DEFAULT",
|
||||
"MORI ICCHOU",
|
||||
],
|
||||
},
|
||||
"26": {
|
||||
"frame": [
|
||||
"DEFAULT",
|
||||
"8th style",
|
||||
"14 GOLD",
|
||||
"17 SIRIUS",
|
||||
"19 Lincle",
|
||||
"16 EMPRESS",
|
||||
"21 SPADA",
|
||||
"3rd style",
|
||||
"12 HAPPY SKY",
|
||||
],
|
||||
"bgm": [
|
||||
"DEFAULT",
|
||||
"8th style",
|
||||
"14 GOLD",
|
||||
"17 SIRIUS",
|
||||
"19 Lincle",
|
||||
"16 EMPRESS",
|
||||
"21 SPADA",
|
||||
"3rd style",
|
||||
"HAPPY SKY",
|
||||
"GO OVER WITH GLARE"
|
||||
],
|
||||
"turntable": [
|
||||
"DEFAULT",
|
||||
"TRAN",
|
||||
"TAITYOU",
|
||||
"DELTA",
|
||||
"HAPPYSKY",
|
||||
"DISTORTED",
|
||||
"GOLD",
|
||||
"TROOPERS",
|
||||
"EMPRESS",
|
||||
"SIRIUS",
|
||||
"RESORT",
|
||||
"LINCLE",
|
||||
"TRICORO",
|
||||
"SPADA",
|
||||
"SHAKUNETSU",
|
||||
"SUPER STAR",
|
||||
"PENDUAL",
|
||||
"COPULA",
|
||||
"SINOBUZ",
|
||||
"CANNON BALLERS",
|
||||
"ROOTAGE",
|
||||
],
|
||||
"burst": [
|
||||
"DEFAULT",
|
||||
"1ST",
|
||||
"9TH",
|
||||
"RED",
|
||||
"HAPPYSKY",
|
||||
"DISTORTED",
|
||||
"GOLD",
|
||||
"TROOPERS",
|
||||
"EMPRESS",
|
||||
"SIRIUS",
|
||||
"RESORT",
|
||||
"LINCLE",
|
||||
"TRICORO",
|
||||
"SPADA",
|
||||
"SUPER STAR",
|
||||
"PENDUAL",
|
||||
"COPULA",
|
||||
"SINOBUZ",
|
||||
"CANNON SPARK",
|
||||
"ROOTAGE",
|
||||
],
|
||||
"towel": [
|
||||
"DEFAULT",
|
||||
"SIGSIG",
|
||||
"NAIBU FRAME",
|
||||
"SKY",
|
||||
"KAMAITACHI",
|
||||
"TAORU",
|
||||
"COSMOS",
|
||||
"DOKYO KYODAI",
|
||||
"BLIND J",
|
||||
"MEISAI",
|
||||
"BLOOMIN",
|
||||
"MARIE A",
|
||||
"ELISHA",
|
||||
"KUNG-FU",
|
||||
"TUNE BEAT3",
|
||||
"EMPRESS",
|
||||
"PRO WORLD",
|
||||
"3Y3S",
|
||||
"UMEGIRI",
|
||||
"KANZAKI",
|
||||
"ROCK DA H",
|
||||
"DOOR RAINBOW",
|
||||
"AEGIS",
|
||||
"VERMILLION",
|
||||
"PHOENIX",
|
||||
"LUCKY DAYS",
|
||||
"ALMACE",
|
||||
"DIAMOND CROSS",
|
||||
"MAMONIS",
|
||||
"ASHEMU",
|
||||
"BULLUVEGOLA",
|
||||
"BERIDZEBETH1",
|
||||
"LEVASLATER",
|
||||
"STN",
|
||||
"RCHE1",
|
||||
"NEULAKYUSSRA",
|
||||
"CYBELE",
|
||||
"CUVELIA",
|
||||
"LIBERATION",
|
||||
"PRALUDIUM",
|
||||
"SHOJO ALICE",
|
||||
"REGENERATION",
|
||||
"20SYSTEM BG",
|
||||
"DOGMA A",
|
||||
"DOGMA B",
|
||||
"ELEKTRICK U",
|
||||
"MAGIC LOVE",
|
||||
"SPADA",
|
||||
"S!CK",
|
||||
"CONCEPTUAL",
|
||||
"ELPIS1",
|
||||
"RUMRUM",
|
||||
"SYNC-ANTHEM",
|
||||
"THOR'S HAM",
|
||||
"PLAN 8",
|
||||
"KASOKUKAN",
|
||||
"8BIT P",
|
||||
"PLANARIAN",
|
||||
"DYNAMITE",
|
||||
"DECOHERENCE",
|
||||
"TORIKAGO",
|
||||
"PROOF",
|
||||
"BRAVE GLOW1",
|
||||
"BRAVE GLOW2",
|
||||
"VEGA1",
|
||||
"VEGA2",
|
||||
"CASINO FIRE",
|
||||
"NEW LIGHTS",
|
||||
"SHAKUNETSU2",
|
||||
"NOCHOKU",
|
||||
"KYATORARE",
|
||||
"ONLY ONE",
|
||||
"JIZAL",
|
||||
"JACKTILLO",
|
||||
"JACKHANS",
|
||||
"JENS",
|
||||
"AMDUSIAN",
|
||||
"MAXWELLION",
|
||||
"LAPLASIA",
|
||||
"RCHE2",
|
||||
"SUMOMO",
|
||||
"FAULA",
|
||||
"BERIDZEBETH2",
|
||||
"ELPIS2",
|
||||
"FERIRA",
|
||||
"ALL PATONA",
|
||||
"MEISAI",
|
||||
"NINGYO",
|
||||
"URARA",
|
||||
"SHELTER",
|
||||
"ACID PUMPER",
|
||||
"X",
|
||||
"ON THE FM",
|
||||
"NIGHTMARE",
|
||||
"HIGHCHARGE",
|
||||
"GODSPEED1",
|
||||
"GODSPEED2",
|
||||
"GENERATE",
|
||||
"DYNAMITE",
|
||||
"DEVIL'S GEAR",
|
||||
"DPS",
|
||||
"AZISAI",
|
||||
"LA DOLCE",
|
||||
"AO-1",
|
||||
"HELL OR HELL",
|
||||
"RYOUSHI",
|
||||
"EKINEKO",
|
||||
"FUYUTUBAKI",
|
||||
"PAPAYAPA",
|
||||
"KARASU",
|
||||
"ASIAN DIS",
|
||||
"TOGAKUSHI",
|
||||
"MODULAR TEC",
|
||||
"SHISHIKASUMU",
|
||||
"MUSIC IS ANS",
|
||||
"VIVA",
|
||||
"SINOBUZ",
|
||||
"CHASER XX",
|
||||
"AMOR",
|
||||
"EDIBLE FLWR",
|
||||
"HI*BISCUS",
|
||||
"MIDNIGHT LDY",
|
||||
"FUTURE IS D",
|
||||
"BREAK STASIS",
|
||||
"SOGEN NO OJO",
|
||||
"EXHAUST HYPE",
|
||||
"25UI",
|
||||
"ENGOKU OVRKL",
|
||||
"BREAKIN CHAN",
|
||||
"TSUGARU SETS",
|
||||
"YELLOW SKTCH",
|
||||
"STEEL EDGE",
|
||||
"GO AHEAD!!",
|
||||
"[[dummy-133]]",
|
||||
"IZANAMI",
|
||||
"GUNGNIR",
|
||||
"[[dummy-136]]",
|
||||
"BROGAMER",
|
||||
"[[dummy-138]]",
|
||||
"[[dummy-139]]",
|
||||
"QUAKES",
|
||||
"[[dummy-141]]",
|
||||
"ECHIDNA",
|
||||
"SNAKEY KUNGF",
|
||||
"BUZRA",
|
||||
"SHINOBI RNK",
|
||||
"HOUGU BZR",
|
||||
"HADES",
|
||||
"DEATHZIGOQ",
|
||||
"TOKYO SHINWA",
|
||||
"INITATION",
|
||||
"EMERALDAS",
|
||||
"CHEMICAL COO",
|
||||
"NIGHT CITY",
|
||||
"SHIMURUGU",
|
||||
"N'PA PA BBQ",
|
||||
"ANCHOR",
|
||||
"IIDX AIR RAC",
|
||||
"THE DAY OF J",
|
||||
"HEISEI",
|
||||
"IDC feat.",
|
||||
"YUM YUM JELL",
|
||||
"NATSU NO NI",
|
||||
"HURRY HURRY",
|
||||
"OVERTIME",
|
||||
"MISUTORESU",
|
||||
"EMBER LIGHTS",
|
||||
],
|
||||
"noteskin": [
|
||||
"DEFAULT",
|
||||
"6DOT",
|
||||
"4DOT",
|
||||
"GORGEOUS",
|
||||
"AQUA",
|
||||
"GAL",
|
||||
"FOTON",
|
||||
"PASTEL",
|
||||
"SIMPLE",
|
||||
"LIGHT",
|
||||
"TRICORO",
|
||||
"BUBBLE",
|
||||
],
|
||||
"full_combo": [
|
||||
"DEFAULT",
|
||||
"RED",
|
||||
"HAPPYSKY",
|
||||
"DISTORTED",
|
||||
"GOLD",
|
||||
"TROOPERS",
|
||||
"EMPRESS",
|
||||
"SIRIUS",
|
||||
"RESORT",
|
||||
"LINCLE",
|
||||
"TRICORO",
|
||||
"SPADA",
|
||||
"SUPER STAR",
|
||||
"PENDUAL",
|
||||
"COPULA",
|
||||
"SINOBUZ",
|
||||
"CANNON FINISH",
|
||||
"ROOTAGE",
|
||||
],
|
||||
"beam": [
|
||||
"DEFAULT",
|
||||
"SHORT",
|
||||
"LONG",
|
||||
"ORANGE",
|
||||
"PINK",
|
||||
"MONOCHRO",
|
||||
"VERY SHORT",
|
||||
"LIGHTNING",
|
||||
"SUPER STAR",
|
||||
"COPULIGHT",
|
||||
"CB BEAM",
|
||||
],
|
||||
"judge": [
|
||||
"DEFAULT",
|
||||
"DIGITAL",
|
||||
"SMART",
|
||||
"METALLIC",
|
||||
"TECHNO",
|
||||
"WIRE",
|
||||
"ABYSS",
|
||||
"SPADA",
|
||||
"ANCIENT",
|
||||
"SUPER STAR",
|
||||
"ELECTRONIC",
|
||||
"SINOBUZ",
|
||||
"SEGMENT",
|
||||
"ROOTAGE",
|
||||
],
|
||||
"pacemaker": [
|
||||
"DEFAULT",
|
||||
"SIGSIG",
|
||||
"NAIBU FRAME",
|
||||
"SKY",
|
||||
"KAMAITACHI",
|
||||
"TAORU",
|
||||
"COSMOS",
|
||||
"DOKYO KYODAI",
|
||||
"BLIND J",
|
||||
"MEISAI",
|
||||
"BLOOMIN",
|
||||
"MARIE A",
|
||||
"ELISHA",
|
||||
"KUNG-FU",
|
||||
"TUNE BEAT3",
|
||||
"EMPRESS",
|
||||
"PRO WORLD",
|
||||
"3Y3S",
|
||||
"UMEGIRI",
|
||||
"KANZAKI",
|
||||
"ROCK DA H",
|
||||
"DOOR RAINBOW",
|
||||
"AEGIS",
|
||||
"VERMILLION",
|
||||
"PHOENIX",
|
||||
"LUCKY DAYS",
|
||||
"ALMACE",
|
||||
"DIAMOND CROSS",
|
||||
"MAMONIS",
|
||||
"ASHEMU",
|
||||
"BULLUVEGOLA",
|
||||
"BERIDZEBETH1",
|
||||
"LEVASLATER",
|
||||
"STN",
|
||||
"RCHE1",
|
||||
"NEULAKYUSSRA",
|
||||
"CYBELE",
|
||||
"CUVELIA",
|
||||
"LIBERATION",
|
||||
"PRALUDIUM",
|
||||
"SHOJO ALICE",
|
||||
"REGENERATION",
|
||||
"20SYSTEM BG",
|
||||
"DOGMA A",
|
||||
"DOGMA B",
|
||||
"ELEKTRICK U",
|
||||
"MAGIC LOVE",
|
||||
"SPADA",
|
||||
"S!CK",
|
||||
"CONCEPTUAL",
|
||||
"ELPIS1",
|
||||
"RUMRUM",
|
||||
"SYNC-ANTHEM",
|
||||
"THOR'S HAM",
|
||||
"PLAN 8",
|
||||
"KASOKUKAN",
|
||||
"8BIT P",
|
||||
"PLANARIAN",
|
||||
"DYNAMITE",
|
||||
"DECOHERENCE",
|
||||
"TORIKAGO",
|
||||
"PROOF",
|
||||
"BRAVE GLOW1",
|
||||
"BRAVE GLOW2",
|
||||
"VEGA1",
|
||||
"VEGA2",
|
||||
"CASINO FIRE",
|
||||
"NEW LIGHTS",
|
||||
"SHAKUNETSU2",
|
||||
"NOCHOKU",
|
||||
"KYATORARE",
|
||||
"ONLY ONE",
|
||||
"JIZAL",
|
||||
"JACKTILLO",
|
||||
"JACKHANS",
|
||||
"JENS",
|
||||
"AMDUSIAN",
|
||||
"MAXWELLION",
|
||||
"LAPLASIA",
|
||||
"RCHE2",
|
||||
"SUMOMO",
|
||||
"FAULA",
|
||||
"BERIDZEBETH2",
|
||||
"ELPIS2",
|
||||
"FERIRA",
|
||||
"ALL PATONA",
|
||||
"MEISAI",
|
||||
"NINGYO",
|
||||
"URARA",
|
||||
"SHELTER",
|
||||
"ACID PUMPER",
|
||||
"X",
|
||||
"ON THE FM",
|
||||
"NIGHTMARE",
|
||||
"HIGHCHARGE",
|
||||
"GODSPEED1",
|
||||
"GODSPEED2",
|
||||
"GENERATE",
|
||||
"DYNAMITE",
|
||||
"DEVIL'S GEAR",
|
||||
"DPS",
|
||||
"AZISAI",
|
||||
"LA DOLCE",
|
||||
"AO-1",
|
||||
"HELL OR HELL",
|
||||
"RYOUSHI",
|
||||
"EKINEKO",
|
||||
"FUYUTUBAKI",
|
||||
"PAPAYAPA",
|
||||
"KARASU",
|
||||
"ASIAN DIS",
|
||||
"TOGAKUSHI",
|
||||
"MODULAR TEC",
|
||||
"SHISHIKASUMU",
|
||||
"MUSIC IS ANS",
|
||||
"VIVA",
|
||||
"SINOBUZ",
|
||||
"CHASER XX",
|
||||
"AMOR",
|
||||
"EDIBLE FLWR",
|
||||
"HI*BISCUS",
|
||||
"MIDNIGHT LDY",
|
||||
"FUTURE IS D",
|
||||
"BREAK STASIS",
|
||||
"SOGEN NO OJO",
|
||||
"EXHAUST HYPE",
|
||||
"25UI",
|
||||
"ENGOKU OVRKL",
|
||||
"BREAKIN CHAN",
|
||||
"TSUGARU SETS",
|
||||
"YELLOW SKTCH",
|
||||
"STEEL EDGE",
|
||||
"GO AHEAD!!",
|
||||
"[[dummy-133]]",
|
||||
"IZANAMI",
|
||||
"GUNGNIR",
|
||||
"[[dummy-136]]",
|
||||
"BROGAMER",
|
||||
"[[dummy-138]]",
|
||||
"[[dummy-139]]",
|
||||
"QUAKES",
|
||||
"[[dummy-141]]",
|
||||
"ECHIDNA",
|
||||
"SNAKEY KUNGF",
|
||||
"BUZRA",
|
||||
"SHINOBI RNK",
|
||||
"HOUGU BZR",
|
||||
"HADES",
|
||||
"DEATHZIGOQ",
|
||||
"TOKYO SHINWA",
|
||||
"INITATION",
|
||||
"EMERALDAS",
|
||||
"CHEMICAL COO",
|
||||
"NIGHT CITY",
|
||||
"SHIMURUGU",
|
||||
"N'PA PA BBQ",
|
||||
"ANCHOR",
|
||||
"IIDX AIR RAC",
|
||||
"THE DAY OF J",
|
||||
"HEISEI",
|
||||
"IDC feat.",
|
||||
"YUM YUM JELL",
|
||||
"NATSU NO NI",
|
||||
"HURRY HURRY",
|
||||
"OVERTIME",
|
||||
"MISUTORESU",
|
||||
"EMBER LIGHTS",
|
||||
],
|
||||
"effector_preset": [
|
||||
"OFF",
|
||||
"ECHO",
|
||||
"COMPRESSOR",
|
||||
"CHORUS",
|
||||
"GARGLE",
|
||||
"EQ ONLY",
|
||||
],
|
||||
"explosion_size": [
|
||||
"100%",
|
||||
"70%",
|
||||
"80%",
|
||||
"90%",
|
||||
"110%",
|
||||
"120%",
|
||||
"130%",
|
||||
],
|
||||
"note_preview": [
|
||||
"DEFAULT",
|
||||
"ON",
|
||||
"OFF",
|
||||
],
|
||||
},
|
||||
}
|
||||
|
||||
@@ -54,3 +54,64 @@ var Regions = [
|
||||
"欧州 (Europe)",
|
||||
"海外 (Other)",
|
||||
];
|
||||
|
||||
Regions2 = [
|
||||
null,
|
||||
"北海道",
|
||||
"青森県",
|
||||
"岩手県",
|
||||
"宮城県",
|
||||
"秋田県",
|
||||
"山形県",
|
||||
"福島県",
|
||||
"茨城県",
|
||||
"栃木県",
|
||||
"群馬県",
|
||||
"埼玉県",
|
||||
"千葉県",
|
||||
"東京都",
|
||||
"神奈川県",
|
||||
"新潟県",
|
||||
"富山県",
|
||||
"石川県",
|
||||
"福井県",
|
||||
"山梨県",
|
||||
"長野県",
|
||||
"岐阜県",
|
||||
"静岡県",
|
||||
"愛知県",
|
||||
"三重県",
|
||||
"滋賀県",
|
||||
"京都府",
|
||||
"大阪府",
|
||||
"兵庫県",
|
||||
"奈良県",
|
||||
"和歌山県",
|
||||
"鳥取県",
|
||||
"島根県",
|
||||
"岡山県",
|
||||
"広島県",
|
||||
"山口県",
|
||||
"徳島県",
|
||||
"香川県",
|
||||
"愛媛県",
|
||||
"高知県",
|
||||
"福岡県",
|
||||
"佐賀県",
|
||||
"長崎県",
|
||||
"熊本県",
|
||||
"大分県",
|
||||
"宮崎県",
|
||||
"鹿児島県",
|
||||
"沖縄県",
|
||||
"香港",
|
||||
"韓国",
|
||||
"台湾",
|
||||
"タイ",
|
||||
"インドネシア",
|
||||
"シンガポール",
|
||||
"フィリピン",
|
||||
"マカオ",
|
||||
"アメリカ",
|
||||
"海外 (Other)",
|
||||
];
|
||||
|
||||
Reference in New Issue
Block a user