commit 7a54773e8961cc7d715a3fc38ffd43d79698888d
Author: 77e8377a-ca5c-42d5-8b2b-506123abec0e <77e8377a-ca5c-42d5-8b2b-506123abec0e@bankofchina.com>
Date: Fri Jan 24 10:07:52 2025 +0800
Init
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..45a36cd
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,3 @@
+**/__pycache__
+**/settings.py
+Treasure
\ No newline at end of file
diff --git a/.settings.py b/.settings.py
new file mode 100644
index 0000000..4613f40
--- /dev/null
+++ b/.settings.py
@@ -0,0 +1,25 @@
+import random
+
+with open('music.json') as file:
+ music = json.load(file)
+
+
+music_data = ({
+ "musicId": 11451,
+ "level": 3,
+ "playCount": random.randint(10, 20),
+ "achievement": random.randint(995000, 1000000),
+ "comboStatus": random.randint(0, 2),
+ "syncStatus": 0,
+ "deluxscoreMax": random.randint(1300, 1500),
+ "scoreRank": 11,
+ "extNum1": 0
+})
+
+# 机厅信息
+
+regionId = 534
+regionName = "Aomen"
+placeId = 7850
+placeName = "GAME WORLD(CHIAO KUONG)"
+clientId = "A63E01E0182"
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..f288702
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,674 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc.
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+ The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works. By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users. We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors. You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+ To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights. Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received. You must make sure that they, too, receive
+or can get the source code. And you must show them these terms so they
+know their rights.
+
+ Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+ For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software. For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+ Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so. This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software. The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable. Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products. If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+ Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary. To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ TERMS AND CONDITIONS
+
+ 0. Definitions.
+
+ "This License" refers to version 3 of the GNU General Public License.
+
+ "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+ "The Program" refers to any copyrightable work licensed under this
+License. Each licensee is addressed as "you". "Licensees" and
+"recipients" may be individuals or organizations.
+
+ To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy. The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+ A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+ To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy. Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+ To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies. Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+ An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License. If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+ 1. Source Code.
+
+ The "source code" for a work means the preferred form of the work
+for making modifications to it. "Object code" means any non-source
+form of a work.
+
+ A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+ The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form. A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+ The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities. However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work. For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+ The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+ The Corresponding Source for a work in source code form is that
+same work.
+
+ 2. Basic Permissions.
+
+ All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met. This License explicitly affirms your unlimited
+permission to run the unmodified Program. The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work. This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+ You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force. You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright. Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+ Conveying under any other circumstances is permitted solely under
+the conditions stated below. Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+ 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+ No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+ When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+ 4. Conveying Verbatim Copies.
+
+ You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+ You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+ 5. Conveying Modified Source Versions.
+
+ You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+ a) The work must carry prominent notices stating that you modified
+ it, and giving a relevant date.
+
+ b) The work must carry prominent notices stating that it is
+ released under this License and any conditions added under section
+ 7. This requirement modifies the requirement in section 4 to
+ "keep intact all notices".
+
+ c) You must license the entire work, as a whole, under this
+ License to anyone who comes into possession of a copy. This
+ License will therefore apply, along with any applicable section 7
+ additional terms, to the whole of the work, and all its parts,
+ regardless of how they are packaged. This License gives no
+ permission to license the work in any other way, but it does not
+ invalidate such permission if you have separately received it.
+
+ d) If the work has interactive user interfaces, each must display
+ Appropriate Legal Notices; however, if the Program has interactive
+ interfaces that do not display Appropriate Legal Notices, your
+ work need not make them do so.
+
+ A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit. Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+ 6. Conveying Non-Source Forms.
+
+ You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+ a) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by the
+ Corresponding Source fixed on a durable physical medium
+ customarily used for software interchange.
+
+ b) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by a
+ written offer, valid for at least three years and valid for as
+ long as you offer spare parts or customer support for that product
+ model, to give anyone who possesses the object code either (1) a
+ copy of the Corresponding Source for all the software in the
+ product that is covered by this License, on a durable physical
+ medium customarily used for software interchange, for a price no
+ more than your reasonable cost of physically performing this
+ conveying of source, or (2) access to copy the
+ Corresponding Source from a network server at no charge.
+
+ c) Convey individual copies of the object code with a copy of the
+ written offer to provide the Corresponding Source. This
+ alternative is allowed only occasionally and noncommercially, and
+ only if you received the object code with such an offer, in accord
+ with subsection 6b.
+
+ d) Convey the object code by offering access from a designated
+ place (gratis or for a charge), and offer equivalent access to the
+ Corresponding Source in the same way through the same place at no
+ further charge. You need not require recipients to copy the
+ Corresponding Source along with the object code. If the place to
+ copy the object code is a network server, the Corresponding Source
+ may be on a different server (operated by you or a third party)
+ that supports equivalent copying facilities, provided you maintain
+ clear directions next to the object code saying where to find the
+ Corresponding Source. Regardless of what server hosts the
+ Corresponding Source, you remain obligated to ensure that it is
+ available for as long as needed to satisfy these requirements.
+
+ e) Convey the object code using peer-to-peer transmission, provided
+ you inform other peers where the object code and Corresponding
+ Source of the work are being offered to the general public at no
+ charge under subsection 6d.
+
+ A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+ A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling. In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage. For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product. A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+ "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source. The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+ If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information. But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+ The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed. Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+ Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+ 7. Additional Terms.
+
+ "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law. If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+ When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it. (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.) You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+ Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+ a) Disclaiming warranty or limiting liability differently from the
+ terms of sections 15 and 16 of this License; or
+
+ b) Requiring preservation of specified reasonable legal notices or
+ author attributions in that material or in the Appropriate Legal
+ Notices displayed by works containing it; or
+
+ c) Prohibiting misrepresentation of the origin of that material, or
+ requiring that modified versions of such material be marked in
+ reasonable ways as different from the original version; or
+
+ d) Limiting the use for publicity purposes of names of licensors or
+ authors of the material; or
+
+ e) Declining to grant rights under trademark law for use of some
+ trade names, trademarks, or service marks; or
+
+ f) Requiring indemnification of licensors and authors of that
+ material by anyone who conveys the material (or modified versions of
+ it) with contractual assumptions of liability to the recipient, for
+ any liability that these contractual assumptions directly impose on
+ those licensors and authors.
+
+ All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10. If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term. If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+ If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+ Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+ 8. Termination.
+
+ You may not propagate or modify a covered work except as expressly
+provided under this License. Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+ However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+ Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+ Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License. If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+ 9. Acceptance Not Required for Having Copies.
+
+ You are not required to accept this License in order to receive or
+run a copy of the Program. Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance. However,
+nothing other than this License grants you permission to propagate or
+modify any covered work. These actions infringe copyright if you do
+not accept this License. Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+ 10. Automatic Licensing of Downstream Recipients.
+
+ Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License. You are not responsible
+for enforcing compliance by third parties with this License.
+
+ An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations. If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+ You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License. For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+ 11. Patents.
+
+ A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based. The
+work thus licensed is called the contributor's "contributor version".
+
+ A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version. For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+ Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+ In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement). To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+ If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients. "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+ If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+ A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License. You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+ Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+ 12. No Surrender of Others' Freedom.
+
+ If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all. For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+ 13. Use with the GNU Affero General Public License.
+
+ Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work. The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+ 14. Revised Versions of this License.
+
+ The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+ Each version is given a distinguishing version number. If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation. If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+ If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+ Later license versions may give you additional or different
+permissions. However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+ 15. Disclaimer of Warranty.
+
+ THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. Limitation of Liability.
+
+ IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+ 17. Interpretation of Sections 15 and 16.
+
+ If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+
+ Copyright (C)
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see .
+
+Also add information on how to contact you by electronic and paper mail.
+
+ If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+
+ Copyright (C)
+ This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, your program's commands
+might be different; for a GUI interface, you would use an "about box".
+
+ You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+.
+
+ The GNU General Public License does not permit incorporating your program
+into proprietary programs. If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library. If this is what you want to do, use the GNU Lesser General
+Public License instead of this License. But first, please read
+.
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..411092c
--- /dev/null
+++ b/README.md
@@ -0,0 +1,123 @@
+# Maquitous
+
+A backend api project based on flask and [__Eaquira__](https://git.186526.xyz/Fragrance/eaquira).
+###### dev of SDGA was suspended
+---
+
+## Usage
+
+Test URL:
+
+Web UI: [Fragrance/Estahv](/Fragrance/Estahv) (Still work in progress)
+
+## Info
+
+You send your information to __Maquitous__, __Maquitous__ transfer your information and send to 「舞萌DX」.
+
+## API Usage
+
+- `GET /qr?qrcode=qrcode` - transfer QrCode to UserId.
+
+ Params: `Scanned result from QrCode in WeChat`
+ Response:
+ ```json
+ {
+ "status": string,
+ "timestamp": integer,
+ "info": string,
+ "apiName": "qrCode_to_userId",
+ "date": string,
+ "userId": integer
+ }
+
+- `GET /ticket?userid=userId` - Send「6倍チケット」to account.
+
+ Params: `userId`
+ Response:
+ ```json
+ {
+ "status": string,
+ "timestamp": integer,
+ "info": string,
+ "apiName": "ticket",
+ "date": string,
+ "userId": integer
+ }
+
+- `GET /mapstock?userid=userId` - Save 99 kilometers in map to account.
+
+ Params: `userId`
+ Response:
+ ```json
+ {
+ "status": string,
+ "timestamp": integer,
+ "info": string,
+ "apiName": "mapstock",
+ "date": string,
+ "userId": integer
+ }
+
+- `GET /unlock?userid=userId` - Unlock all DX Master Charts in account.
+
+ Params: `userId`
+ Response:
+ ```json
+ {
+ "status": string,
+ "timestamp": integer,
+ "info": string,
+ "apiName": "unlock",
+ "date": string,
+ "userId": integer
+ }
+
+- `POST /music` - Overwrite a music detail in account.
+
+ Params in `application/json`:
+ ```json
+ {
+ "userId": integer,
+ "music": {
+ "musicId": integer,
+ "level": integer ,
+ "playCount": integer,
+ "achievement": integer,
+ "comboStatus": integer,
+ "syncStatus": integer,
+ "deluxscoreMax": integer,
+ "scoreRank": integer
+ }
+ }
+ ```
+ Response:
+ ```json
+ {
+ "status": string,
+ "timestamp": integer,
+ "info": string,
+ "apiName": "music",
+ "date": string,
+ "userId": integer
+ }
+
+## Running
+
+```bash
+pip install -r requirements.txt
+python3 host.py
+```
+
+## Warning and Statements
+
+WE ARE NOT RESIPONSIBLE FOR YOUR ACCOUNT.
+
+>怂别用,用别怂。
+>
+>我也没说过这玩意一直能用,至少现在能用。
+
+## Copyright
+
+GNU License.
+
+__Maquitous__ is a part of [__Project Fragrance__](https://fragrance.moe).
diff --git a/bonus9.py b/bonus9.py
new file mode 100644
index 0000000..1f055cc
--- /dev/null
+++ b/bonus9.py
@@ -0,0 +1,395 @@
+import json
+import pytz
+import time
+import random
+
+from sdgb import sdgb_api
+from datetime import datetime, timedelta
+
+from settings import music_data
+from settings import regionId
+from settings import regionName
+from settings import clientId
+from settings import placeId
+from settings import placeName
+
+from login import login
+from logout import logout
+
+def CalcRandom():
+ max = 1037933
+ num2 = random.randint(1, max) * 2069
+
+ num2 += 1024 # specialnum
+ num3 = 0
+ for i in range(0, 32):
+ num3 <<= 1
+ num3 += num2 % 2
+ num2 >>= 1
+
+ return num3
+
+timestamp = int(time.time())
+
+
+
+def music(userId, bonus_list):
+
+ music = music_data
+
+ musicId = music['musicId']
+ level = music['level']
+ playCount = music['playCount']
+ achievement = music['achievement']
+ comboStatus = music['comboStatus']
+ syncStatus = music['syncStatus']
+ deluxscoreMax = music['deluxscoreMax']
+ scoreRank = music['scoreRank']
+ extNum1 = music['extNum1']
+
+ # UserLogin
+
+ login_result = login(userId,timestamp)
+
+ login_id = login_result['loginId']
+ login_date = login_result['lastLoginDate']
+
+
+ # UserData
+
+ data = json.dumps({
+ "userId": int(userId)
+ })
+
+ userdata = json.loads(sdgb_api(data, "GetUserDataApi", userId))
+
+ # UserLog
+
+ data = json.dumps({
+ "userId": int(userId),
+ "userPlaylog": {
+ "userId": 0,
+ "orderId": 0,
+ "playlogId": login_id,
+ "version": 1041000,
+ "placeId": placeId,
+ "placeName": placeName,
+ "loginDate": int(time.time()),
+ "playDate": datetime.now(pytz.timezone('Asia/Shanghai')).strftime('%Y-%m-%d'),
+ "userPlayDate": datetime.now(pytz.timezone('Asia/Shanghai')).strftime('%Y-%m-%d %H:%M:%S') + '.0',
+ "type": 0,
+ "musicId": int(musicId),
+ "level": int(level),
+ "trackNo": 1,
+ "vsMode": 0,
+ "vsUserName": "",
+ "vsStatus": 0,
+ "vsUserRating": 0,
+ "vsUserAchievement": 0,
+ "vsUserGradeRank": 0,
+ "vsRank": 0,
+ "playerNum": 1,
+ "playedUserId1": 0,
+ "playedUserName1": "",
+ "playedMusicLevel1": 0,
+ "playedUserId2": 0,
+ "playedUserName2": "",
+ "playedMusicLevel2": 0,
+ "playedUserId3": 0,
+ "playedUserName3": "",
+ "playedMusicLevel3": 0,
+ "characterId1": userdata['userData']['charaSlot'][0],
+ "characterLevel1": random.randint(1000,6500),
+ "characterAwakening1": 5,
+ "characterId2": userdata['userData']['charaSlot'][1],
+ "characterLevel2": random.randint(1000,6500),
+ "characterAwakening2": 5,
+ "characterId3": userdata['userData']['charaSlot'][2],
+ "characterLevel3": random.randint(1000,6500),
+ "characterAwakening3": 5,
+ "characterId4": userdata['userData']['charaSlot'][3],
+ "characterLevel4": random.randint(1000,6500),
+ "characterAwakening4": 5,
+ "characterId5": userdata['userData']['charaSlot'][4],
+ "characterLevel5": random.randint(1000,6500),
+ "characterAwakening5": 5,
+ "achievement": int(achievement),
+ "deluxscore": int(deluxscoreMax),
+ "scoreRank": int(scoreRank),
+ "maxCombo": random.randint(400,500),
+ "totalCombo": random.randint(700,900),
+ "maxSync": 0,
+ "totalSync": 0,
+ "tapCriticalPerfect": random.randint(200,400),
+ "tapPerfect": random.randint(100,250),
+ "tapGreat": random.randint(0,10),
+ "tapGood": random.randint(0,10),
+ "tapMiss": random.randint(0,10),
+ "holdCriticalPerfect": random.randint(20,40),
+ "holdPerfect": random.randint(0,15),
+ "holdGreat": 0,
+ "holdGood": 0,
+ "holdMiss": 0,
+ "slideCriticalPerfect": random.randint(34,60),
+ "slidePerfect": 0,
+ "slideGreat": 0,
+ "slideGood": 0,
+ "slideMiss": 0,
+ "touchCriticalPerfect": random.randint(20,70),
+ "touchPerfect": 0,
+ "touchGreat": 0,
+ "touchGood": 0,
+ "touchMiss": 0,
+ "breakCriticalPerfect": random.randint(8,30),
+ "breakPerfect": random.randint(7,10),
+ "breakGreat": 0,
+ "breakGood": 0,
+ "breakMiss": 0,
+ "isTap": True,
+ "isHold": True,
+ "isSlide": True,
+ "isTouch": True,
+ "isBreak": True,
+ "isCriticalDisp": True,
+ "isFastLateDisp": True,
+ "fastCount": random.randint(20,30),
+ "lateCount": random.randint(50,70),
+ "isAchieveNewRecord": True,
+ "isDeluxscoreNewRecord": True,
+ "comboStatus": 0,
+ "syncStatus": 0,
+ "isClear": True,
+ 'beforeRating': userdata['userData']['playerRating'],
+ 'afterRating': userdata['userData']['playerRating'],
+ "beforeGrade": 0,
+ "afterGrade": 0,
+ "afterGradeRank": 2,
+ 'beforeDeluxRating': userdata['userData']['playerRating'],
+ 'afterDeluxRating': userdata['userData']['playerRating'],
+ "isPlayTutorial": False,
+ "isEventMode": False,
+ "isFreedomMode": False,
+ "playMode": 0,
+ "isNewFree": False,
+ "trialPlayAchievement": -1,
+ "extNum1": 0,
+ "extNum2": 0,
+ "extNum4": 3020,
+ "extBool1": False
+ }
+ })
+
+ userlog_result = json.loads(sdgb_api(data, "UploadUserPlaylogApi", userId))
+
+ # 获取 User Extend
+ data = json.dumps({
+ "userId": int(userId)
+ })
+
+ user_extend = json.loads(sdgb_api(data, "GetUserExtendApi", userId))
+
+ # 获取 User Option
+ data = json.dumps({
+ "userId": int(userId)
+ })
+
+ user_option = json.loads(sdgb_api(data, "GetUserOptionApi", userId))
+
+
+ # 获取 User Rating
+ data = json.dumps({
+ "userId": int(userId)
+ })
+
+ user_rating = json.loads(sdgb_api(data, "GetUserRatingApi", userId))
+
+
+ # 获取 User Activity
+ data = json.dumps({
+ "userId": int(userId)
+ })
+
+ user_activity = json.loads(sdgb_api(data, "GetUserActivityApi", userId))
+
+
+ # 获取账号功能票
+ data = json.dumps({
+ "userId": int(userId)
+ })
+
+ user_charge = json.loads(sdgb_api(data, "GetUserChargeApi", userId))
+
+ # UserAll
+
+ data = json.dumps({
+ "userId": int(userId),
+ "playlogId": login_id,
+ "isEventMode": False,
+ "isFreePlay": False,
+ "upsertUserAll": {
+ "userData": [
+ {
+ "accessCode": "",
+ "userName": userdata['userData']['userName'],
+ "isNetMember": 1,
+ "iconId": userdata['userData']['iconId'],
+ "plateId": userdata['userData']['plateId'],
+ "titleId": userdata['userData']['titleId'],
+ "partnerId": userdata['userData']['partnerId'],
+ "frameId": userdata['userData']['frameId'],
+ "selectMapId": userdata['userData']['selectMapId'],
+ "totalAwake": userdata['userData']['totalAwake'],
+ "gradeRating": userdata['userData']['gradeRating'],
+ "musicRating": userdata['userData']['musicRating'],
+ "playerRating": userdata['userData']['playerRating'],
+ "highestRating": userdata['userData']['highestRating'],
+ "gradeRank": userdata['userData']['gradeRank'],
+ "classRank": userdata['userData']['classRank'],
+ "courseRank": userdata['userData']['courseRank'],
+ "charaSlot": userdata['userData']['charaSlot'],
+ "charaLockSlot": userdata['userData']['charaLockSlot'],
+ "contentBit": userdata['userData']['contentBit'],
+ "playCount": userdata['userData']['playCount'],
+ "currentPlayCount": userdata['userData']['currentPlayCount'],
+ "renameCredit": 0,
+ "mapStock": 99000,
+ "eventWatchedDate": userdata['userData']['eventWatchedDate'],
+ "lastGameId": "SDGB",
+ "lastRomVersion": userdata['userData']['lastRomVersion'],
+ "lastDataVersion": userdata['userData']['lastDataVersion'],
+ "lastLoginDate": login_date,
+ "lastPlayDate": datetime.now(pytz.timezone('Asia/Shanghai')).strftime('%Y-%m-%d %H:%M:%S') + '.0',
+ "lastPlayCredit": 1,
+ "lastPlayMode": 0,
+ "lastPlaceId": placeId,
+ "lastPlaceName": placeName,
+ "lastAllNetId": 0,
+ "lastRegionId": regionId,
+ "lastRegionName": regionName,
+ "lastClientId": clientId,
+ "lastCountryCode": "CHN",
+ "lastSelectEMoney": 0,
+ "lastSelectTicket": 0,
+ "lastSelectCourse": userdata['userData']['lastSelectCourse'],
+ "lastCountCourse": 0,
+ "firstGameId": "SDGB",
+ "firstRomVersion": userdata['userData']['firstRomVersion'],
+ "firstDataVersion": userdata['userData']['firstDataVersion'],
+ "firstPlayDate": userdata['userData']['firstPlayDate'],
+ "compatibleCmVersion": userdata['userData']['compatibleCmVersion'],
+ "dailyBonusDate": userdata['userData']['dailyBonusDate'],
+ "dailyCourseBonusDate": userdata['userData']['dailyCourseBonusDate'],
+ "lastPairLoginDate": userdata['userData']['lastPairLoginDate'],
+ "lastTrialPlayDate": userdata['userData']['lastTrialPlayDate'],
+ "playVsCount": 0,
+ "playSyncCount": 0,
+ "winCount": 0,
+ "helpCount": 0,
+ "comboCount": 0,
+ "totalDeluxscore": userdata['userData']['totalDeluxscore'],
+ "totalBasicDeluxscore": userdata['userData']['totalBasicDeluxscore'],
+ "totalAdvancedDeluxscore": userdata['userData']['totalAdvancedDeluxscore'],
+ "totalExpertDeluxscore": userdata['userData']['totalExpertDeluxscore'],
+ "totalMasterDeluxscore": userdata['userData']['totalMasterDeluxscore'],
+ "totalReMasterDeluxscore": userdata['userData']['totalReMasterDeluxscore'],
+ "totalSync": userdata['userData']['totalSync'],
+ "totalBasicSync": userdata['userData']['totalBasicSync'],
+ "totalAdvancedSync": userdata['userData']['totalAdvancedSync'],
+ "totalExpertSync": userdata['userData']['totalExpertSync'],
+ "totalMasterSync": userdata['userData']['totalMasterSync'],
+ "totalReMasterSync": userdata['userData']['totalReMasterSync'],
+ "totalAchievement": userdata['userData']['totalAchievement'],
+ "totalBasicAchievement": userdata['userData']['totalBasicAchievement'],
+ "totalAdvancedAchievement": userdata['userData']['totalAdvancedAchievement'],
+ "totalExpertAchievement": userdata['userData']['totalExpertAchievement'],
+ "totalMasterAchievement": userdata['userData']['totalMasterAchievement'],
+ "totalReMasterAchievement": userdata['userData']['totalReMasterAchievement'],
+ "playerOldRating": userdata['userData']['playerOldRating'],
+ "playerNewRating": userdata['userData']['playerNewRating'],
+ "banState": 0,
+ "dateTime": timestamp
+ }
+ ],
+ "userExtend": [user_extend['userExtend']],
+ "userOption": [user_option['userOption']],
+ "userCharacterList": [],
+ "userGhost": [],
+ "userMapList": [],
+ "userLoginBonusList": bonus_list,
+ "userRatingList": [user_rating['userRating']],
+ "userItemList": [],
+ "userMusicDetailList": [
+ {
+ "musicId": musicId,
+ "level": level,
+ "playCount": playCount,
+ "achievement": achievement,
+ "comboStatus": comboStatus,
+ "syncStatus": syncStatus,
+ "deluxscoreMax": deluxscoreMax,
+ "scoreRank": scoreRank,
+ "extNum1": extNum1
+ }
+ ],
+ "userCourseList": [],
+ "userFriendSeasonRankingList": [],
+ "userChargeList": user_charge['userChargeList'],
+ "userFavoriteList": [],
+ "userActivityList": [user_activity['userActivity']],
+ "userGamePlaylogList": [
+ {
+ "playlogId": login_id,
+ "version": "1.41.00",
+ "playDate": datetime.now(pytz.timezone('Asia/Shanghai')).strftime('%Y-%m-%d %H:%M:%S') + '.0',
+ "playMode": 0,
+ "useTicketId": -1,
+ "playCredit": 1,
+ "playTrack": 1,
+ "clientId": clientId,
+ "isPlayTutorial": False,
+ "isEventMode": False,
+ "isNewFree": False,
+ "playCount": 0,
+ "playSpecial": CalcRandom(),
+ "playOtherUserId": 0
+ }
+ ],
+ "user2pPlaylog": {
+ "userId1": 0,
+ "userId2": 0,
+ "userName1": "",
+ "userName2": "",
+ "regionId": 0,
+ "placeId": 0,
+ "user2pPlaylogDetailList": []
+ },
+ "isNewCharacterList": "",
+ "isNewMapList": "",
+ "isNewLoginBonusList": "0" * len(bonus_list),
+ "isNewItemList": "",
+ "isNewMusicDetailList": "1",
+ "isNewCourseList": "0",
+ "isNewFavoriteList": "",
+ "isNewFriendSeasonRankingList": ""
+ }
+ })
+
+ userall_result = json.loads(sdgb_api(data, "UpsertUserAllApi", userId))
+
+ data = json.dumps({
+ "UserLogin": login_result,
+ "UserPlaylog": userlog_result,
+ "UpsertUserall": userall_result
+ })
+
+ return data
+
+def music_with_retry(userId, bonus_list):
+ for i in range(5): # 重试次数
+ try:
+ music(userId, bonus_list)
+ return logout(userId, timestamp)
+ except ValueError as e:
+ logout(userId, timestamp)
+ time.sleep(3)
+ return json.dumps({"status": "500 Internal Server Error"}), 500
diff --git a/character.py b/character.py
new file mode 100644
index 0000000..5e10762
--- /dev/null
+++ b/character.py
@@ -0,0 +1,17 @@
+import json
+
+from sdgb import sdgb_api
+
+def character(userId):
+ data = json.dumps({
+ "userId": int(userId),
+ "nextIndex":10000000000,
+ "maxCount":1000000000
+ })
+
+ character_result = json.loads(sdgb_api(data, "GetUserCharacterApi", userId))
+
+ return character_result
+
+if __name__ == "__main__":
+ print(character(int(input())))
\ No newline at end of file
diff --git a/charge.py b/charge.py
new file mode 100644
index 0000000..0ab05f7
--- /dev/null
+++ b/charge.py
@@ -0,0 +1,13 @@
+import json
+
+from sdgb import sdgb_api
+
+def charge(userId):
+ data = json.dumps({
+ "userId": userId,
+ })
+
+ charge_result = json.loads(sdgb_api(data, "GetUserChargeApi", userId))
+
+ return charge_result
+
diff --git a/item.py b/item.py
new file mode 100644
index 0000000..bf86c70
--- /dev/null
+++ b/item.py
@@ -0,0 +1,18 @@
+import json
+
+from sdgb import sdgb_api
+
+def item(userId):
+ data = json.dumps({
+ "userId": int(userId),
+ "nextIndex":60000000000,
+ "maxCount":1000000000
+ })
+
+ item_result = json.loads(sdgb_api(data, "GetUserItemApi", userId))
+
+ return item_result
+
+if __name__ == "__main__":
+ a = json.dumps(len(item(11593052)['userItemList']))
+ print(a)
\ No newline at end of file
diff --git a/login.py b/login.py
new file mode 100644
index 0000000..16c5e00
--- /dev/null
+++ b/login.py
@@ -0,0 +1,27 @@
+import json
+import pytz
+
+from sdgb import sdgb_api
+from datetime import datetime
+
+from settings import regionId
+from settings import clientId
+from settings import placeId
+
+def login(userId, accessCode, timestamp):
+ data = json.dumps({
+ "userId": userId,
+ "accessCode": accessCode,
+ "regionId": regionId,
+ "placeId": placeId,
+ "clientId": clientId,
+ "dateTime": timestamp,
+ "isContinue": False,
+ "genericFlag": 0,
+ })
+
+ login_result = json.loads(sdgb_api(data, "UserLoginApi", userId))
+ return login_result
+
+if __name__ == "__main__":
+ print(login(int(input())))
diff --git a/login_bonus.json b/login_bonus.json
new file mode 100644
index 0000000..6b11975
--- /dev/null
+++ b/login_bonus.json
@@ -0,0 +1,242 @@
+[
+ {
+ "id": 38,
+ "name": "パートナー:ずんだもん"
+ },
+ {
+ "id": 39,
+ "name": "パートナー:乙姫(ばでぃーず)"
+ },
+ {
+ "id": 40,
+ "name": "パートナー:らいむっくま&れもんっくま(ばでぃーず)"
+ },
+ {
+ "id": 34,
+ "name": "パートナー:黒姫"
+ },
+ {
+ "id": 24,
+ "name": "パートナー:ラズ(ふぇすてぃばる)"
+ },
+ {
+ "id": 25,
+ "name": "パートナー:シフォン(ふぇすてぃばる)"
+ },
+ {
+ "id": 26,
+ "name": "パートナー:ソルト(ふぇすてぃばる)"
+ },
+ {
+ "id": 19,
+ "name": "パートナー:ちびみるく"
+ },
+ {
+ "id": 20,
+ "name": "パートナー:百合咲ミカ"
+ },
+ {
+ "id": 8,
+ "name": "パートナー:しゃま(ゆにばーす)"
+ },
+ {
+ "id": 9,
+ "name": "パートナー:みるく(ゆにばーす)"
+ },
+ {
+ "id": 7,
+ "name": "パートナー:乙姫(すぷらっしゅ)"
+ },
+ {
+ "id": 1,
+ "name": "パートナー:乙姫"
+ },
+ {
+ "id": 2,
+ "name": "パートナー:ラズ"
+ },
+ {
+ "id": 3,
+ "name": "パートナー:シフォン"
+ },
+ {
+ "id": 4,
+ "name": "パートナー:ソルト"
+ },
+ {
+ "id": 5,
+ "name": "パートナー:しゃま"
+ },
+ {
+ "id": 6,
+ "name": "パートナー:みるく"
+ },
+ {
+ "id": 605,
+ "name": "でらっくす譜面:oboro"
+ },
+ {
+ "id": 606,
+ "name": "でらっくす譜面:ナミダと流星"
+ },
+ {
+ "id": 607,
+ "name": "スタンダード譜面:渦状銀河のシンフォニエッタ"
+ },
+ {
+ "id": 508,
+ "name": "でらっくす譜面:LatentKingdom"
+ },
+ {
+ "id": 41,
+ "name": "でらっくす譜面:初音ミクの消失"
+ },
+ {
+ "id": 42,
+ "name": "でらっくす譜面:色は匂へど散りぬるを"
+ },
+ {
+ "id": 601,
+ "name": "でらっくす譜面:BULKUP(GAMEEXCLUSIVEEDIT)"
+ },
+ {
+ "id": 602,
+ "name": "でらっくす譜面:MonochromeRainbow"
+ },
+ {
+ "id": 603,
+ "name": "でらっくす譜面:Selector"
+ },
+ {
+ "id": 35,
+ "name": "でらっくす譜面:深海少女"
+ },
+ {
+ "id": 36,
+ "name": "でらっくす譜面:ナイト・オブ・ナイツ"
+ },
+ {
+ "id": 27,
+ "name": "でらっくす譜面:M.S.S.Planet"
+ },
+ {
+ "id": 28,
+ "name": "でらっくす譜面:響縁"
+ },
+ {
+ "id": 501,
+ "name": "スタンダード譜面:Halcyon"
+ },
+ {
+ "id": 502,
+ "name": "スタンダード譜面:サンバランド"
+ },
+ {
+ "id": 503,
+ "name": "でらっくす譜面:StarlightDisco"
+ },
+ {
+ "id": 504,
+ "name": "でらっくす譜面:火炎地獄"
+ },
+ {
+ "id": 505,
+ "name": "スタンダード譜面:VIIIbitExplorer"
+ },
+ {
+ "id": 506,
+ "name": "でらっくす譜面:Maxi"
+ },
+ {
+ "id": 507,
+ "name": "でらっくす譜面:ケロ⑨destiny"
+ },
+ {
+ "id": 21,
+ "name": "でらっくす譜面:セツナトリップ"
+ },
+ {
+ "id": 22,
+ "name": "でらっくす譜面:Grip&Breakdown!!"
+ },
+ {
+ "id": 17,
+ "name": "でらっくす譜面:ゴーストルール"
+ },
+ {
+ "id": 18,
+ "name": "でらっくす譜面:tabootearsyouup"
+ },
+ {
+ "id": 43,
+ "name": "アイコン:BUDDiES"
+ },
+ {
+ "id": 604,
+ "name": "アイコン:FESTiVALラズ&シフォン&ソルト"
+ },
+ {
+ "id": 29,
+ "name": "アイコン:FESTiVAL"
+ },
+ {
+ "id": 30,
+ "name": "アイコン:Lia=Fail"
+ },
+ {
+ "id": 12,
+ "name": "アイコン:UNiVERSE"
+ },
+ {
+ "id": 14,
+ "name": "ネームプレート:はっぴー(ゆにばーす)"
+ },
+ {
+ "id": 44,
+ "name": "フレーム:mystiqueasiris"
+ },
+ {
+ "id": 45,
+ "name": "フレーム:VeRForTeαRtE:VEiN"
+ },
+ {
+ "id": 37,
+ "name": "フレーム:Tricolor⁂circuS"
+ },
+ {
+ "id": 31,
+ "name": "フレーム:HeavenlyBlast"
+ },
+ {
+ "id": 32,
+ "name": "フレーム:sølips"
+ },
+ {
+ "id": 33,
+ "name": "フレーム:RainbowRushStory"
+ },
+ {
+ "id": 23,
+ "name": "フレーム:ふたりでばかんすにゃ♪"
+ },
+ {
+ "id": 15,
+ "name": "フレーム:ここからはじまるプロローグ。"
+ },
+ {
+ "id": 16,
+ "name": "フレーム:モ゜ルモ゜ル"
+ },
+ {
+ "id": 10,
+ "name": "フレーム:黒姫"
+ },
+ {
+ "id": 11,
+ "name": "フレーム:百合咲ミカ"
+ },
+ {
+ "id": 999,
+ "name": "ちほー進行1.5倍チケット"
+ }
+]
\ No newline at end of file
diff --git a/login_bonus.py b/login_bonus.py
new file mode 100644
index 0000000..d1d5f60
--- /dev/null
+++ b/login_bonus.py
@@ -0,0 +1,16 @@
+import json
+
+from sdgb import sdgb_api
+
+def item(userId):
+ data = json.dumps({
+ "userId": int(userId),
+ "nextIndex":0,
+ "maxCount":2000
+ })
+
+ login_bonus_result = json.loads(sdgb_api(data, "GetUserLoginBonusApi", userId))
+
+ return login_bonus_result
+
+print(item(11593052))
\ No newline at end of file
diff --git a/logout.py b/logout.py
new file mode 100644
index 0000000..e5875bb
--- /dev/null
+++ b/logout.py
@@ -0,0 +1,27 @@
+import json
+import pytz
+
+from sdgb import sdgb_api
+from datetime import datetime
+
+from settings import regionId
+from settings import clientId
+from settings import placeId
+
+def logout(userId, accessCode, timestamp):
+ data = json.dumps({
+ "userId": userId,
+ "accessCode": accessCode,
+ "regionId": regionId,
+ "placeId": placeId,
+ "clientId": clientId,
+ "dateTime": timestamp,
+ "type": 1
+ })
+
+ logout_result = json.loads(sdgb_api(data, "UserLogoutApi", userId))
+ return logout_result
+
+
+if __name__ == "__main__":
+ print(logout(int(input())))
diff --git a/main.py b/main.py
new file mode 100644
index 0000000..17b6045
--- /dev/null
+++ b/main.py
@@ -0,0 +1,410 @@
+import time
+import json
+import pytz
+from datetime import datetime
+from flask import Flask,request,redirect,jsonify
+from flask_cors import CORS
+
+from sdgb import felica, sdgb_api, aimedb_api
+from logout import logout
+from login import login
+from ticket import get_ticket
+from charge import charge
+from map import map
+from userdata import userdata
+from character import character
+
+from mapstock import music_with_retry as mapstock
+from music import music_with_retry as music
+from unlock_all import music_with_retry as unlock
+from map_clear import music_with_retry as map_clear
+from bonus9 import music_with_retry as login_bonus
+
+def find_map(mapId, user_map_data):
+ for single in user_map_data:
+ if single["mapId"] == mapId:
+ return single
+ else:
+ continue
+
+def isNewMapList(mapId, user_map_data):
+ if ('{"mapId": ' + str(mapId)) in user_map_data:
+ return 0
+ else:
+ return 1
+
+def item(item_data, user_character_list):
+ item_list = []
+ character_list = []
+ for single in item_data:
+ if single['kind'] == 9:
+ if ('{"characterId": ' + str(single['id'])) in user_character_list:
+ pass
+ else:
+ data = ({
+ "characterId":single['id'],
+ "level":1,
+ "awakening":0,
+ "useCount": 0
+ })
+ character_list.append(data)
+ else:
+ data = ({
+ "itemKind": single['kind'],
+ "itemId": single['id'],
+ "stock": 1,
+ "isValid": True
+ })
+ item_list.append(data)
+ return item_list, character_list, item_data[-1]['distance']
+
+def aimedb_userId(IDm):
+ return aimedb_api(felica(IDm)), felica(IDm)
+
+
+def bonus_list_gen(userId):
+ with open('login_bonus.json') as file:
+ cache = json.load(file)
+ bonus_data = []
+ for item in cache:
+ bonus_data.append(item['id'])
+ cache = []
+ data = json.dumps({
+ "userId": int(userId),
+ "nextIndex":0,
+ "maxCount":2000
+ })
+ user_bonus = json.loads(sdgb_api(data, "GetUserLoginBonusApi", userId))['userLoginBonusList']
+ for item in user_bonus:
+ cache.append(item['bonusId'])
+ bonus_list_unexist = list(set(bonus_data) - set(cache))
+ bonus_list = []
+ for item in user_bonus:
+ if item['isComplete'] == False:
+ if item['bonusId'] in [12, 29, 30, 38, 43, 604]:
+ data = ({
+ "bonusId": item['bonusId'],
+ "point": 4,
+ "isCurrent": item['isCurrent'],
+ "isComplete": False
+ })
+ else:
+ data = ({
+ "bonusId": item['bonusId'],
+ "point": 9,
+ "isCurrent": item['isCurrent'],
+ "isComplete": False
+ })
+ bonus_list.append(data)
+ elif item['bonusId'] == 999:
+ data = ({
+ "bonusId": 999,
+ "point": item['point'] // 10 * 10 + 9,
+ "isCurrent": item['isCurrent'],
+ "isComplete": False
+ })
+ bonus_list.append(data)
+ else:
+ pass
+ for item in bonus_list_unexist:
+ if item in [12, 29, 30, 38, 43, 604]:
+ data = ({
+ "bonusId": item,
+ "point": 4,
+ "isCurrent": False,
+ "isComplete": False
+ })
+ else:
+ data = ({
+ "bonusId": item,
+ "point": 9,
+ "isCurrent": False,
+ "isComplete": False
+ })
+ bonus_list.append(data)
+ return bonus_list
+
+app = Flask(__name__)
+app.json.sort_keys = False
+app.json.ensure_ascii = False
+app.json.mimetype = 'application/json;charset=UTF-8'
+app.json.compact = False
+CORS(app)
+
+@app.errorhandler(404)
+def page_not_found(e):
+ return jsonify({"status": "404 Not Found", "timestamp": int(time.time()), "info": "The route you are trying to access is missing.", "date": datetime.now(pytz.timezone('Asia/Shanghai')).strftime('%a, %d %b %Y %H:%M:%S GMT+8')}), 404
+
+@app.errorhandler(405)
+def method_not_allowed(e):
+ return jsonify({"status": "405 Method Not Allowed", "timestamp": int(time.time()), "info": "You are using the wrong method. Check the docs.", "date": datetime.now(pytz.timezone('Asia/Shanghai')).strftime('%a, %d %b %Y %H:%M:%S GMT+8')}), 405
+
+@app.errorhandler(400)
+def bad_request(e):
+ return jsonify({"status": "400 Bad Request", "timestamp": int(time.time()), "info": "Something went Wrong.", "date": datetime.now(pytz.timezone('Asia/Shanghai')).strftime('%a, %d %b %Y %H:%M:%S GMT+8')}), 400
+
+@app.errorhandler(500)
+def bad_request(e):
+ return jsonify({"status": "500 Internal Server Error", "timestamp": int(time.time()), "info": "Something went Wrong.", "date": datetime.now(pytz.timezone('Asia/Shanghai')).strftime('%a, %d %b %Y %H:%M:%S GMT+8')}), 500
+
+
+@app.route("/")
+def index():
+ return jsonify({"status": "200 OK", "timestamp": int(time.time()), "info": "Project Fragrance","availableApi": ["qr", "ticket", "mapstock", "unlock", "map"], "date": datetime.now(pytz.timezone('Asia/Shanghai')).strftime('%a, %d %b %Y %H:%M:%S GMT+8')}), 200
+
+@app.route("/felica")
+def felica_lookup():
+ IDm = request.args.get('idm')
+ if IDm is None or len(str(IDm)) != 16:
+ return jsonify({"apiName": "felica", "apiInfo": "Activate Your Amusement IC Card", "apiUsage": "/felica?idm="})
+ else:
+ info = felica(IDm)
+ if info == "00000000000000000000":
+ returnCode = 404
+ status = "404 Not Found"
+ info = "Your IDm is invalid"
+ else:
+ returnCode = 200
+ status = "200 OK"
+ data = jsonify({"status": status, "timestamp": int(time.time()), "info": info, "apiName": "felica", "date": datetime.now(pytz.timezone('Asia/Shanghai')).strftime('%a, %d %b %Y %H:%M:%S GMT+8')})
+ return data, returnCode
+
+@app.route("/ticket")
+def ticket():
+ IDm = request.args.get('idm')
+ if IDm is None or len(str(IDm)) != 16:
+ return jsonify({"apiName": "ticket", "apiInfo": "Send x6 Ticket", "apiUsage": "/ticket?idm="})
+ else:
+ userId = aimedb_userId(IDm)[0]
+ accessCode = aimedb_userId(IDm)[1]
+ timestamp = int(time.time())
+ if '{"chargeId": 6, "stock": 1' in json.dumps(charge(userId)):
+ returnCode = 403
+ status = "403 Forbidden"
+ info = "User has had a ticket."
+ log = {}
+ else:
+ login_data = login(userId, accessCode, timestamp)
+ if login_data['returnCode'] == 102:
+ returnCode = 403
+ status = "403 Forbidden"
+ info = "Unable to operate. Please refresh QrCode."
+ log = {}
+ elif login_data['returnCode'] == 100:
+ returnCode = 403
+ status = "403 Forbidden"
+ info = "Unable to operate. Probably User has logged in."
+ log = {}
+ elif login_data['returnCode'] == 1:
+ ticket_data = get_ticket(userId)
+ if ticket_data['returnCode'] == 0:
+ logout(userId, accessCode, timestamp)
+ returnCode = 405
+ status = "405 Method Not Allowed"
+ info = "WARNING: THIS INFO SHOULD NEVER APPEARS. IF YOU SEE THIS WARNING PLEASE CONTACT Telegram@sasakure. Unable to operate. Successfully Logged in. Probably User has had one ticket."
+ log = {"UserLoginApiStatus": 1, "UserLogoutApiStatus": 1}
+ elif ticket_data['returnCode'] == 1:
+ logout(userId, accessCode, timestamp)
+ returnCode = 200
+ status = "200 OK"
+ info = "Succeed."
+ log = {"UserLoginApiStatus": 1, "UpsertUserChargelogStatus": 1, "UserLogoutApiStatus": 1}
+ data = jsonify({"status": status, "timestamp": timestamp, "info": info, "apiName": "ticket", "date": datetime.now(pytz.timezone('Asia/Shanghai')).strftime('%a, %d %b %Y %H:%M:%S GMT+8'), "userId": userId})
+ return data, returnCode
+
+@app.route("/mapstock")
+def mapstock_process():
+ userId = request.args.get('userid')
+ if userId is None or userId.isdigit() is False or len(str(userId)) != 8:
+ return jsonify({"apiName": "mapstock", "apiInfo": "Save 99 Kilometers in Maps.", "apiUsage": "/mapstock?userid="})
+ else:
+ userId = int(userId)
+ timestamp = int(time.time())
+ login_data = login(userId, timestamp)
+ if login_data['returnCode'] == 102:
+ returnCode = 403
+ status = "403 Forbidden"
+ info = "Unable to operate. Please refresh QrCode."
+ log = {}
+ elif login_data['returnCode'] == 100:
+ returnCode = 403
+ status = "403 Forbidden"
+ info = "Unable to operate. Probably User has logged in."
+ log = {}
+ elif login_data['returnCode'] == 1:
+ userdata_result = userdata(userId)
+ logout(userId, timestamp)
+ if userdata_result['userData']['mapStock'] == 99000:
+ returnCode = 403
+ status = "403 Forbidden"
+ info = "User has stocked 99 kilometers."
+ log = {}
+ else:
+ while True:
+ login(userId, timestamp)
+ userdata_result = userdata(userId)
+ logout(userId, timestamp)
+ if userdata_result['userData']['mapStock'] == 99000:
+ returnCode = 200
+ status = "200 OK"
+ info = "Succeed."
+ log = {"UserLoginApiStatus": 1, "UploadUserPlaylogApiStatus": 1, "UpsertUserAllApi": 1, "UserLogoutApiStatus": 1}
+ break
+ else:
+ mapstock(userId)
+ continue
+ else:
+ returnCode = 500
+ status = "500 Internal Server Error"
+ info = "Unknown Error. Failed in UserLogin"
+ log = login_data
+ data = jsonify({"status": status, "timestamp": timestamp, "info": info, "apiName": "mapstock", "date": datetime.now(pytz.timezone('Asia/Shanghai')).strftime('%a, %d %b %Y %H:%M:%S GMT+8'), "userId": userId})
+ return data, returnCode
+
+@app.route("/unlock")
+def unlock_process():
+ IDm = request.args.get('idm')
+ if IDm is None or len(str(IDm)) != 16:
+ return jsonify({"apiName": "unlock", "apiInfo": "Unlock All DX Master Charts.", "apiUsage": "/unlock?idm="})
+ else:
+ userId = aimedb_userId(IDm)[0]
+ accessCode = aimedb_userId(IDm)[1]
+ timestamp = int(time.time())
+ login_data = login(userId, accessCode, timestamp)
+ if login_data['returnCode'] == 102:
+ returnCode = 403
+ status = "403 Forbidden"
+ info = "Unable to operate. Please refresh QrCode."
+ log = {}
+ elif login_data['returnCode'] == 100:
+ returnCode = 403
+ status = "403 Forbidden"
+ info = "Unable to operate. Probably User has logged in."
+ log = {}
+ elif login_data['returnCode'] == 1:
+ userdata_result = userdata(userId)
+ logout(userId, accessCode, timestamp)
+ unlock(userId, accessCode)
+ returnCode = 200
+ status = "200 OK"
+ info = "Succeed."
+ log = {"UserLoginApiStatus": 1, "UploadUserPlaylogApiStatus": 1, "UpsertUserAllApi": 1, "UserLogoutApiStatus": 1}
+ data = jsonify({"status": status, "timestamp": timestamp, "info": info, "apiName": "unlock", "date": datetime.now(pytz.timezone('Asia/Shanghai')).strftime('%a, %d %b %Y %H:%M:%S GMT+8'), "userId": userId})
+ return data, returnCode
+
+@app.route("/music", methods=['POST'])
+def music_post():
+ request_data = request.get_json()
+ if 'userId' in request_data and 'music' in request_data:
+ if request_data['userId'] is None or isinstance(request_data['userId'], int) is False or len(str(request_data['userId'])) != 8:
+ return jsonify({"apiName": "music", "apiInfo": "Overwrite Music Data in UserData.", "apiUsage": ""})
+ else:
+ userId = int(request_data['userId'])
+ timestamp = int(time.time())
+ login_data = login(userId, timestamp)
+ if login_data['returnCode'] == 102:
+ returnCode = 403
+ status = "403 Forbidden"
+ info = "Unable to operate. Please refresh QrCode."
+ log = {}
+ elif login_data['returnCode'] == 100:
+ returnCode = 403
+ status = "403 Forbidden"
+ info = "Unable to operate. Probably User has logged in."
+ log = {}
+ elif login_data['returnCode'] == 1:
+ logout(userId, timestamp)
+ music_data = request_data['music']
+ music(userId, music_data)
+ returnCode = 200
+ status = "200 OK"
+ info = "Succeed."
+ log = {"UserLoginApiStatus": 1, "UploadUserPlaylogApiStatus": 1, "UpsertUserAllApi": 1,"UserLogoutApiStatus": 1}
+ else:
+ returnCode = 500
+ status = "500 Internal Server Error"
+ info = "Unknown Error. Failed in UserLogin"
+ log = login_data
+ else:
+ return jsonify({"apiName": "music", "apiInfo": "Overwrite Music Data in UserData.", "apiUsage": ""})
+ data = jsonify({"status": status, "timestamp": timestamp, "info": info, "apiName": "music", "date": datetime.now(pytz.timezone('Asia/Shanghai')).strftime('%a, %d %b %Y %H:%M:%S GMT+8'), "userId": userId})
+ return data, returnCode
+
+@app.route("/map")
+def maps():
+ with open('map.json') as file:
+ map_data = json.load(file)
+ available = [{"mapId": entry["mapId"], "name": entry["name"]} for entry in map_data]
+ mapId = request.args.get('mapid')
+ IDm = request.args.get('idm')
+ if IDm is None or len(str(IDm)) != 16 or mapId is None or mapId.isdigit() is False:
+ return jsonify({"apiName": "map", "apiInfo": "Complete Map", "apiUsage": "/map?userid=&mapid=", "availableMaps": available})
+ else:
+ userId = aimedb_userId(IDm)[0]
+ accessCode = aimedb_userId(IDm)[1]
+ mapId = int(mapId)
+ user_map_data = json.dumps(map(userId)['userMapList'])
+ #return user_map_data
+ item_data = find_map(mapId, map_data)['treasure']
+ user_character_list = json.dumps(character(userId)['userCharacterList'])
+ item_list = item(item_data, user_character_list)[0]
+ character_list = item(item_data, user_character_list)[1]
+ distance = item(item_data, user_character_list)[2]
+ timestamp = int(time.time())
+ login_data = login(userId, accessCode, timestamp)
+ if login_data['returnCode'] == 102:
+ returnCode = 403
+ status = "403 Forbidden"
+ info = "Unable to operate. Please refresh QrCode."
+ log = {}
+ elif login_data['returnCode'] == 100:
+ returnCode = 403
+ status = "403 Forbidden"
+ info = "Unable to operate. Probably User has logged in."
+ log = {}
+ elif login_data['returnCode'] == 1:
+ logout(userId, accessCode, timestamp)
+ map_clear(userId, accessCode, mapId, distance, item_list, character_list, isNewMapList(mapId, user_map_data))
+ returnCode = 200
+ status = "200 OK"
+ info = "Succeed."
+ log = {"UserLoginApiStatus": 1, "UploadUserPlaylogApiStatus": 1, "UpsertUserAllApi": 1, "UserLogoutApiStatus": 1}
+ else:
+ returnCode = 500
+ status = "500 Internal Server Error"
+ info = "Unknown Error. Failed in UserLogin"
+ log = login_data
+ data = jsonify({"status": status, "timestamp": timestamp, "info": info, "apiName": "map", "date": datetime.now(pytz.timezone('Asia/Shanghai')).strftime('%a, %d %b %Y %H:%M:%S GMT+8'), "userId": userId})
+ return data, returnCode
+
+@app.route("/bonus")
+def bonus():
+ userId = request.args.get('userid')
+ if userId is None or userId.isdigit() is False or len(str(userId)) != 8:
+ return jsonify({"apiName": "bonus", "apiInfo": "Get 9 Stamps in Login Bonus Items.", "apiUsage": "/bonus?userid="})
+ else:
+ userId = int(userId)
+ timestamp = int(time.time())
+ login_data = login(userId, timestamp)
+ if login_data['returnCode'] == 102:
+ returnCode = 403
+ status = "403 Forbidden"
+ info = "Unable to operate. Please refresh QrCode."
+ log = {}
+ elif login_data['returnCode'] == 100:
+ returnCode = 403
+ status = "403 Forbidden"
+ info = "Unable to operate. Probably User has logged in."
+ log = {}
+ elif login_data['returnCode'] == 1:
+ logout(userId, timestamp)
+ login_bonus(userId, bonus_list_gen(userId))
+ returnCode = 200
+ status = "200 OK"
+ info = "Succeed."
+ log = {"UserLoginApiStatus": 1, "UploadUserPlaylogApiStatus": 1, "UpsertUserAllApi": 1, "UserLogoutApiStatus": 1}
+ data = jsonify({"status": status, "timestamp": timestamp, "info": info, "apiName": "unlock", "date": datetime.now(pytz.timezone('Asia/Shanghai')).strftime('%a, %d %b %Y %H:%M:%S GMT+8'), "userId": userId})
+ return data, returnCode
+
+if __name__ == '__main__':
+ app.run(port = 8081)
diff --git a/map.json b/map.json
new file mode 100644
index 0000000..1746368
--- /dev/null
+++ b/map.json
@@ -0,0 +1,11276 @@
+[
+ {
+ "mapId": 1,
+ "name": "はじまりのちほー",
+ "treasure": [
+ {
+ "id": 101,
+ "distance": 0,
+ "name": "でらっくま",
+ "kind": 9
+ },
+ {
+ "id": 11003,
+ "distance": 12000,
+ "name": "でらっくmaimai♪てんてこまい!",
+ "kind": 5
+ },
+ {
+ "id": 102,
+ "distance": 30000,
+ "name": "いえてぃっくま",
+ "kind": 9
+ },
+ {
+ "id": 11007,
+ "distance": 40000,
+ "name": "超常マイマイン",
+ "kind": 5
+ },
+ {
+ "id": 103,
+ "distance": 95000,
+ "name": "りすっくま",
+ "kind": 9
+ },
+ {
+ "id": 11006,
+ "distance": 250000,
+ "name": "P-qoq",
+ "kind": 5
+ },
+ {
+ "id": 104,
+ "distance": 800000,
+ "name": "ぱんだっくま",
+ "kind": 9
+ },
+ {
+ "id": 11005,
+ "distance": 2900000,
+ "name": "バーチャルダム ネーション",
+ "kind": 5
+ },
+ {
+ "id": 105,
+ "distance": 4000000,
+ "name": "みつよしっくま",
+ "kind": 9
+ },
+ {
+ "id": 11004,
+ "distance": 6800000,
+ "name": "MAXRAGE",
+ "kind": 5
+ }
+ ]
+ },
+ {
+ "mapId": 2,
+ "name": "青春ちほー",
+ "treasure": [
+ {
+ "id": 201,
+ "distance": 0,
+ "name": "水野舞衣",
+ "kind": 9
+ },
+ {
+ "id": 11009,
+ "distance": 12000,
+ "name": "STEREOSCAPE",
+ "kind": 5
+ },
+ {
+ "id": 202,
+ "distance": 40000,
+ "name": "青沼優",
+ "kind": 9
+ },
+ {
+ "id": 11008,
+ "distance": 120000,
+ "name": "Crazy Circle",
+ "kind": 5
+ },
+ {
+ "id": 203,
+ "distance": 900000,
+ "name": "葵巴",
+ "kind": 9
+ },
+ {
+ "id": 204,
+ "distance": 4500000,
+ "name": "花田美空",
+ "kind": 9
+ },
+ {
+ "id": 205,
+ "distance": 15000000,
+ "name": "浅葱光一",
+ "kind": 9
+ }
+ ]
+ },
+ {
+ "mapId": 3,
+ "name": "でらっくすちほー",
+ "treasure": [
+ {
+ "id": 305,
+ "distance": 99999,
+ "name": "しゃま",
+ "kind": 9
+ },
+ {
+ "id": 306,
+ "distance": 999999,
+ "name": "みるく",
+ "kind": 9
+ },
+ {
+ "id": 304,
+ "distance": 1999999,
+ "name": "乙姫",
+ "kind": 9
+ },
+ {
+ "id": 301,
+ "distance": 2999999,
+ "name": "ラズ",
+ "kind": 9
+ },
+ {
+ "id": 302,
+ "distance": 3999999,
+ "name": "ソルト",
+ "kind": 9
+ },
+ {
+ "id": 303,
+ "distance": 4999999,
+ "name": "シフォン",
+ "kind": 9
+ },
+ {
+ "id": 392,
+ "distance": 9999999,
+ "name": "たぬっくま",
+ "kind": 9
+ },
+ {
+ "id": 393,
+ "distance": 40075000,
+ "name": "ひげっくま",
+ "kind": 9
+ },
+ {
+ "id": 394,
+ "distance": 99999999,
+ "name": "おねむっくま",
+ "kind": 9
+ },
+ {
+ "id": 395,
+ "distance": 384400000,
+ "name": "めがねっくま",
+ "kind": 9
+ }
+ ]
+ },
+ {
+ "mapId": 4,
+ "name": "メトロポリスちほー",
+ "treasure": [
+ {
+ "id": 401,
+ "distance": 0,
+ "name": "SAM_RAI",
+ "kind": 9
+ },
+ {
+ "id": 11019,
+ "distance": 12000,
+ "name": "Scarlet Wings",
+ "kind": 5
+ },
+ {
+ "id": 402,
+ "distance": 40000,
+ "name": "BEN_KEI",
+ "kind": 9
+ },
+ {
+ "id": 11020,
+ "distance": 120000,
+ "name": "Technicians High",
+ "kind": 5
+ },
+ {
+ "id": 403,
+ "distance": 200000,
+ "name": "SIN_BA",
+ "kind": 9
+ },
+ {
+ "id": 11021,
+ "distance": 400000,
+ "name": "魔ジョ狩リ",
+ "kind": 5
+ },
+ {
+ "id": 404,
+ "distance": 1200000,
+ "name": "TO_KI",
+ "kind": 9
+ },
+ {
+ "id": 11022,
+ "distance": 4500000,
+ "name": "TwisteD! XD",
+ "kind": 5
+ },
+ {
+ "id": 11023,
+ "distance": 8500000,
+ "name": "Blows Up Everything",
+ "kind": 5
+ },
+ {
+ "id": 405,
+ "distance": 14000000,
+ "name": "黒姫",
+ "kind": 9
+ }
+ ]
+ },
+ {
+ "mapId": 5,
+ "name": "ドラゴンちほー",
+ "treasure": [
+ {
+ "id": 501,
+ "distance": 0,
+ "name": "バハムート",
+ "kind": 9
+ },
+ {
+ "id": 11016,
+ "distance": 12000,
+ "name": "キリキリ舞Mine",
+ "kind": 5
+ },
+ {
+ "id": 502,
+ "distance": 50000,
+ "name": "ニーズヘッグ",
+ "kind": 9
+ },
+ {
+ "id": 11017,
+ "distance": 140000,
+ "name": "福宿音屋魂音泉",
+ "kind": 5
+ },
+ {
+ "id": 503,
+ "distance": 300000,
+ "name": "ファフニール",
+ "kind": 9
+ },
+ {
+ "id": 11018,
+ "distance": 600000,
+ "name": "Now or Never",
+ "kind": 5
+ },
+ {
+ "id": 504,
+ "distance": 1750000,
+ "name": "ラタトスク",
+ "kind": 9
+ },
+ {
+ "id": 11015,
+ "distance": 5000000,
+ "name": "一か罰",
+ "kind": 5
+ },
+ {
+ "id": 505,
+ "distance": 9400000,
+ "name": "フレーズベルグ",
+ "kind": 9
+ }
+ ]
+ },
+ {
+ "mapId": 6,
+ "name": "天界ちほー",
+ "treasure": [
+ {
+ "id": 601,
+ "distance": 0,
+ "name": "百合咲ミカ",
+ "kind": 9
+ },
+ {
+ "id": 11027,
+ "distance": 40000,
+ "name": "アポカリプスに反逆の焔を焚べろ",
+ "kind": 5
+ },
+ {
+ "id": 602,
+ "distance": 60000,
+ "name": "白銅寺アズリ",
+ "kind": 9
+ },
+ {
+ "id": 603,
+ "distance": 150000,
+ "name": "兎花宮イオフィ",
+ "kind": 9
+ },
+ {
+ "id": 11026,
+ "distance": 2000000,
+ "name": "TEmPTaTiON",
+ "kind": 5
+ },
+ {
+ "id": 604,
+ "distance": 4000000,
+ "name": "白王院ラグ",
+ "kind": 9
+ },
+ {
+ "id": 605,
+ "distance": 20000000,
+ "name": "兎花宮サラ",
+ "kind": 9
+ }
+ ]
+ },
+ {
+ "mapId": 7,
+ "name": "BLACK ROSEちほー",
+ "treasure": [
+ {
+ "id": 701,
+ "distance": 0,
+ "name": "アウル",
+ "kind": 9
+ },
+ {
+ "id": 11002,
+ "distance": 9000,
+ "name": "Secret Sleuth",
+ "kind": 5
+ },
+ {
+ "id": 702,
+ "distance": 27000,
+ "name": "リッツ",
+ "kind": 9
+ },
+ {
+ "id": 11001,
+ "distance": 57000,
+ "name": "BLACK ROSE",
+ "kind": 5
+ },
+ {
+ "id": 703,
+ "distance": 87000,
+ "name": "ニック",
+ "kind": 9
+ },
+ {
+ "id": 704,
+ "distance": 120000,
+ "name": "エリー",
+ "kind": 9
+ },
+ {
+ "id": 705,
+ "distance": 159000,
+ "name": "ヒュド・ルー",
+ "kind": 9
+ },
+ {
+ "id": 706,
+ "distance": 201000,
+ "name": "クレメンス",
+ "kind": 9
+ },
+ {
+ "id": 707,
+ "distance": 243000,
+ "name": "ラルフ",
+ "kind": 9
+ },
+ {
+ "id": 708,
+ "distance": 285000,
+ "name": "バイロン",
+ "kind": 9
+ },
+ {
+ "id": 709,
+ "distance": 369000,
+ "name": "マスティマ",
+ "kind": 9
+ }
+ ]
+ },
+ {
+ "mapId": 33,
+ "name": "GYARIちほー",
+ "treasure": [
+ {
+ "id": 3301,
+ "distance": 0,
+ "name": "紲星あかり",
+ "kind": 9
+ },
+ {
+ "id": 11073,
+ "distance": 10000,
+ "name": "アカリがやってきたぞっ",
+ "kind": 5
+ },
+ {
+ "id": 3302,
+ "distance": 50000,
+ "name": "結月ゆかり",
+ "kind": 9
+ },
+ {
+ "id": 3303,
+ "distance": 300000,
+ "name": "弦巻マキ",
+ "kind": 9
+ },
+ {
+ "id": 3304,
+ "distance": 1300000,
+ "name": "琴葉 茜",
+ "kind": 9
+ },
+ {
+ "id": 3305,
+ "distance": 1400000,
+ "name": "琴葉 葵",
+ "kind": 9
+ },
+ {
+ "id": 3306,
+ "distance": 8610000,
+ "name": "GYARI",
+ "kind": 9
+ }
+ ]
+ },
+ {
+ "mapId": 34,
+ "name": "東方Projectちほー",
+ "treasure": [
+ {
+ "id": 3401,
+ "distance": 0,
+ "name": "博麗霊夢",
+ "kind": 9
+ },
+ {
+ "id": 11066,
+ "distance": 10000,
+ "name": "げきオコスティックファイナリアリティぷんぷんマスタースパーク",
+ "kind": 5
+ },
+ {
+ "id": 3402,
+ "distance": 20000,
+ "name": "霧雨魔理沙",
+ "kind": 9
+ },
+ {
+ "id": 10641,
+ "distance": 40000,
+ "name": "Calamity Fortune",
+ "kind": 5
+ },
+ {
+ "id": 3403,
+ "distance": 65000,
+ "name": "十六夜咲夜",
+ "kind": 9
+ },
+ {
+ "id": 3404,
+ "distance": 220000,
+ "name": "レミリア・スカーレット",
+ "kind": 9
+ },
+ {
+ "id": 11064,
+ "distance": 320000,
+ "name": "Little \"Sister\" Bitch",
+ "kind": 5
+ },
+ {
+ "id": 3405,
+ "distance": 450000,
+ "name": "フランドール・スカーレット",
+ "kind": 9
+ },
+ {
+ "id": 3406,
+ "distance": 700000,
+ "name": "魂魄妖夢",
+ "kind": 9
+ },
+ {
+ "id": 11065,
+ "distance": 900000,
+ "name": "Yakumo >>JOINT STRUGGLE (2019 Update)",
+ "kind": 5
+ },
+ {
+ "id": 3407,
+ "distance": 2000000,
+ "name": "八雲紫",
+ "kind": 9
+ },
+ {
+ "id": 3408,
+ "distance": 5000000,
+ "name": "鈴仙・優曇華院・イナバ",
+ "kind": 9
+ },
+ {
+ "id": 3409,
+ "distance": 10500000,
+ "name": "蓬莱山輝夜",
+ "kind": 9
+ },
+ {
+ "id": 3410,
+ "distance": 17000000,
+ "name": "藤原妹紅",
+ "kind": 9
+ }
+ ]
+ },
+ {
+ "mapId": 35,
+ "name": "Project DIVAちほー",
+ "treasure": [
+ {
+ "id": 3501,
+ "distance": 0,
+ "name": "初音ミク",
+ "kind": 9
+ },
+ {
+ "id": 3504,
+ "distance": 5000,
+ "name": "天袖",
+ "kind": 9
+ },
+ {
+ "id": 11061,
+ "distance": 10000,
+ "name": "アマツキツネ",
+ "kind": 5
+ },
+ {
+ "id": 3505,
+ "distance": 100000,
+ "name": "巡音ルカ",
+ "kind": 9
+ },
+ {
+ "id": 11060,
+ "distance": 125000,
+ "name": "星屑ユートピア",
+ "kind": 5
+ },
+ {
+ "id": 3503,
+ "distance": 300000,
+ "name": "エトワール",
+ "kind": 9
+ },
+ {
+ "id": 11059,
+ "distance": 350000,
+ "name": "骸骨楽団とリリア",
+ "kind": 5
+ },
+ {
+ "id": 3502,
+ "distance": 2200000,
+ "name": "初音ミクV3",
+ "kind": 9
+ },
+ {
+ "id": 11058,
+ "distance": 2500000,
+ "name": "デンパラダイム",
+ "kind": 5
+ },
+ {
+ "id": 3506,
+ "distance": 7000000,
+ "name": "鏡音リン",
+ "kind": 9
+ },
+ {
+ "id": 3507,
+ "distance": 12000000,
+ "name": "鏡音レン",
+ "kind": 9
+ },
+ {
+ "id": 3509,
+ "distance": 22000000,
+ "name": "KAITO",
+ "kind": 9
+ },
+ {
+ "id": 3508,
+ "distance": 35000000,
+ "name": "MEIKO",
+ "kind": 9
+ }
+ ]
+ },
+ {
+ "mapId": 39,
+ "name": "からめるちほー",
+ "treasure": [
+ {
+ "id": 3901,
+ "distance": 0,
+ "name": "からめる/ねこ/ラーメン",
+ "kind": 9
+ },
+ {
+ "id": 11014,
+ "distance": 25000,
+ "name": "♡マイマイマイラブ♡",
+ "kind": 5
+ },
+ {
+ "id": 3902,
+ "distance": 50000,
+ "name": "からめる/ねこ/DJ",
+ "kind": 9
+ },
+ {
+ "id": 3903,
+ "distance": 80000,
+ "name": "からめる/人/まいった",
+ "kind": 9
+ },
+ {
+ "id": 10734,
+ "distance": 120000,
+ "name": "ENERGY SYNERGY MATRIX",
+ "kind": 5
+ },
+ {
+ "id": 3904,
+ "distance": 160000,
+ "name": "からめる/人/刺身",
+ "kind": 9
+ },
+ {
+ "id": 3905,
+ "distance": 200000,
+ "name": "からめる/レース",
+ "kind": 9
+ }
+ ]
+ },
+ {
+ "mapId": 40,
+ "name": "イロドリミドリちほー",
+ "treasure": [
+ {
+ "id": 4001,
+ "distance": 0,
+ "name": "明坂 芹菜",
+ "kind": 9
+ },
+ {
+ "id": 11024,
+ "distance": 10000,
+ "name": "Agitation!",
+ "kind": 5
+ },
+ {
+ "id": 4008,
+ "distance": 40000,
+ "name": "五十嵐 撫子",
+ "kind": 9
+ },
+ {
+ "id": 4009,
+ "distance": 95000,
+ "name": "萩原 七々瀬",
+ "kind": 9
+ },
+ {
+ "id": 11025,
+ "distance": 150000,
+ "name": "管弦楽組曲 第3番 ニ長調「第2曲(G線上のアリア)」BWV.1068-2",
+ "kind": 5
+ },
+ {
+ "id": 4006,
+ "distance": 450000,
+ "name": "月鈴 那知",
+ "kind": 9
+ },
+ {
+ "id": 4007,
+ "distance": 600000,
+ "name": "月鈴 白奈",
+ "kind": 9
+ },
+ {
+ "id": 10420,
+ "distance": 900000,
+ "name": "Change Our MIRAI!",
+ "kind": 5
+ },
+ {
+ "id": 4002,
+ "distance": 1500000,
+ "name": "御形 アリシアナ",
+ "kind": 9
+ },
+ {
+ "id": 4003,
+ "distance": 3100000,
+ "name": "天王洲 なずな",
+ "kind": 9
+ },
+ {
+ "id": 4004,
+ "distance": 7500000,
+ "name": "小仏 凪",
+ "kind": 9
+ },
+ {
+ "id": 4005,
+ "distance": 14000000,
+ "name": "箱部 なる",
+ "kind": 9
+ }
+ ]
+ },
+ {
+ "mapId": 42,
+ "name": "結月ゆかりちほー",
+ "treasure": [
+ {
+ "id": 4201,
+ "distance": 0,
+ "name": "結月ゆかり/幾望の月",
+ "kind": 9
+ },
+ {
+ "id": 11087,
+ "distance": 10000,
+ "name": "幾望の月",
+ "kind": 5
+ },
+ {
+ "id": 4205,
+ "distance": 80000,
+ "name": "結月ゆかり/サヨナラチェーンソー",
+ "kind": 9
+ },
+ {
+ "id": 11083,
+ "distance": 180000,
+ "name": "サヨナラチェーンソー",
+ "kind": 5
+ },
+ {
+ "id": 4202,
+ "distance": 700000,
+ "name": "結月ゆかり/フリィダム ロリィタ",
+ "kind": 9
+ },
+ {
+ "id": 4203,
+ "distance": 2800000,
+ "name": "結月ゆかり/チュルリラ・チュルリラ・ダッダッダ!",
+ "kind": 9
+ },
+ {
+ "id": 4204,
+ "distance": 7800000,
+ "name": "結月ゆかり/幸せになれる隠しコマンドがあるらしい",
+ "kind": 9
+ }
+ ]
+ },
+ {
+ "mapId": 50001,
+ "name": "はじまりのちほー2",
+ "treasure": [
+ {
+ "id": 50101,
+ "distance": 0,
+ "name": "あおはるっくま",
+ "kind": 9
+ },
+ {
+ "id": 11094,
+ "distance": 14000,
+ "name": "ここからはじまるプロローグ。",
+ "kind": 5
+ },
+ {
+ "id": 50102,
+ "distance": 28000,
+ "name": "にんじゃっくま",
+ "kind": 9
+ },
+ {
+ "id": 11095,
+ "distance": 42000,
+ "name": "絡めトリック利己ライザー",
+ "kind": 5
+ },
+ {
+ "id": 50103,
+ "distance": 56000,
+ "name": "どらごっくま",
+ "kind": 9
+ },
+ {
+ "id": 11096,
+ "distance": 84000,
+ "name": "モ°ルモ°ル",
+ "kind": 5
+ },
+ {
+ "id": 50104,
+ "distance": 112000,
+ "name": "えんじぇっくま",
+ "kind": 9
+ },
+ {
+ "id": 11093,
+ "distance": 154000,
+ "name": "UniTas",
+ "kind": 5
+ },
+ {
+ "id": 50105,
+ "distance": 196000,
+ "name": "くろばらっくま",
+ "kind": 9
+ },
+ {
+ "id": 50101,
+ "distance": 252000,
+ "name": "はじまりのちほー2",
+ "kind": 1
+ }
+ ]
+ },
+ {
+ "mapId": 50002,
+ "name": "メトロポリスちほー2 イーシュ襲来",
+ "treasure": [
+ {
+ "id": 50201,
+ "distance": 0,
+ "name": "ピリポ",
+ "kind": 9
+ },
+ {
+ "id": 11090,
+ "distance": 14000,
+ "name": "Flashkick",
+ "kind": 5
+ },
+ {
+ "id": 50202,
+ "distance": 42000,
+ "name": "ケファ",
+ "kind": 9
+ },
+ {
+ "id": 11089,
+ "distance": 84000,
+ "name": "STEEL TRANSONIC",
+ "kind": 5
+ },
+ {
+ "id": 50203,
+ "distance": 126000,
+ "name": "バルトルメ",
+ "kind": 9
+ },
+ {
+ "id": 50201,
+ "distance": 168000,
+ "name": "メトロポリスちほー2 イーシュ襲来",
+ "kind": 1
+ }
+ ]
+ },
+ {
+ "mapId": 50003,
+ "name": "メトロポリスちほー2 黒姫の逆襲",
+ "treasure": [
+ {
+ "id": 50204,
+ "distance": 14000,
+ "name": "アンドレアス",
+ "kind": 9
+ },
+ {
+ "id": 11091,
+ "distance": 42000,
+ "name": "Stardust Memories",
+ "kind": 5
+ },
+ {
+ "id": 50205,
+ "distance": 84000,
+ "name": "イーシュ",
+ "kind": 9
+ },
+ {
+ "id": 11092,
+ "distance": 168000,
+ "name": "My My My",
+ "kind": 5
+ },
+ {
+ "id": 50301,
+ "distance": 252000,
+ "name": "メトロポリスちほー2 黒姫の逆襲",
+ "kind": 1
+ }
+ ]
+ },
+ {
+ "mapId": 50004,
+ "name": "みかんヶ岡ちほー 朝焼け通り",
+ "treasure": [
+ {
+ "id": 50401,
+ "distance": 0,
+ "name": "萌木ゆずか",
+ "kind": 9
+ },
+ {
+ "id": 11100,
+ "distance": 14000,
+ "name": "シエルブルーマルシェ",
+ "kind": 5
+ },
+ {
+ "id": 50402,
+ "distance": 42000,
+ "name": "萌木ほのか",
+ "kind": 9
+ },
+ {
+ "id": 11097,
+ "distance": 56000,
+ "name": "ブレインジャックシンドローム",
+ "kind": 5
+ },
+ {
+ "id": 50403,
+ "distance": 70000,
+ "name": "萌木はるか",
+ "kind": 9
+ },
+ {
+ "id": 50401,
+ "distance": 126000,
+ "name": "みかんヶ岡ちほー 朝焼け通り",
+ "kind": 1
+ }
+ ]
+ },
+ {
+ "mapId": 50005,
+ "name": "みかんヶ岡ちほー 月夜通り",
+ "treasure": [
+ {
+ "id": 50404,
+ "distance": 14000,
+ "name": "萌木いよか",
+ "kind": 9
+ },
+ {
+ "id": 11098,
+ "distance": 42000,
+ "name": "共鳴",
+ "kind": 5
+ },
+ {
+ "id": 50405,
+ "distance": 84000,
+ "name": "萌木せとか",
+ "kind": 9
+ },
+ {
+ "id": 11099,
+ "distance": 126000,
+ "name": "Ututu",
+ "kind": 5
+ },
+ {
+ "id": 50501,
+ "distance": 168000,
+ "name": "みかんヶ岡ちほー 月夜通り",
+ "kind": 1
+ }
+ ]
+ },
+ {
+ "mapId": 50006,
+ "name": "天界ちほー2",
+ "treasure": [
+ {
+ "id": 50601,
+ "distance": 0,
+ "name": "ブリュンヒルデ",
+ "kind": 9
+ },
+ {
+ "id": 50602,
+ "distance": 9000,
+ "name": "ジグニュー",
+ "kind": 9
+ },
+ {
+ "id": 11101,
+ "distance": 39000,
+ "name": "GRÄNDIR",
+ "kind": 5
+ },
+ {
+ "id": 50603,
+ "distance": 49000,
+ "name": "ジークルーネ",
+ "kind": 9
+ },
+ {
+ "id": 50604,
+ "distance": 82000,
+ "name": "グリムゲルデ",
+ "kind": 9
+ },
+ {
+ "id": 50605,
+ "distance": 134000,
+ "name": "シュヴェルトライテ",
+ "kind": 9
+ },
+ {
+ "id": 50606,
+ "distance": 246000,
+ "name": "ヴァルトラウテ",
+ "kind": 9
+ },
+ {
+ "id": 11103,
+ "distance": 386000,
+ "name": "渦状銀河のシンフォニエッタ",
+ "kind": 5
+ },
+ {
+ "id": 50607,
+ "distance": 554000,
+ "name": "オーディン",
+ "kind": 9
+ },
+ {
+ "id": 11102,
+ "distance": 806000,
+ "name": "封焔の135秒",
+ "kind": 5
+ },
+ {
+ "id": 50601,
+ "distance": 1072000,
+ "name": "天界ちほー2",
+ "kind": 1
+ }
+ ]
+ },
+ {
+ "mapId": 50007,
+ "name": "でらっくすちほー2",
+ "treasure": [
+ {
+ "id": 50701,
+ "distance": 112000,
+ "name": "maimaiちゃん",
+ "kind": 9
+ },
+ {
+ "id": 50701,
+ "distance": 532000,
+ "name": "HAPPYYYY DX",
+ "kind": 1
+ },
+ {
+ "id": 50702,
+ "distance": 1064000,
+ "name": "はっぴー",
+ "kind": 9
+ },
+ {
+ "id": 50703,
+ "distance": 1596000,
+ "name": "maimai しゃまみるく",
+ "kind": 1
+ },
+ {
+ "id": 50703,
+ "distance": 2128000,
+ "name": "カメ",
+ "kind": 9
+ },
+ {
+ "id": 50702,
+ "distance": 2660000,
+ "name": "maimai 集合",
+ "kind": 1
+ },
+ {
+ "id": 50704,
+ "distance": 3192000,
+ "name": "タイ",
+ "kind": 9
+ },
+ {
+ "id": 50705,
+ "distance": 4256000,
+ "name": "エリザビー",
+ "kind": 9
+ }
+ ]
+ },
+ {
+ "mapId": 50008,
+ "name": "BLACK ROSEちほー2 黒薔薇病篇",
+ "treasure": [
+ {
+ "id": 50801,
+ "distance": 126000,
+ "name": "ルイ",
+ "kind": 9
+ },
+ {
+ "id": 50802,
+ "distance": 252000,
+ "name": "ニック(悪魔憑き)",
+ "kind": 9
+ },
+ {
+ "id": 50801,
+ "distance": 378000,
+ "name": "黒薔薇病患者の内面",
+ "kind": 1
+ }
+ ]
+ },
+ {
+ "mapId": 50009,
+ "name": "BLACK ROSEちほー2 二つの仮面篇",
+ "treasure": [
+ {
+ "id": 50803,
+ "distance": 84000,
+ "name": "ティノ",
+ "kind": 9
+ },
+ {
+ "id": 50804,
+ "distance": 168000,
+ "name": "エレノラ",
+ "kind": 9
+ },
+ {
+ "id": 50901,
+ "distance": 294000,
+ "name": "ヒュド・ルー/ルイの二面性",
+ "kind": 1
+ }
+ ]
+ },
+ {
+ "mapId": 50033,
+ "name": "オンゲキちほー",
+ "treasure": [
+ {
+ "id": 53301,
+ "distance": 0,
+ "name": "星咲 あかり",
+ "kind": 9
+ },
+ {
+ "id": 11107,
+ "distance": 10000,
+ "name": "最強 the サマータイム!!!!!",
+ "kind": 5
+ },
+ {
+ "id": 53302,
+ "distance": 40000,
+ "name": "藤沢 柚子",
+ "kind": 9
+ },
+ {
+ "id": 53303,
+ "distance": 120000,
+ "name": "三角 葵",
+ "kind": 9
+ },
+ {
+ "id": 53304,
+ "distance": 300000,
+ "name": "日向 千夏",
+ "kind": 9
+ },
+ {
+ "id": 11109,
+ "distance": 1000000,
+ "name": "タテマエと本心の大乱闘",
+ "kind": 5
+ },
+ {
+ "id": 53305,
+ "distance": 2000000,
+ "name": "藍原 椿",
+ "kind": 9
+ },
+ {
+ "id": 11108,
+ "distance": 3600000,
+ "name": "UTAKATA",
+ "kind": 5
+ },
+ {
+ "id": 53306,
+ "distance": 6000000,
+ "name": "九條 楓",
+ "kind": 9
+ },
+ {
+ "id": 53301,
+ "distance": 19000000,
+ "name": "オンゲキちほー",
+ "kind": 1
+ }
+ ]
+ },
+ {
+ "mapId": 50034,
+ "name": "#コンパスちほー",
+ "treasure": [
+ {
+ "id": 53401,
+ "distance": 0,
+ "name": "グスタフ ハイドリヒ",
+ "kind": 9
+ },
+ {
+ "id": 53402,
+ "distance": 10000,
+ "name": "マリア=S=レオンブルク",
+ "kind": 9
+ },
+ {
+ "id": 11125,
+ "distance": 20000,
+ "name": "クレイジー・ビート",
+ "kind": 5
+ },
+ {
+ "id": 53403,
+ "distance": 40000,
+ "name": "ヴィーナス ポロロッチョ",
+ "kind": 9
+ },
+ {
+ "id": 11126,
+ "distance": 100000,
+ "name": "バイオレンストリガー",
+ "kind": 5
+ },
+ {
+ "id": 53404,
+ "distance": 220000,
+ "name": "メグメグ",
+ "kind": 9
+ },
+ {
+ "id": 53405,
+ "distance": 500000,
+ "name": "Voidoll",
+ "kind": 9
+ },
+ {
+ "id": 53406,
+ "distance": 1200000,
+ "name": "リリカ",
+ "kind": 9
+ },
+ {
+ "id": 53407,
+ "distance": 2600000,
+ "name": "ルチアーノ",
+ "kind": 9
+ },
+ {
+ "id": 53408,
+ "distance": 5500000,
+ "name": "双挽 乃保",
+ "kind": 9
+ },
+ {
+ "id": 53409,
+ "distance": 8500000,
+ "name": "桜華 忠臣",
+ "kind": 9
+ },
+ {
+ "id": 53401,
+ "distance": 16000000,
+ "name": "#コンパスちほー",
+ "kind": 1
+ }
+ ]
+ },
+ {
+ "mapId": 50036,
+ "name": "ポンコツクエストちほー",
+ "treasure": [
+ {
+ "id": 53601,
+ "distance": 0,
+ "name": "カク",
+ "kind": 9
+ },
+ {
+ "id": 11118,
+ "distance": 10000,
+ "name": "いつかいい感じにアレしよう",
+ "kind": 5
+ },
+ {
+ "id": 53602,
+ "distance": 40000,
+ "name": "イムラ",
+ "kind": 9
+ },
+ {
+ "id": 53603,
+ "distance": 150000,
+ "name": "ミツイ",
+ "kind": 9
+ },
+ {
+ "id": 53604,
+ "distance": 550000,
+ "name": "クロヌマ",
+ "kind": 9
+ },
+ {
+ "id": 53605,
+ "distance": 1700000,
+ "name": "ツチダ",
+ "kind": 9
+ },
+ {
+ "id": 53601,
+ "distance": 9000000,
+ "name": "ポンコツクエストちほー",
+ "kind": 1
+ }
+ ]
+ },
+ {
+ "mapId": 50037,
+ "name": "Project DIVAちほー2",
+ "treasure": [
+ {
+ "id": 53701,
+ "distance": 0,
+ "name": "DIVA 初音ミク/スクール",
+ "kind": 9
+ },
+ {
+ "id": 11133,
+ "distance": 10000,
+ "name": "Catch the Wave",
+ "kind": 5
+ },
+ {
+ "id": 53702,
+ "distance": 45000,
+ "name": "DIVA 初音ミク/マジシャン",
+ "kind": 9
+ },
+ {
+ "id": 53703,
+ "distance": 180000,
+ "name": "DIVA 初音ミク/リボンガール",
+ "kind": 9
+ },
+ {
+ "id": 53704,
+ "distance": 600000,
+ "name": "DIVA 初音ミク/クリスマス",
+ "kind": 9
+ },
+ {
+ "id": 53705,
+ "distance": 2000000,
+ "name": "DIVA 初音ミク/∞",
+ "kind": 9
+ },
+ {
+ "id": 53701,
+ "distance": 11000000,
+ "name": "Project DIVAちほー2",
+ "kind": 1
+ }
+ ]
+ },
+ {
+ "mapId": 50039,
+ "name": "東方Project×アトレ秋葉原ちほー",
+ "treasure": [
+ {
+ "id": 53901,
+ "distance": 0,
+ "name": "霧雨魔理沙",
+ "kind": 9
+ },
+ {
+ "id": 11135,
+ "distance": 10000,
+ "name": "全力ハッピーライフ",
+ "kind": 5
+ },
+ {
+ "id": 53902,
+ "distance": 25000,
+ "name": "鈴仙優曇華院イナバ",
+ "kind": 9
+ },
+ {
+ "id": 53903,
+ "distance": 140000,
+ "name": "洩矢諏訪子",
+ "kind": 9
+ },
+ {
+ "id": 53904,
+ "distance": 650000,
+ "name": "藤原妹紅",
+ "kind": 9
+ },
+ {
+ "id": 53905,
+ "distance": 3000000,
+ "name": "火焔猫燐",
+ "kind": 9
+ },
+ {
+ "id": 53901,
+ "distance": 16500000,
+ "name": "東方Project×アトレ秋葉原ちほー",
+ "kind": 1
+ }
+ ]
+ },
+ {
+ "mapId": 100001,
+ "name": "しゅわしゅわちほー",
+ "treasure": [
+ {
+ "id": 100101,
+ "distance": 0,
+ "name": "らいむっくま",
+ "kind": 9
+ },
+ {
+ "id": 11152,
+ "distance": 42000,
+ "name": "ぼくたちいつでも しゅわっしゅわ!",
+ "kind": 5
+ },
+ {
+ "id": 100102,
+ "distance": 70000,
+ "name": "れもんっくま",
+ "kind": 9
+ },
+ {
+ "id": 11153,
+ "distance": 126000,
+ "name": "Boys O’Clock",
+ "kind": 5
+ },
+ {
+ "id": 100103,
+ "distance": 154000,
+ "name": "でらっくま",
+ "kind": 9
+ },
+ {
+ "id": 100101,
+ "distance": 210000,
+ "name": "しゅわしゅわちほー",
+ "kind": 1
+ },
+ {
+ "id": 100104,
+ "distance": 238000,
+ "name": "らん",
+ "kind": 9
+ },
+ {
+ "id": 11154,
+ "distance": 294000,
+ "name": "居並ぶ穀物と溜息まじりの運送屋",
+ "kind": 5
+ },
+ {
+ "id": 100105,
+ "distance": 322000,
+ "name": "どりー",
+ "kind": 9
+ },
+ {
+ "id": 11155,
+ "distance": 504000,
+ "name": "ARAIS はじまりのちほー3 チャレンジ1",
+ "kind": 5
+ },
+ {
+ "id": 100101,
+ "distance": 630000,
+ "name": "しゅわしゅわちほー",
+ "kind": 11
+ }
+ ]
+ },
+ {
+ "mapId": 100003,
+ "name": "メトロポリスちほー3",
+ "treasure": [
+ {
+ "id": 100301,
+ "distance": 0,
+ "name": "壱王",
+ "kind": 9
+ },
+ {
+ "id": 11157,
+ "distance": 84000,
+ "name": "Aetheric Energy",
+ "kind": 5
+ },
+ {
+ "id": 100302,
+ "distance": 98000,
+ "name": "仁王",
+ "kind": 9
+ },
+ {
+ "id": 11158,
+ "distance": 210000,
+ "name": "Komplexe",
+ "kind": 5
+ },
+ {
+ "id": 100303,
+ "distance": 224000,
+ "name": "雷天",
+ "kind": 9
+ },
+ {
+ "id": 100301,
+ "distance": 294000,
+ "name": "メトロポリスちほー3",
+ "kind": 1
+ },
+ {
+ "id": 100304,
+ "distance": 308000,
+ "name": "焔天",
+ "kind": 9
+ },
+ {
+ "id": 11159,
+ "distance": 420000,
+ "name": "Beautiful Future",
+ "kind": 5
+ },
+ {
+ "id": 100305,
+ "distance": 546000,
+ "name": "黒姫",
+ "kind": 9
+ },
+ {
+ "id": 11160,
+ "distance": 756000,
+ "name": "Mutation メトロポリスちほー3 チャレンジ1",
+ "kind": 5
+ },
+ {
+ "id": 100301,
+ "distance": 882000,
+ "name": "メトロポリスちほー3",
+ "kind": 11
+ }
+ ]
+ },
+ {
+ "mapId": 100004,
+ "name": "スカイストリートちほー",
+ "treasure": [
+ {
+ "id": 100401,
+ "distance": 0,
+ "name": "モモ",
+ "kind": 9
+ },
+ {
+ "id": 11163,
+ "distance": 28000,
+ "name": "REAL VOICE",
+ "kind": 5
+ },
+ {
+ "id": 100402,
+ "distance": 42000,
+ "name": "アカツキ",
+ "kind": 9
+ },
+ {
+ "id": 11162,
+ "distance": 70000,
+ "name": "ユメヒバナ",
+ "kind": 5
+ },
+ {
+ "id": 100403,
+ "distance": 84000,
+ "name": "ナノハ",
+ "kind": 9
+ },
+ {
+ "id": 100401,
+ "distance": 112000,
+ "name": "スカイストリートちほー",
+ "kind": 1
+ },
+ {
+ "id": 100404,
+ "distance": 126000,
+ "name": "ソウ",
+ "kind": 9
+ },
+ {
+ "id": 11161,
+ "distance": 154000,
+ "name": "オリフィス",
+ "kind": 5
+ },
+ {
+ "id": 100405,
+ "distance": 168000,
+ "name": "ノア",
+ "kind": 9
+ },
+ {
+ "id": 11164,
+ "distance": 280000,
+ "name": "パラボラ スカイストリートちほー チャレンジ1",
+ "kind": 5
+ },
+ {
+ "id": 100401,
+ "distance": 336000,
+ "name": "スカイストリートちほー",
+ "kind": 11
+ }
+ ]
+ },
+ {
+ "mapId": 100005,
+ "name": "天界ちほー3",
+ "treasure": [
+ {
+ "id": 100501,
+ "distance": 0,
+ "name": "百合咲ミカ",
+ "kind": 9
+ },
+ {
+ "id": 11166,
+ "distance": 84000,
+ "name": "ワンダーシャッフェンの法則",
+ "kind": 5
+ },
+ {
+ "id": 100502,
+ "distance": 168000,
+ "name": "八剱月アルマ",
+ "kind": 9
+ },
+ {
+ "id": 100503,
+ "distance": 252000,
+ "name": "白銅寺アズリ",
+ "kind": 9
+ },
+ {
+ "id": 11167,
+ "distance": 420000,
+ "name": "BIRTH",
+ "kind": 5
+ },
+ {
+ "id": 100504,
+ "distance": 504000,
+ "name": "白法院ラグ",
+ "kind": 9
+ },
+ {
+ "id": 100501,
+ "distance": 672000,
+ "name": "天界ちほー3",
+ "kind": 1
+ },
+ {
+ "id": 100505,
+ "distance": 840000,
+ "name": "八剱月アルマ(堕天)",
+ "kind": 9
+ },
+ {
+ "id": 11165,
+ "distance": 1260000,
+ "name": "Regulus 天界ちほー3 チャレンジ1",
+ "kind": 5
+ },
+ {
+ "id": 100501,
+ "distance": 1386000,
+ "name": "天界ちほー3",
+ "kind": 11
+ }
+ ]
+ },
+ {
+ "mapId": 100006,
+ "name": "BLACK ROSEちほー3",
+ "treasure": [
+ {
+ "id": 100601,
+ "distance": 0,
+ "name": "ロー",
+ "kind": 9
+ },
+ {
+ "id": 11168,
+ "distance": 42000,
+ "name": "シアトリカル・ケース",
+ "kind": 5
+ },
+ {
+ "id": 100602,
+ "distance": 84000,
+ "name": "マリー",
+ "kind": 9
+ },
+ {
+ "id": 100603,
+ "distance": 126000,
+ "name": "ハンナ",
+ "kind": 9
+ },
+ {
+ "id": 100601,
+ "distance": 252000,
+ "name": "BLACK ROSEちほー3",
+ "kind": 1
+ },
+ {
+ "id": 100604,
+ "distance": 294000,
+ "name": "トリスタン",
+ "kind": 9
+ },
+ {
+ "id": 100605,
+ "distance": 336000,
+ "name": "クレメンス(悪魔)",
+ "kind": 9
+ },
+ {
+ "id": 100601,
+ "distance": 504000,
+ "name": "BLACK ROSEちほー3",
+ "kind": 11
+ }
+ ]
+ },
+ {
+ "mapId": 100007,
+ "name": "しゅわーランドちほー",
+ "treasure": [
+ {
+ "id": 100701,
+ "distance": 3000000,
+ "name": "しゅわっしゅわ! ~りゅうぐう~",
+ "kind": 1
+ },
+ {
+ "id": 100701,
+ "distance": 20000000,
+ "name": "竜宮城のなつやすみ",
+ "kind": 11
+ },
+ {
+ "id": 100702,
+ "distance": 40000000,
+ "name": "しゅわっしゅわ! ~かふぇみるく~",
+ "kind": 1
+ },
+ {
+ "id": 100702,
+ "distance": 60000000,
+ "name": "本日のCAFE MiLKはおやすみです。",
+ "kind": 11
+ },
+ {
+ "id": 100703,
+ "distance": 80000000,
+ "name": "しゅわっしゅわ! ~しゃまみるく~",
+ "kind": 1
+ },
+ {
+ "id": 100703,
+ "distance": 100000000,
+ "name": "クリームソーダ、ひとくちほしいにゃ~!",
+ "kind": 11
+ }
+ ]
+ },
+ {
+ "mapId": 100053,
+ "name": "ナユタン星人ちほー",
+ "treasure": [
+ {
+ "id": 105301,
+ "distance": 0,
+ "name": "アンドロメダ子",
+ "kind": 9
+ },
+ {
+ "id": 105302,
+ "distance": 18000,
+ "name": "アンドロメダ男",
+ "kind": 9
+ },
+ {
+ "id": 105303,
+ "distance": 58000,
+ "name": "チビキャラA",
+ "kind": 9
+ },
+ {
+ "id": 105301,
+ "distance": 124000,
+ "name": "ナユタン星人ちほー",
+ "kind": 1
+ },
+ {
+ "id": 105304,
+ "distance": 157000,
+ "name": "チビキャラB",
+ "kind": 9
+ },
+ {
+ "id": 105305,
+ "distance": 196000,
+ "name": "チビキャラC",
+ "kind": 9
+ },
+ {
+ "id": 105306,
+ "distance": 238000,
+ "name": "チビキャラD",
+ "kind": 9
+ },
+ {
+ "id": 105301,
+ "distance": 364000,
+ "name": "ナユタン星人ちほー",
+ "kind": 11
+ }
+ ]
+ },
+ {
+ "mapId": 100054,
+ "name": "GYARIちほー2",
+ "treasure": [
+ {
+ "id": 105401,
+ "distance": 0,
+ "name": "琴葉 葵 チョコミント(Ice!)",
+ "kind": 9
+ },
+ {
+ "id": 105402,
+ "distance": 28000,
+ "name": "琴葉 葵 チョコミント(慈悲)",
+ "kind": 9
+ },
+ {
+ "id": 105403,
+ "distance": 84000,
+ "name": "琴葉 茜 チョコミント(?)",
+ "kind": 9
+ },
+ {
+ "id": 105401,
+ "distance": 168000,
+ "name": "GYARIちほー2",
+ "kind": 1
+ },
+ {
+ "id": 105404,
+ "distance": 210000,
+ "name": "琴葉 茜 チョコミント(おかわりや)",
+ "kind": 9
+ },
+ {
+ "id": 105405,
+ "distance": 252000,
+ "name": "チョコミン党",
+ "kind": 9
+ },
+ {
+ "id": 105401,
+ "distance": 420000,
+ "name": "GYARIちほー2",
+ "kind": 11
+ }
+ ]
+ },
+ {
+ "mapId": 100055,
+ "name": "東方Projectリバイバルちほー",
+ "treasure": [
+ {
+ "id": 105501,
+ "distance": 0,
+ "name": "アリス・マーガトロイド",
+ "kind": 9
+ },
+ {
+ "id": 105502,
+ "distance": 70000,
+ "name": "霧雨魔理沙",
+ "kind": 9
+ },
+ {
+ "id": 105503,
+ "distance": 154000,
+ "name": "チルノ",
+ "kind": 9
+ },
+ {
+ "id": 105501,
+ "distance": 252000,
+ "name": "東方Projectリバイバルちほー",
+ "kind": 1
+ },
+ {
+ "id": 105504,
+ "distance": 322000,
+ "name": "博麗霊夢",
+ "kind": 9
+ },
+ {
+ "id": 105505,
+ "distance": 420000,
+ "name": "射命丸文",
+ "kind": 9
+ },
+ {
+ "id": 105501,
+ "distance": 588000,
+ "name": "東方Projectリバイバルちほー",
+ "kind": 11
+ }
+ ]
+ },
+ {
+ "mapId": 100056,
+ "name": "Arcaeaちほー",
+ "treasure": [
+ {
+ "id": 105601,
+ "distance": 0,
+ "name": "光/サマー",
+ "kind": 9
+ },
+ {
+ "id": 105602,
+ "distance": 18000,
+ "name": "対立/サマー",
+ "kind": 9
+ },
+ {
+ "id": 11208,
+ "distance": 58000,
+ "name": "Cyaegha",
+ "kind": 5
+ },
+ {
+ "id": 105603,
+ "distance": 88000,
+ "name": "サヤ",
+ "kind": 9
+ },
+ {
+ "id": 105604,
+ "distance": 143000,
+ "name": "叶永",
+ "kind": 9
+ },
+ {
+ "id": 11209,
+ "distance": 273000,
+ "name": "Grievous Lady",
+ "kind": 5
+ },
+ {
+ "id": 105605,
+ "distance": 312000,
+ "name": "エト",
+ "kind": 9
+ },
+ {
+ "id": 105606,
+ "distance": 382000,
+ "name": "ルナ",
+ "kind": 9
+ },
+ {
+ "id": 105601,
+ "distance": 522000,
+ "name": "Arcaeaちほー",
+ "kind": 1
+ },
+ {
+ "id": 105607,
+ "distance": 564000,
+ "name": "紅",
+ "kind": 9
+ },
+ {
+ "id": 105608,
+ "distance": 634000,
+ "name": "レーテー",
+ "kind": 9
+ },
+ {
+ "id": 105601,
+ "distance": 774000,
+ "name": "Arcaeaちほー",
+ "kind": 11
+ }
+ ]
+ },
+ {
+ "mapId": 100057,
+ "name": "かいりきベアちほー",
+ "treasure": [
+ {
+ "id": 105701,
+ "distance": 0,
+ "name": "v flower/ベノム",
+ "kind": 9
+ },
+ {
+ "id": 105702,
+ "distance": 18000,
+ "name": "GUMI/マネマネサイコトロピック",
+ "kind": 9
+ },
+ {
+ "id": 105703,
+ "distance": 58000,
+ "name": "魔法少女リリカ/アルカリレットウセイ",
+ "kind": 9
+ },
+ {
+ "id": 105701,
+ "distance": 124000,
+ "name": "かいりきベアちほー",
+ "kind": 1
+ },
+ {
+ "id": 105704,
+ "distance": 157000,
+ "name": "かいりきベア",
+ "kind": 9
+ },
+ {
+ "id": 105705,
+ "distance": 196000,
+ "name": "宍戸 美鈴",
+ "kind": 9
+ },
+ {
+ "id": 105701,
+ "distance": 364000,
+ "name": "かいりきベアちほー",
+ "kind": 11
+ }
+ ]
+ },
+ {
+ "mapId": 100058,
+ "name": "プロジェクトセカイちほー",
+ "treasure": [
+ {
+ "id": 105801,
+ "distance": 0,
+ "name": "東雲 彰人",
+ "kind": 9
+ },
+ {
+ "id": 105802,
+ "distance": 28000,
+ "name": "白石 杏",
+ "kind": 9
+ },
+ {
+ "id": 105803,
+ "distance": 70000,
+ "name": "小豆沢 こはね",
+ "kind": 9
+ },
+ {
+ "id": 105804,
+ "distance": 112000,
+ "name": "青柳 冬弥",
+ "kind": 9
+ },
+ {
+ "id": 105805,
+ "distance": 168000,
+ "name": "初音ミク(Vivid BAD SQUAD)",
+ "kind": 9
+ },
+ {
+ "id": 105801,
+ "distance": 294000,
+ "name": "プロジェクトセカイちほー",
+ "kind": 1
+ },
+ {
+ "id": 105806,
+ "distance": 336000,
+ "name": "宵崎 奏",
+ "kind": 9
+ },
+ {
+ "id": 105807,
+ "distance": 406000,
+ "name": "朝比奈 まふゆ",
+ "kind": 9
+ },
+ {
+ "id": 105808,
+ "distance": 476000,
+ "name": "東雲 絵名",
+ "kind": 9
+ },
+ {
+ "id": 105809,
+ "distance": 546000,
+ "name": "暁山 瑞希",
+ "kind": 9
+ },
+ {
+ "id": 105810,
+ "distance": 616000,
+ "name": "初音ミク(25時、ナイトコードで。)",
+ "kind": 9
+ },
+ {
+ "id": 105801,
+ "distance": 840000,
+ "name": "プロジェクトセカイちほー",
+ "kind": 11
+ }
+ ]
+ },
+ {
+ "mapId": 100059,
+ "name": "にじさんじちほー",
+ "treasure": [
+ {
+ "id": 105901,
+ "distance": 0,
+ "name": "える",
+ "kind": 9
+ },
+ {
+ "id": 105902,
+ "distance": 18000,
+ "name": "シスター・クレア",
+ "kind": 9
+ },
+ {
+ "id": 105903,
+ "distance": 48000,
+ "name": "ジョー・力一",
+ "kind": 9
+ },
+ {
+ "id": 105904,
+ "distance": 81000,
+ "name": "ドーラ",
+ "kind": 9
+ },
+ {
+ "id": 105905,
+ "distance": 133000,
+ "name": "月ノ美兎",
+ "kind": 9
+ },
+ {
+ "id": 105906,
+ "distance": 175000,
+ "name": "剣持刀也",
+ "kind": 9
+ },
+ {
+ "id": 105901,
+ "distance": 259000,
+ "name": "にじさんじちほー",
+ "kind": 1
+ },
+ {
+ "id": 105907,
+ "distance": 301000,
+ "name": "森中花咲",
+ "kind": 9
+ },
+ {
+ "id": 105908,
+ "distance": 371000,
+ "name": "静凛",
+ "kind": 9
+ },
+ {
+ "id": 105909,
+ "distance": 441000,
+ "name": "鷹宮リオン",
+ "kind": 9
+ },
+ {
+ "id": 105910,
+ "distance": 511000,
+ "name": "樋口楓",
+ "kind": 9
+ },
+ {
+ "id": 105911,
+ "distance": 581000,
+ "name": "本間ひまわり",
+ "kind": 9
+ },
+ {
+ "id": 105912,
+ "distance": 637000,
+ "name": "緑仙",
+ "kind": 9
+ },
+ {
+ "id": 105901,
+ "distance": 805000,
+ "name": "にじさんじちほー",
+ "kind": 11
+ }
+ ]
+ },
+ {
+ "mapId": 100060,
+ "name": "いらすとやちほー",
+ "treasure": [
+ {
+ "id": 106001,
+ "distance": 0,
+ "name": "踊っているくまのイラスト",
+ "kind": 9
+ },
+ {
+ "id": 106002,
+ "distance": 18000,
+ "name": "踊っているいぬのイラスト",
+ "kind": 9
+ },
+ {
+ "id": 106003,
+ "distance": 48000,
+ "name": "踊っているねこのイラスト",
+ "kind": 9
+ },
+ {
+ "id": 106004,
+ "distance": 92000,
+ "name": "踊っているうさぎのイラスト",
+ "kind": 9
+ },
+ {
+ "id": 11213,
+ "distance": 170000,
+ "name": "Arty Party",
+ "kind": 5
+ },
+ {
+ "id": 106005,
+ "distance": 209000,
+ "name": "元気な男性のイラスト",
+ "kind": 9
+ },
+ {
+ "id": 106006,
+ "distance": 279000,
+ "name": "元気な女性のイラスト",
+ "kind": 9
+ },
+ {
+ "id": 106007,
+ "distance": 349000,
+ "name": "ドラム式洗濯機のイラスト",
+ "kind": 9
+ },
+ {
+ "id": 106001,
+ "distance": 461000,
+ "name": "いらすとやちほー",
+ "kind": 1
+ },
+ {
+ "id": 106008,
+ "distance": 503000,
+ "name": "コウテイペンギンのイラスト",
+ "kind": 9
+ },
+ {
+ "id": 106009,
+ "distance": 545000,
+ "name": "コウテイペンギンのヒナのイラスト",
+ "kind": 9
+ },
+ {
+ "id": 106010,
+ "distance": 671000,
+ "name": "バナナボートに乗る人たちのイラスト",
+ "kind": 9
+ },
+ {
+ "id": 106001,
+ "distance": 797000,
+ "name": "いらすとやちほー",
+ "kind": 11
+ }
+ ]
+ },
+ {
+ "mapId": 100061,
+ "name": "オンゲキちほー2",
+ "treasure": [
+ {
+ "id": 106101,
+ "distance": 0,
+ "name": "柏木 美亜",
+ "kind": 9
+ },
+ {
+ "id": 11173,
+ "distance": 84000,
+ "name": "トリドリ⇒モリモリ!Lovely fruits☆",
+ "kind": 5
+ },
+ {
+ "id": 106103,
+ "distance": 126000,
+ "name": "高瀬 梨緒",
+ "kind": 9
+ },
+ {
+ "id": 106102,
+ "distance": 168000,
+ "name": "東雲 つむぎ",
+ "kind": 9
+ },
+ {
+ "id": 11174,
+ "distance": 336000,
+ "name": "Desperado Waltz",
+ "kind": 5
+ },
+ {
+ "id": 106104,
+ "distance": 420000,
+ "name": "逢坂 茜",
+ "kind": 9
+ },
+ {
+ "id": 106101,
+ "distance": 504000,
+ "name": "オンゲキちほー2",
+ "kind": 1
+ },
+ {
+ "id": 106105,
+ "distance": 630000,
+ "name": "珠洲島 有栖",
+ "kind": 9
+ },
+ {
+ "id": 106101,
+ "distance": 840000,
+ "name": "オンゲキちほー2",
+ "kind": 11
+ }
+ ]
+ },
+ {
+ "mapId": 100062,
+ "name": "そらみこちほー",
+ "treasure": [
+ {
+ "id": 106201,
+ "distance": 0,
+ "name": "ときのそら",
+ "kind": 9
+ },
+ {
+ "id": 106202,
+ "distance": 18000,
+ "name": "さくらみこ",
+ "kind": 9
+ },
+ {
+ "id": 106201,
+ "distance": 58000,
+ "name": "そらみこちほー",
+ "kind": 1
+ },
+ {
+ "id": 106203,
+ "distance": 118000,
+ "name": "ときのそら 舞",
+ "kind": 9
+ },
+ {
+ "id": 106204,
+ "distance": 151000,
+ "name": "さくらみこ 舞",
+ "kind": 9
+ },
+ {
+ "id": 106201,
+ "distance": 307000,
+ "name": "そらみこちほー",
+ "kind": 11
+ }
+ ]
+ },
+ {
+ "mapId": 150001,
+ "name": "しゅわしゅわちほー2",
+ "treasure": [
+ {
+ "id": 150101,
+ "distance": 0,
+ "name": "乙姫",
+ "kind": 9
+ },
+ {
+ "id": 11224,
+ "distance": 30000,
+ "name": "Paradisoda",
+ "kind": 5
+ },
+ {
+ "id": 150102,
+ "distance": 70000,
+ "name": "ラズ",
+ "kind": 9
+ },
+ {
+ "id": 11225,
+ "distance": 120000,
+ "name": "VANTABLACK RAVER",
+ "kind": 5
+ },
+ {
+ "id": 150103,
+ "distance": 170000,
+ "name": "シフォン",
+ "kind": 9
+ },
+ {
+ "id": 150101,
+ "distance": 230000,
+ "name": "しゅわしゅわちほー2",
+ "kind": 1
+ },
+ {
+ "id": 150104,
+ "distance": 290000,
+ "name": "ソルト",
+ "kind": 9
+ },
+ {
+ "id": 11226,
+ "distance": 360000,
+ "name": "時計の国のジェミニ",
+ "kind": 5
+ },
+ {
+ "id": 150105,
+ "distance": 440000,
+ "name": "しゃま",
+ "kind": 9
+ },
+ {
+ "id": 150106,
+ "distance": 530000,
+ "name": "みるく",
+ "kind": 9
+ },
+ {
+ "id": 11227,
+ "distance": 666000,
+ "name": "Xenovcipher しゅわしゅわちほー2 チャレンジ1",
+ "kind": 5
+ },
+ {
+ "id": 150101,
+ "distance": 800000,
+ "name": "しゅわしゅわちほー2",
+ "kind": 11
+ }
+ ]
+ },
+ {
+ "mapId": 150002,
+ "name": "BLACK ROSEちほー4",
+ "treasure": [
+ {
+ "id": 150201,
+ "distance": 0,
+ "name": "アウル(幼少期)",
+ "kind": 9
+ },
+ {
+ "id": 150202,
+ "distance": 70000,
+ "name": "トリスタン",
+ "kind": 9
+ },
+ {
+ "id": 150201,
+ "distance": 200000,
+ "name": "BLACK ROSEちほー4",
+ "kind": 1
+ },
+ {
+ "id": 150203,
+ "distance": 350000,
+ "name": "アウル",
+ "kind": 9
+ },
+ {
+ "id": 150201,
+ "distance": 500000,
+ "name": "BLACK ROSEちほー4",
+ "kind": 11
+ }
+ ]
+ },
+ {
+ "mapId": 150003,
+ "name": "スカイストリートちほー2",
+ "treasure": [
+ {
+ "id": 150301,
+ "distance": 0,
+ "name": "モモ",
+ "kind": 9
+ },
+ {
+ "id": 11228,
+ "distance": 36000,
+ "name": "星めぐり、果ての君へ。",
+ "kind": 5
+ },
+ {
+ "id": 150302,
+ "distance": 96000,
+ "name": "トキヤ",
+ "kind": 9
+ },
+ {
+ "id": 11229,
+ "distance": 156000,
+ "name": "スローアライズ",
+ "kind": 5
+ },
+ {
+ "id": 150303,
+ "distance": 228000,
+ "name": "コハク",
+ "kind": 9
+ },
+ {
+ "id": 150301,
+ "distance": 312000,
+ "name": "スカイストリートちほー2",
+ "kind": 1
+ },
+ {
+ "id": 150305,
+ "distance": 324000,
+ "name": "アカツキ",
+ "kind": 9
+ },
+ {
+ "id": 11231,
+ "distance": 408000,
+ "name": "生命不詳",
+ "kind": 5
+ },
+ {
+ "id": 150304,
+ "distance": 432000,
+ "name": "ノア",
+ "kind": 9
+ },
+ {
+ "id": 11230,
+ "distance": 540000,
+ "name": "チエルカ/エソテリカ スカイストリートちほー2 チャレンジ1",
+ "kind": 5
+ },
+ {
+ "id": 150301,
+ "distance": 612000,
+ "name": "スカイストリートちほー2",
+ "kind": 11
+ }
+ ]
+ },
+ {
+ "mapId": 150004,
+ "name": "kawaiiちほー",
+ "treasure": [
+ {
+ "id": 150401,
+ "distance": 0,
+ "name": "ナノ",
+ "kind": 9
+ },
+ {
+ "id": 11232,
+ "distance": 111000,
+ "name": "Never Give Up!",
+ "kind": 5
+ },
+ {
+ "id": 150403,
+ "distance": 222000,
+ "name": "ローヴェ",
+ "kind": 9
+ },
+ {
+ "id": 11233,
+ "distance": 333000,
+ "name": "Starry Colors",
+ "kind": 5
+ },
+ {
+ "id": 150402,
+ "distance": 444000,
+ "name": "アサド",
+ "kind": 9
+ },
+ {
+ "id": 150401,
+ "distance": 555000,
+ "name": "kawaiiちほー",
+ "kind": 1
+ },
+ {
+ "id": 150405,
+ "distance": 666000,
+ "name": "テルス",
+ "kind": 9
+ },
+ {
+ "id": 11234,
+ "distance": 777000,
+ "name": "ほしぞらスペクタクル",
+ "kind": 5
+ },
+ {
+ "id": 150404,
+ "distance": 900000,
+ "name": "ドメニカ",
+ "kind": 9
+ },
+ {
+ "id": 11235,
+ "distance": 1111000,
+ "name": "VIIIbit Explorer kawaiiちほー チャレンジ1",
+ "kind": 5
+ },
+ {
+ "id": 150401,
+ "distance": 1300000,
+ "name": "kawaiiちほー",
+ "kind": 11
+ }
+ ]
+ },
+ {
+ "mapId": 150005,
+ "name": "高天原ちほー",
+ "treasure": [
+ {
+ "id": 150501,
+ "distance": 0,
+ "name": "ニギ",
+ "kind": 9
+ },
+ {
+ "id": 150505,
+ "distance": 70000,
+ "name": "オオヒメ",
+ "kind": 9
+ },
+ {
+ "id": 11236,
+ "distance": 170000,
+ "name": "Last Samurai",
+ "kind": 5
+ },
+ {
+ "id": 150504,
+ "distance": 270000,
+ "name": "アマヒコ",
+ "kind": 9
+ },
+ {
+ "id": 11237,
+ "distance": 400000,
+ "name": "蒼穹舞楽",
+ "kind": 5
+ },
+ {
+ "id": 150502,
+ "distance": 530000,
+ "name": "シンキョウ",
+ "kind": 9
+ },
+ {
+ "id": 150501,
+ "distance": 670000,
+ "name": "高天原ちほー",
+ "kind": 1
+ },
+ {
+ "id": 150503,
+ "distance": 800000,
+ "name": "メノウ",
+ "kind": 9
+ },
+ {
+ "id": 11238,
+ "distance": 999000,
+ "name": "AMABIE 高天原ちほー チャレンジ1",
+ "kind": 5
+ },
+ {
+ "id": 150501,
+ "distance": 1111000,
+ "name": "高天原ちほー",
+ "kind": 11
+ }
+ ]
+ },
+ {
+ "mapId": 150006,
+ "name": "しゅわーランドちほー2",
+ "treasure": [
+ {
+ "id": 150601,
+ "distance": 3000000,
+ "name": "約束のしゅわーランド",
+ "kind": 1
+ },
+ {
+ "id": 150601,
+ "distance": 20000000,
+ "name": "らいむっくま&れもんっくま",
+ "kind": 11
+ },
+ {
+ "id": 150602,
+ "distance": 40000000,
+ "name": "ぱりぴっくま",
+ "kind": 1
+ },
+ {
+ "id": 150602,
+ "distance": 60000000,
+ "name": "すりりんぐでしゅわりんぐ、じゃ!",
+ "kind": 11
+ },
+ {
+ "id": 150603,
+ "distance": 80000000,
+ "name": "はっぴーばかんす",
+ "kind": 1
+ },
+ {
+ "id": 150603,
+ "distance": 100000000,
+ "name": "光吉カーニバル",
+ "kind": 11
+ }
+ ]
+ },
+ {
+ "mapId": 150052,
+ "name": "すみっコぐらしちほー",
+ "treasure": [
+ {
+ "id": 155201,
+ "distance": 0,
+ "name": "ひよこ?",
+ "kind": 9
+ },
+ {
+ "id": 155202,
+ "distance": 9000,
+ "name": "しろくま",
+ "kind": 9
+ },
+ {
+ "id": 155203,
+ "distance": 29000,
+ "name": "ぺんぎん?",
+ "kind": 9
+ },
+ {
+ "id": 155204,
+ "distance": 62000,
+ "name": "とんかつ",
+ "kind": 9
+ },
+ {
+ "id": 155201,
+ "distance": 98000,
+ "name": "すみっコぐらしちほー",
+ "kind": 1
+ },
+ {
+ "id": 155205,
+ "distance": 140000,
+ "name": "ねこ",
+ "kind": 9
+ },
+ {
+ "id": 155206,
+ "distance": 180000,
+ "name": "とかげ",
+ "kind": 9
+ },
+ {
+ "id": 155207,
+ "distance": 220000,
+ "name": "ざっそう",
+ "kind": 9
+ },
+ {
+ "id": 155208,
+ "distance": 260000,
+ "name": "えびふらいのしっぽ",
+ "kind": 9
+ },
+ {
+ "id": 155201,
+ "distance": 300000,
+ "name": "すみっコぐらしちほー",
+ "kind": 11
+ }
+ ]
+ },
+ {
+ "mapId": 150053,
+ "name": "HaNaMiNaちほー",
+ "treasure": [
+ {
+ "id": 155301,
+ "distance": 0,
+ "name": "五十嵐 撫子(決意の夏合宿編)",
+ "kind": 9
+ },
+ {
+ "id": 155302,
+ "distance": 70000,
+ "name": "萩原 七々瀬(決意の夏合宿編)",
+ "kind": 9
+ },
+ {
+ "id": 155301,
+ "distance": 150000,
+ "name": "HaNaMiNaちほー",
+ "kind": 1
+ },
+ {
+ "id": 155303,
+ "distance": 230000,
+ "name": "葛城 華",
+ "kind": 9
+ },
+ {
+ "id": 11239,
+ "distance": 350000,
+ "name": "オーケー? オーライ!",
+ "kind": 5
+ },
+ {
+ "id": 155304,
+ "distance": 450000,
+ "name": "小野 美苗",
+ "kind": 9
+ },
+ {
+ "id": 155301,
+ "distance": 600000,
+ "name": "HaNaMiNaちほー",
+ "kind": 11
+ }
+ ]
+ },
+ {
+ "mapId": 150054,
+ "name": "HARDCORE TANO*Cちほー",
+ "treasure": [
+ {
+ "id": 155401,
+ "distance": 0,
+ "name": "t+pazolite",
+ "kind": 9
+ },
+ {
+ "id": 11291,
+ "distance": 60000,
+ "name": "ヒミツCULT",
+ "kind": 5
+ },
+ {
+ "id": 155402,
+ "distance": 100000,
+ "name": "REDALiCE",
+ "kind": 9
+ },
+ {
+ "id": 11290,
+ "distance": 160000,
+ "name": "ALiVE",
+ "kind": 5
+ },
+ {
+ "id": 155403,
+ "distance": 200000,
+ "name": "DJ Myosuke",
+ "kind": 9
+ },
+ {
+ "id": 11292,
+ "distance": 260000,
+ "name": "MEGATON KICK",
+ "kind": 5
+ },
+ {
+ "id": 155401,
+ "distance": 330000,
+ "name": "HARDCORE TANO*Cちほー",
+ "kind": 1
+ },
+ {
+ "id": 155404,
+ "distance": 400000,
+ "name": "USAO",
+ "kind": 9
+ },
+ {
+ "id": 11288,
+ "distance": 500000,
+ "name": "Big Daddy",
+ "kind": 5
+ },
+ {
+ "id": 155405,
+ "distance": 570000,
+ "name": "Massive New Krew",
+ "kind": 9
+ },
+ {
+ "id": 11293,
+ "distance": 670000,
+ "name": "LOSE CONTROL",
+ "kind": 5
+ },
+ {
+ "id": 155406,
+ "distance": 740000,
+ "name": "Laur",
+ "kind": 9
+ },
+ {
+ "id": 11287,
+ "distance": 840000,
+ "name": "Strange Bar",
+ "kind": 5
+ },
+ {
+ "id": 155407,
+ "distance": 900000,
+ "name": "DORO*C",
+ "kind": 9
+ },
+ {
+ "id": 155401,
+ "distance": 999000,
+ "name": "HARDCORE TANO*Cちほー",
+ "kind": 11
+ }
+ ]
+ },
+ {
+ "mapId": 150055,
+ "name": "東方Projectリバイバルちほー2",
+ "treasure": [
+ {
+ "id": 155501,
+ "distance": 0,
+ "name": "メルラン・プリズムリバー",
+ "kind": 9
+ },
+ {
+ "id": 155502,
+ "distance": 36000,
+ "name": "ルナサ・プリズムリバー",
+ "kind": 9
+ },
+ {
+ "id": 155503,
+ "distance": 72000,
+ "name": "リリカ・プリズムリバー",
+ "kind": 9
+ },
+ {
+ "id": 155501,
+ "distance": 140000,
+ "name": "東方Projectリバイバルちほー2",
+ "kind": 1
+ },
+ {
+ "id": 155504,
+ "distance": 200000,
+ "name": "丁礼田舞",
+ "kind": 9
+ },
+ {
+ "id": 155505,
+ "distance": 260000,
+ "name": "爾子田里乃",
+ "kind": 9
+ },
+ {
+ "id": 155506,
+ "distance": 330000,
+ "name": "ミスティア・ローレライ",
+ "kind": 9
+ },
+ {
+ "id": 155507,
+ "distance": 400000,
+ "name": "鬼人正邪",
+ "kind": 9
+ },
+ {
+ "id": 155501,
+ "distance": 500000,
+ "name": "東方Projectリバイバルちほー2",
+ "kind": 11
+ }
+ ]
+ },
+ {
+ "mapId": 150059,
+ "name": "はるまきごはんちほー",
+ "treasure": [
+ {
+ "id": 155901,
+ "distance": 0,
+ "name": "メルティ",
+ "kind": 9
+ },
+ {
+ "id": 155902,
+ "distance": 30000,
+ "name": "青い子",
+ "kind": 9
+ },
+ {
+ "id": 155901,
+ "distance": 70000,
+ "name": "はるまきごはんちほー",
+ "kind": 1
+ },
+ {
+ "id": 155903,
+ "distance": 140000,
+ "name": "ナナ",
+ "kind": 9
+ },
+ {
+ "id": 155904,
+ "distance": 210000,
+ "name": "リリ",
+ "kind": 9
+ },
+ {
+ "id": 155905,
+ "distance": 280000,
+ "name": "マカロン",
+ "kind": 9
+ },
+ {
+ "id": 155901,
+ "distance": 400000,
+ "name": "はるまきごはんちほー",
+ "kind": 11
+ }
+ ]
+ },
+ {
+ "mapId": 150060,
+ "name": "オンゲキちほー3",
+ "treasure": [
+ {
+ "id": 156001,
+ "distance": 0,
+ "name": "桜井 春菜",
+ "kind": 9
+ },
+ {
+ "id": 156002,
+ "distance": 50000,
+ "name": "早乙女 彩華",
+ "kind": 9
+ },
+ {
+ "id": 156005,
+ "distance": 110000,
+ "name": "結城 莉玖",
+ "kind": 9
+ },
+ {
+ "id": 156001,
+ "distance": 200000,
+ "name": "オンゲキちほー3",
+ "kind": 1
+ },
+ {
+ "id": 156004,
+ "distance": 270000,
+ "name": "柏木 咲姫",
+ "kind": 9
+ },
+ {
+ "id": 156003,
+ "distance": 350000,
+ "name": "井之原 小星",
+ "kind": 9
+ },
+ {
+ "id": 11248,
+ "distance": 500000,
+ "name": "MEGATON BLAST",
+ "kind": 5
+ },
+ {
+ "id": 156001,
+ "distance": 600000,
+ "name": "オンゲキちほー3",
+ "kind": 11
+ }
+ ]
+ },
+ {
+ "mapId": 200001,
+ "name": "宇宙すてーしょんちほー",
+ "treasure": [
+ {
+ "id": 200101,
+ "distance": 0,
+ "name": "でらっくま(ゆにばーす)",
+ "kind": 9
+ },
+ {
+ "id": 11296,
+ "distance": 36000,
+ "name": "とびだせ!TO THE COSMIC!!",
+ "kind": 5
+ },
+ {
+ "id": 200102,
+ "distance": 72000,
+ "name": "れもんっくま(ゆにばーす)",
+ "kind": 9
+ },
+ {
+ "id": 11297,
+ "distance": 180000,
+ "name": "噛み係",
+ "kind": 5
+ },
+ {
+ "id": 200103,
+ "distance": 216000,
+ "name": "らいむっくま(ゆにばーす)",
+ "kind": 9
+ },
+ {
+ "id": 200101,
+ "distance": 276000,
+ "name": "宇宙すてーしょんちほー",
+ "kind": 1
+ },
+ {
+ "id": 200104,
+ "distance": 324000,
+ "name": "しゃま(ゆにばーす)",
+ "kind": 9
+ },
+ {
+ "id": 11298,
+ "distance": 468000,
+ "name": "トリアージ",
+ "kind": 5
+ },
+ {
+ "id": 200105,
+ "distance": 504000,
+ "name": "みるく(ゆにばーす)",
+ "kind": 9
+ },
+ {
+ "id": 11299,
+ "distance": 684000,
+ "name": "NAGAREBOSHI☆ROCKET 宇宙すてーしょんちほー チャレンジ1",
+ "kind": 5
+ },
+ {
+ "id": 200101,
+ "distance": 800000,
+ "name": "宇宙すてーしょんちほー",
+ "kind": 11
+ }
+ ]
+ },
+ {
+ "mapId": 200002,
+ "name": "天界ちほー4",
+ "treasure": [
+ {
+ "id": 200201,
+ "distance": 0,
+ "name": "ルキ",
+ "kind": 9
+ },
+ {
+ "id": 11301,
+ "distance": 36000,
+ "name": "華の集落、秋のお届け",
+ "kind": 5
+ },
+ {
+ "id": 200202,
+ "distance": 72000,
+ "name": "ラキ",
+ "kind": 9
+ },
+ {
+ "id": 11303,
+ "distance": 180000,
+ "name": "星詠みとデスペラード",
+ "kind": 5
+ },
+ {
+ "id": 200203,
+ "distance": 252000,
+ "name": "アトロ",
+ "kind": 9
+ },
+ {
+ "id": 200201,
+ "distance": 360000,
+ "name": "天界ちほー4",
+ "kind": 1
+ },
+ {
+ "id": 200204,
+ "distance": 396000,
+ "name": "クロト",
+ "kind": 9
+ },
+ {
+ "id": 200205,
+ "distance": 432000,
+ "name": "ルシファー",
+ "kind": 9
+ },
+ {
+ "id": 11302,
+ "distance": 540000,
+ "name": "BLACK SWAN 天界ちほー4 チャレンジ1",
+ "kind": 5
+ },
+ {
+ "id": 200201,
+ "distance": 800000,
+ "name": "天界ちほー4",
+ "kind": 11
+ }
+ ]
+ },
+ {
+ "mapId": 200003,
+ "name": "メトロポリスちほー4",
+ "treasure": [
+ {
+ "id": 200301,
+ "distance": 0,
+ "name": "濡羽",
+ "kind": 9
+ },
+ {
+ "id": 11304,
+ "distance": 72000,
+ "name": "Round Round Spinning Around",
+ "kind": 5
+ },
+ {
+ "id": 200302,
+ "distance": 108000,
+ "name": "高麗",
+ "kind": 9
+ },
+ {
+ "id": 11305,
+ "distance": 216000,
+ "name": "Alcyone",
+ "kind": 5
+ },
+ {
+ "id": 200303,
+ "distance": 288000,
+ "name": "黒橡",
+ "kind": 9
+ },
+ {
+ "id": 200301,
+ "distance": 396000,
+ "name": "メトロポリスちほー4",
+ "kind": 1
+ },
+ {
+ "id": 200304,
+ "distance": 468000,
+ "name": "赤墨",
+ "kind": 9
+ },
+ {
+ "id": 11306,
+ "distance": 612000,
+ "name": "Raven Emperor",
+ "kind": 5
+ },
+ {
+ "id": 200305,
+ "distance": 720000,
+ "name": "紫黒",
+ "kind": 9
+ },
+ {
+ "id": 11307,
+ "distance": 900000,
+ "name": "Yorugao メトロポリスちほー4 チャレンジ1",
+ "kind": 5
+ },
+ {
+ "id": 200301,
+ "distance": 1000000,
+ "name": "メトロポリスちほー4",
+ "kind": 11
+ }
+ ]
+ },
+ {
+ "mapId": 200004,
+ "name": "7sRefちほー",
+ "treasure": [
+ {
+ "id": 200401,
+ "distance": 0,
+ "name": "リズ",
+ "kind": 9
+ },
+ {
+ "id": 11310,
+ "distance": 180000,
+ "name": "Trick tear",
+ "kind": 5
+ },
+ {
+ "id": 200402,
+ "distance": 240000,
+ "name": "シュトルツ",
+ "kind": 9
+ },
+ {
+ "id": 200403,
+ "distance": 288000,
+ "name": "リヒティカイト",
+ "kind": 9
+ },
+ {
+ "id": 11309,
+ "distance": 468000,
+ "name": "前衛的Landscape",
+ "kind": 5
+ },
+ {
+ "id": 200404,
+ "distance": 576000,
+ "name": "エーペルージュ",
+ "kind": 9
+ },
+ {
+ "id": 200401,
+ "distance": 792000,
+ "name": "7sRefちほー",
+ "kind": 1
+ },
+ {
+ "id": 200405,
+ "distance": 900000,
+ "name": "アシッド",
+ "kind": 9
+ },
+ {
+ "id": 11311,
+ "distance": 1199000,
+ "name": "躯樹の墓守 7sRefちほー チャレンジ1",
+ "kind": 5
+ },
+ {
+ "id": 11308,
+ "distance": 1200000,
+ "name": "ヨミビトシラズ",
+ "kind": 5
+ },
+ {
+ "id": 200401,
+ "distance": 1300000,
+ "name": "7sRefちほー",
+ "kind": 11
+ }
+ ]
+ },
+ {
+ "mapId": 200005,
+ "name": "ユニバースちほー",
+ "treasure": [
+ {
+ "id": 200501,
+ "distance": 3000000,
+ "name": "ユニバースちほー",
+ "kind": 1
+ },
+ {
+ "id": 200501,
+ "distance": 20000000,
+ "name": "ユニバースちほー",
+ "kind": 11
+ },
+ {
+ "id": 200502,
+ "distance": 40000000,
+ "name": "でらっくmaimai♪てんてこまい!",
+ "kind": 1
+ },
+ {
+ "id": 200502,
+ "distance": 60000000,
+ "name": "でらっくmaimai♪てんてこまい!",
+ "kind": 11
+ },
+ {
+ "id": 200503,
+ "distance": 80000000,
+ "name": "絡めトリック利己ライザー",
+ "kind": 1
+ },
+ {
+ "id": 200503,
+ "distance": 100000000,
+ "name": "絡めトリック利己ライザー",
+ "kind": 11
+ }
+ ]
+ },
+ {
+ "mapId": 200006,
+ "name": "BLACK ROSEちほー5",
+ "treasure": [
+ {
+ "id": 200601,
+ "distance": 0,
+ "name": "エリザ",
+ "kind": 9
+ },
+ {
+ "id": 200602,
+ "distance": 72000,
+ "name": "カイン",
+ "kind": 9
+ },
+ {
+ "id": 200603,
+ "distance": 144000,
+ "name": "ジャック",
+ "kind": 9
+ },
+ {
+ "id": 200601,
+ "distance": 252000,
+ "name": "BLACK ROSEちほー5",
+ "kind": 1
+ },
+ {
+ "id": 200604,
+ "distance": 312000,
+ "name": "アナスタシア",
+ "kind": 9
+ },
+ {
+ "id": 200605,
+ "distance": 360000,
+ "name": "ラルフ(悪魔憑き)",
+ "kind": 9
+ },
+ {
+ "id": 200601,
+ "distance": 500000,
+ "name": "BLACK ROSEちほー5",
+ "kind": 11
+ }
+ ]
+ },
+ {
+ "mapId": 200051,
+ "name": "アイドルマスター ミリオンライブ!ちほー",
+ "treasure": [
+ {
+ "id": 205101,
+ "distance": 0,
+ "name": "最上 静香",
+ "kind": 9
+ },
+ {
+ "id": 205105,
+ "distance": 24000,
+ "name": "北上 麗花",
+ "kind": 9
+ },
+ {
+ "id": 205104,
+ "distance": 51000,
+ "name": "北沢 志保",
+ "kind": 9
+ },
+ {
+ "id": 205101,
+ "distance": 111000,
+ "name": "アイドルマスター ミリオンライブ!ちほー",
+ "kind": 1
+ },
+ {
+ "id": 205103,
+ "distance": 141000,
+ "name": "野々原 茜",
+ "kind": 9
+ },
+ {
+ "id": 205102,
+ "distance": 180000,
+ "name": "箱崎 星梨花",
+ "kind": 9
+ },
+ {
+ "id": 205101,
+ "distance": 250000,
+ "name": "アイドルマスター ミリオンライブ!ちほー",
+ "kind": 11
+ }
+ ]
+ },
+ {
+ "mapId": 200052,
+ "name": "アイドルマスター SideMちほー",
+ "treasure": [
+ {
+ "id": 205201,
+ "distance": 0,
+ "name": "天道 輝",
+ "kind": 9
+ },
+ {
+ "id": 205202,
+ "distance": 24000,
+ "name": "桜庭 薫",
+ "kind": 9
+ },
+ {
+ "id": 205201,
+ "distance": 60000,
+ "name": "アイドルマスター SideMちほー",
+ "kind": 1
+ },
+ {
+ "id": 205203,
+ "distance": 90000,
+ "name": "柏木 翼",
+ "kind": 9
+ },
+ {
+ "id": 205201,
+ "distance": 150000,
+ "name": "アイドルマスター SideMちほー",
+ "kind": 11
+ }
+ ]
+ },
+ {
+ "mapId": 200053,
+ "name": "cosMo@暴走Pちほー",
+ "treasure": [
+ {
+ "id": 205302,
+ "distance": 0,
+ "name": "cosMo@暴走P(バ美肉)",
+ "kind": 9
+ },
+ {
+ "id": 205301,
+ "distance": 24000,
+ "name": "cosMo@暴走P",
+ "kind": 9
+ },
+ {
+ "id": 205301,
+ "distance": 78000,
+ "name": "cosMo@暴走Pちほー",
+ "kind": 1
+ },
+ {
+ "id": 205303,
+ "distance": 105000,
+ "name": "空気が嫁ないBoy",
+ "kind": 9
+ },
+ {
+ "id": 205304,
+ "distance": 135000,
+ "name": "空気が嫁ないGirl",
+ "kind": 9
+ },
+ {
+ "id": 11328,
+ "distance": 234000,
+ "name": "デッドマンズバラッド",
+ "kind": 5
+ },
+ {
+ "id": 205305,
+ "distance": 267000,
+ "name": "GOBOU",
+ "kind": 9
+ },
+ {
+ "id": 205306,
+ "distance": 303000,
+ "name": "HACKPSY",
+ "kind": 9
+ },
+ {
+ "id": 205307,
+ "distance": 339000,
+ "name": "うさぎのもちよ",
+ "kind": 9
+ },
+ {
+ "id": 205301,
+ "distance": 411000,
+ "name": "cosMo@暴走Pちほー",
+ "kind": 11
+ }
+ ]
+ },
+ {
+ "mapId": 200054,
+ "name": "オーイシ×加藤のピザラジオちほー",
+ "treasure": [
+ {
+ "id": 205401,
+ "distance": 0,
+ "name": "オーイシマサヨシ",
+ "kind": 9
+ },
+ {
+ "id": 205402,
+ "distance": 24000,
+ "name": "加藤純一",
+ "kind": 9
+ },
+ {
+ "id": 205401,
+ "distance": 51000,
+ "name": "オーイシ×加藤のピザラジオちほー",
+ "kind": 1
+ },
+ {
+ "id": 205401,
+ "distance": 132000,
+ "name": "オーイシ×加藤のピザラジオちほー",
+ "kind": 11
+ }
+ ]
+ },
+ {
+ "mapId": 200055,
+ "name": "東方ダンマクカグラちほー",
+ "treasure": [
+ {
+ "id": 205501,
+ "distance": 0,
+ "name": "博麗 霊夢",
+ "kind": 9
+ },
+ {
+ "id": 205502,
+ "distance": 50000,
+ "name": "霧雨 魔理沙",
+ "kind": 9
+ },
+ {
+ "id": 205503,
+ "distance": 110000,
+ "name": "八雲 紫",
+ "kind": 9
+ },
+ {
+ "id": 205501,
+ "distance": 210000,
+ "name": "東方ダンマクカグラちほー",
+ "kind": 1
+ },
+ {
+ "id": 205504,
+ "distance": 280000,
+ "name": "宇佐見 菫子",
+ "kind": 9
+ },
+ {
+ "id": 205505,
+ "distance": 350000,
+ "name": "魂魄 妖夢",
+ "kind": 9
+ },
+ {
+ "id": 205501,
+ "distance": 450000,
+ "name": "東方ダンマクカグラちほー",
+ "kind": 11
+ }
+ ]
+ },
+ {
+ "mapId": 200056,
+ "name": "キノシタちほー",
+ "treasure": [
+ {
+ "id": 205601,
+ "distance": 0,
+ "name": "キノシタ",
+ "kind": 9
+ },
+ {
+ "id": 205602,
+ "distance": 36000,
+ "name": "鏡音リン(ポッピンキャンディ☆フィーバー!)",
+ "kind": 9
+ },
+ {
+ "id": 205603,
+ "distance": 70000,
+ "name": "音街ウナ(ポッピンキャンディ☆フィーバー!)",
+ "kind": 9
+ },
+ {
+ "id": 205604,
+ "distance": 110000,
+ "name": "音街ウナ(どぅーまいべすと!)",
+ "kind": 9
+ },
+ {
+ "id": 205601,
+ "distance": 180000,
+ "name": "キノシタちほー",
+ "kind": 1
+ },
+ {
+ "id": 205605,
+ "distance": 220000,
+ "name": "鏡音リン(スターリースカイ☆パレード)",
+ "kind": 9
+ },
+ {
+ "id": 205606,
+ "distance": 260000,
+ "name": "音街ウナ(スターリースカイ☆パレード)",
+ "kind": 9
+ },
+ {
+ "id": 205607,
+ "distance": 300000,
+ "name": "音街ウナ(はやくそれになりたい!)",
+ "kind": 9
+ },
+ {
+ "id": 205601,
+ "distance": 400000,
+ "name": "キノシタちほー",
+ "kind": 11
+ }
+ ]
+ },
+ {
+ "mapId": 200059,
+ "name": "Rain Dropsちほー",
+ "treasure": [
+ {
+ "id": 205901,
+ "distance": 0,
+ "name": "緑仙",
+ "kind": 9
+ },
+ {
+ "id": 205902,
+ "distance": 36000,
+ "name": "三枝明那",
+ "kind": 9
+ },
+ {
+ "id": 205901,
+ "distance": 110000,
+ "name": "Rain Dropsちほー",
+ "kind": 1
+ },
+ {
+ "id": 205905,
+ "distance": 170000,
+ "name": "える",
+ "kind": 9
+ },
+ {
+ "id": 205901,
+ "distance": 250000,
+ "name": "Rain Dropsちほー",
+ "kind": 11
+ }
+ ]
+ },
+ {
+ "mapId": 200060,
+ "name": "プロジェクトセカイちほー2",
+ "treasure": [
+ {
+ "id": 206003,
+ "distance": 0,
+ "name": "天馬 司",
+ "kind": 9
+ },
+ {
+ "id": 206002,
+ "distance": 24000,
+ "name": "鳳 えむ",
+ "kind": 9
+ },
+ {
+ "id": 206004,
+ "distance": 48000,
+ "name": "草薙 寧々",
+ "kind": 9
+ },
+ {
+ "id": 206001,
+ "distance": 72000,
+ "name": "神代 類",
+ "kind": 9
+ },
+ {
+ "id": 206005,
+ "distance": 108000,
+ "name": "初音ミク(ワンダーランズ×ショウタイム)",
+ "kind": 9
+ },
+ {
+ "id": 206003,
+ "distance": 144000,
+ "name": "ワンダーランズ×ショウタイム",
+ "kind": 1
+ },
+ {
+ "id": 206006,
+ "distance": 156000,
+ "name": "星乃 一歌",
+ "kind": 9
+ },
+ {
+ "id": 206007,
+ "distance": 180000,
+ "name": "天馬 咲希",
+ "kind": 9
+ },
+ {
+ "id": 206008,
+ "distance": 204000,
+ "name": "望月 穂波",
+ "kind": 9
+ },
+ {
+ "id": 206009,
+ "distance": 228000,
+ "name": "日野森 志歩",
+ "kind": 9
+ },
+ {
+ "id": 206010,
+ "distance": 264000,
+ "name": "初音ミク(Leo/need)",
+ "kind": 9
+ },
+ {
+ "id": 206004,
+ "distance": 288000,
+ "name": "Leo/need",
+ "kind": 1
+ },
+ {
+ "id": 206012,
+ "distance": 300000,
+ "name": "花里 みのり",
+ "kind": 9
+ },
+ {
+ "id": 206011,
+ "distance": 324000,
+ "name": "桐谷 遥",
+ "kind": 9
+ },
+ {
+ "id": 206014,
+ "distance": 348000,
+ "name": "桃井 愛莉",
+ "kind": 9
+ },
+ {
+ "id": 206013,
+ "distance": 372000,
+ "name": "日野森 雫",
+ "kind": 9
+ },
+ {
+ "id": 206015,
+ "distance": 408000,
+ "name": "初音ミク(MORE MORE JUMP!)",
+ "kind": 9
+ },
+ {
+ "id": 206005,
+ "distance": 432000,
+ "name": "MORE MORE JUMP!",
+ "kind": 1
+ },
+ {
+ "id": 206001,
+ "distance": 468000,
+ "name": "Vivid BAD SQUAD",
+ "kind": 1
+ },
+ {
+ "id": 206002,
+ "distance": 504000,
+ "name": "25時、ナイトコードで。",
+ "kind": 1
+ },
+ {
+ "id": 206001,
+ "distance": 576000,
+ "name": "プロジェクトセカイちほー2",
+ "kind": 11
+ }
+ ]
+ },
+ {
+ "mapId": 200061,
+ "name": "Project DIVAちほー3",
+ "treasure": [
+ {
+ "id": 206101,
+ "distance": 0,
+ "name": "DIVA 初音ミク/アバンガード",
+ "kind": 9
+ },
+ {
+ "id": 206102,
+ "distance": 36000,
+ "name": "DIVA 巡音ルカ/サクセサー",
+ "kind": 9
+ },
+ {
+ "id": 206103,
+ "distance": 60000,
+ "name": "DIVA 鏡音リン/トランスミッター",
+ "kind": 9
+ },
+ {
+ "id": 206104,
+ "distance": 108000,
+ "name": "DIVA 鏡音レン/レシーバー",
+ "kind": 9
+ },
+ {
+ "id": 206101,
+ "distance": 144000,
+ "name": "Project DIVAちほー3",
+ "kind": 1
+ },
+ {
+ "id": 206105,
+ "distance": 180000,
+ "name": "DIVA KAITO/オンザロック",
+ "kind": 9
+ },
+ {
+ "id": 206106,
+ "distance": 216000,
+ "name": "DIVA MEIKO/スカーレット",
+ "kind": 9
+ },
+ {
+ "id": 206101,
+ "distance": 288000,
+ "name": "Project DIVAちほー3",
+ "kind": 11
+ }
+ ]
+ },
+ {
+ "mapId": 200062,
+ "name": "オンゲキちほー4",
+ "treasure": [
+ {
+ "id": 206201,
+ "distance": 0,
+ "name": "星咲 あかり(No Limit RED Force)",
+ "kind": 9
+ },
+ {
+ "id": 11314,
+ "distance": 72000,
+ "name": "LiftOff",
+ "kind": 5
+ },
+ {
+ "id": 206202,
+ "distance": 120000,
+ "name": "藤沢 柚子(No Limit RED Force)",
+ "kind": 9
+ },
+ {
+ "id": 206203,
+ "distance": 170000,
+ "name": "三角 葵(No Limit RED Force)",
+ "kind": 9
+ },
+ {
+ "id": 206201,
+ "distance": 250000,
+ "name": "オンゲキちほー4",
+ "kind": 1
+ },
+ {
+ "id": 206204,
+ "distance": 320000,
+ "name": "皇城 セツナ",
+ "kind": 9
+ },
+ {
+ "id": 11315,
+ "distance": 500000,
+ "name": "Falsum Atlantis.",
+ "kind": 5
+ },
+ {
+ "id": 206205,
+ "distance": 550000,
+ "name": "珠洲島 有栖(ぱくぱく☆がーる)",
+ "kind": 9
+ },
+ {
+ "id": 206201,
+ "distance": 600000,
+ "name": "オンゲキちほー4",
+ "kind": 11
+ }
+ ]
+ },
+ {
+ "mapId": 200063,
+ "name": "舞ヶ原シンセ研究会ちほー",
+ "treasure": [
+ {
+ "id": 206301,
+ "distance": 0,
+ "name": "藤堂 陽南袴",
+ "kind": 9
+ },
+ {
+ "id": 206301,
+ "distance": 108000,
+ "name": "舞ヶ原シンセ研究会ちほー",
+ "kind": 1
+ },
+ {
+ "id": 206302,
+ "distance": 144000,
+ "name": "桔梗 小夜曲",
+ "kind": 9
+ },
+ {
+ "id": 11317,
+ "distance": 324000,
+ "name": "Limits",
+ "kind": 5
+ },
+ {
+ "id": 206303,
+ "distance": 360000,
+ "name": "芒崎 奏",
+ "kind": 9
+ },
+ {
+ "id": 206301,
+ "distance": 432000,
+ "name": "舞ヶ原シンセ研究会ちほー",
+ "kind": 11
+ }
+ ]
+ },
+ {
+ "mapId": 250001,
+ "name": "宇宙すてーしょんちほー2",
+ "treasure": [
+ {
+ "id": 250101,
+ "distance": 0,
+ "name": "ちびみるく",
+ "kind": 9
+ },
+ {
+ "id": 11375,
+ "distance": 35000,
+ "name": "ミルキースター・シューティングスター",
+ "kind": 5
+ },
+ {
+ "id": 250102,
+ "distance": 70000,
+ "name": "SDしゃま",
+ "kind": 9
+ },
+ {
+ "id": 11376,
+ "distance": 120000,
+ "name": "isophote",
+ "kind": 5
+ },
+ {
+ "id": 250103,
+ "distance": 180000,
+ "name": "SDみるく",
+ "kind": 9
+ },
+ {
+ "id": 250101,
+ "distance": 240000,
+ "name": "宇宙すてーしょんちほー2",
+ "kind": 1
+ },
+ {
+ "id": 250104,
+ "distance": 300000,
+ "name": "金の牛乳瓶",
+ "kind": 9
+ },
+ {
+ "id": 11377,
+ "distance": 450000,
+ "name": "パラマウント☆ショータイム!!",
+ "kind": 5
+ },
+ {
+ "id": 250105,
+ "distance": 550000,
+ "name": "Joker",
+ "kind": 9
+ },
+ {
+ "id": 11378,
+ "distance": 700000,
+ "name": "Strive against fate 宇宙すてーしょんちほー2 チャレンジ1",
+ "kind": 5
+ },
+ {
+ "id": 250101,
+ "distance": 800000,
+ "name": "宇宙すてーしょんちほー2",
+ "kind": 11
+ }
+ ]
+ },
+ {
+ "mapId": 250002,
+ "name": "メトロポリスちほー5",
+ "treasure": [
+ {
+ "id": 250201,
+ "distance": 0,
+ "name": "家菊",
+ "kind": 9
+ },
+ {
+ "id": 11383,
+ "distance": 35000,
+ "name": "Irresistible",
+ "kind": 5
+ },
+ {
+ "id": 250202,
+ "distance": 80000,
+ "name": "橘花",
+ "kind": 9
+ },
+ {
+ "id": 11384,
+ "distance": 150000,
+ "name": "HAGAKIRI",
+ "kind": 5
+ },
+ {
+ "id": 250203,
+ "distance": 210000,
+ "name": "黒桜",
+ "kind": 9
+ },
+ {
+ "id": 250201,
+ "distance": 270000,
+ "name": "メトロポリスちほー5",
+ "kind": 1
+ },
+ {
+ "id": 250204,
+ "distance": 330000,
+ "name": "紫藤",
+ "kind": 9
+ },
+ {
+ "id": 11382,
+ "distance": 500000,
+ "name": "HECATONCHEIR",
+ "kind": 5
+ },
+ {
+ "id": 250205,
+ "distance": 600000,
+ "name": "藪椿",
+ "kind": 9
+ },
+ {
+ "id": 11385,
+ "distance": 800000,
+ "name": "N3V3R G3T OV3R メトロポリスちほー5 チャレンジ1",
+ "kind": 5
+ },
+ {
+ "id": 250201,
+ "distance": 900000,
+ "name": "メトロポリスちほー5",
+ "kind": 11
+ }
+ ]
+ },
+ {
+ "mapId": 250003,
+ "name": "天界ちほー5",
+ "treasure": [
+ {
+ "id": 250301,
+ "distance": 0,
+ "name": "百合咲ミカ",
+ "kind": 9
+ },
+ {
+ "id": 11387,
+ "distance": 70000,
+ "name": "星空パーティーチューン",
+ "kind": 5
+ },
+ {
+ "id": 250302,
+ "distance": 120000,
+ "name": "白銅寺アズリ",
+ "kind": 9
+ },
+ {
+ "id": 11388,
+ "distance": 220000,
+ "name": "チューリングの跡",
+ "kind": 5
+ },
+ {
+ "id": 250303,
+ "distance": 300000,
+ "name": "白法院ラグ",
+ "kind": 9
+ },
+ {
+ "id": 250301,
+ "distance": 380000,
+ "name": "天界ちほー5",
+ "kind": 1
+ },
+ {
+ "id": 250304,
+ "distance": 460000,
+ "name": "兎花宮イオフィ",
+ "kind": 9
+ },
+ {
+ "id": 11386,
+ "distance": 600000,
+ "name": "Swift Swing",
+ "kind": 5
+ },
+ {
+ "id": 250305,
+ "distance": 700000,
+ "name": "庭白ガヴィ",
+ "kind": 9
+ },
+ {
+ "id": 11389,
+ "distance": 900000,
+ "name": "Sage 天界ちほー5 チャレンジ1",
+ "kind": 5
+ },
+ {
+ "id": 250301,
+ "distance": 1000000,
+ "name": "天界ちほー5",
+ "kind": 11
+ }
+ ]
+ },
+ {
+ "mapId": 250004,
+ "name": "7sRefちほー2",
+ "treasure": [
+ {
+ "id": 250401,
+ "distance": 0,
+ "name": "リズ",
+ "kind": 9
+ },
+ {
+ "id": 11395,
+ "distance": 150000,
+ "name": "Jouez Avec Moi?",
+ "kind": 5
+ },
+ {
+ "id": 250402,
+ "distance": 200000,
+ "name": "アシッド",
+ "kind": 9
+ },
+ {
+ "id": 11393,
+ "distance": 400000,
+ "name": "白花の天使",
+ "kind": 5
+ },
+ {
+ "id": 250403,
+ "distance": 450000,
+ "name": "ゲルプテディ",
+ "kind": 9
+ },
+ {
+ "id": 250401,
+ "distance": 550000,
+ "name": "7sRefちほー2",
+ "kind": 1
+ },
+ {
+ "id": 250404,
+ "distance": 600000,
+ "name": "オーランジェット",
+ "kind": 9
+ },
+ {
+ "id": 11392,
+ "distance": 850000,
+ "name": "Metamorphosism",
+ "kind": 5
+ },
+ {
+ "id": 250405,
+ "distance": 900000,
+ "name": "W?K?Y?",
+ "kind": 9
+ },
+ {
+ "id": 11394,
+ "distance": 1200000,
+ "name": "World's end loneliness 7sRefちほー2 チャレンジ1",
+ "kind": 5
+ },
+ {
+ "id": 250401,
+ "distance": 1300000,
+ "name": "7sRefちほー2",
+ "kind": 11
+ }
+ ]
+ },
+ {
+ "mapId": 250005,
+ "name": "ユニバースちほー2",
+ "treasure": [
+ {
+ "id": 250501,
+ "distance": 3000000,
+ "name": "ユニバースちほー2",
+ "kind": 1
+ },
+ {
+ "id": 250501,
+ "distance": 20000000,
+ "name": "ユニバースちほー2",
+ "kind": 11
+ },
+ {
+ "id": 250011,
+ "distance": 25000000,
+ "name": "お前の中の-100号出せよ!!",
+ "kind": 2
+ },
+ {
+ "id": 250012,
+ "distance": 30000000,
+ "name": "神譜面できた?",
+ "kind": 2
+ },
+ {
+ "id": 250013,
+ "distance": 35000000,
+ "name": "そば(うどん)",
+ "kind": 2
+ },
+ {
+ "id": 250014,
+ "distance": 40000000,
+ "name": "パーフェクトオンスケ",
+ "kind": 2
+ },
+ {
+ "id": 250026,
+ "distance": 50000000,
+ "name": "工数ガン無視",
+ "kind": 2
+ },
+ {
+ "id": 250027,
+ "distance": 60000000,
+ "name": "勤怠登録をしてコレに「いいね!」",
+ "kind": 2
+ },
+ {
+ "id": 250028,
+ "distance": 70000000,
+ "name": "遅れます。多分エアコンのせいです。",
+ "kind": 2
+ },
+ {
+ "id": 250029,
+ "distance": 80000000,
+ "name": "レールのないジェットコースターみたい",
+ "kind": 2
+ },
+ {
+ "id": 250030,
+ "distance": 90000000,
+ "name": "これの思い出を出しました。2",
+ "kind": 2
+ },
+ {
+ "id": 250031,
+ "distance": 100000000,
+ "name": "多分操作まちがってるだけじゃない?",
+ "kind": 2
+ }
+ ]
+ },
+ {
+ "mapId": 250006,
+ "name": "BLACK ROSEちほー6",
+ "treasure": [
+ {
+ "id": 250601,
+ "distance": 0,
+ "name": "クレメンス",
+ "kind": 9
+ },
+ {
+ "id": 250602,
+ "distance": 70000,
+ "name": "バイロン",
+ "kind": 9
+ },
+ {
+ "id": 11380,
+ "distance": 80000,
+ "name": "パーフェクション",
+ "kind": 5
+ },
+ {
+ "id": 250601,
+ "distance": 170000,
+ "name": "BLACK ROSEちほー6",
+ "kind": 1
+ },
+ {
+ "id": 250603,
+ "distance": 240000,
+ "name": "エリー",
+ "kind": 9
+ },
+ {
+ "id": 11381,
+ "distance": 250000,
+ "name": "デーモンベット",
+ "kind": 5
+ },
+ {
+ "id": 250601,
+ "distance": 400000,
+ "name": "BLACK ROSEちほー6",
+ "kind": 11
+ }
+ ]
+ },
+ {
+ "mapId": 250007,
+ "name": "10周年記念ちほー",
+ "treasure": [
+ {
+ "id": 250701,
+ "distance": 1000,
+ "name": "ホワイトボード(はっぴー)",
+ "kind": 11
+ },
+ {
+ "id": 250702,
+ "distance": 12000,
+ "name": "maistagram",
+ "kind": 11
+ },
+ {
+ "id": 250703,
+ "distance": 24000,
+ "name": "maimai CAFE MiLK",
+ "kind": 11
+ },
+ {
+ "id": 11390,
+ "distance": 36000,
+ "name": "OTOGEMA",
+ "kind": 5
+ },
+ {
+ "id": 250704,
+ "distance": 43000,
+ "name": "竜宮城",
+ "kind": 11
+ },
+ {
+ "id": 250705,
+ "distance": 49000,
+ "name": "maimai PiNK",
+ "kind": 11
+ },
+ {
+ "id": 250706,
+ "distance": 62000,
+ "name": "maimai ORANGE",
+ "kind": 11
+ },
+ {
+ "id": 11224,
+ "distance": 76000,
+ "name": "Paradisoda",
+ "kind": 5
+ },
+ {
+ "id": 250707,
+ "distance": 83000,
+ "name": "maimai GreeN B",
+ "kind": 11
+ },
+ {
+ "id": 250708,
+ "distance": 89000,
+ "name": "maimai Dots Black",
+ "kind": 11
+ },
+ {
+ "id": 250709,
+ "distance": 102000,
+ "name": "QZKago Requiem しゃま1",
+ "kind": 11
+ },
+ {
+ "id": 11152,
+ "distance": 116000,
+ "name": "ぼくたちいつでも しゅわっしゅわ!",
+ "kind": 5
+ },
+ {
+ "id": 250710,
+ "distance": 123000,
+ "name": "QZKago Requiem みるく1",
+ "kind": 11
+ },
+ {
+ "id": 250711,
+ "distance": 129000,
+ "name": "Schwarzschild 1",
+ "kind": 11
+ },
+ {
+ "id": 250712,
+ "distance": 142000,
+ "name": "Alea jacta est! 1",
+ "kind": 11
+ },
+ {
+ "id": 11095,
+ "distance": 156000,
+ "name": "絡めトリック利己ライザー",
+ "kind": 5
+ },
+ {
+ "id": 250713,
+ "distance": 163000,
+ "name": "FFT 1",
+ "kind": 11
+ },
+ {
+ "id": 250714,
+ "distance": 169000,
+ "name": "雷切-RAIKIRI- 2",
+ "kind": 11
+ },
+ {
+ "id": 250715,
+ "distance": 182000,
+ "name": "the EmpErroR 2",
+ "kind": 11
+ },
+ {
+ "id": 11003,
+ "distance": 196000,
+ "name": "でらっくmaimai♪てんてこまい!",
+ "kind": 5
+ },
+ {
+ "id": 250701,
+ "distance": 203000,
+ "name": "maimai FiNALE",
+ "kind": 3
+ },
+ {
+ "id": 250716,
+ "distance": 209000,
+ "name": "Believe the Rainbow 2",
+ "kind": 11
+ },
+ {
+ "id": 250717,
+ "distance": 222000,
+ "name": "PANDORA PARADOXXX 1",
+ "kind": 11
+ },
+ {
+ "id": 835,
+ "distance": 236000,
+ "name": "Believe the Rainbow",
+ "kind": 5
+ },
+ {
+ "id": 250702,
+ "distance": 243000,
+ "name": "maimai MiLK",
+ "kind": 3
+ },
+ {
+ "id": 250718,
+ "distance": 249000,
+ "name": "花と、雪と、ドラムンベース。 1",
+ "kind": 11
+ },
+ {
+ "id": 250719,
+ "distance": 262000,
+ "name": "花と、雪と、ドラムンベース。 2",
+ "kind": 11
+ },
+ {
+ "id": 737,
+ "distance": 276000,
+ "name": "FestivaLight",
+ "kind": 5
+ },
+ {
+ "id": 250720,
+ "distance": 283000,
+ "name": "みるくの大人専用お子様ランチコースにゃフレーム",
+ "kind": 11
+ },
+ {
+ "id": 250721,
+ "distance": 289000,
+ "name": "Magical Flavor 1",
+ "kind": 11
+ },
+ {
+ "id": 250722,
+ "distance": 302000,
+ "name": "Excalibur ~Revived resolution~",
+ "kind": 11
+ },
+ {
+ "id": 674,
+ "distance": 316000,
+ "name": "Magical Flavor",
+ "kind": 5
+ },
+ {
+ "id": 250703,
+ "distance": 323000,
+ "name": "maimai MURASAKi",
+ "kind": 3
+ },
+ {
+ "id": 250723,
+ "distance": 329000,
+ "name": "夢花火",
+ "kind": 11
+ },
+ {
+ "id": 250724,
+ "distance": 342000,
+ "name": "ユビキリ",
+ "kind": 11
+ },
+ {
+ "id": 614,
+ "distance": 356000,
+ "name": "夢花火",
+ "kind": 5
+ },
+ {
+ "id": 250725,
+ "distance": 363000,
+ "name": "宴じゃ!乙姫の大盤振る舞舞フレーム",
+ "kind": 11
+ },
+ {
+ "id": 250726,
+ "distance": 369000,
+ "name": "いっしそう電☆舞舞神拳!",
+ "kind": 11
+ },
+ {
+ "id": 250727,
+ "distance": 382000,
+ "name": "Our Wrenally",
+ "kind": 11
+ },
+ {
+ "id": 561,
+ "distance": 396000,
+ "name": "いっしそう電☆舞舞神拳!",
+ "kind": 5
+ },
+ {
+ "id": 250704,
+ "distance": 403000,
+ "name": "maimai PiNK",
+ "kind": 3
+ },
+ {
+ "id": 250728,
+ "distance": 409000,
+ "name": "Hyper Active",
+ "kind": 11
+ },
+ {
+ "id": 250729,
+ "distance": 422000,
+ "name": "AMAZING MIGHTYYYY!!!!",
+ "kind": 11
+ },
+ {
+ "id": 529,
+ "distance": 436000,
+ "name": "connecting with you",
+ "kind": 5
+ },
+ {
+ "id": 250730,
+ "distance": 443000,
+ "name": "てってれ~♪ ラズのビビットコースフレーム ",
+ "kind": 11
+ },
+ {
+ "id": 250731,
+ "distance": 449000,
+ "name": "7thSense",
+ "kind": 11
+ },
+ {
+ "id": 250732,
+ "distance": 462000,
+ "name": "Glorious Crown",
+ "kind": 11
+ },
+ {
+ "id": 472,
+ "distance": 476000,
+ "name": "アージェントシンメトリー",
+ "kind": 5
+ },
+ {
+ "id": 250705,
+ "distance": 483000,
+ "name": "maimai ORANGE",
+ "kind": 3
+ },
+ {
+ "id": 250733,
+ "distance": 489000,
+ "name": "Aiolos",
+ "kind": 11
+ },
+ {
+ "id": 250734,
+ "distance": 502000,
+ "name": "Oshama Scramble!",
+ "kind": 11
+ },
+ {
+ "id": 242,
+ "distance": 516000,
+ "name": "ナミダと流星",
+ "kind": 5
+ },
+ {
+ "id": 250735,
+ "distance": 523000,
+ "name": "おしゃま牛乳社長のしゃまでございますコースフレーム",
+ "kind": 11
+ },
+ {
+ "id": 250736,
+ "distance": 529000,
+ "name": "oboro",
+ "kind": 11
+ },
+ {
+ "id": 250737,
+ "distance": 542000,
+ "name": "Caliburne",
+ "kind": 11
+ },
+ {
+ "id": 351,
+ "distance": 556000,
+ "name": "MIRROR of MAGIC",
+ "kind": 5
+ },
+ {
+ "id": 250706,
+ "distance": 563000,
+ "name": "maimai GreeN",
+ "kind": 3
+ },
+ {
+ "id": 250738,
+ "distance": 569000,
+ "name": "ニャイン",
+ "kind": 11
+ },
+ {
+ "id": 250739,
+ "distance": 582000,
+ "name": "mai-Star",
+ "kind": 11
+ },
+ {
+ "id": 229,
+ "distance": 596000,
+ "name": "ぐるぐるWASH!コインランドリー・ディスコ",
+ "kind": 5
+ },
+ {
+ "id": 250740,
+ "distance": 603000,
+ "name": "シフォンのヨリドリ♪ミドリ♪コースですわ!フレーム",
+ "kind": 11
+ },
+ {
+ "id": 250741,
+ "distance": 609000,
+ "name": "System “Z”",
+ "kind": 11
+ },
+ {
+ "id": 250742,
+ "distance": 622000,
+ "name": "Garakuta Doll Play",
+ "kind": 11
+ },
+ {
+ "id": 241,
+ "distance": 636000,
+ "name": "Cosmic Train",
+ "kind": 5
+ },
+ {
+ "id": 250707,
+ "distance": 643000,
+ "name": "maimai",
+ "kind": 3
+ },
+ {
+ "id": 250743,
+ "distance": 649000,
+ "name": "Starlight Disco",
+ "kind": 11
+ },
+ {
+ "id": 250744,
+ "distance": 662000,
+ "name": "Fragrance",
+ "kind": 11
+ },
+ {
+ "id": 159,
+ "distance": 676000,
+ "name": "maimaiちゃんのテーマ",
+ "kind": 5
+ },
+ {
+ "id": 250745,
+ "distance": 685000,
+ "name": "ソルトの新感覚コースなのですフレーム",
+ "kind": 11
+ },
+ {
+ "id": 250746,
+ "distance": 694000,
+ "name": "SONIC THE HEDGEHOG(SUPER SONIC)",
+ "kind": 11
+ },
+ {
+ "id": 250747,
+ "distance": 703000,
+ "name": "ジングルベル",
+ "kind": 11
+ },
+ {
+ "id": 25,
+ "distance": 711000,
+ "name": "Sweets×Sweets",
+ "kind": 5
+ },
+ {
+ "id": 250749,
+ "distance": 720000,
+ "name": "龍宮茶館 店内",
+ "kind": 11
+ },
+ {
+ "id": 250750,
+ "distance": 730000,
+ "name": "CafeMiLK 店内",
+ "kind": 11
+ },
+ {
+ "id": 250751,
+ "distance": 740000,
+ "name": "LOPIT Halloween",
+ "kind": 11
+ },
+ {
+ "id": 250752,
+ "distance": 750000,
+ "name": "LOPIT Snowfield",
+ "kind": 11
+ },
+ {
+ "id": 11391,
+ "distance": 760000,
+ "name": "WiPE OUT MEMORIES 10周年記念ちほー チャレンジ1",
+ "kind": 5
+ },
+ {
+ "id": 250753,
+ "distance": 777000,
+ "name": "はっぴー(10周年)",
+ "kind": 11
+ }
+ ]
+ },
+ {
+ "mapId": 250052,
+ "name": "ツユちほー",
+ "treasure": [
+ {
+ "id": 255201,
+ "distance": 0,
+ "name": "くらべられっ子ちゃん",
+ "kind": 9
+ },
+ {
+ "id": 11407,
+ "distance": 9000,
+ "name": "くらべられっ子",
+ "kind": 5
+ },
+ {
+ "id": 255203,
+ "distance": 25000,
+ "name": "天使ちゃん",
+ "kind": 9
+ },
+ {
+ "id": 11347,
+ "distance": 30000,
+ "name": "泥の分際で私だけの大切を奪おうだなんて",
+ "kind": 5
+ },
+ {
+ "id": 255202,
+ "distance": 60000,
+ "name": "あのバスちゃん",
+ "kind": 9
+ },
+ {
+ "id": 11408,
+ "distance": 70000,
+ "name": "あの世行きのバスに乗ってさらば。",
+ "kind": 5
+ },
+ {
+ "id": 255201,
+ "distance": 130000,
+ "name": "ツユちほー",
+ "kind": 1
+ },
+ {
+ "id": 255204,
+ "distance": 210000,
+ "name": "ナイ",
+ "kind": 9
+ },
+ {
+ "id": 11396,
+ "distance": 300000,
+ "name": "テリトリーバトル",
+ "kind": 5
+ },
+ {
+ "id": 255201,
+ "distance": 350000,
+ "name": "ツユちほー",
+ "kind": 11
+ }
+ ]
+ },
+ {
+ "mapId": 250053,
+ "name": "D4DJ Groovy Mixちほー",
+ "treasure": [
+ {
+ "id": 255301,
+ "distance": 0,
+ "name": "出雲咲姫",
+ "kind": 9
+ },
+ {
+ "id": 255302,
+ "distance": 25000,
+ "name": "新島衣舞紀",
+ "kind": 9
+ },
+ {
+ "id": 255301,
+ "distance": 60000,
+ "name": "Photon Maiden",
+ "kind": 1
+ },
+ {
+ "id": 255303,
+ "distance": 90000,
+ "name": "花巻乙和",
+ "kind": 9
+ },
+ {
+ "id": 255304,
+ "distance": 120000,
+ "name": "福島ノア",
+ "kind": 9
+ },
+ {
+ "id": 11420,
+ "distance": 130000,
+ "name": "Photon Melodies",
+ "kind": 5
+ },
+ {
+ "id": 255302,
+ "distance": 170000,
+ "name": "Photon Maiden",
+ "kind": 11
+ },
+ {
+ "id": 255305,
+ "distance": 200000,
+ "name": "桜田美夢",
+ "kind": 9
+ },
+ {
+ "id": 255306,
+ "distance": 230000,
+ "name": "春日春奈",
+ "kind": 9
+ },
+ {
+ "id": 255302,
+ "distance": 260000,
+ "name": "Lyrical Lily",
+ "kind": 1
+ },
+ {
+ "id": 255307,
+ "distance": 290000,
+ "name": "白鳥胡桃",
+ "kind": 9
+ },
+ {
+ "id": 255308,
+ "distance": 320000,
+ "name": "竹下みいこ",
+ "kind": 9
+ },
+ {
+ "id": 11421,
+ "distance": 330000,
+ "name": "吾輩よ猫であれ",
+ "kind": 5
+ },
+ {
+ "id": 255303,
+ "distance": 370000,
+ "name": "Lyrical Lily",
+ "kind": 11
+ },
+ {
+ "id": 255301,
+ "distance": 400000,
+ "name": "D4DJ Groovy Mixちほー",
+ "kind": 11
+ }
+ ]
+ },
+ {
+ "mapId": 250054,
+ "name": "Diverse Systemちほー",
+ "treasure": [
+ {
+ "id": 255401,
+ "distance": 0,
+ "name": "大空 彩",
+ "kind": 9
+ },
+ {
+ "id": 255403,
+ "distance": 25000,
+ "name": "silky6",
+ "kind": 9
+ },
+ {
+ "id": 11424,
+ "distance": 100000,
+ "name": "Estahv",
+ "kind": 5
+ },
+ {
+ "id": 255402,
+ "distance": 130000,
+ "name": "白戒",
+ "kind": 9
+ },
+ {
+ "id": 11425,
+ "distance": 200000,
+ "name": "First Dance",
+ "kind": 5
+ },
+ {
+ "id": 255404,
+ "distance": 230000,
+ "name": "削除",
+ "kind": 9
+ },
+ {
+ "id": 11426,
+ "distance": 300000,
+ "name": "Mjölnir",
+ "kind": 5
+ },
+ {
+ "id": 255401,
+ "distance": 350000,
+ "name": "Diverse Systemちほー",
+ "kind": 1
+ },
+ {
+ "id": 11429,
+ "distance": 700000,
+ "name": "Love's Theme of BADASS ~バッド・アス 愛のテーマ~ Diverse Systemちほー チャレンジ1",
+ "kind": 5
+ },
+ {
+ "id": 255405,
+ "distance": 730000,
+ "name": "BADASS",
+ "kind": 9
+ },
+ {
+ "id": 255401,
+ "distance": 800000,
+ "name": "Diverse Systemちほー",
+ "kind": 11
+ }
+ ]
+ },
+ {
+ "mapId": 250055,
+ "name": "Rain Dropsちほー2",
+ "treasure": [
+ {
+ "id": 205903,
+ "distance": 0,
+ "name": "童田明治",
+ "kind": 9
+ },
+ {
+ "id": 205904,
+ "distance": 35000,
+ "name": "鈴木勝",
+ "kind": 9
+ },
+ {
+ "id": 205906,
+ "distance": 70000,
+ "name": "ジョー・力一",
+ "kind": 9
+ },
+ {
+ "id": 11430,
+ "distance": 80000,
+ "name": "オントロジー",
+ "kind": 5
+ },
+ {
+ "id": 255501,
+ "distance": 150000,
+ "name": "Rain Dropsちほー2",
+ "kind": 1
+ },
+ {
+ "id": 11348,
+ "distance": 160000,
+ "name": "VOLTAGE",
+ "kind": 5
+ },
+ {
+ "id": 255501,
+ "distance": 250000,
+ "name": "Rain Dropsちほー2",
+ "kind": 11
+ }
+ ]
+ },
+ {
+ "mapId": 250056,
+ "name": "ゲームセンターCXちほー",
+ "treasure": [
+ {
+ "id": 255601,
+ "distance": 0,
+ "name": "有野課長",
+ "kind": 9
+ },
+ {
+ "id": 11431,
+ "distance": 25000,
+ "name": "剣を抜け!GCCX MAX",
+ "kind": 5
+ },
+ {
+ "id": 255602,
+ "distance": 35000,
+ "name": "12代目AD松井",
+ "kind": 9
+ },
+ {
+ "id": 255603,
+ "distance": 50000,
+ "name": "16代目AD加賀",
+ "kind": 9
+ },
+ {
+ "id": 255601,
+ "distance": 75000,
+ "name": "ゲームセンターCXちほー",
+ "kind": 1
+ },
+ {
+ "id": 255604,
+ "distance": 100000,
+ "name": "MA谷澤&14代目AD大須賀",
+ "kind": 9
+ },
+ {
+ "id": 255605,
+ "distance": 125000,
+ "name": "カメラマン阿部",
+ "kind": 9
+ },
+ {
+ "id": 255606,
+ "distance": 150000,
+ "name": "王様",
+ "kind": 9
+ },
+ {
+ "id": 255601,
+ "distance": 200000,
+ "name": "ゲームセンターCXちほー",
+ "kind": 11
+ }
+ ]
+ },
+ {
+ "mapId": 250058,
+ "name": "CHUNITHMちほー",
+ "treasure": [
+ {
+ "id": 255801,
+ "distance": 0,
+ "name": "No.9_ニナ",
+ "kind": 9
+ },
+ {
+ "id": 255805,
+ "distance": 25000,
+ "name": "チュウニペンギン",
+ "kind": 9
+ },
+ {
+ "id": 255806,
+ "distance": 60000,
+ "name": "ショウニペンギン",
+ "kind": 9
+ },
+ {
+ "id": 255801,
+ "distance": 120000,
+ "name": "CHUNITHMちほー",
+ "kind": 1
+ },
+ {
+ "id": 255803,
+ "distance": 150000,
+ "name": "マゼラン・マゼラン",
+ "kind": 9
+ },
+ {
+ "id": 11401,
+ "distance": 160000,
+ "name": "コスモポップファンクラブ",
+ "kind": 5
+ },
+ {
+ "id": 255804,
+ "distance": 200000,
+ "name": "ミゼラン・ミゼラン",
+ "kind": 9
+ },
+ {
+ "id": 255802,
+ "distance": 280000,
+ "name": "コスモポップファンクラブ",
+ "kind": 11
+ },
+ {
+ "id": 255802,
+ "distance": 320000,
+ "name": "シルヴィアス",
+ "kind": 9
+ },
+ {
+ "id": 11400,
+ "distance": 410000,
+ "name": "folern",
+ "kind": 5
+ },
+ {
+ "id": 255801,
+ "distance": 500000,
+ "name": "CHUNITHMちほー",
+ "kind": 11
+ }
+ ]
+ },
+ {
+ "mapId": 250059,
+ "name": "すりぃちほー",
+ "treasure": [
+ {
+ "id": 255901,
+ "distance": 0,
+ "name": "すりぃ",
+ "kind": 9
+ },
+ {
+ "id": 255902,
+ "distance": 20000,
+ "name": "ナース",
+ "kind": 9
+ },
+ {
+ "id": 11439,
+ "distance": 25000,
+ "name": "ジャンキーナイトタウンオーケストラ",
+ "kind": 5
+ },
+ {
+ "id": 255907,
+ "distance": 45000,
+ "name": "ひょっとこJK",
+ "kind": 9
+ },
+ {
+ "id": 255908,
+ "distance": 65000,
+ "name": "ピエロ",
+ "kind": 9
+ },
+ {
+ "id": 255909,
+ "distance": 85000,
+ "name": "侍",
+ "kind": 9
+ },
+ {
+ "id": 11447,
+ "distance": 90000,
+ "name": "エゴロック",
+ "kind": 5
+ },
+ {
+ "id": 255910,
+ "distance": 110000,
+ "name": "牛男",
+ "kind": 9
+ },
+ {
+ "id": 255911,
+ "distance": 130000,
+ "name": "舞踏会の姉貴",
+ "kind": 9
+ },
+ {
+ "id": 255901,
+ "distance": 170000,
+ "name": "すりぃちほー",
+ "kind": 1
+ },
+ {
+ "id": 11132,
+ "distance": 180000,
+ "name": "表裏一体",
+ "kind": 5
+ },
+ {
+ "id": 255903,
+ "distance": 200000,
+ "name": "ボーイ",
+ "kind": 9
+ },
+ {
+ "id": 255904,
+ "distance": 220000,
+ "name": "ガール",
+ "kind": 9
+ },
+ {
+ "id": 11325,
+ "distance": 230000,
+ "name": "テレキャスタービーボーイ",
+ "kind": 5
+ },
+ {
+ "id": 255905,
+ "distance": 250000,
+ "name": "審査員",
+ "kind": 9
+ },
+ {
+ "id": 255906,
+ "distance": 270000,
+ "name": "親衛隊",
+ "kind": 9
+ },
+ {
+ "id": 11365,
+ "distance": 280000,
+ "name": "アンビバレンス",
+ "kind": 5
+ },
+ {
+ "id": 255912,
+ "distance": 330000,
+ "name": "黒須 紘",
+ "kind": 9
+ },
+ {
+ "id": 11449,
+ "distance": 400000,
+ "name": "パズルリボン",
+ "kind": 5
+ },
+ {
+ "id": 255901,
+ "distance": 450000,
+ "name": "すりぃちほー",
+ "kind": 11
+ }
+ ]
+ },
+ {
+ "mapId": 250060,
+ "name": "オンゲキちほー5",
+ "treasure": [
+ {
+ "id": 256001,
+ "distance": 0,
+ "name": "星咲 あかり(Transcend Lights)",
+ "kind": 9
+ },
+ {
+ "id": 256002,
+ "distance": 35000,
+ "name": "藤沢 柚子(Transcend Lights)",
+ "kind": 9
+ },
+ {
+ "id": 256003,
+ "distance": 70000,
+ "name": "三角 葵(Transcend Lights)",
+ "kind": 9
+ },
+ {
+ "id": 11451,
+ "distance": 75000,
+ "name": "Transcend Lights",
+ "kind": 5
+ },
+ {
+ "id": 256006,
+ "distance": 110000,
+ "name": "高瀬 梨緒(シュータードレス)",
+ "kind": 9
+ },
+ {
+ "id": 256007,
+ "distance": 150000,
+ "name": "結城 莉玖(シュータードレス)",
+ "kind": 9
+ },
+ {
+ "id": 256008,
+ "distance": 190000,
+ "name": "藍原 椿(シュータードレス)",
+ "kind": 9
+ },
+ {
+ "id": 11402,
+ "distance": 200000,
+ "name": "撩乱乙女†無双劇",
+ "kind": 5
+ },
+ {
+ "id": 256004,
+ "distance": 250000,
+ "name": "日向 千夏(Transcend Lights)",
+ "kind": 9
+ },
+ {
+ "id": 256005,
+ "distance": 300000,
+ "name": "皇城 セツナ(Transcend Lights)",
+ "kind": 9
+ },
+ {
+ "id": 11404,
+ "distance": 390000,
+ "name": "See The Light",
+ "kind": 5
+ },
+ {
+ "id": 256001,
+ "distance": 450000,
+ "name": "オンゲキちほー5",
+ "kind": 1
+ },
+ {
+ "id": 11405,
+ "distance": 540000,
+ "name": "エータ・ベータ・イータ",
+ "kind": 5
+ },
+ {
+ "id": 256001,
+ "distance": 600000,
+ "name": "オンゲキちほー5",
+ "kind": 11
+ }
+ ]
+ },
+ {
+ "mapId": 300001,
+ "name": "ハピフェスちほー",
+ "treasure": [
+ {
+ "id": 300101,
+ "distance": 0,
+ "name": "ラズ(ふぇすてぃばる)",
+ "kind": 9
+ },
+ {
+ "id": 11452,
+ "distance": 30000,
+ "name": "ホシシズク",
+ "kind": 5
+ },
+ {
+ "id": 300102,
+ "distance": 70000,
+ "name": "シフォン(ふぇすてぃばる)",
+ "kind": 9
+ },
+ {
+ "id": 11453,
+ "distance": 120000,
+ "name": "Rainbow Rush Story",
+ "kind": 5
+ },
+ {
+ "id": 300103,
+ "distance": 170000,
+ "name": "ソルト(ふぇすてぃばる)",
+ "kind": 9
+ },
+ {
+ "id": 300101,
+ "distance": 230000,
+ "name": "ハピフェスちほー",
+ "kind": 1
+ },
+ {
+ "id": 300104,
+ "distance": 290000,
+ "name": "でらっくま(ふぇすてぃばる)",
+ "kind": 9
+ },
+ {
+ "id": 11454,
+ "distance": 360000,
+ "name": "Tricolor⁂circuS",
+ "kind": 5
+ },
+ {
+ "id": 300105,
+ "distance": 440000,
+ "name": "らいむっくま(ふぇすてぃばる)",
+ "kind": 9
+ },
+ {
+ "id": 300106,
+ "distance": 530000,
+ "name": "れもんっくま(ふぇすてぃばる)",
+ "kind": 9
+ },
+ {
+ "id": 11455,
+ "distance": 700000,
+ "name": "[X] ハピフェスちほー チャレンジ1",
+ "kind": 5
+ },
+ {
+ "id": 300101,
+ "distance": 800000,
+ "name": "ハピフェスちほー",
+ "kind": 11
+ }
+ ]
+ },
+ {
+ "mapId": 300002,
+ "name": "メトロポリスちほー6",
+ "treasure": [
+ {
+ "id": 300201,
+ "distance": 0,
+ "name": "黒姫",
+ "kind": 9
+ },
+ {
+ "id": 11459,
+ "distance": 70000,
+ "name": "You Mean the World to Me",
+ "kind": 5
+ },
+ {
+ "id": 300202,
+ "distance": 120000,
+ "name": "紫黒",
+ "kind": 9
+ },
+ {
+ "id": 11460,
+ "distance": 220000,
+ "name": "Neon Kingdom",
+ "kind": 5
+ },
+ {
+ "id": 300203,
+ "distance": 300000,
+ "name": "高麗",
+ "kind": 9
+ },
+ {
+ "id": 300201,
+ "distance": 380000,
+ "name": "メトロポリスちほー6",
+ "kind": 1
+ },
+ {
+ "id": 300204,
+ "distance": 460000,
+ "name": "濡羽",
+ "kind": 9
+ },
+ {
+ "id": 11461,
+ "distance": 600000,
+ "name": "#狂った民族2 PRAVARGYAZOOQA",
+ "kind": 5
+ },
+ {
+ "id": 300205,
+ "distance": 700000,
+ "name": "イーシュ",
+ "kind": 9
+ },
+ {
+ "id": 11462,
+ "distance": 1000000,
+ "name": "VSpook! メトロポリスちほー6 チャレンジ1",
+ "kind": 5
+ },
+ {
+ "id": 300201,
+ "distance": 1100000,
+ "name": "メトロポリスちほー6",
+ "kind": 11
+ }
+ ]
+ },
+ {
+ "mapId": 300003,
+ "name": "スカイストリートちほー3",
+ "treasure": [
+ {
+ "id": 300301,
+ "distance": 0,
+ "name": "アカツキ",
+ "kind": 9
+ },
+ {
+ "id": 11463,
+ "distance": 35000,
+ "name": "RIFFRAIN",
+ "kind": 5
+ },
+ {
+ "id": 300302,
+ "distance": 80000,
+ "name": "コハク",
+ "kind": 9
+ },
+ {
+ "id": 11464,
+ "distance": 150000,
+ "name": "Falling",
+ "kind": 5
+ },
+ {
+ "id": 300303,
+ "distance": 210000,
+ "name": "暁",
+ "kind": 9
+ },
+ {
+ "id": 300301,
+ "distance": 270000,
+ "name": "スカイストリートちほー3",
+ "kind": 1
+ },
+ {
+ "id": 300304,
+ "distance": 330000,
+ "name": "ノア",
+ "kind": 9
+ },
+ {
+ "id": 11465,
+ "distance": 500000,
+ "name": "ピリオドサイン",
+ "kind": 5
+ },
+ {
+ "id": 300305,
+ "distance": 600000,
+ "name": "ソウ",
+ "kind": 9
+ },
+ {
+ "id": 11466,
+ "distance": 800000,
+ "name": "群青シグナル スカイストリートちほー3 チャレンジ1",
+ "kind": 5
+ },
+ {
+ "id": 300301,
+ "distance": 900000,
+ "name": "スカイストリートちほー3",
+ "kind": 11
+ }
+ ]
+ },
+ {
+ "mapId": 300004,
+ "name": "天界ちほー6",
+ "treasure": [
+ {
+ "id": 300401,
+ "distance": 0,
+ "name": "ディアン",
+ "kind": 9
+ },
+ {
+ "id": 11467,
+ "distance": 150000,
+ "name": "Beat Opera op.1",
+ "kind": 5
+ },
+ {
+ "id": 300402,
+ "distance": 200000,
+ "name": "レヌス",
+ "kind": 9
+ },
+ {
+ "id": 11468,
+ "distance": 400000,
+ "name": "星見草",
+ "kind": 5
+ },
+ {
+ "id": 300403,
+ "distance": 450000,
+ "name": "ルフタ",
+ "kind": 9
+ },
+ {
+ "id": 300401,
+ "distance": 550000,
+ "name": "天界ちほー6",
+ "kind": 1
+ },
+ {
+ "id": 300404,
+ "distance": 600000,
+ "name": "ヴァハ",
+ "kind": 9
+ },
+ {
+ "id": 11469,
+ "distance": 850000,
+ "name": "\"411Ψ892\"",
+ "kind": 5
+ },
+ {
+ "id": 300405,
+ "distance": 900000,
+ "name": "ブリギット",
+ "kind": 9
+ },
+ {
+ "id": 11470,
+ "distance": 1300000,
+ "name": "康莊大道 天界ちほー6 チャレンジ1",
+ "kind": 5
+ },
+ {
+ "id": 300401,
+ "distance": 1400000,
+ "name": "天界ちほー6",
+ "kind": 11
+ }
+ ]
+ },
+ {
+ "mapId": 300005,
+ "name": "フェスティバルちほー",
+ "treasure": [
+ {
+ "id": 300501,
+ "distance": 3000000,
+ "name": "フェスティバルちほー",
+ "kind": 1
+ },
+ {
+ "id": 300501,
+ "distance": 20000000,
+ "name": "フェスティバルちほー",
+ "kind": 11
+ },
+ {
+ "id": 300011,
+ "distance": 25000000,
+ "name": "し、仕事が早すぎる",
+ "kind": 2
+ },
+ {
+ "id": 300012,
+ "distance": 30000000,
+ "name": "インターネットパワー",
+ "kind": 2
+ },
+ {
+ "id": 300013,
+ "distance": 35000000,
+ "name": "もまいらさんくす",
+ "kind": 2
+ },
+ {
+ "id": 300014,
+ "distance": 40000000,
+ "name": "つかれたつかれたつかれた!解散!",
+ "kind": 2
+ },
+ {
+ "id": 300015,
+ "distance": 50000000,
+ "name": "KING of パワー",
+ "kind": 2
+ },
+ {
+ "id": 300016,
+ "distance": 60000000,
+ "name": "金なら出しますから・・・",
+ "kind": 2
+ },
+ {
+ "id": 300017,
+ "distance": 70000000,
+ "name": "企業努力配置",
+ "kind": 2
+ },
+ {
+ "id": 300018,
+ "distance": 80000000,
+ "name": "そろそろ新人ではない",
+ "kind": 2
+ },
+ {
+ "id": 300019,
+ "distance": 90000000,
+ "name": "この後爆破します",
+ "kind": 2
+ },
+ {
+ "id": 300020,
+ "distance": 100000000,
+ "name": "マジの超特大",
+ "kind": 2
+ }
+ ]
+ },
+ {
+ "mapId": 300006,
+ "name": "BLACK ROSEちほー7",
+ "treasure": [
+ {
+ "id": 300601,
+ "distance": 0,
+ "name": "アウル",
+ "kind": 9
+ },
+ {
+ "id": 300602,
+ "distance": 30000,
+ "name": "ヒュド・ルー",
+ "kind": 9
+ },
+ {
+ "id": 300603,
+ "distance": 80000,
+ "name": "エリー",
+ "kind": 9
+ },
+ {
+ "id": 300601,
+ "distance": 150000,
+ "name": "BLACK ROSEちほー7",
+ "kind": 1
+ },
+ {
+ "id": 300604,
+ "distance": 200000,
+ "name": "マスティマ",
+ "kind": 9
+ },
+ {
+ "id": 300605,
+ "distance": 250000,
+ "name": "バイロン(堕天使)",
+ "kind": 9
+ },
+ {
+ "id": 11456,
+ "distance": 400000,
+ "name": "分解収束テイル",
+ "kind": 5
+ },
+ {
+ "id": 300601,
+ "distance": 500000,
+ "name": "BLACK ROSEちほー7",
+ "kind": 11
+ }
+ ]
+ },
+ {
+ "mapId": 300052,
+ "name": "DECO*27ちほー",
+ "treasure": [
+ {
+ "id": 305201,
+ "distance": 0,
+ "name": "初音ミク(ヴァンパイア)",
+ "kind": 9
+ },
+ {
+ "id": 305202,
+ "distance": 9000,
+ "name": "初音ミク(アニマル)",
+ "kind": 9
+ },
+ {
+ "id": 11481,
+ "distance": 30000,
+ "name": "アニマル",
+ "kind": 5
+ },
+ {
+ "id": 305203,
+ "distance": 40000,
+ "name": "初音ミク(状態異常彼女)",
+ "kind": 9
+ },
+ {
+ "id": 305201,
+ "distance": 70000,
+ "name": "DECO*27ちほー その1",
+ "kind": 1
+ },
+ {
+ "id": 305204,
+ "distance": 80000,
+ "name": "初音ミク(U)",
+ "kind": 9
+ },
+ {
+ "id": 305207,
+ "distance": 90000,
+ "name": "初音ミク(ギフト)",
+ "kind": 9
+ },
+ {
+ "id": 305202,
+ "distance": 130000,
+ "name": "アニマル",
+ "kind": 11
+ },
+ {
+ "id": 305209,
+ "distance": 140000,
+ "name": "初音ミク(ジレンマ)",
+ "kind": 9
+ },
+ {
+ "id": 11482,
+ "distance": 160000,
+ "name": "ジレンマ",
+ "kind": 5
+ },
+ {
+ "id": 305205,
+ "distance": 170000,
+ "name": "初音ミク(シンデレラ)",
+ "kind": 9
+ },
+ {
+ "id": 305202,
+ "distance": 210000,
+ "name": "DECO*27ちほー その2",
+ "kind": 1
+ },
+ {
+ "id": 305206,
+ "distance": 220000,
+ "name": "初音ミク(ケサランパサラン)",
+ "kind": 9
+ },
+ {
+ "id": 305208,
+ "distance": 230000,
+ "name": "初音ミク(パラサイト)",
+ "kind": 9
+ },
+ {
+ "id": 305203,
+ "distance": 280000,
+ "name": "ヴァンパイア",
+ "kind": 11
+ },
+ {
+ "id": 305210,
+ "distance": 290000,
+ "name": "DECO*27",
+ "kind": 9
+ },
+ {
+ "id": 10190,
+ "distance": 380000,
+ "name": "モザイクロール",
+ "kind": 5
+ },
+ {
+ "id": 305201,
+ "distance": 400000,
+ "name": "DECO*27ちほー",
+ "kind": 11
+ }
+ ]
+ },
+ {
+ "mapId": 300053,
+ "name": "プロジェクトセカイちほー3",
+ "treasure": [
+ {
+ "id": 305301,
+ "distance": 0,
+ "name": "初音ミク",
+ "kind": 9
+ },
+ {
+ "id": 11492,
+ "distance": 30000,
+ "name": "群青讃歌",
+ "kind": 5
+ },
+ {
+ "id": 305301,
+ "distance": 70000,
+ "name": "プロジェクトセカイちほー3",
+ "kind": 1
+ },
+ {
+ "id": 305302,
+ "distance": 100000,
+ "name": "鏡音リン",
+ "kind": 9
+ },
+ {
+ "id": 305303,
+ "distance": 130000,
+ "name": "鏡音レン",
+ "kind": 9
+ },
+ {
+ "id": 11493,
+ "distance": 170000,
+ "name": "セカイ",
+ "kind": 5
+ },
+ {
+ "id": 305302,
+ "distance": 240000,
+ "name": "VIRTUAL SINGER",
+ "kind": 1
+ },
+ {
+ "id": 305304,
+ "distance": 280000,
+ "name": "巡音ルカ",
+ "kind": 9
+ },
+ {
+ "id": 11494,
+ "distance": 320000,
+ "name": "ワーワーワールド",
+ "kind": 5
+ },
+ {
+ "id": 305305,
+ "distance": 360000,
+ "name": "MEIKO",
+ "kind": 9
+ },
+ {
+ "id": 305306,
+ "distance": 400000,
+ "name": "KAITO",
+ "kind": 9
+ },
+ {
+ "id": 305301,
+ "distance": 500000,
+ "name": "プロジェクトセカイちほー3",
+ "kind": 11
+ }
+ ]
+ },
+ {
+ "mapId": 300054,
+ "name": "東方Project×オンゲキちほー",
+ "treasure": [
+ {
+ "id": 305401,
+ "distance": 0,
+ "name": "博麗 霊夢",
+ "kind": 9
+ },
+ {
+ "id": 305402,
+ "distance": 9000,
+ "name": "霧雨 魔理沙",
+ "kind": 9
+ },
+ {
+ "id": 11495,
+ "distance": 30000,
+ "name": "銀のめぐり",
+ "kind": 5
+ },
+ {
+ "id": 305403,
+ "distance": 60000,
+ "name": "チルノ",
+ "kind": 9
+ },
+ {
+ "id": 11496,
+ "distance": 100000,
+ "name": "Destiny Runner",
+ "kind": 5
+ },
+ {
+ "id": 305404,
+ "distance": 130000,
+ "name": "レミリア・スカーレット",
+ "kind": 9
+ },
+ {
+ "id": 305405,
+ "distance": 160000,
+ "name": "フランドール・スカーレット",
+ "kind": 9
+ },
+ {
+ "id": 11473,
+ "distance": 200000,
+ "name": "Catch Me If You Can",
+ "kind": 5
+ },
+ {
+ "id": 11474,
+ "distance": 300000,
+ "name": "MAGNETAR GIRL",
+ "kind": 5
+ },
+ {
+ "id": 305401,
+ "distance": 350000,
+ "name": "東方Project×オンゲキちほー",
+ "kind": 1
+ },
+ {
+ "id": 11475,
+ "distance": 550000,
+ "name": "SUPER AMBULANCE",
+ "kind": 5
+ },
+ {
+ "id": 305401,
+ "distance": 600000,
+ "name": "東方Project×オンゲキちほー",
+ "kind": 11
+ }
+ ]
+ },
+ {
+ "mapId": 300055,
+ "name": "さなちゃんねるちほー",
+ "treasure": [
+ {
+ "id": 305501,
+ "distance": 0,
+ "name": "名取さな(パレードコーデ)",
+ "kind": 9
+ },
+ {
+ "id": 305502,
+ "distance": 9000,
+ "name": "名取さな(制服さん)",
+ "kind": 9
+ },
+ {
+ "id": 11497,
+ "distance": 30000,
+ "name": "アマカミサマ",
+ "kind": 5
+ },
+ {
+ "id": 305503,
+ "distance": 40000,
+ "name": "名取さな(いつものお洋服)",
+ "kind": 9
+ },
+ {
+ "id": 305501,
+ "distance": 70000,
+ "name": "さなちゃんねるちほー その1",
+ "kind": 1
+ },
+ {
+ "id": 305504,
+ "distance": 80000,
+ "name": "名取さな(さなちゃんねる王)",
+ "kind": 9
+ },
+ {
+ "id": 305505,
+ "distance": 90000,
+ "name": "名取さな(ていねいな王様)",
+ "kind": 9
+ },
+ {
+ "id": 305502,
+ "distance": 130000,
+ "name": "ば~ちゃるな~す名取さな",
+ "kind": 11
+ },
+ {
+ "id": 11498,
+ "distance": 150000,
+ "name": "モンダイナイトリッパー!",
+ "kind": 5
+ },
+ {
+ "id": 305506,
+ "distance": 160000,
+ "name": "うさちゃんせんせえ",
+ "kind": 9
+ },
+ {
+ "id": 305509,
+ "distance": 170000,
+ "name": "アヘエビ",
+ "kind": 9
+ },
+ {
+ "id": 305507,
+ "distance": 180000,
+ "name": "ねこちゃんせんせえ",
+ "kind": 9
+ },
+ {
+ "id": 305502,
+ "distance": 210000,
+ "name": "さなちゃんねるちほー その2",
+ "kind": 1
+ },
+ {
+ "id": 305508,
+ "distance": 220000,
+ "name": "サーナくん",
+ "kind": 9
+ },
+ {
+ "id": 305501,
+ "distance": 260000,
+ "name": "さなちゃんねるちほー",
+ "kind": 11
+ }
+ ]
+ },
+ {
+ "mapId": 300057,
+ "name": "樋口楓ちほー",
+ "treasure": [
+ {
+ "id": 305701,
+ "distance": 0,
+ "name": "樋口楓",
+ "kind": 9
+ },
+ {
+ "id": 305702,
+ "distance": 9000,
+ "name": "樋口楓(AIM)",
+ "kind": 9
+ },
+ {
+ "id": 11503,
+ "distance": 30000,
+ "name": "Baddest",
+ "kind": 5
+ },
+ {
+ "id": 305703,
+ "distance": 40000,
+ "name": "樋口楓(アーティスト衣装)",
+ "kind": 9
+ },
+ {
+ "id": 305701,
+ "distance": 70000,
+ "name": "樋口楓ちほー その1",
+ "kind": 1
+ },
+ {
+ "id": 305704,
+ "distance": 80000,
+ "name": "ぷち樋口楓",
+ "kind": 9
+ },
+ {
+ "id": 305701,
+ "distance": 120000,
+ "name": "AIM",
+ "kind": 11
+ },
+ {
+ "id": 305705,
+ "distance": 130000,
+ "name": "ぷち樋口楓(自転車通学)",
+ "kind": 9
+ },
+ {
+ "id": 305706,
+ "distance": 140000,
+ "name": "ぷち樋口楓(アーティスト衣装)",
+ "kind": 9
+ },
+ {
+ "id": 305702,
+ "distance": 180000,
+ "name": "樋口楓ちほー その2",
+ "kind": 1
+ },
+ {
+ "id": 305707,
+ "distance": 190000,
+ "name": "ささみちゃん",
+ "kind": 9
+ },
+ {
+ "id": 305702,
+ "distance": 250000,
+ "name": "樋口楓ちほー",
+ "kind": 11
+ }
+ ]
+ },
+ {
+ "mapId": 300058,
+ "name": "電音部ちほー",
+ "treasure": [
+ {
+ "id": 305801,
+ "distance": 0,
+ "name": "日高零奈",
+ "kind": 9
+ },
+ {
+ "id": 11506,
+ "distance": 30000,
+ "name": "Blank Paper (Prod. TEMPLIME)",
+ "kind": 5
+ },
+ {
+ "id": 305804,
+ "distance": 40000,
+ "name": "鳳凰火凛",
+ "kind": 9
+ },
+ {
+ "id": 11507,
+ "distance": 70000,
+ "name": "In my world (Prod. KOTONOHOUSE)",
+ "kind": 5
+ },
+ {
+ "id": 305802,
+ "distance": 80000,
+ "name": "東雲和音",
+ "kind": 9
+ },
+ {
+ "id": 305801,
+ "distance": 120000,
+ "name": "外神田文芸高校 その1",
+ "kind": 1
+ },
+ {
+ "id": 305805,
+ "distance": 130000,
+ "name": "瀬戸海月",
+ "kind": 9
+ },
+ {
+ "id": 305802,
+ "distance": 170000,
+ "name": "帝音国際学院 その1",
+ "kind": 1
+ },
+ {
+ "id": 305803,
+ "distance": 180000,
+ "name": "茅野ふたば",
+ "kind": 9
+ },
+ {
+ "id": 305803,
+ "distance": 220000,
+ "name": "外神田文芸高校 その2",
+ "kind": 1
+ },
+ {
+ "id": 305806,
+ "distance": 230000,
+ "name": "大賀ルキア",
+ "kind": 9
+ },
+ {
+ "id": 305804,
+ "distance": 270000,
+ "name": "帝音国際学院 その2",
+ "kind": 1
+ },
+ {
+ "id": 305801,
+ "distance": 330000,
+ "name": "外神田文芸高校",
+ "kind": 11
+ },
+ {
+ "id": 305802,
+ "distance": 400000,
+ "name": "帝音国際学院",
+ "kind": 11
+ }
+ ]
+ },
+ {
+ "mapId": 300059,
+ "name": "CHUNITHMちほー2",
+ "treasure": [
+ {
+ "id": 305901,
+ "distance": 0,
+ "name": "クラウン",
+ "kind": 9
+ },
+ {
+ "id": 11477,
+ "distance": 30000,
+ "name": "Ghost Dance",
+ "kind": 5
+ },
+ {
+ "id": 305901,
+ "distance": 70000,
+ "name": "CHUNITHMちほー2",
+ "kind": 1
+ },
+ {
+ "id": 305907,
+ "distance": 90000,
+ "name": "メリム",
+ "kind": 9
+ },
+ {
+ "id": 305904,
+ "distance": 130000,
+ "name": "七海 あおい",
+ "kind": 9
+ },
+ {
+ "id": 603,
+ "distance": 160000,
+ "name": "その群青が愛しかったようだった",
+ "kind": 5
+ },
+ {
+ "id": 305905,
+ "distance": 180000,
+ "name": "高砂 瑞穂",
+ "kind": 9
+ },
+ {
+ "id": 627,
+ "distance": 210000,
+ "name": "心象蜃気楼",
+ "kind": 5
+ },
+ {
+ "id": 305906,
+ "distance": 230000,
+ "name": "アストライア",
+ "kind": 9
+ },
+ {
+ "id": 719,
+ "distance": 260000,
+ "name": "エンドマークに希望と涙を添えて",
+ "kind": 5
+ },
+ {
+ "id": 305902,
+ "distance": 300000,
+ "name": "哲学主 ジェフティ",
+ "kind": 9
+ },
+ {
+ "id": 11478,
+ "distance": 380000,
+ "name": "電光石火",
+ "kind": 5
+ },
+ {
+ "id": 305903,
+ "distance": 420000,
+ "name": "憎悪の始まりたる古竜",
+ "kind": 9
+ },
+ {
+ "id": 11479,
+ "distance": 550000,
+ "name": "Hainuwele",
+ "kind": 5
+ },
+ {
+ "id": 305901,
+ "distance": 600000,
+ "name": "CHUNITHMちほー2",
+ "kind": 11
+ }
+ ]
+ },
+ {
+ "mapId": 300060,
+ "name": "syudouちほー",
+ "treasure": [
+ {
+ "id": 306001,
+ "distance": 0,
+ "name": "キュートなカノジョ",
+ "kind": 9
+ },
+ {
+ "id": 11510,
+ "distance": 30000,
+ "name": "キュートなカノジョ",
+ "kind": 5
+ },
+ {
+ "id": 306003,
+ "distance": 40000,
+ "name": "アマノ ダイキ",
+ "kind": 9
+ },
+ {
+ "id": 11121,
+ "distance": 70000,
+ "name": "ビターチョコデコレーション",
+ "kind": 5
+ },
+ {
+ "id": 306002,
+ "distance": 90000,
+ "name": "ユウヤ",
+ "kind": 9
+ },
+ {
+ "id": 11511,
+ "distance": 120000,
+ "name": "へべれけジャンキー",
+ "kind": 5
+ },
+ {
+ "id": 306004,
+ "distance": 150000,
+ "name": "ユウヤ(へべれけ)",
+ "kind": 9
+ },
+ {
+ "id": 11105,
+ "distance": 180000,
+ "name": "ワードワードワード",
+ "kind": 5
+ },
+ {
+ "id": 306001,
+ "distance": 230000,
+ "name": "syudouちほー",
+ "kind": 1
+ },
+ {
+ "id": 306005,
+ "distance": 270000,
+ "name": "syudou",
+ "kind": 9
+ },
+ {
+ "id": 306001,
+ "distance": 350000,
+ "name": "syudouちほー",
+ "kind": 11
+ }
+ ]
+ },
+ {
+ "mapId": 300061,
+ "name": "Arcaeaちほー2",
+ "treasure": [
+ {
+ "id": 306101,
+ "distance": 0,
+ "name": "光/Fracture",
+ "kind": 9
+ },
+ {
+ "id": 306102,
+ "distance": 30000,
+ "name": "対立/Tempest",
+ "kind": 9
+ },
+ {
+ "id": 11514,
+ "distance": 60000,
+ "name": "Lost Desire",
+ "kind": 5
+ },
+ {
+ "id": 306101,
+ "distance": 160000,
+ "name": "光/Fracture",
+ "kind": 11
+ },
+ {
+ "id": 306103,
+ "distance": 190000,
+ "name": "アリス&テニエル",
+ "kind": 9
+ },
+ {
+ "id": 11524,
+ "distance": 220000,
+ "name": "Alice's Suitcase",
+ "kind": 5
+ },
+ {
+ "id": 306102,
+ "distance": 320000,
+ "name": "対立/Tempest",
+ "kind": 11
+ },
+ {
+ "id": 306104,
+ "distance": 350000,
+ "name": "ラグランジュ",
+ "kind": 9
+ },
+ {
+ "id": 11516,
+ "distance": 500000,
+ "name": "Aegleseeker",
+ "kind": 5
+ },
+ {
+ "id": 306101,
+ "distance": 550000,
+ "name": "Arcaeaちほー2",
+ "kind": 1
+ },
+ {
+ "id": 306103,
+ "distance": 650000,
+ "name": "アリス",
+ "kind": 11
+ },
+ {
+ "id": 11517,
+ "distance": 800000,
+ "name": "最強STRONGER",
+ "kind": 5
+ },
+ {
+ "id": 306104,
+ "distance": 900000,
+ "name": "ラグランジュ",
+ "kind": 11
+ }
+ ]
+ },
+ {
+ "mapId": 350001,
+ "name": "ハピフェスちほー2",
+ "treasure": [
+ {
+ "id": 350101,
+ "distance": 0,
+ "name": "ラズ(ツムギボシ)",
+ "kind": 9
+ },
+ {
+ "id": 11526,
+ "distance": 30000,
+ "name": "トノサマビーム",
+ "kind": 5
+ },
+ {
+ "id": 350102,
+ "distance": 70000,
+ "name": "シフォン(ツムギボシ)",
+ "kind": 9
+ },
+ {
+ "id": 11527,
+ "distance": 120000,
+ "name": "enchanted wanderer",
+ "kind": 5
+ },
+ {
+ "id": 350103,
+ "distance": 170000,
+ "name": "ソルト(ツムギボシ)",
+ "kind": 9
+ },
+ {
+ "id": 350101,
+ "distance": 230000,
+ "name": "ハピフェスちほー2",
+ "kind": 1
+ },
+ {
+ "id": 350104,
+ "distance": 290000,
+ "name": "ダンディ・ダン(ツムギボシ)",
+ "kind": 9
+ },
+ {
+ "id": 11528,
+ "distance": 360000,
+ "name": "Comet Panto Men!",
+ "kind": 5
+ },
+ {
+ "id": 350105,
+ "distance": 440000,
+ "name": "エリザビー(ツムギボシ)",
+ "kind": 9
+ },
+ {
+ "id": 11529,
+ "distance": 700000,
+ "name": "ツムギボシ ハピフェスちほー2 チャレンジ1",
+ "kind": 5
+ },
+ {
+ "id": 350101,
+ "distance": 800000,
+ "name": "ハピフェスちほー2",
+ "kind": 11
+ }
+ ]
+ },
+ {
+ "mapId": 350003,
+ "name": "スカイストリートちほー4",
+ "treasure": [
+ {
+ "id": 350301,
+ "distance": 0,
+ "name": "アカツキ",
+ "kind": 9
+ },
+ {
+ "id": 11538,
+ "distance": 30000,
+ "name": "アンバークロニクル",
+ "kind": 5
+ },
+ {
+ "id": 350302,
+ "distance": 70000,
+ "name": "ノア(過去)",
+ "kind": 9
+ },
+ {
+ "id": 350301,
+ "distance": 150000,
+ "name": "スカイストリートちほー4",
+ "kind": 1
+ },
+ {
+ "id": 11539,
+ "distance": 250000,
+ "name": "リフヴェイン",
+ "kind": 5
+ },
+ {
+ "id": 350303,
+ "distance": 300000,
+ "name": "コハク",
+ "kind": 9
+ },
+ {
+ "id": 11541,
+ "distance": 450000,
+ "name": "宵の鳥",
+ "kind": 5
+ },
+ {
+ "id": 350304,
+ "distance": 530000,
+ "name": "アカツキ(正装)",
+ "kind": 9
+ },
+ {
+ "id": 11540,
+ "distance": 800000,
+ "name": "Kairos スカイストリートちほー4 チャレンジ1",
+ "kind": 5
+ },
+ {
+ "id": 350301,
+ "distance": 900000,
+ "name": "スカイストリートちほー4",
+ "kind": 11
+ }
+ ]
+ },
+ {
+ "mapId": 350004,
+ "name": "ドラゴンちほー2",
+ "treasure": [
+ {
+ "id": 350401,
+ "distance": 0,
+ "name": "アスク",
+ "kind": 9
+ },
+ {
+ "id": 11545,
+ "distance": 100000,
+ "name": "隠密あんみつDX",
+ "kind": 5
+ },
+ {
+ "id": 350402,
+ "distance": 150000,
+ "name": "LED",
+ "kind": 9
+ },
+ {
+ "id": 11546,
+ "distance": 300000,
+ "name": "地球",
+ "kind": 5
+ },
+ {
+ "id": 350401,
+ "distance": 400000,
+ "name": "ドラゴンちほー2",
+ "kind": 1
+ },
+ {
+ "id": 11547,
+ "distance": 600000,
+ "name": "Churros Parlor",
+ "kind": 5
+ },
+ {
+ "id": 350403,
+ "distance": 700000,
+ "name": "エムブラ",
+ "kind": 9
+ },
+ {
+ "id": 11548,
+ "distance": 1000000,
+ "name": "超熊猫的周遊記(ワンダーパンダートラベラー) ドラゴンちほー2 チャレンジ1",
+ "kind": 5
+ },
+ {
+ "id": 350401,
+ "distance": 1111000,
+ "name": "ドラゴンちほー2",
+ "kind": 11
+ }
+ ]
+ },
+ {
+ "mapId": 350005,
+ "name": "フェスティバルちほー2",
+ "treasure": [
+ {
+ "id": 350501,
+ "distance": 3000000,
+ "name": "フェスティバルちほー2",
+ "kind": 1
+ },
+ {
+ "id": 350501,
+ "distance": 20000000,
+ "name": "フェスティバルちほー2",
+ "kind": 11
+ },
+ {
+ "id": 350028,
+ "distance": 25000000,
+ "name": "あなたの実力から逃げるな",
+ "kind": 2
+ },
+ {
+ "id": 350029,
+ "distance": 30000000,
+ "name": "ガッツポーズしたらできた",
+ "kind": 2
+ },
+ {
+ "id": 350030,
+ "distance": 35000000,
+ "name": "そういう需要もある",
+ "kind": 2
+ },
+ {
+ "id": 350031,
+ "distance": 40000000,
+ "name": "中学生辺りが目覚めそう",
+ "kind": 2
+ },
+ {
+ "id": 350032,
+ "distance": 50000000,
+ "name": "緩急の急しかない",
+ "kind": 2
+ },
+ {
+ "id": 350033,
+ "distance": 60000000,
+ "name": "これは天才のアサイン",
+ "kind": 2
+ },
+ {
+ "id": 350034,
+ "distance": 70000000,
+ "name": "信用可能人物",
+ "kind": 2
+ },
+ {
+ "id": 350035,
+ "distance": 80000000,
+ "name": "「「致命的で草」」",
+ "kind": 2
+ },
+ {
+ "id": 350036,
+ "distance": 90000000,
+ "name": "オレはいったい何をしてるんだろう",
+ "kind": 2
+ },
+ {
+ "id": 350037,
+ "distance": 100000000,
+ "name": "289年後に販売されます",
+ "kind": 2
+ }
+ ]
+ },
+ {
+ "mapId": 350006,
+ "name": "BLACK ROSEちほー8",
+ "treasure": [
+ {
+ "id": 350601,
+ "distance": 0,
+ "name": "ルイ(幼少期)",
+ "kind": 9
+ },
+ {
+ "id": 11532,
+ "distance": 30000,
+ "name": "ヱデン",
+ "kind": 5
+ },
+ {
+ "id": 350602,
+ "distance": 70000,
+ "name": "SDニック",
+ "kind": 9
+ },
+ {
+ "id": 350603,
+ "distance": 110000,
+ "name": "SDブラット",
+ "kind": 9
+ },
+ {
+ "id": 350604,
+ "distance": 150000,
+ "name": "SDアウル",
+ "kind": 9
+ },
+ {
+ "id": 350601,
+ "distance": 200000,
+ "name": "BLACK ROSEちほー8",
+ "kind": 1
+ },
+ {
+ "id": 350605,
+ "distance": 250000,
+ "name": "ニック&ブラット",
+ "kind": 9
+ },
+ {
+ "id": 11533,
+ "distance": 400000,
+ "name": "にゃーにゃー冒険譚",
+ "kind": 5
+ },
+ {
+ "id": 350601,
+ "distance": 500000,
+ "name": "BLACK ROSEちほー8",
+ "kind": 11
+ }
+ ]
+ },
+ {
+ "mapId": 350007,
+ "name": "10周年記念ちほー2",
+ "treasure": [
+ {
+ "id": 350701,
+ "distance": 0,
+ "name": "でらっくま(10周年)",
+ "kind": 9
+ },
+ {
+ "id": 350702,
+ "distance": 12000,
+ "name": "らいむっくま(10周年)",
+ "kind": 9
+ },
+ {
+ "id": 350703,
+ "distance": 24000,
+ "name": "れもんっくま(10周年)",
+ "kind": 9
+ },
+ {
+ "id": 11542,
+ "distance": 36000,
+ "name": "ここからはじまるプロローグ。 (Kanon Remix)",
+ "kind": 5
+ },
+ {
+ "id": 350704,
+ "distance": 50000,
+ "name": "ラズ(10周年)",
+ "kind": 9
+ },
+ {
+ "id": 350705,
+ "distance": 65000,
+ "name": "シフォン(10周年)",
+ "kind": 9
+ },
+ {
+ "id": 350706,
+ "distance": 80000,
+ "name": "ソルト(10周年)",
+ "kind": 9
+ },
+ {
+ "id": 350707,
+ "distance": 95000,
+ "name": "乙姫(10周年)",
+ "kind": 9
+ },
+ {
+ "id": 350708,
+ "distance": 110000,
+ "name": "みるく(10周年)",
+ "kind": 9
+ },
+ {
+ "id": 350709,
+ "distance": 125000,
+ "name": "しゃま(10周年)",
+ "kind": 9
+ },
+ {
+ "id": 350701,
+ "distance": 160000,
+ "name": "10周年記念ちほー2",
+ "kind": 1
+ },
+ {
+ "id": 350710,
+ "distance": 180000,
+ "name": "maimaiちゃん(10周年)",
+ "kind": 9
+ },
+ {
+ "id": 350711,
+ "distance": 200000,
+ "name": "はっぴー(10周年)",
+ "kind": 9
+ },
+ {
+ "id": 350712,
+ "distance": 220000,
+ "name": "カメ(10周年)",
+ "kind": 9
+ },
+ {
+ "id": 350713,
+ "distance": 240000,
+ "name": "タイ(10周年)",
+ "kind": 9
+ },
+ {
+ "id": 350714,
+ "distance": 260000,
+ "name": "ニャイン(10周年)",
+ "kind": 9
+ },
+ {
+ "id": 350715,
+ "distance": 280000,
+ "name": "ナカムラさん(10周年)",
+ "kind": 9
+ },
+ {
+ "id": 350716,
+ "distance": 300000,
+ "name": "ブクロ(10周年)",
+ "kind": 9
+ },
+ {
+ "id": 11543,
+ "distance": 400000,
+ "name": "モ°ルモ°ル (MZK Skippin' Remix)",
+ "kind": 5
+ },
+ {
+ "id": 350717,
+ "distance": 425000,
+ "name": "maimai筐体",
+ "kind": 9
+ },
+ {
+ "id": 350718,
+ "distance": 450000,
+ "name": "maimai筐体(GreeN)",
+ "kind": 9
+ },
+ {
+ "id": 350719,
+ "distance": 475000,
+ "name": "maimai筐体(ORANGE)",
+ "kind": 9
+ },
+ {
+ "id": 350720,
+ "distance": 500000,
+ "name": "maimai筐体(PiNK)",
+ "kind": 9
+ },
+ {
+ "id": 350721,
+ "distance": 525000,
+ "name": "maimai筐体(MURASAKi)",
+ "kind": 9
+ },
+ {
+ "id": 350722,
+ "distance": 550000,
+ "name": "maimai筐体(MiLK)",
+ "kind": 9
+ },
+ {
+ "id": 350723,
+ "distance": 580000,
+ "name": "maimai筐体(FiNALE)",
+ "kind": 9
+ },
+ {
+ "id": 350724,
+ "distance": 610000,
+ "name": "maimai筐体(でらっくす)",
+ "kind": 9
+ },
+ {
+ "id": 350725,
+ "distance": 640000,
+ "name": "maimai筐体(Splash)",
+ "kind": 9
+ },
+ {
+ "id": 350726,
+ "distance": 670000,
+ "name": "maimai筐体(UNiVERSE)",
+ "kind": 9
+ },
+ {
+ "id": 350727,
+ "distance": 700000,
+ "name": "maimai筐体(FESTiVAL)",
+ "kind": 9
+ },
+ {
+ "id": 11544,
+ "distance": 1000000,
+ "name": "VERTeX (rintaro soma deconstructed remix) 10周年記念ちほー チャレンジ1",
+ "kind": 5
+ },
+ {
+ "id": 350701,
+ "distance": 1111000,
+ "name": "10周年記念ちほー2",
+ "kind": 11
+ }
+ ]
+ },
+ {
+ "mapId": 350051,
+ "name": "ヒメヒナちほー",
+ "treasure": [
+ {
+ "id": 355101,
+ "distance": 0,
+ "name": "田中ヒメ",
+ "kind": 9
+ },
+ {
+ "id": 355104,
+ "distance": 8000,
+ "name": "鈴木ヒナ",
+ "kind": 9
+ },
+ {
+ "id": 11555,
+ "distance": 25000,
+ "name": "ヒバリ",
+ "kind": 5
+ },
+ {
+ "id": 355101,
+ "distance": 30000,
+ "name": "ヒメヒナちほー",
+ "kind": 1
+ },
+ {
+ "id": 355102,
+ "distance": 50000,
+ "name": "田中ヒメ(藍の華)",
+ "kind": 9
+ },
+ {
+ "id": 355105,
+ "distance": 70000,
+ "name": "鈴木ヒナ(藍の華)",
+ "kind": 9
+ },
+ {
+ "id": 11557,
+ "distance": 100000,
+ "name": "不機嫌なスリーカード",
+ "kind": 5
+ },
+ {
+ "id": 355101,
+ "distance": 110000,
+ "name": "ヒメヒナちほー その1",
+ "kind": 11
+ },
+ {
+ "id": 355103,
+ "distance": 140000,
+ "name": "田中ヒメ(希織歌)",
+ "kind": 9
+ },
+ {
+ "id": 355106,
+ "distance": 170000,
+ "name": "鈴木ヒナ(希織歌)",
+ "kind": 9
+ },
+ {
+ "id": 11556,
+ "distance": 220000,
+ "name": "Hello, Hologram",
+ "kind": 5
+ },
+ {
+ "id": 355102,
+ "distance": 230000,
+ "name": "ヒメヒナちほー その2",
+ "kind": 11
+ }
+ ]
+ },
+ {
+ "mapId": 350052,
+ "name": "ピノキオピーちほー",
+ "treasure": [
+ {
+ "id": 355201,
+ "distance": 0,
+ "name": "シスター(神っぽいな)",
+ "kind": 9
+ },
+ {
+ "id": 11558,
+ "distance": 25000,
+ "name": "神っぽいな",
+ "kind": 5
+ },
+ {
+ "id": 355201,
+ "distance": 30000,
+ "name": "ピノキオピーちほー",
+ "kind": 1
+ },
+ {
+ "id": 355203,
+ "distance": 40000,
+ "name": "アイマイナ",
+ "kind": 9
+ },
+ {
+ "id": 11337,
+ "distance": 70000,
+ "name": "セカイはまだ始まってすらいない",
+ "kind": 5
+ },
+ {
+ "id": 355201,
+ "distance": 80000,
+ "name": "ピノキオピーちほー その1",
+ "kind": 11
+ },
+ {
+ "id": 355204,
+ "distance": 100000,
+ "name": "どうしてちゃん",
+ "kind": 9
+ },
+ {
+ "id": 448,
+ "distance": 130000,
+ "name": "ありふれたせかいせいふく",
+ "kind": 5
+ },
+ {
+ "id": 355202,
+ "distance": 140000,
+ "name": "ピノキオピーちほー その2",
+ "kind": 11
+ },
+ {
+ "id": 355205,
+ "distance": 160000,
+ "name": "アルティメットセンパイ",
+ "kind": 9
+ },
+ {
+ "id": 11274,
+ "distance": 200000,
+ "name": "アルティメットセンパイ",
+ "kind": 5
+ },
+ {
+ "id": 355203,
+ "distance": 210000,
+ "name": "ピノキオピーちほー その3",
+ "kind": 11
+ },
+ {
+ "id": 355202,
+ "distance": 240000,
+ "name": "魔法少女(魔法少女とチョコレゐト)",
+ "kind": 9
+ },
+ {
+ "id": 11559,
+ "distance": 300000,
+ "name": "魔法少女とチョコレゐト",
+ "kind": 5
+ },
+ {
+ "id": 355206,
+ "distance": 310000,
+ "name": "ピノキオピー",
+ "kind": 9
+ },
+ {
+ "id": 355204,
+ "distance": 400000,
+ "name": "ピノキオピーちほー その4",
+ "kind": 11
+ }
+ ]
+ },
+ {
+ "mapId": 350053,
+ "name": "Muse Dashちほー",
+ "treasure": [
+ {
+ "id": 355301,
+ "distance": 0,
+ "name": "リン(ベーシスト)",
+ "kind": 9
+ },
+ {
+ "id": 355303,
+ "distance": 25000,
+ "name": "ブロウ(パイロット)",
+ "kind": 9
+ },
+ {
+ "id": 355305,
+ "distance": 50000,
+ "name": "マリヤ(バイオリニスト)",
+ "kind": 9
+ },
+ {
+ "id": 355301,
+ "distance": 80000,
+ "name": "Muse Dashちほー",
+ "kind": 1
+ },
+ {
+ "id": 11571,
+ "distance": 130000,
+ "name": "Lights of Muse",
+ "kind": 5
+ },
+ {
+ "id": 355301,
+ "distance": 145000,
+ "name": "Muse Dashちほー その1",
+ "kind": 11
+ },
+ {
+ "id": 355302,
+ "distance": 170000,
+ "name": "リン(不良少女)",
+ "kind": 9
+ },
+ {
+ "id": 11572,
+ "distance": 220000,
+ "name": "tape/stop/night",
+ "kind": 5
+ },
+ {
+ "id": 355302,
+ "distance": 235000,
+ "name": "Muse Dashちほー その2",
+ "kind": 11
+ },
+ {
+ "id": 355306,
+ "distance": 260000,
+ "name": "マリヤ(小悪魔)",
+ "kind": 9
+ },
+ {
+ "id": 11573,
+ "distance": 310000,
+ "name": "Final Step!",
+ "kind": 5
+ },
+ {
+ "id": 355303,
+ "distance": 325000,
+ "name": "Muse Dashちほー その3",
+ "kind": 11
+ },
+ {
+ "id": 355304,
+ "distance": 350000,
+ "name": "ブロウ(ゾンビガール)",
+ "kind": 9
+ },
+ {
+ "id": 11574,
+ "distance": 400000,
+ "name": "The 90's Decision",
+ "kind": 5
+ },
+ {
+ "id": 355304,
+ "distance": 420000,
+ "name": "Muse Dashちほー その4",
+ "kind": 11
+ },
+ {
+ "id": 11575,
+ "distance": 470000,
+ "name": "僕の和風本当上手",
+ "kind": 5
+ },
+ {
+ "id": 355307,
+ "distance": 500000,
+ "name": "リン(ニャ宇宙!)",
+ "kind": 9
+ },
+ {
+ "id": 355308,
+ "distance": 530000,
+ "name": "ブロウ(ニャ宇宙!)",
+ "kind": 9
+ },
+ {
+ "id": 355309,
+ "distance": 560000,
+ "name": "マリヤ(ニャ宇宙!)",
+ "kind": 9
+ },
+ {
+ "id": 11576,
+ "distance": 650000,
+ "name": "Cthugha",
+ "kind": 5
+ },
+ {
+ "id": 355305,
+ "distance": 660000,
+ "name": "Muse Dashちほー その5",
+ "kind": 11
+ }
+ ]
+ },
+ {
+ "mapId": 350054,
+ "name": "東方Project×イロドリミドリちほー",
+ "treasure": [
+ {
+ "id": 355401,
+ "distance": 0,
+ "name": "明坂 芹菜(東方Project:射命丸 文)",
+ "kind": 9
+ },
+ {
+ "id": 355402,
+ "distance": 20000,
+ "name": "御形 アリシアナ(東方Project:小野塚 小町)",
+ "kind": 9
+ },
+ {
+ "id": 355403,
+ "distance": 40000,
+ "name": "天王洲 なずな(東方Project:風見 幽香)",
+ "kind": 9
+ },
+ {
+ "id": 355401,
+ "distance": 110000,
+ "name": "東方Project×イロドリミドリちほー その1",
+ "kind": 1
+ },
+ {
+ "id": 355404,
+ "distance": 130000,
+ "name": "小仏 凪(東方Project:四季映姫・ヤマザナドゥ)",
+ "kind": 9
+ },
+ {
+ "id": 355405,
+ "distance": 150000,
+ "name": "箱部 なる(東方Project:チルノ ウソテイver.)",
+ "kind": 9
+ },
+ {
+ "id": 355407,
+ "distance": 170000,
+ "name": "月鈴 白奈(東方Project:鈴仙・優曇華院・イナバ)",
+ "kind": 9
+ },
+ {
+ "id": 355406,
+ "distance": 190000,
+ "name": "月鈴 那知(東方Project:因幡 てゐ)",
+ "kind": 9
+ },
+ {
+ "id": 11604,
+ "distance": 260000,
+ "name": "『ウソテイ』 ~一回戦せりなvsしろなvsなずな~",
+ "kind": 5
+ },
+ {
+ "id": 355402,
+ "distance": 270000,
+ "name": "東方Project×イロドリミドリちほー その2",
+ "kind": 1
+ },
+ {
+ "id": 355408,
+ "distance": 300000,
+ "name": "明坂 芹菜(東方Project:蓬莱山 輝夜)",
+ "kind": 9
+ },
+ {
+ "id": 355409,
+ "distance": 330000,
+ "name": "御形 アリシアナ(東方Project:八意 永琳)",
+ "kind": 9
+ },
+ {
+ "id": 355410,
+ "distance": 360000,
+ "name": "天王洲 なずな(東方Project:因幡 てゐ)",
+ "kind": 9
+ },
+ {
+ "id": 11603,
+ "distance": 440000,
+ "name": "つるぺったん",
+ "kind": 5
+ },
+ {
+ "id": 355403,
+ "distance": 450000,
+ "name": "東方Project×イロドリミドリちほー その3",
+ "kind": 1
+ },
+ {
+ "id": 355411,
+ "distance": 480000,
+ "name": "小仏 凪(東方Project:博麗 霊夢)",
+ "kind": 9
+ },
+ {
+ "id": 355412,
+ "distance": 510000,
+ "name": "箱部 なる(東方Project:チルノ)",
+ "kind": 9
+ },
+ {
+ "id": 355414,
+ "distance": 540000,
+ "name": "月鈴 白奈(東方Project:霧雨 魔理沙)",
+ "kind": 9
+ },
+ {
+ "id": 355413,
+ "distance": 570000,
+ "name": "月鈴 那知(東方Project:伊吹 萃香)",
+ "kind": 9
+ },
+ {
+ "id": 11605,
+ "distance": 660000,
+ "name": "Bad Apple!! feat.nomico ~五十嵐 撫子 Ver.~",
+ "kind": 5
+ },
+ {
+ "id": 355401,
+ "distance": 670000,
+ "name": "東方Project×イロドリミドリちほー",
+ "kind": 11
+ }
+ ]
+ },
+ {
+ "mapId": 350055,
+ "name": "MEGAREXちほー",
+ "treasure": [
+ {
+ "id": 355501,
+ "distance": 0,
+ "name": "御伽野ひめ",
+ "kind": 9
+ },
+ {
+ "id": 11584,
+ "distance": 25000,
+ "name": "コンティニュー! feat. 藍月なくる",
+ "kind": 5
+ },
+ {
+ "id": 355502,
+ "distance": 50000,
+ "name": "ハイテックニンジャ",
+ "kind": 9
+ },
+ {
+ "id": 355504,
+ "distance": 75000,
+ "name": "まめゆ",
+ "kind": 9
+ },
+ {
+ "id": 11585,
+ "distance": 130000,
+ "name": "Sunday Night feat Kanata.N",
+ "kind": 5
+ },
+ {
+ "id": 355501,
+ "distance": 140000,
+ "name": "MEGAREXちほー",
+ "kind": 1
+ },
+ {
+ "id": 355503,
+ "distance": 170000,
+ "name": "ぱんしー",
+ "kind": 9
+ },
+ {
+ "id": 11586,
+ "distance": 250000,
+ "name": "PERSONA feat. PANXI",
+ "kind": 5
+ },
+ {
+ "id": 355506,
+ "distance": 285000,
+ "name": "ナーガ・ネギ",
+ "kind": 9
+ },
+ {
+ "id": 355505,
+ "distance": 320000,
+ "name": "ダッコ & パンセ",
+ "kind": 9
+ },
+ {
+ "id": 11589,
+ "distance": 420000,
+ "name": "DROPS feat. Such",
+ "kind": 5
+ },
+ {
+ "id": 355501,
+ "distance": 430000,
+ "name": "MEGAREXちほー その1",
+ "kind": 11
+ },
+ {
+ "id": 355507,
+ "distance": 470000,
+ "name": "ネコらぴす",
+ "kind": 9
+ },
+ {
+ "id": 355508,
+ "distance": 510000,
+ "name": "ネコまめゆねこ",
+ "kind": 9
+ },
+ {
+ "id": 355509,
+ "distance": 550000,
+ "name": "ネコぽよし",
+ "kind": 9
+ },
+ {
+ "id": 11588,
+ "distance": 680000,
+ "name": "Complex Mind",
+ "kind": 5
+ },
+ {
+ "id": 355510,
+ "distance": 730000,
+ "name": "ジン・スサノ",
+ "kind": 9
+ },
+ {
+ "id": 11587,
+ "distance": 900000,
+ "name": "Halfway(>∀<)",
+ "kind": 5
+ },
+ {
+ "id": 355502,
+ "distance": 910000,
+ "name": "MEGAREXちほー その2",
+ "kind": 11
+ }
+ ]
+ },
+ {
+ "mapId": 350056,
+ "name": "からめるちほー2",
+ "treasure": [
+ {
+ "id": 355601,
+ "distance": 0,
+ "name": "ねこ",
+ "kind": 9
+ },
+ {
+ "id": 355602,
+ "distance": 10000,
+ "name": "ぐるん",
+ "kind": 9
+ },
+ {
+ "id": 355601,
+ "distance": 20000,
+ "name": "からめるちほー2 その1",
+ "kind": 1
+ },
+ {
+ "id": 355603,
+ "distance": 30000,
+ "name": "ペンギン",
+ "kind": 9
+ },
+ {
+ "id": 355604,
+ "distance": 40000,
+ "name": "ウーパールーパー",
+ "kind": 9
+ },
+ {
+ "id": 11590,
+ "distance": 60000,
+ "name": "あつすぎの歌",
+ "kind": 5
+ },
+ {
+ "id": 355601,
+ "distance": 70000,
+ "name": "からめるちほー2 その1",
+ "kind": 11
+ },
+ {
+ "id": 355605,
+ "distance": 90000,
+ "name": "デンゲンくん",
+ "kind": 9
+ },
+ {
+ "id": 355602,
+ "distance": 110000,
+ "name": "からめるちほー2 その2",
+ "kind": 1
+ },
+ {
+ "id": 355606,
+ "distance": 130000,
+ "name": "うさぎくん",
+ "kind": 9
+ },
+ {
+ "id": 355607,
+ "distance": 150000,
+ "name": "いぬくん",
+ "kind": 9
+ },
+ {
+ "id": 10734,
+ "distance": 180000,
+ "name": "ENERGY SYNERGY MATRIX",
+ "kind": 5
+ },
+ {
+ "id": 355602,
+ "distance": 190000,
+ "name": "からめるちほー2 その2",
+ "kind": 11
+ },
+ {
+ "id": 355608,
+ "distance": 220000,
+ "name": "あんはっぴーちゃん",
+ "kind": 9
+ },
+ {
+ "id": 355609,
+ "distance": 250000,
+ "name": "野生のでらっくま",
+ "kind": 9
+ },
+ {
+ "id": 355603,
+ "distance": 280000,
+ "name": "からめるちほー2 その3",
+ "kind": 1
+ },
+ {
+ "id": 11390,
+ "distance": 320000,
+ "name": "OTOGEMA",
+ "kind": 5
+ },
+ {
+ "id": 355603,
+ "distance": 330000,
+ "name": "からめるちほー2 その3",
+ "kind": 11
+ },
+ {
+ "id": 355610,
+ "distance": 399000,
+ "name": "右肩",
+ "kind": 9
+ },
+ {
+ "id": 355611,
+ "distance": 400000,
+ "name": "真ん中",
+ "kind": 9
+ },
+ {
+ "id": 355612,
+ "distance": 401000,
+ "name": "左肩",
+ "kind": 9
+ },
+ {
+ "id": 355604,
+ "distance": 450000,
+ "name": "からめるちほー2 その4",
+ "kind": 1
+ },
+ {
+ "id": 11591,
+ "distance": 700000,
+ "name": "ULTRA SYNERGY MATRIX",
+ "kind": 5
+ },
+ {
+ "id": 355604,
+ "distance": 710000,
+ "name": "からめるちほー2 その4",
+ "kind": 11
+ }
+ ]
+ },
+ {
+ "mapId": 350057,
+ "name": "音楽的同位体 可不ちほー",
+ "treasure": [
+ {
+ "id": 355701,
+ "distance": 0,
+ "name": "可不",
+ "kind": 9
+ },
+ {
+ "id": 11592,
+ "distance": 25000,
+ "name": "花となれ",
+ "kind": 5
+ },
+ {
+ "id": 355702,
+ "distance": 50000,
+ "name": "可不(花となれ)",
+ "kind": 9
+ },
+ {
+ "id": 355701,
+ "distance": 150000,
+ "name": "音楽的同位体 可不ちほー",
+ "kind": 1
+ },
+ {
+ "id": 355703,
+ "distance": 200000,
+ "name": "可不(私のドッペルゲンガー)",
+ "kind": 9
+ },
+ {
+ "id": 11593,
+ "distance": 300000,
+ "name": "私のドッペルゲンガー",
+ "kind": 5
+ },
+ {
+ "id": 355701,
+ "distance": 310000,
+ "name": "音楽的同位体 可不ちほー",
+ "kind": 11
+ }
+ ]
+ },
+ {
+ "mapId": 350058,
+ "name": "オンゲキちほー6",
+ "treasure": [
+ {
+ "id": 355801,
+ "distance": 0,
+ "name": "星咲 あかり(STARRED HEART)",
+ "kind": 9
+ },
+ {
+ "id": 11551,
+ "distance": 30000,
+ "name": "STARRED HEART",
+ "kind": 5
+ },
+ {
+ "id": 355802,
+ "distance": 50000,
+ "name": "結城 莉玖(STARRED HEART)",
+ "kind": 9
+ },
+ {
+ "id": 355804,
+ "distance": 70000,
+ "name": "九條 楓(STARRED HEART)",
+ "kind": 9
+ },
+ {
+ "id": 11552,
+ "distance": 100000,
+ "name": "Y.Y.Y.計画!!!!",
+ "kind": 5
+ },
+ {
+ "id": 355803,
+ "distance": 130000,
+ "name": "珠洲島 有栖(STARRED HEART)",
+ "kind": 9
+ },
+ {
+ "id": 355805,
+ "distance": 160000,
+ "name": "東雲 つむぎ(STARRED HEART)",
+ "kind": 9
+ },
+ {
+ "id": 355801,
+ "distance": 200000,
+ "name": "R.B.P.",
+ "kind": 1
+ },
+ {
+ "id": 355808,
+ "distance": 230000,
+ "name": "九條 楓(シュータードレス)",
+ "kind": 9
+ },
+ {
+ "id": 355806,
+ "distance": 260000,
+ "name": "逢坂 茜(シュータードレス)",
+ "kind": 9
+ },
+ {
+ "id": 355807,
+ "distance": 380000,
+ "name": "珠洲島 有栖(シュータードレス)",
+ "kind": 9
+ },
+ {
+ "id": 355809,
+ "distance": 410000,
+ "name": "皇城 セツナ(シュータードレス)",
+ "kind": 9
+ },
+ {
+ "id": 11554,
+ "distance": 600000,
+ "name": "LAMIA",
+ "kind": 5
+ },
+ {
+ "id": 355801,
+ "distance": 610000,
+ "name": "オンゲキちほー6",
+ "kind": 11
+ }
+ ]
+ },
+ {
+ "mapId": 400001,
+ "name": "パーリィちほー",
+ "treasure": [
+ {
+ "id": 400101,
+ "distance": 0,
+ "name": "乙姫(ばでぃーず)",
+ "kind": 9
+ },
+ {
+ "id": 400102,
+ "distance": 15000,
+ "name": "ラズ(ばでぃーず)",
+ "kind": 9
+ },
+ {
+ "id": 11608,
+ "distance": 30000,
+ "name": "NOIZY BOUNCE",
+ "kind": 5
+ },
+ {
+ "id": 400103,
+ "distance": 70000,
+ "name": "SDダンディ・ダン",
+ "kind": 9
+ },
+ {
+ "id": 11609,
+ "distance": 120000,
+ "name": "サンバディ!",
+ "kind": 5
+ },
+ {
+ "id": 400104,
+ "distance": 160000,
+ "name": "SD亀",
+ "kind": 9
+ },
+ {
+ "id": 400105,
+ "distance": 210000,
+ "name": "SD鯛",
+ "kind": 9
+ },
+ {
+ "id": 400101,
+ "distance": 260000,
+ "name": "パーリィちほー",
+ "kind": 1
+ },
+ {
+ "id": 400106,
+ "distance": 330000,
+ "name": "SD光吉 猛修",
+ "kind": 9
+ },
+ {
+ "id": 11610,
+ "distance": 400000,
+ "name": "Horoscope Express",
+ "kind": 5
+ },
+ {
+ "id": 400107,
+ "distance": 500000,
+ "name": "しゃま(Party☆People☆Princess)",
+ "kind": 9
+ },
+ {
+ "id": 400108,
+ "distance": 600000,
+ "name": "みるく(Party☆People☆Princess)",
+ "kind": 9
+ },
+ {
+ "id": 11611,
+ "distance": 700000,
+ "name": "Party☆People☆Princess パーリィちほー チャレンジ",
+ "kind": 5
+ },
+ {
+ "id": 400101,
+ "distance": 800000,
+ "name": "パーリィちほー",
+ "kind": 11
+ }
+ ]
+ },
+ {
+ "mapId": 400002,
+ "name": "メトロポリスちほー7",
+ "treasure": [
+ {
+ "id": 400201,
+ "distance": 0,
+ "name": "プロトタイプI",
+ "kind": 9
+ },
+ {
+ "id": 11615,
+ "distance": 70000,
+ "name": "ぽわわん劇場",
+ "kind": 5
+ },
+ {
+ "id": 400202,
+ "distance": 120000,
+ "name": "ケファ",
+ "kind": 9
+ },
+ {
+ "id": 11616,
+ "distance": 220000,
+ "name": "my flow",
+ "kind": 5
+ },
+ {
+ "id": 400203,
+ "distance": 300000,
+ "name": "バルトルメ",
+ "kind": 9
+ },
+ {
+ "id": 400201,
+ "distance": 380000,
+ "name": "メトロポリスちほー7",
+ "kind": 1
+ },
+ {
+ "id": 400204,
+ "distance": 460000,
+ "name": "マトフェイ",
+ "kind": 9
+ },
+ {
+ "id": 11617,
+ "distance": 600000,
+ "name": "POWER OF UNITY",
+ "kind": 5
+ },
+ {
+ "id": 400205,
+ "distance": 700000,
+ "name": "黒姫",
+ "kind": 9
+ },
+ {
+ "id": 11618,
+ "distance": 900000,
+ "name": "Energizing Flame メトロポリスちほー7 チャレンジ",
+ "kind": 5
+ },
+ {
+ "id": 400201,
+ "distance": 1000000,
+ "name": "メトロポリスちほー7",
+ "kind": 11
+ }
+ ]
+ },
+ {
+ "mapId": 400003,
+ "name": "スカイストリートちほー5",
+ "treasure": [
+ {
+ "id": 400301,
+ "distance": 0,
+ "name": "ノア",
+ "kind": 9
+ },
+ {
+ "id": 11620,
+ "distance": 35000,
+ "name": "フェイクフェイス・フェイルセイフ",
+ "kind": 5
+ },
+ {
+ "id": 400302,
+ "distance": 80000,
+ "name": "ソウ",
+ "kind": 9
+ },
+ {
+ "id": 11622,
+ "distance": 150000,
+ "name": "シックスプラン",
+ "kind": 5
+ },
+ {
+ "id": 400303,
+ "distance": 210000,
+ "name": "トキヤ",
+ "kind": 9
+ },
+ {
+ "id": 400301,
+ "distance": 270000,
+ "name": "スカイストリートちほー5",
+ "kind": 1
+ },
+ {
+ "id": 400304,
+ "distance": 330000,
+ "name": "ナノハ",
+ "kind": 9
+ },
+ {
+ "id": 11623,
+ "distance": 500000,
+ "name": "フタタビ",
+ "kind": 5
+ },
+ {
+ "id": 400305,
+ "distance": 600000,
+ "name": "ユウキ",
+ "kind": 9
+ },
+ {
+ "id": 11621,
+ "distance": 800000,
+ "name": "ふらふらふら、 スカイストリートちほー5 チャレンジ",
+ "kind": 5
+ },
+ {
+ "id": 400301,
+ "distance": 900000,
+ "name": "スカイストリートちほー5",
+ "kind": 11
+ }
+ ]
+ },
+ {
+ "mapId": 400004,
+ "name": "7sRefちほー3",
+ "treasure": [
+ {
+ "id": 400401,
+ "distance": 0,
+ "name": "リズ",
+ "kind": 9
+ },
+ {
+ "id": 11535,
+ "distance": 150000,
+ "name": "Redemption",
+ "kind": 5
+ },
+ {
+ "id": 400402,
+ "distance": 200000,
+ "name": "フルーンシュピラー",
+ "kind": 9
+ },
+ {
+ "id": 11536,
+ "distance": 400000,
+ "name": "Ether Second",
+ "kind": 5
+ },
+ {
+ "id": 400403,
+ "distance": 450000,
+ "name": "シュヴァルツローゼ",
+ "kind": 9
+ },
+ {
+ "id": 400401,
+ "distance": 550000,
+ "name": "7sRefちほー3",
+ "kind": 1
+ },
+ {
+ "id": 400404,
+ "distance": 600000,
+ "name": "ヘルブラオ",
+ "kind": 9
+ },
+ {
+ "id": 11534,
+ "distance": 850000,
+ "name": "The Great Banquet",
+ "kind": 5
+ },
+ {
+ "id": 400405,
+ "distance": 900000,
+ "name": "アシッド(幼少期)",
+ "kind": 9
+ },
+ {
+ "id": 11537,
+ "distance": 1300000,
+ "name": "Straight into the lights 7sRefちほー3 チャレンジ",
+ "kind": 5
+ },
+ {
+ "id": 400401,
+ "distance": 1400000,
+ "name": "7sRefちほー3",
+ "kind": 11
+ }
+ ]
+ },
+ {
+ "mapId": 400005,
+ "name": "バディーズちほー",
+ "treasure": [
+ {
+ "id": 400501,
+ "distance": 3000000,
+ "name": "バディーズちほー",
+ "kind": 1
+ },
+ {
+ "id": 400501,
+ "distance": 20000000,
+ "name": "バディーズちほー",
+ "kind": 11
+ },
+ {
+ "id": 400017,
+ "distance": 25000000,
+ "name": "デスメタルハネムーン",
+ "kind": 2
+ },
+ {
+ "id": 400018,
+ "distance": 30000000,
+ "name": "概念化しようかなと思って",
+ "kind": 2
+ },
+ {
+ "id": 400019,
+ "distance": 35000000,
+ "name": "夜残ってたけどどうなったかは謎",
+ "kind": 2
+ },
+ {
+ "id": 400020,
+ "distance": 40000000,
+ "name": "普通に実体だった",
+ "kind": 2
+ },
+ {
+ "id": 400021,
+ "distance": 50000000,
+ "name": "Neo old Style",
+ "kind": 2
+ },
+ {
+ "id": 400022,
+ "distance": 60000000,
+ "name": "オレの仕事道具だよ",
+ "kind": 2
+ },
+ {
+ "id": 400023,
+ "distance": 70000000,
+ "name": "ちゃんとして…チャーン",
+ "kind": 2
+ },
+ {
+ "id": 400024,
+ "distance": 80000000,
+ "name": "なるべくデデーンとでっかい印象",
+ "kind": 2
+ },
+ {
+ "id": 400025,
+ "distance": 90000000,
+ "name": "水曜18時たすけてほしい枠",
+ "kind": 2
+ },
+ {
+ "id": 400026,
+ "distance": 100000000,
+ "name": "もちにもちに",
+ "kind": 2
+ }
+ ]
+ },
+ {
+ "mapId": 400006,
+ "name": "BLACK ROSEちほー9",
+ "treasure": [
+ {
+ "id": 400601,
+ "distance": 0,
+ "name": "フィッツ公",
+ "kind": 9
+ },
+ {
+ "id": 11613,
+ "distance": 30000,
+ "name": "Mystic Parade",
+ "kind": 5
+ },
+ {
+ "id": 400602,
+ "distance": 70000,
+ "name": "マティルダ",
+ "kind": 9
+ },
+ {
+ "id": 400603,
+ "distance": 110000,
+ "name": "クリーノス",
+ "kind": 9
+ },
+ {
+ "id": 400601,
+ "distance": 150000,
+ "name": "BLACK ROSEちほー9",
+ "kind": 1
+ },
+ {
+ "id": 400604,
+ "distance": 200000,
+ "name": "クリーノス(天使)",
+ "kind": 9
+ },
+ {
+ "id": 400605,
+ "distance": 250000,
+ "name": "リッツ(悪魔)",
+ "kind": 9
+ },
+ {
+ "id": 11614,
+ "distance": 400000,
+ "name": "Cry Cry Cry",
+ "kind": 5
+ },
+ {
+ "id": 400601,
+ "distance": 500000,
+ "name": "BLACK ROSEちほー9",
+ "kind": 11
+ }
+ ]
+ },
+ {
+ "mapId": 400051,
+ "name": "いよわちほー",
+ "treasure": [
+ {
+ "id": 405101,
+ "distance": 0,
+ "name": "くらりちゃん",
+ "kind": 9
+ },
+ {
+ "id": 11512,
+ "distance": 25000,
+ "name": "きゅうくらりん",
+ "kind": 5
+ },
+ {
+ "id": 405101,
+ "distance": 30000,
+ "name": "いよわちほー その1",
+ "kind": 11
+ },
+ {
+ "id": 405103,
+ "distance": 40000,
+ "name": "1000年ちゃん",
+ "kind": 9
+ },
+ {
+ "id": 11630,
+ "distance": 65000,
+ "name": "1000年生きてる",
+ "kind": 5
+ },
+ {
+ "id": 405101,
+ "distance": 75000,
+ "name": "いよわちほー",
+ "kind": 1
+ },
+ {
+ "id": 405102,
+ "distance": 90000,
+ "name": "いまわさん",
+ "kind": 9
+ },
+ {
+ "id": 11631,
+ "distance": 120000,
+ "name": "IMAWANOKIWA",
+ "kind": 5
+ },
+ {
+ "id": 405102,
+ "distance": 130000,
+ "name": "いよわちほー その2",
+ "kind": 11
+ },
+ {
+ "id": 405104,
+ "distance": 150000,
+ "name": "足立レイ",
+ "kind": 9
+ },
+ {
+ "id": 11629,
+ "distance": 190000,
+ "name": "熱異常",
+ "kind": 5
+ },
+ {
+ "id": 405105,
+ "distance": 200000,
+ "name": "いよわ",
+ "kind": 9
+ },
+ {
+ "id": 405103,
+ "distance": 220000,
+ "name": "いよわちほー その3",
+ "kind": 11
+ }
+ ]
+ },
+ {
+ "mapId": 400052,
+ "name": "グルーヴコースターちほー",
+ "treasure": [
+ {
+ "id": 405201,
+ "distance": 0,
+ "name": "リンカ",
+ "kind": 9
+ },
+ {
+ "id": 11632,
+ "distance": 30000,
+ "name": "Play merrily NEO",
+ "kind": 5
+ },
+ {
+ "id": 405201,
+ "distance": 40000,
+ "name": "グルーヴコースターちほー その1",
+ "kind": 11
+ },
+ {
+ "id": 405202,
+ "distance": 60000,
+ "name": "セイネ",
+ "kind": 9
+ },
+ {
+ "id": 405203,
+ "distance": 90000,
+ "name": "ユメ",
+ "kind": 9
+ },
+ {
+ "id": 11664,
+ "distance": 120000,
+ "name": "アルカンシエル",
+ "kind": 5
+ },
+ {
+ "id": 405201,
+ "distance": 130000,
+ "name": "グルーヴコースターちほー",
+ "kind": 1
+ },
+ {
+ "id": 405204,
+ "distance": 160000,
+ "name": "ユウ",
+ "kind": 9
+ },
+ {
+ "id": 11633,
+ "distance": 220000,
+ "name": "OMAKENO Stroke",
+ "kind": 5
+ },
+ {
+ "id": 405206,
+ "distance": 260000,
+ "name": "HEADPHONE CRAB",
+ "kind": 9
+ },
+ {
+ "id": 405205,
+ "distance": 300000,
+ "name": "グルーヴコースター筐体",
+ "kind": 9
+ },
+ {
+ "id": 390,
+ "distance": 350000,
+ "name": "Got more raves?",
+ "kind": 5
+ },
+ {
+ "id": 405202,
+ "distance": 360000,
+ "name": "グルーヴコースターちほー その2",
+ "kind": 11
+ }
+ ]
+ },
+ {
+ "mapId": 400053,
+ "name": "ヘブンバーンズレッドちほー",
+ "treasure": [
+ {
+ "id": 405301,
+ "distance": 0,
+ "name": "茅森月歌",
+ "kind": 9
+ },
+ {
+ "id": 405302,
+ "distance": 5000,
+ "name": "和泉ユキ",
+ "kind": 9
+ },
+ {
+ "id": 405303,
+ "distance": 10000,
+ "name": "逢川めぐみ",
+ "kind": 9
+ },
+ {
+ "id": 405304,
+ "distance": 15000,
+ "name": "東城つかさ",
+ "kind": 9
+ },
+ {
+ "id": 405305,
+ "distance": 20000,
+ "name": "朝倉可憐",
+ "kind": 9
+ },
+ {
+ "id": 405306,
+ "distance": 25000,
+ "name": "國見タマ",
+ "kind": 9
+ },
+ {
+ "id": 11639,
+ "distance": 30000,
+ "name": "Burn My Soul",
+ "kind": 5
+ },
+ {
+ "id": 405301,
+ "distance": 40000,
+ "name": "ヘブンバーンズレッドちほー その1",
+ "kind": 1
+ },
+ {
+ "id": 405308,
+ "distance": 60000,
+ "name": "水瀬いちご",
+ "kind": 9
+ },
+ {
+ "id": 405309,
+ "distance": 80000,
+ "name": "水瀬すもも",
+ "kind": 9
+ },
+ {
+ "id": 405310,
+ "distance": 105000,
+ "name": "樋口聖華",
+ "kind": 9
+ },
+ {
+ "id": 405311,
+ "distance": 130000,
+ "name": "柊木梢",
+ "kind": 9
+ },
+ {
+ "id": 405312,
+ "distance": 160000,
+ "name": "ビャッコ",
+ "kind": 9
+ },
+ {
+ "id": 405307,
+ "distance": 190000,
+ "name": "蒼井えりか",
+ "kind": 9
+ },
+ {
+ "id": 405302,
+ "distance": 220000,
+ "name": "ヘブンバーンズレッドちほー その2",
+ "kind": 1
+ },
+ {
+ "id": 405313,
+ "distance": 260000,
+ "name": "七瀬七海",
+ "kind": 9
+ },
+ {
+ "id": 405301,
+ "distance": 300000,
+ "name": "ヘブンバーンズレッドちほー",
+ "kind": 11
+ }
+ ]
+ },
+ {
+ "mapId": 400054,
+ "name": "WACCAちほー",
+ "treasure": [
+ {
+ "id": 405401,
+ "distance": 0,
+ "name": "エリザベス",
+ "kind": 9
+ },
+ {
+ "id": 11640,
+ "distance": 30000,
+ "name": "with U",
+ "kind": 5
+ },
+ {
+ "id": 405401,
+ "distance": 40000,
+ "name": "WACCAちほー その1",
+ "kind": 1
+ },
+ {
+ "id": 405402,
+ "distance": 60000,
+ "name": "リリィ",
+ "kind": 9
+ },
+ {
+ "id": 11641,
+ "distance": 110000,
+ "name": "Love Kills U",
+ "kind": 5
+ },
+ {
+ "id": 405403,
+ "distance": 150000,
+ "name": "ルーン",
+ "kind": 9
+ },
+ {
+ "id": 11565,
+ "distance": 200000,
+ "name": "Let you DIVE!",
+ "kind": 5
+ },
+ {
+ "id": 405401,
+ "distance": 210000,
+ "name": "WACCAちほー その1",
+ "kind": 11
+ },
+ {
+ "id": 405404,
+ "distance": 250000,
+ "name": "【裏】ルーン",
+ "kind": 9
+ },
+ {
+ "id": 11642,
+ "distance": 320000,
+ "name": "DANGEROOOOUS JUNGLE",
+ "kind": 5
+ },
+ {
+ "id": 405402,
+ "distance": 330000,
+ "name": "WACCAちほー その2",
+ "kind": 11
+ },
+ {
+ "id": 405405,
+ "distance": 390000,
+ "name": "WACCA筐体",
+ "kind": 9
+ },
+ {
+ "id": 11566,
+ "distance": 480000,
+ "name": "Knight Rider",
+ "kind": 5
+ },
+ {
+ "id": 405402,
+ "distance": 490000,
+ "name": "WACCAちほー その2",
+ "kind": 1
+ },
+ {
+ "id": 11643,
+ "distance": 640000,
+ "name": "天使光輪",
+ "kind": 5
+ },
+ {
+ "id": 405403,
+ "distance": 700000,
+ "name": "WACCAちほー その3",
+ "kind": 11
+ }
+ ]
+ },
+ {
+ "mapId": 400056,
+ "name": "sasakure.UKちほー",
+ "treasure": [
+ {
+ "id": 405602,
+ "distance": 0,
+ "name": "テラ(トンデモワンダーズ)",
+ "kind": 9
+ },
+ {
+ "id": 11645,
+ "distance": 25000,
+ "name": "トンデモワンダーズ",
+ "kind": 5
+ },
+ {
+ "id": 405601,
+ "distance": 30000,
+ "name": "sasakure.UKちほー その1",
+ "kind": 1
+ },
+ {
+ "id": 405603,
+ "distance": 40000,
+ "name": "カラス(トンデモワンダーズ)",
+ "kind": 9
+ },
+ {
+ "id": 405601,
+ "distance": 75000,
+ "name": "sasakure.UKちほー その1",
+ "kind": 11
+ },
+ {
+ "id": 836,
+ "distance": 90000,
+ "name": "Good Bye, Mr. Jack",
+ "kind": 5
+ },
+ {
+ "id": 405602,
+ "distance": 100000,
+ "name": "sasakure.UKちほー その2",
+ "kind": 1
+ },
+ {
+ "id": 405604,
+ "distance": 120000,
+ "name": "初音ミク(*ハロー、プラネット。)",
+ "kind": 9
+ },
+ {
+ "id": 10185,
+ "distance": 150000,
+ "name": "*ハロー、プラネット。",
+ "kind": 5
+ },
+ {
+ "id": 405602,
+ "distance": 160000,
+ "name": "sasakure.UKちほー その2",
+ "kind": 11
+ },
+ {
+ "id": 405601,
+ "distance": 180000,
+ "name": "sasakure.UK",
+ "kind": 9
+ },
+ {
+ "id": 11668,
+ "distance": 230000,
+ "name": "PinqPiq (xovevox Remix)",
+ "kind": 5
+ },
+ {
+ "id": 405603,
+ "distance": 240000,
+ "name": "sasakure.UKちほー その3",
+ "kind": 1
+ }
+ ]
+ },
+ {
+ "mapId": 400057,
+ "name": "TJ.hangneilちほー",
+ "treasure": [
+ {
+ "id": 405701,
+ "distance": 0,
+ "name": "TJ.hangneil",
+ "kind": 9
+ },
+ {
+ "id": 11647,
+ "distance": 30000,
+ "name": "ozma",
+ "kind": 5
+ },
+ {
+ "id": 405702,
+ "distance": 60000,
+ "name": "男の子(神威)",
+ "kind": 9
+ },
+ {
+ "id": 405701,
+ "distance": 120000,
+ "name": "TJ.hangneilちほー",
+ "kind": 1
+ },
+ {
+ "id": 405703,
+ "distance": 150000,
+ "name": "女の子(神威)",
+ "kind": 9
+ },
+ {
+ "id": 405701,
+ "distance": 300000,
+ "name": "TJ.hangneilちほー",
+ "kind": 11
+ },
+ {
+ "id": 11646,
+ "distance": 400000,
+ "name": "神威 TJ.hangneilちほー チャレンジ",
+ "kind": 5
+ },
+ {
+ "id": 409505,
+ "distance": 444000,
+ "name": "旅行スタンプ(月面基地)",
+ "kind": 3
+ }
+ ]
+ },
+ {
+ "mapId": 400058,
+ "name": "月面ちほー",
+ "treasure": [
+ {
+ "id": 408259,
+ "distance": 1000,
+ "name": "That's one small step for a man, one giant leap for mankind.",
+ "kind": 2
+ },
+ {
+ "id": 11648,
+ "distance": 100000,
+ "name": "月面基地",
+ "kind": 5
+ },
+ {
+ "id": 408260,
+ "distance": 120000,
+ "name": "S H T R B",
+ "kind": 2
+ },
+ {
+ "id": 408261,
+ "distance": 140000,
+ "name": "E A E K E",
+ "kind": 2
+ },
+ {
+ "id": 408262,
+ "distance": 160000,
+ "name": "E W B M A",
+ "kind": 2
+ },
+ {
+ "id": 408263,
+ "distance": 180000,
+ "name": "A B I N O",
+ "kind": 2
+ },
+ {
+ "id": 408264,
+ "distance": 200000,
+ "name": "◤ M H T O",
+ "kind": 2
+ },
+ {
+ "id": 405801,
+ "distance": 240000,
+ "name": "月面ちほー",
+ "kind": 11
+ }
+ ]
+ },
+ {
+ "mapId": 400059,
+ "name": "裏 月面ちほー",
+ "treasure": [
+ {
+ "id": 405901,
+ "distance": 199000,
+ "name": "宇宙飛行士(Apollo)",
+ "kind": 9
+ },
+ {
+ "id": 11661,
+ "distance": 200000,
+ "name": "Apollo 裏月面ちほー チャレンジ1",
+ "kind": 5
+ },
+ {
+ "id": 405901,
+ "distance": 210000,
+ "name": "裏 月面ちほー その1",
+ "kind": 11
+ },
+ {
+ "id": 11662,
+ "distance": 654000,
+ "name": "Raputa 裏月面ちほー チャレンジ2",
+ "kind": 5
+ },
+ {
+ "id": 405902,
+ "distance": 660000,
+ "name": "裏 月面ちほー その2",
+ "kind": 11
+ },
+ {
+ "id": 408265,
+ "distance": 666000,
+ "name": "project raputa completed",
+ "kind": 2
+ }
+ ]
+ },
+ {
+ "mapId": 400061,
+ "name": "東北ずん子ちほー",
+ "treasure": [
+ {
+ "id": 406101,
+ "distance": 0,
+ "name": "東北ずん子",
+ "kind": 9
+ },
+ {
+ "id": 406103,
+ "distance": 8000,
+ "name": "東北イタコ",
+ "kind": 9
+ },
+ {
+ "id": 11650,
+ "distance": 25000,
+ "name": "ずんだもんの朝食 〜目覚ましずんラップ〜",
+ "kind": 5
+ },
+ {
+ "id": 406101,
+ "distance": 35000,
+ "name": "東北ずん子ちほー その1",
+ "kind": 1
+ },
+ {
+ "id": 406105,
+ "distance": 50000,
+ "name": "東北きりたん",
+ "kind": 9
+ },
+ {
+ "id": 406107,
+ "distance": 65000,
+ "name": "四国めたん",
+ "kind": 9
+ },
+ {
+ "id": 406108,
+ "distance": 80000,
+ "name": "九州そら",
+ "kind": 9
+ },
+ {
+ "id": 406101,
+ "distance": 100000,
+ "name": "東北ずん子ちほー その1",
+ "kind": 11
+ },
+ {
+ "id": 406109,
+ "distance": 120000,
+ "name": "ずんだもん",
+ "kind": 9
+ },
+ {
+ "id": 11651,
+ "distance": 140000,
+ "name": "あなたは世界の終わりにずんだを食べるのだ",
+ "kind": 5
+ },
+ {
+ "id": 406102,
+ "distance": 150000,
+ "name": "東北ずん子ちほー その2",
+ "kind": 1
+ },
+ {
+ "id": 406102,
+ "distance": 180000,
+ "name": "東北ずん子(チア)",
+ "kind": 9
+ },
+ {
+ "id": 406104,
+ "distance": 210000,
+ "name": "東北イタコ(チア)",
+ "kind": 9
+ },
+ {
+ "id": 406106,
+ "distance": 240000,
+ "name": "東北きりたん(チア)",
+ "kind": 9
+ },
+ {
+ "id": 406102,
+ "distance": 280000,
+ "name": "東北ずん子ちほー その2",
+ "kind": 11
+ }
+ ]
+ },
+ {
+ "mapId": 400062,
+ "name": "CHUNITHMちほー3",
+ "treasure": [
+ {
+ "id": 406201,
+ "distance": 0,
+ "name": "縁",
+ "kind": 9
+ },
+ {
+ "id": 11626,
+ "distance": 30000,
+ "name": "Ring",
+ "kind": 5
+ },
+ {
+ "id": 406202,
+ "distance": 50000,
+ "name": "冴川 芽依",
+ "kind": 9
+ },
+ {
+ "id": 406205,
+ "distance": 130000,
+ "name": "ヴェルゼビュートネメシス",
+ "kind": 9
+ },
+ {
+ "id": 11443,
+ "distance": 190000,
+ "name": "8-EM",
+ "kind": 5
+ },
+ {
+ "id": 406206,
+ "distance": 210000,
+ "name": "リヒトシュッツェ",
+ "kind": 9
+ },
+ {
+ "id": 736,
+ "distance": 270000,
+ "name": "World Vanquisher",
+ "kind": 5
+ },
+ {
+ "id": 406201,
+ "distance": 280000,
+ "name": "CHUNITHMちほー3",
+ "kind": 1
+ },
+ {
+ "id": 406204,
+ "distance": 300000,
+ "name": "不来方 とあ",
+ "kind": 9
+ },
+ {
+ "id": 11471,
+ "distance": 360000,
+ "name": "蜘蛛の糸",
+ "kind": 5
+ },
+ {
+ "id": 406203,
+ "distance": 380000,
+ "name": "ロト・トゥエルヴ",
+ "kind": 9
+ },
+ {
+ "id": 11628,
+ "distance": 480000,
+ "name": "WE'RE BACK!!",
+ "kind": 5
+ },
+ {
+ "id": 406201,
+ "distance": 600000,
+ "name": "CHUNITHMちほー3",
+ "kind": 11
+ }
+ ]
+ },
+ {
+ "mapId": 400063,
+ "name": "プロジェクトセカイちほー4",
+ "treasure": [
+ {
+ "id": 406301,
+ "distance": 0,
+ "name": "星乃 一歌",
+ "kind": 9
+ },
+ {
+ "id": 406302,
+ "distance": 8000,
+ "name": "天馬 咲希",
+ "kind": 9
+ },
+ {
+ "id": 406303,
+ "distance": 15000,
+ "name": "望月 穂波",
+ "kind": 9
+ },
+ {
+ "id": 406301,
+ "distance": 25000,
+ "name": "プロジェクトセカイちほー4 星乃 一歌",
+ "kind": 1
+ },
+ {
+ "id": 406304,
+ "distance": 35000,
+ "name": "日野森 志歩",
+ "kind": 9
+ },
+ {
+ "id": 406305,
+ "distance": 50000,
+ "name": "初音ミク(Leo/need)",
+ "kind": 9
+ },
+ {
+ "id": 406301,
+ "distance": 65000,
+ "name": "Leo/need",
+ "kind": 11
+ },
+ {
+ "id": 406306,
+ "distance": 75000,
+ "name": "花里 みのり",
+ "kind": 9
+ },
+ {
+ "id": 406307,
+ "distance": 85000,
+ "name": "桐谷 遥",
+ "kind": 9
+ },
+ {
+ "id": 406308,
+ "distance": 95000,
+ "name": "桃井 愛莉",
+ "kind": 9
+ },
+ {
+ "id": 406302,
+ "distance": 105000,
+ "name": "プロジェクトセカイちほー4 花里 みのり",
+ "kind": 1
+ },
+ {
+ "id": 406309,
+ "distance": 120000,
+ "name": "日野森 雫",
+ "kind": 9
+ },
+ {
+ "id": 406310,
+ "distance": 135000,
+ "name": "初音ミク(MORE MORE JUMP!)",
+ "kind": 9
+ },
+ {
+ "id": 406302,
+ "distance": 150000,
+ "name": "MORE MORE JUMP!",
+ "kind": 11
+ },
+ {
+ "id": 406311,
+ "distance": 160000,
+ "name": "小豆沢 こはね",
+ "kind": 9
+ },
+ {
+ "id": 406312,
+ "distance": 170000,
+ "name": "白石 杏",
+ "kind": 9
+ },
+ {
+ "id": 406313,
+ "distance": 185000,
+ "name": "東雲 彰人",
+ "kind": 9
+ },
+ {
+ "id": 406303,
+ "distance": 200000,
+ "name": "プロジェクトセカイちほー4 小豆沢 こはね",
+ "kind": 1
+ },
+ {
+ "id": 406314,
+ "distance": 210000,
+ "name": "青柳 冬弥",
+ "kind": 9
+ },
+ {
+ "id": 406315,
+ "distance": 225000,
+ "name": "初音ミク(Vivid BAD SQUAD)",
+ "kind": 9
+ },
+ {
+ "id": 11665,
+ "distance": 240000,
+ "name": "RAD DOGS",
+ "kind": 5
+ },
+ {
+ "id": 406303,
+ "distance": 250000,
+ "name": "Vivid BAD SQUAD",
+ "kind": 11
+ },
+ {
+ "id": 406316,
+ "distance": 270000,
+ "name": "天馬 司",
+ "kind": 9
+ },
+ {
+ "id": 406317,
+ "distance": 290000,
+ "name": "鳳 えむ",
+ "kind": 9
+ },
+ {
+ "id": 406318,
+ "distance": 310000,
+ "name": "草薙 寧々",
+ "kind": 9
+ },
+ {
+ "id": 406304,
+ "distance": 330000,
+ "name": "プロジェクトセカイちほー4 天馬 司",
+ "kind": 1
+ },
+ {
+ "id": 406319,
+ "distance": 350000,
+ "name": "神代 類",
+ "kind": 9
+ },
+ {
+ "id": 406320,
+ "distance": 370000,
+ "name": "初音ミク(ワンダーランズ×ショウタイム)",
+ "kind": 9
+ },
+ {
+ "id": 11667,
+ "distance": 390000,
+ "name": "にっこり^^調査隊のテーマ",
+ "kind": 5
+ },
+ {
+ "id": 406304,
+ "distance": 400000,
+ "name": "ワンダーランズ×ショウタイム",
+ "kind": 11
+ },
+ {
+ "id": 406321,
+ "distance": 420000,
+ "name": "宵崎 奏",
+ "kind": 9
+ },
+ {
+ "id": 406322,
+ "distance": 440000,
+ "name": "朝比奈 まふゆ",
+ "kind": 9
+ },
+ {
+ "id": 406323,
+ "distance": 470000,
+ "name": "東雲 絵名",
+ "kind": 9
+ },
+ {
+ "id": 406305,
+ "distance": 500000,
+ "name": "プロジェクトセカイちほー4 宵崎 奏",
+ "kind": 1
+ },
+ {
+ "id": 406324,
+ "distance": 530000,
+ "name": "暁山 瑞希",
+ "kind": 9
+ },
+ {
+ "id": 406325,
+ "distance": 560000,
+ "name": "初音ミク(25時、ナイトコードで。)",
+ "kind": 9
+ },
+ {
+ "id": 11666,
+ "distance": 590000,
+ "name": "アイディスマイル",
+ "kind": 5
+ },
+ {
+ "id": 406305,
+ "distance": 600000,
+ "name": "25時、ナイトコードで。",
+ "kind": 11
+ }
+ ]
+ },
+ {
+ "mapId": 450001,
+ "name": "パーリィちほー2",
+ "treasure": [
+ {
+ "id": 450101,
+ "distance": 0,
+ "name": "乙姫(ばでぃーずぷらす)",
+ "kind": 9
+ },
+ {
+ "id": 11669,
+ "distance": 30000,
+ "name": "エスオーエス",
+ "kind": 5
+ },
+ {
+ "id": 450102,
+ "distance": 70000,
+ "name": "ラズ(ばでぃーずぷらす)",
+ "kind": 9
+ },
+ {
+ "id": 11670,
+ "distance": 140000,
+ "name": "のじゃロリック",
+ "kind": 5
+ },
+ {
+ "id": 450103,
+ "distance": 200000,
+ "name": "乙姫(のじゃロリック)",
+ "kind": 9
+ },
+ {
+ "id": 450101,
+ "distance": 280000,
+ "name": "パーリィちほー2",
+ "kind": 1
+ },
+ {
+ "id": 11671,
+ "distance": 400000,
+ "name": "Edelweiss",
+ "kind": 5
+ },
+ {
+ "id": 450104,
+ "distance": 550000,
+ "name": "ラズ(のじゃロリック)",
+ "kind": 9
+ },
+ {
+ "id": 11672,
+ "distance": 800000,
+ "name": "QuiQ パーリィちほー2 チャレンジ",
+ "kind": 5
+ },
+ {
+ "id": 450101,
+ "distance": 900000,
+ "name": "パーリィちほー2",
+ "kind": 11
+ }
+ ]
+ },
+ {
+ "mapId": 450002,
+ "name": "メトロポリスちほー8",
+ "treasure": [
+ {
+ "id": 450201,
+ "distance": 0,
+ "name": "黒楼十夜子",
+ "kind": 9
+ },
+ {
+ "id": 11674,
+ "distance": 70000,
+ "name": "Cider P@rty",
+ "kind": 5
+ },
+ {
+ "id": 450202,
+ "distance": 120000,
+ "name": "黒姫(プロトタイプ)",
+ "kind": 9
+ },
+ {
+ "id": 11675,
+ "distance": 300000,
+ "name": "勦滅",
+ "kind": 5
+ },
+ {
+ "id": 450203,
+ "distance": 400000,
+ "name": "黒楼哉輝",
+ "kind": 9
+ },
+ {
+ "id": 450201,
+ "distance": 500000,
+ "name": "メトロポリスちほー8",
+ "kind": 1
+ },
+ {
+ "id": 11676,
+ "distance": 650000,
+ "name": "Lunatic Vibes",
+ "kind": 5
+ },
+ {
+ "id": 450204,
+ "distance": 800000,
+ "name": "紅丸(プロトタイプ)",
+ "kind": 9
+ },
+ {
+ "id": 11677,
+ "distance": 1000000,
+ "name": "Bloody Trail メトロポリスちほー8 チャレンジ",
+ "kind": 5
+ },
+ {
+ "id": 450201,
+ "distance": 1100000,
+ "name": "メトロポリスちほー8",
+ "kind": 11
+ }
+ ]
+ },
+ {
+ "mapId": 450003,
+ "name": "ドラゴンちほー3",
+ "treasure": [
+ {
+ "id": 450301,
+ "distance": 0,
+ "name": "エムブラ",
+ "kind": 9
+ },
+ {
+ "id": 11678,
+ "distance": 30000,
+ "name": "RE:INCARNATED DRAGNER",
+ "kind": 5
+ },
+ {
+ "id": 450302,
+ "distance": 70000,
+ "name": "クエレブレ",
+ "kind": 9
+ },
+ {
+ "id": 11679,
+ "distance": 140000,
+ "name": "Beginning together!",
+ "kind": 5
+ },
+ {
+ "id": 450303,
+ "distance": 200000,
+ "name": "シグルズ",
+ "kind": 9
+ },
+ {
+ "id": 450301,
+ "distance": 280000,
+ "name": "ドラゴンちほー3",
+ "kind": 1
+ },
+ {
+ "id": 11680,
+ "distance": 400000,
+ "name": "Shining Ray ~僕らの絆~",
+ "kind": 5
+ },
+ {
+ "id": 450304,
+ "distance": 550000,
+ "name": "アスク",
+ "kind": 9
+ },
+ {
+ "id": 11681,
+ "distance": 800000,
+ "name": "DEVOTION ドラゴンちほー3 チャレンジ",
+ "kind": 5
+ },
+ {
+ "id": 450301,
+ "distance": 900000,
+ "name": "ドラゴンちほー3",
+ "kind": 11
+ }
+ ]
+ },
+ {
+ "mapId": 450004,
+ "name": "天界ちほー7",
+ "treasure": [
+ {
+ "id": 450401,
+ "distance": 0,
+ "name": "コカビエル",
+ "kind": 9
+ },
+ {
+ "id": 11682,
+ "distance": 150000,
+ "name": "Geranium",
+ "kind": 5
+ },
+ {
+ "id": 450402,
+ "distance": 200000,
+ "name": "アルマ",
+ "kind": 9
+ },
+ {
+ "id": 11683,
+ "distance": 400000,
+ "name": "The Cursed Doll",
+ "kind": 5
+ },
+ {
+ "id": 450403,
+ "distance": 450000,
+ "name": "アルオス",
+ "kind": 9
+ },
+ {
+ "id": 450401,
+ "distance": 550000,
+ "name": "天界ちほー7",
+ "kind": 1
+ },
+ {
+ "id": 450404,
+ "distance": 600000,
+ "name": "セレプリス",
+ "kind": 9
+ },
+ {
+ "id": 11684,
+ "distance": 850000,
+ "name": "RondeauX of RagnaroQ",
+ "kind": 5
+ },
+ {
+ "id": 450405,
+ "distance": 900000,
+ "name": "ルシファー",
+ "kind": 9
+ },
+ {
+ "id": 11685,
+ "distance": 1300000,
+ "name": "ℝ∈Χ LUNATiCA 天界ちほー7 チャレンジ",
+ "kind": 5
+ },
+ {
+ "id": 450401,
+ "distance": 1400000,
+ "name": "天界ちほー7",
+ "kind": 11
+ }
+ ]
+ },
+ {
+ "mapId": 450005,
+ "name": "バディーズちほー2",
+ "treasure": [
+ {
+ "id": 10001,
+ "distance": 500000,
+ "name": "プレゼント",
+ "kind": 0
+ },
+ {
+ "id": 450501,
+ "distance": 3000000,
+ "name": "バディーズちほー2",
+ "kind": 1
+ },
+ {
+ "id": 450501,
+ "distance": 20000000,
+ "name": "バディーズちほー2",
+ "kind": 11
+ },
+ {
+ "id": 450028,
+ "distance": 25000000,
+ "name": "くす玉にします!!!!",
+ "kind": 2
+ },
+ {
+ "id": 450029,
+ "distance": 30000000,
+ "name": "筆が進んでる時に限って早い",
+ "kind": 2
+ },
+ {
+ "id": 450030,
+ "distance": 35000000,
+ "name": "後ろ喜んでないよ!",
+ "kind": 2
+ },
+ {
+ "id": 450031,
+ "distance": 40000000,
+ "name": "しらんしらんしらんで喋ってる。",
+ "kind": 2
+ },
+ {
+ "id": 450032,
+ "distance": 50000000,
+ "name": "イエーイ!愚問!",
+ "kind": 2
+ },
+ {
+ "id": 450033,
+ "distance": 60000000,
+ "name": "問題解決が上手",
+ "kind": 2
+ },
+ {
+ "id": 450034,
+ "distance": 70000000,
+ "name": "たぶんきっとうれしかったんでしょう",
+ "kind": 2
+ },
+ {
+ "id": 450035,
+ "distance": 80000000,
+ "name": "どこから攻めるか、、",
+ "kind": 2
+ },
+ {
+ "id": 450036,
+ "distance": 90000000,
+ "name": "めっちゃ席に居ます",
+ "kind": 2
+ },
+ {
+ "id": 450037,
+ "distance": 100000000,
+ "name": "モチベーションバグ",
+ "kind": 2
+ }
+ ]
+ },
+ {
+ "mapId": 450051,
+ "name": "NEEDY GIRL OVERDOSEちほー",
+ "treasure": [
+ {
+ "id": 455101,
+ "distance": 0,
+ "name": "超絶最かわてんしちゃん",
+ "kind": 9
+ },
+ {
+ "id": 455101,
+ "distance": 8000,
+ "name": "NEEDY GIRL OVERDOSEちほー その1",
+ "kind": 1
+ },
+ {
+ "id": 11692,
+ "distance": 16000,
+ "name": "INTERNET YAMERO",
+ "kind": 5
+ },
+ {
+ "id": 455101,
+ "distance": 25000,
+ "name": "NEEDY GIRL OVERDOSEちほー その1",
+ "kind": 11
+ },
+ {
+ "id": 455102,
+ "distance": 40000,
+ "name": "あめちゃん",
+ "kind": 9
+ },
+ {
+ "id": 455102,
+ "distance": 70000,
+ "name": "NEEDY GIRL OVERDOSEちほー その2",
+ "kind": 11
+ },
+ {
+ "id": 455103,
+ "distance": 120000,
+ "name": "NEEDY GIRL OVERDOSEちほー その3",
+ "kind": 11
+ },
+ {
+ "id": 11568,
+ "distance": 170000,
+ "name": "INTERNET OVERDOSE",
+ "kind": 5
+ },
+ {
+ "id": 455102,
+ "distance": 180000,
+ "name": "NEEDY GIRL OVERDOSEちほー その2",
+ "kind": 1
+ },
+ {
+ "id": 455104,
+ "distance": 250000,
+ "name": "NEEDY GIRL OVERDOSEちほー その4",
+ "kind": 11
+ }
+ ]
+ },
+ {
+ "mapId": 450052,
+ "name": "花譜ちほー",
+ "treasure": [
+ {
+ "id": 455201,
+ "distance": 0,
+ "name": "花譜 第一形態 雛鳥",
+ "kind": 9
+ },
+ {
+ "id": 11693,
+ "distance": 25000,
+ "name": "過去を喰らう",
+ "kind": 5
+ },
+ {
+ "id": 455201,
+ "distance": 30000,
+ "name": "花譜ちほー その1",
+ "kind": 11
+ },
+ {
+ "id": 455202,
+ "distance": 45000,
+ "name": "花譜 第二形態 青雀",
+ "kind": 9
+ },
+ {
+ "id": 455201,
+ "distance": 60000,
+ "name": "花譜ちほー その1",
+ "kind": 1
+ },
+ {
+ "id": 455203,
+ "distance": 80000,
+ "name": "花譜 第三形態 燕",
+ "kind": 9
+ },
+ {
+ "id": 455202,
+ "distance": 100000,
+ "name": "花譜ちほー その2",
+ "kind": 11
+ },
+ {
+ "id": 455204,
+ "distance": 120000,
+ "name": "花譜 第四形態 雉",
+ "kind": 9
+ },
+ {
+ "id": 455202,
+ "distance": 150000,
+ "name": "花譜ちほー その2",
+ "kind": 1
+ },
+ {
+ "id": 455203,
+ "distance": 200000,
+ "name": "花譜ちほー その3",
+ "kind": 11
+ }
+ ]
+ },
+ {
+ "mapId": 450053,
+ "name": "ゆこぴちほー",
+ "treasure": [
+ {
+ "id": 455301,
+ "distance": 0,
+ "name": "歌愛ユキ(強風オールバック)",
+ "kind": 9
+ },
+ {
+ "id": 455302,
+ "distance": 8000,
+ "name": "あおられ犬",
+ "kind": 9
+ },
+ {
+ "id": 455303,
+ "distance": 16000,
+ "name": "カスタネットからす(強風オールバック)",
+ "kind": 9
+ },
+ {
+ "id": 455301,
+ "distance": 25000,
+ "name": "ゆこぴちほー その1",
+ "kind": 1
+ },
+ {
+ "id": 11694,
+ "distance": 50000,
+ "name": "強風オールバック",
+ "kind": 5
+ },
+ {
+ "id": 455301,
+ "distance": 60000,
+ "name": "ゆこぴちほー その1",
+ "kind": 11
+ },
+ {
+ "id": 455304,
+ "distance": 85000,
+ "name": "はと1",
+ "kind": 9
+ },
+ {
+ "id": 455305,
+ "distance": 86000,
+ "name": "はと2",
+ "kind": 9
+ },
+ {
+ "id": 455306,
+ "distance": 87000,
+ "name": "はと3",
+ "kind": 9
+ },
+ {
+ "id": 455307,
+ "distance": 88000,
+ "name": "はともどき",
+ "kind": 9
+ },
+ {
+ "id": 455302,
+ "distance": 100000,
+ "name": "ゆこぴちほー その2",
+ "kind": 1
+ },
+ {
+ "id": 455308,
+ "distance": 120000,
+ "name": "歌愛ユキ(寝起きヤシの木)",
+ "kind": 9
+ },
+ {
+ "id": 455309,
+ "distance": 140000,
+ "name": "髪結いぬ",
+ "kind": 9
+ },
+ {
+ "id": 11695,
+ "distance": 160000,
+ "name": "寝起きヤシの木",
+ "kind": 5
+ },
+ {
+ "id": 455303,
+ "distance": 170000,
+ "name": "ゆこぴちほー その3",
+ "kind": 1
+ },
+ {
+ "id": 455310,
+ "distance": 190000,
+ "name": "カスタネットからす(寝起きヤシの木)",
+ "kind": 9
+ },
+ {
+ "id": 455311,
+ "distance": 210000,
+ "name": "トライアングルはともどき",
+ "kind": 9
+ },
+ {
+ "id": 455312,
+ "distance": 230000,
+ "name": "ヤシの木",
+ "kind": 9
+ },
+ {
+ "id": 455302,
+ "distance": 250000,
+ "name": "ゆこぴちほー その2",
+ "kind": 11
+ }
+ ]
+ },
+ {
+ "mapId": 450054,
+ "name": "グルーヴコースターちほー2",
+ "treasure": [
+ {
+ "id": 455401,
+ "distance": 0,
+ "name": "セイネ(10周年)",
+ "kind": 9
+ },
+ {
+ "id": 455402,
+ "distance": 15000,
+ "name": "ユメ(10周年)",
+ "kind": 9
+ },
+ {
+ "id": 455403,
+ "distance": 35000,
+ "name": "リンカ(10周年)",
+ "kind": 9
+ },
+ {
+ "id": 11705,
+ "distance": 50000,
+ "name": "VOLT",
+ "kind": 5
+ },
+ {
+ "id": 455401,
+ "distance": 60000,
+ "name": "グルーヴコースターちほー2",
+ "kind": 1
+ },
+ {
+ "id": 455404,
+ "distance": 100000,
+ "name": "フルメタル ずんど子ちゃん",
+ "kind": 9
+ },
+ {
+ "id": 11706,
+ "distance": 200000,
+ "name": "tiny tales continue",
+ "kind": 5
+ },
+ {
+ "id": 455405,
+ "distance": 300000,
+ "name": "ポリビニル どんつくくん",
+ "kind": 9
+ },
+ {
+ "id": 11707,
+ "distance": 450000,
+ "name": "ouroboros -twin stroke of the end-",
+ "kind": 5
+ },
+ {
+ "id": 455401,
+ "distance": 550000,
+ "name": "グルーヴコースターちほー2",
+ "kind": 11
+ }
+ ]
+ },
+ {
+ "mapId": 450056,
+ "name": "にじさんじのB級バラエティ(仮)ちほー",
+ "treasure": [
+ {
+ "id": 455604,
+ "distance": 0,
+ "name": "ほぼイブラヒム",
+ "kind": 9
+ },
+ {
+ "id": 455606,
+ "distance": 6000,
+ "name": "イブラヒムのご近所さん",
+ "kind": 9
+ },
+ {
+ "id": 455605,
+ "distance": 12000,
+ "name": "怨筆くん",
+ "kind": 9
+ },
+ {
+ "id": 455607,
+ "distance": 18000,
+ "name": "サバーニャ",
+ "kind": 9
+ },
+ {
+ "id": 455601,
+ "distance": 25000,
+ "name": "にじさんじのB級バラエティ(仮)ちほー その1",
+ "kind": 1
+ },
+ {
+ "id": 11712,
+ "distance": 50000,
+ "name": "バラバラ〜仮初レインボーローズ〜",
+ "kind": 5
+ },
+ {
+ "id": 455602,
+ "distance": 60000,
+ "name": "にじさんじのB級バラエティ(仮)ちほー その2",
+ "kind": 1
+ },
+ {
+ "id": 455601,
+ "distance": 100000,
+ "name": "椎名唯華",
+ "kind": 9
+ },
+ {
+ "id": 455602,
+ "distance": 140000,
+ "name": "花畑チャイカ",
+ "kind": 9
+ },
+ {
+ "id": 455601,
+ "distance": 180000,
+ "name": "にじさんじのB級バラエティ(仮)ちほー その1",
+ "kind": 11
+ },
+ {
+ "id": 455603,
+ "distance": 240000,
+ "name": "だいたいイブラヒム",
+ "kind": 9
+ },
+ {
+ "id": 455602,
+ "distance": 250000,
+ "name": "にじさんじのB級バラエティ(仮)ちほー その2",
+ "kind": 11
+ }
+ ]
+ },
+ {
+ "mapId": 450057,
+ "name": "東方ダンマクカグラ ファンタジア・ロストちほー",
+ "treasure": [
+ {
+ "id": 455701,
+ "distance": 0,
+ "name": "橙",
+ "kind": 9
+ },
+ {
+ "id": 455702,
+ "distance": 8000,
+ "name": "西行寺 幽々子",
+ "kind": 9
+ },
+ {
+ "id": 455703,
+ "distance": 25000,
+ "name": "八雲 藍",
+ "kind": 9
+ },
+ {
+ "id": 11717,
+ "distance": 50000,
+ "name": "LOSTPHANTASIA",
+ "kind": 5
+ },
+ {
+ "id": 455701,
+ "distance": 60000,
+ "name": "東方ダンマクカグラ ファンタジア・ロストちほー その1",
+ "kind": 1
+ },
+ {
+ "id": 455704,
+ "distance": 90000,
+ "name": "洩矢 諏訪子",
+ "kind": 9
+ },
+ {
+ "id": 455705,
+ "distance": 120000,
+ "name": "依神 紫苑",
+ "kind": 9
+ },
+ {
+ "id": 455706,
+ "distance": 160000,
+ "name": "依神 女苑",
+ "kind": 9
+ },
+ {
+ "id": 11718,
+ "distance": 200000,
+ "name": "Bad Apple!! feat.nomico (Tetsuya Komuro Remix)",
+ "kind": 5
+ },
+ {
+ "id": 455702,
+ "distance": 210000,
+ "name": "東方ダンマクカグラ ファンタジア・ロストちほー その2",
+ "kind": 1
+ },
+ {
+ "id": 455707,
+ "distance": 300000,
+ "name": "クラウンピース",
+ "kind": 9
+ },
+ {
+ "id": 455708,
+ "distance": 450000,
+ "name": "赤蛮奇",
+ "kind": 9
+ },
+ {
+ "id": 11720,
+ "distance": 600000,
+ "name": "Re:Unknown X",
+ "kind": 5
+ },
+ {
+ "id": 455701,
+ "distance": 650000,
+ "name": "東方ダンマクカグラ ファンタジア・ロストちほー",
+ "kind": 11
+ }
+ ]
+ },
+ {
+ "mapId": 450058,
+ "name": "HARDCORE TANO*Cちほー2",
+ "treasure": [
+ {
+ "id": 455801,
+ "distance": 0,
+ "name": "IRRENA",
+ "kind": 9
+ },
+ {
+ "id": 11726,
+ "distance": 30000,
+ "name": "Trust",
+ "kind": 5
+ },
+ {
+ "id": 455801,
+ "distance": 40000,
+ "name": "HARDCORE TANO*Cちほー2 その1",
+ "kind": 1
+ },
+ {
+ "id": 455802,
+ "distance": 80000,
+ "name": "Srav3R",
+ "kind": 9
+ },
+ {
+ "id": 11722,
+ "distance": 130000,
+ "name": "Make Up Your World feat. キョンシーのCiちゃん & らっぷびと",
+ "kind": 5
+ },
+ {
+ "id": 455804,
+ "distance": 180000,
+ "name": "DJ Noriken",
+ "kind": 9
+ },
+ {
+ "id": 11724,
+ "distance": 250000,
+ "name": "Everybody Say HARDCORE TANO*C",
+ "kind": 5
+ },
+ {
+ "id": 455802,
+ "distance": 260000,
+ "name": "HARDCORE TANO*Cちほー2 その2",
+ "kind": 1
+ },
+ {
+ "id": 455803,
+ "distance": 320000,
+ "name": "P*Light",
+ "kind": 9
+ },
+ {
+ "id": 11723,
+ "distance": 400000,
+ "name": "BOOM! BOOM!! BOOM!!!",
+ "kind": 5
+ },
+ {
+ "id": 455805,
+ "distance": 500000,
+ "name": "DJ Genki",
+ "kind": 9
+ },
+ {
+ "id": 11725,
+ "distance": 700000,
+ "name": "ミラクルポップ☆アドベンチャー!!!!!",
+ "kind": 5
+ },
+ {
+ "id": 455801,
+ "distance": 800000,
+ "name": "HARDCORE TANO*Cちほー2",
+ "kind": 11
+ }
+ ]
+ },
+ {
+ "mapId": 450059,
+ "name": "#コンパスちほー2",
+ "treasure": [
+ {
+ "id": 455901,
+ "distance": 0,
+ "name": "ラヴィ・シュシュマルシュ",
+ "kind": 9
+ },
+ {
+ "id": 11727,
+ "distance": 25000,
+ "name": "ラヴィ",
+ "kind": 5
+ },
+ {
+ "id": 455901,
+ "distance": 30000,
+ "name": "#コンパスちほー2 その1",
+ "kind": 1
+ },
+ {
+ "id": 455901,
+ "distance": 70000,
+ "name": "#コンパスちほー2 その1",
+ "kind": 11
+ },
+ {
+ "id": 455903,
+ "distance": 100000,
+ "name": "Bugdoll",
+ "kind": 9
+ },
+ {
+ "id": 11728,
+ "distance": 140000,
+ "name": "スティールユー",
+ "kind": 5
+ },
+ {
+ "id": 455902,
+ "distance": 150000,
+ "name": "#コンパスちほー2 その2",
+ "kind": 1
+ },
+ {
+ "id": 455902,
+ "distance": 220000,
+ "name": "ステリア・ララ・シルワ",
+ "kind": 9
+ },
+ {
+ "id": 11729,
+ "distance": 290000,
+ "name": "オシオキGIMMICK!!",
+ "kind": 5
+ },
+ {
+ "id": 455902,
+ "distance": 300000,
+ "name": "#コンパスちほー2 その2",
+ "kind": 11
+ }
+ ]
+ },
+ {
+ "mapId": 450060,
+ "name": "周防パトラちほー",
+ "treasure": [
+ {
+ "id": 456001,
+ "distance": 0,
+ "name": "周防パトラ",
+ "kind": 9
+ },
+ {
+ "id": 456007,
+ "distance": 8000,
+ "name": "かにかま",
+ "kind": 9
+ },
+ {
+ "id": 11730,
+ "distance": 25000,
+ "name": "偉大なる悪魔は実は大天使パトラちゃん様なのだ!",
+ "kind": 5
+ },
+ {
+ "id": 456001,
+ "distance": 30000,
+ "name": "周防パトラちほー その1",
+ "kind": 11
+ },
+ {
+ "id": 456002,
+ "distance": 45000,
+ "name": "周防パトラ(サイバー)",
+ "kind": 9
+ },
+ {
+ "id": 456001,
+ "distance": 60000,
+ "name": "周防パトラちほー その1",
+ "kind": 1
+ },
+ {
+ "id": 456003,
+ "distance": 75000,
+ "name": "周防パトラ(制服)",
+ "kind": 9
+ },
+ {
+ "id": 11731,
+ "distance": 90000,
+ "name": "シュガーホリック",
+ "kind": 5
+ },
+ {
+ "id": 456002,
+ "distance": 100000,
+ "name": "周防パトラちほー その2",
+ "kind": 11
+ },
+ {
+ "id": 456004,
+ "distance": 120000,
+ "name": "周防パトラ(白制服)",
+ "kind": 9
+ },
+ {
+ "id": 456002,
+ "distance": 140000,
+ "name": "周防パトラちほー その2",
+ "kind": 1
+ },
+ {
+ "id": 456005,
+ "distance": 165000,
+ "name": "周防パトラ(魔法少女)",
+ "kind": 9
+ },
+ {
+ "id": 456003,
+ "distance": 190000,
+ "name": "周防パトラちほー その3",
+ "kind": 11
+ },
+ {
+ "id": 456006,
+ "distance": 220000,
+ "name": "周防パトラ(第9衣装)",
+ "kind": 9
+ },
+ {
+ "id": 456004,
+ "distance": 250000,
+ "name": "周防パトラちほー その4",
+ "kind": 11
+ }
+ ]
+ },
+ {
+ "mapId": 450061,
+ "name": "オンゲキちほー7",
+ "treasure": [
+ {
+ "id": 456101,
+ "distance": 0,
+ "name": "柏木 咲姫(シュータードレス)",
+ "kind": 9
+ },
+ {
+ "id": 456102,
+ "distance": 12000,
+ "name": "井之原 小星(シュータードレス)",
+ "kind": 9
+ },
+ {
+ "id": 11689,
+ "distance": 30000,
+ "name": "最っ高のエンタメだ!!",
+ "kind": 5
+ },
+ {
+ "id": 456101,
+ "distance": 40000,
+ "name": "7EVENDAYS⇔HOLIDAYS",
+ "kind": 1
+ },
+ {
+ "id": 456103,
+ "distance": 80000,
+ "name": "日向 千夏(シュータードレス)",
+ "kind": 9
+ },
+ {
+ "id": 11688,
+ "distance": 130000,
+ "name": "まっすぐ→→→ストリーム!",
+ "kind": 5
+ },
+ {
+ "id": 456102,
+ "distance": 140000,
+ "name": "マーチングポケッツ",
+ "kind": 1
+ },
+ {
+ "id": 456104,
+ "distance": 200000,
+ "name": "柏木 美亜(シュータードレス)",
+ "kind": 9
+ },
+ {
+ "id": 456105,
+ "distance": 400000,
+ "name": "東雲 つむぎ(シュータードレス)",
+ "kind": 9
+ },
+ {
+ "id": 11691,
+ "distance": 550000,
+ "name": "Ai C",
+ "kind": 5
+ },
+ {
+ "id": 456101,
+ "distance": 650000,
+ "name": "オンゲキちほー7",
+ "kind": 11
+ }
+ ]
+ },
+ {
+ "mapId": 500001,
+ "name": "スカイストリートちほー6",
+ "treasure": [
+ {
+ "id": 500101,
+ "distance": 0,
+ "name": "アカツキ",
+ "kind": 9
+ },
+ {
+ "id": 11737,
+ "distance": 30000,
+ "name": "パラドクスイヴ",
+ "kind": 5
+ },
+ {
+ "id": 500102,
+ "distance": 100000,
+ "name": "コハク",
+ "kind": 9
+ },
+ {
+ "id": 500101,
+ "distance": 150000,
+ "name": "スカイストリートちほー6",
+ "kind": 1
+ },
+ {
+ "id": 500103,
+ "distance": 200000,
+ "name": "天空の王",
+ "kind": 9
+ },
+ {
+ "id": 11738,
+ "distance": 300000,
+ "name": "YKWTD",
+ "kind": 5
+ },
+ {
+ "id": 500104,
+ "distance": 350000,
+ "name": "大地の王",
+ "kind": 9
+ },
+ {
+ "id": 500101,
+ "distance": 450000,
+ "name": "スカイストリートちほー6",
+ "kind": 11
+ },
+ {
+ "id": 11739,
+ "distance": 600000,
+ "name": "184億回のマルチトニック スカイストリートちほー6 チャレンジ",
+ "kind": 5
+ },
+ {
+ "id": 1,
+ "distance": 800000,
+ "name": "青の扉",
+ "kind": 0
+ }
+ ]
+ },
+ {
+ "mapId": 500005,
+ "name": "プリズムちほー",
+ "treasure": [
+ {
+ "id": 10001,
+ "distance": 500000,
+ "name": "プレゼント",
+ "kind": 0
+ },
+ {
+ "id": 500501,
+ "distance": 3000000,
+ "name": "プリズムちほー",
+ "kind": 1
+ },
+ {
+ "id": 500501,
+ "distance": 20000000,
+ "name": "プリズムちほー",
+ "kind": 11
+ },
+ {
+ "id": 500017,
+ "distance": 25000000,
+ "name": "いくらでもモルモットになります",
+ "kind": 2
+ },
+ {
+ "id": 500018,
+ "distance": 30000000,
+ "name": "全て取り除きたいんですよね",
+ "kind": 2
+ },
+ {
+ "id": 500019,
+ "distance": 35000000,
+ "name": "生産者の顔が見える配置",
+ "kind": 2
+ },
+ {
+ "id": 500020,
+ "distance": 40000000,
+ "name": "普通は、そう普通ですね。",
+ "kind": 2
+ },
+ {
+ "id": 500021,
+ "distance": 50000000,
+ "name": "圧倒的オカン",
+ "kind": 2
+ },
+ {
+ "id": 500022,
+ "distance": 60000000,
+ "name": "ザ人間きつい場所ベスト10のひとつ",
+ "kind": 2
+ },
+ {
+ "id": 500023,
+ "distance": 70000000,
+ "name": "しゃがまないと無理なのよ",
+ "kind": 2
+ },
+ {
+ "id": 500024,
+ "distance": 80000000,
+ "name": "大体峠に居ます",
+ "kind": 2
+ },
+ {
+ "id": 500025,
+ "distance": 90000000,
+ "name": "区分 マネー",
+ "kind": 2
+ },
+ {
+ "id": 500026,
+ "distance": 100000000,
+ "name": "エンドオブエンドコンテンツ",
+ "kind": 2
+ }
+ ]
+ },
+ {
+ "mapId": 500052,
+ "name": "かいりきベアちほー2",
+ "treasure": [
+ {
+ "id": 505201,
+ "distance": 0,
+ "name": "アイア",
+ "kind": 9
+ },
+ {
+ "id": 505202,
+ "distance": 20000,
+ "name": "グーマー",
+ "kind": 9
+ },
+ {
+ "id": 11761,
+ "distance": 40000,
+ "name": "病み垢ステロイド",
+ "kind": 5
+ },
+ {
+ "id": 505201,
+ "distance": 50000,
+ "name": "かいりきベアちほー2 その1",
+ "kind": 11
+ },
+ {
+ "id": 505203,
+ "distance": 75000,
+ "name": "ノア",
+ "kind": 9
+ },
+ {
+ "id": 11637,
+ "distance": 100000,
+ "name": "バグ",
+ "kind": 5
+ },
+ {
+ "id": 505201,
+ "distance": 130000,
+ "name": "かいりきベアちほー2 その1",
+ "kind": 1
+ },
+ {
+ "id": 505202,
+ "distance": 160000,
+ "name": "かいりきベアちほー2 その2",
+ "kind": 1
+ },
+ {
+ "id": 505204,
+ "distance": 190000,
+ "name": "ナナ",
+ "kind": 9
+ },
+ {
+ "id": 11763,
+ "distance": 240000,
+ "name": "ダーリンダンス",
+ "kind": 5
+ },
+ {
+ "id": 505202,
+ "distance": 300000,
+ "name": "かいりきベアちほー2 その2",
+ "kind": 11
+ }
+ ]
+ },
+ {
+ "mapId": 500057,
+ "name": "Arcaeaちほー3",
+ "treasure": [
+ {
+ "id": 505701,
+ "distance": 0,
+ "name": "エト&ルナ (Winter)",
+ "kind": 9
+ },
+ {
+ "id": 11786,
+ "distance": 50000,
+ "name": "Empire of Winter",
+ "kind": 5
+ },
+ {
+ "id": 505701,
+ "distance": 100000,
+ "name": "Arcaeaちほー3 その1",
+ "kind": 1
+ },
+ {
+ "id": 505702,
+ "distance": 175000,
+ "name": "マヤ",
+ "kind": 9
+ },
+ {
+ "id": 505701,
+ "distance": 225000,
+ "name": "Arcaeaちほー3 その1",
+ "kind": 11
+ },
+ {
+ "id": 11787,
+ "distance": 300000,
+ "name": "迷える音色は恋の唄",
+ "kind": 5
+ },
+ {
+ "id": 505702,
+ "distance": 350000,
+ "name": "Arcaeaちほー3 その2",
+ "kind": 11
+ },
+ {
+ "id": 11788,
+ "distance": 450000,
+ "name": "Löschen",
+ "kind": 5
+ },
+ {
+ "id": 505702,
+ "distance": 500000,
+ "name": "Arcaeaちほー3 その2",
+ "kind": 1
+ },
+ {
+ "id": 11789,
+ "distance": 650000,
+ "name": "Abstruse Dilemma",
+ "kind": 5
+ },
+ {
+ "id": 505703,
+ "distance": 750000,
+ "name": "Arcaeaちほー3 その3",
+ "kind": 11
+ }
+ ]
+ }
+]
\ No newline at end of file
diff --git a/map.py b/map.py
new file mode 100644
index 0000000..04c76ec
--- /dev/null
+++ b/map.py
@@ -0,0 +1,17 @@
+import json
+
+from sdgb import sdgb_api
+
+def map(userId):
+ data = json.dumps({
+ "userId": int(userId),
+ "nextIndex": 0,
+ "maxCount": 600
+ })
+
+ map_result = json.loads(sdgb_api(data, "GetUserMapApi", userId))
+
+ return map_result
+
+if __name__ == "__main__":
+ print(map(int(input())))
\ No newline at end of file
diff --git a/map_clear.py b/map_clear.py
new file mode 100644
index 0000000..9811347
--- /dev/null
+++ b/map_clear.py
@@ -0,0 +1,417 @@
+import json
+import pytz
+import time
+import random
+
+from sdgb import sdgb_api
+from datetime import datetime, timedelta
+
+from settings import music_data
+from settings import regionId
+from settings import regionName
+from settings import clientId
+from settings import placeId
+from settings import placeName
+
+from login import login
+from logout import logout
+
+def CalcRandom():
+ max = 1037933
+ num2 = random.randint(1, max) * 2069
+
+ num2 += 1024 # specialnum
+ num3 = 0
+ for i in range(0, 32):
+ num3 <<= 1
+ num3 += num2 % 2
+ num2 >>= 1
+
+ return num3
+
+timestamp = int(time.time())
+
+def music(userId, accessCode, mapId, distance, item_list, character_list, isNewMapList):
+ music = music_data
+
+ musicId = music['musicId']
+ level = music['level']
+ playCount = music['playCount']
+ achievement = music['achievement']
+ comboStatus = music['comboStatus']
+ syncStatus = music['syncStatus']
+ deluxscoreMax = music['deluxscoreMax']
+ scoreRank = music['scoreRank']
+ extNum1 = music['extNum1']
+
+
+ # UserLogin
+
+ login_result = login(userId, accessCode, timestamp)
+
+ login_id = login_result['loginId']
+ login_date = login_result['lastLoginDate']
+
+
+ # UserData
+
+ data = json.dumps({
+ "userId": int(userId)
+ })
+
+ userdata = json.loads(sdgb_api(data, "GetUserDataApi", userId))
+
+ # UserLog
+
+ data = json.dumps({
+ "userId": int(userId),
+ "userPlaylogList": [{
+ "userId": 0,
+ "orderId": 0,
+ "playlogId": login_id,
+ "version": 1050000,
+ "placeId": placeId,
+ "placeName": placeName,
+ "loginDate": int(time.time()),
+ "playDate": datetime.now(pytz.timezone('Asia/Shanghai')).strftime('%Y-%m-%d'),
+ "userPlayDate": datetime.now(pytz.timezone('Asia/Shanghai')).strftime('%Y-%m-%d %H:%M:%S') + '.0',
+ "type": 0,
+ "musicId": int(musicId),
+ "level": int(level),
+ "trackNo": 1,
+ "vsMode": 0,
+ "vsUserName": "",
+ "vsStatus": 0,
+ "vsUserRating": 0,
+ "vsUserAchievement": 0,
+ "vsUserGradeRank": 0,
+ "vsRank": 0,
+ "playerNum": 1,
+ "playedUserId1": 0,
+ "playedUserName1": "",
+ "playedMusicLevel1": 0,
+ "playedUserId2": 0,
+ "playedUserName2": "",
+ "playedMusicLevel2": 0,
+ "playedUserId3": 0,
+ "playedUserName3": "",
+ "playedMusicLevel3": 0,
+ "characterId1": userdata['userData']['charaSlot'][0],
+ "characterLevel1": random.randint(1000,6500),
+ "characterAwakening1": 5,
+ "characterId2": userdata['userData']['charaSlot'][1],
+ "characterLevel2": random.randint(1000,6500),
+ "characterAwakening2": 5,
+ "characterId3": userdata['userData']['charaSlot'][2],
+ "characterLevel3": random.randint(1000,6500),
+ "characterAwakening3": 5,
+ "characterId4": userdata['userData']['charaSlot'][3],
+ "characterLevel4": random.randint(1000,6500),
+ "characterAwakening4": 5,
+ "characterId5": userdata['userData']['charaSlot'][4],
+ "characterLevel5": random.randint(1000,6500),
+ "characterAwakening5": 5,
+ "achievement": int(achievement),
+ "deluxscore": int(deluxscoreMax),
+ "scoreRank": int(scoreRank),
+ "maxCombo": random.randint(400,500),
+ "totalCombo": random.randint(700,900),
+ "maxSync": 0,
+ "totalSync": 0,
+ "tapCriticalPerfect": random.randint(200,400),
+ "tapPerfect": random.randint(100,250),
+ "tapGreat": random.randint(0,10),
+ "tapGood": random.randint(0,10),
+ "tapMiss": random.randint(0,10),
+ "holdCriticalPerfect": random.randint(20,40),
+ "holdPerfect": random.randint(0,15),
+ "holdGreat": 0,
+ "holdGood": 0,
+ "holdMiss": 0,
+ "slideCriticalPerfect": random.randint(34,60),
+ "slidePerfect": 0,
+ "slideGreat": 0,
+ "slideGood": 0,
+ "slideMiss": 0,
+ "touchCriticalPerfect": random.randint(20,70),
+ "touchPerfect": 0,
+ "touchGreat": 0,
+ "touchGood": 0,
+ "touchMiss": 0,
+ "breakCriticalPerfect": random.randint(8,30),
+ "breakPerfect": random.randint(7,10),
+ "breakGreat": 0,
+ "breakGood": 0,
+ "breakMiss": 0,
+ "isTap": True,
+ "isHold": True,
+ "isSlide": True,
+ "isTouch": True,
+ "isBreak": True,
+ "isCriticalDisp": True,
+ "isFastLateDisp": True,
+ "fastCount": random.randint(20,30),
+ "lateCount": random.randint(50,70),
+ "isAchieveNewRecord": True,
+ "isDeluxscoreNewRecord": True,
+ "comboStatus": 0,
+ "syncStatus": 0,
+ "isClear": True,
+ 'beforeRating': userdata['userData']['playerRating'],
+ 'afterRating': userdata['userData']['playerRating'],
+ "beforeGrade": 0,
+ "afterGrade": 0,
+ "afterGradeRank": 2,
+ 'beforeDeluxRating': userdata['userData']['playerRating'],
+ 'afterDeluxRating': userdata['userData']['playerRating'],
+ "isPlayTutorial": False,
+ "isEventMode": False,
+ "isFreedomMode": False,
+ "playMode": 0,
+ "isNewFree": False,
+ "trialPlayAchievement": -1,
+ "extNum1": 0,
+ "extNum2": 0,
+ "extNum4": 2020,
+ "extBool1": False,
+ "extBool2": False
+ }]
+ })
+
+ userlog_result = json.loads(sdgb_api(data, "UploadUserPlaylogListApi", userId))
+
+
+
+ # 获取 User Extend
+ data = json.dumps({
+ "userId": int(userId)
+ })
+
+ user_extend = json.loads(sdgb_api(data, "GetUserExtendApi", userId))
+
+ # 获取 User Option
+ data = json.dumps({
+ "userId": int(userId)
+ })
+
+ user_option = json.loads(sdgb_api(data, "GetUserOptionApi", userId))
+
+
+ # 获取 User Rating
+ data = json.dumps({
+ "userId": int(userId)
+ })
+
+ user_rating = json.loads(sdgb_api(data, "GetUserRatingApi", userId))
+
+
+ # 获取 User Activity
+ data = json.dumps({
+ "userId": int(userId)
+ })
+
+ user_activity = json.loads(sdgb_api(data, "GetUserActivityApi", userId))
+
+
+ # 获取账号功能票
+ data = json.dumps({
+ "userId": int(userId)
+ })
+
+ user_charge = json.loads(sdgb_api(data, "GetUserChargeApi", userId))
+
+
+
+
+ # UserAll
+
+ data = json.dumps({
+ "userId": int(userId),
+ "playlogId": login_id,
+ "isEventMode": False,
+ "isFreePlay": False,
+ "upsertUserAll": {
+ "userData": [
+ {
+ "accessCode": int(accessCode),
+ "userName": userdata['userData']['userName'],
+ "isNetMember": 1,
+ "point": userdata['userData']['point'],
+ "totalPoint": userdata['userData']['totalPoint'],
+ "iconId": userdata['userData']['iconId'],
+ "plateId": userdata['userData']['plateId'],
+ "titleId": userdata['userData']['titleId'],
+ "partnerId": userdata['userData']['partnerId'],
+ "frameId": userdata['userData']['frameId'],
+ "selectMapId": userdata['userData']['selectMapId'],
+ "totalAwake": userdata['userData']['totalAwake'],
+ "gradeRating": userdata['userData']['gradeRating'],
+ "musicRating": userdata['userData']['musicRating'],
+ "playerRating": userdata['userData']['playerRating'],
+ "highestRating": userdata['userData']['highestRating'],
+ "gradeRank": userdata['userData']['gradeRank'],
+ "classRank": userdata['userData']['classRank'],
+ "courseRank": userdata['userData']['courseRank'],
+ "charaSlot": userdata['userData']['charaSlot'],
+ "charaLockSlot": userdata['userData']['charaLockSlot'],
+ "contentBit": userdata['userData']['contentBit'],
+ "playCount": userdata['userData']['playCount'],
+ "currentPlayCount": userdata['userData']['currentPlayCount'],
+ "renameCredit": 0,
+ "mapStock": userdata['userData']['mapStock'],
+ "eventWatchedDate": userdata['userData']['eventWatchedDate'],
+ "lastGameId": "SDGA",
+ "lastRomVersion": userdata['userData']['lastRomVersion'],
+ "lastDataVersion": userdata['userData']['lastDataVersion'],
+ "lastLoginDate": login_date,
+ "lastPlayDate": datetime.now(pytz.timezone('Asia/Shanghai')).strftime('%Y-%m-%d %H:%M:%S') + '.0',
+ "lastPlayCredit": 1,
+ "lastPlayMode": 0,
+ "lastPlaceId": placeId,
+ "lastPlaceName": placeName,
+ "lastAllNetId": 0,
+ "lastRegionId": regionId,
+ "lastRegionName": regionName,
+ "lastClientId": clientId,
+ "lastCountryCode": "CHN",
+ "lastSelectEMoney": 0,
+ "lastSelectTicket": 0,
+ "lastSelectCourse": userdata['userData']['lastSelectCourse'],
+ "lastCountCourse": 0,
+ "firstGameId": "SDGA",
+ "firstRomVersion": userdata['userData']['firstRomVersion'],
+ "firstDataVersion": userdata['userData']['firstDataVersion'],
+ "firstPlayDate": userdata['userData']['firstPlayDate'],
+ "compatibleCmVersion": userdata['userData']['compatibleCmVersion'],
+ "dailyBonusDate": userdata['userData']['dailyBonusDate'],
+ "dailyCourseBonusDate": userdata['userData']['dailyCourseBonusDate'],
+ "lastPairLoginDate": userdata['userData']['lastPairLoginDate'],
+ "lastTrialPlayDate": userdata['userData']['lastTrialPlayDate'],
+ "playVsCount": 0,
+ "playSyncCount": 0,
+ "winCount": 0,
+ "helpCount": 0,
+ "comboCount": 0,
+ "totalDeluxscore": userdata['userData']['totalDeluxscore'],
+ "totalBasicDeluxscore": userdata['userData']['totalBasicDeluxscore'],
+ "totalAdvancedDeluxscore": userdata['userData']['totalAdvancedDeluxscore'],
+ "totalExpertDeluxscore": userdata['userData']['totalExpertDeluxscore'],
+ "totalMasterDeluxscore": userdata['userData']['totalMasterDeluxscore'],
+ "totalReMasterDeluxscore": userdata['userData']['totalReMasterDeluxscore'],
+ "totalSync": userdata['userData']['totalSync'],
+ "totalBasicSync": userdata['userData']['totalBasicSync'],
+ "totalAdvancedSync": userdata['userData']['totalAdvancedSync'],
+ "totalExpertSync": userdata['userData']['totalExpertSync'],
+ "totalMasterSync": userdata['userData']['totalMasterSync'],
+ "totalReMasterSync": userdata['userData']['totalReMasterSync'],
+ "totalAchievement": userdata['userData']['totalAchievement'],
+ "totalBasicAchievement": userdata['userData']['totalBasicAchievement'],
+ "totalAdvancedAchievement": userdata['userData']['totalAdvancedAchievement'],
+ "totalExpertAchievement": userdata['userData']['totalExpertAchievement'],
+ "totalMasterAchievement": userdata['userData']['totalMasterAchievement'],
+ "totalReMasterAchievement": userdata['userData']['totalReMasterAchievement'],
+ "playerOldRating": userdata['userData']['playerOldRating'],
+ "playerNewRating": userdata['userData']['playerNewRating'],
+ "banState": 0,
+ "friendRegistSkip": 1,
+ "dateTime": timestamp
+ }
+ ],
+ "userExtend": [user_extend['userExtend']],
+ "userOption": [user_option['userOption']],
+ "userCharacterList": character_list,
+ "userGhost": [],
+ "userMapList": [{
+ "mapId": mapId,
+ "distance": distance,
+ "isLock": False,
+ "isClear": False,
+ "isComplete": False,
+ "unlockFlag":1
+ }],
+ "userLoginBonusList": [],
+ "userRatingList": [user_rating['userRating']],
+ "userItemList": item_list,
+ "userMusicDetailList": [
+ {
+ "musicId": musicId,
+ "level": level,
+ "playCount": playCount,
+ "achievement": achievement,
+ "comboStatus": comboStatus,
+ "syncStatus": syncStatus,
+ "deluxscoreMax": deluxscoreMax,
+ "scoreRank": scoreRank,
+ "extNum1": 0
+ }
+ ],
+ "userCourseList": [],
+ "userFriendSeasonRankingList": [],
+ "userChargeList": user_charge['userChargeList'],
+ "userFavoriteList": [],
+ "userActivityList": [user_activity['userActivity']],
+ "userMissionDataList": [],
+ "userWeeklyData": {
+ "lastLoginWeek": "2025-01-20 04:00:00",
+ "beforeLoginWeek": "2024-09-02 04:00:00",
+ "friendBonusFlag": True
+ },
+ "userGamePlaylogList": [
+ {
+ "playlogId": login_id,
+ "version": "1.50.00",
+ "playDate": datetime.now(pytz.timezone('Asia/Shanghai')).strftime('%Y-%m-%d %H:%M:%S') + '.0',
+ "playMode": 0,
+ "useTicketId": -1,
+ "playCredit": 1,
+ "playTrack": 1,
+ "clientId": clientId,
+ "isPlayTutorial": False,
+ "isEventMode": False,
+ "isNewFree": False,
+ "playCount": 8,
+ "playSpecial": CalcRandom(),
+ "playOtherUserId": 0
+ }
+ ],
+ "user2pPlaylog": {
+ "userId1": 0,
+ "userId2": 0,
+ "userName1": "",
+ "userName2": "",
+ "regionId": 0,
+ "placeId": 0,
+ "user2pPlaylogDetailList": []
+ },
+ "userIntimateList": [],
+ "userShopItemStockList": [],
+ "userGetPointList": [],
+ "userTradeItemList": [],
+ "userFavoritemusicList": [],
+ "userKaleidxScopeList": [],
+ "isNewCharacterList": "1" * len(character_list),
+ "isNewMapList": isNewMapList,
+ "isNewLoginBonusList": "",
+ "isNewItemList": "1" * len(item_list),
+ "isNewMusicDetailList": "1",
+ "isNewCourseList": "",
+ "isNewFavoriteList": "",
+ "isNewFriendSeasonRankingList": "",
+ "isNewUserIntimateList": "",
+ "isNewFavoritemusicList": "",
+ "isNewKaleidxScopeList": ""
+ }
+ })
+
+ userall_result = json.loads(sdgb_api(data, "UpsertUserAllApi", userId))
+ return userall_result
+
+def music_with_retry(userId, accessCode, mapId, distance, item_list, character_list, isNewMapList):
+ for i in range(5): # 重试次数
+ try:
+ music(userId, accessCode, mapId, distance, item_list, character_list, isNewMapList)
+ return logout(userId, accessCode, timestamp)
+ except:
+ logout(userId, accessCode, timestamp)
+ time.sleep(3)
+ return "Error"
diff --git a/mapstock.py b/mapstock.py
new file mode 100644
index 0000000..64c6ea5
--- /dev/null
+++ b/mapstock.py
@@ -0,0 +1,393 @@
+import json
+import pytz
+import time
+import random
+
+from sdgb import sdgb_api
+from datetime import datetime, timedelta
+
+from settings import music_data
+from settings import regionId
+from settings import regionName
+from settings import clientId
+from settings import placeId
+from settings import placeName
+
+from login import login
+from logout import logout
+
+def CalcRandom():
+ max = 1037933
+ num2 = random.randint(1, max) * 2069
+
+ num2 += 1024 # specialnum
+ num3 = 0
+ for i in range(0, 32):
+ num3 <<= 1
+ num3 += num2 % 2
+ num2 >>= 1
+
+ return num3
+
+timestamp = int(time.time()) - 60
+
+def music(userId):
+
+ music = music_data
+
+ musicId = music['musicId']
+ level = music['level']
+ playCount = music['playCount']
+ achievement = music['achievement']
+ comboStatus = music['comboStatus']
+ syncStatus = music['syncStatus']
+ deluxscoreMax = music['deluxscoreMax']
+ scoreRank = music['scoreRank']
+ extNum1 = music['extNum1']
+
+ # UserLogin
+
+ login_result = login(userId,timestamp)
+
+ login_id = login_result['loginId']
+ login_date = login_result['lastLoginDate']
+
+
+ # UserData
+
+ data = json.dumps({
+ "userId": int(userId)
+ })
+
+ userdata = json.loads(sdgb_api(data, "GetUserDataApi", userId))
+
+ # UserLog
+
+ data = json.dumps({
+ "userId": int(userId),
+ "userPlaylog": {
+ "userId": 0,
+ "orderId": 0,
+ "playlogId": login_id,
+ "version": 1041000,
+ "placeId": placeId,
+ "placeName": placeName,
+ "loginDate": int(time.time()),
+ "playDate": datetime.now(pytz.timezone('Asia/Shanghai')).strftime('%Y-%m-%d'),
+ "userPlayDate": datetime.now(pytz.timezone('Asia/Shanghai')).strftime('%Y-%m-%d %H:%M:%S') + '.0',
+ "type": 0,
+ "musicId": int(musicId),
+ "level": int(level),
+ "trackNo": 1,
+ "vsMode": 0,
+ "vsUserName": "",
+ "vsStatus": 0,
+ "vsUserRating": 0,
+ "vsUserAchievement": 0,
+ "vsUserGradeRank": 0,
+ "vsRank": 0,
+ "playerNum": 1,
+ "playedUserId1": 0,
+ "playedUserName1": "",
+ "playedMusicLevel1": 0,
+ "playedUserId2": 0,
+ "playedUserName2": "",
+ "playedMusicLevel2": 0,
+ "playedUserId3": 0,
+ "playedUserName3": "",
+ "playedMusicLevel3": 0,
+ "characterId1": userdata['userData']['charaSlot'][0],
+ "characterLevel1": random.randint(1000,6500),
+ "characterAwakening1": 5,
+ "characterId2": userdata['userData']['charaSlot'][1],
+ "characterLevel2": random.randint(1000,6500),
+ "characterAwakening2": 5,
+ "characterId3": userdata['userData']['charaSlot'][2],
+ "characterLevel3": random.randint(1000,6500),
+ "characterAwakening3": 5,
+ "characterId4": userdata['userData']['charaSlot'][3],
+ "characterLevel4": random.randint(1000,6500),
+ "characterAwakening4": 5,
+ "characterId5": userdata['userData']['charaSlot'][4],
+ "characterLevel5": random.randint(1000,6500),
+ "characterAwakening5": 5,
+ "achievement": int(achievement),
+ "deluxscore": int(deluxscoreMax),
+ "scoreRank": int(scoreRank),
+ "maxCombo": random.randint(400,500),
+ "totalCombo": random.randint(700,900),
+ "maxSync": 0,
+ "totalSync": 0,
+ "tapCriticalPerfect": random.randint(200,400),
+ "tapPerfect": random.randint(100,250),
+ "tapGreat": random.randint(0,10),
+ "tapGood": random.randint(0,10),
+ "tapMiss": random.randint(0,10),
+ "holdCriticalPerfect": random.randint(20,40),
+ "holdPerfect": random.randint(0,15),
+ "holdGreat": 0,
+ "holdGood": 0,
+ "holdMiss": 0,
+ "slideCriticalPerfect": random.randint(34,60),
+ "slidePerfect": 0,
+ "slideGreat": 0,
+ "slideGood": 0,
+ "slideMiss": 0,
+ "touchCriticalPerfect": random.randint(20,70),
+ "touchPerfect": 0,
+ "touchGreat": 0,
+ "touchGood": 0,
+ "touchMiss": 0,
+ "breakCriticalPerfect": random.randint(8,30),
+ "breakPerfect": random.randint(7,10),
+ "breakGreat": 0,
+ "breakGood": 0,
+ "breakMiss": 0,
+ "isTap": True,
+ "isHold": True,
+ "isSlide": True,
+ "isTouch": True,
+ "isBreak": True,
+ "isCriticalDisp": True,
+ "isFastLateDisp": True,
+ "fastCount": random.randint(20,30),
+ "lateCount": random.randint(50,70),
+ "isAchieveNewRecord": True,
+ "isDeluxscoreNewRecord": True,
+ "comboStatus": 0,
+ "syncStatus": 0,
+ "isClear": True,
+ 'beforeRating': userdata['userData']['playerRating'],
+ 'afterRating': userdata['userData']['playerRating'],
+ "beforeGrade": 0,
+ "afterGrade": 0,
+ "afterGradeRank": 2,
+ 'beforeDeluxRating': userdata['userData']['playerRating'],
+ 'afterDeluxRating': userdata['userData']['playerRating'],
+ "isPlayTutorial": False,
+ "isEventMode": False,
+ "isFreedomMode": False,
+ "playMode": 0,
+ "isNewFree": False,
+ "trialPlayAchievement": -1,
+ "extNum1": 0,
+ "extNum2": 0,
+ "extNum4": 3020,
+ "extBool1": False
+ }
+ })
+
+ userlog_result = json.loads(sdgb_api(data, "UploadUserPlaylogApi", userId))
+
+ # 获取 User Extend
+ data = json.dumps({
+ "userId": int(userId)
+ })
+
+ user_extend = json.loads(sdgb_api(data, "GetUserExtendApi", userId))
+
+ # 获取 User Option
+ data = json.dumps({
+ "userId": int(userId)
+ })
+
+ user_option = json.loads(sdgb_api(data, "GetUserOptionApi", userId))
+
+
+ # 获取 User Rating
+ data = json.dumps({
+ "userId": int(userId)
+ })
+
+ user_rating = json.loads(sdgb_api(data, "GetUserRatingApi", userId))
+
+
+ # 获取 User Activity
+ data = json.dumps({
+ "userId": int(userId)
+ })
+
+ user_activity = json.loads(sdgb_api(data, "GetUserActivityApi", userId))
+
+
+ # 获取账号功能票
+ data = json.dumps({
+ "userId": int(userId)
+ })
+
+ user_charge = json.loads(sdgb_api(data, "GetUserChargeApi", userId))
+
+ # UserAll
+
+ data = json.dumps({
+ "userId": int(userId),
+ "playlogId": login_id,
+ "isEventMode": False,
+ "isFreePlay": False,
+ "upsertUserAll": {
+ "userData": [
+ {
+ "accessCode": "",
+ "userName": userdata['userData']['userName'],
+ "isNetMember": 1,
+ "iconId": userdata['userData']['iconId'],
+ "plateId": userdata['userData']['plateId'],
+ "titleId": userdata['userData']['titleId'],
+ "partnerId": userdata['userData']['partnerId'],
+ "frameId": userdata['userData']['frameId'],
+ "selectMapId": userdata['userData']['selectMapId'],
+ "totalAwake": userdata['userData']['totalAwake'],
+ "gradeRating": userdata['userData']['gradeRating'],
+ "musicRating": userdata['userData']['musicRating'],
+ "playerRating": userdata['userData']['playerRating'],
+ "highestRating": userdata['userData']['highestRating'],
+ "gradeRank": userdata['userData']['gradeRank'],
+ "classRank": userdata['userData']['classRank'],
+ "courseRank": userdata['userData']['courseRank'],
+ "charaSlot": userdata['userData']['charaSlot'],
+ "charaLockSlot": userdata['userData']['charaLockSlot'],
+ "contentBit": userdata['userData']['contentBit'],
+ "playCount": userdata['userData']['playCount'],
+ "currentPlayCount": userdata['userData']['currentPlayCount'],
+ "renameCredit": 0,
+ "mapStock": 99000,
+ "eventWatchedDate": userdata['userData']['eventWatchedDate'],
+ "lastGameId": "SDGB",
+ "lastRomVersion": userdata['userData']['lastRomVersion'],
+ "lastDataVersion": userdata['userData']['lastDataVersion'],
+ "lastLoginDate": login_date,
+ "lastPlayDate": datetime.now(pytz.timezone('Asia/Shanghai')).strftime('%Y-%m-%d %H:%M:%S') + '.0',
+ "lastPlayCredit": 1,
+ "lastPlayMode": 0,
+ "lastPlaceId": placeId,
+ "lastPlaceName": placeName,
+ "lastAllNetId": 0,
+ "lastRegionId": regionId,
+ "lastRegionName": regionName,
+ "lastClientId": clientId,
+ "lastCountryCode": "CHN",
+ "lastSelectEMoney": 0,
+ "lastSelectTicket": 0,
+ "lastSelectCourse": userdata['userData']['lastSelectCourse'],
+ "lastCountCourse": 0,
+ "firstGameId": "SDGB",
+ "firstRomVersion": userdata['userData']['firstRomVersion'],
+ "firstDataVersion": userdata['userData']['firstDataVersion'],
+ "firstPlayDate": userdata['userData']['firstPlayDate'],
+ "compatibleCmVersion": userdata['userData']['compatibleCmVersion'],
+ "dailyBonusDate": userdata['userData']['dailyBonusDate'],
+ "dailyCourseBonusDate": userdata['userData']['dailyCourseBonusDate'],
+ "lastPairLoginDate": userdata['userData']['lastPairLoginDate'],
+ "lastTrialPlayDate": userdata['userData']['lastTrialPlayDate'],
+ "playVsCount": 0,
+ "playSyncCount": 0,
+ "winCount": 0,
+ "helpCount": 0,
+ "comboCount": 0,
+ "totalDeluxscore": userdata['userData']['totalDeluxscore'],
+ "totalBasicDeluxscore": userdata['userData']['totalBasicDeluxscore'],
+ "totalAdvancedDeluxscore": userdata['userData']['totalAdvancedDeluxscore'],
+ "totalExpertDeluxscore": userdata['userData']['totalExpertDeluxscore'],
+ "totalMasterDeluxscore": userdata['userData']['totalMasterDeluxscore'],
+ "totalReMasterDeluxscore": userdata['userData']['totalReMasterDeluxscore'],
+ "totalSync": userdata['userData']['totalSync'],
+ "totalBasicSync": userdata['userData']['totalBasicSync'],
+ "totalAdvancedSync": userdata['userData']['totalAdvancedSync'],
+ "totalExpertSync": userdata['userData']['totalExpertSync'],
+ "totalMasterSync": userdata['userData']['totalMasterSync'],
+ "totalReMasterSync": userdata['userData']['totalReMasterSync'],
+ "totalAchievement": userdata['userData']['totalAchievement'],
+ "totalBasicAchievement": userdata['userData']['totalBasicAchievement'],
+ "totalAdvancedAchievement": userdata['userData']['totalAdvancedAchievement'],
+ "totalExpertAchievement": userdata['userData']['totalExpertAchievement'],
+ "totalMasterAchievement": userdata['userData']['totalMasterAchievement'],
+ "totalReMasterAchievement": userdata['userData']['totalReMasterAchievement'],
+ "playerOldRating": userdata['userData']['playerOldRating'],
+ "playerNewRating": userdata['userData']['playerNewRating'],
+ "banState": 0,
+ "dateTime": timestamp
+ }
+ ],
+ "userExtend": [user_extend['userExtend']],
+ "userOption": [user_option['userOption']],
+ "userCharacterList": [],
+ "userGhost": [],
+ "userMapList": [],
+ "userLoginBonusList": [],
+ "userRatingList": [user_rating['userRating']],
+ "userItemList": [],
+ "userMusicDetailList": [
+ {
+ "musicId": musicId,
+ "level": level,
+ "playCount": playCount,
+ "achievement": achievement,
+ "comboStatus": comboStatus,
+ "syncStatus": syncStatus,
+ "deluxscoreMax": deluxscoreMax,
+ "scoreRank": scoreRank,
+ "extNum1": extNum1
+ }
+ ],
+ "userCourseList": [],
+ "userFriendSeasonRankingList": [],
+ "userChargeList": user_charge['userChargeList'],
+ "userFavoriteList": [],
+ "userActivityList": [user_activity['userActivity']],
+ "userGamePlaylogList": [
+ {
+ "playlogId": login_id,
+ "version": "1.41.00",
+ "playDate": datetime.now(pytz.timezone('Asia/Shanghai')).strftime('%Y-%m-%d %H:%M:%S') + '.0',
+ "playMode": 0,
+ "useTicketId": -1,
+ "playCredit": 1,
+ "playTrack": 1,
+ "clientId": clientId,
+ "isPlayTutorial": False,
+ "isEventMode": False,
+ "isNewFree": False,
+ "playCount": 0,
+ "playSpecial": CalcRandom(),
+ "playOtherUserId": 0
+ }
+ ],
+ "user2pPlaylog": {
+ "userId1": 0,
+ "userId2": 0,
+ "userName1": "",
+ "userName2": "",
+ "regionId": 0,
+ "placeId": 0,
+ "user2pPlaylogDetailList": []
+ },
+ "isNewCharacterList": "",
+ "isNewMapList": "",
+ "isNewLoginBonusList": "",
+ "isNewItemList": "",
+ "isNewMusicDetailList": "1",
+ "isNewCourseList": "0",
+ "isNewFavoriteList": "",
+ "isNewFriendSeasonRankingList": ""
+ }
+ })
+
+ userall_result = json.loads(sdgb_api(data, "UpsertUserAllApi", userId))
+
+ data = json.dumps({
+ "UserLogin": login_result,
+ "UserPlaylog": userlog_result,
+ "UpsertUserall": userall_result
+ })
+
+ return data
+
+def music_with_retry(userId):
+ for i in range(5): # 重试次数
+ try:
+ music(userId)
+ return logout(userId, timestamp)
+ except ValueError as e:
+ logout(userId, timestamp)
+ time.sleep(3)
+ return json.dumps({"status": "500 Internal Server Error"}), 500
diff --git a/music.json b/music.json
new file mode 100644
index 0000000..386130c
--- /dev/null
+++ b/music.json
@@ -0,0 +1,678 @@
+[
+ 10146,
+ 10191,
+ 10256,
+ 10288,
+ 10301,
+ 10319,
+ 10363,
+ 10420,
+ 10536,
+ 10572,
+ 10593,
+ 10641,
+ 10665,
+ 10702,
+ 10706,
+ 10734,
+ 11001,
+ 11002,
+ 11003,
+ 11004,
+ 11005,
+ 11006,
+ 11007,
+ 11008,
+ 11009,
+ 11010,
+ 11014,
+ 11015,
+ 11016,
+ 11017,
+ 11018,
+ 11019,
+ 11020,
+ 11021,
+ 11022,
+ 11023,
+ 11024,
+ 11025,
+ 11026,
+ 11027,
+ 11028,
+ 11029,
+ 11030,
+ 11031,
+ 11034,
+ 11037,
+ 11043,
+ 11044,
+ 11046,
+ 11048,
+ 11050,
+ 11051,
+ 11052,
+ 11058,
+ 11059,
+ 11060,
+ 11061,
+ 11064,
+ 11065,
+ 11066,
+ 11067,
+ 11069,
+ 11070,
+ 11073,
+ 11075,
+ 11077,
+ 11078,
+ 11080,
+ 11081,
+ 11083,
+ 11084,
+ 11085,
+ 11086,
+ 11087,
+ 11088,
+ 11032,
+ 11049,
+ 11089,
+ 11090,
+ 11091,
+ 11092,
+ 11093,
+ 11094,
+ 11095,
+ 11096,
+ 11097,
+ 11098,
+ 11099,
+ 11100,
+ 11101,
+ 11102,
+ 11103,
+ 11104,
+ 11105,
+ 11106,
+ 11107,
+ 11108,
+ 11109,
+ 11110,
+ 11111,
+ 11113,
+ 11115,
+ 11121,
+ 11122,
+ 11123,
+ 11124,
+ 11125,
+ 11126,
+ 11127,
+ 11128,
+ 11129,
+ 11130,
+ 11131,
+ 11132,
+ 11133,
+ 11134,
+ 11135,
+ 11136,
+ 11137,
+ 11138,
+ 11139,
+ 11140,
+ 11141,
+ 11142,
+ 11143,
+ 11145,
+ 11146,
+ 11147,
+ 11148,
+ 11149,
+ 11150,
+ 10188,
+ 10690,
+ 11152,
+ 11153,
+ 11154,
+ 11155,
+ 11156,
+ 11157,
+ 11158,
+ 11159,
+ 11160,
+ 11161,
+ 11162,
+ 11163,
+ 11164,
+ 11165,
+ 11166,
+ 11167,
+ 11168,
+ 11171,
+ 11172,
+ 11173,
+ 11174,
+ 11175,
+ 11176,
+ 11177,
+ 11184,
+ 11185,
+ 11186,
+ 11187,
+ 11188,
+ 11189,
+ 11190,
+ 11191,
+ 11192,
+ 11193,
+ 11194,
+ 11198,
+ 11199,
+ 11200,
+ 11201,
+ 11202,
+ 11204,
+ 11205,
+ 11206,
+ 11207,
+ 11208,
+ 11209,
+ 11210,
+ 11211,
+ 11212,
+ 11213,
+ 11214,
+ 11215,
+ 11216,
+ 11219,
+ 11221,
+ 11222,
+ 11169,
+ 11170,
+ 11223,
+ 11224,
+ 11225,
+ 11226,
+ 11227,
+ 11228,
+ 11229,
+ 11230,
+ 11231,
+ 11232,
+ 11233,
+ 11234,
+ 11235,
+ 11236,
+ 11237,
+ 11238,
+ 11239,
+ 11240,
+ 11241,
+ 11242,
+ 11243,
+ 11246,
+ 11247,
+ 11248,
+ 11249,
+ 11253,
+ 11255,
+ 11260,
+ 11261,
+ 11262,
+ 11263,
+ 11264,
+ 11265,
+ 11266,
+ 11267,
+ 11268,
+ 11269,
+ 11270,
+ 11271,
+ 11272,
+ 11273,
+ 11274,
+ 11275,
+ 11276,
+ 11277,
+ 11278,
+ 11279,
+ 11280,
+ 11281,
+ 11282,
+ 11283,
+ 11284,
+ 11285,
+ 11286,
+ 11287,
+ 11288,
+ 11289,
+ 11290,
+ 11291,
+ 11292,
+ 11293,
+ 11294,
+ 1020,
+ 1051,
+ 10552,
+ 10602,
+ 11295,
+ 11296,
+ 11297,
+ 11298,
+ 11299,
+ 11300,
+ 11301,
+ 11302,
+ 11303,
+ 11304,
+ 11305,
+ 11306,
+ 11307,
+ 11308,
+ 11309,
+ 11310,
+ 11311,
+ 11312,
+ 11313,
+ 11314,
+ 11315,
+ 11316,
+ 11317,
+ 11318,
+ 11319,
+ 11325,
+ 11327,
+ 11328,
+ 11329,
+ 11330,
+ 11331,
+ 11333,
+ 11334,
+ 11335,
+ 11336,
+ 11340,
+ 11341,
+ 11342,
+ 11343,
+ 11344,
+ 11345,
+ 11349,
+ 11350,
+ 11351,
+ 11353,
+ 11354,
+ 11355,
+ 11358,
+ 11359,
+ 11360,
+ 11361,
+ 11362,
+ 11363,
+ 11364,
+ 11365,
+ 11369,
+ 11373,
+ 11374,
+ 11443,
+ 11401,
+ 11390,
+ 1081,
+ 1085,
+ 10145,
+ 10193,
+ 10202,
+ 11346,
+ 11375,
+ 11376,
+ 11377,
+ 11378,
+ 11379,
+ 11380,
+ 11381,
+ 11382,
+ 11383,
+ 11384,
+ 11385,
+ 11386,
+ 11387,
+ 11388,
+ 11389,
+ 11391,
+ 11392,
+ 11393,
+ 11394,
+ 11395,
+ 11398,
+ 11399,
+ 11400,
+ 11402,
+ 11404,
+ 11405,
+ 11410,
+ 11411,
+ 11412,
+ 11413,
+ 11415,
+ 11418,
+ 11419,
+ 11420,
+ 11421,
+ 11422,
+ 11423,
+ 11424,
+ 11425,
+ 11426,
+ 11427,
+ 11428,
+ 11429,
+ 11430,
+ 11431,
+ 11432,
+ 11433,
+ 11434,
+ 11435,
+ 11436,
+ 11437,
+ 11438,
+ 11439,
+ 11441,
+ 11444,
+ 11445,
+ 11446,
+ 11447,
+ 11448,
+ 11449,
+ 11450,
+ 11451,
+ 1235,
+ 10190,
+ 10235,
+ 10302,
+ 10316,
+ 10404,
+ 10625,
+ 11197,
+ 11218,
+ 11337,
+ 11371,
+ 11372,
+ 11452,
+ 11453,
+ 11454,
+ 11455,
+ 11456,
+ 11457,
+ 11458,
+ 11459,
+ 11460,
+ 11461,
+ 11462,
+ 11463,
+ 11464,
+ 11465,
+ 11466,
+ 11467,
+ 11468,
+ 11469,
+ 11470,
+ 11471,
+ 11472,
+ 11473,
+ 11474,
+ 11475,
+ 11477,
+ 11478,
+ 11479,
+ 11481,
+ 11482,
+ 11483,
+ 11484,
+ 11485,
+ 11486,
+ 11487,
+ 11488,
+ 11489,
+ 11490,
+ 11491,
+ 11495,
+ 11496,
+ 11497,
+ 11498,
+ 11499,
+ 11500,
+ 11502,
+ 11503,
+ 11504,
+ 11505,
+ 11506,
+ 11507,
+ 11508,
+ 11509,
+ 11510,
+ 11511,
+ 11512,
+ 11513,
+ 11514,
+ 11516,
+ 11517,
+ 11518,
+ 11519,
+ 11520,
+ 11521,
+ 11523,
+ 11524,
+ 11525,
+ 11549,
+ 11565,
+ 11566,
+ 11568,
+ 10070,
+ 10204,
+ 10251,
+ 10315,
+ 10574,
+ 11492,
+ 11493,
+ 11494,
+ 11526,
+ 11527,
+ 11528,
+ 11529,
+ 11530,
+ 11532,
+ 11533,
+ 11538,
+ 11539,
+ 11540,
+ 11541,
+ 11542,
+ 11543,
+ 11544,
+ 11545,
+ 11546,
+ 11547,
+ 11548,
+ 11550,
+ 11551,
+ 11552,
+ 11553,
+ 11554,
+ 11555,
+ 11556,
+ 11557,
+ 11558,
+ 11559,
+ 11560,
+ 11561,
+ 11562,
+ 11563,
+ 11564,
+ 11569,
+ 11570,
+ 11571,
+ 11572,
+ 11573,
+ 11574,
+ 11575,
+ 11576,
+ 11577,
+ 11583,
+ 11584,
+ 11585,
+ 11586,
+ 11587,
+ 11588,
+ 11589,
+ 11590,
+ 11591,
+ 11592,
+ 11593,
+ 11594,
+ 11596,
+ 11598,
+ 11599,
+ 11600,
+ 11601,
+ 11602,
+ 11603,
+ 11604,
+ 11605,
+ 11606,
+ 11607,
+ 11619,
+ 1103,
+ 10185,
+ 10242,
+ 10366,
+ 10411,
+ 10535,
+ 11534,
+ 11535,
+ 11536,
+ 11537,
+ 11567,
+ 11578,
+ 11580,
+ 11597,
+ 11608,
+ 11609,
+ 11610,
+ 11611,
+ 11612,
+ 11613,
+ 11614,
+ 11615,
+ 11616,
+ 11617,
+ 11618,
+ 11620,
+ 11621,
+ 11622,
+ 11623,
+ 11624,
+ 11625,
+ 11626,
+ 11627,
+ 11628,
+ 11629,
+ 11630,
+ 11631,
+ 11632,
+ 11633,
+ 11636,
+ 11637,
+ 11638,
+ 11639,
+ 11640,
+ 11641,
+ 11642,
+ 11643,
+ 11645,
+ 11646,
+ 11647,
+ 11648,
+ 11650,
+ 11651,
+ 11652,
+ 11653,
+ 11654,
+ 11655,
+ 11656,
+ 11657,
+ 11658,
+ 11659,
+ 11660,
+ 11661,
+ 11662,
+ 11663,
+ 11664,
+ 11668,
+ 1301,
+ 10044,
+ 10117,
+ 10128,
+ 10225,
+ 11669,
+ 11670,
+ 11671,
+ 11672,
+ 11673,
+ 11674,
+ 11675,
+ 11676,
+ 11677,
+ 11678,
+ 11679,
+ 11680,
+ 11681,
+ 11682,
+ 11683,
+ 11684,
+ 11685,
+ 11686,
+ 11687,
+ 11688,
+ 11689,
+ 11690,
+ 11691,
+ 11692,
+ 11693,
+ 11694,
+ 11695,
+ 11696,
+ 11697,
+ 11698,
+ 11699,
+ 11700,
+ 11701,
+ 11702,
+ 11704,
+ 11705,
+ 11706,
+ 11707,
+ 11710,
+ 11711,
+ 11712,
+ 11713,
+ 11714,
+ 11715,
+ 11716,
+ 11717,
+ 11718,
+ 11720,
+ 11721,
+ 11722,
+ 11723,
+ 11724,
+ 11725,
+ 11726,
+ 11727,
+ 11728,
+ 11729,
+ 11730,
+ 11731,
+ 11733,
+ 11734,
+ 11735
+]
\ No newline at end of file
diff --git a/music.py b/music.py
new file mode 100644
index 0000000..9ad2843
--- /dev/null
+++ b/music.py
@@ -0,0 +1,392 @@
+import json
+import pytz
+import time
+import random
+
+from sdgb import sdgb_api
+from datetime import datetime, timedelta
+
+from settings import regionId
+from settings import regionName
+from settings import clientId
+from settings import placeId
+from settings import placeName
+
+from login import login
+from logout import logout
+
+def CalcRandom():
+ max = 1037933
+ num2 = random.randint(1, max) * 2069
+
+ num2 += 1024 # specialnum
+ num3 = 0
+ for i in range(0, 32):
+ num3 <<= 1
+ num3 += num2 % 2
+ num2 >>= 1
+
+ return num3
+
+timestamp = int(time.time())
+
+def music(userId, music_data):
+
+ music = music_data
+
+ musicId = music['musicId']
+ level = music['level']
+ playCount = music['playCount']
+ achievement = music['achievement']
+ comboStatus = music['comboStatus']
+ syncStatus = music['syncStatus']
+ deluxscoreMax = music['deluxscoreMax']
+ scoreRank = music['scoreRank']
+
+ # UserLogin
+
+ login_result = login(userId, timestamp)
+
+ login_id = login_result['loginId']
+ login_date = login_result['lastLoginDate']
+
+
+ # UserData
+
+ data = json.dumps({
+ "userId": int(userId)
+ })
+
+ userdata = json.loads(sdgb_api(data, "GetUserDataApi", userId))
+
+ # UserLog
+
+ data = json.dumps({
+ "userId": int(userId),
+ "userPlaylog": {
+ "userId": 0,
+ "orderId": 0,
+ "playlogId": login_id,
+ "version": 1041000,
+ "placeId": placeId,
+ "placeName": placeName,
+ "loginDate": int(time.time()),
+ "playDate": datetime.now(pytz.timezone('Asia/Shanghai')).strftime('%Y-%m-%d'),
+ "userPlayDate": datetime.now(pytz.timezone('Asia/Shanghai')).strftime('%Y-%m-%d %H:%M:%S') + '.0',
+ "type": 0,
+ "musicId": int(musicId),
+ "level": int(level),
+ "trackNo": 1,
+ "vsMode": 0,
+ "vsUserName": "",
+ "vsStatus": 0,
+ "vsUserRating": 0,
+ "vsUserAchievement": 0,
+ "vsUserGradeRank": 0,
+ "vsRank": 0,
+ "playerNum": 1,
+ "playedUserId1": 0,
+ "playedUserName1": "",
+ "playedMusicLevel1": 0,
+ "playedUserId2": 0,
+ "playedUserName2": "",
+ "playedMusicLevel2": 0,
+ "playedUserId3": 0,
+ "playedUserName3": "",
+ "playedMusicLevel3": 0,
+ "characterId1": userdata['userData']['charaSlot'][0],
+ "characterLevel1": random.randint(1000,6500),
+ "characterAwakening1": 5,
+ "characterId2": userdata['userData']['charaSlot'][1],
+ "characterLevel2": random.randint(1000,6500),
+ "characterAwakening2": 5,
+ "characterId3": userdata['userData']['charaSlot'][2],
+ "characterLevel3": random.randint(1000,6500),
+ "characterAwakening3": 5,
+ "characterId4": userdata['userData']['charaSlot'][3],
+ "characterLevel4": random.randint(1000,6500),
+ "characterAwakening4": 5,
+ "characterId5": userdata['userData']['charaSlot'][4],
+ "characterLevel5": random.randint(1000,6500),
+ "characterAwakening5": 5,
+ "achievement": int(achievement),
+ "deluxscore": int(deluxscoreMax),
+ "scoreRank": int(scoreRank),
+ "maxCombo": random.randint(400,500),
+ "totalCombo": random.randint(700,900),
+ "maxSync": 0,
+ "totalSync": 0,
+ "tapCriticalPerfect": random.randint(200,400),
+ "tapPerfect": random.randint(100,250),
+ "tapGreat": random.randint(0,10),
+ "tapGood": random.randint(0,10),
+ "tapMiss": random.randint(0,10),
+ "holdCriticalPerfect": random.randint(20,40),
+ "holdPerfect": random.randint(0,15),
+ "holdGreat": 0,
+ "holdGood": 0,
+ "holdMiss": 0,
+ "slideCriticalPerfect": random.randint(34,60),
+ "slidePerfect": 0,
+ "slideGreat": 0,
+ "slideGood": 0,
+ "slideMiss": 0,
+ "touchCriticalPerfect": random.randint(20,70),
+ "touchPerfect": 0,
+ "touchGreat": 0,
+ "touchGood": 0,
+ "touchMiss": 0,
+ "breakCriticalPerfect": random.randint(8,30),
+ "breakPerfect": random.randint(7,10),
+ "breakGreat": 0,
+ "breakGood": 0,
+ "breakMiss": 0,
+ "isTap": True,
+ "isHold": True,
+ "isSlide": True,
+ "isTouch": True,
+ "isBreak": True,
+ "isCriticalDisp": True,
+ "isFastLateDisp": True,
+ "fastCount": random.randint(20,30),
+ "lateCount": random.randint(50,70),
+ "isAchieveNewRecord": True,
+ "isDeluxscoreNewRecord": True,
+ "comboStatus": 0,
+ "syncStatus": 0,
+ "isClear": True,
+ 'beforeRating': userdata['userData']['playerRating'],
+ 'afterRating': userdata['userData']['playerRating'],
+ "beforeGrade": 0,
+ "afterGrade": 0,
+ "afterGradeRank": 2,
+ 'beforeDeluxRating': userdata['userData']['playerRating'],
+ 'afterDeluxRating': userdata['userData']['playerRating'],
+ "isPlayTutorial": False,
+ "isEventMode": False,
+ "isFreedomMode": False,
+ "playMode": 0,
+ "isNewFree": False,
+ "trialPlayAchievement": -1,
+ "extNum1": 0,
+ "extNum2": 0,
+ "extNum4": 3020,
+ "extBool1": False
+ }
+ })
+
+ userlog_result = json.loads(sdgb_api(data, "UploadUserPlaylogApi", userId))
+
+ # 获取 User Extend
+ data = json.dumps({
+ "userId": int(userId)
+ })
+
+ user_extend = json.loads(sdgb_api(data, "GetUserExtendApi", userId))
+
+ # 获取 User Option
+ data = json.dumps({
+ "userId": int(userId)
+ })
+
+ user_option = json.loads(sdgb_api(data, "GetUserOptionApi", userId))
+
+
+ # 获取 User Rating
+ data = json.dumps({
+ "userId": int(userId)
+ })
+
+ user_rating = json.loads(sdgb_api(data, "GetUserRatingApi", userId))
+
+
+ # 获取 User Activity
+ data = json.dumps({
+ "userId": int(userId)
+ })
+
+ user_activity = json.loads(sdgb_api(data, "GetUserActivityApi", userId))
+
+
+ # 获取账号功能票
+ data = json.dumps({
+ "userId": int(userId)
+ })
+
+ user_charge = json.loads(sdgb_api(data, "GetUserChargeApi", userId))
+
+
+ # UserAll
+
+ data = json.dumps({
+ "userId": int(userId),
+ "playlogId": login_id,
+ "isEventMode": False,
+ "isFreePlay": False,
+ "upsertUserAll": {
+ "userData": [
+ {
+ "accessCode": "",
+ "userName": userdata['userData']['userName'],
+ "isNetMember": 1,
+ "iconId": userdata['userData']['iconId'],
+ "plateId": userdata['userData']['plateId'],
+ "titleId": userdata['userData']['titleId'],
+ "partnerId": userdata['userData']['partnerId'],
+ "frameId": userdata['userData']['frameId'],
+ "selectMapId": userdata['userData']['selectMapId'],
+ "totalAwake": userdata['userData']['totalAwake'],
+ "gradeRating": userdata['userData']['gradeRating'],
+ "musicRating": userdata['userData']['musicRating'],
+ "playerRating": userdata['userData']['playerRating'],
+ "highestRating": userdata['userData']['highestRating'],
+ "gradeRank": userdata['userData']['gradeRank'],
+ "classRank": userdata['userData']['classRank'],
+ "courseRank": userdata['userData']['courseRank'],
+ "charaSlot": userdata['userData']['charaSlot'],
+ "charaLockSlot": userdata['userData']['charaLockSlot'],
+ "contentBit": userdata['userData']['contentBit'],
+ "playCount": userdata['userData']['playCount'],
+ "currentPlayCount": userdata['userData']['currentPlayCount'],
+ "renameCredit": 0,
+ "mapStock": userdata['userData']['mapStock'],
+ "eventWatchedDate": userdata['userData']['eventWatchedDate'],
+ "lastGameId": "SDGB",
+ "lastRomVersion": userdata['userData']['lastRomVersion'],
+ "lastDataVersion": userdata['userData']['lastDataVersion'],
+ "lastLoginDate": login_date,
+ "lastPlayDate": datetime.now(pytz.timezone('Asia/Shanghai')).strftime('%Y-%m-%d %H:%M:%S') + '.0',
+ "lastPlayCredit": 1,
+ "lastPlayMode": 0,
+ "lastPlaceId": placeId,
+ "lastPlaceName": placeName,
+ "lastAllNetId": 0,
+ "lastRegionId": regionId,
+ "lastRegionName": regionName,
+ "lastClientId": clientId,
+ "lastCountryCode": "CHN",
+ "lastSelectEMoney": 0,
+ "lastSelectTicket": 0,
+ "lastSelectCourse": userdata['userData']['lastSelectCourse'],
+ "lastCountCourse": 0,
+ "firstGameId": "SDGB",
+ "firstRomVersion": userdata['userData']['firstRomVersion'],
+ "firstDataVersion": userdata['userData']['firstDataVersion'],
+ "firstPlayDate": userdata['userData']['firstPlayDate'],
+ "compatibleCmVersion": userdata['userData']['compatibleCmVersion'],
+ "dailyBonusDate": userdata['userData']['dailyBonusDate'],
+ "dailyCourseBonusDate": userdata['userData']['dailyCourseBonusDate'],
+ "lastPairLoginDate": userdata['userData']['lastPairLoginDate'],
+ "lastTrialPlayDate": userdata['userData']['lastTrialPlayDate'],
+ "playVsCount": 0,
+ "playSyncCount": 0,
+ "winCount": 0,
+ "helpCount": 0,
+ "comboCount": 0,
+ "totalDeluxscore": userdata['userData']['totalDeluxscore'],
+ "totalBasicDeluxscore": userdata['userData']['totalBasicDeluxscore'],
+ "totalAdvancedDeluxscore": userdata['userData']['totalAdvancedDeluxscore'],
+ "totalExpertDeluxscore": userdata['userData']['totalExpertDeluxscore'],
+ "totalMasterDeluxscore": userdata['userData']['totalMasterDeluxscore'],
+ "totalReMasterDeluxscore": userdata['userData']['totalReMasterDeluxscore'],
+ "totalSync": userdata['userData']['totalSync'],
+ "totalBasicSync": userdata['userData']['totalBasicSync'],
+ "totalAdvancedSync": userdata['userData']['totalAdvancedSync'],
+ "totalExpertSync": userdata['userData']['totalExpertSync'],
+ "totalMasterSync": userdata['userData']['totalMasterSync'],
+ "totalReMasterSync": userdata['userData']['totalReMasterSync'],
+ "totalAchievement": userdata['userData']['totalAchievement'],
+ "totalBasicAchievement": userdata['userData']['totalBasicAchievement'],
+ "totalAdvancedAchievement": userdata['userData']['totalAdvancedAchievement'],
+ "totalExpertAchievement": userdata['userData']['totalExpertAchievement'],
+ "totalMasterAchievement": userdata['userData']['totalMasterAchievement'],
+ "totalReMasterAchievement": userdata['userData']['totalReMasterAchievement'],
+ "playerOldRating": userdata['userData']['playerOldRating'],
+ "playerNewRating": userdata['userData']['playerNewRating'],
+ "banState": 0,
+ "dateTime": timestamp
+ }
+ ],
+ "userExtend": [user_extend['userExtend']],
+ "userOption": [user_option['userOption']],
+ "userCharacterList": [],
+ "userGhost": [],
+ "userMapList": [],
+ "userLoginBonusList": [],
+ "userRatingList": [user_rating['userRating']],
+ "userItemList": [],
+ "userMusicDetailList": [
+ {
+ "musicId": musicId,
+ "level": level,
+ "playCount": playCount,
+ "achievement": achievement,
+ "comboStatus": comboStatus,
+ "syncStatus": syncStatus,
+ "deluxscoreMax": deluxscoreMax,
+ "scoreRank": scoreRank,
+ "extNum1": 0
+ }
+ ],
+ "userCourseList": [],
+ "userFriendSeasonRankingList": [],
+ "userChargeList": user_charge['userChargeList'],
+ "userFavoriteList": [],
+ "userActivityList": [user_activity['userActivity']],
+ "userGamePlaylogList": [
+ {
+ "playlogId": login_id,
+ "version": "1.41.00",
+ "playDate": datetime.now(pytz.timezone('Asia/Shanghai')).strftime('%Y-%m-%d %H:%M:%S') + '.0',
+ "playMode": 0,
+ "useTicketId": -1,
+ "playCredit": 1,
+ "playTrack": 1,
+ "clientId": clientId,
+ "isPlayTutorial": False,
+ "isEventMode": False,
+ "isNewFree": False,
+ "playCount": 0,
+ "playSpecial": CalcRandom(),
+ "playOtherUserId": 0
+ }
+ ],
+ "user2pPlaylog": {
+ "userId1": 0,
+ "userId2": 0,
+ "userName1": "",
+ "userName2": "",
+ "regionId": 0,
+ "placeId": 0,
+ "user2pPlaylogDetailList": []
+ },
+ "isNewCharacterList": "",
+ "isNewMapList": "",
+ "isNewLoginBonusList": "",
+ "isNewItemList": "",
+ "isNewMusicDetailList": "0",
+ "isNewCourseList": "0",
+ "isNewFavoriteList": "",
+ "isNewFriendSeasonRankingList": ""
+ }
+ })
+
+ userall_result = json.loads(sdgb_api(data, "UpsertUserAllApi", userId))
+
+ data = json.dumps({
+ "UserLogin": login_result,
+ "UserPlaylog": userlog_result,
+ "UpsertUserall": userall_result
+ })
+
+ return data
+
+def music_with_retry(userId, music_data):
+ for i in range(5):
+ try:
+ music(userId, music_data)
+ return logout(userId, timestamp)
+ except ValueError as e:
+ logout(userId, timestamp)
+ time.sleep(3)
+ return json.dumps({"status": "500 Internal Server Error"}), 500
diff --git a/requirements.txt b/requirements.txt
new file mode 100644
index 0000000..527563b
--- /dev/null
+++ b/requirements.txt
@@ -0,0 +1,5 @@
+requests
+pycryptodome
+pytz
+flask
+flask-cors
\ No newline at end of file
diff --git a/sdgb.py b/sdgb.py
new file mode 100644
index 0000000..2cb8d01
--- /dev/null
+++ b/sdgb.py
@@ -0,0 +1,160 @@
+import json
+import zlib
+import pytz
+import hashlib
+import requests
+
+from binascii import unhexlify, hexlify
+import socket
+import re
+
+from Crypto.Cipher import AES
+from Crypto.Util.Padding import pad, unpad
+
+AesKey = "A;mv5YUpHBK3YxTy5KB^[;5]C2AL50Bq"
+AesIV = "9FM:sd9xA91X14v]"
+ObfuscateParam = "M9aBNKuY"
+
+class aes_pkcs7(object):
+ def __init__(self, key: str, iv: str):
+ self.key = key.encode('utf-8')
+ self.iv = iv.encode('utf-8')
+ self.mode = AES.MODE_CBC
+
+ def encrypt(self, content: bytes) -> bytes:
+ cipher = AES.new(self.key, self.mode, self.iv)
+ content_padded = pad(content, AES.block_size)
+ encrypted_bytes = cipher.encrypt(content_padded)
+ return encrypted_bytes
+
+ def decrypt(self, content):
+ cipher = AES.new(self.key, self.mode, self.iv)
+ decrypted_padded = cipher.decrypt(content)
+ decrypted = unpad(decrypted_padded, AES.block_size)
+ return decrypted
+
+ def pkcs7unpadding(self, text):
+ length = len(text)
+ unpadding = ord(text[length - 1])
+ return text[0:length - unpadding]
+
+ def pkcs7padding(self, text):
+ bs = 16
+ length = len(text)
+ bytes_length = len(text.encode('utf-8'))
+ padding_size = length if (bytes_length == length) else bytes_length
+ padding = bs - padding_size % bs
+ padding_text = chr(padding) * padding
+ return text + padding_text
+
+def get_hash_api(api):
+ return hashlib.md5((api+"MaimaiExp"+ObfuscateParam).encode()).hexdigest()
+
+def sdgb_api(data, useApi, userId):
+ aes = aes_pkcs7(AesKey,AesIV)
+ data = bytes(data, encoding="utf-8")
+ data_def = zlib.compress(data)
+ data_enc = aes.encrypt(data_def)
+ endpoint = "https://mai2exp.sic-rd1.jp:42081/Maimai2Servlet/"
+ requests.packages.urllib3.disable_warnings()
+ r = requests.post(
+ endpoint + get_hash_api(useApi),
+ headers = {
+ "User-Agent": "%s#%d"%(get_hash_api(useApi), userId),
+ "Content-Type": "application/json",
+ "Mai-Encoding": "1.51",
+ "Accept-Encoding": "",
+ "Charset": "UTF-8",
+ "Content-Encoding": "deflate",
+ "Expect": "100-continue"
+ },
+ data = data_enc
+ )
+ resp_enc = r.content
+ try:
+ resp_def = aes.decrypt(resp_enc)
+ except:
+ resp_def = resp_enc
+ return zlib.decompress(resp_def).decode('utf-8')
+
+def felica(IDm):
+ key = b'Copyright(C)SEGA'
+ # https://sega.bsnk.me/allnet/aimedb/common/
+ magic = "3ea1"
+ version = "2140"
+ command_id = "0100" # ID = 1
+ length = "3000" # 48
+ gameId = "534447410000" # SDGA
+ storeId = "aa1e0000"
+ keychip_ID = "413633453031453031383200" # A63E01E0264
+ header = magic + version + command_id + length + "0000" + gameId + storeId + keychip_ID
+
+ IDm = str(IDm)
+ PMm = "00F1000000014300"
+
+ plaintext_hex_stream = header + IDm + PMm
+
+ plaintext = unhexlify(plaintext_hex_stream)
+
+ cipher = AES.new(key, AES.MODE_ECB)
+ encrypted_message = cipher.encrypt(plaintext)
+
+ encrypted_hex_stream = hexlify(encrypted_message).decode('utf-8')
+
+ server_address = ('aime.naominet.jp', 22345)
+ with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock:
+ sock.connect(server_address)
+ sock.sendall(encrypted_message)
+
+ response = sock.recv(1024)
+
+ decrypted_response = cipher.decrypt(response)
+
+ decrypted_hex_stream = hexlify(decrypted_response).decode('utf-8')
+
+ return decrypted_hex_stream[-24:-4]
+
+def aimedb_api(accessCode):
+ key = b'Copyright(C)SEGA'
+ # https://sega.bsnk.me/allnet/aimedb/common/
+ magic = "3ea1"
+ version = "2140"
+ command_id = "0f00" # ID = 15
+ length = "3000" # 48
+ gameId = "534447410000" # SDGA
+ storeId = "aa1e0000"
+ keychip_ID = "413633453031453031383200" # A63E01E0264
+ header = magic + version + command_id + length + "0000" + gameId + storeId + keychip_ID
+
+ access_code = str(accessCode)
+ end_stream = "000201020304"
+
+
+ plaintext_hex_stream = header + access_code + end_stream
+
+ plaintext = unhexlify(plaintext_hex_stream)
+
+ cipher = AES.new(key, AES.MODE_ECB)
+ encrypted_message = cipher.encrypt(plaintext)
+
+ encrypted_hex_stream = hexlify(encrypted_message).decode('utf-8')
+
+ server_address = ('aime.naominet.jp', 22345)
+ with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock:
+ sock.connect(server_address)
+ sock.sendall(encrypted_message)
+
+ response = sock.recv(1024)
+
+ decrypted_response = cipher.decrypt(response)
+
+ decrypted_hex_stream = hexlify(decrypted_response).decode('utf-8')
+
+ match = re.search(r'[0-9a-f]{64}([0-9a-f]{6})', decrypted_hex_stream)
+ if match:
+ six_digit_code = match.group(1)
+
+ rearranged_hex = six_digit_code[4:6] + six_digit_code[2:4] + six_digit_code[0:2]
+
+ decimal_value = int(rearranged_hex, 16)
+ return decimal_value
diff --git a/ticket.py b/ticket.py
new file mode 100644
index 0000000..78a159f
--- /dev/null
+++ b/ticket.py
@@ -0,0 +1,43 @@
+import json
+import pytz
+import time
+
+from sdgb import sdgb_api
+from datetime import datetime, timedelta
+
+from settings import regionId
+from settings import clientId
+from settings import placeId
+
+from logout import logout
+from login import login
+
+def get_ticket(userId):
+ data = json.dumps({
+ "userId": userId,
+ "userCharge": {
+ "chargeId": 6,
+ "stock": 1,
+ "purchaseDate": (datetime.now(pytz.timezone('Asia/Shanghai')) - timedelta(hours=1)).strftime("%Y-%m-%d %H:%M:%S.0"),
+ "validDate": (datetime.now(pytz.timezone('Asia/Shanghai')) - timedelta(hours=1) + timedelta(days=90)).replace(hour=4, minute=0, second=0).strftime("%Y-%m-%d %H:%M:%S")
+ },
+ "userChargelog": {
+ "chargeId": 6,
+ "price": 4,
+ "purchaseDate": (datetime.now(pytz.timezone('Asia/Shanghai')) - timedelta(hours=1)).strftime("%Y-%m-%d %H:%M:%S.0"),
+ "placeId": placeId,
+ "regionId": regionId,
+ "clientId": clientId
+ }
+ })
+
+ ticket_result = json.loads(sdgb_api(data, "UpsertUserChargelogApi", userId))
+
+ return ticket_result
+
+if __name__ == "__main__":
+ timestamp = int(time.time())
+ print(timestamp)
+ print(login(timestamp))
+ print(get_ticket())
+ print(logout(timestamp))
diff --git a/unlock_all.py b/unlock_all.py
new file mode 100644
index 0000000..75b75cb
--- /dev/null
+++ b/unlock_all.py
@@ -0,0 +1,704 @@
+import json
+import pytz
+import time
+import random
+
+from sdgb import sdgb_api
+from datetime import datetime, timedelta
+
+from settings import music_data
+from settings import regionId
+from settings import regionName
+from settings import clientId
+from settings import placeId
+from settings import placeName
+
+from login import login
+from logout import logout
+
+def item(userId):
+ data = json.dumps({
+ "userId": int(userId),
+ "nextIndex":50000000000,
+ "maxCount":1000000000
+ })
+
+ music_result = json.loads(sdgb_api(data, "GetUserItemApi", userId))
+
+ data = json.dumps({
+ "userId": int(userId),
+ "nextIndex":60000000000,
+ "maxCount":1000000000
+ })
+ music_mas_result = json.loads(sdgb_api(data, "GetUserItemApi", userId))
+
+ return item_result
+
+def music_item():
+ music_item = []
+ with open('music.json') as file:
+ music_data = json.load(file)
+ for item in music_data:
+ data = ({
+ "itemKind": 5,
+ "itemId": item,
+ "stock": 1,
+ "isValid": True
+ })
+ music_item.append(data)
+ data = ({
+ "itemKind": 6,
+ "itemId": item,
+ "stock": 1,
+ "isValid": True
+ })
+ music_item.append(data)
+ music_item.extend([
+ {
+ "itemKind": 7,
+ "itemId": 11002,
+ "stock": 1,
+ "isValid": True
+ },
+ {
+ "itemKind": 7,
+ "itemId": 11004,
+ "stock": 1,
+ "isValid": True
+ },
+ {
+ "itemKind": 7,
+ "itemId": 11005,
+ "stock": 1,
+ "isValid": True
+ },
+ {
+ "itemKind": 7,
+ "itemId": 11007,
+ "stock": 1,
+ "isValid": True
+ },
+ {
+ "itemKind": 7,
+ "itemId": 11009,
+ "stock": 1,
+ "isValid": True
+ },
+ {
+ "itemKind": 7,
+ "itemId": 11010,
+ "stock": 1,
+ "isValid": True
+ },
+ {
+ "itemKind": 7,
+ "itemId": 11015,
+ "stock": 1,
+ "isValid": True
+ },
+ {
+ "itemKind": 7,
+ "itemId": 11018,
+ "stock": 1,
+ "isValid": True
+ },
+ {
+ "itemKind": 7,
+ "itemId": 11023,
+ "stock": 1,
+ "isValid": True
+ },
+ {
+ "itemKind": 7,
+ "itemId": 11100,
+ "stock": 1,
+ "isValid": True
+ },
+ {
+ "itemKind": 7,
+ "itemId": 11113,
+ "stock": 1,
+ "isValid": True
+ },
+ {
+ "itemKind": 7,
+ "itemId": 11152,
+ "stock": 1,
+ "isValid": True
+ },
+ {
+ "itemKind": 7,
+ "itemId": 11177,
+ "stock": 1,
+ "isValid": True
+ },
+ {
+ "itemKind": 7,
+ "itemId": 11180,
+ "stock": 1,
+ "isValid": True
+ },
+ {
+ "itemKind": 7,
+ "itemId": 11184,
+ "stock": 1,
+ "isValid": True
+ },
+ {
+ "itemKind": 7,
+ "itemId": 11228,
+ "stock": 1,
+ "isValid": True
+ },
+ {
+ "itemKind": 7,
+ "itemId": 11232,
+ "stock": 1,
+ "isValid": True
+ },
+ {
+ "itemKind": 7,
+ "itemId": 11241,
+ "stock": 1,
+ "isValid": True
+ },
+ {
+ "itemKind": 7,
+ "itemId": 11250,
+ "stock": 1,
+ "isValid": True
+ },
+ {
+ "itemKind": 7,
+ "itemId": 11251,
+ "stock": 1,
+ "isValid": True
+ },
+ {
+ "itemKind": 7,
+ "itemId": 11252,
+ "stock": 1,
+ "isValid": True
+ },
+ {
+ "itemKind": 7,
+ "itemId": 11254,
+ "stock": 1,
+ "isValid": True
+ },
+ {
+ "itemKind": 7,
+ "itemId": 11321,
+ "stock": 1,
+ "isValid": True
+ },
+ {
+ "itemKind": 7,
+ "itemId": 11322,
+ "stock": 1,
+ "isValid": True
+ },
+ {
+ "itemKind": 7,
+ "itemId": 11325,
+ "stock": 1,
+ "isValid": True
+ },
+ {
+ "itemKind": 7,
+ "itemId": 11333,
+ "stock": 1,
+ "isValid": True
+ },
+ {
+ "itemKind": 7,
+ "itemId": 11342,
+ "stock": 1,
+ "isValid": True
+ },
+ {
+ "itemKind": 7,
+ "itemId": 11343,
+ "stock": 1,
+ "isValid": True
+ },
+ {
+ "itemKind": 7,
+ "itemId": 11369,
+ "stock": 1,
+ "isValid": True
+ },
+ {
+ "itemKind": 7,
+ "itemId": 11407,
+ "stock": 1,
+ "isValid": True
+ },
+ {
+ "itemKind": 7,
+ "itemId": 11409,
+ "stock": 1,
+ "isValid": True
+ },
+ {
+ "itemKind": 7,
+ "itemId": 11410,
+ "stock": 1,
+ "isValid": True
+ },
+ {
+ "itemKind": 7,
+ "itemId": 11483,
+ "stock": 1,
+ "isValid": True
+ },
+ {
+ "itemKind": 7,
+ "itemId": 11485,
+ "stock": 1,
+ "isValid": True
+ },
+ {
+ "itemKind": 7,
+ "itemId": 11486,
+ "stock": 1,
+ "isValid": True
+ },
+ {
+ "itemKind": 7,
+ "itemId": 11558,
+ "stock": 1,
+ "isValid": True
+ },
+ {
+ "itemKind": 7,
+ "itemId": 11561,
+ "stock": 1,
+ "isValid": True
+ },
+ {
+ "itemKind": 7,
+ "itemId": 11562,
+ "stock": 1,
+ "isValid": True
+ },
+ {
+ "itemKind": 7,
+ "itemId": 11629,
+ "stock": 1,
+ "isValid": True
+ },
+ {
+ "itemKind": 7,
+ "itemId": 11634,
+ "stock": 1,
+ "isValid": True
+ },
+ {
+ "itemKind": 7,
+ "itemId": 11637,
+ "stock": 1,
+ "isValid": True
+ },
+ {
+ "itemKind": 7,
+ "itemId": 11663,
+ "stock": 1,
+ "isValid": True
+ }
+ ])
+ return music_item
+
+def CalcRandom():
+ max = 1037933
+ num2 = random.randint(1, max) * 2069
+
+ num2 += 1024 # specialnum
+ num3 = 0
+ for i in range(0, 32):
+ num3 <<= 1
+ num3 += num2 % 2
+ num2 >>= 1
+
+ return num3
+
+timestamp = int(time.time())
+
+def music(userId, accessCode):
+
+ music = music_data
+
+ musicId = music['musicId']
+ level = music['level']
+ playCount = music['playCount']
+ achievement = music['achievement']
+ comboStatus = music['comboStatus']
+ syncStatus = music['syncStatus']
+ deluxscoreMax = music['deluxscoreMax']
+ scoreRank = music['scoreRank']
+
+ # UserLogin
+
+ login_result = login(userId, accessCode, timestamp)
+
+ login_id = login_result['loginId']
+ login_date = login_result['lastLoginDate']
+
+
+ # UserData
+
+ data = json.dumps({
+ "userId": int(userId)
+ })
+
+ userdata = json.loads(sdgb_api(data, "GetUserDataApi", userId))
+
+ # UserLog
+
+ data = json.dumps({
+ "userId": int(userId),
+ "userPlaylogList": [{
+ "userId": 0,
+ "orderId": 0,
+ "playlogId": login_id,
+ "version": 1050000,
+ "placeId": placeId,
+ "placeName": placeName,
+ "loginDate": int(time.time()),
+ "playDate": datetime.now(pytz.timezone('Asia/Shanghai')).strftime('%Y-%m-%d'),
+ "userPlayDate": datetime.now(pytz.timezone('Asia/Shanghai')).strftime('%Y-%m-%d %H:%M:%S') + '.0',
+ "type": 0,
+ "musicId": int(musicId),
+ "level": int(level),
+ "trackNo": 1,
+ "vsMode": 0,
+ "vsUserName": "",
+ "vsStatus": 0,
+ "vsUserRating": 0,
+ "vsUserAchievement": 0,
+ "vsUserGradeRank": 0,
+ "vsRank": 0,
+ "playerNum": 1,
+ "playedUserId1": 0,
+ "playedUserName1": "",
+ "playedMusicLevel1": 0,
+ "playedUserId2": 0,
+ "playedUserName2": "",
+ "playedMusicLevel2": 0,
+ "playedUserId3": 0,
+ "playedUserName3": "",
+ "playedMusicLevel3": 0,
+ "characterId1": userdata['userData']['charaSlot'][0],
+ "characterLevel1": random.randint(1000,6500),
+ "characterAwakening1": 5,
+ "characterId2": userdata['userData']['charaSlot'][1],
+ "characterLevel2": random.randint(1000,6500),
+ "characterAwakening2": 5,
+ "characterId3": userdata['userData']['charaSlot'][2],
+ "characterLevel3": random.randint(1000,6500),
+ "characterAwakening3": 5,
+ "characterId4": userdata['userData']['charaSlot'][3],
+ "characterLevel4": random.randint(1000,6500),
+ "characterAwakening4": 5,
+ "characterId5": userdata['userData']['charaSlot'][4],
+ "characterLevel5": random.randint(1000,6500),
+ "characterAwakening5": 5,
+ "achievement": int(achievement),
+ "deluxscore": int(deluxscoreMax),
+ "scoreRank": int(scoreRank),
+ "maxCombo": random.randint(400,500),
+ "totalCombo": random.randint(700,900),
+ "maxSync": 0,
+ "totalSync": 0,
+ "tapCriticalPerfect": random.randint(200,400),
+ "tapPerfect": random.randint(100,250),
+ "tapGreat": random.randint(0,10),
+ "tapGood": random.randint(0,10),
+ "tapMiss": random.randint(0,10),
+ "holdCriticalPerfect": random.randint(20,40),
+ "holdPerfect": random.randint(0,15),
+ "holdGreat": 0,
+ "holdGood": 0,
+ "holdMiss": 0,
+ "slideCriticalPerfect": random.randint(34,60),
+ "slidePerfect": 0,
+ "slideGreat": 0,
+ "slideGood": 0,
+ "slideMiss": 0,
+ "touchCriticalPerfect": random.randint(20,70),
+ "touchPerfect": 0,
+ "touchGreat": 0,
+ "touchGood": 0,
+ "touchMiss": 0,
+ "breakCriticalPerfect": random.randint(8,30),
+ "breakPerfect": random.randint(7,10),
+ "breakGreat": 0,
+ "breakGood": 0,
+ "breakMiss": 0,
+ "isTap": True,
+ "isHold": True,
+ "isSlide": True,
+ "isTouch": True,
+ "isBreak": True,
+ "isCriticalDisp": True,
+ "isFastLateDisp": True,
+ "fastCount": random.randint(20,30),
+ "lateCount": random.randint(50,70),
+ "isAchieveNewRecord": True,
+ "isDeluxscoreNewRecord": True,
+ "comboStatus": 0,
+ "syncStatus": 0,
+ "isClear": True,
+ 'beforeRating': userdata['userData']['playerRating'],
+ 'afterRating': userdata['userData']['playerRating'],
+ "beforeGrade": 0,
+ "afterGrade": 0,
+ "afterGradeRank": 2,
+ 'beforeDeluxRating': userdata['userData']['playerRating'],
+ 'afterDeluxRating': userdata['userData']['playerRating'],
+ "isPlayTutorial": False,
+ "isEventMode": False,
+ "isFreedomMode": False,
+ "playMode": 0,
+ "isNewFree": False,
+ "trialPlayAchievement": -1,
+ "extNum1": 0,
+ "extNum2": 0,
+ "extNum4": 2020,
+ "extBool1": False,
+ "extBool2": False
+ }]
+ })
+
+ userlog_result = json.loads(sdgb_api(data, "UploadUserPlaylogListApi", userId))
+
+
+ # 获取 User Extend
+ data = json.dumps({
+ "userId": int(userId)
+ })
+
+ user_extend = json.loads(sdgb_api(data, "GetUserExtendApi", userId))
+
+ # 获取 User Option
+ data = json.dumps({
+ "userId": int(userId)
+ })
+
+ user_option = json.loads(sdgb_api(data, "GetUserOptionApi", userId))
+
+
+ # 获取 User Rating
+ data = json.dumps({
+ "userId": int(userId)
+ })
+
+ user_rating = json.loads(sdgb_api(data, "GetUserRatingApi", userId))
+
+
+ # 获取 User Activity
+ data = json.dumps({
+ "userId": int(userId)
+ })
+
+ user_activity = json.loads(sdgb_api(data, "GetUserActivityApi", userId))
+
+
+ # 获取账号功能票
+ data = json.dumps({
+ "userId": int(userId)
+ })
+
+ user_charge = json.loads(sdgb_api(data, "GetUserChargeApi", userId))
+
+ # UserAll
+
+ data = json.dumps({
+ "userId": int(userId),
+ "playlogId": login_id,
+ "isEventMode": False,
+ "isFreePlay": False,
+ "upsertUserAll": {
+ "userData": [
+ {
+ "accessCode": int(accessCode),
+ "userName": userdata['userData']['userName'],
+ "isNetMember": 1,
+ "point": userdata['userData']['point'],
+ "totalPoint": userdata['userData']['totalPoint'],
+ "iconId": userdata['userData']['iconId'],
+ "plateId": userdata['userData']['plateId'],
+ "titleId": userdata['userData']['titleId'],
+ "partnerId": userdata['userData']['partnerId'],
+ "frameId": userdata['userData']['frameId'],
+ "selectMapId": userdata['userData']['selectMapId'],
+ "totalAwake": userdata['userData']['totalAwake'],
+ "gradeRating": userdata['userData']['gradeRating'],
+ "musicRating": userdata['userData']['musicRating'],
+ "playerRating": userdata['userData']['playerRating'],
+ "highestRating": userdata['userData']['highestRating'],
+ "gradeRank": userdata['userData']['gradeRank'],
+ "classRank": userdata['userData']['classRank'],
+ "courseRank": userdata['userData']['courseRank'],
+ "charaSlot": userdata['userData']['charaSlot'],
+ "charaLockSlot": userdata['userData']['charaLockSlot'],
+ "contentBit": userdata['userData']['contentBit'],
+ "playCount": userdata['userData']['playCount'],
+ "currentPlayCount": userdata['userData']['currentPlayCount'],
+ "renameCredit": 0,
+ "mapStock": userdata['userData']['mapStock'],
+ "eventWatchedDate": userdata['userData']['eventWatchedDate'],
+ "lastGameId": "SDGA",
+ "lastRomVersion": userdata['userData']['lastRomVersion'],
+ "lastDataVersion": userdata['userData']['lastDataVersion'],
+ "lastLoginDate": login_date,
+ "lastPlayDate": datetime.now(pytz.timezone('Asia/Shanghai')).strftime('%Y-%m-%d %H:%M:%S') + '.0',
+ "lastPlayCredit": 1,
+ "lastPlayMode": 0,
+ "lastPlaceId": placeId,
+ "lastPlaceName": placeName,
+ "lastAllNetId": 0,
+ "lastRegionId": regionId,
+ "lastRegionName": regionName,
+ "lastClientId": clientId,
+ "lastCountryCode": "CHN",
+ "lastSelectEMoney": 0,
+ "lastSelectTicket": 0,
+ "lastSelectCourse": userdata['userData']['lastSelectCourse'],
+ "lastCountCourse": 0,
+ "firstGameId": "SDGA",
+ "firstRomVersion": userdata['userData']['firstRomVersion'],
+ "firstDataVersion": userdata['userData']['firstDataVersion'],
+ "firstPlayDate": userdata['userData']['firstPlayDate'],
+ "compatibleCmVersion": userdata['userData']['compatibleCmVersion'],
+ "dailyBonusDate": userdata['userData']['dailyBonusDate'],
+ "dailyCourseBonusDate": userdata['userData']['dailyCourseBonusDate'],
+ "lastPairLoginDate": userdata['userData']['lastPairLoginDate'],
+ "lastTrialPlayDate": userdata['userData']['lastTrialPlayDate'],
+ "playVsCount": 0,
+ "playSyncCount": 0,
+ "winCount": 0,
+ "helpCount": 0,
+ "comboCount": 0,
+ "totalDeluxscore": userdata['userData']['totalDeluxscore'],
+ "totalBasicDeluxscore": userdata['userData']['totalBasicDeluxscore'],
+ "totalAdvancedDeluxscore": userdata['userData']['totalAdvancedDeluxscore'],
+ "totalExpertDeluxscore": userdata['userData']['totalExpertDeluxscore'],
+ "totalMasterDeluxscore": userdata['userData']['totalMasterDeluxscore'],
+ "totalReMasterDeluxscore": userdata['userData']['totalReMasterDeluxscore'],
+ "totalSync": userdata['userData']['totalSync'],
+ "totalBasicSync": userdata['userData']['totalBasicSync'],
+ "totalAdvancedSync": userdata['userData']['totalAdvancedSync'],
+ "totalExpertSync": userdata['userData']['totalExpertSync'],
+ "totalMasterSync": userdata['userData']['totalMasterSync'],
+ "totalReMasterSync": userdata['userData']['totalReMasterSync'],
+ "totalAchievement": userdata['userData']['totalAchievement'],
+ "totalBasicAchievement": userdata['userData']['totalBasicAchievement'],
+ "totalAdvancedAchievement": userdata['userData']['totalAdvancedAchievement'],
+ "totalExpertAchievement": userdata['userData']['totalExpertAchievement'],
+ "totalMasterAchievement": userdata['userData']['totalMasterAchievement'],
+ "totalReMasterAchievement": userdata['userData']['totalReMasterAchievement'],
+ "playerOldRating": userdata['userData']['playerOldRating'],
+ "playerNewRating": userdata['userData']['playerNewRating'],
+ "banState": 0,
+ "friendRegistSkip": 1,
+ "dateTime": timestamp
+ }
+ ],
+ "userExtend": [user_extend['userExtend']],
+ "userOption": [user_option['userOption']],
+ "userCharacterList": [],
+ "userGhost": [],
+ "userMapList": [],
+ "userLoginBonusList": [],
+ "userRatingList": [user_rating['userRating']],
+ "userItemList": music_item(),
+ "userMusicDetailList": [
+ {
+ "musicId": musicId,
+ "level": level,
+ "playCount": playCount,
+ "achievement": achievement,
+ "comboStatus": comboStatus,
+ "syncStatus": syncStatus,
+ "deluxscoreMax": deluxscoreMax,
+ "scoreRank": scoreRank,
+ "extNum1": 0
+ }
+ ],
+ "userCourseList": [],
+ "userFriendSeasonRankingList": [],
+ "userChargeList": user_charge['userChargeList'],
+ "userFavoriteList": [],
+ "userActivityList": [user_activity['userActivity']],
+ "userMissionDataList": [],
+ "userWeeklyData": {
+ "lastLoginWeek": "2025-01-20 04:00:00",
+ "beforeLoginWeek": "2024-09-02 04:00:00",
+ "friendBonusFlag": True
+ },
+ "userGamePlaylogList": [
+ {
+ "playlogId": login_id,
+ "version": "1.50.00",
+ "playDate": datetime.now(pytz.timezone('Asia/Shanghai')).strftime('%Y-%m-%d %H:%M:%S') + '.0',
+ "playMode": 0,
+ "useTicketId": -1,
+ "playCredit": 1,
+ "playTrack": 1,
+ "clientId": clientId,
+ "isPlayTutorial": False,
+ "isEventMode": False,
+ "isNewFree": False,
+ "playCount": 8,
+ "playSpecial": CalcRandom(),
+ "playOtherUserId": 0
+ }
+ ],
+ "user2pPlaylog": {
+ "userId1": 0,
+ "userId2": 0,
+ "userName1": "",
+ "userName2": "",
+ "regionId": 0,
+ "placeId": 0,
+ "user2pPlaylogDetailList": []
+ },
+ "userIntimateList": [],
+ "userShopItemStockList": [],
+ "userGetPointList": [],
+ "userTradeItemList": [],
+ "userFavoritemusicList": [],
+ "userKaleidxScopeList": [],
+ "isNewCharacterList": "",
+ "isNewMapList": "",
+ "isNewLoginBonusList": "",
+ "isNewItemList": "1" * len(music_item()),
+ "isNewMusicDetailList": 1,
+ "isNewCourseList": "",
+ "isNewFavoriteList": "",
+ "isNewFriendSeasonRankingList": "",
+ "isNewUserIntimateList": "",
+ "isNewFavoritemusicList": "",
+ "isNewKaleidxScopeList": ""
+ }
+ })
+
+ userall_result = json.loads(sdgb_api(data, "UpsertUserAllApi", userId))
+ return userall_result
+
+def music_with_retry(userId, accessCode):
+ for i in range(5): # 重试次数
+ try:
+ music(userId, accessCode)
+ return logout(userId, accessCode, timestamp)
+ except:
+ logout(userId, accessCode, timestamp)
+ time.sleep(3) # 等待 5 秒后重试
+ print(i)
+ return "Error"
+
+
+
+if __name__ == "__main__":
+ print(music_with_retry())
diff --git a/userdata.py b/userdata.py
new file mode 100644
index 0000000..8206a73
--- /dev/null
+++ b/userdata.py
@@ -0,0 +1,12 @@
+import json
+
+from sdgb import sdgb_api
+
+def userdata(userId):
+ data = json.dumps({
+ "userId": int(userId)
+ })
+
+ userdata_result = json.loads(sdgb_api(data, "GetUserDataApi", userId))
+
+ return userdata_result