forked from Hay1tsme/artemis
Merge branch 'develop' into diva_handler_classes
This commit is contained in:
commit
2ec1dcadef
@ -15,6 +15,7 @@ COPY dbutils.py dbutils.py
|
||||
COPY read.py read.py
|
||||
ADD core core
|
||||
ADD titles titles
|
||||
ADD config config
|
||||
ADD logs logs
|
||||
ADD cert cert
|
||||
|
||||
|
12
changelog.md
12
changelog.md
@ -8,6 +8,18 @@ Documenting updates to ARTEMiS, to be updated every time the master branch is pu
|
||||
### Card Maker
|
||||
+ Added support for maimai DX FESTiVAL PLUS
|
||||
|
||||
## 20231001
|
||||
### Initial D THE ARCADE
|
||||
+ Added support for Initial D THE ARCADE S2
|
||||
+ Story mode progress added
|
||||
+ Bunta Challenge/Touhou Project modes added
|
||||
+ Time Trials added
|
||||
+ Leaderboards added, but doesn't refresh sometimes
|
||||
+ Theory of Street mode added (with CPUs)
|
||||
+ Play Stamp/Timetrial events added
|
||||
+ Frontend to download profile added
|
||||
+ Importer to import profiles added
|
||||
|
||||
## 20230716
|
||||
### General
|
||||
+ Docker files added (#19)
|
||||
|
22
core/data/schema/versions/SDDT_5_rollback.sql
Normal file
22
core/data/schema/versions/SDDT_5_rollback.sql
Normal file
@ -0,0 +1,22 @@
|
||||
SET FOREIGN_KEY_CHECKS=0;
|
||||
|
||||
ALTER TABLE ongeki_user_event_point DROP COLUMN version;
|
||||
ALTER TABLE ongeki_user_event_point DROP COLUMN rank;
|
||||
ALTER TABLE ongeki_user_event_point DROP COLUMN type;
|
||||
ALTER TABLE ongeki_user_event_point DROP COLUMN date;
|
||||
|
||||
ALTER TABLE ongeki_user_tech_event DROP COLUMN version;
|
||||
|
||||
ALTER TABLE ongeki_user_mission_point DROP COLUMN version;
|
||||
|
||||
ALTER TABLE ongeki_static_events DROP COLUMN endDate;
|
||||
|
||||
DROP TABLE ongeki_tech_event_ranking;
|
||||
DROP TABLE ongeki_static_music_ranking_list;
|
||||
DROP TABLE ongeki_static_rewards;
|
||||
DROP TABLE ongeki_static_present_list;
|
||||
DROP TABLE ongeki_static_tech_music;
|
||||
DROP TABLE ongeki_static_client_testmode;
|
||||
DROP TABLE ongeki_static_game_point;
|
||||
|
||||
SET FOREIGN_KEY_CHECKS=1;
|
98
core/data/schema/versions/SDDT_6_upgrade.sql
Normal file
98
core/data/schema/versions/SDDT_6_upgrade.sql
Normal file
@ -0,0 +1,98 @@
|
||||
SET FOREIGN_KEY_CHECKS=0;
|
||||
|
||||
ALTER TABLE ongeki_user_event_point ADD COLUMN version INTEGER NOT NULL;
|
||||
ALTER TABLE ongeki_user_event_point ADD COLUMN rank INTEGER;
|
||||
ALTER TABLE ongeki_user_event_point ADD COLUMN type INTEGER NOT NULL;
|
||||
ALTER TABLE ongeki_user_event_point ADD COLUMN date VARCHAR(25);
|
||||
|
||||
ALTER TABLE ongeki_user_tech_event ADD COLUMN version INTEGER NOT NULL;
|
||||
|
||||
ALTER TABLE ongeki_user_mission_point ADD COLUMN version INTEGER NOT NULL;
|
||||
|
||||
ALTER TABLE ongeki_static_events ADD COLUMN endDate TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP;
|
||||
|
||||
CREATE TABLE ongeki_tech_event_ranking (
|
||||
id INT PRIMARY KEY NOT NULL AUTO_INCREMENT,
|
||||
user INT NOT NULL,
|
||||
version INT NOT NULL,
|
||||
date VARCHAR(25),
|
||||
eventId INT NOT NULL,
|
||||
rank INT,
|
||||
totalPlatinumScore INT NOT NULL,
|
||||
totalTechScore INT NOT NULL,
|
||||
UNIQUE KEY ongeki_tech_event_ranking_uk (user, eventId),
|
||||
CONSTRAINT ongeki_tech_event_ranking_ibfk1 FOREIGN KEY (user) REFERENCES aime_user(id) ON DELETE CASCADE ON UPDATE CASCADE
|
||||
);
|
||||
|
||||
CREATE TABLE ongeki_static_music_ranking_list (
|
||||
id INT PRIMARY KEY NOT NULL AUTO_INCREMENT,
|
||||
version INT NOT NULL,
|
||||
musicId INT NOT NULL,
|
||||
point INT NOT NULL,
|
||||
userName VARCHAR(255),
|
||||
UNIQUE KEY ongeki_static_music_ranking_list_uk (version, musicId)
|
||||
);
|
||||
|
||||
CREATE TABLE ongeki_static_rewards (
|
||||
id INT PRIMARY KEY NOT NULL AUTO_INCREMENT,
|
||||
version INT NOT NULL,
|
||||
rewardId INT NOT NULL,
|
||||
rewardName VARCHAR(255) NOT NULL,
|
||||
itemKind INT NOT NULL,
|
||||
itemId INT NOT NULL,
|
||||
UNIQUE KEY ongeki_tech_event_ranking_uk (version, rewardId)
|
||||
);
|
||||
|
||||
CREATE TABLE ongeki_static_present_list (
|
||||
id INT PRIMARY KEY NOT NULL AUTO_INCREMENT,
|
||||
version INT NOT NULL,
|
||||
presentId INT NOT NULL,
|
||||
presentName VARCHAR(255) NOT NULL,
|
||||
rewardId INT NOT NULL,
|
||||
stock INT NOT NULL,
|
||||
message VARCHAR(255),
|
||||
startDate VARCHAR(25) NOT NULL,
|
||||
endDate VARCHAR(25) NOT NULL,
|
||||
UNIQUE KEY ongeki_static_present_list_uk (version, presentId, rewardId)
|
||||
);
|
||||
|
||||
CREATE TABLE ongeki_static_tech_music (
|
||||
id INT PRIMARY KEY NOT NULL AUTO_INCREMENT,
|
||||
version INT NOT NULL,
|
||||
eventId INT NOT NULL,
|
||||
musicId INT NOT NULL,
|
||||
level INT NOT NULL,
|
||||
UNIQUE KEY ongeki_static_tech_music_uk (version, musicId, eventId)
|
||||
);
|
||||
|
||||
CREATE TABLE ongeki_static_client_testmode (
|
||||
id INT PRIMARY KEY NOT NULL AUTO_INCREMENT,
|
||||
regionId INT NOT NULL,
|
||||
placeId INT NOT NULL,
|
||||
clientId VARCHAR(11) NOT NULL,
|
||||
updateDate TIMESTAMP NOT NULL,
|
||||
isDelivery BOOLEAN NOT NULL,
|
||||
groupId INT NOT NULL,
|
||||
groupRole INT NOT NULL,
|
||||
continueMode INT NOT NULL,
|
||||
selectMusicTime INT NOT NULL,
|
||||
advertiseVolume INT NOT NULL,
|
||||
eventMode INT NOT NULL,
|
||||
eventMusicNum INT NOT NULL,
|
||||
patternGp INT NOT NULL,
|
||||
limitGp INT NOT NULL,
|
||||
maxLeverMovable INT NOT NULL,
|
||||
minLeverMovable INT NOT NULL,
|
||||
UNIQUE KEY ongeki_static_client_testmode_uk (clientId)
|
||||
);
|
||||
|
||||
CREATE TABLE ongeki_static_game_point (
|
||||
id INT PRIMARY KEY NOT NULL AUTO_INCREMENT,
|
||||
type INT NOT NULL,
|
||||
cost INT NOT NULL,
|
||||
startDate VARCHAR(25) NOT NULL DEFAULT "2000-01-01 05:00:00.0",
|
||||
endDate VARCHAR(25) NOT NULL DEFAULT "2099-01-01 05:00:00.0",
|
||||
UNIQUE KEY ongeki_static_game_point_uk (type)
|
||||
);
|
||||
|
||||
SET FOREIGN_KEY_CHECKS=1;
|
@ -10,11 +10,11 @@ This step-by-step guide assumes that you are using a fresh install of Windows 10
|
||||
3. Make sure that you enable "Create shortcuts for installed applications" and "Add Python to environment variables" and hit Install
|
||||
|
||||
## Install MySQL 8.0
|
||||
1. Download MySQL 8.0 Server : [Link](https://cdn.mysql.com//Downloads/MySQLInstaller/mysql-installer-web-community-8.0.31.0.msi)
|
||||
2. Install mysql-installer-web-community-8.0.31.0.msi
|
||||
1. Download MySQL 8.0 Server : [Link](https://dev.mysql.com/get/Downloads/MySQLInstaller/mysql-installer-community-8.0.34.0.msi)
|
||||
2. Install mysql-installer-web-community-8.0.34.0.msi
|
||||
1. Click on "Add ..." on the side
|
||||
2. Click on the "+" next to MySQL Servers
|
||||
3. Make sure MySQL Server 8.0.29 - X64 is under the products to be installed.
|
||||
3. Make sure MySQL Server 8.0.34 - X64 is under the products to be installed.
|
||||
4. Hit Next and Next once installed
|
||||
5. Select the configuration type "Development Computer"
|
||||
6. Hit Next
|
||||
@ -23,9 +23,10 @@ This step-by-step guide assumes that you are using a fresh install of Windows 10
|
||||
9. Leave everything under Windows Service as default and hit Next >
|
||||
10. Click on Execute and for it to finish and hit Next> and then Finish
|
||||
3. Open MySQL 8.0 Command Line Client and login as your root user
|
||||
4. Type those commands to create your user and the database
|
||||
```
|
||||
CREATE USER 'aime'@'localhost' IDENTIFIED BY 'MyStrongPass.';
|
||||
4. Change `<Enter Password Here>` to a new password for the user aime, type those commands to create your user and the database
|
||||
|
||||
```sql
|
||||
CREATE USER 'aime'@'localhost' IDENTIFIED BY '<Enter Password Here>';
|
||||
CREATE DATABASE aime;
|
||||
GRANT Alter,Create,Delete,Drop,Index,Insert,References,Select,Update ON aime.* TO 'aime'@'localhost';
|
||||
FLUSH PRIVILEGES;
|
||||
@ -34,33 +35,50 @@ exit;
|
||||
|
||||
## Install Python modules
|
||||
1. Change your work path to the artemis-master folder using 'cd' and install the requirements:
|
||||
> pip install -r requirements.txt
|
||||
|
||||
## Copy/Rename the folder example_config to config
|
||||
```shell
|
||||
pip install -r requirements.txt
|
||||
```
|
||||
|
||||
## Adjust /config/core.yaml
|
||||
## Copy/Rename the folder `example_config` to `config`
|
||||
|
||||
1. Make sure to change the server listen_address to be set to your local machine IP (ex.: 192.168.1.xxx)
|
||||
## Adjust `config/core.yaml`
|
||||
|
||||
1. Make sure to change the server `hostname` to be set to your local machine IP (ex.: 192.168.xxx.xxx)
|
||||
- In case you want to run this only locally, set the following values:
|
||||
```
|
||||
|
||||
```yaml
|
||||
server:
|
||||
listen_address: 0.0.0.0
|
||||
title:
|
||||
hostname: localhost
|
||||
hostname: 192.168.xxx.xxx
|
||||
```
|
||||
|
||||
1. Adjust the proper MySQL information you created earlier
|
||||
```yaml
|
||||
database:
|
||||
host: "localhost"
|
||||
username: "aime"
|
||||
password: "<Enter Password Here>"
|
||||
name: "aime"
|
||||
```
|
||||
2. Adjust the proper MySQL information you created earlier
|
||||
3. Add the AimeDB key at the bottom of the file
|
||||
4. If the webui is needed, change the flag from False to True
|
||||
|
||||
## Create the database tables for ARTEMiS
|
||||
> python dbutils.py create
|
||||
|
||||
```shell
|
||||
python dbutils.py create
|
||||
```
|
||||
|
||||
## Firewall Adjustements
|
||||
Make sure the following ports are open both on your router and local Windows firewall in case you want to use this for public use (NOT recommended):
|
||||
> Port 80 (TCP), 443 (TCP), 8443 (TCP), 22345 (TCP), 8080 (TCP), 8090 (TCP) **webui, 8444 (TCP) **mucha
|
||||
|
||||
## Running the ARTEMiS instance
|
||||
> python index.py
|
||||
```shell
|
||||
python index.py
|
||||
```
|
||||
|
||||
# Troubleshooting
|
||||
|
||||
@ -78,6 +96,7 @@ Make sure the following ports are open both on your router and local Windows fir
|
||||
## AttributeError: module 'collections' has no attribute 'Hashable'
|
||||
1. This means the pyYAML module is obsolete, simply rerun pip with the -U (force update) flag, as shown below.
|
||||
- Change your work path to the artemis-master (or artemis-develop) folder using 'cd' and run the following commands:
|
||||
```
|
||||
|
||||
```shell
|
||||
pip install -r requirements.txt -U
|
||||
```
|
||||
|
@ -6,6 +6,12 @@ the corresponding importer and database upgrades.
|
||||
**Important: The described database upgrades are only required if you are using an old database schema, f.e. still
|
||||
using the megaime database. Clean installations always create the latest database structure!**
|
||||
|
||||
To upgrade the core database and the database for every game, execute:
|
||||
|
||||
```shell
|
||||
python dbutils.py autoupgrade
|
||||
```
|
||||
|
||||
# Table of content
|
||||
|
||||
- [Supported Games](#supported-games)
|
||||
@ -16,6 +22,7 @@ using the megaime database. Clean installations always create the latest databas
|
||||
- [Card Maker](#card-maker)
|
||||
- [WACCA](#wacca)
|
||||
- [Sword Art Online Arcade](#sao)
|
||||
- [Initial D THE ARCADE](#initial-d-the-arcade)
|
||||
|
||||
|
||||
# Supported Games
|
||||
@ -27,7 +34,7 @@ Games listed below have been tested and confirmed working.
|
||||
### SDBT
|
||||
|
||||
| Version ID | Version Name |
|
||||
|------------|-----------------------|
|
||||
| ---------- | --------------------- |
|
||||
| 0 | CHUNITHM |
|
||||
| 1 | CHUNITHM PLUS |
|
||||
| 2 | CHUNITHM AIR |
|
||||
@ -43,7 +50,7 @@ Games listed below have been tested and confirmed working.
|
||||
### SDHD/SDBT
|
||||
|
||||
| Version ID | Version Name |
|
||||
|------------|---------------------|
|
||||
| ---------- | ------------------- |
|
||||
| 11 | CHUNITHM NEW!! |
|
||||
| 12 | CHUNITHM NEW PLUS!! |
|
||||
| 13 | CHUNITHM SUN |
|
||||
@ -83,9 +90,7 @@ crypto:
|
||||
|
||||
### Database upgrade
|
||||
|
||||
Always make sure your database (tables) are up-to-date, to do so go to the `core/data/schema/versions` folder and see
|
||||
which version is the latest, f.e. `SDBT_4_upgrade.sql`. In order to upgrade to version 4 in this case you need to
|
||||
perform all previous updates as well:
|
||||
Always make sure your database (tables) are up-to-date:
|
||||
|
||||
```shell
|
||||
python dbutils.py --game SDBT upgrade
|
||||
@ -146,7 +151,7 @@ The songId is based on the actual ID within your version of Chunithm.
|
||||
### SDCA
|
||||
|
||||
| Version ID | Version Name |
|
||||
|------------|------------------------------------|
|
||||
| ---------- | ---------------------------------- |
|
||||
| 0 | crossbeats REV. |
|
||||
| 1 | crossbeats REV. SUNRISE |
|
||||
| 2 | crossbeats REV. SUNRISE S2 |
|
||||
@ -166,26 +171,26 @@ The importer for crossbeats REV. will import Music.
|
||||
|
||||
Config file is located in `config/cxb.yaml`.
|
||||
|
||||
| Option | Info |
|
||||
|------------------------|------------------------------------------------------------|
|
||||
| `hostname` | Requires a proper `hostname` (not localhost!) to run |
|
||||
| `ssl_enable` | Enables/Disables the use of the `ssl_cert` and `ssl_key` |
|
||||
| `port` | Set your unsecure port number |
|
||||
| `port_secure` | Set your secure/SSL port number |
|
||||
| `ssl_cert`, `ssl_key` | Enter your SSL certificate (requires not self signed cert) |
|
||||
| Option | Info |
|
||||
| --------------------- | ---------------------------------------------------------- |
|
||||
| `hostname` | Requires a proper `hostname` (not localhost!) to run |
|
||||
| `ssl_enable` | Enables/Disables the use of the `ssl_cert` and `ssl_key` |
|
||||
| `port` | Set your unsecure port number |
|
||||
| `port_secure` | Set your secure/SSL port number |
|
||||
| `ssl_cert`, `ssl_key` | Enter your SSL certificate (requires not self signed cert) |
|
||||
|
||||
|
||||
## maimai DX
|
||||
|
||||
### SDEZ
|
||||
|
||||
| Game Code | Version ID | Version Name |
|
||||
|-----------|------------|-------------------------|
|
||||
| Game Code | Version ID | Version Name |
|
||||
| --------- | ---------- | ------------ |
|
||||
|
||||
|
||||
For versions pre-dx
|
||||
| Game Code | Version ID | Version Name |
|
||||
|-----------|------------|-------------------------|
|
||||
| --------- | ---------- | ----------------------- |
|
||||
| SBXL | 0 | maimai |
|
||||
| SBXL | 1 | maimai PLUS |
|
||||
| SBZF | 2 | maimai GreeN |
|
||||
@ -227,11 +232,12 @@ The importer for maimai Pre-DX will import Events and Music. Not all games will
|
||||
|
||||
### Database upgrade
|
||||
|
||||
Always make sure your database (tables) are up-to-date, to do so go to the `core/data/schema/versions` folder and see which version is the latest, f.e. `SDEZ_2_upgrade.sql`. In order to upgrade to version 2 in this case you need to perform all previous updates as well:
|
||||
Always make sure your database (tables) are up-to-date:
|
||||
|
||||
```shell
|
||||
python dbutils.py --game SDEZ upgrade
|
||||
```
|
||||
|
||||
Pre-Dx uses the same database as DX, so only upgrade using the SDEZ game code!
|
||||
|
||||
## Hatsune Miku Project Diva
|
||||
@ -239,7 +245,7 @@ Pre-Dx uses the same database as DX, so only upgrade using the SDEZ game code!
|
||||
### SBZV
|
||||
|
||||
| Version ID | Version Name |
|
||||
|------------|---------------------------------|
|
||||
| ---------- | ------------------------------- |
|
||||
| 0 | Project Diva Arcade |
|
||||
| 1 | Project Diva Arcade Future Tone |
|
||||
|
||||
@ -260,7 +266,7 @@ the Shop, Modules and Customizations.
|
||||
Config file is located in `config/diva.yaml`.
|
||||
|
||||
| Option | Info |
|
||||
|----------------------|-------------------------------------------------------------------------------------------------|
|
||||
| -------------------- | ----------------------------------------------------------------------------------------------- |
|
||||
| `unlock_all_modules` | Unlocks all modules (costumes) by default, if set to `False` all modules need to be purchased |
|
||||
| `unlock_all_items` | Unlocks all items (customizations) by default, if set to `False` all items need to be purchased |
|
||||
|
||||
@ -270,9 +276,7 @@ In order to use custom PV Lists, simply drop in your .dat files inside of /title
|
||||
|
||||
### Database upgrade
|
||||
|
||||
Always make sure your database (tables) are up-to-date, to do so go to the `core/data/schema/versions` folder and see
|
||||
which version is the latest, f.e. `SBZV_4_upgrade.sql`. In order to upgrade to version 4 in this case you need to
|
||||
perform all previous updates as well:
|
||||
Always make sure your database (tables) are up-to-date:
|
||||
|
||||
```shell
|
||||
python dbutils.py --game SBZV upgrade
|
||||
@ -283,7 +287,7 @@ python dbutils.py --game SBZV upgrade
|
||||
### SDDT
|
||||
|
||||
| Version ID | Version Name |
|
||||
|------------|----------------------------|
|
||||
| ---------- | -------------------------- |
|
||||
| 0 | O.N.G.E.K.I. |
|
||||
| 1 | O.N.G.E.K.I. + |
|
||||
| 2 | O.N.G.E.K.I. SUMMER |
|
||||
@ -311,7 +315,7 @@ The importer for O.N.G.E.K.I. will all all Cards, Music and Events.
|
||||
Config file is located in `config/ongeki.yaml`.
|
||||
|
||||
| Option | Info |
|
||||
|------------------|----------------------------------------------------------------------------------------------------------------|
|
||||
| ---------------- | -------------------------------------------------------------------------------------------------------------- |
|
||||
| `enabled_gachas` | Enter all gacha IDs for Card Maker to work, other than default may not work due to missing cards added to them |
|
||||
| `crypto` | This option is used to enable the TLS Encryption |
|
||||
|
||||
@ -328,20 +332,80 @@ crypto:
|
||||
|
||||
### Database upgrade
|
||||
|
||||
Always make sure your database (tables) are up-to-date, to do so go to the `core/data/schema/versions` folder and see
|
||||
which version is the latest, f.e. `SDDT_4_upgrade.sql`. In order to upgrade to version 4 in this case you need to
|
||||
perform all previous updates as well:
|
||||
Always make sure your database (tables) are up-to-date:
|
||||
|
||||
```shell
|
||||
python dbutils.py --game SDDT upgrade
|
||||
```
|
||||
|
||||
### Controlling Events (Ranking Event, Technical Challenge Event, Mission Event)
|
||||
|
||||
Events are controlled by 2 types of enabled events:
|
||||
- RankingEvent (type 6), TechChallengeEvent (type 17)
|
||||
- AcceptRankingEvent (type 7), AcceptTechChallengeEvent (type 18)
|
||||
|
||||
Both Ranking and Accept must be enabled for event to function properly
|
||||
|
||||
Event will run for the time specified in startDate and endDate
|
||||
|
||||
AcceptRankingEvent and AcceptTechChallengeEvent are reward period for events, which specify from what startDate until endDate you can collect the rewards for attending the event, so the reward period must start in the future, e.g. :
|
||||
|
||||
- RankingEvent startDate 2023-12-01 - endDate 2023-12-30 - period in which whole event is running
|
||||
- AcceptRankingEvent startDate 2023-12-23 - endDate 2023-12-30 - period in which you can collect rewards for the event
|
||||
|
||||
If player misses the AcceptRankingEvent period - ranking will be invalidated and receive lowest reward from the event (typically 500x money)
|
||||
|
||||
Technical Challenge Song List:
|
||||
|
||||
Songs that are used for Technical Challenge are not stored anywhere in data files, so you need to fill the database table by yourself, you can gather all songs that should be in Technical Challenges from ONGEKI japanese wikis, or, you can create your own sets:
|
||||
|
||||
Database table : `ongeki_static_tech_music`
|
||||
|
||||
```
|
||||
id: Id in table, just increment for each entry
|
||||
version: version of the game you want the tech challenge to be in (from RED and up)
|
||||
eventId: Id of the event in ongeki_static_events, insert the Id of the TechChallengeEvent (type 17) you want the song be assigned to
|
||||
musicId: Id of the song you want to add, use songId from ongeki_static_music table
|
||||
level: Difficulty of the song you want to track during the event, from 0(basic) to 3(master)
|
||||
|
||||
```
|
||||
|
||||
Current implementation of Ranking and Technical Challenge Events are updated on every profile save to the Network, and Ranked on each player login, in official specification, calculation for current rank on the network should be done in the maintenance window
|
||||
|
||||
Mission Event (type 13) is a monthly type of event, which is used when another event doesn't have it's own Ranking or Technical Challenge Event running, only one Mission Event should be running at a time, so enable only the specific Mission you want to run currently on the Network
|
||||
|
||||
If you're often trying fresh cards, registering new profiles etc., you can also consider disabling all Announcement Events (type 1), as it will disable all the banners that pop up on login (they show up only once though, so if you click through them once they won't show again)
|
||||
|
||||
Event type 2 in Database are Advertisement Movies, enable only 1 you want to currently play, and disable others
|
||||
|
||||
|
||||
Present and Reward List - populate reward list using read.py
|
||||
|
||||
Create present for players by adding an entry in `ongeki_static_present_list`
|
||||
```
|
||||
id: unique for each entry
|
||||
version: game version you want the present be in
|
||||
presentId: id of the present - starts with 1001 and go up from that, must be unique for each reward(don't set multiple rewardIds with same presentId)
|
||||
presentName: present name which will be shown on the bottom when received
|
||||
rewardId: ID of item from ongeki_static_rewards
|
||||
stock: how many you want to give (like 5 copies of same card, or 10000 money, etc.)
|
||||
message: no idea, can be left empty
|
||||
startDate: date when to start giving out
|
||||
endDate: date when ends
|
||||
```
|
||||
|
||||
After inserting present to the table, add the presentId into players `ongeki_static_item`, where itemKind is 9, itemId is the presentId, and stock set 1 and isValid to 1
|
||||
|
||||
After that, on next login the present should be received (or whenever it supposed to happen)
|
||||
|
||||
|
||||
|
||||
## Card Maker
|
||||
|
||||
### SDED
|
||||
|
||||
| Version ID | Version Name |
|
||||
|------------|-----------------|
|
||||
| ---------- | --------------- |
|
||||
| 0 | Card Maker 1.30 |
|
||||
| 1 | Card Maker 1.35 |
|
||||
|
||||
@ -463,7 +527,7 @@ Gacha IDs up to 1140 will be loaded for CM 1.34 and all gachas will be loaded fo
|
||||
### SDFE
|
||||
|
||||
| Version ID | Version Name |
|
||||
|------------|---------------|
|
||||
| ---------- | ------------- |
|
||||
| 0 | WACCA |
|
||||
| 1 | WACCA S |
|
||||
| 2 | WACCA Lily |
|
||||
@ -486,7 +550,7 @@ The importer for WACCA will import all Music data.
|
||||
Config file is located in `config/wacca.yaml`.
|
||||
|
||||
| Option | Info |
|
||||
|--------------------|-----------------------------------------------------------------------------|
|
||||
| ------------------ | --------------------------------------------------------------------------- |
|
||||
| `always_vip` | Enables/Disables VIP, if disabled it needs to be purchased manually in game |
|
||||
| `infinite_tickets` | Always set the "unlock expert" tickets to 5 |
|
||||
| `infinite_wp` | Sets the user WP to `999999` |
|
||||
@ -495,7 +559,7 @@ Config file is located in `config/wacca.yaml`.
|
||||
|
||||
### Database upgrade
|
||||
|
||||
Always make sure your database (tables) are up-to-date, to do so go to the `core/data/schema/versions` folder and see which version is the latest, f.e. `SDFE_3_upgrade.sql`. In order to upgrade to version 3 in this case you need to perform all previous updates as well:
|
||||
Always make sure your database (tables) are up-to-date:
|
||||
|
||||
```shell
|
||||
python dbutils.py --game SDFE upgrade
|
||||
@ -540,9 +604,9 @@ Below is a list of VIP rewards. Currently, VIP is not implemented, and thus thes
|
||||
|
||||
### SDEW
|
||||
|
||||
| Version ID | Version Name |
|
||||
|------------|---------------|
|
||||
| 0 | SAO |
|
||||
| Version ID | Version Name |
|
||||
| ---------- | ------------ |
|
||||
| 0 | SAO |
|
||||
|
||||
|
||||
### Importer
|
||||
@ -559,16 +623,16 @@ The importer for SAO will import all items, heroes, support skills and titles da
|
||||
|
||||
Config file is located in `config/sao.yaml`.
|
||||
|
||||
| Option | Info |
|
||||
|--------------------|-----------------------------------------------------------------------------|
|
||||
| `hostname` | Changes the server listening address for Mucha |
|
||||
| `port` | Changes the listing port |
|
||||
| `auto_register` | Allows the game to handle the automatic registration of new cards |
|
||||
| Option | Info |
|
||||
| --------------- | ----------------------------------------------------------------- |
|
||||
| `hostname` | Changes the server listening address for Mucha |
|
||||
| `port` | Changes the listing port |
|
||||
| `auto_register` | Allows the game to handle the automatic registration of new cards |
|
||||
|
||||
|
||||
### Database upgrade
|
||||
|
||||
Always make sure your database (tables) are up-to-date, to do so go to the `core/data/schema/versions` folder and see which version is the latest, f.e. `SDEW_1_upgrade.sql`. In order to upgrade to version 3 in this case you need to perform all previous updates as well:
|
||||
Always make sure your database (tables) are up-to-date:
|
||||
|
||||
```shell
|
||||
python dbutils.py --game SDEW upgrade
|
||||
@ -587,4 +651,135 @@ python dbutils.py --game SDEW upgrade
|
||||
|
||||
- Midorica - Limited Network Support
|
||||
- Dniel97 - Helping with network base
|
||||
- tungnotpunk - Source
|
||||
- tungnotpunk - Source
|
||||
|
||||
## Initial D THE ARCADE
|
||||
|
||||
### SDGT
|
||||
|
||||
| Version ID | Version Name |
|
||||
| ---------- | ----------------------------- |
|
||||
| 0 | Initial D THE ARCADE Season 1 |
|
||||
| 1 | Initial D THE ARCADE Season 2 |
|
||||
|
||||
**Important: Only version 1.50.00 (Season 2) is currently working and actively supported!**
|
||||
|
||||
### Profile Importer
|
||||
|
||||
In order to use the profile importer download the `idac_profile.json` file from the frontend
|
||||
and either directly use the folder path with `idac_profile.json` in it or specify the complete
|
||||
path to the `.json` file
|
||||
|
||||
```shell
|
||||
python read.py --game SDGT --version <Version ID> --optfolder /path/to/game/download/folder
|
||||
```
|
||||
|
||||
The importer for SDGT will import the complete profile data with personal high scores as well.
|
||||
|
||||
### Config
|
||||
|
||||
Config file is located in `config/idac.yaml`.
|
||||
|
||||
| Option | Info |
|
||||
| ----------------------------- | ----------------------------------------------------------------------------------------------------------- |
|
||||
| `ssl` | Enables/Disables the use of the `ssl_cert` and `ssl_key` (currently unsuported) |
|
||||
| `matching_host` | IPv4 address of your PC for the Online Battle (currently unsupported) |
|
||||
| `port_matching` | Port number for the Online Battle Matching |
|
||||
| `port_echo1/2` | Port numbers for Echos |
|
||||
| `port_matching_p2p` | Port number for Online Battle (currently unsupported) |
|
||||
| `stamp.enable` | Enables/Disabled the play stamp events |
|
||||
| `stamp.enabled_stamps` | Define up to 3 play stamp events (without `.json` extension, which are placed in `titles/idac/data/stamps`) |
|
||||
| `timetrial.enable` | Enables/Disables the time trial event |
|
||||
| `timetrial.enabled_timetrial` | Define one! trial event (without `.json` extension, which are placed in `titles/idac/data/timetrial`) |
|
||||
|
||||
|
||||
### Database upgrade
|
||||
|
||||
Always make sure your database (tables) are up-to-date:
|
||||
|
||||
```shell
|
||||
python dbutils.py --game SDGT upgrade
|
||||
```
|
||||
|
||||
### Notes
|
||||
- Online Battle is not supported
|
||||
- Online Battle Matching is not supported
|
||||
|
||||
### Item categories
|
||||
|
||||
| Category ID | Category Name |
|
||||
| ----------- | ------------------------ |
|
||||
| 1 | D Coin |
|
||||
| 3 | Car Dressup Token |
|
||||
| 5 | Avatar Dressup Token |
|
||||
| 6 | Tachometer |
|
||||
| 7 | Aura |
|
||||
| 8 | Aura Color |
|
||||
| 9 | Avatar Face |
|
||||
| 10 | Avatar Eye |
|
||||
| 11 | Avatar Mouth |
|
||||
| 12 | Avatar Hair |
|
||||
| 13 | Avatar Glasses |
|
||||
| 14 | Avatar Face accessories |
|
||||
| 15 | Avatar Body |
|
||||
| 18 | Avatar Background |
|
||||
| 21 | Chat Stamp |
|
||||
| 22 | Keychain |
|
||||
| 24 | Title |
|
||||
| 25 | FullTune Ticket |
|
||||
| 26 | Paper Cup |
|
||||
| 27 | BGM |
|
||||
| 28 | Drifting Text |
|
||||
| 31 | Start Menu BG |
|
||||
| 32 | Car Color/Paint |
|
||||
| 33 | Aura Level |
|
||||
| 34 | FullTune Ticket Fragment |
|
||||
| 35 | Underneon Lights |
|
||||
|
||||
### TimeRelease Chapter:
|
||||
|
||||
1. Story: 1, 2, 3, 4, 5, 6, 7, 8, 9, 19 (Chapter 10), (29 Chapter 11?)
|
||||
2. MF Ghost: 10, 11, 12, 13, 14, 15
|
||||
3. Bunta: 15, 16, 17, 18, 19, 20, (21, 21, 22?)
|
||||
4. Special Event: 23, 24, 25, 26, 27, 28 (Touhou Project)
|
||||
|
||||
### TimeRelease Courses:
|
||||
|
||||
|
||||
| Course ID | Course Name | Direction |
|
||||
| --------- | ------------------------- | ------------------------ |
|
||||
| 0 | Akina Lake(秋名湖) | CounterClockwise(左周り) |
|
||||
| 2 | Akina Lake(秋名湖) | Clockwise(右周り) |
|
||||
| 52 | Hakone(箱根) | Downhill(下り) |
|
||||
| 54 | Hakone(箱根) | Hillclimb(上り) |
|
||||
| 36 | Usui(碓氷) | CounterClockwise(左周り) |
|
||||
| 38 | Usui(碓氷) | Clockwise(右周り) |
|
||||
| 4 | Myogi(妙義) | Downhill(下り) |
|
||||
| 6 | Myogi(妙義) | Hillclimb(上り) |
|
||||
| 8 | Akagi(赤城) | Downhill(下り) |
|
||||
| 10 | Akagi(赤城) | Hillclimb(上り) |
|
||||
| 12 | Akina(秋名) | Downhill(下り) |
|
||||
| 14 | Akina(秋名) | Hillclimb(上り) |
|
||||
| 16 | Irohazaka(いろは坂) | Downhill(下り) |
|
||||
| 18 | Irohazaka(いろは坂) | Reverse(逆走) |
|
||||
| 56 | Momiji Line(もみじライン) | Downhill(下り) |
|
||||
| 58 | Momiji Line(もみじライン) | Hillclimb(上り) |
|
||||
| 20 | Tsukuba(筑波) | Outbound(往路) |
|
||||
| 22 | Tsukuba(筑波) | Inbound(復路) |
|
||||
| 24 | Happogahara(八方ヶ原) | Outbound(往路) |
|
||||
| 26 | Happogahara(八方ヶ原) | Inbound(復路) |
|
||||
| 40 | Sadamine(定峰) | Downhill(下り) |
|
||||
| 42 | Sadamine(定峰) | Hillclimb(上り) |
|
||||
| 44 | Tsuchisaka(土坂) | Outbound(往路) |
|
||||
| 46 | Tsuchisaka(土坂) | Inbound(復路) |
|
||||
| 48 | Akina Snow(秋名雪) | Downhill(下り) |
|
||||
| 50 | Akina Snow(秋名雪) | Hillclimb(上り) |
|
||||
| 68 | Odawara(小田原) | Forward(順走) |
|
||||
| 70 | Odawara(小田原) | Reverse(逆走) |
|
||||
|
||||
### Credits
|
||||
- Bottersnike: For the HUGE Reverse Engineering help
|
||||
- Kinako: For helping with the timeRelease unlocking of courses and special mode
|
||||
|
||||
A huge thanks to all people who helped shaping this project to what it is now and don't want to be mentioned here.
|
||||
|
||||
|
@ -1,9 +1,3 @@
|
||||
server:
|
||||
enable: True
|
||||
loglevel: "info"
|
||||
hostname: "localhost"
|
||||
ssl_enable: False
|
||||
port: 8082
|
||||
port_secure: 443
|
||||
ssl_cert: "cert/title.crt"
|
||||
ssl_key: "cert/title.key"
|
||||
loglevel: "info"
|
22
example_config/idac.yaml
Normal file
22
example_config/idac.yaml
Normal file
@ -0,0 +1,22 @@
|
||||
server:
|
||||
enable: True
|
||||
loglevel: "info"
|
||||
ssl: False
|
||||
ssl_key: "cert/idac.key"
|
||||
ssl_cert: "cert/idac.crt"
|
||||
matching_host: "127.0.0.1"
|
||||
port_matching: 20000
|
||||
port_echo1: 20001
|
||||
port_echo2: 20002
|
||||
port_matching_p2p: 20003
|
||||
|
||||
stamp:
|
||||
enable: True
|
||||
enabled_stamps: # max 3 play stamps
|
||||
- "touhou_remilia_scarlet"
|
||||
- "touhou_flandre_scarlet"
|
||||
- "touhou_sakuya_izayoi"
|
||||
|
||||
timetrial:
|
||||
enable: True
|
||||
enabled_timetrial: "touhou_remilia_scarlet"
|
@ -1,6 +1,7 @@
|
||||
server:
|
||||
enable: True
|
||||
loglevel: "info"
|
||||
use_https: False
|
||||
|
||||
gachas:
|
||||
enabled_gachas:
|
||||
|
@ -1,6 +1,13 @@
|
||||
server:
|
||||
hostname: "localhost"
|
||||
enable: True
|
||||
loglevel: "info"
|
||||
port: 9000
|
||||
auto_register: True
|
||||
auto_register: True
|
||||
|
||||
crypt:
|
||||
enable: False
|
||||
key: ""
|
||||
iv: ""
|
||||
|
||||
hash:
|
||||
verify_hash: False
|
||||
hash_base: ""
|
@ -33,6 +33,9 @@ Games listed below have been tested and confirmed working. Only game versions ol
|
||||
+ Sword Art Online Arcade (partial support)
|
||||
+ Final
|
||||
|
||||
+ Initial D THE ARCADE
|
||||
+ Season 2
|
||||
|
||||
## Requirements
|
||||
- python 3 (tested working with 3.9 and 3.10, other versions YMMV)
|
||||
- pip
|
||||
|
@ -198,14 +198,6 @@ class CxbBase:
|
||||
).decode("utf-8")
|
||||
)
|
||||
|
||||
def task_generateIndexData(self, versionindex: List[str], uid: int):
|
||||
try:
|
||||
v_profile = self.data.profile.get_profile_index(0, uid, self.version)
|
||||
v_profile_data = v_profile["data"]
|
||||
versionindex.append(int(v_profile_data["appVersion"]))
|
||||
except Exception:
|
||||
versionindex.append("10400")
|
||||
|
||||
def handle_action_loadrange_request(self, data: Dict) -> Dict:
|
||||
range_start = data["loadrange"]["range"][0]
|
||||
range_end = data["loadrange"]["range"][1]
|
||||
@ -279,9 +271,14 @@ class CxbBase:
|
||||
thread_ScoreData = Thread(target=CxbBase.task_generateScoreData(song, index, data1))
|
||||
thread_ScoreData.start()
|
||||
|
||||
for v in index:
|
||||
thread_IndexData = Thread(target=CxbBase.task_generateIndexData(self, versionindex, uid))
|
||||
thread_IndexData.start()
|
||||
v_profile = self.data.profile.get_profile_index(0, uid, self.version)
|
||||
v_profile_data = v_profile["data"]
|
||||
|
||||
for _, data in enumerate(profile):
|
||||
if v_profile_data:
|
||||
versionindex.append(int(v_profile_data["appVersion"]))
|
||||
else:
|
||||
versionindex.append("10400")
|
||||
|
||||
return {"index": index, "data": data1, "version": versionindex}
|
||||
|
||||
|
@ -19,42 +19,6 @@ class CxbServerConfig:
|
||||
)
|
||||
)
|
||||
|
||||
@property
|
||||
def hostname(self) -> str:
|
||||
return CoreConfig.get_config_field(
|
||||
self.__config, "cxb", "server", "hostname", default="localhost"
|
||||
)
|
||||
|
||||
@property
|
||||
def ssl_enable(self) -> bool:
|
||||
return CoreConfig.get_config_field(
|
||||
self.__config, "cxb", "server", "ssl_enable", default=False
|
||||
)
|
||||
|
||||
@property
|
||||
def port(self) -> int:
|
||||
return CoreConfig.get_config_field(
|
||||
self.__config, "cxb", "server", "port", default=8082
|
||||
)
|
||||
|
||||
@property
|
||||
def port_secure(self) -> int:
|
||||
return CoreConfig.get_config_field(
|
||||
self.__config, "cxb", "server", "port_secure", default=443
|
||||
)
|
||||
|
||||
@property
|
||||
def ssl_cert(self) -> str:
|
||||
return CoreConfig.get_config_field(
|
||||
self.__config, "cxb", "server", "ssl_cert", default="cert/title.crt"
|
||||
)
|
||||
|
||||
@property
|
||||
def ssl_key(self) -> str:
|
||||
return CoreConfig.get_config_field(
|
||||
self.__config, "cxb", "server", "ssl_key", default="cert/title.key"
|
||||
)
|
||||
|
||||
|
||||
class CxbConfig(dict):
|
||||
def __init__(self) -> None:
|
||||
|
@ -1,7 +1,6 @@
|
||||
from twisted.web.http import Request
|
||||
import traceback
|
||||
from twisted.web import resource, server
|
||||
from twisted.internet import reactor, endpoints
|
||||
import sys
|
||||
import yaml
|
||||
import json
|
||||
import re
|
||||
@ -77,7 +76,7 @@ class CxbServlet(BaseServlet):
|
||||
return True
|
||||
|
||||
def get_allnet_info(self, game_code: str, game_ver: int, keychip: str) -> Tuple[str, str]:
|
||||
if not self.core_cfg.server.is_using_proxy and Utils.get_title_port_ssl(self.core_cfg) != 443:
|
||||
if not self.core_cfg.server.is_using_proxy and Utils.get_title_port_ssl(self.core_cfg):
|
||||
return (
|
||||
f"https://{self.core_cfg.title.hostname}:{self.core_cfg.title.port_ssl}",
|
||||
"",
|
||||
@ -124,35 +123,42 @@ class CxbServlet(BaseServlet):
|
||||
func_to_find = "handle_data_"
|
||||
version_string = "Base"
|
||||
internal_ver = 0
|
||||
version = 0
|
||||
|
||||
if req_json == {}:
|
||||
self.logger.warning(f"Empty json request to /data")
|
||||
return b""
|
||||
|
||||
subcmd = list(req_json.keys())[0]
|
||||
if subcmd == "dldate":
|
||||
|
||||
if (
|
||||
not type(req_json["dldate"]) is dict
|
||||
or "filetype" not in req_json["dldate"]
|
||||
):
|
||||
self.logger.warning(f"Malformed dldate request: {req_json}")
|
||||
return b""
|
||||
if (
|
||||
not type(req_json["dldate"]) is dict
|
||||
or "filetype" not in req_json["dldate"]
|
||||
):
|
||||
self.logger.warning(f"Malformed dldate request: {req_json}")
|
||||
return b""
|
||||
|
||||
filetype = req_json["dldate"]["filetype"]
|
||||
filetype_split = filetype.split("/")
|
||||
filetype = req_json["dldate"]["filetype"]
|
||||
filetype_split = filetype.split("/")
|
||||
|
||||
if len(filetype_split) < 2 or not filetype_split[0].isnumeric():
|
||||
self.logger.warning(f"Malformed dldate request: {req_json}")
|
||||
return b""
|
||||
if len(filetype_split) < 2 or not filetype_split[0].isnumeric():
|
||||
self.logger.warning(f"Malformed dldate request: {req_json}")
|
||||
return b""
|
||||
|
||||
version = int(filetype_split[0])
|
||||
filename = filetype_split[len(filetype_split) - 1]
|
||||
version = int(filetype_split[0])
|
||||
filename = filetype_split[len(filetype_split) - 1]
|
||||
|
||||
match = re.match(
|
||||
"^([A-Za-z]*)(\d\d\d\d)$", filetype_split[len(filetype_split) - 1]
|
||||
)
|
||||
if match:
|
||||
func_to_find += f"{inflection.underscore(match.group(1))}xxxx"
|
||||
match = re.match(
|
||||
"^([A-Za-z]*)(\d\d\d\d)$", filetype_split[len(filetype_split) - 1]
|
||||
)
|
||||
if match:
|
||||
func_to_find += f"{inflection.underscore(match.group(1))}xxxx"
|
||||
else:
|
||||
func_to_find += f"{inflection.underscore(filename)}"
|
||||
else:
|
||||
func_to_find += f"{inflection.underscore(filename)}"
|
||||
filetype = subcmd
|
||||
func_to_find += filetype
|
||||
|
||||
func_to_find += "_request"
|
||||
|
||||
@ -183,9 +189,10 @@ class CxbServlet(BaseServlet):
|
||||
except Exception as e:
|
||||
self.logger.error(f"Error handling request for file {filetype} - {e}")
|
||||
if self.logger.level == logging.DEBUG:
|
||||
traceback.print_exception(e, limit=1)
|
||||
tp, val, tb = sys.exc_info()
|
||||
traceback.print_exception(tp, val, tb, limit=1)
|
||||
with open("{0}/{1}.log".format(self.core_cfg.server.log_dir, "cxb"), "a") as f:
|
||||
traceback.print_exception(e, limit=1, file=f)
|
||||
traceback.print_exception(tp, val, tb, limit=1, file=f)
|
||||
return ""
|
||||
|
||||
self.logger.debug(f"{version_string} Response {resp}")
|
||||
@ -211,9 +218,10 @@ class CxbServlet(BaseServlet):
|
||||
except Exception as e:
|
||||
self.logger.error(f"Error handling action {subcmd} request - {e}")
|
||||
if self.logger.level == logging.DEBUG:
|
||||
traceback.print_exception(e, limit=1)
|
||||
tp, val, tb = sys.exc_info()
|
||||
traceback.print_exception(tp, val, tb, limit=1)
|
||||
with open("{0}/{1}.log".format(self.core_cfg.server.log_dir, "cxb"), "a") as f:
|
||||
traceback.print_exception(e, limit=1, file=f)
|
||||
traceback.print_exception(tp, val, tb, limit=1, file=f)
|
||||
return ""
|
||||
|
||||
self.logger.debug(f"Response {resp}")
|
||||
@ -239,9 +247,10 @@ class CxbServlet(BaseServlet):
|
||||
except Exception as e:
|
||||
self.logger.error(f"Error handling auth {subcmd} request - {e}")
|
||||
if self.logger.level == logging.DEBUG:
|
||||
traceback.print_exception(e, limit=1)
|
||||
tp, val, tb = sys.exc_info()
|
||||
traceback.print_exception(tp, val, tb, limit=1)
|
||||
with open("{0}/{1}.log".format(self.core_cfg.server.log_dir, "cxb"), "a") as f:
|
||||
traceback.print_exception(e, limit=1, file=f)
|
||||
traceback.print_exception(tp, val, tb, limit=1, file=f)
|
||||
return ""
|
||||
|
||||
self.logger.debug(f"Response {resp}")
|
||||
|
12
titles/idac/__init__.py
Normal file
12
titles/idac/__init__.py
Normal file
@ -0,0 +1,12 @@
|
||||
from titles.idac.index import IDACServlet
|
||||
from titles.idac.const import IDACConstants
|
||||
from titles.idac.database import IDACData
|
||||
from titles.idac.read import IDACReader
|
||||
from titles.idac.frontend import IDACFrontend
|
||||
|
||||
index = IDACServlet
|
||||
database = IDACData
|
||||
reader = IDACReader
|
||||
frontend = IDACFrontend
|
||||
game_codes = [IDACConstants.GAME_CODE]
|
||||
current_schema_version = 1
|
16
titles/idac/base.py
Normal file
16
titles/idac/base.py
Normal file
@ -0,0 +1,16 @@
|
||||
import logging
|
||||
|
||||
from core.config import CoreConfig
|
||||
from titles.idac.config import IDACConfig
|
||||
from titles.idac.const import IDACConstants
|
||||
from titles.idac.database import IDACData
|
||||
|
||||
|
||||
class IDACBase:
|
||||
def __init__(self, core_cfg: CoreConfig, game_cfg: IDACConfig) -> None:
|
||||
self.core_cfg = core_cfg
|
||||
self.game_config = game_cfg
|
||||
self.game = IDACConstants.GAME_CODE
|
||||
self.version = IDACConstants.VER_IDAC_SEASON_1
|
||||
self.data = IDACData(core_cfg)
|
||||
self.logger = logging.getLogger("idac")
|
121
titles/idac/config.py
Normal file
121
titles/idac/config.py
Normal file
@ -0,0 +1,121 @@
|
||||
from core.config import CoreConfig
|
||||
|
||||
|
||||
class IDACServerConfig:
|
||||
def __init__(self, parent: "IDACConfig") -> None:
|
||||
self.__config = parent
|
||||
|
||||
@property
|
||||
def enable(self) -> bool:
|
||||
return CoreConfig.get_config_field(
|
||||
self.__config, "idac", "server", "enable", default=True
|
||||
)
|
||||
|
||||
@property
|
||||
def loglevel(self) -> int:
|
||||
return CoreConfig.str_to_loglevel(
|
||||
CoreConfig.get_config_field(
|
||||
self.__config, "idac", "server", "loglevel", default="info"
|
||||
)
|
||||
)
|
||||
|
||||
@property
|
||||
def ssl(self) -> bool:
|
||||
return CoreConfig.get_config_field(
|
||||
self.__config, "idac", "server", "ssl", default=False
|
||||
)
|
||||
|
||||
@property
|
||||
def ssl_cert(self) -> str:
|
||||
return CoreConfig.get_config_field(
|
||||
self.__config, "idac", "server", "ssl_cert", default="cert/title.crt"
|
||||
)
|
||||
|
||||
@property
|
||||
def ssl_key(self) -> str:
|
||||
return CoreConfig.get_config_field(
|
||||
self.__config, "idac", "server", "ssl_key", default="cert/title.key"
|
||||
)
|
||||
|
||||
@property
|
||||
def matching_host(self) -> str:
|
||||
return CoreConfig.get_config_field(
|
||||
self.__config, "idac", "server", "matching_host", default="127.0.0.1"
|
||||
)
|
||||
|
||||
@property
|
||||
def matching(self) -> int:
|
||||
return CoreConfig.get_config_field(
|
||||
self.__config, "idac", "server", "port_matching", default=20000
|
||||
)
|
||||
|
||||
@property
|
||||
def echo1(self) -> int:
|
||||
return CoreConfig.get_config_field(
|
||||
self.__config, "idac", "server", "port_echo1", default=20001
|
||||
)
|
||||
|
||||
@property
|
||||
def echo2(self) -> int:
|
||||
return CoreConfig.get_config_field(
|
||||
self.__config, "idac", "server", "port_echo2", default=20002
|
||||
)
|
||||
|
||||
@property
|
||||
def matching_p2p(self) -> int:
|
||||
return CoreConfig.get_config_field(
|
||||
self.__config, "idac", "server", "port_matching_p2p", default=20003
|
||||
)
|
||||
|
||||
|
||||
class IDACStampConfig:
|
||||
def __init__(self, parent: "IDACConfig") -> None:
|
||||
self.__config = parent
|
||||
|
||||
@property
|
||||
def enable(self) -> bool:
|
||||
return CoreConfig.get_config_field(
|
||||
self.__config, "idac", "stamp", "enable", default=True
|
||||
)
|
||||
|
||||
@property
|
||||
def enabled_stamps(self) -> list:
|
||||
return CoreConfig.get_config_field(
|
||||
self.__config,
|
||||
"idac",
|
||||
"stamp",
|
||||
"enabled_stamps",
|
||||
default=[
|
||||
"touhou_remilia_scarlet",
|
||||
"touhou_flandre_scarlet",
|
||||
"touhou_sakuya_izayoi",
|
||||
],
|
||||
)
|
||||
|
||||
|
||||
class IDACTimetrialConfig:
|
||||
def __init__(self, parent: "IDACConfig") -> None:
|
||||
self.__config = parent
|
||||
|
||||
@property
|
||||
def enable(self) -> bool:
|
||||
return CoreConfig.get_config_field(
|
||||
self.__config, "idac", "timetrial", "enable", default=True
|
||||
)
|
||||
|
||||
@property
|
||||
def enabled_timetrial(self) -> str:
|
||||
return CoreConfig.get_config_field(
|
||||
self.__config,
|
||||
"idac",
|
||||
"timetrial",
|
||||
"enabled_timetrial",
|
||||
default="touhou_remilia_scarlet",
|
||||
)
|
||||
|
||||
|
||||
class IDACConfig(dict):
|
||||
def __init__(self) -> None:
|
||||
self.server = IDACServerConfig(self)
|
||||
self.stamp = IDACStampConfig(self)
|
||||
self.timetrial = IDACTimetrialConfig(self)
|
16
titles/idac/const.py
Normal file
16
titles/idac/const.py
Normal file
@ -0,0 +1,16 @@
|
||||
class IDACConstants():
|
||||
GAME_CODE = "SDGT"
|
||||
|
||||
CONFIG_NAME = "idac.yaml"
|
||||
|
||||
VER_IDAC_SEASON_1 = 0
|
||||
VER_IDAC_SEASON_2 = 1
|
||||
|
||||
VERSION_STRING = (
|
||||
"Initial D THE ARCADE Season 1",
|
||||
"Initial D THE ARCADE Season 2",
|
||||
)
|
||||
|
||||
@classmethod
|
||||
def game_ver_to_string(cls, ver: int):
|
||||
return cls.VERSION_STRING[ver]
|
21256
titles/idac/data/avatarGacha.json
Normal file
21256
titles/idac/data/avatarGacha.json
Normal file
File diff suppressed because it is too large
Load Diff
38
titles/idac/data/create_delivery_images.py
Normal file
38
titles/idac/data/create_delivery_images.py
Normal file
@ -0,0 +1,38 @@
|
||||
import os
|
||||
import hashlib
|
||||
|
||||
|
||||
def prepare_images(image_folder="titles/idac/data/images"):
|
||||
print(f"Preparing image delivery files in {image_folder}...")
|
||||
|
||||
for file in os.listdir(image_folder):
|
||||
if file.endswith(".png") or file.endswith(".jpg"):
|
||||
# dpg_name = "adv-" + file[:-4].upper()
|
||||
dpg_name = file[:-4]
|
||||
if file.endswith(".png"):
|
||||
dpg_name += ".dpg"
|
||||
else:
|
||||
dpg_name += ".djg"
|
||||
|
||||
if os.path.exists(os.path.join(image_folder, dpg_name)):
|
||||
continue
|
||||
else:
|
||||
with open(
|
||||
os.path.join(image_folder, file), "rb"
|
||||
) as original_image_file:
|
||||
original_image = original_image_file.read()
|
||||
image_hash = hashlib.md5(original_image).hexdigest()
|
||||
print(
|
||||
f"DPG for {file} not found, creating with hash {image_hash.upper()} ..."
|
||||
)
|
||||
md5_buf = bytes.fromhex(image_hash)
|
||||
dpg_buf = md5_buf + original_image
|
||||
dpg_name = "adv-" + image_hash.upper() + dpg_name[:-4]
|
||||
with open(os.path.join(image_folder, dpg_name), "wb") as dpg_file:
|
||||
dpg_file.write(dpg_buf)
|
||||
|
||||
print(f"Created {dpg_name}.")
|
||||
|
||||
|
||||
# Call the function to execute it
|
||||
prepare_images()
|
297
titles/idac/data/stamps/touhou_flandre_scarlet.json
Normal file
297
titles/idac/data/stamps/touhou_flandre_scarlet.json
Normal file
@ -0,0 +1,297 @@
|
||||
{
|
||||
"m_stamp_event_id": 25,
|
||||
"stamp_event_nm": "フランドール・スカーレットスタンプ",
|
||||
"start_dt": "2023-10-01",
|
||||
"end_dt": "2029-01-01",
|
||||
"play_bonus": 1,
|
||||
"daily_bonus": 2,
|
||||
"weekly_bonus": 4,
|
||||
"add_bonus": [
|
||||
{
|
||||
"bonus_category": 0,
|
||||
"bonus_play_num": 0,
|
||||
"bonus_stamp_num": 0,
|
||||
"bonus_daily_flag": 0
|
||||
}
|
||||
],
|
||||
"sheet_design": 5,
|
||||
"sheet_stamp": 0,
|
||||
"sheet_set": [
|
||||
{
|
||||
"sheet_no": 1,
|
||||
"loop_flag": 0,
|
||||
"stamp_sheet": [
|
||||
{
|
||||
"reward_setting_masu": 10,
|
||||
"reward_category_a": 24,
|
||||
"reward_type_a": 4383,
|
||||
"reward_category_b": 0,
|
||||
"reward_type_b": 0,
|
||||
"reward_is_pickup": 0,
|
||||
"reward_pickup_display_name": "悪魔の妹"
|
||||
},
|
||||
{
|
||||
"reward_setting_masu": 20,
|
||||
"reward_category_a": 24,
|
||||
"reward_type_a": 4401,
|
||||
"reward_category_b": 0,
|
||||
"reward_type_b": 0,
|
||||
"reward_is_pickup": 1,
|
||||
"reward_pickup_display_name": "ネオン(フランドール)獲得"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"sheet_no": 2,
|
||||
"loop_flag": 0,
|
||||
"stamp_sheet": [
|
||||
{
|
||||
"reward_setting_masu": 10,
|
||||
"reward_category_a": 12,
|
||||
"reward_type_a": 966,
|
||||
"reward_category_b": 12,
|
||||
"reward_type_b": 969,
|
||||
"reward_is_pickup": 1,
|
||||
"reward_pickup_display_name": "フランドールのナイトキャップ"
|
||||
},
|
||||
{
|
||||
"reward_setting_masu": 20,
|
||||
"reward_category_a": 21,
|
||||
"reward_type_a": 494,
|
||||
"reward_category_b": 0,
|
||||
"reward_type_b": 0,
|
||||
"reward_is_pickup": 0,
|
||||
"reward_pickup_display_name": "おまたせ"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"sheet_no": 3,
|
||||
"loop_flag": 0,
|
||||
"stamp_sheet": [
|
||||
{
|
||||
"reward_setting_masu": 10,
|
||||
"reward_category_a": 5,
|
||||
"reward_type_a": 1,
|
||||
"reward_category_b": 0,
|
||||
"reward_type_b": 0,
|
||||
"reward_is_pickup": 0,
|
||||
"reward_pickup_display_name": "アバタートークン×1"
|
||||
},
|
||||
{
|
||||
"reward_setting_masu": 20,
|
||||
"reward_category_a": 24,
|
||||
"reward_type_a": 4395,
|
||||
"reward_category_b": 0,
|
||||
"reward_type_b": 0,
|
||||
"reward_is_pickup": 1,
|
||||
"reward_pickup_display_name": "バイナルEX(フランドール)獲得"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"sheet_no": 4,
|
||||
"loop_flag": 0,
|
||||
"stamp_sheet": [
|
||||
{
|
||||
"reward_setting_masu": 10,
|
||||
"reward_category_a": 3,
|
||||
"reward_type_a": 1,
|
||||
"reward_category_b": 0,
|
||||
"reward_type_b": 0,
|
||||
"reward_is_pickup": 0,
|
||||
"reward_pickup_display_name": "ドレスアップトークン×1"
|
||||
},
|
||||
{
|
||||
"reward_setting_masu": 20,
|
||||
"reward_category_a": 15,
|
||||
"reward_type_a": 462,
|
||||
"reward_category_b": 15,
|
||||
"reward_type_b": 465,
|
||||
"reward_is_pickup": 1,
|
||||
"reward_pickup_display_name": "吸血鬼の服(フランドール)"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"sheet_no": 5,
|
||||
"loop_flag": 0,
|
||||
"stamp_sheet": [
|
||||
{
|
||||
"reward_setting_masu": 10,
|
||||
"reward_category_a": 6,
|
||||
"reward_type_a": 62,
|
||||
"reward_category_b": 0,
|
||||
"reward_type_b": 0,
|
||||
"reward_is_pickup": 1,
|
||||
"reward_pickup_display_name": "スペシャル(フランドール・スカーレット)"
|
||||
},
|
||||
{
|
||||
"reward_setting_masu": 20,
|
||||
"reward_category_a": 24,
|
||||
"reward_type_a": 4386,
|
||||
"reward_category_b": 0,
|
||||
"reward_type_b": 0,
|
||||
"reward_is_pickup": 0,
|
||||
"reward_pickup_display_name": "禁忌「クランベリートラップ」"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"sheet_no": 6,
|
||||
"loop_flag": 0,
|
||||
"stamp_sheet": [
|
||||
{
|
||||
"reward_setting_masu": 10,
|
||||
"reward_category_a": 21,
|
||||
"reward_type_a": 495,
|
||||
"reward_category_b": 0,
|
||||
"reward_type_b": 0,
|
||||
"reward_is_pickup": 0,
|
||||
"reward_pickup_display_name": "・・ここは私の家よ?"
|
||||
},
|
||||
{
|
||||
"reward_setting_masu": 20,
|
||||
"reward_category_a": 5,
|
||||
"reward_type_a": 1,
|
||||
"reward_category_b": 0,
|
||||
"reward_type_b": 0,
|
||||
"reward_is_pickup": 0,
|
||||
"reward_pickup_display_name": "アバタートークン×1"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"sheet_no": 7,
|
||||
"loop_flag": 0,
|
||||
"stamp_sheet": [
|
||||
{
|
||||
"reward_setting_masu": 10,
|
||||
"reward_category_a": 24,
|
||||
"reward_type_a": 4404,
|
||||
"reward_category_b": 0,
|
||||
"reward_type_b": 0,
|
||||
"reward_is_pickup": 1,
|
||||
"reward_pickup_display_name": "ネオンDX(フランドール)獲得"
|
||||
},
|
||||
{
|
||||
"reward_setting_masu": 20,
|
||||
"reward_category_a": 3,
|
||||
"reward_type_a": 1,
|
||||
"reward_category_b": 0,
|
||||
"reward_type_b": 0,
|
||||
"reward_is_pickup": 0,
|
||||
"reward_pickup_display_name": "ドレスアップトークン×1"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"sheet_no": 8,
|
||||
"loop_flag": 0,
|
||||
"stamp_sheet": [
|
||||
{
|
||||
"reward_setting_masu": 10,
|
||||
"reward_category_a": 24,
|
||||
"reward_type_a": 4398,
|
||||
"reward_category_b": 0,
|
||||
"reward_type_b": 0,
|
||||
"reward_is_pickup": 1,
|
||||
"reward_pickup_display_name": "バイナルDX(フランドール)獲得"
|
||||
},
|
||||
{
|
||||
"reward_setting_masu": 20,
|
||||
"reward_category_a": 5,
|
||||
"reward_type_a": 1,
|
||||
"reward_category_b": 0,
|
||||
"reward_type_b": 0,
|
||||
"reward_is_pickup": 0,
|
||||
"reward_pickup_display_name": "アバタートークン×1"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"sheet_no": 9,
|
||||
"loop_flag": 0,
|
||||
"stamp_sheet": [
|
||||
{
|
||||
"reward_setting_masu": 10,
|
||||
"reward_category_a": 3,
|
||||
"reward_type_a": 1,
|
||||
"reward_category_b": 0,
|
||||
"reward_type_b": 0,
|
||||
"reward_is_pickup": 0,
|
||||
"reward_pickup_display_name": "ドレスアップトークン×1"
|
||||
},
|
||||
{
|
||||
"reward_setting_masu": 15,
|
||||
"reward_category_a": 5,
|
||||
"reward_type_a": 1,
|
||||
"reward_category_b": 0,
|
||||
"reward_type_b": 0,
|
||||
"reward_is_pickup": 0,
|
||||
"reward_pickup_display_name": "アバタートークン×1"
|
||||
},
|
||||
{
|
||||
"reward_setting_masu": 20,
|
||||
"reward_category_a": 3,
|
||||
"reward_type_a": 1,
|
||||
"reward_category_b": 0,
|
||||
"reward_type_b": 0,
|
||||
"reward_is_pickup": 0,
|
||||
"reward_pickup_display_name": "ドレスアップトークン×1"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"sheet_no": 10,
|
||||
"loop_flag": 0,
|
||||
"stamp_sheet": [
|
||||
{
|
||||
"reward_setting_masu": 10,
|
||||
"reward_category_a": 5,
|
||||
"reward_type_a": 1,
|
||||
"reward_category_b": 0,
|
||||
"reward_type_b": 0,
|
||||
"reward_is_pickup": 0,
|
||||
"reward_pickup_display_name": "アバタートークン×1"
|
||||
},
|
||||
{
|
||||
"reward_setting_masu": 20,
|
||||
"reward_category_a": 24,
|
||||
"reward_type_a": 4389,
|
||||
"reward_category_b": 0,
|
||||
"reward_type_b": 0,
|
||||
"reward_is_pickup": 1,
|
||||
"reward_pickup_display_name": "QED「495年の波紋」"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"sheet_no": 11,
|
||||
"loop_flag": 1,
|
||||
"stamp_sheet": [
|
||||
{
|
||||
"reward_setting_masu": 10,
|
||||
"reward_category_a": 3,
|
||||
"reward_type_a": 1,
|
||||
"reward_category_b": 0,
|
||||
"reward_type_b": 0,
|
||||
"reward_is_pickup": 0,
|
||||
"reward_pickup_display_name": "ドレスアップトークン×1"
|
||||
},
|
||||
{
|
||||
"reward_setting_masu": 20,
|
||||
"reward_category_a": 5,
|
||||
"reward_type_a": 1,
|
||||
"reward_category_b": 0,
|
||||
"reward_type_b": 0,
|
||||
"reward_is_pickup": 0,
|
||||
"reward_pickup_display_name": "アバタートークン×1"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"weekday_bonus": 0,
|
||||
"weekend_bonus": 0,
|
||||
"sheet_prohibitfreeplaystampcount": false
|
||||
}
|
297
titles/idac/data/stamps/touhou_remilia_scarlet.json
Normal file
297
titles/idac/data/stamps/touhou_remilia_scarlet.json
Normal file
@ -0,0 +1,297 @@
|
||||
{
|
||||
"m_stamp_event_id": 24,
|
||||
"stamp_event_nm": "レミリア・スカーレットスタンプ",
|
||||
"start_dt": "2023-10-01",
|
||||
"end_dt": "2029-01-01",
|
||||
"play_bonus": 1,
|
||||
"daily_bonus": 2,
|
||||
"weekly_bonus": 4,
|
||||
"add_bonus": [
|
||||
{
|
||||
"bonus_category": 0,
|
||||
"bonus_play_num": 0,
|
||||
"bonus_stamp_num": 0,
|
||||
"bonus_daily_flag": 0
|
||||
}
|
||||
],
|
||||
"sheet_design": 4,
|
||||
"sheet_stamp": 0,
|
||||
"sheet_set": [
|
||||
{
|
||||
"sheet_no": 1,
|
||||
"loop_flag": 0,
|
||||
"stamp_sheet": [
|
||||
{
|
||||
"reward_setting_masu": 10,
|
||||
"reward_category_a": 24,
|
||||
"reward_type_a": 4382,
|
||||
"reward_category_b": 0,
|
||||
"reward_type_b": 0,
|
||||
"reward_is_pickup": 0,
|
||||
"reward_pickup_display_name": "永遠に紅い幼き月"
|
||||
},
|
||||
{
|
||||
"reward_setting_masu": 20,
|
||||
"reward_category_a": 24,
|
||||
"reward_type_a": 4400,
|
||||
"reward_category_b": 0,
|
||||
"reward_type_b": 0,
|
||||
"reward_is_pickup": 1,
|
||||
"reward_pickup_display_name": "ネオン(レミリア)獲得"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"sheet_no": 2,
|
||||
"loop_flag": 0,
|
||||
"stamp_sheet": [
|
||||
{
|
||||
"reward_setting_masu": 10,
|
||||
"reward_category_a": 12,
|
||||
"reward_type_a": 965,
|
||||
"reward_category_b": 12,
|
||||
"reward_type_b": 968,
|
||||
"reward_is_pickup": 1,
|
||||
"reward_pickup_display_name": "レミリアのナイトキャップ"
|
||||
},
|
||||
{
|
||||
"reward_setting_masu": 20,
|
||||
"reward_category_a": 21,
|
||||
"reward_type_a": 490,
|
||||
"reward_category_b": 0,
|
||||
"reward_type_b": 0,
|
||||
"reward_is_pickup": 0,
|
||||
"reward_pickup_display_name": "ここは、私の城よ?"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"sheet_no": 3,
|
||||
"loop_flag": 0,
|
||||
"stamp_sheet": [
|
||||
{
|
||||
"reward_setting_masu": 10,
|
||||
"reward_category_a": 5,
|
||||
"reward_type_a": 1,
|
||||
"reward_category_b": 0,
|
||||
"reward_type_b": 0,
|
||||
"reward_is_pickup": 0,
|
||||
"reward_pickup_display_name": "アバタートークン×1"
|
||||
},
|
||||
{
|
||||
"reward_setting_masu": 20,
|
||||
"reward_category_a": 24,
|
||||
"reward_type_a": 4394,
|
||||
"reward_category_b": 0,
|
||||
"reward_type_b": 0,
|
||||
"reward_is_pickup": 1,
|
||||
"reward_pickup_display_name": "バイナルEX(レミリア)獲得"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"sheet_no": 4,
|
||||
"loop_flag": 0,
|
||||
"stamp_sheet": [
|
||||
{
|
||||
"reward_setting_masu": 10,
|
||||
"reward_category_a": 3,
|
||||
"reward_type_a": 1,
|
||||
"reward_category_b": 0,
|
||||
"reward_type_b": 0,
|
||||
"reward_is_pickup": 0,
|
||||
"reward_pickup_display_name": "ドレスアップトークン×1"
|
||||
},
|
||||
{
|
||||
"reward_setting_masu": 20,
|
||||
"reward_category_a": 15,
|
||||
"reward_type_a": 461,
|
||||
"reward_category_b": 15,
|
||||
"reward_type_b": 464,
|
||||
"reward_is_pickup": 1,
|
||||
"reward_pickup_display_name": "吸血鬼の服(レミリア)"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"sheet_no": 5,
|
||||
"loop_flag": 0,
|
||||
"stamp_sheet": [
|
||||
{
|
||||
"reward_setting_masu": 10,
|
||||
"reward_category_a": 6,
|
||||
"reward_type_a": 61,
|
||||
"reward_category_b": 0,
|
||||
"reward_type_b": 0,
|
||||
"reward_is_pickup": 1,
|
||||
"reward_pickup_display_name": "スペシャル(レミリア・スカーレット)"
|
||||
},
|
||||
{
|
||||
"reward_setting_masu": 20,
|
||||
"reward_category_a": 24,
|
||||
"reward_type_a": 4385,
|
||||
"reward_category_b": 0,
|
||||
"reward_type_b": 0,
|
||||
"reward_is_pickup": 0,
|
||||
"reward_pickup_display_name": "天罰「スターオブダビデ」"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"sheet_no": 6,
|
||||
"loop_flag": 0,
|
||||
"stamp_sheet": [
|
||||
{
|
||||
"reward_setting_masu": 10,
|
||||
"reward_category_a": 21,
|
||||
"reward_type_a": 491,
|
||||
"reward_category_b": 0,
|
||||
"reward_type_b": 0,
|
||||
"reward_is_pickup": 0,
|
||||
"reward_pickup_display_name": "楽しい夜になりそうね"
|
||||
},
|
||||
{
|
||||
"reward_setting_masu": 20,
|
||||
"reward_category_a": 5,
|
||||
"reward_type_a": 1,
|
||||
"reward_category_b": 0,
|
||||
"reward_type_b": 0,
|
||||
"reward_is_pickup": 0,
|
||||
"reward_pickup_display_name": "アバタートークン×1"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"sheet_no": 7,
|
||||
"loop_flag": 0,
|
||||
"stamp_sheet": [
|
||||
{
|
||||
"reward_setting_masu": 10,
|
||||
"reward_category_a": 24,
|
||||
"reward_type_a": 4403,
|
||||
"reward_category_b": 0,
|
||||
"reward_type_b": 0,
|
||||
"reward_is_pickup": 1,
|
||||
"reward_pickup_display_name": "ネオンDX(レミリア)獲得"
|
||||
},
|
||||
{
|
||||
"reward_setting_masu": 20,
|
||||
"reward_category_a": 3,
|
||||
"reward_type_a": 1,
|
||||
"reward_category_b": 0,
|
||||
"reward_type_b": 0,
|
||||
"reward_is_pickup": 0,
|
||||
"reward_pickup_display_name": "ドレスアップトークン×1"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"sheet_no": 8,
|
||||
"loop_flag": 0,
|
||||
"stamp_sheet": [
|
||||
{
|
||||
"reward_setting_masu": 10,
|
||||
"reward_category_a": 24,
|
||||
"reward_type_a": 4397,
|
||||
"reward_category_b": 0,
|
||||
"reward_type_b": 0,
|
||||
"reward_is_pickup": 1,
|
||||
"reward_pickup_display_name": "バイナルDX(レミリア)獲得"
|
||||
},
|
||||
{
|
||||
"reward_setting_masu": 20,
|
||||
"reward_category_a": 5,
|
||||
"reward_type_a": 1,
|
||||
"reward_category_b": 0,
|
||||
"reward_type_b": 0,
|
||||
"reward_is_pickup": 0,
|
||||
"reward_pickup_display_name": "アバタートークン×1"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"sheet_no": 9,
|
||||
"loop_flag": 0,
|
||||
"stamp_sheet": [
|
||||
{
|
||||
"reward_setting_masu": 10,
|
||||
"reward_category_a": 3,
|
||||
"reward_type_a": 1,
|
||||
"reward_category_b": 0,
|
||||
"reward_type_b": 0,
|
||||
"reward_is_pickup": 0,
|
||||
"reward_pickup_display_name": "ドレスアップトークン×1"
|
||||
},
|
||||
{
|
||||
"reward_setting_masu": 15,
|
||||
"reward_category_a": 5,
|
||||
"reward_type_a": 1,
|
||||
"reward_category_b": 0,
|
||||
"reward_type_b": 0,
|
||||
"reward_is_pickup": 0,
|
||||
"reward_pickup_display_name": "アバタートークン×1"
|
||||
},
|
||||
{
|
||||
"reward_setting_masu": 20,
|
||||
"reward_category_a": 3,
|
||||
"reward_type_a": 1,
|
||||
"reward_category_b": 0,
|
||||
"reward_type_b": 0,
|
||||
"reward_is_pickup": 0,
|
||||
"reward_pickup_display_name": "ドレスアップトークン×1"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"sheet_no": 10,
|
||||
"loop_flag": 0,
|
||||
"stamp_sheet": [
|
||||
{
|
||||
"reward_setting_masu": 10,
|
||||
"reward_category_a": 5,
|
||||
"reward_type_a": 1,
|
||||
"reward_category_b": 0,
|
||||
"reward_type_b": 0,
|
||||
"reward_is_pickup": 0,
|
||||
"reward_pickup_display_name": "アバタートークン×1"
|
||||
},
|
||||
{
|
||||
"reward_setting_masu": 20,
|
||||
"reward_category_a": 24,
|
||||
"reward_type_a": 4388,
|
||||
"reward_category_b": 0,
|
||||
"reward_type_b": 0,
|
||||
"reward_is_pickup": 1,
|
||||
"reward_pickup_display_name": "「紅色の幻想郷」"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"sheet_no": 11,
|
||||
"loop_flag": 1,
|
||||
"stamp_sheet": [
|
||||
{
|
||||
"reward_setting_masu": 10,
|
||||
"reward_category_a": 3,
|
||||
"reward_type_a": 1,
|
||||
"reward_category_b": 0,
|
||||
"reward_type_b": 0,
|
||||
"reward_is_pickup": 0,
|
||||
"reward_pickup_display_name": "ドレスアップトークン×1"
|
||||
},
|
||||
{
|
||||
"reward_setting_masu": 20,
|
||||
"reward_category_a": 5,
|
||||
"reward_type_a": 1,
|
||||
"reward_category_b": 0,
|
||||
"reward_type_b": 0,
|
||||
"reward_is_pickup": 0,
|
||||
"reward_pickup_display_name": "アバタートークン×1"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"weekday_bonus": 0,
|
||||
"weekend_bonus": 0,
|
||||
"sheet_prohibitfreeplaystampcount": false
|
||||
}
|
297
titles/idac/data/stamps/touhou_sakuya_izayoi.json
Normal file
297
titles/idac/data/stamps/touhou_sakuya_izayoi.json
Normal file
@ -0,0 +1,297 @@
|
||||
{
|
||||
"m_stamp_event_id": 26,
|
||||
"stamp_event_nm": "十六夜咲夜スタンプ",
|
||||
"start_dt": "2023-10-01",
|
||||
"end_dt": "2029-01-01",
|
||||
"play_bonus": 1,
|
||||
"daily_bonus": 2,
|
||||
"weekly_bonus": 4,
|
||||
"add_bonus": [
|
||||
{
|
||||
"bonus_category": 0,
|
||||
"bonus_play_num": 0,
|
||||
"bonus_stamp_num": 0,
|
||||
"bonus_daily_flag": 0
|
||||
}
|
||||
],
|
||||
"sheet_design": 6,
|
||||
"sheet_stamp": 0,
|
||||
"sheet_set": [
|
||||
{
|
||||
"sheet_no": 1,
|
||||
"loop_flag": 0,
|
||||
"stamp_sheet": [
|
||||
{
|
||||
"reward_setting_masu": 10,
|
||||
"reward_category_a": 24,
|
||||
"reward_type_a": 4381,
|
||||
"reward_category_b": 0,
|
||||
"reward_type_b": 0,
|
||||
"reward_is_pickup": 0,
|
||||
"reward_pickup_display_name": "紅魔館のメイド"
|
||||
},
|
||||
{
|
||||
"reward_setting_masu": 20,
|
||||
"reward_category_a": 24,
|
||||
"reward_type_a": 4399,
|
||||
"reward_category_b": 0,
|
||||
"reward_type_b": 0,
|
||||
"reward_is_pickup": 1,
|
||||
"reward_pickup_display_name": "ネオン(十六夜咲夜)獲得"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"sheet_no": 2,
|
||||
"loop_flag": 0,
|
||||
"stamp_sheet": [
|
||||
{
|
||||
"reward_setting_masu": 10,
|
||||
"reward_category_a": 12,
|
||||
"reward_type_a": 964,
|
||||
"reward_category_b": 12,
|
||||
"reward_type_b": 967,
|
||||
"reward_is_pickup": 1,
|
||||
"reward_pickup_display_name": "メイドのホワイトブリム"
|
||||
},
|
||||
{
|
||||
"reward_setting_masu": 20,
|
||||
"reward_category_a": 21,
|
||||
"reward_type_a": 486,
|
||||
"reward_category_b": 0,
|
||||
"reward_type_b": 0,
|
||||
"reward_is_pickup": 0,
|
||||
"reward_pickup_display_name": "2時間前に出直してきな"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"sheet_no": 3,
|
||||
"loop_flag": 0,
|
||||
"stamp_sheet": [
|
||||
{
|
||||
"reward_setting_masu": 10,
|
||||
"reward_category_a": 5,
|
||||
"reward_type_a": 1,
|
||||
"reward_category_b": 0,
|
||||
"reward_type_b": 0,
|
||||
"reward_is_pickup": 0,
|
||||
"reward_pickup_display_name": "アバタートークン×1"
|
||||
},
|
||||
{
|
||||
"reward_setting_masu": 20,
|
||||
"reward_category_a": 24,
|
||||
"reward_type_a": 4393,
|
||||
"reward_category_b": 0,
|
||||
"reward_type_b": 0,
|
||||
"reward_is_pickup": 1,
|
||||
"reward_pickup_display_name": "バイナルEX(十六夜咲夜)獲得"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"sheet_no": 4,
|
||||
"loop_flag": 0,
|
||||
"stamp_sheet": [
|
||||
{
|
||||
"reward_setting_masu": 10,
|
||||
"reward_category_a": 3,
|
||||
"reward_type_a": 1,
|
||||
"reward_category_b": 0,
|
||||
"reward_type_b": 0,
|
||||
"reward_is_pickup": 0,
|
||||
"reward_pickup_display_name": "ドレスアップトークン×1"
|
||||
},
|
||||
{
|
||||
"reward_setting_masu": 20,
|
||||
"reward_category_a": 15,
|
||||
"reward_type_a": 460,
|
||||
"reward_category_b": 15,
|
||||
"reward_type_b": 463,
|
||||
"reward_is_pickup": 1,
|
||||
"reward_pickup_display_name": "メイドの服"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"sheet_no": 5,
|
||||
"loop_flag": 0,
|
||||
"stamp_sheet": [
|
||||
{
|
||||
"reward_setting_masu": 10,
|
||||
"reward_category_a": 6,
|
||||
"reward_type_a": 60,
|
||||
"reward_category_b": 0,
|
||||
"reward_type_b": 0,
|
||||
"reward_is_pickup": 1,
|
||||
"reward_pickup_display_name": "スペシャル(十六夜咲夜)"
|
||||
},
|
||||
{
|
||||
"reward_setting_masu": 20,
|
||||
"reward_category_a": 24,
|
||||
"reward_type_a": 4384,
|
||||
"reward_category_b": 0,
|
||||
"reward_type_b": 0,
|
||||
"reward_is_pickup": 0,
|
||||
"reward_pickup_display_name": "幻在「クロックコープス」"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"sheet_no": 6,
|
||||
"loop_flag": 0,
|
||||
"stamp_sheet": [
|
||||
{
|
||||
"reward_setting_masu": 10,
|
||||
"reward_category_a": 21,
|
||||
"reward_type_a": 487,
|
||||
"reward_category_b": 0,
|
||||
"reward_type_b": 0,
|
||||
"reward_is_pickup": 0,
|
||||
"reward_pickup_display_name": "私のナイフから逃げられると思って?"
|
||||
},
|
||||
{
|
||||
"reward_setting_masu": 20,
|
||||
"reward_category_a": 5,
|
||||
"reward_type_a": 1,
|
||||
"reward_category_b": 0,
|
||||
"reward_type_b": 0,
|
||||
"reward_is_pickup": 0,
|
||||
"reward_pickup_display_name": "アバタートークン×1"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"sheet_no": 7,
|
||||
"loop_flag": 0,
|
||||
"stamp_sheet": [
|
||||
{
|
||||
"reward_setting_masu": 10,
|
||||
"reward_category_a": 24,
|
||||
"reward_type_a": 4402,
|
||||
"reward_category_b": 0,
|
||||
"reward_type_b": 0,
|
||||
"reward_is_pickup": 1,
|
||||
"reward_pickup_display_name": "ネオンDX(十六夜咲夜)獲得"
|
||||
},
|
||||
{
|
||||
"reward_setting_masu": 20,
|
||||
"reward_category_a": 3,
|
||||
"reward_type_a": 1,
|
||||
"reward_category_b": 0,
|
||||
"reward_type_b": 0,
|
||||
"reward_is_pickup": 0,
|
||||
"reward_pickup_display_name": "ドレスアップトークン×1"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"sheet_no": 8,
|
||||
"loop_flag": 0,
|
||||
"stamp_sheet": [
|
||||
{
|
||||
"reward_setting_masu": 10,
|
||||
"reward_category_a": 24,
|
||||
"reward_type_a": 4396,
|
||||
"reward_category_b": 0,
|
||||
"reward_type_b": 0,
|
||||
"reward_is_pickup": 1,
|
||||
"reward_pickup_display_name": "バイナルDX(十六夜咲夜)獲得"
|
||||
},
|
||||
{
|
||||
"reward_setting_masu": 20,
|
||||
"reward_category_a": 5,
|
||||
"reward_type_a": 1,
|
||||
"reward_category_b": 0,
|
||||
"reward_type_b": 0,
|
||||
"reward_is_pickup": 0,
|
||||
"reward_pickup_display_name": "アバタートークン×1"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"sheet_no": 9,
|
||||
"loop_flag": 0,
|
||||
"stamp_sheet": [
|
||||
{
|
||||
"reward_setting_masu": 10,
|
||||
"reward_category_a": 3,
|
||||
"reward_type_a": 1,
|
||||
"reward_category_b": 0,
|
||||
"reward_type_b": 0,
|
||||
"reward_is_pickup": 0,
|
||||
"reward_pickup_display_name": "ドレスアップトークン×1"
|
||||
},
|
||||
{
|
||||
"reward_setting_masu": 15,
|
||||
"reward_category_a": 5,
|
||||
"reward_type_a": 1,
|
||||
"reward_category_b": 0,
|
||||
"reward_type_b": 0,
|
||||
"reward_is_pickup": 0,
|
||||
"reward_pickup_display_name": "アバタートークン×1"
|
||||
},
|
||||
{
|
||||
"reward_setting_masu": 20,
|
||||
"reward_category_a": 3,
|
||||
"reward_type_a": 1,
|
||||
"reward_category_b": 0,
|
||||
"reward_type_b": 0,
|
||||
"reward_is_pickup": 0,
|
||||
"reward_pickup_display_name": "ドレスアップトークン×1"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"sheet_no": 10,
|
||||
"loop_flag": 0,
|
||||
"stamp_sheet": [
|
||||
{
|
||||
"reward_setting_masu": 10,
|
||||
"reward_category_a": 5,
|
||||
"reward_type_a": 1,
|
||||
"reward_category_b": 0,
|
||||
"reward_type_b": 0,
|
||||
"reward_is_pickup": 0,
|
||||
"reward_pickup_display_name": "アバタートークン×1"
|
||||
},
|
||||
{
|
||||
"reward_setting_masu": 20,
|
||||
"reward_category_a": 24,
|
||||
"reward_type_a": 4387,
|
||||
"reward_category_b": 0,
|
||||
"reward_type_b": 0,
|
||||
"reward_is_pickup": 1,
|
||||
"reward_pickup_display_name": "メイド秘技「操りドール」"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"sheet_no": 11,
|
||||
"loop_flag": 1,
|
||||
"stamp_sheet": [
|
||||
{
|
||||
"reward_setting_masu": 10,
|
||||
"reward_category_a": 3,
|
||||
"reward_type_a": 1,
|
||||
"reward_category_b": 0,
|
||||
"reward_type_b": 0,
|
||||
"reward_is_pickup": 0,
|
||||
"reward_pickup_display_name": "ドレスアップトークン×1"
|
||||
},
|
||||
{
|
||||
"reward_setting_masu": 20,
|
||||
"reward_category_a": 5,
|
||||
"reward_type_a": 1,
|
||||
"reward_category_b": 0,
|
||||
"reward_type_b": 0,
|
||||
"reward_is_pickup": 0,
|
||||
"reward_pickup_display_name": "アバタートークン×1"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"weekday_bonus": 0,
|
||||
"weekend_bonus": 0,
|
||||
"sheet_prohibitfreeplaystampcount": false
|
||||
}
|
1
titles/idac/data/timeRelease_v0100.json
Normal file
1
titles/idac/data/timeRelease_v0100.json
Normal file
File diff suppressed because one or more lines are too long
1
titles/idac/data/timeRelease_v0131.json
Normal file
1
titles/idac/data/timeRelease_v0131.json
Normal file
File diff suppressed because one or more lines are too long
1
titles/idac/data/timeRelease_v0141.json
Normal file
1
titles/idac/data/timeRelease_v0141.json
Normal file
File diff suppressed because one or more lines are too long
1
titles/idac/data/timeRelease_v0150.json
Normal file
1
titles/idac/data/timeRelease_v0150.json
Normal file
File diff suppressed because one or more lines are too long
59
titles/idac/data/timetrial/touhou_flandre_scarlet.json
Normal file
59
titles/idac/data/timetrial/touhou_flandre_scarlet.json
Normal file
@ -0,0 +1,59 @@
|
||||
{
|
||||
"timetrial_event_id": 5,
|
||||
"name": "フランドール・スカーレット",
|
||||
"start_dt": "2023-10-01",
|
||||
"end_dt": "2029-01-01",
|
||||
"course_id": 18,
|
||||
"point": [
|
||||
50,
|
||||
80,
|
||||
80,
|
||||
80,
|
||||
80,
|
||||
100,
|
||||
100,
|
||||
100,
|
||||
100,
|
||||
120,
|
||||
120,
|
||||
120,
|
||||
120,
|
||||
140,
|
||||
140,
|
||||
140,
|
||||
140,
|
||||
160,
|
||||
160,
|
||||
160,
|
||||
160,
|
||||
180,
|
||||
180,
|
||||
180,
|
||||
180,
|
||||
200,
|
||||
200
|
||||
],
|
||||
"reward": [
|
||||
{
|
||||
"point": 500,
|
||||
"reward_category_a": 21,
|
||||
"reward_type_a": 496,
|
||||
"reward_category_b": 0,
|
||||
"reward_type_b": 0
|
||||
},
|
||||
{
|
||||
"point": 1000,
|
||||
"reward_category_a": 21,
|
||||
"reward_type_a": 497,
|
||||
"reward_category_b": 0,
|
||||
"reward_type_b": 0
|
||||
},
|
||||
{
|
||||
"point": 1500,
|
||||
"reward_category_a": 18,
|
||||
"reward_type_a": 117,
|
||||
"reward_category_b": 0,
|
||||
"reward_type_b": 0
|
||||
}
|
||||
]
|
||||
}
|
59
titles/idac/data/timetrial/touhou_remilia_scarlet.json
Normal file
59
titles/idac/data/timetrial/touhou_remilia_scarlet.json
Normal file
@ -0,0 +1,59 @@
|
||||
{
|
||||
"timetrial_event_id": 4,
|
||||
"name": "レミリア・スカーレット",
|
||||
"start_dt": "2023-10-01",
|
||||
"end_dt": "2029-01-01",
|
||||
"course_id": 22,
|
||||
"point": [
|
||||
50,
|
||||
80,
|
||||
80,
|
||||
80,
|
||||
80,
|
||||
100,
|
||||
100,
|
||||
100,
|
||||
100,
|
||||
120,
|
||||
120,
|
||||
120,
|
||||
120,
|
||||
140,
|
||||
140,
|
||||
140,
|
||||
140,
|
||||
160,
|
||||
160,
|
||||
160,
|
||||
160,
|
||||
180,
|
||||
180,
|
||||
180,
|
||||
180,
|
||||
200,
|
||||
200
|
||||
],
|
||||
"reward": [
|
||||
{
|
||||
"point": 500,
|
||||
"reward_category_a": 21,
|
||||
"reward_type_a": 492,
|
||||
"reward_category_b": 0,
|
||||
"reward_type_b": 0
|
||||
},
|
||||
{
|
||||
"point": 1000,
|
||||
"reward_category_a": 21,
|
||||
"reward_type_a": 493,
|
||||
"reward_category_b": 0,
|
||||
"reward_type_b": 0
|
||||
},
|
||||
{
|
||||
"point": 1500,
|
||||
"reward_category_a": 18,
|
||||
"reward_type_a": 116,
|
||||
"reward_category_b": 0,
|
||||
"reward_type_b": 0
|
||||
}
|
||||
]
|
||||
}
|
59
titles/idac/data/timetrial/touhou_sakuya_izayoi.json
Normal file
59
titles/idac/data/timetrial/touhou_sakuya_izayoi.json
Normal file
@ -0,0 +1,59 @@
|
||||
{
|
||||
"timetrial_event_id": 6,
|
||||
"name": "十六夜咲夜",
|
||||
"start_dt": "2023-10-01",
|
||||
"end_dt": "2029-01-01",
|
||||
"course_id": 14,
|
||||
"point": [
|
||||
50,
|
||||
80,
|
||||
80,
|
||||
80,
|
||||
80,
|
||||
100,
|
||||
100,
|
||||
100,
|
||||
100,
|
||||
120,
|
||||
120,
|
||||
120,
|
||||
120,
|
||||
140,
|
||||
140,
|
||||
140,
|
||||
140,
|
||||
160,
|
||||
160,
|
||||
160,
|
||||
160,
|
||||
180,
|
||||
180,
|
||||
180,
|
||||
180,
|
||||
200,
|
||||
200
|
||||
],
|
||||
"reward": [
|
||||
{
|
||||
"point": 500,
|
||||
"reward_category_a": 21,
|
||||
"reward_type_a": 488,
|
||||
"reward_category_b": 0,
|
||||
"reward_type_b": 0
|
||||
},
|
||||
{
|
||||
"point": 1000,
|
||||
"reward_category_a": 21,
|
||||
"reward_type_a": 489,
|
||||
"reward_category_b": 0,
|
||||
"reward_type_b": 0
|
||||
},
|
||||
{
|
||||
"point": 1500,
|
||||
"reward_category_a": 18,
|
||||
"reward_type_a": 115,
|
||||
"reward_category_b": 0,
|
||||
"reward_type_b": 0
|
||||
}
|
||||
]
|
||||
}
|
12
titles/idac/database.py
Normal file
12
titles/idac/database.py
Normal file
@ -0,0 +1,12 @@
|
||||
from core.data import Data
|
||||
from core.config import CoreConfig
|
||||
from titles.idac.schema.profile import IDACProfileData
|
||||
from titles.idac.schema.item import IDACItemData
|
||||
|
||||
|
||||
class IDACData(Data):
|
||||
def __init__(self, cfg: CoreConfig) -> None:
|
||||
super().__init__(cfg)
|
||||
|
||||
self.profile = IDACProfileData(cfg, self.session)
|
||||
self.item = IDACItemData(cfg, self.session)
|
63
titles/idac/echo.py
Normal file
63
titles/idac/echo.py
Normal file
@ -0,0 +1,63 @@
|
||||
import logging
|
||||
import socket
|
||||
|
||||
from twisted.internet.protocol import DatagramProtocol
|
||||
from socketserver import BaseRequestHandler, TCPServer
|
||||
from typing import Tuple
|
||||
|
||||
from core.config import CoreConfig
|
||||
from titles.idac.config import IDACConfig
|
||||
from titles.idac.database import IDACData
|
||||
|
||||
|
||||
class IDACEchoUDP(DatagramProtocol):
|
||||
def __init__(self, cfg: CoreConfig, game_cfg: IDACConfig, port: int) -> None:
|
||||
super().__init__()
|
||||
self.port = port
|
||||
self.core_config = cfg
|
||||
self.game_config = game_cfg
|
||||
self.logger = logging.getLogger("idac")
|
||||
|
||||
def datagramReceived(self, data, addr):
|
||||
self.logger.info(
|
||||
f"UDP Ping from from {addr[0]}:{addr[1]} -> {self.port} - {data.hex()}"
|
||||
)
|
||||
self.transport.write(data, addr)
|
||||
|
||||
|
||||
class IDACEchoTCP(BaseRequestHandler):
|
||||
def __init__(
|
||||
self, request, client_address, server, cfg: CoreConfig, game_cfg: IDACConfig
|
||||
) -> None:
|
||||
self.core_config = cfg
|
||||
self.game_config = game_cfg
|
||||
self.logger = logging.getLogger("idac")
|
||||
self.data = IDACData(cfg)
|
||||
super().__init__(request, client_address, server)
|
||||
|
||||
def handle(self):
|
||||
data = self.request.recv(1024).strip()
|
||||
self.logger.debug(
|
||||
f"TCP Ping from {self.client_address[0]}:{self.client_address[1]} -> {self.server.server_address[1]}: {data.hex()}"
|
||||
)
|
||||
self.request.sendall(data)
|
||||
self.request.shutdown(socket.SHUT_WR)
|
||||
|
||||
|
||||
class IDACEchoTCPFactory(TCPServer):
|
||||
def __init__(
|
||||
self,
|
||||
server_address: Tuple[str, int],
|
||||
RequestHandlerClass,
|
||||
cfg: CoreConfig,
|
||||
game_cfg: IDACConfig,
|
||||
bind_and_activate: bool = ...,
|
||||
) -> None:
|
||||
super().__init__(server_address, RequestHandlerClass, bind_and_activate)
|
||||
self.core_config = cfg
|
||||
self.game_config = game_cfg
|
||||
|
||||
def finish_request(self, request, client_address):
|
||||
self.RequestHandlerClass(
|
||||
request, client_address, self, self.core_config, self.game_config
|
||||
)
|
142
titles/idac/frontend.py
Normal file
142
titles/idac/frontend.py
Normal file
@ -0,0 +1,142 @@
|
||||
import json
|
||||
import yaml
|
||||
import jinja2
|
||||
from os import path
|
||||
from twisted.web.util import redirectTo
|
||||
from twisted.web.http import Request
|
||||
from twisted.web.server import Session
|
||||
|
||||
from core.frontend import FE_Base, IUserSession
|
||||
from core.config import CoreConfig
|
||||
from titles.idac.database import IDACData
|
||||
from titles.idac.schema.profile import *
|
||||
from titles.idac.schema.item import *
|
||||
from titles.idac.config import IDACConfig
|
||||
from titles.idac.const import IDACConstants
|
||||
|
||||
|
||||
class IDACFrontend(FE_Base):
|
||||
def __init__(
|
||||
self, cfg: CoreConfig, environment: jinja2.Environment, cfg_dir: str
|
||||
) -> None:
|
||||
super().__init__(cfg, environment)
|
||||
self.data = IDACData(cfg)
|
||||
self.game_cfg = IDACConfig()
|
||||
if path.exists(f"{cfg_dir}/{IDACConstants.CONFIG_NAME}"):
|
||||
self.game_cfg.update(
|
||||
yaml.safe_load(open(f"{cfg_dir}/{IDACConstants.CONFIG_NAME}"))
|
||||
)
|
||||
self.nav_name = "頭文字D THE ARCADE"
|
||||
# TODO: Add version list
|
||||
self.version = IDACConstants.VER_IDAC_SEASON_2
|
||||
|
||||
self.ticket_names = {
|
||||
3: "car_dressup_points",
|
||||
5: "avatar_points",
|
||||
25: "full_tune_tickets",
|
||||
34: "full_tune_fragments",
|
||||
}
|
||||
|
||||
def generate_all_tables_json(self, user_id: int):
|
||||
json_export = {}
|
||||
|
||||
idac_tables = {
|
||||
profile,
|
||||
config,
|
||||
avatar,
|
||||
rank,
|
||||
stock,
|
||||
theory,
|
||||
car,
|
||||
ticket,
|
||||
story,
|
||||
episode,
|
||||
difficulty,
|
||||
course,
|
||||
trial,
|
||||
challenge,
|
||||
theory_course,
|
||||
theory_partner,
|
||||
theory_running,
|
||||
vs_info,
|
||||
stamp,
|
||||
timetrial_event
|
||||
}
|
||||
|
||||
for table in idac_tables:
|
||||
sql = select(table).where(
|
||||
table.c.user == user_id,
|
||||
)
|
||||
|
||||
# check if the table has a version column
|
||||
if "version" in table.c:
|
||||
sql = sql.where(table.c.version == self.version)
|
||||
|
||||
# lol use the profile connection for items, dirty hack
|
||||
result = self.data.profile.execute(sql)
|
||||
data_list = result.fetchall()
|
||||
|
||||
# add the list to the json export with the correct table name
|
||||
json_export[table.name] = []
|
||||
for data in data_list:
|
||||
tmp = data._asdict()
|
||||
tmp.pop("id")
|
||||
tmp.pop("user")
|
||||
json_export[table.name].append(tmp)
|
||||
|
||||
return json.dumps(json_export, indent=4, default=str, ensure_ascii=False)
|
||||
|
||||
def render_GET(self, request: Request) -> bytes:
|
||||
uri: str = request.uri.decode()
|
||||
|
||||
template = self.environment.get_template(
|
||||
"titles/idac/frontend/idac_index.jinja"
|
||||
)
|
||||
sesh: Session = request.getSession()
|
||||
usr_sesh = IUserSession(sesh)
|
||||
user_id = usr_sesh.userId
|
||||
# user_id = usr_sesh.user_id
|
||||
|
||||
# profile export
|
||||
if uri.startswith("/game/idac/export"):
|
||||
if user_id == 0:
|
||||
return redirectTo(b"/game/idac", request)
|
||||
|
||||
# set the file name, content type and size to download the json
|
||||
content = self.generate_all_tables_json(user_id).encode("utf-8")
|
||||
request.responseHeaders.addRawHeader(
|
||||
b"content-type", b"application/octet-stream"
|
||||
)
|
||||
request.responseHeaders.addRawHeader(
|
||||
b"content-disposition", b"attachment; filename=idac_profile.json"
|
||||
)
|
||||
request.responseHeaders.addRawHeader(
|
||||
b"content-length", str(len(content)).encode("utf-8")
|
||||
)
|
||||
|
||||
self.logger.info(f"User {user_id} exported their IDAC data")
|
||||
return content
|
||||
|
||||
profile_data, tickets, rank = None, None, None
|
||||
if user_id > 0:
|
||||
profile_data = self.data.profile.get_profile(user_id, self.version)
|
||||
ticket_data = self.data.item.get_tickets(user_id)
|
||||
rank = self.data.profile.get_profile_rank(user_id, self.version)
|
||||
|
||||
tickets = {
|
||||
self.ticket_names[ticket["ticket_id"]]: ticket["ticket_cnt"]
|
||||
for ticket in ticket_data
|
||||
}
|
||||
|
||||
return template.render(
|
||||
title=f"{self.core_config.server.name} | {self.nav_name}",
|
||||
game_list=self.environment.globals["game_list"],
|
||||
profile=profile_data,
|
||||
tickets=tickets,
|
||||
rank=rank,
|
||||
sesh=vars(usr_sesh),
|
||||
active_page="idac",
|
||||
).encode("utf-16")
|
||||
|
||||
def render_POST(self, request: Request) -> bytes:
|
||||
pass
|
134
titles/idac/frontend/idac_index.jinja
Normal file
134
titles/idac/frontend/idac_index.jinja
Normal file
@ -0,0 +1,134 @@
|
||||
{% extends "core/frontend/index.jinja" %}
|
||||
{% block content %}
|
||||
<h1 class="mb-3">頭文字D THE ARCADE</h1>
|
||||
|
||||
{% if sesh is defined and sesh["userId"] > 0 %}
|
||||
<div class="card mb-3">
|
||||
<div class="card-body">
|
||||
<div class="card-title">
|
||||
<div class="d-flex justify-content-between flex-wrap flex-md-nowrap align-items-center">
|
||||
<h3>{{ sesh["username"] }}'s Profile</h3>
|
||||
<div class="btn-toolbar mb-2 mb-md-0">
|
||||
<div class="btn-group me-2">
|
||||
<!--<button type="button" class="btn btn-sm btn-outline-secondary">Share</button>-->
|
||||
<button type="button" data-bs-toggle="modal" data-bs-target="#export"
|
||||
class="btn btn-sm btn-outline-primary">Export</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!--<h4 class="card-subtitle mb-2 text-body-secondary">Card subtitle</h4>-->
|
||||
{% if profile is defined and profile is not none %}
|
||||
<div class="row d-flex justify-content-center h-100">
|
||||
<div class="col col-lg-3 col-12">
|
||||
<div class="card mb-3">
|
||||
<div class="card-body p-4">
|
||||
<h5>Information</h5>
|
||||
<hr class="mt-0 mb-4">
|
||||
<h6>Username</h6>
|
||||
<p class="text-muted">{{ profile.username }}</p>
|
||||
<h6>Cash</h6>
|
||||
<p class="text-muted">{{ profile.cash }} D</p>
|
||||
<h6>Grade</h6>
|
||||
<h4>
|
||||
{% set grade = rank.grade %}
|
||||
{% if grade >= 1 and grade <= 72 %}
|
||||
{% set grade_number = (grade - 1) // 9 %}
|
||||
{% set grade_letters = ['E', 'D', 'C', 'B', 'A', 'S', 'SS', 'X'] %}
|
||||
{{ grade_letters[grade_number] }}{{ 9 - ((grade-1) % 9) }}
|
||||
{% else %}
|
||||
Unknown
|
||||
{% endif %}
|
||||
</h4>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col col-lg-9 col-12">
|
||||
<div class="card mb-3">
|
||||
|
||||
<div class="card-body p-4">
|
||||
<h5>Statistics</h5>
|
||||
<hr class="mt-0 mb-4">
|
||||
<div class="row pt-1">
|
||||
<div class="col-lg-4 col-md-6 mb-3">
|
||||
<h6>Total Plays</h6>
|
||||
<p class="text-muted">{{ profile.total_play }}</p>
|
||||
</div>
|
||||
<div class="col-lg-4 col-md-6 mb-3">
|
||||
<h6>Last Played</h6>
|
||||
<p class="text-muted">{{ profile.last_play_date }}</p>
|
||||
</div>
|
||||
<div class="col-lg-4 col-md-6 mb-3">
|
||||
<h6>Mileage</h6>
|
||||
<p class="text-muted">{{ profile.mileage / 1000}} km</p>
|
||||
</div>
|
||||
</div>
|
||||
{% if tickets is defined and tickets|length > 0 %}
|
||||
<h5>Tokens/Tickets</h5>
|
||||
<hr class="mt-0 mb-4">
|
||||
<div class="row pt-1">
|
||||
<div class="col-lg-3 col-md-6 mb-3">
|
||||
<h6>Avatar Tokens</h6>
|
||||
<p class="text-muted">{{ tickets.avatar_points }}/30</p>
|
||||
</div>
|
||||
<div class="col-lg-3 col-md-6 mb-3">
|
||||
<h6>Car Dressup Tokens</h6>
|
||||
<p class="text-muted">{{ tickets.car_dressup_points }}/30</p>
|
||||
</div>
|
||||
<div class="col-lg-3 col-md-6 mb-3">
|
||||
<h6>FullTune Tickets</h6>
|
||||
<p class="text-muted">{{ tickets.full_tune_tickets }}/99</p>
|
||||
</div>
|
||||
<div class="col-lg-3 col-md-6 mb-3">
|
||||
<h6>FullTune Fragments</h6>
|
||||
<p class="text-muted">{{ tickets.full_tune_fragments }}/10</p>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% else %}
|
||||
<div class="alert alert-warning" role="alert">
|
||||
You need to play 頭文字D THE ARCADE first to view your profile.
|
||||
</div>
|
||||
{% endif %}
|
||||
<!--<a href="#" data-bs-toggle="modal" data-bs-target="#card-add" class="card-link">Add Card</a>-->
|
||||
</div>
|
||||
</div>
|
||||
{% else %}
|
||||
<div class="alert alert-info" role="alert">
|
||||
You need to be logged in to view this page. <a href="/gate">Login</a></a>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
<div class="modal fade" id="export" tabindex="-1" aria-labelledby="export-label" aria-hidden="true">
|
||||
<div class="modal-dialog">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h1 class="modal-title fs-5" id="exort-label">Export Profile</h1>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
Download your profile as a <strong>.json</strong> file in order to import it into your local ARTEMiS
|
||||
database.
|
||||
<div class="alert alert-warning mt-3" role="alert">
|
||||
{% if profile is defined and profile is not none %}
|
||||
Are you sure you want to export your profile with the username {{ profile.username }}?
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
|
||||
<button type="button" class="btn btn-primary" id="exportBtn">Download Profile</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script type="text/javascript">
|
||||
{% include "titles/idac/frontend/js/idac_scripts.js" %}
|
||||
</script>
|
||||
|
||||
{% endblock content %}
|
10
titles/idac/frontend/js/idac_scripts.js
Normal file
10
titles/idac/frontend/js/idac_scripts.js
Normal file
@ -0,0 +1,10 @@
|
||||
$(document).ready(function () {
|
||||
$('#exportBtn').click(function () {
|
||||
window.location = "/game/idac/export";
|
||||
|
||||
// appendAlert('Successfully exported the profile', 'success');
|
||||
|
||||
// Close the modal on success
|
||||
$('#export').modal('hide');
|
||||
});
|
||||
});
|
167
titles/idac/index.py
Normal file
167
titles/idac/index.py
Normal file
@ -0,0 +1,167 @@
|
||||
import json
|
||||
import traceback
|
||||
import inflection
|
||||
import yaml
|
||||
import logging
|
||||
import coloredlogs
|
||||
|
||||
from os import path
|
||||
from typing import Dict, List, Tuple
|
||||
from logging.handlers import TimedRotatingFileHandler
|
||||
from twisted.web import server
|
||||
from twisted.web.http import Request
|
||||
from twisted.internet import reactor, endpoints
|
||||
|
||||
from core.config import CoreConfig
|
||||
from core.utils import Utils
|
||||
from titles.idac.base import IDACBase
|
||||
from titles.idac.season2 import IDACSeason2
|
||||
from titles.idac.config import IDACConfig
|
||||
from titles.idac.const import IDACConstants
|
||||
from titles.idac.echo import IDACEchoUDP
|
||||
from titles.idac.matching import IDACMatching
|
||||
|
||||
|
||||
class IDACServlet:
|
||||
def __init__(self, core_cfg: CoreConfig, cfg_dir: str) -> None:
|
||||
self.core_cfg = core_cfg
|
||||
self.game_cfg = IDACConfig()
|
||||
if path.exists(f"{cfg_dir}/{IDACConstants.CONFIG_NAME}"):
|
||||
self.game_cfg.update(
|
||||
yaml.safe_load(open(f"{cfg_dir}/{IDACConstants.CONFIG_NAME}"))
|
||||
)
|
||||
|
||||
self.versions = [
|
||||
IDACBase(core_cfg, self.game_cfg),
|
||||
IDACSeason2(core_cfg, self.game_cfg)
|
||||
]
|
||||
|
||||
self.logger = logging.getLogger("idac")
|
||||
log_fmt_str = "[%(asctime)s] IDAC | %(levelname)s | %(message)s"
|
||||
log_fmt = logging.Formatter(log_fmt_str)
|
||||
fileHandler = TimedRotatingFileHandler(
|
||||
"{0}/{1}.log".format(self.core_cfg.server.log_dir, "idac"),
|
||||
encoding="utf8",
|
||||
when="d",
|
||||
backupCount=10,
|
||||
)
|
||||
|
||||
fileHandler.setFormatter(log_fmt)
|
||||
|
||||
consoleHandler = logging.StreamHandler()
|
||||
consoleHandler.setFormatter(log_fmt)
|
||||
|
||||
self.logger.addHandler(fileHandler)
|
||||
self.logger.addHandler(consoleHandler)
|
||||
|
||||
self.logger.setLevel(self.game_cfg.server.loglevel)
|
||||
coloredlogs.install(
|
||||
level=self.game_cfg.server.loglevel, logger=self.logger, fmt=log_fmt_str
|
||||
)
|
||||
|
||||
@classmethod
|
||||
def is_game_enabled(cls, game_code: str, core_cfg: CoreConfig, cfg_dir: str) -> bool:
|
||||
game_cfg = IDACConfig()
|
||||
|
||||
if path.exists(f"{cfg_dir}/{IDACConstants.CONFIG_NAME}"):
|
||||
game_cfg.update(
|
||||
yaml.safe_load(open(f"{cfg_dir}/{IDACConstants.CONFIG_NAME}"))
|
||||
)
|
||||
|
||||
if not game_cfg.server.enable:
|
||||
return False
|
||||
|
||||
return True
|
||||
|
||||
def get_endpoint_matchers(self) -> Tuple[List[Tuple[str, str, Dict]], List[Tuple[str, str, Dict]]]:
|
||||
return (
|
||||
[],
|
||||
[("render_POST", "/SDGT/{version}/initiald/{category}/{endpoint}", {})]
|
||||
)
|
||||
|
||||
def get_allnet_info(
|
||||
self, game_code: str, game_ver: int, keychip: str
|
||||
) -> Tuple[bool, str, str]:
|
||||
title_port_int = Utils.get_title_port(self.core_cfg)
|
||||
t_port = f":{title_port_int}" if title_port_int and not self.core_cfg.server.is_using_proxy else ""
|
||||
|
||||
return (
|
||||
f"",
|
||||
# requires http or else it defaults to https
|
||||
f"http://{self.core_cfg.title.hostname}{t_port}/{game_code}/{game_ver}/",
|
||||
)
|
||||
|
||||
def render_POST(self, request: Request, game_code: int, matchers: Dict) -> bytes:
|
||||
req_raw = request.content.getvalue()
|
||||
internal_ver = 0
|
||||
version = int(matchers['version'])
|
||||
category = matchers['category']
|
||||
endpoint = matchers['endpoint']
|
||||
client_ip = Utils.get_ip_addr(request)
|
||||
|
||||
if version >= 100 and version < 140: # IDAC Season 1
|
||||
internal_ver = IDACConstants.VER_IDAC_SEASON_1
|
||||
elif version >= 140 and version < 171: # IDAC Season 2
|
||||
internal_ver = IDACConstants.VER_IDAC_SEASON_2
|
||||
|
||||
header_application = self.decode_header(request.getAllHeaders())
|
||||
|
||||
req_data = json.loads(req_raw)
|
||||
|
||||
self.logger.info(f"v{version} {endpoint} request from {client_ip}")
|
||||
self.logger.debug(f"Headers: {header_application}")
|
||||
self.logger.debug(req_data)
|
||||
|
||||
# func_to_find = "handle_" + inflection.underscore(endpoint) + "_request"
|
||||
func_to_find = "handle_"
|
||||
func_to_find += f"{category.lower()}_" if not category == "" else ""
|
||||
func_to_find += f"{endpoint.lower()}_request"
|
||||
|
||||
if not hasattr(self.versions[internal_ver], func_to_find):
|
||||
self.logger.warning(f"Unhandled v{version} request {endpoint}")
|
||||
return '{"status_code": "0"}'.encode("utf-8")
|
||||
|
||||
resp = None
|
||||
try:
|
||||
handler = getattr(self.versions[internal_ver], func_to_find)
|
||||
resp = handler(req_data, header_application)
|
||||
|
||||
except Exception as e:
|
||||
traceback.print_exc()
|
||||
self.logger.error(f"Error handling v{version} method {endpoint} - {e}")
|
||||
return '{"status_code": "0"}'.encode("utf-8")
|
||||
|
||||
if resp is None:
|
||||
resp = {"status_code": "0"}
|
||||
|
||||
self.logger.debug(f"Response {resp}")
|
||||
return json.dumps(resp, ensure_ascii=False).encode("utf-8")
|
||||
|
||||
|
||||
def decode_header(self, data: Dict) -> Dict:
|
||||
app: str = data[b"application"].decode()
|
||||
ret = {}
|
||||
|
||||
for x in app.split(", "):
|
||||
y = x.split("=")
|
||||
ret[y[0]] = y[1].replace('"', "")
|
||||
|
||||
return ret
|
||||
|
||||
def setup(self):
|
||||
if self.game_cfg.server.enable:
|
||||
endpoints.serverFromString(
|
||||
reactor,
|
||||
f"tcp:{self.game_cfg.server.matching}:interface={self.core_cfg.server.listen_address}",
|
||||
).listen(server.Site(IDACMatching(self.core_cfg, self.game_cfg)))
|
||||
|
||||
reactor.listenUDP(
|
||||
self.game_cfg.server.echo1,
|
||||
IDACEchoUDP(self.core_cfg, self.game_cfg, self.game_cfg.server.echo1),
|
||||
)
|
||||
reactor.listenUDP(
|
||||
self.game_cfg.server.echo2,
|
||||
IDACEchoUDP(self.core_cfg, self.game_cfg, self.game_cfg.server.echo2),
|
||||
)
|
||||
|
||||
self.logger.info(f"Matching listening on {self.game_cfg.server.matching} with echos on {self.game_cfg.server.echo1} and {self.game_cfg.server.echo2}")
|
72
titles/idac/matching.py
Normal file
72
titles/idac/matching.py
Normal file
@ -0,0 +1,72 @@
|
||||
import json
|
||||
import logging
|
||||
|
||||
from typing import Dict
|
||||
from twisted.web import resource
|
||||
|
||||
from core import CoreConfig
|
||||
from titles.idac.season2 import IDACBase
|
||||
from titles.idac.config import IDACConfig
|
||||
|
||||
|
||||
class IDACMatching(resource.Resource):
|
||||
isLeaf = True
|
||||
|
||||
def __init__(self, cfg: CoreConfig, game_cfg: IDACConfig) -> None:
|
||||
self.core_config = cfg
|
||||
self.game_config = game_cfg
|
||||
self.base = IDACBase(cfg, game_cfg)
|
||||
self.logger = logging.getLogger("idac")
|
||||
|
||||
self.queue = 0
|
||||
|
||||
def get_matching_state(self):
|
||||
if self.queue >= 1:
|
||||
self.queue -= 1
|
||||
return 0
|
||||
else:
|
||||
return 1
|
||||
|
||||
def render_POST(self, req) -> bytes:
|
||||
url = req.uri.decode()
|
||||
req_data = json.loads(req.content.getvalue().decode())
|
||||
header_application = self.decode_header(req.getAllHeaders())
|
||||
user_id = int(header_application["session"])
|
||||
|
||||
# self.getMatchingStatus(user_id)
|
||||
|
||||
self.logger.info(
|
||||
f"IDAC Matching request from {req.getClientIP()}: {url} - {req_data}"
|
||||
)
|
||||
|
||||
resp = {"status_code": "0"}
|
||||
if url == "/regist":
|
||||
self.queue = self.queue + 1
|
||||
elif url == "/status":
|
||||
if req_data.get("cancel_flag"):
|
||||
self.queue = self.queue - 1
|
||||
self.logger.info(
|
||||
f"IDAC Matching endpoint {req.getClientIP()} had quited"
|
||||
)
|
||||
|
||||
resp = {
|
||||
"status_code": "0",
|
||||
# Only IPv4 is supported
|
||||
"host": self.game_config.server.matching_host,
|
||||
"port": self.game_config.server.matching_p2p,
|
||||
"room_name": "INDTA",
|
||||
"state": 1,
|
||||
}
|
||||
|
||||
self.logger.debug(f"Response {resp}")
|
||||
return json.dumps(resp, ensure_ascii=False).encode("utf-8")
|
||||
|
||||
def decode_header(self, data: Dict) -> Dict:
|
||||
app: str = data[b"application"].decode()
|
||||
ret = {}
|
||||
|
||||
for x in app.split(", "):
|
||||
y = x.split("=")
|
||||
ret[y[0]] = y[1].replace('"', "")
|
||||
|
||||
return ret
|
161
titles/idac/read.py
Normal file
161
titles/idac/read.py
Normal file
@ -0,0 +1,161 @@
|
||||
import json
|
||||
import logging
|
||||
import os
|
||||
from typing import Any, Dict, List, Optional
|
||||
|
||||
from read import BaseReader
|
||||
from core.data import Data
|
||||
from core.config import CoreConfig
|
||||
from titles.idac.const import IDACConstants
|
||||
from titles.idac.database import IDACData
|
||||
from titles.idac.schema.profile import *
|
||||
from titles.idac.schema.item import *
|
||||
|
||||
|
||||
class IDACReader(BaseReader):
|
||||
def __init__(
|
||||
self,
|
||||
config: CoreConfig,
|
||||
version: int,
|
||||
bin_dir: Optional[str],
|
||||
opt_dir: Optional[str],
|
||||
extra: Optional[str],
|
||||
) -> None:
|
||||
super().__init__(config, version, bin_dir, opt_dir, extra)
|
||||
self.card_data = Data(config).card
|
||||
self.data = IDACData(config)
|
||||
|
||||
try:
|
||||
self.logger.info(
|
||||
f"Start importer for {IDACConstants.game_ver_to_string(version)}"
|
||||
)
|
||||
except IndexError:
|
||||
self.logger.error(f"Invalid Initial D THE ARCADE version {version}")
|
||||
exit(1)
|
||||
|
||||
def read(self) -> None:
|
||||
if self.bin_dir is None and self.opt_dir is None:
|
||||
self.logger.error(
|
||||
(
|
||||
"To import your profile specify the '--optfolder'",
|
||||
" path to your idac_profile.json file, exiting",
|
||||
)
|
||||
)
|
||||
exit(1)
|
||||
|
||||
if self.opt_dir is not None:
|
||||
if not os.path.exists(self.opt_dir):
|
||||
self.logger.error(
|
||||
f"Path to idac_profile.json does not exist: {self.opt_dir}"
|
||||
)
|
||||
exit(1)
|
||||
|
||||
if os.path.isdir(self.opt_dir):
|
||||
self.opt_dir = os.path.join(self.opt_dir, "idac_profile.json")
|
||||
|
||||
if not os.path.isfile(self.opt_dir) or self.opt_dir[-5:] != ".json":
|
||||
self.logger.error(
|
||||
f"Path to idac_profile.json does not exist: {self.opt_dir}"
|
||||
)
|
||||
exit(1)
|
||||
|
||||
self.read_idac_profile(self.opt_dir)
|
||||
|
||||
def read_idac_profile(self, file_path: str) -> None:
|
||||
self.logger.info(f"Reading profile from {file_path}...")
|
||||
|
||||
# read it as binary to avoid encoding issues
|
||||
profile_data: Dict[str, Any] = {}
|
||||
with open(file_path, "rb") as f:
|
||||
profile_data = json.loads(f.read().decode("utf-8"))
|
||||
|
||||
if not profile_data:
|
||||
self.logger.error("Profile could not be parsed, exiting")
|
||||
exit(1)
|
||||
|
||||
access_code = None
|
||||
while access_code is None:
|
||||
access_code = input("Enter your 20 digits access code: ")
|
||||
if len(access_code) != 20 or not access_code.isdigit():
|
||||
access_code = None
|
||||
self.logger.warning("Invalid access code, please try again.")
|
||||
|
||||
# check if access code already exists, if not create a new profile
|
||||
user_id = self.card_data.get_user_id_from_card(access_code)
|
||||
if user_id is None:
|
||||
choice = input("Access code does not exist, do you want to create a new profile? (Y/n): ")
|
||||
if choice.lower() == "n":
|
||||
self.logger.info("Exiting...")
|
||||
exit(0)
|
||||
|
||||
user_id = self.data.user.create_user()
|
||||
|
||||
if user_id is None:
|
||||
self.logger.error("Failed to register user!")
|
||||
user_id = -1
|
||||
|
||||
else:
|
||||
card_id = self.data.card.create_card(user_id, access_code)
|
||||
|
||||
if card_id is None:
|
||||
self.logger.error("Failed to register card!")
|
||||
user_id = -1
|
||||
|
||||
if user_id == -1:
|
||||
self.logger.error("Failed to create profile, exiting")
|
||||
exit(1)
|
||||
|
||||
# table mapping to insert the data properly
|
||||
tables = {
|
||||
"idac_profile": profile,
|
||||
"idac_profile_config": config,
|
||||
"idac_profile_avatar": avatar,
|
||||
"idac_profile_rank": rank,
|
||||
"idac_profile_stock": stock,
|
||||
"idac_profile_theory": theory,
|
||||
"idac_user_car": car,
|
||||
"idac_user_ticket": ticket,
|
||||
"idac_user_story": story,
|
||||
"idac_user_story_episode": episode,
|
||||
"idac_user_story_episode_difficulty": difficulty,
|
||||
"idac_user_course": course,
|
||||
"idac_user_time_trial": trial,
|
||||
"idac_user_challenge": challenge,
|
||||
"idac_user_theory_course": theory_course,
|
||||
"idac_user_theory_partner": theory_partner,
|
||||
"idac_user_theory_running": theory_running,
|
||||
"idac_user_vs_info": vs_info,
|
||||
"idac_user_stamp": stamp,
|
||||
"idac_user_timetrial_event": timetrial_event,
|
||||
}
|
||||
|
||||
for name, data_list in profile_data.items():
|
||||
# get the SQLAlchemy table object from the name
|
||||
table = tables.get(name)
|
||||
if table is None:
|
||||
self.logger.warning(f"Unknown table {name}, skipping")
|
||||
continue
|
||||
|
||||
for data in data_list:
|
||||
# add user to the data
|
||||
data["user"] = user_id
|
||||
|
||||
# check if the table has a version column
|
||||
if "version" in table.c:
|
||||
data["version"] = self.version
|
||||
|
||||
sql = insert(table).values(
|
||||
**data
|
||||
)
|
||||
|
||||
# lol use the profile connection for items, dirty hack
|
||||
conflict = sql.on_duplicate_key_update(**data)
|
||||
result = self.data.profile.execute(conflict)
|
||||
|
||||
if result is None:
|
||||
self.logger.error(f"Failed to insert data into table {name}")
|
||||
exit(1)
|
||||
|
||||
self.logger.info(f"Inserted data into table {name}")
|
||||
|
||||
self.logger.info("Profile import complete!")
|
983
titles/idac/schema/item.py
Normal file
983
titles/idac/schema/item.py
Normal file
@ -0,0 +1,983 @@
|
||||
from typing import Dict, Optional, List
|
||||
from sqlalchemy import (
|
||||
Table,
|
||||
Column,
|
||||
UniqueConstraint,
|
||||
PrimaryKeyConstraint,
|
||||
and_,
|
||||
update,
|
||||
)
|
||||
from sqlalchemy.types import Integer, String, TIMESTAMP, Boolean, JSON
|
||||
from sqlalchemy.schema import ForeignKey
|
||||
from sqlalchemy.engine import Row
|
||||
from sqlalchemy.sql import func, select
|
||||
from sqlalchemy.dialects.mysql import insert
|
||||
|
||||
from core.data.schema import BaseData, metadata
|
||||
|
||||
car = Table(
|
||||
"idac_user_car",
|
||||
metadata,
|
||||
Column("id", Integer, primary_key=True, nullable=False),
|
||||
Column("user", ForeignKey("aime_user.id", ondelete="cascade", onupdate="cascade")),
|
||||
Column("version", Integer, nullable=False),
|
||||
Column("car_id", Integer),
|
||||
Column("style_car_id", Integer),
|
||||
Column("color", Integer),
|
||||
Column("bureau", Integer),
|
||||
Column("kana", Integer),
|
||||
Column("s_no", Integer),
|
||||
Column("l_no", Integer),
|
||||
Column("car_flag", Integer),
|
||||
Column("tune_point", Integer),
|
||||
Column("tune_level", Integer, server_default="1"),
|
||||
Column("tune_parts", Integer),
|
||||
Column("infinity_tune", Integer, server_default="0"),
|
||||
Column("online_vs_win", Integer, server_default="0"),
|
||||
Column(
|
||||
"pickup_seq", Integer, server_default="1"
|
||||
), # the order in which the car was picked up
|
||||
Column(
|
||||
"purchase_seq", Integer, server_default="1"
|
||||
), # the order in which the car was purchased
|
||||
Column("color_stock_list", String(32)),
|
||||
Column("color_stock_new_list", String(32)),
|
||||
Column("parts_stock_list", String(48)),
|
||||
Column("parts_stock_new_list", String(48)),
|
||||
Column("parts_set_equip_list", String(48)),
|
||||
Column("parts_list", JSON),
|
||||
Column("equip_parts_count", Integer, server_default="0"),
|
||||
Column("total_car_parts_count", Integer, server_default="0"),
|
||||
Column("use_count", Integer, server_default="0"),
|
||||
Column("story_use_count", Integer, server_default="0"),
|
||||
Column("timetrial_use_count", Integer, server_default="0"),
|
||||
Column("vs_use_count", Integer, server_default="0"),
|
||||
Column("net_vs_use_count", Integer, server_default="0"),
|
||||
Column("theory_use_count", Integer, server_default="0"),
|
||||
Column("car_mileage", Integer, server_default="0"),
|
||||
UniqueConstraint("user", "version", "style_car_id", name="idac_user_car_uk"),
|
||||
mysql_charset="utf8mb4",
|
||||
)
|
||||
|
||||
ticket = Table(
|
||||
"idac_user_ticket",
|
||||
metadata,
|
||||
Column("id", Integer, primary_key=True, nullable=False),
|
||||
Column("user", ForeignKey("aime_user.id", ondelete="cascade", onupdate="cascade")),
|
||||
Column("ticket_id", Integer),
|
||||
Column("ticket_cnt", Integer),
|
||||
UniqueConstraint("user", "ticket_id", name="idac_user_ticket_uk"),
|
||||
mysql_charset="utf8mb4",
|
||||
)
|
||||
|
||||
story = Table(
|
||||
"idac_user_story",
|
||||
metadata,
|
||||
Column("id", Integer, primary_key=True, nullable=False),
|
||||
Column("user", ForeignKey("aime_user.id", ondelete="cascade", onupdate="cascade")),
|
||||
Column("story_type", Integer),
|
||||
Column("chapter", Integer),
|
||||
Column("loop_count", Integer, server_default="1"),
|
||||
UniqueConstraint("user", "chapter", name="idac_user_story_uk"),
|
||||
mysql_charset="utf8mb4",
|
||||
)
|
||||
|
||||
episode = Table(
|
||||
"idac_user_story_episode",
|
||||
metadata,
|
||||
Column("id", Integer, primary_key=True, nullable=False),
|
||||
Column("user", ForeignKey("aime_user.id", ondelete="cascade", onupdate="cascade")),
|
||||
Column("chapter", Integer),
|
||||
Column("episode", Integer),
|
||||
Column("play_status", Integer),
|
||||
UniqueConstraint("user", "chapter", "episode", name="idac_user_story_episode_uk"),
|
||||
mysql_charset="utf8mb4",
|
||||
)
|
||||
|
||||
difficulty = Table(
|
||||
"idac_user_story_episode_difficulty",
|
||||
metadata,
|
||||
Column("id", Integer, primary_key=True, nullable=False),
|
||||
Column("user", ForeignKey("aime_user.id", ondelete="cascade", onupdate="cascade")),
|
||||
Column("episode", Integer),
|
||||
Column("difficulty", Integer),
|
||||
Column("play_count", Integer),
|
||||
Column("clear_count", Integer),
|
||||
Column("play_status", Integer),
|
||||
Column("play_score", Integer),
|
||||
UniqueConstraint(
|
||||
"user", "episode", "difficulty", name="idac_user_story_episode_difficulty_uk"
|
||||
),
|
||||
mysql_charset="utf8mb4",
|
||||
)
|
||||
|
||||
course = Table(
|
||||
"idac_user_course",
|
||||
metadata,
|
||||
Column("id", Integer, primary_key=True, nullable=False),
|
||||
Column("user", ForeignKey("aime_user.id", ondelete="cascade", onupdate="cascade")),
|
||||
Column("course_id", Integer),
|
||||
Column("run_counts", Integer, server_default="1"),
|
||||
Column("skill_level_exp", Integer, server_default="0"),
|
||||
UniqueConstraint("user", "course_id", name="idac_user_course_uk"),
|
||||
mysql_charset="utf8mb4",
|
||||
)
|
||||
|
||||
trial = Table(
|
||||
"idac_user_time_trial",
|
||||
metadata,
|
||||
Column("id", Integer, primary_key=True, nullable=False),
|
||||
Column("user", ForeignKey("aime_user.id", ondelete="cascade", onupdate="cascade")),
|
||||
Column("version", Integer, nullable=False),
|
||||
Column("style_car_id", Integer),
|
||||
Column("course_id", Integer),
|
||||
Column("eval_id", Integer, server_default="0"),
|
||||
Column("goal_time", Integer),
|
||||
Column("section_time_1", Integer),
|
||||
Column("section_time_2", Integer),
|
||||
Column("section_time_3", Integer),
|
||||
Column("section_time_4", Integer),
|
||||
Column("mission", Integer),
|
||||
Column("play_dt", TIMESTAMP, server_default=func.now()),
|
||||
UniqueConstraint(
|
||||
"user", "version", "course_id", "style_car_id", name="idac_user_time_trial_uk"
|
||||
),
|
||||
mysql_charset="utf8mb4",
|
||||
)
|
||||
|
||||
challenge = Table(
|
||||
"idac_user_challenge",
|
||||
metadata,
|
||||
Column("id", Integer, primary_key=True, nullable=False),
|
||||
Column("user", ForeignKey("aime_user.id", ondelete="cascade", onupdate="cascade")),
|
||||
Column("vs_type", Integer),
|
||||
Column("play_difficulty", Integer),
|
||||
Column("cleared_difficulty", Integer),
|
||||
Column("story_type", Integer),
|
||||
Column("play_count", Integer, server_default="1"),
|
||||
Column("weak_difficulty", Integer, server_default="0"),
|
||||
Column("eval_id", Integer),
|
||||
Column("advantage", Integer),
|
||||
Column("sec1_advantage_avg", Integer),
|
||||
Column("sec2_advantage_avg", Integer),
|
||||
Column("sec3_advantage_avg", Integer),
|
||||
Column("sec4_advantage_avg", Integer),
|
||||
Column("nearby_advantage_rate", Integer),
|
||||
Column("win_flag", Integer),
|
||||
Column("result", Integer),
|
||||
Column("record", Integer),
|
||||
Column("course_id", Integer),
|
||||
Column("last_play_course_id", Integer),
|
||||
Column("style_car_id", Integer),
|
||||
Column("course_day", Integer),
|
||||
UniqueConstraint(
|
||||
"user", "vs_type", "play_difficulty", name="idac_user_challenge_uk"
|
||||
),
|
||||
mysql_charset="utf8mb4",
|
||||
)
|
||||
|
||||
theory_course = Table(
|
||||
"idac_user_theory_course",
|
||||
metadata,
|
||||
Column("id", Integer, primary_key=True, nullable=False),
|
||||
Column("user", ForeignKey("aime_user.id", ondelete="cascade", onupdate="cascade")),
|
||||
Column("course_id", Integer),
|
||||
Column("max_victory_grade", Integer, server_default="0"),
|
||||
Column("run_count", Integer, server_default="1"),
|
||||
Column("powerhouse_lv", Integer),
|
||||
Column("powerhouse_exp", Integer),
|
||||
Column("played_powerhouse_lv", Integer),
|
||||
Column("update_dt", TIMESTAMP, server_default=func.now()),
|
||||
UniqueConstraint("user", "course_id", name="idac_user_theory_course_uk"),
|
||||
mysql_charset="utf8mb4",
|
||||
)
|
||||
|
||||
theory_partner = Table(
|
||||
"idac_user_theory_partner",
|
||||
metadata,
|
||||
Column("id", Integer, primary_key=True, nullable=False),
|
||||
Column("user", ForeignKey("aime_user.id", ondelete="cascade", onupdate="cascade")),
|
||||
Column("partner_id", Integer),
|
||||
Column("fellowship_lv", Integer),
|
||||
Column("fellowship_exp", Integer),
|
||||
UniqueConstraint("user", "partner_id", name="idac_user_theory_partner_uk"),
|
||||
mysql_charset="utf8mb4",
|
||||
)
|
||||
|
||||
theory_running = Table(
|
||||
"idac_user_theory_running",
|
||||
metadata,
|
||||
Column("id", Integer, primary_key=True, nullable=False),
|
||||
Column("user", ForeignKey("aime_user.id", ondelete="cascade", onupdate="cascade")),
|
||||
Column("course_id", Integer),
|
||||
Column("attack", Integer),
|
||||
Column("defense", Integer),
|
||||
Column("safety", Integer),
|
||||
Column("runaway", Integer),
|
||||
Column("trick_flag", Integer),
|
||||
UniqueConstraint("user", "course_id", name="idac_user_theory_running_uk"),
|
||||
mysql_charset="utf8mb4",
|
||||
)
|
||||
|
||||
vs_info = Table(
|
||||
"idac_user_vs_info",
|
||||
metadata,
|
||||
Column("id", Integer, primary_key=True, nullable=False),
|
||||
Column("user", ForeignKey("aime_user.id", ondelete="cascade", onupdate="cascade")),
|
||||
Column("group_key", String(25)),
|
||||
Column("win_flg", Integer),
|
||||
Column("style_car_id", Integer),
|
||||
Column("course_id", Integer),
|
||||
Column("course_day", Integer),
|
||||
Column("players_num", Integer),
|
||||
Column("winning", Integer),
|
||||
Column("advantage_1", Integer),
|
||||
Column("advantage_2", Integer),
|
||||
Column("advantage_3", Integer),
|
||||
Column("advantage_4", Integer),
|
||||
Column("select_course_id", Integer),
|
||||
Column("select_course_day", Integer),
|
||||
Column("select_course_random", Integer),
|
||||
Column("matching_success_sec", Integer),
|
||||
Column("boost_flag", Integer),
|
||||
Column("vs_history", Integer),
|
||||
Column("break_count", Integer),
|
||||
Column("break_penalty_flag", Integer),
|
||||
UniqueConstraint("user", "group_key", name="idac_user_vs_info_uk"),
|
||||
mysql_charset="utf8mb4",
|
||||
)
|
||||
|
||||
stamp = Table(
|
||||
"idac_user_stamp",
|
||||
metadata,
|
||||
Column("id", Integer, primary_key=True, nullable=False),
|
||||
Column(
|
||||
"user",
|
||||
ForeignKey("aime_user.id", ondelete="cascade", onupdate="cascade"),
|
||||
nullable=False,
|
||||
),
|
||||
Column("m_stamp_event_id", Integer),
|
||||
Column("select_flag", Integer),
|
||||
Column("stamp_masu", Integer),
|
||||
Column("daily_bonus", Integer),
|
||||
Column("weekly_bonus", Integer),
|
||||
Column("weekday_bonus", Integer),
|
||||
Column("weekend_bonus", Integer),
|
||||
Column("total_bonus", Integer),
|
||||
Column("day_total_bonus", Integer),
|
||||
Column("store_battle_bonus", Integer),
|
||||
Column("story_bonus", Integer),
|
||||
Column("online_battle_bonus", Integer),
|
||||
Column("timetrial_bonus", Integer),
|
||||
Column("fasteststreetlegaltheory_bonus", Integer),
|
||||
Column("collaboration_bonus", Integer),
|
||||
Column("add_bonus_daily_flag_1", Integer),
|
||||
Column("add_bonus_daily_flag_2", Integer),
|
||||
Column("add_bonus_daily_flag_3", Integer),
|
||||
Column("create_date_daily", TIMESTAMP, server_default=func.now()),
|
||||
Column("create_date_weekly", TIMESTAMP, server_default=func.now()),
|
||||
UniqueConstraint("user", "m_stamp_event_id", name="idac_user_stamp_uk"),
|
||||
mysql_charset="utf8mb4",
|
||||
)
|
||||
|
||||
timetrial_event = Table(
|
||||
"idac_user_timetrial_event",
|
||||
metadata,
|
||||
Column("id", Integer, primary_key=True, nullable=False),
|
||||
Column(
|
||||
"user",
|
||||
ForeignKey("aime_user.id", ondelete="cascade", onupdate="cascade"),
|
||||
nullable=False,
|
||||
),
|
||||
Column("timetrial_event_id", Integer),
|
||||
Column("point", Integer),
|
||||
UniqueConstraint("user", "timetrial_event_id", name="idac_user_timetrial_event_uk"),
|
||||
mysql_charset="utf8mb4",
|
||||
)
|
||||
|
||||
|
||||
class IDACItemData(BaseData):
|
||||
def get_random_user_car(self, aime_id: int, version: int) -> Optional[List[Row]]:
|
||||
sql = (
|
||||
select(car)
|
||||
.where(and_(car.c.user == aime_id, car.c.version == version))
|
||||
.order_by(func.rand())
|
||||
.limit(1)
|
||||
)
|
||||
|
||||
result = self.execute(sql)
|
||||
if result is None:
|
||||
return None
|
||||
return result.fetchone()
|
||||
|
||||
def get_random_car(self, version: int) -> Optional[List[Row]]:
|
||||
sql = select(car).where(car.c.version == version).order_by(func.rand()).limit(1)
|
||||
|
||||
result = self.execute(sql)
|
||||
if result is None:
|
||||
return None
|
||||
return result.fetchone()
|
||||
|
||||
def get_car(
|
||||
self, aime_id: int, version: int, style_car_id: int
|
||||
) -> Optional[List[Row]]:
|
||||
sql = select(car).where(
|
||||
and_(
|
||||
car.c.user == aime_id,
|
||||
car.c.version == version,
|
||||
car.c.style_car_id == style_car_id,
|
||||
)
|
||||
)
|
||||
|
||||
result = self.execute(sql)
|
||||
if result is None:
|
||||
return None
|
||||
return result.fetchone()
|
||||
|
||||
def get_cars(
|
||||
self, version: int, aime_id: int, only_pickup: bool = False
|
||||
) -> Optional[List[Row]]:
|
||||
if only_pickup:
|
||||
sql = select(car).where(
|
||||
and_(
|
||||
car.c.user == aime_id,
|
||||
car.c.version == version,
|
||||
car.c.pickup_seq != 0,
|
||||
)
|
||||
)
|
||||
else:
|
||||
sql = select(car).where(
|
||||
and_(car.c.user == aime_id, car.c.version == version)
|
||||
)
|
||||
|
||||
result = self.execute(sql)
|
||||
if result is None:
|
||||
return None
|
||||
return result.fetchall()
|
||||
|
||||
def get_ticket(self, aime_id: int, ticket_id: int) -> Optional[Row]:
|
||||
sql = select(ticket).where(
|
||||
ticket.c.user == aime_id, ticket.c.ticket_id == ticket_id
|
||||
)
|
||||
|
||||
result = self.execute(sql)
|
||||
if result is None:
|
||||
return None
|
||||
return result.fetchone()
|
||||
|
||||
def get_tickets(self, aime_id: int) -> Optional[List[Row]]:
|
||||
sql = select(ticket).where(ticket.c.user == aime_id)
|
||||
|
||||
result = self.execute(sql)
|
||||
if result is None:
|
||||
return None
|
||||
return result.fetchall()
|
||||
|
||||
def get_story(self, aime_id: int, chapter_id: int) -> Optional[Row]:
|
||||
sql = select(story).where(
|
||||
and_(story.c.user == aime_id, story.c.chapter == chapter_id)
|
||||
)
|
||||
|
||||
result = self.execute(sql)
|
||||
if result is None:
|
||||
return None
|
||||
return result.fetchone()
|
||||
|
||||
def get_stories(self, aime_id: int) -> Optional[List[Row]]:
|
||||
sql = select(story).where(story.c.user == aime_id)
|
||||
|
||||
result = self.execute(sql)
|
||||
if result is None:
|
||||
return None
|
||||
return result.fetchall()
|
||||
|
||||
def get_story_episodes(self, aime_id: int, chapter_id: int) -> Optional[List[Row]]:
|
||||
sql = select(episode).where(
|
||||
and_(episode.c.user == aime_id, episode.c.chapter == chapter_id)
|
||||
)
|
||||
|
||||
result = self.execute(sql)
|
||||
if result is None:
|
||||
return None
|
||||
return result.fetchall()
|
||||
|
||||
def get_story_episode(self, aime_id: int, episode_id: int) -> Optional[Row]:
|
||||
sql = select(episode).where(
|
||||
and_(episode.c.user == aime_id, episode.c.episode == episode_id)
|
||||
)
|
||||
|
||||
result = self.execute(sql)
|
||||
if result is None:
|
||||
return None
|
||||
return result.fetchone()
|
||||
|
||||
def get_story_episode_difficulties(
|
||||
self, aime_id: int, episode_id: int
|
||||
) -> Optional[List[Row]]:
|
||||
sql = select(difficulty).where(
|
||||
and_(difficulty.c.user == aime_id, difficulty.c.episode == episode_id)
|
||||
)
|
||||
|
||||
result = self.execute(sql)
|
||||
if result is None:
|
||||
return None
|
||||
return result.fetchall()
|
||||
|
||||
def get_courses(self, aime_id: int) -> Optional[List[Row]]:
|
||||
sql = select(course).where(course.c.user == aime_id)
|
||||
|
||||
result = self.execute(sql)
|
||||
if result is None:
|
||||
return None
|
||||
return result.fetchall()
|
||||
|
||||
def get_course(self, aime_id: int, course_id: int) -> Optional[Row]:
|
||||
sql = select(course).where(
|
||||
and_(course.c.user == aime_id, course.c.course_id == course_id)
|
||||
)
|
||||
|
||||
result = self.execute(sql)
|
||||
if result is None:
|
||||
return None
|
||||
return result.fetchone()
|
||||
|
||||
def get_time_trial_courses(self, version: int) -> Optional[List[Row]]:
|
||||
sql = select(trial.c.course_id).where(trial.c.version == version).distinct()
|
||||
|
||||
result = self.execute(sql)
|
||||
if result is None:
|
||||
return None
|
||||
return result.fetchall()
|
||||
|
||||
def get_time_trial_user_best_time_by_course_car(
|
||||
self, version: int, aime_id: int, course_id: int, style_car_id: int
|
||||
) -> Optional[Row]:
|
||||
sql = select(trial).where(
|
||||
and_(
|
||||
trial.c.user == aime_id,
|
||||
trial.c.version == version,
|
||||
trial.c.course_id == course_id,
|
||||
trial.c.style_car_id == style_car_id,
|
||||
)
|
||||
)
|
||||
|
||||
result = self.execute(sql)
|
||||
if result is None:
|
||||
return None
|
||||
return result.fetchone()
|
||||
|
||||
def get_time_trial_user_best_courses(
|
||||
self, version: int, aime_id: int
|
||||
) -> Optional[List[Row]]:
|
||||
# get for a given aime_id the best time for each course
|
||||
subquery = (
|
||||
select(
|
||||
trial.c.version,
|
||||
func.min(trial.c.goal_time).label("min_goal_time"),
|
||||
trial.c.course_id,
|
||||
)
|
||||
.where(and_(trial.c.version == version, trial.c.user == aime_id))
|
||||
.group_by(trial.c.course_id)
|
||||
.subquery()
|
||||
)
|
||||
|
||||
# now get the full row for each best time
|
||||
sql = select(trial).where(
|
||||
and_(
|
||||
trial.c.version == subquery.c.version,
|
||||
trial.c.goal_time == subquery.c.min_goal_time,
|
||||
trial.c.course_id == subquery.c.course_id,
|
||||
trial.c.user == aime_id,
|
||||
)
|
||||
)
|
||||
|
||||
result = self.execute(sql)
|
||||
if result is None:
|
||||
return None
|
||||
return result.fetchall()
|
||||
|
||||
def get_time_trial_best_cars_by_course(
|
||||
self, version: int, course_id: int, aime_id: Optional[int] = None
|
||||
) -> Optional[List[Row]]:
|
||||
subquery = (
|
||||
select(
|
||||
trial.c.version,
|
||||
func.min(trial.c.goal_time).label("min_goal_time"),
|
||||
trial.c.style_car_id,
|
||||
)
|
||||
.where(
|
||||
and_(
|
||||
trial.c.version == version,
|
||||
trial.c.course_id == course_id,
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
if aime_id is not None:
|
||||
subquery = subquery.where(trial.c.user == aime_id)
|
||||
|
||||
subquery = subquery.group_by(trial.c.style_car_id).subquery()
|
||||
|
||||
sql = select(trial).where(
|
||||
and_(
|
||||
trial.c.version == subquery.c.version,
|
||||
trial.c.goal_time == subquery.c.min_goal_time,
|
||||
trial.c.style_car_id == subquery.c.style_car_id,
|
||||
trial.c.course_id == course_id,
|
||||
)
|
||||
)
|
||||
|
||||
result = self.execute(sql)
|
||||
if result is None:
|
||||
return None
|
||||
return result.fetchall()
|
||||
|
||||
def get_time_trial_ranking_by_course(
|
||||
self,
|
||||
version: int,
|
||||
course_id: int,
|
||||
style_car_id: Optional[int] = None,
|
||||
limit: Optional[int] = 10,
|
||||
) -> Optional[List[Row]]:
|
||||
# get the top 10 ranking by goal_time for a given course which is grouped by user
|
||||
subquery = select(
|
||||
trial.c.version,
|
||||
trial.c.user,
|
||||
func.min(trial.c.goal_time).label("min_goal_time"),
|
||||
).where(and_(trial.c.version == version, trial.c.course_id == course_id))
|
||||
|
||||
# if wantd filter only by style_car_id
|
||||
if style_car_id is not None:
|
||||
subquery = subquery.where(trial.c.style_car_id == style_car_id)
|
||||
|
||||
subquery = subquery.group_by(trial.c.user).subquery()
|
||||
|
||||
sql = (
|
||||
select(trial)
|
||||
.where(
|
||||
and_(
|
||||
trial.c.version == subquery.c.version,
|
||||
trial.c.user == subquery.c.user,
|
||||
trial.c.goal_time == subquery.c.min_goal_time,
|
||||
),
|
||||
)
|
||||
.order_by(trial.c.goal_time)
|
||||
)
|
||||
|
||||
# limit the result if needed
|
||||
if limit is not None:
|
||||
sql = sql.limit(limit)
|
||||
|
||||
result = self.execute(sql)
|
||||
if result is None:
|
||||
return None
|
||||
return result.fetchall()
|
||||
|
||||
def get_time_trial_best_ranking_by_course(
|
||||
self, version: int, aime_id: int, course_id: int
|
||||
) -> Optional[Row]:
|
||||
sql = (
|
||||
select(trial)
|
||||
.where(
|
||||
and_(
|
||||
trial.c.version == version,
|
||||
trial.c.user == aime_id,
|
||||
trial.c.course_id == course_id,
|
||||
),
|
||||
)
|
||||
.order_by(trial.c.goal_time)
|
||||
.limit(1)
|
||||
)
|
||||
|
||||
result = self.execute(sql)
|
||||
if result is None:
|
||||
return None
|
||||
return result.fetchone()
|
||||
|
||||
def get_challenge(
|
||||
self, aime_id: int, vs_type: int, play_difficulty: int
|
||||
) -> Optional[Row]:
|
||||
sql = select(challenge).where(
|
||||
and_(
|
||||
challenge.c.user == aime_id,
|
||||
challenge.c.vs_type == vs_type,
|
||||
challenge.c.play_difficulty == play_difficulty,
|
||||
)
|
||||
)
|
||||
|
||||
result = self.execute(sql)
|
||||
if result is None:
|
||||
return None
|
||||
return result.fetchone()
|
||||
|
||||
def get_challenges(self, aime_id: int) -> Optional[List[Row]]:
|
||||
sql = select(challenge).where(challenge.c.user == aime_id)
|
||||
|
||||
result = self.execute(sql)
|
||||
if result is None:
|
||||
return None
|
||||
return result.fetchall()
|
||||
|
||||
def get_best_challenges_by_vs_type(
|
||||
self, aime_id: int, story_type: int = 4
|
||||
) -> Optional[List[Row]]:
|
||||
subquery = (
|
||||
select(
|
||||
challenge.c.story_type,
|
||||
challenge.c.user,
|
||||
challenge.c.vs_type,
|
||||
func.max(challenge.c.play_difficulty).label("last_play_lv"),
|
||||
)
|
||||
.where(
|
||||
and_(challenge.c.user == aime_id, challenge.c.story_type == story_type)
|
||||
)
|
||||
.group_by(challenge.c.vs_type)
|
||||
)
|
||||
|
||||
sql = (
|
||||
select(
|
||||
challenge.c.story_type,
|
||||
challenge.c.vs_type,
|
||||
challenge.c.cleared_difficulty.label("max_clear_lv"),
|
||||
challenge.c.play_difficulty.label("last_play_lv"),
|
||||
challenge.c.course_id,
|
||||
challenge.c.play_count,
|
||||
)
|
||||
.where(
|
||||
and_(
|
||||
challenge.c.user == subquery.c.user,
|
||||
challenge.c.vs_type == subquery.c.vs_type,
|
||||
challenge.c.play_difficulty == subquery.c.last_play_lv,
|
||||
),
|
||||
)
|
||||
.order_by(challenge.c.vs_type)
|
||||
)
|
||||
|
||||
result = self.execute(sql)
|
||||
if result is None:
|
||||
return None
|
||||
return result.fetchall()
|
||||
|
||||
def get_theory_courses(self, aime_id: int) -> Optional[List[Row]]:
|
||||
sql = select(theory_course).where(theory_course.c.user == aime_id)
|
||||
|
||||
result = self.execute(sql)
|
||||
if result is None:
|
||||
return None
|
||||
return result.fetchall()
|
||||
|
||||
def get_theory_course_by_powerhouse_lv(
|
||||
self, aime_id: int, course_id: int, powerhouse_lv: int, count: int = 3
|
||||
) -> Optional[List[Row]]:
|
||||
sql = (
|
||||
select(theory_course)
|
||||
.where(
|
||||
and_(
|
||||
theory_course.c.user != aime_id,
|
||||
theory_course.c.course_id == course_id,
|
||||
theory_course.c.powerhouse_lv == powerhouse_lv,
|
||||
)
|
||||
)
|
||||
.order_by(func.rand())
|
||||
.limit(count)
|
||||
)
|
||||
|
||||
result = self.execute(sql)
|
||||
if result is None:
|
||||
return None
|
||||
return result.fetchall()
|
||||
|
||||
def get_theory_course(self, aime_id: int, course_id: int) -> Optional[List[Row]]:
|
||||
sql = select(theory_course).where(
|
||||
and_(
|
||||
theory_course.c.user == aime_id, theory_course.c.course_id == course_id
|
||||
)
|
||||
)
|
||||
|
||||
result = self.execute(sql)
|
||||
if result is None:
|
||||
return None
|
||||
return result.fetchone()
|
||||
|
||||
def get_theory_partners(self, aime_id: int) -> Optional[List[Row]]:
|
||||
sql = select(theory_partner).where(theory_partner.c.user == aime_id)
|
||||
|
||||
result = self.execute(sql)
|
||||
if result is None:
|
||||
return None
|
||||
return result.fetchall()
|
||||
|
||||
def get_theory_running(self, aime_id: int) -> Optional[List[Row]]:
|
||||
sql = select(theory_running).where(theory_running.c.user == aime_id)
|
||||
|
||||
result = self.execute(sql)
|
||||
if result is None:
|
||||
return None
|
||||
return result.fetchall()
|
||||
|
||||
def get_theory_running_by_course(
|
||||
self, aime_id: int, course_id: int
|
||||
) -> Optional[Row]:
|
||||
sql = select(theory_running).where(
|
||||
and_(
|
||||
theory_running.c.user == aime_id,
|
||||
theory_running.c.course_id == course_id,
|
||||
)
|
||||
)
|
||||
|
||||
result = self.execute(sql)
|
||||
if result is None:
|
||||
return None
|
||||
return result.fetchone()
|
||||
|
||||
def get_vs_infos(self, aime_id: int) -> Optional[List[Row]]:
|
||||
sql = select(vs_info).where(vs_info.c.user == aime_id)
|
||||
|
||||
result = self.execute(sql)
|
||||
if result is None:
|
||||
return None
|
||||
return result.fetchall()
|
||||
|
||||
def get_stamps(self, aime_id: int) -> Optional[List[Row]]:
|
||||
sql = select(stamp).where(
|
||||
and_(
|
||||
stamp.c.user == aime_id,
|
||||
)
|
||||
)
|
||||
|
||||
result = self.execute(sql)
|
||||
if result is None:
|
||||
return None
|
||||
return result.fetchall()
|
||||
|
||||
def get_timetrial_event(self, aime_id: int, timetrial_event_id: int) -> Optional[Row]:
|
||||
sql = select(timetrial_event).where(
|
||||
and_(
|
||||
timetrial_event.c.user == aime_id,
|
||||
timetrial_event.c.timetrial_event_id == timetrial_event_id,
|
||||
)
|
||||
)
|
||||
|
||||
result = self.execute(sql)
|
||||
if result is None:
|
||||
return None
|
||||
return result.fetchone()
|
||||
|
||||
def put_car(self, aime_id: int, version: int, car_data: Dict) -> Optional[int]:
|
||||
car_data["user"] = aime_id
|
||||
car_data["version"] = version
|
||||
|
||||
sql = insert(car).values(**car_data)
|
||||
conflict = sql.on_duplicate_key_update(**car_data)
|
||||
result = self.execute(conflict)
|
||||
|
||||
if result is None:
|
||||
self.logger.warn(f"put_car: Failed to update! aime_id: {aime_id}")
|
||||
return None
|
||||
return result.lastrowid
|
||||
|
||||
def put_ticket(self, aime_id: int, ticket_data: Dict) -> Optional[int]:
|
||||
ticket_data["user"] = aime_id
|
||||
|
||||
sql = insert(ticket).values(**ticket_data)
|
||||
conflict = sql.on_duplicate_key_update(**ticket_data)
|
||||
result = self.execute(conflict)
|
||||
|
||||
if result is None:
|
||||
self.logger.warn(f"put_ticket: Failed to update! aime_id: {aime_id}")
|
||||
return None
|
||||
return result.lastrowid
|
||||
|
||||
def put_story(self, aime_id: int, story_data: Dict) -> Optional[int]:
|
||||
story_data["user"] = aime_id
|
||||
|
||||
sql = insert(story).values(**story_data)
|
||||
conflict = sql.on_duplicate_key_update(**story_data)
|
||||
result = self.execute(conflict)
|
||||
|
||||
if result is None:
|
||||
self.logger.warn(f"put_story: Failed to update! aime_id: {aime_id}")
|
||||
return None
|
||||
return result.lastrowid
|
||||
|
||||
def put_story_episode_play_status(
|
||||
self, aime_id: int, chapter_id: int, play_status: int = 1
|
||||
) -> Optional[int]:
|
||||
sql = (
|
||||
update(episode)
|
||||
.where(and_(episode.c.user == aime_id, episode.c.chapter == chapter_id))
|
||||
.values(play_status=play_status)
|
||||
)
|
||||
|
||||
result = self.execute(sql)
|
||||
if result is None:
|
||||
self.logger.warn(
|
||||
f"put_story_episode_play_status: Failed to update! aime_id: {aime_id}"
|
||||
)
|
||||
return None
|
||||
return result.lastrowid
|
||||
|
||||
def put_story_episode(
|
||||
self, aime_id: int, chapter_id: int, episode_data: Dict
|
||||
) -> Optional[int]:
|
||||
episode_data["user"] = aime_id
|
||||
episode_data["chapter"] = chapter_id
|
||||
|
||||
sql = insert(episode).values(**episode_data)
|
||||
conflict = sql.on_duplicate_key_update(**episode_data)
|
||||
result = self.execute(conflict)
|
||||
|
||||
if result is None:
|
||||
self.logger.warn(f"put_story_episode: Failed to update! aime_id: {aime_id}")
|
||||
return None
|
||||
return result.lastrowid
|
||||
|
||||
def put_story_episode_difficulty(
|
||||
self, aime_id: int, episode_id: int, difficulty_data: Dict
|
||||
) -> Optional[int]:
|
||||
difficulty_data["user"] = aime_id
|
||||
difficulty_data["episode"] = episode_id
|
||||
|
||||
sql = insert(difficulty).values(**difficulty_data)
|
||||
conflict = sql.on_duplicate_key_update(**difficulty_data)
|
||||
result = self.execute(conflict)
|
||||
|
||||
if result is None:
|
||||
self.logger.warn(
|
||||
f"put_story_episode_difficulty: Failed to update! aime_id: {aime_id}"
|
||||
)
|
||||
return None
|
||||
return result.lastrowid
|
||||
|
||||
def put_course(self, aime_id: int, course_data: Dict) -> Optional[int]:
|
||||
course_data["user"] = aime_id
|
||||
|
||||
sql = insert(course).values(**course_data)
|
||||
conflict = sql.on_duplicate_key_update(**course_data)
|
||||
result = self.execute(conflict)
|
||||
|
||||
if result is None:
|
||||
self.logger.warn(f"put_course: Failed to update! aime_id: {aime_id}")
|
||||
return None
|
||||
return result.lastrowid
|
||||
|
||||
def put_time_trial(
|
||||
self, version: int, aime_id: int, time_trial_data: Dict
|
||||
) -> Optional[int]:
|
||||
time_trial_data["user"] = aime_id
|
||||
time_trial_data["version"] = version
|
||||
|
||||
sql = insert(trial).values(**time_trial_data)
|
||||
conflict = sql.on_duplicate_key_update(**time_trial_data)
|
||||
result = self.execute(conflict)
|
||||
|
||||
if result is None:
|
||||
self.logger.warn(f"put_time_trial: Failed to update! aime_id: {aime_id}")
|
||||
return None
|
||||
return result.lastrowid
|
||||
|
||||
def put_challenge(self, aime_id: int, challenge_data: Dict) -> Optional[int]:
|
||||
challenge_data["user"] = aime_id
|
||||
|
||||
sql = insert(challenge).values(**challenge_data)
|
||||
conflict = sql.on_duplicate_key_update(**challenge_data)
|
||||
result = self.execute(conflict)
|
||||
|
||||
if result is None:
|
||||
self.logger.warn(f"put_challenge: Failed to update! aime_id: {aime_id}")
|
||||
return None
|
||||
return result.lastrowid
|
||||
|
||||
def put_theory_course(
|
||||
self, aime_id: int, theory_course_data: Dict
|
||||
) -> Optional[int]:
|
||||
theory_course_data["user"] = aime_id
|
||||
|
||||
sql = insert(theory_course).values(**theory_course_data)
|
||||
conflict = sql.on_duplicate_key_update(**theory_course_data)
|
||||
result = self.execute(conflict)
|
||||
|
||||
if result is None:
|
||||
self.logger.warn(f"put_theory_course: Failed to update! aime_id: {aime_id}")
|
||||
return None
|
||||
return result.lastrowid
|
||||
|
||||
def put_theory_partner(
|
||||
self, aime_id: int, theory_partner_data: Dict
|
||||
) -> Optional[int]:
|
||||
theory_partner_data["user"] = aime_id
|
||||
|
||||
sql = insert(theory_partner).values(**theory_partner_data)
|
||||
conflict = sql.on_duplicate_key_update(**theory_partner_data)
|
||||
result = self.execute(conflict)
|
||||
|
||||
if result is None:
|
||||
self.logger.warn(
|
||||
f"put_theory_partner: Failed to update! aime_id: {aime_id}"
|
||||
)
|
||||
return None
|
||||
return result.lastrowid
|
||||
|
||||
def put_theory_running(
|
||||
self, aime_id: int, theory_running_data: Dict
|
||||
) -> Optional[int]:
|
||||
theory_running_data["user"] = aime_id
|
||||
|
||||
sql = insert(theory_running).values(**theory_running_data)
|
||||
conflict = sql.on_duplicate_key_update(**theory_running_data)
|
||||
result = self.execute(conflict)
|
||||
|
||||
if result is None:
|
||||
self.logger.warn(
|
||||
f"put_theory_running: Failed to update! aime_id: {aime_id}"
|
||||
)
|
||||
return None
|
||||
return result.lastrowid
|
||||
|
||||
def put_vs_info(self, aime_id: int, vs_info_data: Dict) -> Optional[int]:
|
||||
vs_info_data["user"] = aime_id
|
||||
|
||||
sql = insert(vs_info).values(**vs_info_data)
|
||||
conflict = sql.on_duplicate_key_update(**vs_info_data)
|
||||
result = self.execute(conflict)
|
||||
|
||||
if result is None:
|
||||
self.logger.warn(f"put_vs_info: Failed to update! aime_id: {aime_id}")
|
||||
return None
|
||||
return result.lastrowid
|
||||
|
||||
def put_stamp(
|
||||
self, aime_id: int, stamp_data: Dict
|
||||
) -> Optional[int]:
|
||||
stamp_data["user"] = aime_id
|
||||
|
||||
sql = insert(stamp).values(**stamp_data)
|
||||
conflict = sql.on_duplicate_key_update(**stamp_data)
|
||||
result = self.execute(conflict)
|
||||
|
||||
if result is None:
|
||||
self.logger.warn(
|
||||
f"putstamp: Failed to update! aime_id: {aime_id}"
|
||||
)
|
||||
return None
|
||||
return result.lastrowid
|
||||
|
||||
def put_timetrial_event(
|
||||
self, aime_id: int, time_trial_event_id: int, point: int
|
||||
) -> Optional[int]:
|
||||
timetrial_event_data = {
|
||||
"user": aime_id,
|
||||
"timetrial_event_id": time_trial_event_id,
|
||||
"point": point,
|
||||
}
|
||||
|
||||
sql = insert(timetrial_event).values(**timetrial_event_data)
|
||||
conflict = sql.on_duplicate_key_update(**timetrial_event_data)
|
||||
result = self.execute(conflict)
|
||||
|
||||
if result is None:
|
||||
self.logger.warn(
|
||||
f"put_timetrial_event: Failed to update! aime_id: {aime_id}"
|
||||
)
|
||||
return None
|
||||
return result.lastrowid
|
440
titles/idac/schema/profile.py
Normal file
440
titles/idac/schema/profile.py
Normal file
@ -0,0 +1,440 @@
|
||||
from typing import Dict, List, Optional
|
||||
from sqlalchemy import Table, Column, UniqueConstraint, PrimaryKeyConstraint, and_
|
||||
from sqlalchemy.types import Integer, String, TIMESTAMP, Boolean, JSON, BigInteger
|
||||
from sqlalchemy.engine.base import Connection
|
||||
from sqlalchemy.schema import ForeignKey
|
||||
from sqlalchemy.sql import func, select
|
||||
from sqlalchemy.engine import Row
|
||||
from sqlalchemy.dialects.mysql import insert
|
||||
|
||||
from core.data.schema import BaseData, metadata
|
||||
from core.config import CoreConfig
|
||||
|
||||
profile = Table(
|
||||
"idac_profile",
|
||||
metadata,
|
||||
Column("id", Integer, primary_key=True, nullable=False),
|
||||
Column(
|
||||
"user",
|
||||
ForeignKey("aime_user.id", ondelete="cascade", onupdate="cascade"),
|
||||
nullable=False,
|
||||
),
|
||||
Column("version", Integer, nullable=False),
|
||||
Column("username", String(8)),
|
||||
Column("country", Integer),
|
||||
Column("store", Integer),
|
||||
Column("team_id", Integer, server_default="0"),
|
||||
Column("total_play", Integer, server_default="0"),
|
||||
Column("daily_play", Integer, server_default="0"),
|
||||
Column("day_play", Integer, server_default="0"),
|
||||
Column("mileage", Integer, server_default="0"),
|
||||
Column("asset_version", Integer, server_default="1"),
|
||||
Column("last_play_date", TIMESTAMP, server_default=func.now()),
|
||||
Column("mytitle_id", Integer, server_default="0"),
|
||||
Column("mytitle_efffect_id", Integer, server_default="0"),
|
||||
Column("sticker_id", Integer, server_default="0"),
|
||||
Column("sticker_effect_id", Integer, server_default="0"),
|
||||
Column("papercup_id", Integer, server_default="0"),
|
||||
Column("tachometer_id", Integer, server_default="0"),
|
||||
Column("aura_id", Integer, server_default="0"),
|
||||
Column("aura_color_id", Integer, server_default="0"),
|
||||
Column("aura_line_id", Integer, server_default="0"),
|
||||
Column("bgm_id", Integer, server_default="0"),
|
||||
Column("keyholder_id", Integer, server_default="0"),
|
||||
Column("start_menu_bg_id", Integer, server_default="0"),
|
||||
Column("use_car_id", Integer, server_default="1"),
|
||||
Column("use_style_car_id", Integer, server_default="1"),
|
||||
Column("bothwin_count", Integer, server_default="0"),
|
||||
Column("bothwin_score", Integer, server_default="0"),
|
||||
Column("subcard_count", Integer, server_default="0"),
|
||||
Column("vs_history", Integer, server_default="0"),
|
||||
Column("stamp_key_assign_0", Integer),
|
||||
Column("stamp_key_assign_1", Integer),
|
||||
Column("stamp_key_assign_2", Integer),
|
||||
Column("stamp_key_assign_3", Integer),
|
||||
Column("name_change_category", Integer, server_default="0"),
|
||||
Column("factory_disp", Integer, server_default="0"),
|
||||
Column("create_date", TIMESTAMP, server_default=func.now()),
|
||||
Column("cash", Integer, server_default="0"),
|
||||
Column("dressup_point", Integer, server_default="0"),
|
||||
Column("avatar_point", Integer, server_default="0"),
|
||||
Column("total_cash", Integer, server_default="0"),
|
||||
UniqueConstraint("user", "version", name="idac_profile_uk"),
|
||||
mysql_charset="utf8mb4",
|
||||
)
|
||||
|
||||
# No point setting defaults since the game sends everything on profile creation anyway
|
||||
config = Table(
|
||||
"idac_profile_config",
|
||||
metadata,
|
||||
Column("id", Integer, primary_key=True, nullable=False),
|
||||
Column(
|
||||
"user",
|
||||
ForeignKey("aime_user.id", ondelete="cascade", onupdate="cascade"),
|
||||
nullable=False,
|
||||
),
|
||||
Column("config_id", Integer),
|
||||
Column("steering_intensity", Integer),
|
||||
Column("transmission_type", Integer),
|
||||
Column("default_viewpoint", Integer),
|
||||
Column("favorite_bgm", Integer),
|
||||
Column("bgm_volume", Integer),
|
||||
Column("se_volume", Integer),
|
||||
Column("master_volume", Integer),
|
||||
Column("store_battle_policy", Integer),
|
||||
Column("battle_onomatope_display", Integer),
|
||||
Column("cornering_guide", Integer),
|
||||
Column("minimap", Integer),
|
||||
Column("line_guide", Integer),
|
||||
Column("ghost", Integer),
|
||||
Column("race_exit", Integer),
|
||||
Column("result_skip", Integer),
|
||||
Column("stamp_select_skip", Integer),
|
||||
UniqueConstraint("user", name="idac_profile_config_uk"),
|
||||
mysql_charset="utf8mb4",
|
||||
)
|
||||
|
||||
# No point setting defaults since the game sends everything on profile creation anyway
|
||||
avatar = Table(
|
||||
"idac_profile_avatar",
|
||||
metadata,
|
||||
Column("id", Integer, primary_key=True, nullable=False),
|
||||
Column(
|
||||
"user",
|
||||
ForeignKey("aime_user.id", ondelete="cascade", onupdate="cascade"),
|
||||
nullable=False,
|
||||
),
|
||||
Column("sex", Integer),
|
||||
Column("face", Integer),
|
||||
Column("eye", Integer),
|
||||
Column("mouth", Integer),
|
||||
Column("hair", Integer),
|
||||
Column("glasses", Integer),
|
||||
Column("face_accessory", Integer),
|
||||
Column("body", Integer),
|
||||
Column("body_accessory", Integer),
|
||||
Column("behind", Integer),
|
||||
Column("bg", Integer),
|
||||
Column("effect", Integer),
|
||||
Column("special", Integer),
|
||||
UniqueConstraint("user", name="idac_profile_avatar_uk"),
|
||||
mysql_charset="utf8mb4",
|
||||
)
|
||||
|
||||
rank = Table(
|
||||
"idac_profile_rank",
|
||||
metadata,
|
||||
Column("id", Integer, primary_key=True, nullable=False),
|
||||
Column(
|
||||
"user",
|
||||
ForeignKey("aime_user.id", ondelete="cascade", onupdate="cascade"),
|
||||
nullable=False,
|
||||
),
|
||||
Column("version", Integer, nullable=False),
|
||||
Column("story_rank_exp", Integer, server_default="0"),
|
||||
Column("story_rank", Integer, server_default="1"),
|
||||
Column("time_trial_rank_exp", Integer, server_default="0"),
|
||||
Column("time_trial_rank", Integer, server_default="1"),
|
||||
Column("online_battle_rank_exp", Integer, server_default="0"),
|
||||
Column("online_battle_rank", Integer, server_default="1"),
|
||||
Column("store_battle_rank_exp", Integer, server_default="0"),
|
||||
Column("store_battle_rank", Integer, server_default="1"),
|
||||
Column("theory_exp", Integer, server_default="0"),
|
||||
Column("theory_rank", Integer, server_default="1"),
|
||||
Column("pride_group_id", Integer, server_default="0"),
|
||||
Column("pride_point", Integer, server_default="0"),
|
||||
Column("grade_exp", Integer, server_default="0"),
|
||||
Column("grade", Integer, server_default="1"),
|
||||
Column("grade_reward_dist", Integer, server_default="0"),
|
||||
Column("story_rank_reward_dist", Integer, server_default="0"),
|
||||
Column("time_trial_rank_reward_dist", Integer, server_default="0"),
|
||||
Column("online_battle_rank_reward_dist", Integer, server_default="0"),
|
||||
Column("store_battle_rank_reward_dist", Integer, server_default="0"),
|
||||
Column("theory_rank_reward_dist", Integer, server_default="0"),
|
||||
Column("max_attained_online_battle_rank", Integer, server_default="1"),
|
||||
Column("max_attained_pride_point", Integer, server_default="0"),
|
||||
Column("is_last_max", Integer, server_default="0"),
|
||||
UniqueConstraint("user", "version", name="idac_profile_rank_uk"),
|
||||
mysql_charset="utf8mb4",
|
||||
)
|
||||
|
||||
stock = Table(
|
||||
"idac_profile_stock",
|
||||
metadata,
|
||||
Column("id", Integer, primary_key=True, nullable=False),
|
||||
Column(
|
||||
"user",
|
||||
ForeignKey("aime_user.id", ondelete="cascade", onupdate="cascade"),
|
||||
nullable=False,
|
||||
),
|
||||
Column("version", Integer, nullable=False),
|
||||
Column("mytitle_list", String(1024), server_default=""),
|
||||
Column("mytitle_new_list", String(1024), server_default=""),
|
||||
Column("avatar_face_list", String(255), server_default=""),
|
||||
Column("avatar_face_new_list", String(255), server_default=""),
|
||||
Column("avatar_eye_list", String(255), server_default=""),
|
||||
Column("avatar_eye_new_list", String(255), server_default=""),
|
||||
Column("avatar_hair_list", String(255), server_default=""),
|
||||
Column("avatar_hair_new_list", String(255), server_default=""),
|
||||
Column("avatar_body_list", String(255), server_default=""),
|
||||
Column("avatar_body_new_list", String(255), server_default=""),
|
||||
Column("avatar_mouth_list", String(255), server_default=""),
|
||||
Column("avatar_mouth_new_list", String(255), server_default=""),
|
||||
Column("avatar_glasses_list", String(255), server_default=""),
|
||||
Column("avatar_glasses_new_list", String(255), server_default=""),
|
||||
Column("avatar_face_accessory_list", String(255), server_default=""),
|
||||
Column("avatar_face_accessory_new_list", String(255), server_default=""),
|
||||
Column("avatar_body_accessory_list", String(255), server_default=""),
|
||||
Column("avatar_body_accessory_new_list", String(255), server_default=""),
|
||||
Column("avatar_behind_list", String(255), server_default=""),
|
||||
Column("avatar_behind_new_list", String(255), server_default=""),
|
||||
Column("avatar_bg_list", String(255), server_default=""),
|
||||
Column("avatar_bg_new_list", String(255), server_default=""),
|
||||
Column("avatar_effect_list", String(255), server_default=""),
|
||||
Column("avatar_effect_new_list", String(255), server_default=""),
|
||||
Column("avatar_special_list", String(255), server_default=""),
|
||||
Column("avatar_special_new_list", String(255), server_default=""),
|
||||
Column("stamp_list", String(255), server_default=""),
|
||||
Column("stamp_new_list", String(255), server_default=""),
|
||||
Column("keyholder_list", String(256), server_default=""),
|
||||
Column("keyholder_new_list", String(256), server_default=""),
|
||||
Column("papercup_list", String(255), server_default=""),
|
||||
Column("papercup_new_list", String(255), server_default=""),
|
||||
Column("tachometer_list", String(255), server_default=""),
|
||||
Column("tachometer_new_list", String(255), server_default=""),
|
||||
Column("aura_list", String(255), server_default=""),
|
||||
Column("aura_new_list", String(255), server_default=""),
|
||||
Column("aura_color_list", String(255), server_default=""),
|
||||
Column("aura_color_new_list", String(255), server_default=""),
|
||||
Column("aura_line_list", String(255), server_default=""),
|
||||
Column("aura_line_new_list", String(255), server_default=""),
|
||||
Column("bgm_list", String(255), server_default=""),
|
||||
Column("bgm_new_list", String(255), server_default=""),
|
||||
Column("dx_color_list", String(255), server_default=""),
|
||||
Column("dx_color_new_list", String(255), server_default=""),
|
||||
Column("start_menu_bg_list", String(255), server_default=""),
|
||||
Column("start_menu_bg_new_list", String(255), server_default=""),
|
||||
Column("under_neon_list", String(255), server_default=""),
|
||||
UniqueConstraint("user", "version", name="idac_profile_stock_uk"),
|
||||
mysql_charset="utf8mb4",
|
||||
)
|
||||
|
||||
theory = Table(
|
||||
"idac_profile_theory",
|
||||
metadata,
|
||||
Column("id", Integer, primary_key=True, nullable=False),
|
||||
Column(
|
||||
"user",
|
||||
ForeignKey("aime_user.id", ondelete="cascade", onupdate="cascade"),
|
||||
nullable=False,
|
||||
),
|
||||
Column("version", Integer, nullable=False),
|
||||
Column("play_count", Integer, server_default="0"),
|
||||
Column("play_count_multi", Integer, server_default="0"),
|
||||
Column("partner_id", Integer),
|
||||
Column("partner_progress", Integer),
|
||||
Column("partner_progress_score", Integer),
|
||||
Column("practice_start_rank", Integer, server_default="0"),
|
||||
Column("general_flag", Integer, server_default="0"),
|
||||
Column("vs_history", Integer, server_default="0"),
|
||||
Column("vs_history_multi", Integer, server_default="0"),
|
||||
Column("win_count", Integer, server_default="0"),
|
||||
Column("win_count_multi", Integer, server_default="0"),
|
||||
UniqueConstraint("user", "version", name="idac_profile_theory_uk"),
|
||||
mysql_charset="utf8mb4",
|
||||
)
|
||||
|
||||
|
||||
class IDACProfileData(BaseData):
|
||||
def __init__(self, cfg: CoreConfig, conn: Connection) -> None:
|
||||
super().__init__(cfg, conn)
|
||||
self.date_time_format_ext = (
|
||||
"%Y-%m-%d %H:%M:%S.%f" # needs to be lopped off at [:-5]
|
||||
)
|
||||
self.date_time_format_short = "%Y-%m-%d"
|
||||
|
||||
def get_profile(self, aime_id: int, version: int) -> Optional[Row]:
|
||||
sql = select(profile).where(
|
||||
and_(
|
||||
profile.c.user == aime_id,
|
||||
profile.c.version == version,
|
||||
)
|
||||
)
|
||||
|
||||
result = self.execute(sql)
|
||||
if result is None:
|
||||
return None
|
||||
return result.fetchone()
|
||||
|
||||
def get_different_random_profiles(
|
||||
self, aime_id: int, version: int, count: int = 9
|
||||
) -> Optional[Row]:
|
||||
sql = (
|
||||
select(profile)
|
||||
.where(
|
||||
and_(
|
||||
profile.c.user != aime_id,
|
||||
profile.c.version == version,
|
||||
)
|
||||
)
|
||||
.order_by(func.rand())
|
||||
.limit(count)
|
||||
)
|
||||
|
||||
result = self.execute(sql)
|
||||
if result is None:
|
||||
return None
|
||||
return result.fetchall()
|
||||
|
||||
def get_profile_config(self, aime_id: int) -> Optional[Row]:
|
||||
sql = select(config).where(
|
||||
and_(
|
||||
config.c.user == aime_id,
|
||||
)
|
||||
)
|
||||
|
||||
result = self.execute(sql)
|
||||
if result is None:
|
||||
return None
|
||||
return result.fetchone()
|
||||
|
||||
def get_profile_avatar(self, aime_id: int) -> Optional[Row]:
|
||||
sql = select(avatar).where(
|
||||
and_(
|
||||
avatar.c.user == aime_id,
|
||||
)
|
||||
)
|
||||
|
||||
result = self.execute(sql)
|
||||
if result is None:
|
||||
return None
|
||||
return result.fetchone()
|
||||
|
||||
def get_profile_rank(self, aime_id: int, version: int) -> Optional[Row]:
|
||||
sql = select(rank).where(
|
||||
and_(
|
||||
rank.c.user == aime_id,
|
||||
rank.c.version == version,
|
||||
)
|
||||
)
|
||||
|
||||
result = self.execute(sql)
|
||||
if result is None:
|
||||
return None
|
||||
return result.fetchone()
|
||||
|
||||
def get_profile_stock(self, aime_id: int, version: int) -> Optional[Row]:
|
||||
sql = select(stock).where(
|
||||
and_(
|
||||
stock.c.user == aime_id,
|
||||
stock.c.version == version,
|
||||
)
|
||||
)
|
||||
|
||||
result = self.execute(sql)
|
||||
if result is None:
|
||||
return None
|
||||
return result.fetchone()
|
||||
|
||||
def get_profile_theory(self, aime_id: int, version: int) -> Optional[Row]:
|
||||
sql = select(theory).where(
|
||||
and_(
|
||||
theory.c.user == aime_id,
|
||||
theory.c.version == version,
|
||||
)
|
||||
)
|
||||
|
||||
result = self.execute(sql)
|
||||
if result is None:
|
||||
return None
|
||||
return result.fetchone()
|
||||
|
||||
def put_profile(
|
||||
self, aime_id: int, version: int, profile_data: Dict
|
||||
) -> Optional[int]:
|
||||
profile_data["user"] = aime_id
|
||||
profile_data["version"] = version
|
||||
|
||||
sql = insert(profile).values(**profile_data)
|
||||
conflict = sql.on_duplicate_key_update(**profile_data)
|
||||
result = self.execute(conflict)
|
||||
|
||||
if result is None:
|
||||
self.logger.warn(f"put_profile: Failed to update! aime_id: {aime_id}")
|
||||
return None
|
||||
return result.lastrowid
|
||||
|
||||
def put_profile_config(self, aime_id: int, config_data: Dict) -> Optional[int]:
|
||||
config_data["user"] = aime_id
|
||||
|
||||
sql = insert(config).values(**config_data)
|
||||
conflict = sql.on_duplicate_key_update(**config_data)
|
||||
result = self.execute(conflict)
|
||||
|
||||
if result is None:
|
||||
self.logger.warn(
|
||||
f"put_profile_config: Failed to update! aime_id: {aime_id}"
|
||||
)
|
||||
return None
|
||||
return result.lastrowid
|
||||
|
||||
def put_profile_avatar(self, aime_id: int, avatar_data: Dict) -> Optional[int]:
|
||||
avatar_data["user"] = aime_id
|
||||
|
||||
sql = insert(avatar).values(**avatar_data)
|
||||
conflict = sql.on_duplicate_key_update(**avatar_data)
|
||||
result = self.execute(conflict)
|
||||
|
||||
if result is None:
|
||||
self.logger.warn(
|
||||
f"put_profile_avatar: Failed to update! aime_id: {aime_id}"
|
||||
)
|
||||
return None
|
||||
return result.lastrowid
|
||||
|
||||
def put_profile_rank(
|
||||
self, aime_id: int, version: int, rank_data: Dict
|
||||
) -> Optional[int]:
|
||||
rank_data["user"] = aime_id
|
||||
rank_data["version"] = version
|
||||
|
||||
sql = insert(rank).values(**rank_data)
|
||||
conflict = sql.on_duplicate_key_update(**rank_data)
|
||||
result = self.execute(conflict)
|
||||
|
||||
if result is None:
|
||||
self.logger.warn(f"put_profile_rank: Failed to update! aime_id: {aime_id}")
|
||||
return None
|
||||
return result.lastrowid
|
||||
|
||||
def put_profile_stock(
|
||||
self, aime_id: int, version: int, stock_data: Dict
|
||||
) -> Optional[int]:
|
||||
stock_data["user"] = aime_id
|
||||
stock_data["version"] = version
|
||||
|
||||
sql = insert(stock).values(**stock_data)
|
||||
conflict = sql.on_duplicate_key_update(**stock_data)
|
||||
result = self.execute(conflict)
|
||||
|
||||
if result is None:
|
||||
self.logger.warn(f"put_profile_stock: Failed to update! aime_id: {aime_id}")
|
||||
return None
|
||||
return result.lastrowid
|
||||
|
||||
def put_profile_theory(
|
||||
self, aime_id: int, version: int, theory_data: Dict
|
||||
) -> Optional[int]:
|
||||
theory_data["user"] = aime_id
|
||||
theory_data["version"] = version
|
||||
|
||||
sql = insert(theory).values(**theory_data)
|
||||
conflict = sql.on_duplicate_key_update(**theory_data)
|
||||
result = self.execute(conflict)
|
||||
|
||||
if result is None:
|
||||
self.logger.warn(
|
||||
f"put_profile_theory: Failed to update! aime_id: {aime_id}"
|
||||
)
|
||||
return None
|
||||
return result.lastrowid
|
2505
titles/idac/season2.py
Normal file
2505
titles/idac/season2.py
Normal file
File diff suppressed because it is too large
Load Diff
@ -1,5 +1,6 @@
|
||||
import struct
|
||||
|
||||
from core.utils import Utils
|
||||
from .base import IDZHandlerBase
|
||||
from core.config import CoreConfig
|
||||
from ..config import IDZConfig
|
||||
@ -20,9 +21,11 @@ class IDZHandlerLoadServerInfo(IDZHandlerBase):
|
||||
offset = 0
|
||||
if self.version >= IDZConstants.VER_IDZ_210:
|
||||
offset = 2
|
||||
|
||||
t_port = Utils.get_title_port(self.core_config)
|
||||
|
||||
news_str = f"http://{self.core_config.title.hostname}:{self.core_config.title.port}/SDDF/230/news/news80**.txt"
|
||||
err_str = f"http://{self.core_config.title.hostname}:{self.core_config.title.port}/SDDF/230/error"
|
||||
news_str = f"http://{self.core_config.title.hostname}:{t_port}/idz/news/news80**.txt"
|
||||
err_str = f"http://{self.core_config.title.hostname}:{t_port}/idz/error"
|
||||
|
||||
len_hostname = len(self.core_config.title.hostname)
|
||||
len_news = len(news_str)
|
||||
|
@ -85,7 +85,8 @@ class IDZServlet(BaseServlet):
|
||||
|
||||
def get_endpoint_matchers(self) -> Tuple[List[Tuple[str, str, Dict]], List[Tuple[str, str, Dict]]]:
|
||||
return[
|
||||
[("render_GET", "/{game}/{version}/{endpoint:.*?}", {'game': R'S...'})], # TODO: Slim this down to only the news stuff
|
||||
[("render_GET", "/idz/news/{endpoint:.*?}", {}),
|
||||
("render_GET", "/idz/error", {})],
|
||||
[]
|
||||
]
|
||||
|
||||
|
@ -157,54 +157,44 @@ class OngekiBase:
|
||||
return {"type": data["type"], "length": 0, "gameIdlistList": []}
|
||||
|
||||
def handle_get_game_ranking_api_request(self, data: Dict) -> Dict:
|
||||
return {"length": 0, "gameRankingList": []}
|
||||
game_ranking_list = self.data.static.get_ranking_list(self.version)
|
||||
|
||||
ranking_list = []
|
||||
for music in game_ranking_list:
|
||||
tmp = music._asdict()
|
||||
ranking_list.append(tmp)
|
||||
|
||||
def handle_get_game_point_api_request(self, data: Dict) -> Dict:
|
||||
"""
|
||||
Sets the GP amount for A and B sets for 1 - 3 credits
|
||||
"""
|
||||
if ranking_list is None:
|
||||
return {"length": 0, "gameRankingList": []}
|
||||
return {
|
||||
"length": 6,
|
||||
"gamePointList": [
|
||||
{
|
||||
"type": 0,
|
||||
"cost": 100,
|
||||
"startDate": "2000-01-01 05:00:00.0",
|
||||
"endDate": "2099-01-01 05:00:00.0",
|
||||
},
|
||||
{
|
||||
"type": 1,
|
||||
"cost": 230,
|
||||
"startDate": "2000-01-01 05:00:00.0",
|
||||
"endDate": "2099-01-01 05:00:00.0",
|
||||
},
|
||||
{
|
||||
"type": 2,
|
||||
"cost": 370,
|
||||
"startDate": "2000-01-01 05:00:00.0",
|
||||
"endDate": "2099-01-01 05:00:00.0",
|
||||
},
|
||||
{
|
||||
"type": 3,
|
||||
"cost": 120,
|
||||
"startDate": "2000-01-01 05:00:00.0",
|
||||
"endDate": "2099-01-01 05:00:00.0",
|
||||
},
|
||||
{
|
||||
"type": 4,
|
||||
"cost": 240,
|
||||
"startDate": "2000-01-01 05:00:00.0",
|
||||
"endDate": "2099-01-01 05:00:00.0",
|
||||
},
|
||||
{
|
||||
"type": 5,
|
||||
"cost": 360,
|
||||
"startDate": "2000-01-01 05:00:00.0",
|
||||
"endDate": "2099-01-01 05:00:00.0",
|
||||
},
|
||||
],
|
||||
"type": data["type"],
|
||||
"gameRankingList": ranking_list,
|
||||
}
|
||||
|
||||
|
||||
def handle_get_game_point_api_request(self, data: Dict) -> Dict:
|
||||
get_game_point = self.data.static.get_static_game_point()
|
||||
game_point = []
|
||||
|
||||
if not get_game_point:
|
||||
self.logger.info(f"GP table is empty, inserting defaults")
|
||||
self.data.static.put_static_game_point_defaults()
|
||||
get_game_point = self.data.static.get_static_game_point()
|
||||
for gp in get_game_point:
|
||||
tmp = gp._asdict()
|
||||
game_point.append(tmp)
|
||||
return {
|
||||
"length": len(game_point),
|
||||
"gamePointList": game_point,
|
||||
}
|
||||
for gp in get_game_point:
|
||||
tmp = gp._asdict()
|
||||
game_point.append(tmp)
|
||||
return {
|
||||
"length": len(game_point),
|
||||
"gamePointList": game_point,
|
||||
}
|
||||
|
||||
def handle_game_login_api_request(self, data: Dict) -> Dict:
|
||||
return {"returnCode": 1, "apiName": "gameLogin"}
|
||||
|
||||
@ -215,11 +205,39 @@ class OngekiBase:
|
||||
return {"returnCode": 1, "apiName": "ExtendLockTimeApi"}
|
||||
|
||||
def handle_get_game_reward_api_request(self, data: Dict) -> Dict:
|
||||
# TODO: reward list
|
||||
return {"length": 0, "gameRewardList": []}
|
||||
get_game_rewards = self.data.static.get_reward_list(self.version)
|
||||
|
||||
reward_list = []
|
||||
for reward in get_game_rewards:
|
||||
tmp = reward._asdict()
|
||||
tmp.pop("id")
|
||||
tmp.pop("version")
|
||||
tmp.pop("rewardname")
|
||||
reward_list.append(tmp)
|
||||
|
||||
if reward_list is None:
|
||||
return {"length": 0, "gameRewardList": []}
|
||||
return {
|
||||
"length": len(reward_list),
|
||||
"gameRewardList": reward_list,
|
||||
}
|
||||
|
||||
def handle_get_game_present_api_request(self, data: Dict) -> Dict:
|
||||
return {"length": 0, "gamePresentList": []}
|
||||
get_present = self.data.static.get_present_list(self.version)
|
||||
|
||||
present_list = []
|
||||
for present in get_present:
|
||||
tmp = present._asdict()
|
||||
tmp.pop("id")
|
||||
tmp.pop("version")
|
||||
present_list.append(tmp)
|
||||
|
||||
if present_list is None:
|
||||
return {"length": 0, "gamePresentList": []}
|
||||
return {
|
||||
"length": len(present_list),
|
||||
"gamePresentList": present_list,
|
||||
}
|
||||
|
||||
def handle_get_game_message_api_request(self, data: Dict) -> Dict:
|
||||
return {"length": 0, "gameMessageList": []}
|
||||
@ -228,12 +246,39 @@ class OngekiBase:
|
||||
return {"length": 0, "gameSaleList": []}
|
||||
|
||||
def handle_get_game_tech_music_api_request(self, data: Dict) -> Dict:
|
||||
return {"length": 0, "gameTechMusicList": []}
|
||||
music_list = self.data.static.get_tech_music(self.version)
|
||||
|
||||
prep_music_list = []
|
||||
for music in music_list:
|
||||
tmp = music._asdict()
|
||||
tmp.pop("id")
|
||||
tmp.pop("version")
|
||||
prep_music_list.append(tmp)
|
||||
|
||||
if prep_music_list is None:
|
||||
return {"length": 0, "gameTechMusicList": []}
|
||||
|
||||
return {
|
||||
"length": len(prep_music_list),
|
||||
"gameTechMusicList": prep_music_list,
|
||||
}
|
||||
|
||||
def handle_upsert_client_setting_api_request(self, data: Dict) -> Dict:
|
||||
if self.core_cfg.server.is_develop:
|
||||
return {"returnCode": 1, "apiName": "UpsertClientSettingApi"}
|
||||
|
||||
client_id = data["clientId"]
|
||||
client_setting_data = data["clientSetting"]
|
||||
self.data.static.put_client_setting_data(client_id, client_setting_data)
|
||||
return {"returnCode": 1, "apiName": "UpsertClientSettingApi"}
|
||||
|
||||
def handle_upsert_client_testmode_api_request(self, data: Dict) -> Dict:
|
||||
if self.core_cfg.server.is_develop:
|
||||
return {"returnCode": 1, "apiName": "UpsertClientTestmodeApi"}
|
||||
|
||||
region_id = data["regionId"]
|
||||
client_testmode_data = data["clientTestmode"]
|
||||
self.data.static.put_client_testmode_data(region_id, client_testmode_data)
|
||||
return {"returnCode": 1, "apiName": "UpsertClientTestmodeApi"}
|
||||
|
||||
def handle_upsert_client_bookkeeping_api_request(self, data: Dict) -> Dict:
|
||||
@ -277,13 +322,12 @@ class OngekiBase:
|
||||
"id": event["eventId"],
|
||||
# actually use the startDate from the import so it
|
||||
# properly shows all the events when new ones are imported
|
||||
"startDate": datetime.strftime(
|
||||
event["startDate"], "%Y-%m-%d %H:%M:%S.0"
|
||||
),
|
||||
"endDate": "2099-12-31 00:00:00.0",
|
||||
"startDate": datetime.strftime(event["startDate"], "%Y-%m-%d %H:%M:%S.0"),
|
||||
#"endDate": "2099-12-31 00:00:00.0",
|
||||
"endDate": datetime.strftime(event["endDate"], "%Y-%m-%d %H:%M:%S.0"),
|
||||
}
|
||||
)
|
||||
|
||||
|
||||
return {
|
||||
"type": data["type"],
|
||||
"length": len(evt_list),
|
||||
@ -385,7 +429,7 @@ class OngekiBase:
|
||||
}
|
||||
|
||||
def handle_get_user_tech_event_api_request(self, data: Dict) -> Dict:
|
||||
user_tech_event_list = self.data.item.get_tech_event(data["userId"])
|
||||
user_tech_event_list = self.data.item.get_tech_event(self.version, data["userId"])
|
||||
if user_tech_event_list is None:
|
||||
return {}
|
||||
|
||||
@ -394,6 +438,7 @@ class OngekiBase:
|
||||
tmp = evt._asdict()
|
||||
tmp.pop("id")
|
||||
tmp.pop("user")
|
||||
tmp.pop("version")
|
||||
tech_evt.append(tmp)
|
||||
|
||||
return {
|
||||
@ -403,15 +448,24 @@ class OngekiBase:
|
||||
}
|
||||
|
||||
def handle_get_user_tech_event_ranking_api_request(self, data: Dict) -> Dict:
|
||||
# user_event_ranking_list = self.data.item.get_tech_event_ranking(data["userId"])
|
||||
# if user_event_ranking_list is None: return {}
|
||||
user_tech_event_ranks = self.data.item.get_tech_event_ranking(self.version, data["userId"])
|
||||
if user_tech_event_ranks is None:
|
||||
return {
|
||||
"userId": data["userId"],
|
||||
"length": 0,
|
||||
"userTechEventRankingList": [],
|
||||
}
|
||||
|
||||
# collect the whole table and clear other players, to preserve proper ranking
|
||||
evt_ranking = []
|
||||
# for evt in user_event_ranking_list:
|
||||
# tmp = evt._asdict()
|
||||
# tmp.pop("id")
|
||||
# tmp.pop("user")
|
||||
# evt_ranking.append(tmp)
|
||||
for evt in user_tech_event_ranks:
|
||||
tmp = evt._asdict()
|
||||
if tmp["user"] != data["userId"]:
|
||||
tmp.clear()
|
||||
else:
|
||||
tmp.pop("id")
|
||||
tmp.pop("user")
|
||||
evt_ranking.append(tmp)
|
||||
|
||||
return {
|
||||
"userId": data["userId"],
|
||||
@ -533,20 +587,26 @@ class OngekiBase:
|
||||
return {"userId": data["userId"], "userData": user_data}
|
||||
|
||||
def handle_get_user_event_ranking_api_request(self, data: Dict) -> Dict:
|
||||
# user_event_ranking_list = self.data.item.get_event_ranking(data["userId"])
|
||||
# if user_event_ranking_list is None: return {}
|
||||
user_event_ranking_list = self.data.item.get_ranking_event_ranks(self.version, data["userId"])
|
||||
if user_event_ranking_list is None:
|
||||
return {}
|
||||
|
||||
evt_ranking = []
|
||||
# for evt in user_event_ranking_list:
|
||||
# tmp = evt._asdict()
|
||||
# tmp.pop("id")
|
||||
# tmp.pop("user")
|
||||
# evt_ranking.append(tmp)
|
||||
# We collect the whole ranking table, and clear out any not needed data, this way we preserve the proper ranking
|
||||
# In official spec this should be done server side, in maintenance period
|
||||
prep_event_ranking = []
|
||||
for evt in user_event_ranking_list:
|
||||
tmp = evt._asdict()
|
||||
if tmp["user"] != data["userId"]:
|
||||
tmp.clear()
|
||||
else:
|
||||
tmp.pop("id")
|
||||
tmp.pop("user")
|
||||
prep_event_ranking.append(tmp)
|
||||
|
||||
return {
|
||||
"userId": data["userId"],
|
||||
"length": len(evt_ranking),
|
||||
"userEventRankingList": evt_ranking,
|
||||
"length": len(prep_event_ranking),
|
||||
"userEventRankingList": prep_event_ranking,
|
||||
}
|
||||
|
||||
def handle_get_user_login_bonus_api_request(self, data: Dict) -> Dict:
|
||||
@ -777,7 +837,7 @@ class OngekiBase:
|
||||
}
|
||||
|
||||
def handle_get_user_mission_point_api_request(self, data: Dict) -> Dict:
|
||||
user_mission_point_list = self.data.item.get_mission_points(data["userId"])
|
||||
user_mission_point_list = self.data.item.get_mission_points(self.version, data["userId"])
|
||||
if user_mission_point_list is None:
|
||||
return {}
|
||||
|
||||
@ -786,8 +846,10 @@ class OngekiBase:
|
||||
tmp = evt_music._asdict()
|
||||
tmp.pop("id")
|
||||
tmp.pop("user")
|
||||
tmp.pop("version")
|
||||
mission_point_list.append(tmp)
|
||||
|
||||
|
||||
return {
|
||||
"userId": data["userId"],
|
||||
"length": len(mission_point_list),
|
||||
@ -804,6 +866,10 @@ class OngekiBase:
|
||||
tmp = evt_music._asdict()
|
||||
tmp.pop("id")
|
||||
tmp.pop("user")
|
||||
# pop other stuff event_point doesn't want
|
||||
tmp.pop("rank")
|
||||
tmp.pop("type")
|
||||
tmp.pop("date")
|
||||
event_point_list.append(tmp)
|
||||
|
||||
return {
|
||||
@ -951,11 +1017,11 @@ class OngekiBase:
|
||||
|
||||
if "userEventPointList" in upsert:
|
||||
for x in upsert["userEventPointList"]:
|
||||
self.data.item.put_event_point(user_id, x)
|
||||
self.data.item.put_event_point(user_id, self.version, x)
|
||||
|
||||
if "userMissionPointList" in upsert:
|
||||
for x in upsert["userMissionPointList"]:
|
||||
self.data.item.put_mission_point(user_id, x)
|
||||
self.data.item.put_mission_point(user_id, self.version, x)
|
||||
|
||||
if "userRatinglogList" in upsert:
|
||||
for x in upsert["userRatinglogList"]:
|
||||
@ -985,7 +1051,10 @@ class OngekiBase:
|
||||
|
||||
if "userTechEventList" in upsert:
|
||||
for x in upsert["userTechEventList"]:
|
||||
self.data.item.put_tech_event(user_id, x)
|
||||
self.data.item.put_tech_event(user_id, self.version, x)
|
||||
|
||||
# This should be updated once a day in maintenance window, but for time being we will push the update on each upsert
|
||||
self.data.item.put_tech_event_ranking(user_id, self.version, x)
|
||||
|
||||
if "userKopList" in upsert:
|
||||
for x in upsert["userKopList"]:
|
||||
|
@ -21,6 +21,12 @@ class OngekiServerConfig:
|
||||
self.__config, "ongeki", "server", "loglevel", default="info"
|
||||
)
|
||||
)
|
||||
|
||||
@property
|
||||
def use_https(self) -> bool:
|
||||
return CoreConfig.get_config_field(
|
||||
self.__config, "ongeki", "server", "use_https", default=False
|
||||
)
|
||||
|
||||
|
||||
class OngekiGachaConfig:
|
||||
|
@ -19,7 +19,6 @@ class OngekiConstants:
|
||||
EVT_TYPES: Enum = Enum(
|
||||
"EVT_TYPES",
|
||||
[
|
||||
"None",
|
||||
"Announcement",
|
||||
"Movie",
|
||||
"AddMyList",
|
||||
@ -39,6 +38,36 @@ class OngekiConstants:
|
||||
"TechChallengeEvent",
|
||||
"AcceptTechChallengeEvent",
|
||||
"SilverJewelEvent",
|
||||
"Max",
|
||||
"None",
|
||||
],
|
||||
)
|
||||
|
||||
REWARD_TYPES: Enum = Enum(
|
||||
"REWARD_TYPES",
|
||||
[
|
||||
"Card",
|
||||
"NamePlate",
|
||||
"Trophy",
|
||||
"LimitBreakItem",
|
||||
"AlmightyJewel",
|
||||
"Money",
|
||||
"Music",
|
||||
"ProfileVoice",
|
||||
"Present",
|
||||
"ChapterJewel",
|
||||
"GachaTicket",
|
||||
"KaikaItem",
|
||||
"ExpUpItem",
|
||||
"IntimateUpItem",
|
||||
"BookItem",
|
||||
"SystemVoice",
|
||||
"Costume",
|
||||
"Medal",
|
||||
"Attachment",
|
||||
"UnlockItem",
|
||||
"Max",
|
||||
"None",
|
||||
],
|
||||
)
|
||||
|
||||
|
@ -127,15 +127,19 @@ class OngekiServlet(BaseServlet):
|
||||
)
|
||||
|
||||
def get_allnet_info(self, game_code: str, game_ver: int, keychip: str) -> Tuple[str, str]:
|
||||
if not self.core_cfg.server.is_using_proxy and Utils.get_title_port(self.core_cfg) != 80:
|
||||
return (
|
||||
f"http://{self.core_cfg.title.hostname}:{Utils.get_title_port(self.core_cfg)}/{game_code}/{game_ver}/",
|
||||
f"{self.core_cfg.title.hostname}:{Utils.get_title_port(self.core_cfg)}/",
|
||||
)
|
||||
title_port_int = Utils.get_title_port(self.core_cfg)
|
||||
title_port_ssl_int = Utils.get_title_port_ssl(self.core_cfg)
|
||||
proto = "https" if self.game_cfg.server.use_https and game_ver >= 120 else "http"
|
||||
|
||||
if proto == "https":
|
||||
t_port = f":{title_port_ssl_int}" if title_port_ssl_int and not self.core_cfg.server.is_using_proxy else ""
|
||||
|
||||
else:
|
||||
t_port = f":{title_port_int}" if title_port_int and not self.core_cfg.server.is_using_proxy else ""
|
||||
|
||||
return (
|
||||
f"http://{self.core_cfg.title.hostname}/{game_code}/{game_ver}/",
|
||||
f"{self.core_cfg.title.hostname}/",
|
||||
f"{proto}://{self.core_cfg.title.hostname}{t_port}/{game_code}/{game_ver}/",
|
||||
f"{self.core_cfg.title.hostname}{t_port}/",
|
||||
)
|
||||
|
||||
def render_POST(self, request: Request, game_code: str, matchers: Dict) -> bytes:
|
||||
@ -204,6 +208,7 @@ class OngekiServlet(BaseServlet):
|
||||
if (
|
||||
not encrtped
|
||||
and self.game_cfg.crypto.encrypted_only
|
||||
and version >= 120
|
||||
):
|
||||
self.logger.error(
|
||||
f"Unencrypted v{version} {endpoint} request, but config is set to encrypted only: {req_raw}"
|
||||
@ -247,7 +252,7 @@ class OngekiServlet(BaseServlet):
|
||||
|
||||
zipped = zlib.compress(json.dumps(resp, ensure_ascii=False).encode("utf-8"))
|
||||
|
||||
if not encrtped:
|
||||
if not encrtped or version < 120:
|
||||
return zipped
|
||||
|
||||
padded = pad(zipped, 16)
|
||||
|
@ -44,6 +44,7 @@ class OngekiReader(BaseReader):
|
||||
self.read_events(f"{dir}/event")
|
||||
self.read_music(f"{dir}/music")
|
||||
self.read_card(f"{dir}/card")
|
||||
self.read_reward(f"{dir}/reward")
|
||||
|
||||
def read_card(self, base_dir: str) -> None:
|
||||
self.logger.info(f"Reading cards from {base_dir}...")
|
||||
@ -171,3 +172,28 @@ class OngekiReader(BaseReader):
|
||||
self.version, song_id, chart_id, title, artist, genre, level
|
||||
)
|
||||
self.logger.info(f"Added song {song_id} chart {chart_id}")
|
||||
|
||||
def read_reward(self, base_dir: str) -> None:
|
||||
self.logger.info(f"Reading rewards from {base_dir}...")
|
||||
|
||||
for root, dirs, files in os.walk(base_dir):
|
||||
for dir in dirs:
|
||||
if os.path.exists(f"{root}/{dir}/Reward.xml"):
|
||||
strdata = ""
|
||||
|
||||
with open(f"{root}/{dir}/Reward.xml", "r", encoding="utf-8") as f:
|
||||
strdata = f.read()
|
||||
|
||||
troot = ET.fromstring(strdata)
|
||||
|
||||
if root is None:
|
||||
continue
|
||||
|
||||
name = troot.find("Name")
|
||||
rewardId = name.find("id").text
|
||||
rewardname = name.find("str").text
|
||||
itemKind = OngekiConstants.REWARD_TYPES[troot.find("ItemType").text].value
|
||||
itemId = troot.find("RewardItem").find("ItemName").find("id").text
|
||||
|
||||
self.data.static.put_reward(self.version, rewardId, rewardname, itemKind, itemId)
|
||||
self.logger.info(f"Added reward {rewardId}")
|
||||
|
@ -1,3 +1,4 @@
|
||||
from datetime import date, datetime, timedelta
|
||||
from typing import Dict, Optional, List
|
||||
from sqlalchemy import Table, Column, UniqueConstraint, PrimaryKeyConstraint, and_
|
||||
from sqlalchemy.types import Integer, String, TIMESTAMP, Boolean, JSON
|
||||
@ -170,8 +171,12 @@ event_point = Table(
|
||||
metadata,
|
||||
Column("id", Integer, primary_key=True, nullable=False),
|
||||
Column("user", ForeignKey("aime_user.id", ondelete="cascade", onupdate="cascade")),
|
||||
Column("eventId", Integer),
|
||||
Column("point", Integer),
|
||||
Column("version", Integer, nullable=False),
|
||||
Column("eventId", Integer, nullable=False),
|
||||
Column("point", Integer, nullable=False),
|
||||
Column("rank", Integer),
|
||||
Column("type", Integer, nullable=False),
|
||||
Column("date", String(25)),
|
||||
Column("isRankingRewarded", Boolean),
|
||||
UniqueConstraint("user", "eventId", name="ongeki_user_event_point_uk"),
|
||||
mysql_charset="utf8mb4",
|
||||
@ -182,6 +187,7 @@ mission_point = Table(
|
||||
metadata,
|
||||
Column("id", Integer, primary_key=True, nullable=False),
|
||||
Column("user", ForeignKey("aime_user.id", ondelete="cascade", onupdate="cascade")),
|
||||
Column("version", Integer),
|
||||
Column("eventId", Integer),
|
||||
Column("point", Integer),
|
||||
UniqueConstraint("user", "eventId", name="ongeki_user_mission_point_uk"),
|
||||
@ -237,9 +243,10 @@ tech_event = Table(
|
||||
metadata,
|
||||
Column("id", Integer, primary_key=True, nullable=False),
|
||||
Column("user", ForeignKey("aime_user.id", ondelete="cascade", onupdate="cascade")),
|
||||
Column("eventId", Integer),
|
||||
Column("totalTechScore", Integer),
|
||||
Column("totalPlatinumScore", Integer),
|
||||
Column("version", Integer, nullable=False),
|
||||
Column("eventId", Integer, nullable=False),
|
||||
Column("totalTechScore", Integer, nullable=False),
|
||||
Column("totalPlatinumScore", Integer, nullable=False),
|
||||
Column("techRecordDate", String(25)),
|
||||
Column("isRankingRewarded", Boolean),
|
||||
Column("isTotalTechNewRecord", Boolean),
|
||||
@ -247,6 +254,21 @@ tech_event = Table(
|
||||
mysql_charset="utf8mb4",
|
||||
)
|
||||
|
||||
tech_ranking = Table(
|
||||
"ongeki_tech_event_ranking",
|
||||
metadata,
|
||||
Column("id", Integer, primary_key=True, nullable=False),
|
||||
Column("user", ForeignKey("aime_user.id", ondelete="cascade", onupdate="cascade"), nullable=False),
|
||||
Column("version", Integer, nullable=False),
|
||||
Column("date", String(25)),
|
||||
Column("eventId", Integer, nullable=False),
|
||||
Column("rank", Integer),
|
||||
Column("totalPlatinumScore", Integer, nullable=False),
|
||||
Column("totalTechScore", Integer, nullable=False),
|
||||
UniqueConstraint("user", "eventId", name="ongeki_tech_event_ranking_uk"),
|
||||
mysql_charset="utf8mb4",
|
||||
)
|
||||
|
||||
gacha = Table(
|
||||
"ongeki_user_gacha",
|
||||
metadata,
|
||||
@ -316,7 +338,6 @@ print_detail = Table(
|
||||
mysql_charset="utf8mb4",
|
||||
)
|
||||
|
||||
|
||||
class OngekiItemData(BaseData):
|
||||
def put_card(self, aime_id: int, card_data: Dict) -> Optional[int]:
|
||||
card_data["user"] = aime_id
|
||||
@ -511,9 +532,8 @@ class OngekiItemData(BaseData):
|
||||
return None
|
||||
return result.fetchall()
|
||||
|
||||
def put_mission_point(
|
||||
self, aime_id: int, mission_point_data: Dict
|
||||
) -> Optional[int]:
|
||||
def put_mission_point(self, aime_id: int, version: int, mission_point_data: Dict) -> Optional[int]:
|
||||
mission_point_data["version"] = version
|
||||
mission_point_data["user"] = aime_id
|
||||
|
||||
sql = insert(mission_point).values(**mission_point_data)
|
||||
@ -525,16 +545,22 @@ class OngekiItemData(BaseData):
|
||||
return None
|
||||
return result.lastrowid
|
||||
|
||||
def get_mission_points(self, aime_id: int) -> Optional[List[Dict]]:
|
||||
sql = select(mission_point).where(mission_point.c.user == aime_id)
|
||||
def get_mission_points(self, version: int, aime_id: int) -> Optional[List[Dict]]:
|
||||
sql = select(mission_point).where(and_(mission_point.c.user == aime_id, mission_point.c.version == version))
|
||||
result = self.execute(sql)
|
||||
|
||||
if result is None:
|
||||
return None
|
||||
return result.fetchall()
|
||||
|
||||
def put_event_point(self, aime_id: int, event_point_data: Dict) -> Optional[int]:
|
||||
def put_event_point(self, aime_id: int, version: int, event_point_data: Dict) -> Optional[int]:
|
||||
# We update only the newest (type: 1) entry, in official spec game watches for both latest(type:1) and previous (type:2) entries to give an additional info how many ranks has player moved up or down
|
||||
# This fully featured is on TODO list, at the moment we just update the tables as data comes and give out rank as request comes
|
||||
event_point_data["user"] = aime_id
|
||||
event_point_data["version"] = version
|
||||
event_point_data["type"] = 1
|
||||
event_point_time = datetime.now()
|
||||
event_point_data["date"] = datetime.strftime(event_point_time, "%Y-%m-%d %H:%M")
|
||||
|
||||
sql = insert(event_point).values(**event_point_data)
|
||||
conflict = sql.on_duplicate_key_update(**event_point_data)
|
||||
@ -625,8 +651,25 @@ class OngekiItemData(BaseData):
|
||||
return None
|
||||
return result.lastrowid
|
||||
|
||||
def get_tech_event(self, aime_id: int) -> Optional[List[Dict]]:
|
||||
sql = select(tech_event).where(tech_event.c.user == aime_id)
|
||||
def put_tech_event_ranking(self, version: int, aime_id: int, tech_event_data: Dict) -> Optional[int]:
|
||||
tech_event_data["user"] = aime_id
|
||||
tech_event_data["version"] = version
|
||||
tech_event_data.pop("isRankingRewarded")
|
||||
tech_event_data.pop("isTotalTechNewRecord")
|
||||
tech_event_data["date"] = tech_event_data.pop("techRecordDate")
|
||||
tech_event_data["rank"] = 0
|
||||
|
||||
sql = insert(tech_ranking).values(**tech_event_data)
|
||||
conflict = sql.on_duplicate_key_update(**tech_event_data)
|
||||
result = self.execute(conflict)
|
||||
|
||||
if result is None:
|
||||
self.logger.warning(f"put_tech_event_ranking: Failed to update ranking! aime_id {aime_id}")
|
||||
return None
|
||||
return result.lastrowid
|
||||
|
||||
def get_tech_event(self, version: int, aime_id: int) -> Optional[List[Dict]]:
|
||||
sql = select(tech_event).where(and_(tech_event.c.user == aime_id, tech_event.c.version == version))
|
||||
result = self.execute(sql)
|
||||
|
||||
if result is None:
|
||||
@ -714,3 +757,21 @@ class OngekiItemData(BaseData):
|
||||
)
|
||||
return None
|
||||
return result.lastrowid
|
||||
|
||||
|
||||
def get_ranking_event_ranks(self, version: int, aime_id: int) -> Optional[List[Dict]]:
|
||||
# Calculates player rank on GameRequest from server, and sends it back, official spec would rank players in maintenance period, on TODO list
|
||||
sql = select(event_point.c.id, event_point.c.user, event_point.c.eventId, event_point.c.type, func.row_number().over(partition_by=event_point.c.eventId, order_by=event_point.c.point.desc()).label('rank'), event_point.c.date, event_point.c.point).where(event_point.c.version == version)
|
||||
result = self.execute(sql)
|
||||
if result is None:
|
||||
self.logger.error(f"failed to rank aime_id: {aime_id} ranking event positions")
|
||||
return None
|
||||
return result.fetchall()
|
||||
|
||||
def get_tech_event_ranking(self, version: int, aime_id: int) -> Optional[List[Dict]]:
|
||||
sql = select(tech_ranking.c.id, tech_ranking.c.user, tech_ranking.c.date, tech_ranking.c.eventId, func.row_number().over(partition_by=tech_ranking.c.eventId, order_by=[tech_ranking.c.totalTechScore.desc(),tech_ranking.c.totalPlatinumScore.desc()]).label('rank'), tech_ranking.c.totalTechScore, tech_ranking.c.totalPlatinumScore).where(tech_ranking.c.version == version)
|
||||
result = self.execute(sql)
|
||||
if result is None:
|
||||
self.logger.warning(f"aime_id: {aime_id} has no tech ranking ranks")
|
||||
return None
|
||||
return result.fetchall()
|
||||
|
@ -17,6 +17,7 @@ events = Table(
|
||||
Column("type", Integer),
|
||||
Column("name", String(255)),
|
||||
Column("startDate", TIMESTAMP, server_default=func.now()),
|
||||
Column("endDate", TIMESTAMP, server_default=func.now()),
|
||||
Column("enabled", Boolean, server_default="1"),
|
||||
UniqueConstraint("version", "eventId", "type", name="ongeki_static_events_uk"),
|
||||
mysql_charset="utf8mb4",
|
||||
@ -96,6 +97,94 @@ cards = Table(
|
||||
mysql_charset="utf8mb4",
|
||||
)
|
||||
|
||||
music_ranking = Table(
|
||||
"ongeki_static_music_ranking_list",
|
||||
metadata,
|
||||
Column("id", Integer, primary_key=True, nullable=False),
|
||||
Column("version", Integer, nullable=False),
|
||||
Column("musicId", Integer, nullable=False),
|
||||
Column("point", Integer, nullable=False),
|
||||
Column("userName", String(255)),
|
||||
UniqueConstraint("version", "musicId", name="ongeki_static_music_ranking_uk"),
|
||||
mysql_charset="utf8mb4",
|
||||
)
|
||||
|
||||
rewards = Table(
|
||||
"ongeki_static_rewards",
|
||||
metadata,
|
||||
Column("id", Integer, primary_key=True, nullable=False),
|
||||
Column("version", Integer, nullable=False),
|
||||
Column("rewardId", Integer, nullable=False),
|
||||
Column("rewardname", String(255), nullable=False),
|
||||
Column("itemKind", Integer, nullable=False),
|
||||
Column("itemId", Integer, nullable=False),
|
||||
UniqueConstraint("version", "rewardId", name="ongeki_static_rewards_uk"),
|
||||
mysql_charset="utf8mb4",
|
||||
)
|
||||
|
||||
present = Table(
|
||||
"ongeki_static_present_list",
|
||||
metadata,
|
||||
Column("id", Integer, primary_key=True, nullable=False),
|
||||
Column("version", Integer, nullable=False),
|
||||
Column("presentId", Integer, nullable=False),
|
||||
Column("presentName", String(255), nullable=False),
|
||||
Column("rewardId", Integer, nullable=False),
|
||||
Column("stock", Integer, nullable=False),
|
||||
Column("message", String(255)),
|
||||
Column("startDate", String(25), nullable=False),
|
||||
Column("endDate", String(25), nullable=False),
|
||||
UniqueConstraint("version", "presentId", name="ongeki_static_present_list_uk"),
|
||||
mysql_charset="utf8mb4",
|
||||
)
|
||||
|
||||
tech_music = Table(
|
||||
"ongeki_static_tech_music",
|
||||
metadata,
|
||||
Column("id", Integer, primary_key=True, nullable=False),
|
||||
Column("version", Integer, nullable=False),
|
||||
Column("eventId", Integer, nullable=False),
|
||||
Column("musicId", Integer, nullable=False),
|
||||
Column("level", Integer, nullable=False),
|
||||
UniqueConstraint("version", "musicId", name="ongeki_static_tech_music_uk"),
|
||||
mysql_charset="utf8mb4",
|
||||
)
|
||||
|
||||
client_testmode = Table(
|
||||
"ongeki_static_client_testmode",
|
||||
metadata,
|
||||
Column("id", Integer, primary_key=True, nullable=False),
|
||||
Column("regionId", Integer, nullable=False),
|
||||
Column("placeId", Integer, nullable=False),
|
||||
Column("clientId", String(11), nullable=False),
|
||||
Column("updateDate", TIMESTAMP, nullable=False),
|
||||
Column("isDelivery", Boolean, nullable=False),
|
||||
Column("groupId", Integer, nullable=False),
|
||||
Column("groupRole", Integer, nullable=False),
|
||||
Column("continueMode", Integer, nullable=False),
|
||||
Column("selectMusicTime", Integer, nullable=False),
|
||||
Column("advertiseVolume", Integer, nullable=False),
|
||||
Column("eventMode", Integer, nullable=False),
|
||||
Column("eventMusicNum", Integer, nullable=False),
|
||||
Column("patternGp", Integer, nullable=False),
|
||||
Column("limitGp", Integer, nullable=False),
|
||||
Column("maxLeverMovable", Integer, nullable=False),
|
||||
Column("minLeverMovable", Integer, nullable=False),
|
||||
UniqueConstraint("clientId", name="ongeki_static_client_testmode_uk"),
|
||||
mysql_charset="utf8mb4",
|
||||
)
|
||||
|
||||
game_point = Table(
|
||||
"ongeki_static_game_point",
|
||||
metadata,
|
||||
Column("id", Integer, primary_key=True, nullable=False),
|
||||
Column("type", Integer, nullable=False),
|
||||
Column("cost", Integer, nullable=False),
|
||||
Column("startDate", String(25), nullable=False, server_default="2000-01-01 05:00:00.0"),
|
||||
Column("endDate", String(25), nullable=False, server_default="2099-01-01 05:00:00.0"),
|
||||
UniqueConstraint("type", name="ongeki_static_game_point_uk"),
|
||||
mysql_charset="utf8mb4",
|
||||
)
|
||||
|
||||
class OngekiStaticData(BaseData):
|
||||
def put_card(self, version: int, card_id: int, **card_data) -> Optional[int]:
|
||||
@ -235,6 +324,7 @@ class OngekiStaticData(BaseData):
|
||||
eventId=event_id,
|
||||
type=event_type,
|
||||
name=event_name,
|
||||
endDate=f"2038-01-01 00:00:00",
|
||||
)
|
||||
|
||||
conflict = sql.on_duplicate_key_update(
|
||||
@ -333,3 +423,90 @@ class OngekiStaticData(BaseData):
|
||||
if result is None:
|
||||
return None
|
||||
return result.fetchone()
|
||||
|
||||
def get_ranking_list(self, version: int) -> Optional[List[Dict]]:
|
||||
sql = select(music_ranking.c.musicId.label('id'), music_ranking.c.point, music_ranking.c.userName).where(music_ranking.c.version == version)
|
||||
result = self.execute(sql)
|
||||
if result is None:
|
||||
return None
|
||||
return result.fetchall()
|
||||
|
||||
def put_reward(self, version: int, rewardId: int, rewardname: str, itemKind: int, itemId: int) -> Optional[int]:
|
||||
sql = insert(rewards).values(
|
||||
version=version,
|
||||
rewardId=rewardId,
|
||||
rewardname=rewardname,
|
||||
itemKind=itemKind,
|
||||
itemId=itemId,
|
||||
)
|
||||
conflict = sql.on_duplicate_key_update(
|
||||
rewardname=rewardname,
|
||||
)
|
||||
result = self.execute(conflict)
|
||||
if result is None:
|
||||
self.logger.warning(f"Failed to insert reward! reward_id: {rewardId}")
|
||||
return None
|
||||
return result.lastrowid
|
||||
|
||||
def get_reward_list(self, version: int) -> Optional[List[Dict]]:
|
||||
sql = select(rewards).where(rewards.c.version == version)
|
||||
|
||||
result = self.execute(sql)
|
||||
if result is None:
|
||||
self.logger.warning(f"Failed to load reward list")
|
||||
return None
|
||||
return result.fetchall()
|
||||
|
||||
def get_present_list(self, version: int) -> Optional[List[Dict]]:
|
||||
sql = select(present).where(present.c.version == version)
|
||||
|
||||
result = self.execute(sql)
|
||||
if result is None:
|
||||
self.logger.warning(f"Failed to load present list")
|
||||
return None
|
||||
return result.fetchall()
|
||||
|
||||
def get_tech_music(self, version: int) -> Optional[List[Dict]]:
|
||||
sql = select(tech_music).where(tech_music.c.version == version)
|
||||
|
||||
result = self.execute(sql)
|
||||
|
||||
if result is None:
|
||||
return None
|
||||
return result.fetchall()
|
||||
|
||||
def put_client_testmode_data(self, region_id: int, client_testmode_data: Dict) -> Optional[List[Dict]]:
|
||||
sql = insert(client_testmode).values(regionId=region_id, **client_testmode_data)
|
||||
conflict = sql.on_duplicate_key_update(regionId=region_id, **client_testmode_data)
|
||||
|
||||
result = self.execute(conflict)
|
||||
if result is None:
|
||||
self.logger.warning(f"clientId: {clientId} Failed to update ClientTestMode data"),
|
||||
return None
|
||||
return result.lastrowid
|
||||
|
||||
def put_client_setting_data(self, client_id: str, client_setting_data: Dict) -> Optional[List[Dict]]:
|
||||
sql = insert(machine).values(data=client_setting_data)
|
||||
conflict = sql.on_duplicate_key_update(serial=client_id)
|
||||
|
||||
result = self.execute(conflict)
|
||||
if result is None:
|
||||
self.logger.warning(f"clientId: {clientId} Failed to update ClientSetting data"),
|
||||
return None
|
||||
return result.lastrowid
|
||||
|
||||
def put_static_game_point_defaults(self) -> Optional[List[Dict]]:
|
||||
game_point_defaults = [{"type": 0, "cost": 100},{"type": 1, "cost": 230},{"type": 2, "cost": 370},{"type": 3, "cost": 120},{"type": 4, "cost": 240},{"type": 5, "cost": 360}]
|
||||
sql = insert(game_point).values(game_point_defaults)
|
||||
result = self.execute(sql)
|
||||
if result is None:
|
||||
self.logger.warning(f"Failed to insert default GP table!")
|
||||
return None
|
||||
return result.lastrowid
|
||||
|
||||
def get_static_game_point(self) -> Optional[List[Dict]]:
|
||||
sql = select(game_point.c.type, game_point.c.cost, game_point.c.startDate, game_point.c.endDate)
|
||||
result = self.execute(sql)
|
||||
if result is None:
|
||||
return None
|
||||
return result.fetchall()
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -5,12 +5,6 @@ class SaoServerConfig:
|
||||
def __init__(self, parent_config: "SaoConfig"):
|
||||
self.__config = parent_config
|
||||
|
||||
@property
|
||||
def hostname(self) -> str:
|
||||
return CoreConfig.get_config_field(
|
||||
self.__config, "sao", "server", "hostname", default="localhost"
|
||||
)
|
||||
|
||||
@property
|
||||
def enable(self) -> bool:
|
||||
return CoreConfig.get_config_field(
|
||||
@ -25,12 +19,6 @@ class SaoServerConfig:
|
||||
)
|
||||
)
|
||||
|
||||
@property
|
||||
def port(self) -> int:
|
||||
return CoreConfig.get_config_field(
|
||||
self.__config, "sao", "server", "port", default=9000
|
||||
)
|
||||
|
||||
@property
|
||||
def auto_register(self) -> bool:
|
||||
"""
|
||||
@ -41,7 +29,47 @@ class SaoServerConfig:
|
||||
self.__config, "sao", "server", "auto_register", default=True
|
||||
)
|
||||
|
||||
class SaoCryptConfig:
|
||||
def __init__(self, parent_config: "SaoConfig"):
|
||||
self.__config = parent_config
|
||||
|
||||
@property
|
||||
def enable(self) -> bool:
|
||||
return CoreConfig.get_config_field(
|
||||
self.__config, "sao", "crypt", "enable", default=False
|
||||
)
|
||||
|
||||
@property
|
||||
def key(self) -> str:
|
||||
return CoreConfig.get_config_field(
|
||||
self.__config, "sao", "crypt", "key", default=""
|
||||
)
|
||||
|
||||
@property
|
||||
def iv(self) -> str:
|
||||
return CoreConfig.get_config_field(
|
||||
self.__config, "sao", "crypt", "iv", default=""
|
||||
)
|
||||
|
||||
class SaoHashConfig:
|
||||
def __init__(self, parent_config: "SaoConfig"):
|
||||
self.__config = parent_config
|
||||
|
||||
@property
|
||||
def verify_hash(self) -> bool:
|
||||
return CoreConfig.get_config_field(
|
||||
self.__config, "sao", "hash", "verify_hash", default=False
|
||||
)
|
||||
|
||||
@property
|
||||
def hash_base(self) -> str:
|
||||
return CoreConfig.get_config_field(
|
||||
self.__config, "sao", "hash", "hash_base", default=""
|
||||
)
|
||||
|
||||
|
||||
class SaoConfig(dict):
|
||||
def __init__(self) -> None:
|
||||
self.server = SaoServerConfig(self)
|
||||
self.crypt = SaoCryptConfig(self)
|
||||
self.hash = SaoHashConfig(self)
|
||||
|
882
titles/sao/data/GashaMedalShopItems.csv
Normal file
882
titles/sao/data/GashaMedalShopItems.csv
Normal file
@ -0,0 +1,882 @@
|
||||
GashaMedalShopItemId,GashaMedalShopId,CommonRewardType,CommonRewardId,CommonRewardNum,Strength,Property1PropertyId,Property1Value1,Property1Value2,Property2PropertyId,Property2Value1,Property2Value2,Property3PropertyId,Property3Value1,Property3Value2,Property4PropertyId,Property4Value1,Property4Value2
|
||||
15701,15701,1,101000220,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
15702,15702,1,102000230,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
15703,15703,2,101000009,1,0,204000,5,0,1,0,0,2,0,0,2,0,0
|
||||
15801,15801,8,212000030,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
15802,15802,8,201000060,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
15803,15803,8,297000090,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
15901,15901,1,118000070,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
15902,15902,1,118000050,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
15903,15903,1,118000060,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
15904,15904,2,101000016,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
16301,16301,8,209000090,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
16302,16302,8,202000110,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
16303,16303,8,205000070,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
16304,16304,8,206000070,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
16401,16401,8,212000030,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
16402,16402,8,201000060,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
16403,16403,8,297000090,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
16501,16501,1,101000220,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
16502,16502,1,102000230,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
16503,16503,2,101000009,1,0,204000,5,0,1,0,0,2,0,0,2,0,0
|
||||
16601,16601,1,105000190,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
16602,16602,1,106000190,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
16603,16603,2,103000007,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
16604,16604,2,109000006,1,0,204600,25,0,1,0,0,2,0,0,2,0,0
|
||||
16801,16801,1,102000300,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
16802,16802,1,103000260,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
16803,16803,1,104000320,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
16804,16804,2,101000018,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
16805,16805,2,102000009,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
16806,16806,2,111000008,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
17201,17201,1,109000250,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
17202,17202,1,112000120,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
17203,17203,2,101000011,1,0,209900,30,0,1,0,0,2,0,0,2,0,0
|
||||
17204,17204,2,101000014,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
17301,17301,8,204000090,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
17302,17302,8,209000100,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
17303,17303,8,201000080,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
17304,17304,8,202000140,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
17305,17305,8,203000130,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
17306,17306,8,205000090,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
17307,17307,8,206000100,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
17308,17308,8,211000050,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
17601,17601,1,111000200,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
17602,17602,1,106000250,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
17603,17603,1,105000230,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
17604,17604,2,101000012,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
17605,17605,2,103000004,1,0,204100,0,0,204800,5,0,2,0,0,2,0,0
|
||||
17606,17606,2,109000004,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
17607,17607,2,120000004,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
17608,17608,3,110240,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
17609,17609,3,110250,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
17610,17610,3,110260,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
17611,17611,3,110270,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
18001,18001,1,101000280,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
18002,18002,1,102000320,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
18003,18003,1,103000280,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
18004,18004,2,101000004,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
18005,18005,2,102000004,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
18006,18006,2,105000004,1,0,202700,50,0,204700,1,0,2,0,0,2,0,0
|
||||
18007,18007,2,120000004,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
18008,18008,3,110240,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
18009,18009,3,110250,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
18010,18010,3,110260,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
18011,18011,3,110270,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
18401,18401,1,102000170,1,0,101000,50,0,1,0,0,2,0,0,2,0,0
|
||||
18402,18402,1,103000150,1,0,101000,50,0,1,0,0,2,0,0,2,0,0
|
||||
18403,18403,1,104000160,1,0,101000,50,0,1,0,0,2,0,0,2,0,0
|
||||
18404,18404,2,101000004,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
18405,18405,2,102000004,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
18406,18406,2,115000004,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
18407,18407,2,120000004,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
18408,18408,3,110240,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
18409,18409,3,110250,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
18410,18410,3,110260,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
18411,18411,3,110270,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
18501,18501,1,103000250,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
18502,18502,1,104000290,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
18503,18503,2,101000017,1,0,202500,50,0,1,0,0,2,0,0,2,0,0
|
||||
18504,18504,2,111000007,1,0,210100,30,0,1,0,0,2,0,0,2,0,0
|
||||
18505,18505,2,120000004,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
18506,18506,3,110240,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
18507,18507,3,110250,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
18508,18508,3,110260,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
18509,18509,3,110270,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
18601,18601,8,202000170,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
18602,18602,8,204000120,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
18603,18603,8,203000160,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
18604,18604,8,208000030,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
18605,18605,8,209000120,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
18606,18606,8,210000020,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
18607,18607,8,216000070,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
18608,18608,8,297000120,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
18901,18901,8,217000030,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
18902,18902,8,205000120,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
18903,18903,8,206000130,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
18904,18904,8,218000040,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
19001,19001,8,211000020,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
19002,19002,8,202000080,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
19003,19003,8,203000060,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
19004,19004,8,290000070,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
19101,19101,8,216000050,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
19102,19102,8,202000120,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
19103,19103,8,203000120,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
19104,19104,8,206000090,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
19201,19201,8,209000010,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
19202,19202,8,205000010,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
19203,19203,8,215000020,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
19204,19204,8,220000020,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
19205,19205,8,204000020,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
19206,19206,8,206000010,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
19207,19207,8,201000020,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
19208,19208,8,216000020,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
19209,19209,8,290000030,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
19210,19210,8,202000030,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
19211,19211,8,203000020,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
19212,19212,8,209000020,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
19213,19213,8,297000010,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
19214,19214,8,297000020,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
19301,19301,1,104000340,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
19302,19302,1,107000160,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
19303,19303,1,109000270,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
19304,19304,2,115000004,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
19305,19305,2,105000004,1,0,202700,50,0,204700,1,0,2,0,0,2,0,0
|
||||
19306,19306,2,101000014,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
19307,19307,2,120000004,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
19308,19308,3,110240,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
19309,19309,3,110250,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
19310,19310,3,110260,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
19311,19311,3,110270,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
19701,19701,1,111000180,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
19702,19702,1,106000230,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
19703,19703,1,109000260,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
19704,19704,1,110000180,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
19705,19705,2,101000012,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
19706,19706,2,103000004,1,0,204100,0,0,204800,5,0,2,0,0,2,0,0
|
||||
19707,19707,2,101000014,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
19708,19708,2,107000004,1,0,205600,0,0,1,0,0,2,0,0,2,0,0
|
||||
19709,19709,2,120000004,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
19710,19710,3,110240,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
19711,19711,3,110250,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
19712,19712,3,110260,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
19713,19713,3,110270,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
19801,19801,1,103000290,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
19802,19802,1,104000350,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
19803,19803,2,101000018,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
19804,19804,2,115000004,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
19805,19805,2,120000004,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
19806,19806,3,110240,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
19807,19807,3,110250,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
19808,19808,3,110260,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
19809,19809,3,110270,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
19901,19901,1,102000330,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
19902,19902,1,109000280,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
19903,19903,2,102000009,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
19904,19904,2,101000014,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
19905,19905,2,120000004,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
19906,19906,3,110240,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
19907,19907,3,110250,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
19908,19908,3,110260,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
19909,19909,3,110270,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
20001,20001,8,201000070,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
20002,20002,8,202000130,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
20003,20003,8,211000040,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
20004,20004,8,212000040,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
20005,20005,8,290000100,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
20101,20101,8,209000130,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
20102,20102,8,201000100,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
20103,20103,8,202000180,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
20104,20104,8,203000170,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
20201,20201,8,202000190,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
20202,20202,8,211000070,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
20203,20203,8,203000180,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
20204,20204,8,204000130,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
20205,20205,8,209000140,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
20301,20301,8,218000050,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
20302,20302,8,204000140,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
20303,20303,8,206000140,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
20304,20304,8,215000060,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
20401,20401,8,290000040,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
20402,20402,8,202000040,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
20403,20403,8,204000030,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
20404,20404,8,205000020,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
20405,20405,8,206000020,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
20406,20406,8,203000030,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
20407,20407,8,209000030,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
20408,20408,8,215000030,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
20501,20501,8,297000030,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
20502,20502,8,211000010,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
20503,20503,8,297000050,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
20504,20504,8,202000060,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
20505,20505,8,290000050,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
20506,20506,8,297000040,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
20507,20507,8,212000010,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
20508,20508,8,297000060,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
20601,20601,8,205000030,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
20602,20602,8,290000060,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
20603,20603,8,206000050,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
20604,20604,8,220000030,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
20605,20605,8,203000040,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
20606,20606,8,209000050,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
20607,20607,8,203000070,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
20608,20608,8,204000050,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
20609,20609,8,208000020,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
20610,20610,8,216000030,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
20801,20801,1,103000320,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
20802,20802,1,104000380,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
20803,20803,1,111000210,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
20804,20804,2,101000015,1,0,207100,0,0,1,0,0,2,0,0,2,0,0
|
||||
20805,20805,2,102000008,1,0,204300,50,0,1,0,0,2,0,0,2,0,0
|
||||
20806,20806,2,109000008,1,0,204100,0,0,1,0,0,2,0,0,2,0,0
|
||||
20807,20807,2,112000008,1,0,305000,100,0,305400,0,0,2,0,0,2,0,0
|
||||
20808,20808,3,110240,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
20809,20809,3,110250,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
20810,20810,3,110260,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
20811,20811,3,110270,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
21301,21301,1,102000240,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
21302,21302,1,105000170,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
21303,21303,1,109000190,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
21304,21304,2,102000008,1,0,204300,50,0,1,0,0,2,0,0,2,0,0
|
||||
21305,21305,2,109000008,1,0,204100,0,0,1,0,0,2,0,0,2,0,0
|
||||
21306,21306,2,101000015,1,0,207100,0,0,1,0,0,2,0,0,2,0,0
|
||||
21307,21307,2,112000008,1,0,305000,100,0,305400,0,0,2,0,0,2,0,0
|
||||
21308,21308,3,110240,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
21309,21309,3,110250,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
21310,21310,3,110260,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
21311,21311,3,110270,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
21401,21401,1,102000380,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
21402,21402,1,104000390,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
21403,21403,2,115000004,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
21404,21404,2,102000004,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
21405,21405,2,120000004,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
21406,21406,3,110240,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
21407,21407,3,110250,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
21408,21408,3,110260,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
21409,21409,3,110270,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
21501,21501,1,104000200,1,0,100900,50,0,101000,50,0,2,0,0,2,0,0
|
||||
21502,21502,1,106000170,1,0,100900,50,0,101000,50,0,2,0,0,2,0,0
|
||||
21503,21503,1,111000100,1,0,100900,50,0,101000,50,0,2,0,0,2,0,0
|
||||
21504,21504,2,111000004,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
21505,21505,2,103000004,1,0,204100,0,0,204800,5,0,2,0,0,2,0,0
|
||||
21506,21506,2,101000012,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
21507,21507,2,120000004,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
21508,21508,3,110240,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
21509,21509,3,110250,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
21510,21510,3,110260,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
21511,21511,3,110270,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
21601,21601,1,102000190,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
21602,21602,1,109000150,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
21603,21603,1,103000200,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
21604,21604,1,111000110,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
21605,21605,1,105000190,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
21606,21606,1,106000190,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
21607,21607,1,109000250,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
21608,21608,1,112000120,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
21609,21609,1,101000170,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
21610,21610,1,101000220,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
21611,21611,1,102000230,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
21612,21612,1,105000230,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
21613,21613,1,106000250,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
21614,21614,1,111000200,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
21615,21615,1,109000160,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
21616,21616,1,102000200,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
21617,21617,1,105000150,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
21618,21618,1,106000160,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
21801,21801,8,202000200,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
21802,21802,8,203000190,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
21803,21803,8,204000150,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
21804,21804,8,209000150,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
21901,21901,8,215000070,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
21902,21902,8,202000210,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
21903,21903,8,205000130,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
21904,21904,8,220000050,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
22001,22001,8,204000160,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
22002,22002,8,201000110,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
22003,22003,8,202000220,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
22004,22004,8,206000160,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
22101,22101,1,101000320,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
22102,22102,1,111000230,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
22103,22103,1,112000150,1,0,111500,0,0,1,0,0,2,0,0,2,0,0
|
||||
22104,22104,2,101000013,1,0,204200,5,0,1,0,0,2,0,0,2,0,0
|
||||
22105,22105,2,101000012,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
22106,22106,2,101000011,1,0,209900,30,0,1,0,0,2,0,0,2,0,0
|
||||
22107,22107,2,120000004,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
22108,22108,3,110240,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
22109,22109,3,110250,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
22110,22110,3,110260,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
22111,22111,3,110270,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
22201,22201,1,102000440,1,0,100900,100,0,107900,0,0,2,0,0,2,0,0
|
||||
22202,22202,1,103000340,1,0,100900,100,0,107900,0,0,2,0,0,2,0,0
|
||||
22203,22203,1,109000340,1,0,100900,100,0,107900,0,0,2,0,0,2,0,0
|
||||
22204,22204,1,110000200,1,0,100900,100,0,107900,0,0,2,0,0,2,0,0
|
||||
22205,22205,1,118000120,1,0,100900,100,0,107900,0,0,2,0,0,2,0,0
|
||||
22206,22206,2,102000004,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
22207,22207,2,101000017,1,0,202500,50,0,1,0,0,2,0,0,2,0,0
|
||||
22208,22208,2,101000014,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
22209,22209,2,103000004,1,0,204100,0,0,204800,5,0,2,0,0,2,0,0
|
||||
22210,22210,2,101000016,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
22211,22211,2,120000004,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
22212,22212,3,110240,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
22213,22213,3,110250,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
22214,22214,3,110260,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
22215,22215,3,110270,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
22801,22801,1,101000240,1,0,107800,2019,0,1,0,0,2,0,0,2,0,0
|
||||
22802,22802,1,102000250,1,0,107800,2019,0,1,0,0,2,0,0,2,0,0
|
||||
22803,22803,1,103000210,1,0,107800,2019,0,1,0,0,2,0,0,2,0,0
|
||||
22804,22804,1,109000210,1,0,107800,2019,0,1,0,0,2,0,0,2,0,0
|
||||
22805,22805,1,104000240,1,0,107800,2019,0,1,0,0,2,0,0,2,0,0
|
||||
22806,22806,1,105000200,1,0,107800,2019,0,1,0,0,2,0,0,2,0,0
|
||||
22807,22807,1,106000200,1,0,107800,2019,0,1,0,0,2,0,0,2,0,0
|
||||
22808,22808,1,108000140,1,0,107800,2019,0,1,0,0,2,0,0,2,0,0
|
||||
22809,22809,2,107000007,1,0,207700,0,0,1,0,0,2,0,0,2,0,0
|
||||
22810,22810,2,120000004,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
22811,22811,3,110240,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
22812,22812,3,110250,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
22813,22813,3,110260,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
22814,22814,3,110270,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
23201,23201,1,101000350,1,0,102200,10,0,1,0,0,2,0,0,2,0,0
|
||||
23202,23202,1,106000300,1,0,102200,10,0,1,0,0,2,0,0,2,0,0
|
||||
23203,23203,2,101000004,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
23204,23204,2,103000007,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
23205,23205,2,120000004,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
23206,23206,3,110240,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
23207,23207,3,110250,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
23208,23208,3,110260,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
23209,23209,3,110270,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
23301,23301,1,101000330,1,0,111500,0,0,1,0,0,2,0,0,2,0,0
|
||||
23302,23302,1,102000420,1,0,111500,0,0,1,0,0,2,0,0,2,0,0
|
||||
23303,23303,2,101000009,1,0,204000,5,0,1,0,0,2,0,0,2,0,0
|
||||
23304,23304,2,102000009,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
23305,23305,2,120000004,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
23306,23306,3,110240,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
23307,23307,3,110250,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
23308,23308,3,110260,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
23309,23309,3,110270,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
23401,23401,8,205000140,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
23402,23402,8,204000180,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
23403,23403,8,206000180,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
23404,23404,8,209000170,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
23501,23501,8,203000210,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
23502,23502,8,204000190,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
23503,23503,8,215000080,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
23504,23504,8,217000040,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
23601,23601,8,209000180,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
23602,23602,8,202000260,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
23603,23603,8,203000220,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
23604,23604,8,218000060,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
23701,23701,8,203000090,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
23702,23702,8,212000030,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
23703,23703,8,202000100,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
23704,23704,8,204000070,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
23705,23705,8,206000060,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
23706,23706,8,201000060,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
23707,23707,8,297000090,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
23801,23801,8,299000780,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
23802,23802,8,299000790,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
23803,23803,3,170005,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
23804,23804,3,180005,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
23901,23901,1,102000450,1,0,111500,0,0,1,0,0,2,0,0,2,0,0
|
||||
23902,23902,1,109000350,1,0,111500,0,0,1,0,0,2,0,0,2,0,0
|
||||
23903,23903,1,111000250,1,0,111500,0,0,1,0,0,2,0,0,2,0,0
|
||||
23904,23904,2,102000004,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
23905,23905,2,101000014,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
23906,23906,2,101000012,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
23907,23907,2,120000004,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
23908,23908,3,110240,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
23909,23909,3,110250,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
23910,23910,3,110260,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
23911,23911,3,110270,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
24301,24301,1,111000260,1,0,104000,10,0,1,0,0,2,0,0,2,0,0
|
||||
24302,24302,1,112000170,1,0,104000,10,0,1,0,0,2,0,0,2,0,0
|
||||
24303,24303,1,118000150,1,0,105100,10,0,1,0,0,2,0,0,2,0,0
|
||||
24304,24304,2,101000012,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
24305,24305,2,101000011,1,0,209900,30,0,1,0,0,2,0,0,2,0,0
|
||||
24306,24306,2,101000016,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
24307,24307,2,120000004,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
24308,24308,3,110240,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
24309,24309,3,110250,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
24310,24310,3,110260,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
24311,24311,3,110270,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
24701,24701,1,102000470,1,0,104000,10,0,1,0,0,2,0,0,2,0,0
|
||||
24702,24702,1,103000380,1,0,104000,10,0,1,0,0,2,0,0,2,0,0
|
||||
24703,24703,2,102000004,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
24704,24704,2,105000004,1,0,202700,50,0,204700,1,0,2,0,0,2,0,0
|
||||
24705,24705,2,120000004,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
24706,24706,3,110240,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
24707,24707,3,110250,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
24708,24708,3,110260,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
24709,24709,3,110270,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
24801,24801,1,105000290,1,0,102200,10,0,1,0,0,2,0,0,2,0,0
|
||||
24802,24802,1,106000310,1,0,102200,10,0,1,0,0,2,0,0,2,0,0
|
||||
24803,24803,2,109000006,1,0,204600,25,0,1,0,0,2,0,0,2,0,0
|
||||
24804,24804,2,103000007,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
24805,24805,2,120000004,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
24806,24806,3,110240,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
24807,24807,3,110250,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
24808,24808,3,110260,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
24809,24809,3,110270,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
24901,24901,1,101000370,1,0,105600,0,0,1,0,0,2,0,0,2,0,0
|
||||
24902,24902,1,105000300,1,0,105600,0,0,1,0,0,2,0,0,2,0,0
|
||||
24903,24903,2,101000009,1,0,204000,5,0,1,0,0,2,0,0,2,0,0
|
||||
24904,24904,2,109000006,1,0,204600,25,0,1,0,0,2,0,0,2,0,0
|
||||
24905,24905,2,120000004,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
24906,24906,3,110240,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
24907,24907,3,110250,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
24908,24908,3,110260,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
24909,24909,3,110270,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
25001,25001,1,103000290,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
25002,25002,1,104000350,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
25003,25003,1,102000330,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
25004,25004,1,109000280,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
25005,25005,2,101000018,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
25006,25006,2,115000004,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
25007,25007,2,102000009,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
25008,25008,2,101000014,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
25009,25009,2,120000004,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
25010,25010,3,110240,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
25011,25011,3,110250,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
25012,25012,3,110260,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
25013,25013,3,110270,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
25101,25101,8,204000240,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
25102,25102,8,203000250,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
25103,25103,8,206000210,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
25104,25104,8,299000910,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
25201,25201,8,206000150,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
25202,25202,8,202000250,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
25203,25203,8,204000170,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
25204,25204,8,216000080,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
25301,25301,8,202000300,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
25302,25302,8,201000160,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
25303,25303,8,209000210,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
25304,25304,8,217000050,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
25501,25501,1,104000440,1,0,104000,10,0,1,0,0,2,0,0,2,0,0
|
||||
25502,25502,1,105000320,1,0,105100,10,0,1,0,0,2,0,0,2,0,0
|
||||
25503,25503,1,106000320,1,0,105100,10,0,1,0,0,2,0,0,2,0,0
|
||||
25504,25504,1,108000180,1,0,104000,10,0,1,0,0,2,0,0,2,0,0
|
||||
25505,25505,1,109000360,1,0,102200,10,0,1,0,0,2,0,0,2,0,0
|
||||
25506,25506,2,107000007,1,0,207700,0,0,1,0,0,2,0,0,2,0,0
|
||||
25507,25507,2,120000004,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
25508,25508,3,110240,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
25509,25509,3,110250,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
25510,25510,3,110260,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
25511,25511,3,110270,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
26101,26101,1,102000480,1,0,104000,10,0,1,0,0,2,0,0,2,0,0
|
||||
26102,26102,1,111000280,1,0,104000,10,0,1,0,0,2,0,0,2,0,0
|
||||
26103,26103,2,101000012,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
26104,26104,2,102000004,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
26105,26105,2,120000004,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
26106,26106,3,110240,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
26107,26107,3,110250,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
26108,26108,3,110260,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
26109,26109,3,110270,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
26401,26401,1,101000320,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
26402,26402,1,111000230,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
26403,26403,1,112000150,1,0,111500,0,0,1,0,0,2,0,0,2,0,0
|
||||
26404,26404,2,101000013,1,0,204200,5,0,1,0,0,2,0,0,2,0,0
|
||||
26405,26405,2,101000012,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
26406,26406,2,101000011,1,0,209900,30,0,1,0,0,2,0,0,2,0,0
|
||||
26407,26407,2,120000004,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
26408,26408,3,110240,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
26409,26409,3,110250,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
26410,26410,3,110260,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
26411,26411,3,110270,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
26601,26601,8,202000310,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
26602,26602,8,204000250,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
26603,26603,8,209000220,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
26604,26604,8,215000090,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
26701,26701,8,205000170,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
26702,26702,8,202000320,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
26703,26703,8,206000220,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
26704,26704,8,209000230,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
26901,26901,1,101000330,1,0,111500,0,0,1,0,0,2,0,0,2,0,0
|
||||
26902,26902,1,102000420,1,0,111500,0,0,1,0,0,2,0,0,2,0,0
|
||||
26903,26903,2,101000009,1,0,204000,5,0,1,0,0,2,0,0,2,0,0
|
||||
26904,26904,2,102000009,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
26905,26905,2,120000004,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
26906,26906,3,110240,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
26907,26907,3,110250,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
26908,26908,3,110260,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
26909,26909,3,110270,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
27001,27001,8,206000150,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
27002,27002,8,202000250,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
27003,27003,8,204000170,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
27004,27004,8,216000080,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
27101,27101,1,111000260,1,0,104000,10,0,1,0,0,2,0,0,2,0,0
|
||||
27102,27102,1,112000170,1,0,104000,10,0,1,0,0,2,0,0,2,0,0
|
||||
27103,27103,1,118000150,1,0,105100,10,0,1,0,0,2,0,0,2,0,0
|
||||
27104,27104,2,101000012,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
27105,27105,2,101000011,1,0,209900,30,0,1,0,0,2,0,0,2,0,0
|
||||
27106,27106,2,101000016,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
27107,27107,2,120000004,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
27108,27108,3,110240,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
27109,27109,3,110250,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
27110,27110,3,110260,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
27111,27111,3,110270,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
27501,27501,1,103000290,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
27502,27502,1,104000350,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
27503,27503,1,102000330,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
27504,27504,1,109000280,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
27505,27505,2,101000018,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
27506,27506,2,115000004,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
27507,27507,2,102000009,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
27508,27508,2,101000014,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
27509,27509,2,120000004,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
27510,27510,3,110240,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
27511,27511,3,110250,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
27512,27512,3,110260,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
27513,27513,3,110270,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
27601,27601,8,202000300,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
27602,27602,8,201000160,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
27603,27603,8,209000210,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
27604,27604,8,217000050,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
27701,27701,1,103000400,1,0,104000,10,0,1,0,0,2,0,0,2,0,0
|
||||
27702,27702,1,105000330,1,0,105100,10,0,1,0,0,2,0,0,2,0,0
|
||||
27703,27703,1,109000390,1,0,104000,10,0,1,0,0,2,0,0,2,0,0
|
||||
27704,27704,1,110000250,1,0,105100,10,0,1,0,0,2,0,0,2,0,0
|
||||
27705,27705,1,118000180,1,0,104000,10,0,1,0,0,2,0,0,2,0,0
|
||||
27706,27706,2,101000017,1,0,202500,50,0,1,0,0,2,0,0,2,0,0
|
||||
27707,27707,2,109000004,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
27708,27708,2,101000014,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
27709,27709,2,103000004,1,0,204100,0,0,204800,5,0,2,0,0,2,0,0
|
||||
27710,27710,2,101000016,1,0,207300,50,0,1,0,0,2,0,0,2,0,0
|
||||
27711,27711,2,120000004,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
27712,27712,3,110240,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
27713,27713,3,110250,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
27714,27714,3,110260,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
27715,27715,3,110270,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
28401,28401,1,102000480,1,0,104000,10,0,1,0,0,2,0,0,2,0,0
|
||||
28402,28402,1,111000280,1,0,104000,10,0,1,0,0,2,0,0,2,0,0
|
||||
28403,28403,2,101000012,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
28404,28404,2,102000004,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
28405,28405,2,120000004,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
28406,28406,3,110240,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
28407,28407,3,110250,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
28408,28408,3,110260,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
28409,28409,3,110270,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
28501,28501,1,104000460,1,0,104000,10,0,1,0,0,2,0,0,2,0,0
|
||||
28502,28502,1,111000290,1,0,104000,10,0,1,0,0,2,0,0,2,0,0
|
||||
28503,28503,2,101000012,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
28504,28504,2,115000004,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
28505,28505,2,120000004,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
28506,28506,3,110240,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
28507,28507,3,110250,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
28508,28508,3,110260,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
28509,28509,3,110270,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
28601,28601,1,102000170,1,0,101000,50,0,1,0,0,2,0,0,2,0,0
|
||||
28602,28602,1,103000150,1,0,101000,50,0,1,0,0,2,0,0,2,0,0
|
||||
28603,28603,1,104000160,1,0,101000,50,0,1,0,0,2,0,0,2,0,0
|
||||
28604,28604,1,111000200,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
28605,28605,1,106000250,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
28606,28606,1,105000230,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
28607,28607,2,102000004,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
28608,28608,2,101000017,1,0,202500,50,0,1,0,0,2,0,0,2,0,0
|
||||
28609,28609,2,115000004,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
28610,28610,2,101000012,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
28611,28611,2,103000004,1,0,204100,0,0,204800,5,0,2,0,0,2,0,0
|
||||
28612,28612,2,109000004,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
28613,28613,2,120000004,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
28614,28614,3,110240,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
28615,28615,3,110250,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
28616,28616,3,110260,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
28617,28617,3,110270,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
29001,29001,8,206000230,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
29002,29002,8,204000280,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
29003,29003,8,211000100,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
29004,29004,8,290000140,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
29101,29101,8,216000100,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
29102,29102,8,202000330,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
29103,29103,8,204000290,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
29104,29104,8,209000250,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
29201,29201,8,217000060,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
29202,29202,8,204000260,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
29203,29203,8,205000180,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
29204,29204,8,218000070,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
29301,29301,8,209000010,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
29302,29302,8,205000010,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
29303,29303,8,215000020,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
29304,29304,8,220000020,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
29305,29305,8,204000020,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
29306,29306,8,206000010,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
29307,29307,8,201000020,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
29308,29308,8,216000020,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
29309,29309,8,290000030,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
29310,29310,8,202000030,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
29311,29311,8,203000020,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
29312,29312,8,209000020,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
29313,29313,8,297000010,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
29314,29314,8,297000020,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
29401,29401,1,103000450,1,0,104000,10,0,1,0,0,2,0,0,2,0,0
|
||||
29402,29402,1,104000490,1,0,104000,10,0,1,0,0,2,0,0,2,0,0
|
||||
29403,29403,1,111000310,1,0,104000,10,0,1,0,0,2,0,0,2,0,0
|
||||
29404,29404,1,106000370,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
29405,29405,2,101000017,1,0,202500,50,0,1,0,0,2,0,0,2,0,0
|
||||
29406,29406,2,115000004,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
29407,29407,2,101000012,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
29408,29408,2,120000004,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
29409,29409,3,110240,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
29410,29410,3,110250,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
29411,29411,3,110260,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
29412,29412,3,110270,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
29901,29901,1,105000350,1,0,105100,10,0,1,0,0,2,0,0,2,0,0
|
||||
29902,29902,1,106000380,1,0,105100,10,0,1,0,0,2,0,0,2,0,0
|
||||
29903,29903,1,110000260,1,0,105100,10,0,1,0,0,2,0,0,2,0,0
|
||||
29904,29904,2,101000004,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
29905,29905,2,101000009,1,0,204000,5,0,1,0,0,2,0,0,2,0,0
|
||||
29906,29906,2,120000004,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
29907,29907,3,110240,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
29908,29908,3,110250,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
29909,29909,3,110260,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
29910,29910,3,110270,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
30401,30401,1,101000400,1,0,104000,10,0,1,0,0,2,0,0,2,0,0
|
||||
30402,30402,1,102000540,1,0,104000,10,0,1,0,0,2,0,0,2,0,0
|
||||
30403,30403,2,101000004,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
30404,30404,2,102000004,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
30405,30405,2,120000004,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
30406,30406,3,110240,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
30407,30407,3,110250,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
30408,30408,3,110260,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
30409,30409,3,110270,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
30501,30501,1,101000410,1,0,102200,10,0,1,0,0,2,0,0,2,0,0
|
||||
30502,30502,1,102000560,1,0,102200,10,0,1,0,0,2,0,0,2,0,0
|
||||
30503,30503,2,101000009,1,0,204000,5,0,1,0,0,2,0,0,2,0,0
|
||||
30504,30504,2,102000006,1,0,202400,25,0,1,0,0,2,0,0,2,0,0
|
||||
30505,30505,2,120000004,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
30506,30506,3,110240,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
30507,30507,3,110250,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
30508,30508,3,110260,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
30509,30509,3,110270,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
30601,30601,8,290000040,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
30602,30602,8,204000030,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
30603,30603,8,205000020,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
30604,30604,8,206000020,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
30605,30605,8,202000040,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
30606,30606,8,203000030,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
30607,30607,8,209000030,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
30608,30608,8,215000030,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
30701,30701,8,201000180,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
30702,30702,8,204000300,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
30703,30703,8,209000260,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
30704,30704,8,216000110,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
30801,30801,8,203000290,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
30802,30802,8,205000210,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
30803,30803,8,215000110,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
30804,30804,8,290000150,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
30901,30901,8,202000360,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
30902,30902,8,204000310,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
30903,30903,8,209000270,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
30904,30904,8,216000120,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
31001,31001,1,102000190,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
31002,31002,1,109000150,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
31003,31003,1,103000200,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
31004,31004,1,111000110,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
31005,31005,1,105000190,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
31006,31006,1,106000190,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
31007,31007,1,109000250,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
31008,31008,1,112000120,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
31009,31009,1,102000380,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
31010,31010,1,104000390,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
31011,31011,1,101000350,1,0,102200,10,0,1,0,0,2,0,0,2,0,0
|
||||
31012,31012,1,106000300,1,0,102200,10,0,1,0,0,2,0,0,2,0,0
|
||||
31013,31013,8,297000030,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
31014,31014,8,202000060,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
31015,31015,8,290000050,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
31016,31016,8,297000040,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
31017,31017,8,299000780,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
31018,31018,8,299000790,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
31201,31201,1,106000390,1,0,104000,10,0,1,0,0,2,0,0,2,0,0
|
||||
31202,31202,1,110000290,1,0,105100,10,0,1,0,0,2,0,0,2,0,0
|
||||
31203,31203,1,118000200,1,0,104000,10,0,1,0,0,2,0,0,2,0,0
|
||||
31204,31204,2,102000008,1,0,204300,50,0,1,0,0,2,0,0,2,0,0
|
||||
31205,31205,2,109000008,1,0,204100,0,0,1,0,0,2,0,0,2,0,0
|
||||
31206,31206,2,101000015,1,0,207100,0,0,1,0,0,2,0,0,2,0,0
|
||||
31207,31207,2,112000008,1,0,305000,100,0,305400,0,0,2,0,0,2,0,0
|
||||
31208,31208,2,120000004,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
31209,31209,8,206000050,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
31210,31210,8,220000030,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
31211,31211,8,203000070,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
31212,31212,8,204000050,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
31213,31213,8,216000030,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
31214,31214,3,110240,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
31215,31215,3,110250,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
31216,31216,3,110260,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
31217,31217,3,110270,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
31701,31701,1,102000240,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
31702,31702,1,105000170,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
31703,31703,1,109000190,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
31704,31704,1,103000320,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
31705,31705,1,104000380,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
31706,31706,1,111000210,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
31707,31707,2,102000008,1,0,204300,50,0,1,0,0,2,0,0,2,0,0
|
||||
31708,31708,2,109000008,1,0,204100,0,0,1,0,0,2,0,0,2,0,0
|
||||
31709,31709,2,101000015,1,0,207100,0,0,1,0,0,2,0,0,2,0,0
|
||||
31710,31710,2,112000008,1,0,305000,100,0,305400,0,0,2,0,0,2,0,0
|
||||
31711,31711,2,120000004,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
31712,31712,8,206000050,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
31713,31713,8,220000030,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
31714,31714,8,203000070,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
31715,31715,8,204000050,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
31716,31716,8,216000030,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
31717,31717,3,110240,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
31718,31718,3,110250,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
31719,31719,3,110260,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
31720,31720,3,110270,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
31901,31901,8,209000300,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
31902,31902,8,201000190,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
31903,31903,8,203000320,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
31904,31904,8,204000340,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
32001,32001,1,101000390,1,0,105600,0,0,1,0,0,2,0,0,2,0,0
|
||||
32002,32002,1,103000390,1,0,105600,0,0,1,0,0,2,0,0,2,0,0
|
||||
32003,32003,2,105000007,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
32004,32004,2,120000004,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
32005,32005,3,110240,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
32006,32006,3,110250,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
32007,32007,3,110260,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
32008,32008,3,110270,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
32101,32101,1,102000170,1,0,101000,50,0,1,0,0,2,0,0,2,0,0
|
||||
32102,32102,1,103000150,1,0,101000,50,0,1,0,0,2,0,0,2,0,0
|
||||
32103,32103,1,104000160,1,0,101000,50,0,1,0,0,2,0,0,2,0,0
|
||||
32104,32104,1,105000230,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
32105,32105,1,106000250,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
32106,32106,1,111000200,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
32107,32107,1,103000400,1,0,104000,10,0,1,0,0,2,0,0,2,0,0
|
||||
32108,32108,1,105000330,1,0,105100,10,0,1,0,0,2,0,0,2,0,0
|
||||
32109,32109,1,109000390,1,0,104000,10,0,1,0,0,2,0,0,2,0,0
|
||||
32110,32110,1,110000250,1,0,105100,10,0,1,0,0,2,0,0,2,0,0
|
||||
32111,32111,1,118000180,1,0,104000,10,0,1,0,0,2,0,0,2,0,0
|
||||
32112,32112,1,102000480,1,0,104000,10,0,1,0,0,2,0,0,2,0,0
|
||||
32113,32113,1,111000280,1,0,104000,10,0,1,0,0,2,0,0,2,0,0
|
||||
32114,32114,1,101000170,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
32115,32115,1,101000220,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
32116,32116,1,102000230,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
32117,32117,1,103000250,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
32118,32118,1,104000290,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
32119,32119,1,101000370,1,0,105600,0,0,1,0,0,2,0,0,2,0,0
|
||||
32120,32120,1,105000300,1,0,105600,0,0,1,0,0,2,0,0,2,0,0
|
||||
32121,32121,1,102000470,1,0,104000,10,0,1,0,0,2,0,0,2,0,0
|
||||
32122,32122,1,103000380,1,0,104000,10,0,1,0,0,2,0,0,2,0,0
|
||||
32123,32123,1,109000160,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
32127,32127,1,110000160,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
32128,32128,1,112000100,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
32129,32129,1,101000290,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
32130,32130,1,104000360,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
32131,32131,1,107000170,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
32132,32132,1,103000330,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
32133,32133,1,110000210,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
32134,32134,1,109000330,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
32135,32135,1,104000410,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
32136,32136,1,102000370,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
32137,32137,1,102000310,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
32138,32138,1,106000240,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
32139,32139,1,103000300,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
32140,32140,1,102000340,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
32141,32141,1,109000310,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
32142,32142,1,105000250,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
32143,32143,1,118000130,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
32144,32144,1,101000340,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
32145,32145,1,104000430,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
32146,32146,1,110000220,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
32147,32147,1,106000330,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
32148,32148,1,109000170,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
32149,32149,1,111000120,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
32150,32150,1,118000090,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
32151,32151,1,104000310,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
32152,32152,1,106000290,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
32153,32153,1,102000400,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
32154,32154,1,102000200,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
32155,32155,1,105000150,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
32156,32156,1,106000160,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
32301,32301,8,206000280,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
32302,32302,8,205000250,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
32303,32303,8,209000310,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
32304,32304,8,217000100,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
32401,32401,1,102000570,1,0,105100,10,0,1,0,0,2,0,0,2,0,0
|
||||
32402,32402,1,104000510,1,0,104000,10,0,1,0,0,2,0,0,2,0,0
|
||||
32403,32403,1,111000330,1,0,102200,10,0,1,0,0,2,0,0,2,0,0
|
||||
32404,32404,2,102000004,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
32405,32405,2,101000012,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
32406,32406,2,115000004,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
32407,32407,2,120000004,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
32408,32408,3,110240,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
32409,32409,3,110250,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
32410,32410,3,110260,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
32411,32411,3,110270,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
32901,32901,1,101000240,1,0,107800,2019,0,1,0,0,2,0,0,2,0,0
|
||||
32902,32902,1,102000250,1,0,107800,2019,0,1,0,0,2,0,0,2,0,0
|
||||
32903,32903,1,103000210,1,0,107800,2019,0,1,0,0,2,0,0,2,0,0
|
||||
32904,32904,1,109000210,1,0,107800,2019,0,1,0,0,2,0,0,2,0,0
|
||||
32905,32905,1,104000240,1,0,107800,2019,0,1,0,0,2,0,0,2,0,0
|
||||
32906,32906,1,105000200,1,0,107800,2019,0,1,0,0,2,0,0,2,0,0
|
||||
32907,32907,1,106000200,1,0,107800,2019,0,1,0,0,2,0,0,2,0,0
|
||||
32908,32908,1,108000140,1,0,107800,2019,0,1,0,0,2,0,0,2,0,0
|
||||
32909,32909,2,107000007,1,0,207700,0,0,1,0,0,2,0,0,2,0,0
|
||||
32910,32910,2,120000004,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
32911,32911,3,110240,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
32912,32912,3,110250,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
32913,32913,3,110260,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
32914,32914,3,110270,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
33101,33101,1,109000410,1,0,104000,10,0,1,0,0,2,0,0,2,0,0
|
||||
33102,33102,1,112000200,1,0,104000,10,0,1,0,0,2,0,0,2,0,0
|
||||
33103,33103,2,115000005,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
33104,33104,2,101000019,1,0,204400,0,0,204900,0,0,2,0,0,2,0,0
|
||||
33105,33105,2,120000004,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
33106,33106,3,110240,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
33107,33107,3,110250,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
33108,33108,3,110260,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
33109,33109,3,110270,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
33201,33201,8,203000330,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
33202,33202,8,202000410,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
33203,33203,8,204000350,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
33204,33204,8,216000150,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
33301,33301,8,203000090,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
33302,33302,8,202000100,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
33303,33303,8,204000070,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
33304,33304,8,206000060,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
33305,33305,8,212000030,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
33306,33306,8,201000060,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
33307,33307,8,297000090,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
33401,33401,1,104000540,1,1,111500,0,0,1,0,0,2,0,0,2,0,0
|
||||
33402,33402,1,105000380,1,1,111500,0,0,1,0,0,2,0,0,2,0,0
|
||||
33403,33403,1,106000400,1,1,111500,0,0,1,0,0,2,0,0,2,0,0
|
||||
33404,33404,2,111000004,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
33405,33405,2,109000004,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
33406,33406,2,103000004,1,0,204100,0,0,204800,5,0,2,0,0,2,0,0
|
||||
33407,33407,2,120000004,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
33408,33408,3,110240,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
33409,33409,3,110250,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
33410,33410,3,110260,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
33411,33411,3,110270,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
33901,33901,1,102000590,1,1,105100,10,0,1,0,0,2,0,0,2,0,0
|
||||
33902,33902,1,111000360,1,1,104000,10,0,1,0,0,2,0,0,2,0,0
|
||||
33903,33903,2,107000007,1,0,207700,0,0,1,0,0,2,0,0,2,0,0
|
||||
33904,33904,2,120000004,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
33905,33905,3,110240,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
33906,33906,3,110250,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
33907,33907,3,110260,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
33908,33908,3,110270,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
34101,34101,1,102000450,1,1,111500,0,0,1,0,0,2,0,0,2,0,0
|
||||
34102,34102,1,109000350,1,1,111500,0,0,1,0,0,2,0,0,2,0,0
|
||||
34103,34103,1,111000250,1,1,111500,0,0,1,0,0,2,0,0,2,0,0
|
||||
34104,34104,1,101000330,1,1,111500,0,0,1,0,0,2,0,0,2,0,0
|
||||
34105,34105,1,102000420,1,1,111500,0,0,1,0,0,2,0,0,2,0,0
|
||||
34106,34106,1,104000440,1,1,104000,10,0,1,0,0,2,0,0,2,0,0
|
||||
34107,34107,1,105000320,1,1,105100,10,0,1,0,0,2,0,0,2,0,0
|
||||
34108,34108,1,106000320,1,1,105100,10,0,1,0,0,2,0,0,2,0,0
|
||||
34109,34109,1,108000180,1,1,104000,10,0,1,0,0,2,0,0,2,0,0
|
||||
34110,34110,1,109000360,1,1,102200,10,0,1,0,0,2,0,0,2,0,0
|
||||
34111,34111,1,104000200,1,1,100900,50,0,101000,50,0,2,0,0,2,0,0
|
||||
34112,34112,1,106000170,1,1,100900,50,0,101000,50,0,2,0,0,2,0,0
|
||||
34113,34113,1,111000100,1,1,100900,50,0,101000,50,0,2,0,0,2,0,0
|
||||
34114,34114,1,102000440,1,1,100900,100,0,107900,0,0,2,0,0,2,0,0
|
||||
34115,34115,1,103000340,1,1,100900,100,0,107900,0,0,2,0,0,2,0,0
|
||||
34116,34116,1,109000340,1,1,100900,100,0,107900,0,0,2,0,0,2,0,0
|
||||
34117,34117,1,110000200,1,1,100900,100,0,107900,0,0,2,0,0,2,0,0
|
||||
34118,34118,1,118000120,1,1,100900,100,0,107900,0,0,2,0,0,2,0,0
|
||||
34119,34119,1,103000290,1,1,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
34120,34120,1,104000350,1,1,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
34121,34121,1,102000330,1,1,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
34122,34122,1,109000280,1,1,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
34123,34123,1,101000320,1,1,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
34124,34124,1,111000230,1,1,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
34125,34125,1,112000150,1,1,111500,0,0,1,0,0,2,0,0,2,0,0
|
||||
34126,34126,2,101000013,1,0,204200,5,0,1,0,0,2,0,0,2,0,0
|
||||
34127,34127,2,101000012,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
34128,34128,2,101000011,1,0,209900,30,0,1,0,0,2,0,0,2,0,0
|
||||
34129,34129,2,101000018,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
34130,34130,2,101000014,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
34131,34131,2,101000016,1,0,207300,50,0,1,0,0,2,0,0,2,0,0
|
||||
34132,34132,2,102000009,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
34133,34133,2,103000007,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
34134,34134,2,107000007,1,0,207700,0,0,1,0,0,2,0,0,2,0,0
|
||||
34135,34135,2,111000008,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
34136,34136,2,115000005,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
34201,34201,1,103000490,1,1,104000,10,0,1,0,0,2,0,0,2,0,0
|
||||
34202,34202,1,109000440,1,1,102200,10,0,1,0,0,2,0,0,2,0,0
|
||||
34203,34203,1,118000220,1,1,104000,10,0,1,0,0,2,0,0,2,0,0
|
||||
34204,34204,1,105000400,1,1,105100,10,0,1,0,0,2,0,0,2,0,0
|
||||
34205,34205,1,106000420,1,1,105100,10,0,1,0,0,2,0,0,2,0,0
|
||||
34206,34206,1,103000500,1,1,111500,0,0,1,0,0,2,0,0,2,0,0
|
||||
34207,34207,1,110000310,1,1,111500,0,0,1,0,0,2,0,0,2,0,0
|
||||
34208,34208,1,118000230,1,1,111500,0,0,1,0,0,2,0,0,2,0,0
|
||||
34209,34209,1,101000440,1,1,104000,10,0,1,0,0,2,0,0,2,0,0
|
||||
34210,34210,1,102000600,1,1,104000,10,0,1,0,0,2,0,0,2,0,0
|
|
882
titles/sao/data/GashaMedalShops.csv
Normal file
882
titles/sao/data/GashaMedalShops.csv
Normal file
@ -0,0 +1,882 @@
|
||||
GashaMedalShopId,Name,GashaMedalId,UseGashaMedalNum,PurchaseLimit,StartDate,EndDate
|
||||
15701,"≪不屈の誓い≫キリト",10002,300,-1,"2020/03/10 7:00:00","2020/03/31 2:00:00"
|
||||
15702,"≪明日への誓い≫アスナ",10002,300,-1,"2020/03/10 7:00:00","2020/03/31 2:00:00"
|
||||
15703,"ダークリパルサー",10002,60,-1,"2020/03/10 7:00:00","2020/03/31 2:00:00"
|
||||
15801,"《恒久の愛情》ユージオ",10001,180,-1,"2020/03/03 7:00:00","2020/03/24 2:00:00"
|
||||
15802,"《赤誠の求愛》キリト",10001,30,-1,"2020/03/03 7:00:00","2020/03/24 2:00:00"
|
||||
15803,"《狂愛の誓い》クラディール",10001,30,-1,"2020/03/03 7:00:00","2020/03/24 2:00:00"
|
||||
15901,"《空島繋ぐ架け橋》レイン",10159,150,-1,"2020/06/09 7:00:00","2020/07/21 2:00:00"
|
||||
15902,"《一騎多閃》レイン",10159,30,-1,"2020/06/09 7:00:00","2020/07/21 2:00:00"
|
||||
15903,"《温かな眼差し》レイン",10159,30,-1,"2020/06/09 7:00:00","2020/07/21 2:00:00"
|
||||
15904,"ソード・オブ・ホグニ",10159,30,-1,"2020/06/09 7:00:00","2020/07/21 2:00:00"
|
||||
16301,"《愛おしい日常》ユウキ",10163,90,-1,"2020/07/07 7:00:00","2020/07/28 2:00:00"
|
||||
16302,"《早朝の誘い》アスナ",10163,15,-1,"2020/07/07 7:00:00","2020/07/28 2:00:00"
|
||||
16303,"《花の女子高生》リズベット",10163,15,-1,"2020/07/07 7:00:00","2020/07/28 2:00:00"
|
||||
16304,"《通学路の乙女》シリカ",10163,15,-1,"2020/07/07 7:00:00","2020/07/28 2:00:00"
|
||||
16401,"《恒久の愛情》ユージオ",10001,180,-1,"2020/06/23 7:00:00","2020/07/14 2:00:00"
|
||||
16402,"《赤誠の求愛》キリト",10001,30,-1,"2020/06/23 7:00:00","2020/07/14 2:00:00"
|
||||
16403,"《狂愛の誓い》クラディール",10001,30,-1,"2020/06/23 7:00:00","2020/07/14 2:00:00"
|
||||
16501,"≪不屈の誓い≫キリト",10002,300,-1,"2020/07/07 7:00:00","2020/07/28 2:00:00"
|
||||
16502,"≪明日への誓い≫アスナ",10002,300,-1,"2020/07/07 7:00:00","2020/07/28 2:00:00"
|
||||
16503,"ダークリパルサー",10002,60,-1,"2020/07/07 7:00:00","2020/07/28 2:00:00"
|
||||
16601,"≪ハツコイ同盟≫リズベット",10166,150,-1,"2020/06/09 7:00:00","2020/07/14 2:00:00"
|
||||
16602,"≪トキメキ同盟≫シリカ",10166,150,-1,"2020/06/09 7:00:00","2020/07/14 2:00:00"
|
||||
16603,"ジャルディーノ",10166,30,-1,"2020/06/09 7:00:00","2020/07/14 2:00:00"
|
||||
16604,"グリダヴォル",10166,30,-1,"2020/06/09 7:00:00","2020/07/14 2:00:00"
|
||||
16801,"《創世神ステイシア》アスナ",10168,150,-1,"2020/07/14 7:00:00","2020/08/18 2:00:00"
|
||||
16802,"《地神テラリア》リーファ",10168,150,-1,"2020/07/14 7:00:00","2020/08/18 2:00:00"
|
||||
16803,"《太陽神ソルス》シノン",10168,150,-1,"2020/07/14 7:00:00","2020/08/18 2:00:00"
|
||||
16804,"ヴァーデュラス・アニマ",10168,30,-1,"2020/07/14 7:00:00","2020/08/18 2:00:00"
|
||||
16805,"ラディアント・ライト",10168,30,-1,"2020/07/14 7:00:00","2020/08/18 2:00:00"
|
||||
16806,"アニヒレート・レイ",10168,30,-1,"2020/07/14 7:00:00","2020/08/18 2:00:00"
|
||||
17201,"《英雄纏う剣才》ユウキ",10172,150,-1,"2020/07/21 7:00:00","2020/08/11 2:00:00"
|
||||
17202,"《忘却の憧憬》ユージオ",10172,150,-1,"2020/07/21 7:00:00","2020/08/11 2:00:00"
|
||||
17203,"青薔薇の剣",10172,30,-1,"2020/07/21 7:00:00","2020/08/11 2:00:00"
|
||||
17204,"オブシディアナ",10172,30,-1,"2020/07/21 7:00:00","2020/08/11 2:00:00"
|
||||
17301,"《揺るぎない信愛》シノン",10173,90,-1,"2020/07/21 7:00:00","2020/08/18 2:00:00"
|
||||
17302,"《夢へ至る純愛》ユウキ",10173,90,-1,"2020/07/21 7:00:00","2020/08/18 2:00:00"
|
||||
17303,"《運命の寵愛》キリト",10173,15,-1,"2020/07/21 7:00:00","2020/08/18 2:00:00"
|
||||
17304,"《美貌の愛妻》アスナ",10173,15,-1,"2020/07/21 7:00:00","2020/08/18 2:00:00"
|
||||
17305,"《豊かなる恵愛》直葉",10173,15,-1,"2020/07/21 7:00:00","2020/08/18 2:00:00"
|
||||
17306,"《端麗な深愛》リズベット",10173,15,-1,"2020/07/21 7:00:00","2020/08/18 2:00:00"
|
||||
17307,"《純真な情愛》シリカ",10173,15,-1,"2020/07/21 7:00:00","2020/08/18 2:00:00"
|
||||
17308,"《高潔なる忠愛》アリス",10173,15,-1,"2020/07/21 7:00:00","2020/08/18 2:00:00"
|
||||
17601,"≪透き通る青≫アリス",10176,150,-1,"2020/08/11 7:00:00","2020/09/15 2:00:00"
|
||||
17602,"≪白砂の少女≫シリカ",10176,150,-1,"2020/08/11 7:00:00","2020/09/15 2:00:00"
|
||||
17603,"≪目映い太陽≫リズベット",10176,150,-1,"2020/08/11 7:00:00","2020/09/15 2:00:00"
|
||||
17604,"金木犀の剣",10176,30,-1,"2020/08/11 7:00:00","2020/09/15 2:00:00"
|
||||
17605,"スクレープ",10176,30,-1,"2020/08/11 7:00:00","2020/09/15 2:00:00"
|
||||
17606,"ジャイアント・タスク",10176,30,-1,"2020/08/11 7:00:00","2020/09/15 2:00:00"
|
||||
17607,"ゴールド・ネックレス",10176,30,-1,"2020/08/11 7:00:00","2020/09/15 2:00:00"
|
||||
17608,"ヒーローコード:ボスキラー",10176,100,-1,"2020/08/11 7:00:00","2020/09/15 2:00:00"
|
||||
17609,"ヒーローコード:Mobキラー",10176,100,-1,"2020/08/11 7:00:00","2020/09/15 2:00:00"
|
||||
17610,"ヒーローコード:HP最大時強化",10176,100,-1,"2020/08/11 7:00:00","2020/09/15 2:00:00"
|
||||
17611,"ヒーローコード:HP低下時強化",10176,100,-1,"2020/08/11 7:00:00","2020/09/15 2:00:00"
|
||||
18001,"≪現実を超えて≫キリト",10180,150,-1,"2020/09/08 7:00:00","2020/10/13 2:00:00"
|
||||
18002,"≪鮮やかな閃光≫アスナ",10180,150,-1,"2020/09/08 7:00:00","2020/10/13 2:00:00"
|
||||
18003,"≪剣に乗せた想い≫リーファ",10180,150,-1,"2020/09/08 7:00:00","2020/10/13 2:00:00"
|
||||
18004,"エリュシデータ",10180,30,-1,"2020/09/08 7:00:00","2020/10/13 2:00:00"
|
||||
18005,"アロンダイト",10180,30,-1,"2020/09/08 7:00:00","2020/10/13 2:00:00"
|
||||
18006,"ムラマサ",10180,30,-1,"2020/09/08 7:00:00","2020/10/13 2:00:00"
|
||||
18007,"ゴールド・ネックレス",10180,30,-1,"2020/09/08 7:00:00","2020/10/13 2:00:00"
|
||||
18008,"ヒーローコード:ボスキラー",10180,100,-1,"2020/09/08 7:00:00","2020/10/13 2:00:00"
|
||||
18009,"ヒーローコード:Mobキラー",10180,100,-1,"2020/09/08 7:00:00","2020/10/13 2:00:00"
|
||||
18010,"ヒーローコード:HP最大時強化",10180,100,-1,"2020/09/08 7:00:00","2020/10/13 2:00:00"
|
||||
18011,"ヒーローコード:HP低下時強化",10180,100,-1,"2020/09/08 7:00:00","2020/10/13 2:00:00"
|
||||
18401,"《真夏の眩耀》アスナ",10184,150,-1,"2020/08/11 7:00:00","2020/09/01 2:00:00"
|
||||
18402,"《魅惑の夏日》リーファ",10184,150,-1,"2020/08/11 7:00:00","2020/09/01 2:00:00"
|
||||
18403,"《砂浜の女神》シノン",10184,150,-1,"2020/08/11 7:00:00","2020/09/01 2:00:00"
|
||||
18404,"エリュシデータ",10184,30,-1,"2020/08/11 7:00:00","2020/09/01 2:00:00"
|
||||
18405,"アロンダイト",10184,30,-1,"2020/08/11 7:00:00","2020/09/01 2:00:00"
|
||||
18406,"MEBRマニアック",10184,30,-1,"2020/08/11 7:00:00","2020/09/01 2:00:00"
|
||||
18407,"ゴールド・ネックレス",10184,30,-1,"2020/08/11 7:00:00","2020/09/01 2:00:00"
|
||||
18408,"ヒーローコード:ボスキラー",10184,100,-1,"2020/08/11 7:00:00","2020/09/01 2:00:00"
|
||||
18409,"ヒーローコード:Mobキラー",10184,100,-1,"2020/08/11 7:00:00","2020/09/01 2:00:00"
|
||||
18410,"ヒーローコード:HP最大時強化",10184,100,-1,"2020/08/11 7:00:00","2020/09/01 2:00:00"
|
||||
18411,"ヒーローコード:HP低下時強化",10184,100,-1,"2020/08/11 7:00:00","2020/09/01 2:00:00"
|
||||
18501,"《兄想う妖精》リーファ",10185,150,-1,"2020/09/22 7:00:00","2020/10/13 2:00:00"
|
||||
18502,"《向き合う勇気》シノン",10185,150,-1,"2020/09/22 7:00:00","2020/10/13 2:00:00"
|
||||
18503,"ヴァルトレーニス",10185,30,-1,"2020/09/22 7:00:00","2020/10/13 2:00:00"
|
||||
18504,"アネモイ",10185,30,-1,"2020/09/22 7:00:00","2020/10/13 2:00:00"
|
||||
18505,"ゴールド・ネックレス",10185,30,-1,"2020/09/22 7:00:00","2020/10/13 2:00:00"
|
||||
18506,"ヒーローコード:ボスキラー",10185,100,-1,"2020/09/22 7:00:00","2020/10/13 2:00:00"
|
||||
18507,"ヒーローコード:Mobキラー",10185,100,-1,"2020/09/22 7:00:00","2020/10/13 2:00:00"
|
||||
18508,"ヒーローコード:HP最大時強化",10185,100,-1,"2020/09/22 7:00:00","2020/10/13 2:00:00"
|
||||
18509,"ヒーローコード:HP低下時強化",10185,100,-1,"2020/09/22 7:00:00","2020/10/13 2:00:00"
|
||||
18601,"《納涼の令嬢》アスナ",10186,90,-1,"2020/08/18 7:00:00","2020/09/15 2:00:00"
|
||||
18602,"《真夏の誘惑》シノン",10186,90,-1,"2020/08/18 7:00:00","2020/09/15 2:00:00"
|
||||
18603,"《優美な夏姫》直葉",10186,15,-1,"2020/08/18 7:00:00","2020/09/15 2:00:00"
|
||||
18604,"《海の漢》エギル",10186,15,-1,"2020/08/18 7:00:00","2020/09/15 2:00:00"
|
||||
18605,"《南風の爛漫娘》ユウキ",10186,15,-1,"2020/08/18 7:00:00","2020/09/15 2:00:00"
|
||||
18606,"《炎天の疾影》アルゴ",10186,15,-1,"2020/08/18 7:00:00","2020/09/15 2:00:00"
|
||||
18607,"《清夏の羽休め》フィリア",10186,15,-1,"2020/08/18 7:00:00","2020/09/15 2:00:00"
|
||||
18608,"《夏空の遊翼》ユイ&ピナ",10186,15,-1,"2020/08/18 7:00:00","2020/09/15 2:00:00"
|
||||
18901,"《盛夏の花形》セブン",10189,90,-1,"2020/08/25 7:00:00","2020/09/15 2:00:00"
|
||||
18902,"《艶やか彩花》リズベット",10189,15,-1,"2020/08/25 7:00:00","2020/09/15 2:00:00"
|
||||
18903,"《祭礼の彩り》シリカ",10189,15,-1,"2020/08/25 7:00:00","2020/09/15 2:00:00"
|
||||
18904,"《賑わいの明光》レイン",10189,15,-1,"2020/08/25 7:00:00","2020/09/15 2:00:00"
|
||||
19001,"《お姫様メイド》アリス",10190,90,-1,"2020/09/08 7:00:00","2020/09/29 2:00:00"
|
||||
19002,"《お嬢様メイド》アスナ",10190,15,-1,"2020/09/08 7:00:00","2020/09/29 2:00:00"
|
||||
19003,"《お世話好きメイド》直葉",10190,15,-1,"2020/09/08 7:00:00","2020/09/29 2:00:00"
|
||||
19004,"《純真メイド》ユイ",10190,15,-1,"2020/09/08 7:00:00","2020/09/29 2:00:00"
|
||||
19101,"《チアー・アップ!》フィリア",10191,90,-1,"2020/09/22 7:00:00","2020/10/13 2:00:00"
|
||||
19102,"《チアフル・リーダー》アスナ",10191,15,-1,"2020/09/22 7:00:00","2020/10/13 2:00:00"
|
||||
19103,"《チアフル・ジャンプ》リーファ",10191,15,-1,"2020/09/22 7:00:00","2020/10/13 2:00:00"
|
||||
19104,"《チアフル・エール》シリカ",10191,15,-1,"2020/09/22 7:00:00","2020/10/13 2:00:00"
|
||||
19201,"《晴天の高揚》ユウキ",10192,90,-1,"2020/08/04 7:00:00","2020/08/25 2:00:00"
|
||||
19202,"《熱砂の輝き》リズベット",10192,90,-1,"2020/08/04 7:00:00","2020/08/25 2:00:00"
|
||||
19203,"《炎夏のひと時》ストレア",10192,90,-1,"2020/08/04 7:00:00","2020/08/25 2:00:00"
|
||||
19204,"《盛夏の思い出》サチ",10192,90,-1,"2020/08/04 7:00:00","2020/08/25 2:00:00"
|
||||
19205,"《華夜の巧者》シノン",10192,90,-1,"2020/08/04 7:00:00","2020/08/25 2:00:00"
|
||||
19206,"《はじける笑顔》シリカ",10192,15,-1,"2020/08/04 7:00:00","2020/08/25 2:00:00"
|
||||
19207,"《真夏の遊戯》キリト",10192,15,-1,"2020/08/04 7:00:00","2020/08/25 2:00:00"
|
||||
19208,"《納涼の誘い》フィリア",10192,15,-1,"2020/08/04 7:00:00","2020/08/25 2:00:00"
|
||||
19209,"《暑熱の高鳴り》ユイ",10192,15,-1,"2020/08/04 7:00:00","2020/08/25 2:00:00"
|
||||
19210,"《一夏の華》アスナ",10192,15,-1,"2020/08/04 7:00:00","2020/08/25 2:00:00"
|
||||
19211,"《華輝の妖精》リーファ",10192,15,-1,"2020/08/04 7:00:00","2020/08/25 2:00:00"
|
||||
19212,"《真夏の憧憬》ユウキ",10192,15,-1,"2020/08/04 7:00:00","2020/08/25 2:00:00"
|
||||
19213,"《熱暑の漢達》エギル&クライン",10192,10,-1,"2020/08/04 7:00:00","2020/08/25 2:00:00"
|
||||
19214,"《水辺の戯れ》セブン&レイン",10192,10,-1,"2020/08/04 7:00:00","2020/08/25 2:00:00"
|
||||
19301,"《現を射抜く眼》シノン",10193,150,-1,"2020/10/20 7:00:00","2020/12/01 2:00:00"
|
||||
19302,"《同志と共に》クライン",10193,150,-1,"2020/10/20 7:00:00","2020/12/01 2:00:00"
|
||||
19303,"《仮想を駆けて》ユウキ",10193,150,-1,"2020/10/20 7:00:00","2020/12/01 2:00:00"
|
||||
19304,"MEBRマニアック",10193,30,-1,"2020/10/20 7:00:00","2020/12/01 2:00:00"
|
||||
19305,"ムラマサ",10193,30,-1,"2020/10/20 7:00:00","2020/12/01 2:00:00"
|
||||
19306,"オブシディアナ",10193,30,-1,"2020/10/20 7:00:00","2020/12/01 2:00:00"
|
||||
19307,"ゴールド・ネックレス",10193,30,-1,"2020/10/20 7:00:00","2020/12/01 2:00:00"
|
||||
19308,"ヒーローコード:ボスキラー",10193,100,-1,"2020/10/20 7:00:00","2020/12/01 2:00:00"
|
||||
19309,"ヒーローコード:Mobキラー",10193,100,-1,"2020/10/20 7:00:00","2020/12/01 2:00:00"
|
||||
19310,"ヒーローコード:HP最大時強化",10193,100,-1,"2020/10/20 7:00:00","2020/12/01 2:00:00"
|
||||
19311,"ヒーローコード:HP低下時強化",10193,100,-1,"2020/10/20 7:00:00","2020/12/01 2:00:00"
|
||||
19701,"《劇甚なる金木犀》アリス",10197,150,-1,"2020/11/10 7:00:00","2020/12/01 2:00:00"
|
||||
19702,"《蒼撃の竜姫》シリカ",10197,30,-1,"2020/11/10 7:00:00","2020/12/01 2:00:00"
|
||||
19703,"《光速の絶技》ユウキ",10197,30,-1,"2020/11/10 7:00:00","2020/12/01 2:00:00"
|
||||
19704,"《疾鼠の刻爪》アルゴ",10197,30,-1,"2020/11/10 7:00:00","2020/12/01 2:00:00"
|
||||
19705,"金木犀の剣",10197,30,-1,"2020/11/10 7:00:00","2020/12/01 2:00:00"
|
||||
19706,"スクレープ",10197,30,-1,"2020/11/10 7:00:00","2020/12/01 2:00:00"
|
||||
19707,"オブシディアナ",10197,30,-1,"2020/11/10 7:00:00","2020/12/01 2:00:00"
|
||||
19708,"ウィズィー・ガジェット",10197,30,-1,"2020/11/10 7:00:00","2020/12/01 2:00:00"
|
||||
19709,"ゴールド・ネックレス",10197,30,-1,"2020/11/10 7:00:00","2020/12/01 2:00:00"
|
||||
19710,"ヒーローコード:ボスキラー",10197,100,-1,"2020/11/10 7:00:00","2020/12/01 2:00:00"
|
||||
19711,"ヒーローコード:Mobキラー",10197,100,-1,"2020/11/10 7:00:00","2020/12/01 2:00:00"
|
||||
19712,"ヒーローコード:HP最大時強化",10197,100,-1,"2020/11/10 7:00:00","2020/12/01 2:00:00"
|
||||
19713,"ヒーローコード:HP低下時強化",10197,100,-1,"2020/11/10 7:00:00","2020/12/01 2:00:00"
|
||||
19801,"《倒れぬ意志》リーファ",10198,150,-1,"2020/10/06 7:00:00","2020/10/27 2:00:00"
|
||||
19802,"《見据える勝利》シノン",10198,150,-1,"2020/10/06 7:00:00","2020/10/27 2:00:00"
|
||||
19803,"ヴァーデュラス・アニマ",10198,30,-1,"2020/10/06 7:00:00","2020/10/27 2:00:00"
|
||||
19804,"MEBRマニアック",10198,30,-1,"2020/10/06 7:00:00","2020/10/27 2:00:00"
|
||||
19805,"ゴールド・ネックレス",10198,30,-1,"2020/10/06 7:00:00","2020/10/27 2:00:00"
|
||||
19806,"ヒーローコード:ボスキラー",10198,100,-1,"2020/10/06 7:00:00","2020/10/27 2:00:00"
|
||||
19807,"ヒーローコード:Mobキラー",10198,100,-1,"2020/10/06 7:00:00","2020/10/27 2:00:00"
|
||||
19808,"ヒーローコード:HP最大時強化",10198,100,-1,"2020/10/06 7:00:00","2020/10/27 2:00:00"
|
||||
19809,"ヒーローコード:HP低下時強化",10198,100,-1,"2020/10/06 7:00:00","2020/10/27 2:00:00"
|
||||
19901,"《羽ばたく希望》アスナ",10199,150,-1,"2020/11/24 7:00:00","2020/12/15 2:00:00"
|
||||
19902,"《輝く勇気》ユウキ",10199,150,-1,"2020/11/24 7:00:00","2020/12/15 2:00:00"
|
||||
19903,"ラディアント・ライト",10199,30,-1,"2020/11/24 7:00:00","2020/12/15 2:00:00"
|
||||
19904,"オブシディアナ",10199,30,-1,"2020/11/24 7:00:00","2020/12/15 2:00:00"
|
||||
19905,"ゴールド・ネックレス",10199,30,-1,"2020/11/24 7:00:00","2020/12/15 2:00:00"
|
||||
19906,"ヒーローコード:ボスキラー",10199,100,-1,"2020/11/24 7:00:00","2020/12/15 2:00:00"
|
||||
19907,"ヒーローコード:Mobキラー",10199,100,-1,"2020/11/24 7:00:00","2020/12/15 2:00:00"
|
||||
19908,"ヒーローコード:HP最大時強化",10199,100,-1,"2020/11/24 7:00:00","2020/12/15 2:00:00"
|
||||
19909,"ヒーローコード:HP低下時強化",10199,100,-1,"2020/11/24 7:00:00","2020/12/15 2:00:00"
|
||||
20001,"《宵闇の戦士》キリト",10200,90,-1,"2020/10/13 7:00:00","2020/11/03 2:00:00"
|
||||
20002,"《愛を紡ぐ天使》アスナ",10200,90,-1,"2020/10/13 7:00:00","2020/11/03 2:00:00"
|
||||
20003,"《光輝の天使》アリス",10200,15,-1,"2020/10/13 7:00:00","2020/11/03 2:00:00"
|
||||
20004,"《闇の貴公子》ユージオ",10200,15,-1,"2020/10/13 7:00:00","2020/11/03 2:00:00"
|
||||
20005,"《愛しき闇天使》ユイ",10200,10,-1,"2020/10/13 7:00:00","2020/11/03 2:00:00"
|
||||
20101,"《キューティ・ウルフ》ユウキ",10201,90,-1,"2020/10/27 7:00:00","2020/11/17 2:00:00"
|
||||
20102,"《ブラッキー・ヴァンプ》キリト",10201,15,-1,"2020/10/27 7:00:00","2020/11/17 2:00:00"
|
||||
20103,"《ラグー・ウィッチ》アスナ",10201,15,-1,"2020/10/27 7:00:00","2020/11/17 2:00:00"
|
||||
20104,"《ムーンナイト・ウルフ》リーファ",10201,15,-1,"2020/10/27 7:00:00","2020/11/17 2:00:00"
|
||||
20201,"《輝夜の月うさぎ》アスナ",10202,90,-1,"2020/11/03 7:00:00","2020/11/24 2:00:00"
|
||||
20202,"《佳宵の月うさぎ》アリス",10202,90,-1,"2020/11/03 7:00:00","2020/11/24 2:00:00"
|
||||
20203,"《暁の月うさぎ》リーファ",10202,15,-1,"2020/11/03 7:00:00","2020/11/24 2:00:00"
|
||||
20204,"《宵闇の月うさぎ》シノン",10202,15,-1,"2020/11/03 7:00:00","2020/11/24 2:00:00"
|
||||
20205,"《黄昏の月うさぎ》ユウキ",10202,10,-1,"2020/11/03 7:00:00","2020/11/24 2:00:00"
|
||||
20301,"《笑顔の奉迎》レイン",10203,90,-1,"2020/11/17 7:00:00","2020/12/08 2:00:00"
|
||||
20302,"《氷静の差添》シノン",10203,15,-1,"2020/11/17 7:00:00","2020/12/08 2:00:00"
|
||||
20303,"《桜袖の応援》シリカ",10203,15,-1,"2020/11/17 7:00:00","2020/12/08 2:00:00"
|
||||
20304,"《奉仕の戦華》ストレア",10203,15,-1,"2020/11/17 7:00:00","2020/12/08 2:00:00"
|
||||
20401,"《スウィートウィッチ》ユイ",10204,90,-1,"2020/10/06 7:00:00","2020/10/27 2:00:00"
|
||||
20402,"《ドリーミィ・バニー》アスナ",10204,90,-1,"2020/10/06 7:00:00","2020/10/27 2:00:00"
|
||||
20403,"《クレバーソーサレス》シノン",10204,15,-1,"2020/10/06 7:00:00","2020/10/27 2:00:00"
|
||||
20404,"《マジカルスミス》リズベット",10204,15,-1,"2020/10/06 7:00:00","2020/10/27 2:00:00"
|
||||
20405,"《キャットモンスター》シリカ",10204,15,-1,"2020/10/06 7:00:00","2020/10/27 2:00:00"
|
||||
20406,"《ファイン・サービング》直葉",10204,15,-1,"2020/10/06 7:00:00","2020/10/27 2:00:00"
|
||||
20407,"《ベット・タイム!》ユウキ",10204,15,-1,"2020/10/06 7:00:00","2020/10/27 2:00:00"
|
||||
20408,"《ベスト・サービス》ストレア",10204,15,-1,"2020/10/06 7:00:00","2020/10/27 2:00:00"
|
||||
20501,"《永久の約束》キリト&アスナ&ユイ",10205,90,-1,"2020/10/20 7:00:00","2020/11/10 2:00:00"
|
||||
20502,"《在りし日の宝物》アリス",10205,90,-1,"2020/10/20 7:00:00","2020/11/10 2:00:00"
|
||||
20503,"《竹馬の友》キリト&ユージオ",10205,90,-1,"2020/10/20 7:00:00","2020/11/10 2:00:00"
|
||||
20504,"《優艶な幼な妻》アスナ",10205,15,-1,"2020/10/20 7:00:00","2020/11/10 2:00:00"
|
||||
20505,"《光彩の加護》ユイ",10205,15,-1,"2020/10/20 7:00:00","2020/11/10 2:00:00"
|
||||
20506,"《絆の双刃》キリト&アスナ",10205,15,-1,"2020/10/20 7:00:00","2020/11/10 2:00:00"
|
||||
20507,"《在りし日の親友》ユージオ",10205,15,-1,"2020/10/20 7:00:00","2020/11/10 2:00:00"
|
||||
20508,"《協同調和》アリス&アスナ",10205,15,-1,"2020/10/20 7:00:00","2020/11/10 2:00:00"
|
||||
20601,"《はにかみ露天》リズベット",10206,90,-1,"2020/11/24 7:00:00","2020/12/15 2:00:00"
|
||||
20602,"《湯煙のひと時》ユイ",10206,90,-1,"2020/11/24 7:00:00","2020/12/15 2:00:00"
|
||||
20603,"《食いしん坊トナカイ》シリカ",10206,90,-1,"2020/11/24 7:00:00","2020/12/15 2:00:00"
|
||||
20604,"《聖夜の歌声》サチ",10206,90,-1,"2020/11/24 7:00:00","2020/12/15 2:00:00"
|
||||
20605,"《温熱の誘惑》リーファ",10206,15,-1,"2020/11/24 7:00:00","2020/12/15 2:00:00"
|
||||
20606,"《浴場の洗戯》ユウキ",10206,15,-1,"2020/11/24 7:00:00","2020/12/15 2:00:00"
|
||||
20607,"《魅惑の綺羅星》リーファ",10206,15,-1,"2020/11/24 7:00:00","2020/12/15 2:00:00"
|
||||
20608,"《雪明りの贈り物》シノン",10206,15,-1,"2020/11/24 7:00:00","2020/12/15 2:00:00"
|
||||
20609,"《湯上りの一本》エギル",10206,10,-1,"2020/11/24 7:00:00","2020/12/15 2:00:00"
|
||||
20610,"《雪旅の宝物》フィリア",10206,10,-1,"2020/11/24 7:00:00","2020/12/15 2:00:00"
|
||||
20801,"《ジョイフルキャロル》リーファ",10208,150,-1,"2020/12/08 7:00:00","2021/01/19 2:00:00"
|
||||
20802,"《ホワイトジングル》シノン",10208,150,-1,"2020/12/08 7:00:00","2021/01/19 2:00:00"
|
||||
20803,"《スノープレゼント》アリス",10208,150,-1,"2020/12/08 7:00:00","2021/01/19 2:00:00"
|
||||
20804,"エターナル・ツリー",10208,30,-1,"2020/12/08 7:00:00","2021/01/19 2:00:00"
|
||||
20805,"スノウマン・ステッキ",10208,30,-1,"2020/12/08 7:00:00","2021/01/19 2:00:00"
|
||||
20806,"ジングル・ヘッド",10208,30,-1,"2020/12/08 7:00:00","2021/01/19 2:00:00"
|
||||
20807,"マジカル・リース",10208,30,-1,"2020/12/08 7:00:00","2021/01/19 2:00:00"
|
||||
20808,"ヒーローコード:ボスキラー",10208,100,-1,"2020/12/08 7:00:00","2021/01/19 2:00:00"
|
||||
20809,"ヒーローコード:Mobキラー",10208,100,-1,"2020/12/08 7:00:00","2021/01/19 2:00:00"
|
||||
20810,"ヒーローコード:HP最大時強化",10208,100,-1,"2020/12/08 7:00:00","2021/01/19 2:00:00"
|
||||
20811,"ヒーローコード:HP低下時強化",10208,100,-1,"2020/12/08 7:00:00","2021/01/19 2:00:00"
|
||||
21301,"《ハッピークリスマス》アスナ",10213,150,-1,"2020/12/08 7:00:00","2021/01/08 2:00:00"
|
||||
21302,"《ホーリーデコレイト》リズベット",10213,150,-1,"2020/12/08 7:00:00","2021/01/08 2:00:00"
|
||||
21303,"《ギフト・トゥギャザー! 》ユウキ",10213,150,-1,"2020/12/08 7:00:00","2021/01/08 2:00:00"
|
||||
21304,"スノウマン・ステッキ",10213,30,-1,"2020/12/08 7:00:00","2021/01/08 2:00:00"
|
||||
21305,"ジングル・ヘッド",10213,30,-1,"2020/12/08 7:00:00","2021/01/08 2:00:00"
|
||||
21306,"エターナル・ツリー",10213,30,-1,"2020/12/08 7:00:00","2021/01/08 2:00:00"
|
||||
21307,"マジカル・リース",10213,30,-1,"2020/12/08 7:00:00","2021/01/08 2:00:00"
|
||||
21308,"ヒーローコード:ボスキラー",10213,100,-1,"2020/12/08 7:00:00","2021/01/08 2:00:00"
|
||||
21309,"ヒーローコード:Mobキラー",10213,100,-1,"2020/12/08 7:00:00","2021/01/08 2:00:00"
|
||||
21310,"ヒーローコード:HP最大時強化",10213,100,-1,"2020/12/08 7:00:00","2021/01/08 2:00:00"
|
||||
21311,"ヒーローコード:HP低下時強化",10213,100,-1,"2020/12/08 7:00:00","2021/01/08 2:00:00"
|
||||
21401,"《荒野の閃光》アスナ",10214,150,-1,"2021/01/12 7:00:00","2021/02/02 2:00:00"
|
||||
21402,"《血盟の狙撃手》シノン",10214,150,-1,"2021/01/12 7:00:00","2021/02/02 2:00:00"
|
||||
21403,"MEBRマニアック",10214,30,-1,"2021/01/12 7:00:00","2021/02/02 2:00:00"
|
||||
21404,"アロンダイト",10214,30,-1,"2021/01/12 7:00:00","2021/02/02 2:00:00"
|
||||
21405,"ゴールド・ネックレス",10214,30,-1,"2021/01/12 7:00:00","2021/02/02 2:00:00"
|
||||
21406,"ヒーローコード:ボスキラー",10214,100,-1,"2021/01/12 7:00:00","2021/02/02 2:00:00"
|
||||
21407,"ヒーローコード:Mobキラー",10214,100,-1,"2021/01/12 7:00:00","2021/02/02 2:00:00"
|
||||
21408,"ヒーローコード:HP最大時強化",10214,100,-1,"2021/01/12 7:00:00","2021/02/02 2:00:00"
|
||||
21409,"ヒーローコード:HP低下時強化",10214,100,-1,"2021/01/12 7:00:00","2021/02/02 2:00:00"
|
||||
21501,"《湯浴みの紅潮》シノン",10215,150,-1,"2021/01/19 7:00:00","2021/02/09 2:00:00"
|
||||
21502,"《秘湯の恥じらい》シリカ",10215,150,-1,"2021/01/19 7:00:00","2021/02/09 2:00:00"
|
||||
21503,"《火照る温浴》アリス",10215,150,-1,"2021/01/19 7:00:00","2021/02/09 2:00:00"
|
||||
21504,"フェイルノート",10215,30,-1,"2021/01/19 7:00:00","2021/02/09 2:00:00"
|
||||
21505,"スクレープ",10215,30,-1,"2021/01/19 7:00:00","2021/02/09 2:00:00"
|
||||
21506,"金木犀の剣",10215,30,-1,"2021/01/19 7:00:00","2021/02/09 2:00:00"
|
||||
21507,"ゴールド・ネックレス",10215,30,-1,"2021/01/19 7:00:00","2021/02/09 2:00:00"
|
||||
21508,"ヒーローコード:ボスキラー",10215,100,-1,"2021/01/19 7:00:00","2021/02/09 2:00:00"
|
||||
21509,"ヒーローコード:Mobキラー",10215,100,-1,"2021/01/19 7:00:00","2021/02/09 2:00:00"
|
||||
21510,"ヒーローコード:HP最大時強化",10215,100,-1,"2021/01/19 7:00:00","2021/02/09 2:00:00"
|
||||
21511,"ヒーローコード:HP低下時強化",10215,100,-1,"2021/01/19 7:00:00","2021/02/09 2:00:00"
|
||||
21601,"《生彩放つ飛躍》アスナ",10216,150,-1,"2021/01/01 7:00:00","2021/01/26 2:00:00"
|
||||
21602,"《純真な想望》ユウキ",10216,150,-1,"2021/01/01 7:00:00","2021/01/26 2:00:00"
|
||||
21603,"《親愛なる漆黒》リーファ",10216,150,-1,"2021/01/01 7:00:00","2021/01/26 2:00:00"
|
||||
21604,"《黒衣の聖騎士》アリス",10216,150,-1,"2021/01/01 7:00:00","2021/01/26 2:00:00"
|
||||
21605,"《ハツコイ同盟》リズベット",10216,150,-1,"2021/01/01 7:00:00","2021/01/26 2:00:00"
|
||||
21606,"《トキメキ同盟》シリカ",10216,150,-1,"2021/01/01 7:00:00","2021/01/26 2:00:00"
|
||||
21607,"《英雄纏う剣才》ユウキ",10216,150,-1,"2021/01/01 7:00:00","2021/01/26 2:00:00"
|
||||
21608,"《忘却の憧憬》ユージオ",10216,150,-1,"2021/01/01 7:00:00","2021/01/26 2:00:00"
|
||||
21609,"《SAOゲーム攻略会議2019》キリト",10216,150,-1,"2021/01/01 7:00:00","2021/01/26 2:00:00"
|
||||
21610,"《不屈の誓い》キリト",10216,150,-1,"2021/01/01 7:00:00","2021/01/26 2:00:00"
|
||||
21611,"《明日への誓い》アスナ",10216,150,-1,"2021/01/01 7:00:00","2021/01/26 2:00:00"
|
||||
21612,"《目映い太陽》リズベット",10216,150,-1,"2021/01/01 7:00:00","2021/01/26 2:00:00"
|
||||
21613,"《白砂の少女》シリカ",10216,150,-1,"2021/01/01 7:00:00","2021/01/26 2:00:00"
|
||||
21614,"《透き通る青》アリス",10216,150,-1,"2021/01/01 7:00:00","2021/01/26 2:00:00"
|
||||
21615,"《紅葉の祝福》ユウキ",10216,150,-1,"2021/01/01 7:00:00","2021/01/26 2:00:00"
|
||||
21616,"《慈愛の光彩》アスナ",10216,30,-1,"2021/01/01 7:00:00","2021/01/26 2:00:00"
|
||||
21617,"《快活なお誘い》リズベット",10216,30,-1,"2021/01/01 7:00:00","2021/01/26 2:00:00"
|
||||
21618,"《至福のひと時》シリカ",10216,30,-1,"2021/01/01 7:00:00","2021/01/26 2:00:00"
|
||||
21801,"《雪華の美姫》アスナ",10218,90,-1,"2020/12/01 7:00:00","2020/12/22 2:00:00"
|
||||
21802,"《プリンセスオリオン》直葉",10218,15,-1,"2020/12/01 7:00:00","2020/12/22 2:00:00"
|
||||
21803,"《聖夜の妖精》シノン",10218,15,-1,"2020/12/01 7:00:00","2020/12/22 2:00:00"
|
||||
21804,"《ウインタークラウス》ユウキ",10218,15,-1,"2020/12/01 7:00:00","2020/12/22 2:00:00"
|
||||
21901,"《冬宴の魅雪》ストレア",10219,90,-1,"2020/12/15 7:00:00","2021/01/08 2:00:00"
|
||||
21902,"《妖精のクリスマス》アスナ",10219,15,-1,"2020/12/15 7:00:00","2021/01/08 2:00:00"
|
||||
21903,"《秘める恋心》リズベット",10219,15,-1,"2020/12/15 7:00:00","2021/01/08 2:00:00"
|
||||
21904,"《聖夜の贈り物》サチ",10219,15,-1,"2020/12/15 7:00:00","2021/01/08 2:00:00"
|
||||
22001,"《温泉の弓姫》シノン",10220,90,-1,"2021/01/19 7:00:00","2021/02/09 2:00:00"
|
||||
22002,"《湯上り剣士》キリト",10220,15,-1,"2021/01/19 7:00:00","2021/02/09 2:00:00"
|
||||
22003,"《背流し癒湯姫》アスナ",10220,15,-1,"2021/01/19 7:00:00","2021/02/09 2:00:00"
|
||||
22004,"《仲良し洗いっこ》シリカ",10220,15,-1,"2021/01/19 7:00:00","2021/02/09 2:00:00"
|
||||
22101,"《世界を包む星空》キリト",10221,150,-1,"2021/01/26 7:00:00","2021/03/02 2:00:00"
|
||||
22102,"《世界を導く光》アリス",10221,150,-1,"2021/01/26 7:00:00","2021/03/02 2:00:00"
|
||||
22103,"《世界を見守る剣》ユージオ",10221,150,-1,"2021/01/26 7:00:00","2021/03/02 2:00:00"
|
||||
22104,"夜空の剣",10221,30,-1,"2021/01/26 7:00:00","2021/03/02 2:00:00"
|
||||
22105,"金木犀の剣",10221,30,-1,"2021/01/26 7:00:00","2021/03/02 2:00:00"
|
||||
22106,"青薔薇の剣",10221,30,-1,"2021/01/26 7:00:00","2021/03/02 2:00:00"
|
||||
22107,"ゴールド・ネックレス",10221,30,-1,"2021/01/26 7:00:00","2021/03/02 2:00:00"
|
||||
22108,"ヒーローコード:ボスキラー",10221,100,-1,"2021/01/26 7:00:00","2021/03/02 2:00:00"
|
||||
22109,"ヒーローコード:Mobキラー",10221,100,-1,"2021/01/26 7:00:00","2021/03/02 2:00:00"
|
||||
22110,"ヒーローコード:HP最大時強化",10221,100,-1,"2021/01/26 7:00:00","2021/03/02 2:00:00"
|
||||
22111,"ヒーローコード:HP低下時強化",10221,100,-1,"2021/01/26 7:00:00","2021/03/02 2:00:00"
|
||||
22201,"《湯の華咲いた》アスナ",10222,150,-1,"2021/02/02 7:00:00","2021/03/23 2:00:00"
|
||||
22202,"《豊潤な湯浴み》リーファ",10222,150,-1,"2021/02/02 7:00:00","2021/03/23 2:00:00"
|
||||
22203,"《温浴の寛ぎ》ユウキ",10222,150,-1,"2021/02/02 7:00:00","2021/03/23 2:00:00"
|
||||
22204,"《秘境の癒湯》アルゴ",10222,150,-1,"2021/02/02 7:00:00","2021/03/23 2:00:00"
|
||||
22205,"《湯上り素顔》レイン",10222,150,-1,"2021/02/02 7:00:00","2021/03/23 2:00:00"
|
||||
22206,"アロンダイト",10222,30,-1,"2021/02/02 7:00:00","2021/03/23 2:00:00"
|
||||
22207,"ヴァルトレーニス",10222,30,-1,"2021/02/02 7:00:00","2021/03/23 2:00:00"
|
||||
22208,"オブシディアナ",10222,30,-1,"2021/02/02 7:00:00","2021/03/23 2:00:00"
|
||||
22209,"スクレープ",10222,30,-1,"2021/02/02 7:00:00","2021/03/23 2:00:00"
|
||||
22210,"ソード・オブ・ホグニ",10222,30,-1,"2021/02/02 7:00:00","2021/03/23 2:00:00"
|
||||
22211,"ゴールド・ネックレス",10222,30,-1,"2021/02/02 7:00:00","2021/03/23 2:00:00"
|
||||
22212,"ヒーローコード:ボスキラー",10222,100,-1,"2021/02/02 7:00:00","2021/03/23 2:00:00"
|
||||
22213,"ヒーローコード:Mobキラー",10222,100,-1,"2021/02/02 7:00:00","2021/03/23 2:00:00"
|
||||
22214,"ヒーローコード:HP最大時強化",10222,100,-1,"2021/02/02 7:00:00","2021/03/23 2:00:00"
|
||||
22215,"ヒーローコード:HP低下時強化",10222,100,-1,"2021/02/02 7:00:00","2021/03/23 2:00:00"
|
||||
22801,"《気儘な黒猫》キリト",10228,150,-1,"2021/02/09 7:00:00","2021/03/16 2:00:00"
|
||||
22802,"《ねころび愛猫》アスナ",10228,150,-1,"2021/02/09 7:00:00","2021/03/16 2:00:00"
|
||||
22803,"《奔放な萌猫》リーファ",10228,150,-1,"2021/02/09 7:00:00","2021/03/16 2:00:00"
|
||||
22804,"《またたび仔猫》ユウキ",10228,150,-1,"2021/02/09 7:00:00","2021/03/16 2:00:00"
|
||||
22805,"《慧眼の弓猫》シノン",10228,30,-1,"2021/02/09 7:00:00","2021/03/16 2:00:00"
|
||||
22806,"《友情の桃猫》リズベット",10228,30,-1,"2021/02/09 7:00:00","2021/03/16 2:00:00"
|
||||
22807,"《可憐な幼猫》シリカ",10228,30,-1,"2021/02/09 7:00:00","2021/03/16 2:00:00"
|
||||
22808,"《猫耳の豪商》エギル",10228,30,-1,"2021/02/09 7:00:00","2021/03/16 2:00:00"
|
||||
22809,"キティ・パウ",10228,30,-1,"2021/02/09 7:00:00","2021/03/16 2:00:00"
|
||||
22810,"ゴールド・ネックレス",10228,30,-1,"2021/02/09 7:00:00","2021/03/16 2:00:00"
|
||||
22811,"ヒーローコード:ボスキラー",10228,100,-1,"2021/02/09 7:00:00","2021/03/16 2:00:00"
|
||||
22812,"ヒーローコード:Mobキラー",10228,100,-1,"2021/02/09 7:00:00","2021/03/16 2:00:00"
|
||||
22813,"ヒーローコード:HP最大時強化",10228,100,-1,"2021/02/09 7:00:00","2021/03/16 2:00:00"
|
||||
22814,"ヒーローコード:HP低下時強化",10228,100,-1,"2021/02/09 7:00:00","2021/03/16 2:00:00"
|
||||
23201,"《笑顔守るために》キリト",10232,150,-1,"2021/03/02 7:00:00","2021/03/23 2:00:00"
|
||||
23202,"《電脳の歌姫》シリカ",10232,150,-1,"2021/03/02 7:00:00","2021/03/23 2:00:00"
|
||||
23203,"エリュシデータ",10232,30,-1,"2021/03/02 7:00:00","2021/03/23 2:00:00"
|
||||
23204,"ジャルディーノ",10232,30,-1,"2021/03/02 7:00:00","2021/03/23 2:00:00"
|
||||
23205,"ゴールド・ネックレス",10232,30,-1,"2021/03/02 7:00:00","2021/03/23 2:00:00"
|
||||
23206,"ヒーローコード:ボスキラー",10232,100,-1,"2021/03/02 7:00:00","2021/03/23 2:00:00"
|
||||
23207,"ヒーローコード:Mobキラー",10232,100,-1,"2021/03/02 7:00:00","2021/03/23 2:00:00"
|
||||
23208,"ヒーローコード:HP最大時強化",10232,100,-1,"2021/03/02 7:00:00","2021/03/23 2:00:00"
|
||||
23209,"ヒーローコード:HP低下時強化",10232,100,-1,"2021/03/02 7:00:00","2021/03/23 2:00:00"
|
||||
23301,"《ふたとせ求めて》キリト",10233,150,-1,"2021/03/16 7:00:00","2021/04/13 2:00:00"
|
||||
23302,"《ふたとせ歩みて》アスナ",10233,150,-1,"2021/03/16 7:00:00","2021/04/13 2:00:00"
|
||||
23303,"ダークリパルサー",10233,30,-1,"2021/03/16 7:00:00","2021/04/13 2:00:00"
|
||||
23304,"ラディアント・ライト",10233,30,-1,"2021/03/16 7:00:00","2021/04/13 2:00:00"
|
||||
23305,"ゴールド・ネックレス",10233,30,-1,"2021/03/16 7:00:00","2021/04/13 2:00:00"
|
||||
23306,"ヒーローコード:ボスキラー",10233,100,-1,"2021/03/16 7:00:00","2021/04/13 2:00:00"
|
||||
23307,"ヒーローコード:Mobキラー",10233,100,-1,"2021/03/16 7:00:00","2021/04/13 2:00:00"
|
||||
23308,"ヒーローコード:HP最大時強化",10233,100,-1,"2021/03/16 7:00:00","2021/04/13 2:00:00"
|
||||
23309,"ヒーローコード:HP低下時強化",10233,100,-1,"2021/03/16 7:00:00","2021/04/13 2:00:00"
|
||||
23401,"《甘い真心》リズベット",10234,90,-1,"2021/02/02 7:00:00","2021/02/23 2:00:00"
|
||||
23402,"《甘い恋のコクハク》シノン",10234,15,-1,"2021/02/02 7:00:00","2021/02/23 2:00:00"
|
||||
23403,"《思慕の猫姫》シリカ",10234,15,-1,"2021/02/02 7:00:00","2021/02/23 2:00:00"
|
||||
23404,"《恋焦がれるココロ》ユウキ",10234,15,-1,"2021/02/02 7:00:00","2021/02/23 2:00:00"
|
||||
23501,"《安らかな夢見》リーファ",10235,90,-1,"2021/02/16 7:00:00","2021/03/09 2:00:00"
|
||||
23502,"《早天の射手》シノン",10235,15,-1,"2021/02/16 7:00:00","2021/03/09 2:00:00"
|
||||
23503,"《夢路への誘い》ストレア",10235,15,-1,"2021/02/16 7:00:00","2021/03/09 2:00:00"
|
||||
23504,"《憩いの歌姫》セブン",10235,15,-1,"2021/02/16 7:00:00","2021/03/09 2:00:00"
|
||||
23601,"《紫光の絶拳》ユウキ",10236,90,-1,"2021/03/02 7:00:00","2021/03/23 2:00:00"
|
||||
23602,"《華麗な紅華》アスナ",10236,15,-1,"2021/03/02 7:00:00","2021/03/23 2:00:00"
|
||||
23603,"《疾風の美技》リーファ",10236,15,-1,"2021/03/02 7:00:00","2021/03/23 2:00:00"
|
||||
23604,"《赤影の明花》レイン",10236,15,-1,"2021/03/02 7:00:00","2021/03/23 2:00:00"
|
||||
23701,"《恋情パティシエ》リーファ",10237,90,-1,"2021/03/09 7:00:00","2021/03/30 2:00:00"
|
||||
23702,"《恒久の愛情》ユージオ",10237,90,-1,"2021/03/09 7:00:00","2021/03/30 2:00:00"
|
||||
23703,"《最愛パティシエ》アスナ",10237,15,-1,"2021/03/09 7:00:00","2021/03/30 2:00:00"
|
||||
23704,"《純情ショコラ》シノン",10237,15,-1,"2021/03/09 7:00:00","2021/03/30 2:00:00"
|
||||
23705,"《恋慕ショコラ》シリカ",10237,15,-1,"2021/03/09 7:00:00","2021/03/30 2:00:00"
|
||||
23706,"《赤誠の求愛》キリト",10237,15,-1,"2021/03/09 7:00:00","2021/03/30 2:00:00"
|
||||
23707,"《狂愛の誓い》クラディール",10237,15,-1,"2021/03/09 7:00:00","2021/03/30 2:00:00"
|
||||
23801,"《心照らす歌声》ユナ",10238,90,-1,"2021/03/16 7:00:00","2021/04/06 2:00:00"
|
||||
23802,"《心奮う戦い》エイジ",10238,90,-1,"2021/03/16 7:00:00","2021/04/06 2:00:00"
|
||||
23803,"EXPメモリ",10238,5,-1,"2021/03/16 7:00:00","2021/04/06 2:00:00"
|
||||
23804,"プラチナ",10238,5,-1,"2021/03/16 7:00:00","2021/04/06 2:00:00"
|
||||
23901,"《うららかジャンプ》アスナ",10239,150,-1,"2021/03/30 7:00:00","2021/05/04 2:00:00"
|
||||
23902,"《はるかぜジャンプ》ユウキ",10239,150,-1,"2021/03/30 7:00:00","2021/05/04 2:00:00"
|
||||
23903,"《ゆきどけジャンプ》アリス",10239,150,-1,"2021/03/30 7:00:00","2021/05/04 2:00:00"
|
||||
23904,"アロンダイト",10239,30,-1,"2021/03/30 7:00:00","2021/05/04 2:00:00"
|
||||
23905,"オブシディアナ",10239,30,-1,"2021/03/30 7:00:00","2021/05/04 2:00:00"
|
||||
23906,"金木犀の剣",10239,30,-1,"2021/03/30 7:00:00","2021/05/04 2:00:00"
|
||||
23907,"ゴールド・ネックレス",10239,30,-1,"2021/03/30 7:00:00","2021/05/04 2:00:00"
|
||||
23908,"ヒーローコード:ボスキラー",10239,100,-1,"2021/03/30 7:00:00","2021/05/04 2:00:00"
|
||||
23909,"ヒーローコード:Mobキラー",10239,100,-1,"2021/03/30 7:00:00","2021/05/04 2:00:00"
|
||||
23910,"ヒーローコード:HP最大時強化",10239,100,-1,"2021/03/30 7:00:00","2021/05/04 2:00:00"
|
||||
23911,"ヒーローコード:HP低下時強化",10239,100,-1,"2021/03/30 7:00:00","2021/05/04 2:00:00"
|
||||
24301,"《世界を越えて》アリス",10243,150,-1,"2021/04/27 7:00:00","2021/06/01 2:00:00"
|
||||
24302,"《新たな挑戦》ユージオ",10243,150,-1,"2021/04/27 7:00:00","2021/06/01 2:00:00"
|
||||
24303,"《共に駆ける今》レイン",10243,150,-1,"2021/04/27 7:00:00","2021/06/01 2:00:00"
|
||||
24304,"金木犀の剣",10243,30,-1,"2021/04/27 7:00:00","2021/06/01 2:00:00"
|
||||
24305,"青薔薇の剣",10243,30,-1,"2021/04/27 7:00:00","2021/06/01 2:00:00"
|
||||
24306,"ソード・オブ・ホグニ",10243,30,-1,"2021/04/27 7:00:00","2021/06/01 2:00:00"
|
||||
24307,"ゴールド・ネックレス",10243,30,-1,"2021/04/27 7:00:00","2021/06/01 2:00:00"
|
||||
24308,"ヒーローコード:ボスキラー",10243,100,-1,"2021/04/27 7:00:00","2021/06/01 2:00:00"
|
||||
24309,"ヒーローコード:Mobキラー",10243,100,-1,"2021/04/27 7:00:00","2021/06/01 2:00:00"
|
||||
24310,"ヒーローコード:HP最大時強化",10243,100,-1,"2021/04/27 7:00:00","2021/06/01 2:00:00"
|
||||
24311,"ヒーローコード:HP低下時強化",10243,100,-1,"2021/04/27 7:00:00","2021/06/01 2:00:00"
|
||||
24701,"《フェアリー・ワルツ》アスナ",10247,150,-1,"2021/05/25 7:00:00","2021/06/22 2:00:00"
|
||||
24702,"《フェアリー・マージ》リーファ",10247,150,-1,"2021/05/25 7:00:00","2021/06/22 2:00:00"
|
||||
24703,"アロンダイト",10247,30,-1,"2021/05/25 7:00:00","2021/06/22 2:00:00"
|
||||
24704,"ムラマサ",10247,30,-1,"2021/05/25 7:00:00","2021/06/22 2:00:00"
|
||||
24705,"ゴールド・ネックレス",10247,30,-1,"2021/05/25 7:00:00","2021/06/22 2:00:00"
|
||||
24706,"ヒーローコード:ボスキラー",10247,100,-1,"2021/05/25 7:00:00","2021/06/22 2:00:00"
|
||||
24707,"ヒーローコード:Mobキラー",10247,100,-1,"2021/05/25 7:00:00","2021/06/22 2:00:00"
|
||||
24708,"ヒーローコード:HP最大時強化",10247,100,-1,"2021/05/25 7:00:00","2021/06/22 2:00:00"
|
||||
24709,"ヒーローコード:HP低下時強化",10247,100,-1,"2021/05/25 7:00:00","2021/06/22 2:00:00"
|
||||
24801,"《頼れる盟友》リズベット",10248,150,-1,"2021/03/23 7:00:00","2021/04/20 2:00:00"
|
||||
24802,"《勇気の跳躍》シリカ",10248,150,-1,"2021/03/23 7:00:00","2021/04/20 2:00:00"
|
||||
24803,"グリダヴォル",10248,30,-1,"2021/03/23 7:00:00","2021/04/20 2:00:00"
|
||||
24804,"ジャルディーノ",10248,30,-1,"2021/03/23 7:00:00","2021/04/20 2:00:00"
|
||||
24805,"ゴールド・ネックレス",10248,30,-1,"2021/03/23 7:00:00","2021/04/20 2:00:00"
|
||||
24806,"ヒーローコード:ボスキラー",10248,100,-1,"2021/03/23 7:00:00","2021/04/20 2:00:00"
|
||||
24807,"ヒーローコード:Mobキラー",10248,100,-1,"2021/03/23 7:00:00","2021/04/20 2:00:00"
|
||||
24808,"ヒーローコード:HP最大時強化",10248,100,-1,"2021/03/23 7:00:00","2021/04/20 2:00:00"
|
||||
24809,"ヒーローコード:HP低下時強化",10248,100,-1,"2021/03/23 7:00:00","2021/04/20 2:00:00"
|
||||
24901,"《黒衣の英雄》キリト",10249,150,-1,"2021/04/13 7:00:00","2021/05/08 2:00:00"
|
||||
24902,"《英雄の剣匠》リズベット",10249,150,-1,"2021/04/13 7:00:00","2021/05/08 2:00:00"
|
||||
24903,"ダークリパルサー",10249,30,-1,"2021/04/13 7:00:00","2021/05/08 2:00:00"
|
||||
24904,"グリダヴォル",10249,30,-1,"2021/04/13 7:00:00","2021/05/08 2:00:00"
|
||||
24905,"ゴールド・ネックレス",10249,30,-1,"2021/04/13 7:00:00","2021/05/08 2:00:00"
|
||||
24906,"ヒーローコード:ボスキラー",10249,100,-1,"2021/04/13 7:00:00","2021/05/08 2:00:00"
|
||||
24907,"ヒーローコード:Mobキラー",10249,100,-1,"2021/04/13 7:00:00","2021/05/08 2:00:00"
|
||||
24908,"ヒーローコード:HP最大時強化",10249,100,-1,"2021/04/13 7:00:00","2021/05/08 2:00:00"
|
||||
24909,"ヒーローコード:HP低下時強化",10249,100,-1,"2021/04/13 7:00:00","2021/05/08 2:00:00"
|
||||
25001,"《倒れぬ意志》リーファ",10250,150,-1,"2021/05/01 7:00:00","2021/06/01 2:00:00"
|
||||
25002,"《見据える勝利》シノン",10250,150,-1,"2021/05/01 7:00:00","2021/06/01 2:00:00"
|
||||
25003,"《羽ばたく希望》アスナ",10250,150,-1,"2021/05/01 7:00:00","2021/06/01 2:00:00"
|
||||
25004,"《輝く勇気》ユウキ",10250,150,-1,"2021/05/01 7:00:00","2021/06/01 2:00:00"
|
||||
25005,"ヴァーデュラス・アニマ",10250,30,-1,"2021/05/01 7:00:00","2021/06/01 2:00:00"
|
||||
25006,"MEBRマニアック",10250,30,-1,"2021/05/01 7:00:00","2021/06/01 2:00:00"
|
||||
25007,"ラディアント・ライト",10250,30,-1,"2021/05/01 7:00:00","2021/06/01 2:00:00"
|
||||
25008,"オブシディアナ",10250,30,-1,"2021/05/01 7:00:00","2021/06/01 2:00:00"
|
||||
25009,"ゴールド・ネックレス",10250,30,-1,"2021/05/01 7:00:00","2021/06/01 2:00:00"
|
||||
25010,"ヒーローコード:ボスキラー",10250,100,-1,"2021/05/01 7:00:00","2021/06/01 2:00:00"
|
||||
25011,"ヒーローコード:Mobキラー",10250,100,-1,"2021/05/01 7:00:00","2021/06/01 2:00:00"
|
||||
25012,"ヒーローコード:HP最大時強化",10250,100,-1,"2021/05/01 7:00:00","2021/06/01 2:00:00"
|
||||
25013,"ヒーローコード:HP低下時強化",10250,100,-1,"2021/05/01 7:00:00","2021/06/01 2:00:00"
|
||||
25101,"《心の傷を越えて》シノン",10251,90,-1,"2021/04/06 7:00:00","2021/04/27 2:00:00"
|
||||
25102,"《春満開》リーファ",10251,15,-1,"2021/04/06 7:00:00","2021/04/27 2:00:00"
|
||||
25103,"《敬慕の瞳》シリカ",10251,15,-1,"2021/04/06 7:00:00","2021/04/27 2:00:00"
|
||||
25104,"《番長》キバオウ",10251,15,-1,"2021/04/06 7:00:00","2021/04/27 2:00:00"
|
||||
25201,"《碧海の踊り子》シリカ",10252,90,-1,"2021/04/20 7:00:00","2021/05/18 2:00:00"
|
||||
25202,"《閃花の舞姫》アスナ",10252,15,-1,"2021/04/20 7:00:00","2021/05/18 2:00:00"
|
||||
25203,"《氷弾の闘舞》シノン",10252,15,-1,"2021/04/20 7:00:00","2021/05/18 2:00:00"
|
||||
25204,"《探求の踊り手》フィリア",10252,15,-1,"2021/04/20 7:00:00","2021/05/18 2:00:00"
|
||||
25301,"《完全無欠メイド》アスナ",10253,90,-1,"2021/05/11 7:00:00","2021/06/08 2:00:00"
|
||||
25302,"《有頂天外メイド》キリト",10253,15,-1,"2021/05/11 7:00:00","2021/06/08 2:00:00"
|
||||
25303,"《天真爛漫メイド》ユウキ",10253,15,-1,"2021/05/11 7:00:00","2021/06/08 2:00:00"
|
||||
25304,"《才色兼備メイド》セブン",10253,15,-1,"2021/05/11 7:00:00","2021/06/08 2:00:00"
|
||||
25501,"《麗凛な獣猫》シノン",10255,150,-1,"2021/06/08 7:00:00","2021/07/27 2:00:00"
|
||||
25502,"《毛繕い桃猫》リズベット",10255,150,-1,"2021/06/08 7:00:00","2021/07/27 2:00:00"
|
||||
25503,"《まったり愛猫》シリカ",10255,150,-1,"2021/06/08 7:00:00","2021/07/27 2:00:00"
|
||||
25504,"《隆隆狩猫》エギル",10255,150,-1,"2021/06/08 7:00:00","2021/07/27 2:00:00"
|
||||
25505,"《とびつき活猫》ユウキ",10255,150,-1,"2021/06/08 7:00:00","2021/07/27 2:00:00"
|
||||
25506,"キティ・パウ",10255,30,-1,"2021/06/08 7:00:00","2021/07/27 2:00:00"
|
||||
25507,"ゴールド・ネックレス",10255,30,-1,"2021/06/08 7:00:00","2021/07/27 2:00:00"
|
||||
25508,"ヒーローコード:ボスキラー",10255,100,-1,"2021/06/08 7:00:00","2021/07/27 2:00:00"
|
||||
25509,"ヒーローコード:Mobキラー",10255,100,-1,"2021/06/08 7:00:00","2021/07/27 2:00:00"
|
||||
25510,"ヒーローコード:HP最大時強化",10255,100,-1,"2021/06/08 7:00:00","2021/07/27 2:00:00"
|
||||
25511,"ヒーローコード:HP低下時強化",10255,100,-1,"2021/06/08 7:00:00","2021/07/27 2:00:00"
|
||||
26101,"《犀薫る浜辺》アスナ",10261,150,-1,"1971/07/20 7:00:00","1971/08/17 2:00:00"
|
||||
26102,"《波打ち際の彩》アリス",10261,150,-1,"1971/07/20 7:00:00","1971/08/17 2:00:00"
|
||||
26103,"金木犀の剣",10261,30,-1,"1971/07/20 7:00:00","1971/08/17 2:00:00"
|
||||
26104,"アロンダイト",10261,30,-1,"1971/07/20 7:00:00","1971/08/17 2:00:00"
|
||||
26105,"ゴールド・ネックレス",10261,30,-1,"1971/07/20 7:00:00","1971/08/17 2:00:00"
|
||||
26106,"ヒーローコード:ボスキラー",10261,100,-1,"1971/07/20 7:00:00","1971/08/17 2:00:00"
|
||||
26107,"ヒーローコード:Mobキラー",10261,100,-1,"1971/07/20 7:00:00","1971/08/17 2:00:00"
|
||||
26108,"ヒーローコード:HP最大時強化",10261,100,-1,"1971/07/20 7:00:00","1971/08/17 2:00:00"
|
||||
26109,"ヒーローコード:HP低下時強化",10261,100,-1,"1971/07/20 7:00:00","1971/08/17 2:00:00"
|
||||
26401,"《世界を包む星空》キリト",10264,150,-1,"2021/07/20 7:00:00","2021/08/17 2:00:00"
|
||||
26402,"《世界を導く光》アリス",10264,150,-1,"2021/07/20 7:00:00","2021/08/17 2:00:00"
|
||||
26403,"《世界を見守る剣》ユージオ",10264,150,-1,"2021/07/20 7:00:00","2021/08/17 2:00:00"
|
||||
26404,"夜空の剣",10264,30,-1,"2021/07/20 7:00:00","2021/08/17 2:00:00"
|
||||
26405,"金木犀の剣",10264,30,-1,"2021/07/20 7:00:00","2021/08/17 2:00:00"
|
||||
26406,"青薔薇の剣",10264,30,-1,"2021/07/20 7:00:00","2021/08/17 2:00:00"
|
||||
26407,"ゴールド・ネックレス",10264,30,-1,"2021/07/20 7:00:00","2021/08/17 2:00:00"
|
||||
26408,"ヒーローコード:ボスキラー",10264,100,-1,"2021/07/20 7:00:00","2021/08/17 2:00:00"
|
||||
26409,"ヒーローコード:Mobキラー",10264,100,-1,"2021/07/20 7:00:00","2021/08/17 2:00:00"
|
||||
26410,"ヒーローコード:HP最大時強化",10264,100,-1,"2021/07/20 7:00:00","2021/08/17 2:00:00"
|
||||
26411,"ヒーローコード:HP低下時強化",10264,100,-1,"2021/07/20 7:00:00","2021/08/17 2:00:00"
|
||||
26601,"《天幸の恩愛》アスナ",10266,90,-1,"2021/06/01 7:00:00","2021/06/29 2:00:00"
|
||||
26602,"《甘やかな誓愛》シノン",10266,15,-1,"2021/06/01 7:00:00","2021/06/29 2:00:00"
|
||||
26603,"《無邪気な幼愛》ユウキ",10266,15,-1,"2021/06/01 7:00:00","2021/06/29 2:00:00"
|
||||
26604,"《優艶な祝愛》ストレア",10266,15,-1,"2021/06/01 7:00:00","2021/06/29 2:00:00"
|
||||
26701,"《夜天の桃虹》リズベット",10267,90,-1,"2021/07/06 7:00:00","2021/08/03 2:00:00"
|
||||
26702,"《光星の天女》アスナ",10267,15,-1,"2021/07/06 7:00:00","2021/08/03 2:00:00"
|
||||
26703,"《星彩の願い》シリカ",10267,15,-1,"2021/07/06 7:00:00","2021/08/03 2:00:00"
|
||||
26704,"《宵闇の流星》ユウキ",10267,15,-1,"2021/07/06 7:00:00","2021/08/03 2:00:00"
|
||||
26901,"《ふたとせ求めて》キリト",10233,150,-1,"2021/06/01 7:00:00","2021/06/29 2:00:00"
|
||||
26902,"《ふたとせ歩みて》アスナ",10233,150,-1,"2021/06/01 7:00:00","2021/06/29 2:00:00"
|
||||
26903,"ダークリパルサー",10233,30,-1,"2021/06/01 7:00:00","2021/06/29 2:00:00"
|
||||
26904,"ラディアント・ライト",10233,30,-1,"2021/06/01 7:00:00","2021/06/29 2:00:00"
|
||||
26905,"ゴールド・ネックレス",10233,30,-1,"2021/06/01 7:00:00","2021/06/29 2:00:00"
|
||||
26906,"ヒーローコード:ボスキラー",10233,100,-1,"2021/06/01 7:00:00","2021/06/29 2:00:00"
|
||||
26907,"ヒーローコード:Mobキラー",10233,100,-1,"2021/06/01 7:00:00","2021/06/29 2:00:00"
|
||||
26908,"ヒーローコード:HP最大時強化",10233,100,-1,"2021/06/01 7:00:00","2021/06/29 2:00:00"
|
||||
26909,"ヒーローコード:HP低下時強化",10233,100,-1,"2021/06/01 7:00:00","2021/06/29 2:00:00"
|
||||
27001,"《碧海の踊り子》シリカ",10252,90,-1,"2021/07/13 7:00:00","2021/08/10 2:00:00"
|
||||
27002,"《閃花の舞姫》アスナ",10252,15,-1,"2021/07/13 7:00:00","2021/08/10 2:00:00"
|
||||
27003,"《氷弾の闘舞》シノン",10252,15,-1,"2021/07/13 7:00:00","2021/08/10 2:00:00"
|
||||
27004,"《探求の踊り手》フィリア",10252,15,-1,"2021/07/13 7:00:00","2021/08/10 2:00:00"
|
||||
27101,"《世界を越えて》アリス",10243,150,-1,"2021/06/29 7:00:00","2021/08/03 2:00:00"
|
||||
27102,"《新たな挑戦》ユージオ",10243,150,-1,"2021/06/29 7:00:00","2021/08/03 2:00:00"
|
||||
27103,"《共に駆ける今》レイン",10243,150,-1,"2021/06/29 7:00:00","2021/08/03 2:00:00"
|
||||
27104,"金木犀の剣",10243,30,-1,"2021/06/29 7:00:00","2021/08/03 2:00:00"
|
||||
27105,"青薔薇の剣",10243,30,-1,"2021/06/29 7:00:00","2021/08/03 2:00:00"
|
||||
27106,"ソード・オブ・ホグニ",10243,30,-1,"2021/06/29 7:00:00","2021/08/03 2:00:00"
|
||||
27107,"ゴールド・ネックレス",10243,30,-1,"2021/06/29 7:00:00","2021/08/03 2:00:00"
|
||||
27108,"ヒーローコード:ボスキラー",10243,100,-1,"2021/06/29 7:00:00","2021/08/03 2:00:00"
|
||||
27109,"ヒーローコード:Mobキラー",10243,100,-1,"2021/06/29 7:00:00","2021/08/03 2:00:00"
|
||||
27110,"ヒーローコード:HP最大時強化",10243,100,-1,"2021/06/29 7:00:00","2021/08/03 2:00:00"
|
||||
27111,"ヒーローコード:HP低下時強化",10243,100,-1,"2021/06/29 7:00:00","2021/08/03 2:00:00"
|
||||
27501,"《倒れぬ意志》リーファ",10250,150,-1,"2021/06/15 7:00:00","2021/07/13 2:00:00"
|
||||
27502,"《見据える勝利》シノン",10250,150,-1,"2021/06/15 7:00:00","2021/07/13 2:00:00"
|
||||
27503,"《羽ばたく希望》アスナ",10250,150,-1,"2021/06/15 7:00:00","2021/07/13 2:00:00"
|
||||
27504,"《輝く勇気》ユウキ",10250,150,-1,"2021/06/15 7:00:00","2021/07/13 2:00:00"
|
||||
27505,"ヴァーデュラス・アニマ",10250,30,-1,"2021/06/15 7:00:00","2021/07/13 2:00:00"
|
||||
27506,"MEBRマニアック",10250,30,-1,"2021/06/15 7:00:00","2021/07/13 2:00:00"
|
||||
27507,"ラディアント・ライト",10250,30,-1,"2021/06/15 7:00:00","2021/07/13 2:00:00"
|
||||
27508,"オブシディアナ",10250,30,-1,"2021/06/15 7:00:00","2021/07/13 2:00:00"
|
||||
27509,"ゴールド・ネックレス",10250,30,-1,"2021/06/15 7:00:00","2021/07/13 2:00:00"
|
||||
27510,"ヒーローコード:ボスキラー",10250,100,-1,"2021/06/15 7:00:00","2021/07/13 2:00:00"
|
||||
27511,"ヒーローコード:Mobキラー",10250,100,-1,"2021/06/15 7:00:00","2021/07/13 2:00:00"
|
||||
27512,"ヒーローコード:HP最大時強化",10250,100,-1,"2021/06/15 7:00:00","2021/07/13 2:00:00"
|
||||
27513,"ヒーローコード:HP低下時強化",10250,100,-1,"2021/06/15 7:00:00","2021/07/13 2:00:00"
|
||||
27601,"《完全無欠メイド》アスナ",10253,90,-1,"2021/06/22 7:00:00","2021/07/20 2:00:00"
|
||||
27602,"《有頂天外メイド》キリト",10253,15,-1,"2021/06/22 7:00:00","2021/07/20 2:00:00"
|
||||
27603,"《天真爛漫メイド》ユウキ",10253,15,-1,"2021/06/22 7:00:00","2021/07/20 2:00:00"
|
||||
27604,"《才色兼備メイド》セブン",10253,15,-1,"2021/06/22 7:00:00","2021/07/20 2:00:00"
|
||||
27701,"《微睡の砂浜》リーファ",10277,150,-1,"2021/07/27 7:00:00","2021/09/28 2:00:00"
|
||||
27702,"《海辺の休息》リズベット",10277,150,-1,"2021/07/27 7:00:00","2021/09/28 2:00:00"
|
||||
27703,"《夏の陽の夢》ユウキ",10277,150,-1,"2021/07/27 7:00:00","2021/09/28 2:00:00"
|
||||
27704,"《波際の司令塔》アルゴ",10277,150,-1,"2021/07/27 7:00:00","2021/09/28 2:00:00"
|
||||
27705,"《心躍る岸辺》レイン",10277,150,-1,"2021/07/27 7:00:00","2021/09/28 2:00:00"
|
||||
27706,"ヴァルトレーニス",10277,30,-1,"2021/07/27 7:00:00","2021/09/28 2:00:00"
|
||||
27707,"ジャイアント・タスク",10277,30,-1,"2021/07/27 7:00:00","2021/09/28 2:00:00"
|
||||
27708,"オブシディアナ",10277,30,-1,"2021/07/27 7:00:00","2021/09/28 2:00:00"
|
||||
27709,"スクレープ",10277,30,-1,"2021/07/27 7:00:00","2021/09/28 2:00:00"
|
||||
27710,"ソード・オブ・ホグニ",10277,30,-1,"2021/07/27 7:00:00","2021/09/28 2:00:00"
|
||||
27711,"ゴールド・ネックレス",10277,30,-1,"2021/07/27 7:00:00","2021/09/28 2:00:00"
|
||||
27712,"ヒーローコード:ボスキラー",10277,100,-1,"2021/07/27 7:00:00","2021/09/28 2:00:00"
|
||||
27713,"ヒーローコード:Mobキラー",10277,100,-1,"2021/07/27 7:00:00","2021/09/28 2:00:00"
|
||||
27714,"ヒーローコード:HP最大時強化",10277,100,-1,"2021/07/27 7:00:00","2021/09/28 2:00:00"
|
||||
27715,"ヒーローコード:HP低下時強化",10277,100,-1,"2021/07/27 7:00:00","2021/09/28 2:00:00"
|
||||
28401,"《犀薫る浜辺》アスナ",10284,150,-1,"2021/08/10 7:00:00","2021/09/07 2:00:00"
|
||||
28402,"《波打ち際の彩》アリス",10284,150,-1,"2021/08/10 7:00:00","2021/09/07 2:00:00"
|
||||
28403,"金木犀の剣",10284,30,-1,"2021/08/10 7:00:00","2021/09/07 2:00:00"
|
||||
28404,"アロンダイト",10284,30,-1,"2021/08/10 7:00:00","2021/09/07 2:00:00"
|
||||
28405,"ゴールド・ネックレス",10284,30,-1,"2021/08/10 7:00:00","2021/09/07 2:00:00"
|
||||
28406,"ヒーローコード:ボスキラー",10284,100,-1,"2021/08/10 7:00:00","2021/09/07 2:00:00"
|
||||
28407,"ヒーローコード:Mobキラー",10284,100,-1,"2021/08/10 7:00:00","2021/09/07 2:00:00"
|
||||
28408,"ヒーローコード:HP最大時強化",10284,100,-1,"2021/08/10 7:00:00","2021/09/07 2:00:00"
|
||||
28409,"ヒーローコード:HP低下時強化",10284,100,-1,"2021/08/10 7:00:00","2021/09/07 2:00:00"
|
||||
28501,"《騎士の心得》シノン",10285,150,-1,"2021/09/07 7:00:00","2021/10/05 2:00:00"
|
||||
28502,"《射撃手の心得》アリス",10285,150,-1,"2021/09/07 7:00:00","2021/10/05 2:00:00"
|
||||
28503,"金木犀の剣",10285,30,-1,"2021/09/07 7:00:00","2021/10/05 2:00:00"
|
||||
28504,"MEBRマニアック",10285,30,-1,"2021/09/07 7:00:00","2021/10/05 2:00:00"
|
||||
28505,"ゴールド・ネックレス",10285,30,-1,"2021/09/07 7:00:00","2021/10/05 2:00:00"
|
||||
28506,"ヒーローコード:ボスキラー",10285,100,-1,"2021/09/07 7:00:00","2021/10/05 2:00:00"
|
||||
28507,"ヒーローコード:Mobキラー",10285,100,-1,"2021/09/07 7:00:00","2021/10/05 2:00:00"
|
||||
28508,"ヒーローコード:HP最大時強化",10285,100,-1,"2021/09/07 7:00:00","2021/10/05 2:00:00"
|
||||
28509,"ヒーローコード:HP低下時強化",10285,100,-1,"2021/09/07 7:00:00","2021/10/05 2:00:00"
|
||||
28601,"《真夏の眩耀》アスナ",10286,150,-1,"2021/08/24 7:00:00","2021/09/28 2:00:00"
|
||||
28602,"《魅惑の夏日》リーファ",10286,150,-1,"2021/08/24 7:00:00","2021/09/28 2:00:00"
|
||||
28603,"《砂浜の女神》シノン",10286,150,-1,"2021/08/24 7:00:00","2021/09/28 2:00:00"
|
||||
28604,"《透き通る青》アリス",10286,150,-1,"2021/08/24 7:00:00","2021/09/28 2:00:00"
|
||||
28605,"《白砂の少女》シリカ",10286,150,-1,"2021/08/24 7:00:00","2021/09/28 2:00:00"
|
||||
28606,"《目映い太陽》リズベット",10286,150,-1,"2021/08/24 7:00:00","2021/09/28 2:00:00"
|
||||
28607,"アロンダイト",10286,30,-1,"2021/08/24 7:00:00","2021/09/28 2:00:00"
|
||||
28608,"ヴァルトレーニス",10286,30,-1,"2021/08/24 7:00:00","2021/09/28 2:00:00"
|
||||
28609,"MEBRマニアック",10286,30,-1,"2021/08/24 7:00:00","2021/09/28 2:00:00"
|
||||
28610,"金木犀の剣",10286,30,-1,"2021/08/24 7:00:00","2021/09/28 2:00:00"
|
||||
28611,"スクレープ",10286,30,-1,"2021/08/24 7:00:00","2021/09/28 2:00:00"
|
||||
28612,"ジャイアント・タスク",10286,30,-1,"2021/08/24 7:00:00","2021/09/28 2:00:00"
|
||||
28613,"ゴールド・ネックレス",10286,30,-1,"2021/08/24 7:00:00","2021/09/28 2:00:00"
|
||||
28614,"ヒーローコード:ボスキラー",10286,100,-1,"2021/08/24 7:00:00","2021/09/28 2:00:00"
|
||||
28615,"ヒーローコード:Mobキラー",10286,100,-1,"2021/08/24 7:00:00","2021/09/28 2:00:00"
|
||||
28616,"ヒーローコード:HP最大時強化",10286,100,-1,"2021/08/24 7:00:00","2021/09/28 2:00:00"
|
||||
28617,"ヒーローコード:HP低下時強化",10286,100,-1,"2021/08/24 7:00:00","2021/09/28 2:00:00"
|
||||
29001,"《キャンディポップ》シリカ",10290,90,-1,"2021/08/03 7:00:00","2021/08/31 2:00:00"
|
||||
29002,"《オーシャンケットシー》シノン",10290,15,-1,"2021/08/03 7:00:00","2021/08/31 2:00:00"
|
||||
29003,"《サマーサンシャイン》アリス",10290,15,-1,"2021/08/03 7:00:00","2021/08/31 2:00:00"
|
||||
29004,"《サマープリティ》ユイ",10290,15,-1,"2021/08/03 7:00:00","2021/08/31 2:00:00"
|
||||
29101,"《夏夜の彩り》フィリア",10291,90,-1,"2021/08/24 7:00:00","2021/09/21 2:00:00"
|
||||
29102,"《月下の憩い》アスナ",10291,15,-1,"2021/08/24 7:00:00","2021/09/21 2:00:00"
|
||||
29103,"《納涼の弓姫》シノン",10291,15,-1,"2021/08/24 7:00:00","2021/09/21 2:00:00"
|
||||
29104,"《ひと夏の思い出》ユウキ",10291,15,-1,"2021/08/24 7:00:00","2021/09/21 2:00:00"
|
||||
29201,"《心舞の熱唱》セブン",10292,90,-1,"2021/09/14 7:00:00","2021/10/12 2:00:00"
|
||||
29202,"《快勝の導き》シノン",10292,15,-1,"2021/09/14 7:00:00","2021/10/12 2:00:00"
|
||||
29203,"《熱烈な鼓舞》リズベット",10292,15,-1,"2021/09/14 7:00:00","2021/10/12 2:00:00"
|
||||
29204,"《飛躍の舞踊》レイン",10292,15,-1,"2021/09/14 7:00:00","2021/10/12 2:00:00"
|
||||
29301,"《晴天の高揚》ユウキ",10293,90,-1,"2021/07/27 7:00:00","2021/08/24 2:00:00"
|
||||
29302,"《熱砂の輝き》リズベット",10293,90,-1,"2021/07/27 7:00:00","2021/08/24 2:00:00"
|
||||
29303,"《炎夏のひと時》ストレア",10293,90,-1,"2021/07/27 7:00:00","2021/08/24 2:00:00"
|
||||
29304,"《盛夏の思い出》サチ",10293,90,-1,"2021/07/27 7:00:00","2021/08/24 2:00:00"
|
||||
29305,"《華夜の巧者》シノン",10293,90,-1,"2021/07/27 7:00:00","2021/08/24 2:00:00"
|
||||
29306,"《はじける笑顔》シリカ",10293,15,-1,"2021/07/27 7:00:00","2021/08/24 2:00:00"
|
||||
29307,"《真夏の遊戯》キリト",10293,15,-1,"2021/07/27 7:00:00","2021/08/24 2:00:00"
|
||||
29308,"《納涼の誘い》フィリア",10293,15,-1,"2021/07/27 7:00:00","2021/08/24 2:00:00"
|
||||
29309,"《暑熱の高鳴り》ユイ",10293,15,-1,"2021/07/27 7:00:00","2021/08/24 2:00:00"
|
||||
29310,"《一夏の華》アスナ",10293,15,-1,"2021/07/27 7:00:00","2021/08/24 2:00:00"
|
||||
29311,"《華輝の妖精》リーファ",10293,15,-1,"2021/07/27 7:00:00","2021/08/24 2:00:00"
|
||||
29312,"《真夏の憧憬》ユウキ",10293,15,-1,"2021/07/27 7:00:00","2021/08/24 2:00:00"
|
||||
29313,"《熱暑の漢達》エギル&クライン",10293,10,-1,"2021/07/27 7:00:00","2021/08/24 2:00:00"
|
||||
29314,"《水辺の戯れ》セブン&レイン",10293,10,-1,"2021/07/27 7:00:00","2021/08/24 2:00:00"
|
||||
29401,"《賽の悦楽》リーファ",10294,150,-1,"2021/09/28 7:00:00","2021/11/09 2:00:00"
|
||||
29402,"《廻る享楽》シノン",10294,150,-1,"2021/09/28 7:00:00","2021/11/09 2:00:00"
|
||||
29403,"《兎の務め》アリス",10294,150,-1,"2021/09/28 7:00:00","2021/11/09 2:00:00"
|
||||
29404,"《二色の歓楽》シリカ",10294,30,-1,"2021/09/28 7:00:00","2021/11/09 2:00:00"
|
||||
29405,"ヴァルトレーニス",10294,30,-1,"2021/09/28 7:00:00","2021/11/09 2:00:00"
|
||||
29406,"MEBRマニアック",10294,30,-1,"2021/09/28 7:00:00","2021/11/09 2:00:00"
|
||||
29407,"金木犀の剣",10294,30,-1,"2021/09/28 7:00:00","2021/11/09 2:00:00"
|
||||
29408,"ゴールド・ネックレス",10294,30,-1,"2021/09/28 7:00:00","2021/11/09 2:00:00"
|
||||
29409,"ヒーローコード:ボスキラー",10294,100,-1,"2021/09/28 7:00:00","2021/11/09 2:00:00"
|
||||
29410,"ヒーローコード:Mobキラー",10294,100,-1,"2021/09/28 7:00:00","2021/11/09 2:00:00"
|
||||
29411,"ヒーローコード:HP最大時強化",10294,100,-1,"2021/09/28 7:00:00","2021/11/09 2:00:00"
|
||||
29412,"ヒーローコード:HP低下時強化",10294,100,-1,"2021/09/28 7:00:00","2021/11/09 2:00:00"
|
||||
29901,"《ぬくもりの黒制服》リズベット",10299,150,-1,"2021/11/02 7:00:00","2021/12/14 2:00:00"
|
||||
29902,"《闇色の心頼》シリカ",10299,150,-1,"2021/11/02 7:00:00","2021/12/14 2:00:00"
|
||||
29903,"《黒尽くめの密か》アルゴ",10299,150,-1,"2021/11/02 7:00:00","2021/12/14 2:00:00"
|
||||
29904,"エリュシデータ",10299,30,-1,"2021/11/02 7:00:00","2021/12/14 2:00:00"
|
||||
29905,"ダークリパルサー",10299,30,-1,"2021/11/02 7:00:00","2021/12/14 2:00:00"
|
||||
29906,"ゴールド・ネックレス",10299,30,-1,"2021/11/02 7:00:00","2021/12/14 2:00:00"
|
||||
29907,"ヒーローコード:ボスキラー",10299,100,-1,"2021/11/02 7:00:00","2021/12/14 2:00:00"
|
||||
29908,"ヒーローコード:Mobキラー",10299,100,-1,"2021/11/02 7:00:00","2021/12/14 2:00:00"
|
||||
29909,"ヒーローコード:HP最大時強化",10299,100,-1,"2021/11/02 7:00:00","2021/12/14 2:00:00"
|
||||
29910,"ヒーローコード:HP低下時強化",10299,100,-1,"2021/11/02 7:00:00","2021/12/14 2:00:00"
|
||||
30401,"《純白の誓い》キリト",10304,150,-1,"2021/11/16 7:00:00","2021/12/14 2:00:00"
|
||||
30402,"《純黒の誓い》アスナ",10304,150,-1,"2021/11/16 7:00:00","2021/12/14 2:00:00"
|
||||
30403,"エリュシデータ",10304,30,-1,"2021/11/16 7:00:00","2021/12/14 2:00:00"
|
||||
30404,"アロンダイト",10304,30,-1,"2021/11/16 7:00:00","2021/12/14 2:00:00"
|
||||
30405,"ゴールド・ネックレス",10304,30,-1,"2021/11/16 7:00:00","2021/12/14 2:00:00"
|
||||
30406,"ヒーローコード:ボスキラー",10304,100,-1,"2021/11/16 7:00:00","2021/12/14 2:00:00"
|
||||
30407,"ヒーローコード:Mobキラー",10304,100,-1,"2021/11/16 7:00:00","2021/12/14 2:00:00"
|
||||
30408,"ヒーローコード:HP最大時強化",10304,100,-1,"2021/11/16 7:00:00","2021/12/14 2:00:00"
|
||||
30409,"ヒーローコード:HP低下時強化",10304,100,-1,"2021/11/16 7:00:00","2021/12/14 2:00:00"
|
||||
30501,"《赦しの一振り》キリト",10305,150,-1,"2021/10/05 7:00:00","2021/11/02 2:00:00"
|
||||
30502,"《正しき一突き》アスナ",10305,150,-1,"2021/10/05 7:00:00","2021/11/02 2:00:00"
|
||||
30503,"ダークリパルサー",10305,30,-1,"2021/10/05 7:00:00","2021/11/02 2:00:00"
|
||||
30504,"ランベントライト",10305,30,-1,"2021/10/05 7:00:00","2021/11/02 2:00:00"
|
||||
30505,"ゴールド・ネックレス",10305,30,-1,"2021/10/05 7:00:00","2021/11/02 2:00:00"
|
||||
30506,"ヒーローコード:ボスキラー",10305,100,-1,"2021/10/05 7:00:00","2021/11/02 2:00:00"
|
||||
30507,"ヒーローコード:Mobキラー",10305,100,-1,"2021/10/05 7:00:00","2021/11/02 2:00:00"
|
||||
30508,"ヒーローコード:HP最大時強化",10305,100,-1,"2021/10/05 7:00:00","2021/11/02 2:00:00"
|
||||
30509,"ヒーローコード:HP低下時強化",10305,100,-1,"2021/10/05 7:00:00","2021/11/02 2:00:00"
|
||||
30601,"《スウィートウィッチ》ユイ",10306,90,-1,"2021/09/28 7:00:00","2021/10/26 2:00:00"
|
||||
30602,"《クレバーソーサレス》シノン",10306,15,-1,"2021/09/28 7:00:00","2021/10/26 2:00:00"
|
||||
30603,"《マジカルスミス》リズベット",10306,15,-1,"2021/09/28 7:00:00","2021/10/26 2:00:00"
|
||||
30604,"《キャットモンスター》シリカ",10306,15,-1,"2021/09/28 7:00:00","2021/10/26 2:00:00"
|
||||
30605,"《ドリーミィ・バニー》アスナ",10306,90,-1,"2021/09/28 7:00:00","2021/10/26 2:00:00"
|
||||
30606,"《ファイン・サービング》直葉",10306,15,-1,"2021/09/28 7:00:00","2021/10/26 2:00:00"
|
||||
30607,"《ベット・タイム!》ユウキ",10306,15,-1,"2021/09/28 7:00:00","2021/10/26 2:00:00"
|
||||
30608,"《ベスト・サービス》ストレア",10306,15,-1,"2021/09/28 7:00:00","2021/10/26 2:00:00"
|
||||
30701,"《ジェット・ヴォルフ》キリト",10307,90,-1,"2021/10/05 7:00:00","2021/11/02 2:00:00"
|
||||
30702,"《弓猫の魔法》シノン",10307,15,-1,"2021/10/05 7:00:00","2021/11/02 2:00:00"
|
||||
30703,"《トリックキャット》ユウキ",10307,15,-1,"2021/10/05 7:00:00","2021/11/02 2:00:00"
|
||||
30704,"《キャットマジック》フィリア",10307,15,-1,"2021/10/05 7:00:00","2021/11/02 2:00:00"
|
||||
30801,"《黒煌の剣影》リーファ",10308,90,-1,"2021/10/26 7:00:00","2021/11/23 2:00:00"
|
||||
30802,"《漆黒の桃華》リズベット",10308,15,-1,"2021/10/26 7:00:00","2021/11/23 2:00:00"
|
||||
30803,"《ゴシックビウィッチ》ストレア",10308,15,-1,"2021/10/26 7:00:00","2021/11/23 2:00:00"
|
||||
30804,"《可憐な小華》ユイ",10308,15,-1,"2021/10/26 7:00:00","2021/11/23 2:00:00"
|
||||
30901,"《聖夜の純愛》アスナ",10309,90,-1,"2021/12/07 7:00:00","2022/01/04 2:00:00"
|
||||
30902,"《彩氷の福音》シノン",10309,15,-1,"2021/12/07 7:00:00","2022/01/04 2:00:00"
|
||||
30903,"《冬宴の楽しみ》ユウキ",10309,15,-1,"2021/12/07 7:00:00","2022/01/04 2:00:00"
|
||||
30904,"《魅惑の甘味》フィリア",10309,15,-1,"2021/12/07 7:00:00","2022/01/04 2:00:00"
|
||||
31001,"《生彩放つ飛躍》アスナ",10310,150,-1,"2021/10/30 7:00:00","2021/12/21 2:00:00"
|
||||
31002,"《純真な想望》ユウキ",10310,150,-1,"2021/10/30 7:00:00","2021/12/21 2:00:00"
|
||||
31003,"《親愛なる漆黒》リーファ",10310,150,-1,"2021/10/30 7:00:00","2021/12/21 2:00:00"
|
||||
31004,"《黒衣の聖騎士》アリス",10310,150,-1,"2021/10/30 7:00:00","2021/12/21 2:00:00"
|
||||
31005,"《ハツコイ同盟》リズベット",10310,150,-1,"2021/10/30 7:00:00","2021/12/21 2:00:00"
|
||||
31006,"《トキメキ同盟》シリカ",10310,150,-1,"2021/10/30 7:00:00","2021/12/21 2:00:00"
|
||||
31007,"《英雄纏う剣才》ユウキ",10310,150,-1,"2021/10/30 7:00:00","2021/12/21 2:00:00"
|
||||
31008,"《忘却の憧憬》ユージオ",10310,150,-1,"2021/10/30 7:00:00","2021/12/21 2:00:00"
|
||||
31009,"《荒野の閃光》アスナ",10310,150,-1,"2021/10/30 7:00:00","2021/12/21 2:00:00"
|
||||
31010,"《血盟の狙撃手》シノン",10310,150,-1,"2021/10/30 7:00:00","2021/12/21 2:00:00"
|
||||
31011,"《笑顔守るために》キリト",10310,150,-1,"2021/10/30 7:00:00","2021/12/21 2:00:00"
|
||||
31012,"《電脳の歌姫》シリカ",10310,150,-1,"2021/10/30 7:00:00","2021/12/21 2:00:00"
|
||||
31013,"《永久の約束》キリト&アスナ&ユイ",10310,90,-1,"2021/10/30 7:00:00","2021/12/21 2:00:00"
|
||||
31014,"《優艶な幼な妻》アスナ",10310,15,-1,"2021/10/30 7:00:00","2021/12/21 2:00:00"
|
||||
31015,"《光彩の加護》ユイ",10310,15,-1,"2021/10/30 7:00:00","2021/12/21 2:00:00"
|
||||
31016,"《絆の双刃》キリト&アスナ",10310,15,-1,"2021/10/30 7:00:00","2021/12/21 2:00:00"
|
||||
31017,"《心照らす歌声》ユナ",10310,90,-1,"2021/10/30 7:00:00","2021/12/21 2:00:00"
|
||||
31018,"《心奮う戦い》エイジ",10310,90,-1,"2021/10/30 7:00:00","2021/12/21 2:00:00"
|
||||
31201,"《聖しあの夜》シリカ",10312,150,-1,"2021/12/14 7:00:00","2022/01/25 2:00:00"
|
||||
31202,"《慶びの枕元》アルゴ",10312,150,-1,"2021/12/14 7:00:00","2022/01/25 2:00:00"
|
||||
31203,"《届ける聖歌》レイン",10312,150,-1,"2021/12/14 7:00:00","2022/01/25 2:00:00"
|
||||
31204,"スノウマン・ステッキ",10312,30,-1,"2021/12/14 7:00:00","2022/01/25 2:00:00"
|
||||
31205,"ジングル・ヘッド",10312,30,-1,"2021/12/14 7:00:00","2022/01/25 2:00:00"
|
||||
31206,"エターナル・ツリー",10312,30,-1,"2021/12/14 7:00:00","2022/01/25 2:00:00"
|
||||
31207,"マジカル・リース",10312,30,-1,"2021/12/14 7:00:00","2022/01/25 2:00:00"
|
||||
31208,"ゴールド・ネックレス",10312,30,-1,"2021/12/14 7:00:00","2022/01/25 2:00:00"
|
||||
31209,"《食いしん坊トナカイ》シリカ",10312,90,-1,"2021/12/14 7:00:00","2022/01/25 2:00:00"
|
||||
31210,"《聖夜の歌声》サチ",10312,90,-1,"2021/12/14 7:00:00","2022/01/25 2:00:00"
|
||||
31211,"《魅惑の綺羅星》リーファ",10312,15,-1,"2021/12/14 7:00:00","2022/01/25 2:00:00"
|
||||
31212,"《雪明りの贈り物》シノン",10312,15,-1,"2021/12/14 7:00:00","2022/01/25 2:00:00"
|
||||
31213,"《雪旅の宝物》フィリア",10312,10,-1,"2021/12/14 7:00:00","2022/01/25 2:00:00"
|
||||
31214,"ヒーローコード:ボスキラー",10312,100,-1,"2021/12/14 7:00:00","2022/01/25 2:00:00"
|
||||
31215,"ヒーローコード:Mobキラー",10312,100,-1,"2021/12/14 7:00:00","2022/01/25 2:00:00"
|
||||
31216,"ヒーローコード:HP最大時強化",10312,100,-1,"2021/12/14 7:00:00","2022/01/25 2:00:00"
|
||||
31217,"ヒーローコード:HP低下時強化",10312,100,-1,"2021/12/14 7:00:00","2022/01/25 2:00:00"
|
||||
31701,"《ハッピークリスマス》アスナ",10317,150,-1,"2021/12/14 7:00:00","2022/01/08 2:00:00"
|
||||
31702,"《ホーリーデコレイト》リズベット",10317,150,-1,"2021/12/14 7:00:00","2022/01/08 2:00:00"
|
||||
31703,"《ギフト・トゥギャザー!》ユウキ",10317,150,-1,"2021/12/14 7:00:00","2022/01/08 2:00:00"
|
||||
31704,"《ジョイフルキャロル》リーファ",10317,150,-1,"2021/12/14 7:00:00","2022/01/08 2:00:00"
|
||||
31705,"《ホワイトジングル》シノン",10317,150,-1,"2021/12/14 7:00:00","2022/01/08 2:00:00"
|
||||
31706,"《スノープレゼント》アリス",10317,150,-1,"2021/12/14 7:00:00","2022/01/08 2:00:00"
|
||||
31707,"スノウマン・ステッキ",10317,30,-1,"2021/12/14 7:00:00","2022/01/08 2:00:00"
|
||||
31708,"ジングル・ヘッド",10317,30,-1,"2021/12/14 7:00:00","2022/01/08 2:00:00"
|
||||
31709,"エターナル・ツリー",10317,30,-1,"2021/12/14 7:00:00","2022/01/08 2:00:00"
|
||||
31710,"マジカル・リース",10317,30,-1,"2021/12/14 7:00:00","2022/01/08 2:00:00"
|
||||
31711,"ゴールド・ネックレス",10317,30,-1,"2021/12/14 7:00:00","2022/01/08 2:00:00"
|
||||
31712,"《食いしん坊トナカイ》シリカ",10317,90,-1,"2021/12/14 7:00:00","2022/01/08 2:00:00"
|
||||
31713,"《聖夜の歌声》サチ",10317,90,-1,"2021/12/14 7:00:00","2022/01/08 2:00:00"
|
||||
31714,"《魅惑の綺羅星》リーファ",10317,15,-1,"2021/12/14 7:00:00","2022/01/08 2:00:00"
|
||||
31715,"《雪明りの贈り物》シノン",10317,15,-1,"2021/12/14 7:00:00","2022/01/08 2:00:00"
|
||||
31716,"《雪旅の宝物》フィリア",10317,10,-1,"2021/12/14 7:00:00","2022/01/08 2:00:00"
|
||||
31717,"ヒーローコード:ボスキラー",10317,100,-1,"2021/12/14 7:00:00","2022/01/08 2:00:00"
|
||||
31718,"ヒーローコード:Mobキラー",10317,100,-1,"2021/12/14 7:00:00","2022/01/08 2:00:00"
|
||||
31719,"ヒーローコード:HP最大時強化",10317,100,-1,"2021/12/14 7:00:00","2022/01/08 2:00:00"
|
||||
31720,"ヒーローコード:HP低下時強化",10317,100,-1,"2021/12/14 7:00:00","2022/01/08 2:00:00"
|
||||
31901,"《鏡花水月》ユウキ",10319,90,-1,"2021/12/28 7:00:00","2022/01/25 2:00:00"
|
||||
31902,"《萬福衝打》キリト",10319,15,-1,"2021/12/28 7:00:00","2022/01/25 2:00:00"
|
||||
31903,"《錦上添花》直葉",10319,15,-1,"2021/12/28 7:00:00","2022/01/25 2:00:00"
|
||||
31904,"《雲中白鶴》シノン",10319,15,-1,"2021/12/28 7:00:00","2022/01/25 2:00:00"
|
||||
32001,"《飛翔の新天地》キリト",10320,150,-1,"2022/01/01 7:00:00","2022/02/01 2:00:00"
|
||||
32002,"《風舞う妖精》リーファ",10320,150,-1,"2022/01/01 7:00:00","2022/02/01 2:00:00"
|
||||
32003,"アメノハバキリ",10320,30,-1,"2022/01/01 7:00:00","2022/02/01 2:00:00"
|
||||
32004,"ゴールド・ネックレス",10320,30,-1,"2022/01/01 7:00:00","2022/02/01 2:00:00"
|
||||
32005,"ヒーローコード:ボスキラー",10320,100,-1,"2022/01/01 7:00:00","2022/02/01 2:00:00"
|
||||
32006,"ヒーローコード:Mobキラー",10320,100,-1,"2022/01/01 7:00:00","2022/02/01 2:00:00"
|
||||
32007,"ヒーローコード:HP最大時強化",10320,100,-1,"2022/01/01 7:00:00","2022/02/01 2:00:00"
|
||||
32008,"ヒーローコード:HP低下時強化",10320,100,-1,"2022/01/01 7:00:00","2022/02/01 2:00:00"
|
||||
32101,"《真夏の眩耀》アスナ",10321,150,-1,"2022/01/01 7:00:00","2022/02/22 2:00:00"
|
||||
32102,"《魅惑の夏日》リーファ",10321,150,-1,"2022/01/01 7:00:00","2022/02/22 2:00:00"
|
||||
32103,"《砂浜の女神》シノン",10321,150,-1,"2022/01/01 7:00:00","2022/02/22 2:00:00"
|
||||
32104,"《目映い太陽》リズベット",10321,150,-1,"2022/01/01 7:00:00","2022/02/22 2:00:00"
|
||||
32105,"《白砂の少女》シリカ",10321,150,-1,"2022/01/01 7:00:00","2022/02/22 2:00:00"
|
||||
32106,"《透き通る青》アリス",10321,150,-1,"2022/01/01 7:00:00","2022/02/22 2:00:00"
|
||||
32107,"《微睡の砂浜》リーファ",10321,150,-1,"2022/01/01 7:00:00","2022/02/22 2:00:00"
|
||||
32108,"《海辺の休息》リズベット",10321,150,-1,"2022/01/01 7:00:00","2022/02/22 2:00:00"
|
||||
32109,"《夏の陽の夢》ユウキ",10321,150,-1,"2022/01/01 7:00:00","2022/02/22 2:00:00"
|
||||
32110,"《波際の司令塔》アルゴ",10321,150,-1,"2022/01/01 7:00:00","2022/02/22 2:00:00"
|
||||
32111,"《心躍る岸辺》レイン",10321,150,-1,"2022/01/01 7:00:00","2022/02/22 2:00:00"
|
||||
32112,"《犀薫る浜辺》アスナ",10321,150,-1,"2022/01/01 7:00:00","2022/02/22 2:00:00"
|
||||
32113,"《波打ち際の彩》アリス",10321,150,-1,"2022/01/01 7:00:00","2022/02/22 2:00:00"
|
||||
32114,"《SAOゲーム攻略会議2019》キリト",10321,150,-1,"2022/01/01 7:00:00","2022/02/22 2:00:00"
|
||||
32115,"《不屈の誓い》キリト",10321,150,-1,"2022/01/01 7:00:00","2022/02/22 2:00:00"
|
||||
32116,"《明日への誓い》アスナ",10321,150,-1,"2022/01/01 7:00:00","2022/02/22 2:00:00"
|
||||
32117,"《兄想う妖精》リーファ",10321,150,-1,"2022/01/01 7:00:00","2022/02/22 2:00:00"
|
||||
32118,"《向き合う勇気》シノン",10321,150,-1,"2022/01/01 7:00:00","2022/02/22 2:00:00"
|
||||
32119,"《黒衣の英雄》キリト",10321,150,-1,"2022/01/01 7:00:00","2022/02/22 2:00:00"
|
||||
32120,"《英雄の剣匠》リズベット",10321,150,-1,"2022/01/01 7:00:00","2022/02/22 2:00:00"
|
||||
32121,"《フェアリー・ワルツ》アスナ",10321,150,-1,"2022/01/01 7:00:00","2022/02/22 2:00:00"
|
||||
32122,"《フェアリー・マージ》リーファ",10321,150,-1,"2022/01/01 7:00:00","2022/02/22 2:00:00"
|
||||
32123,"《紅葉の祝福》ユウキ",10321,150,-1,"2022/01/01 7:00:00","2022/02/22 2:00:00"
|
||||
32127,"《休息の爪先》アルゴ",10321,150,-1,"2022/01/01 7:00:00","2022/02/22 2:00:00"
|
||||
32128,"《背氷の気迫》ユージオ",10321,150,-1,"2022/01/01 7:00:00","2022/02/22 2:00:00"
|
||||
32129,"《可憐な銃剣士》キリト",10321,150,-1,"2022/01/01 7:00:00","2022/02/22 2:00:00"
|
||||
32130,"《美麗な狙撃手》シノン",10321,150,-1,"2022/01/01 7:00:00","2022/02/22 2:00:00"
|
||||
32131,"《頭領の音頭》クライン",10321,150,-1,"2022/01/01 7:00:00","2022/02/22 2:00:00"
|
||||
32132,"《乙女の髪留め》リーファ",10321,150,-1,"2022/01/01 7:00:00","2022/02/22 2:00:00"
|
||||
32133,"《月宙の飛躍》アルゴ",10321,150,-1,"2022/01/01 7:00:00","2022/02/22 2:00:00"
|
||||
32134,"《遠望の彼方》ユウキ",10321,150,-1,"2022/01/01 7:00:00","2022/02/22 2:00:00"
|
||||
32135,"《女神の羽休め》シノン",10321,150,-1,"2022/01/01 7:00:00","2022/02/22 2:00:00"
|
||||
32136,"《プレゼント大作戦!》アスナ",10321,150,-1,"2022/01/01 7:00:00","2022/02/22 2:00:00"
|
||||
32137,"《潮風の悪戯》アスナ",10321,150,-1,"2022/01/01 7:00:00","2022/02/22 2:00:00"
|
||||
32138,"《おやつ・タイム!》シリカ",10321,150,-1,"2022/01/01 7:00:00","2022/02/22 2:00:00"
|
||||
32139,"《妖精の戯れ》リーファ",10321,150,-1,"2022/01/01 7:00:00","2022/02/22 2:00:00"
|
||||
32140,"《穏やかな一時》アスナ",10321,150,-1,"2022/01/01 7:00:00","2022/02/22 2:00:00"
|
||||
32141,"《さかさま花世界》ユウキ",10321,150,-1,"2022/01/01 7:00:00","2022/02/22 2:00:00"
|
||||
32142,"《休日の談笑》リズベット",10321,150,-1,"2022/01/01 7:00:00","2022/02/22 2:00:00"
|
||||
32143,"《晴天の君》レイン",10321,150,-1,"2022/01/01 7:00:00","2022/02/22 2:00:00"
|
||||
32144,"《安らぎの我が家》キリト",10321,150,-1,"2022/01/01 7:00:00","2022/02/22 2:00:00"
|
||||
32145,"《幸せの青い鳥》シノン",10321,150,-1,"2022/01/01 7:00:00","2022/02/22 2:00:00"
|
||||
32146,"《秘密の甘邸》アルゴ",10321,150,-1,"2022/01/01 7:00:00","2022/02/22 2:00:00"
|
||||
32147,"《一輪の幼花》シリカ",10321,150,-1,"2022/01/01 7:00:00","2022/02/22 2:00:00"
|
||||
32148,"《揺蕩う夢幻》ユウキ",10321,150,-1,"2022/01/01 7:00:00","2022/02/22 2:00:00"
|
||||
32149,"《熟達の志士》アリス",10321,150,-1,"2022/01/01 7:00:00","2022/02/22 2:00:00"
|
||||
32150,"《かろやかスキップ》レイン",10321,150,-1,"2022/01/01 7:00:00","2022/02/22 2:00:00"
|
||||
32151,"《予期せぬ接触》シノン",10321,150,-1,"2022/01/01 7:00:00","2022/02/22 2:00:00"
|
||||
32152,"《ちゃーみー・けっとしー》シリカ",10321,150,-1,"2022/01/01 7:00:00","2022/02/22 2:00:00"
|
||||
32153,"《麗姿の眼差し》アスナ",10321,150,-1,"2022/01/01 7:00:00","2022/02/22 2:00:00"
|
||||
32154,"《慈愛の光彩》アスナ",10321,30,-1,"2022/01/01 7:00:00","2022/02/22 2:00:00"
|
||||
32155,"《快活なお誘い》リズベット",10321,30,-1,"2022/01/01 7:00:00","2022/02/22 2:00:00"
|
||||
32156,"《至福のひと時》シリカ",10321,30,-1,"2022/01/01 7:00:00","2022/02/22 2:00:00"
|
||||
32301,"《火照り身少女》シリカ",10323,90,-1,"2022/01/18 7:00:00","2022/02/15 2:00:00"
|
||||
32302,"《ほっと一息》リズベット",10323,15,-1,"2022/01/18 7:00:00","2022/02/15 2:00:00"
|
||||
32303,"《湯船の遊影》ユウキ",10323,15,-1,"2022/01/18 7:00:00","2022/02/15 2:00:00"
|
||||
32304,"《保養の湯掛》セブン",10323,15,-1,"2022/01/18 7:00:00","2022/02/15 2:00:00"
|
||||
32401,"《相愛は甘やかに》アスナ",10324,150,-1,"2022/01/25 7:00:00","2022/03/08 2:00:00"
|
||||
32402,"《親愛はとろけて》シノン",10324,150,-1,"2022/01/25 7:00:00","2022/03/08 2:00:00"
|
||||
32403,"《愛慕は未だ青く》アリス",10324,150,-1,"2022/01/25 7:00:00","2022/03/08 2:00:00"
|
||||
32404,"アロンダイト",10324,30,-1,"2022/01/25 7:00:00","2022/03/08 2:00:00"
|
||||
32405,"金木犀の剣",10324,30,-1,"2022/01/25 7:00:00","2022/03/08 2:00:00"
|
||||
32406,"MEBRマニアック",10324,30,-1,"2022/01/25 7:00:00","2022/03/08 2:00:00"
|
||||
32407,"ゴールド・ネックレス",10324,30,-1,"2022/01/25 7:00:00","2022/03/08 2:00:00"
|
||||
32408,"ヒーローコード:ボスキラー",10324,100,-1,"2022/01/25 7:00:00","2022/03/08 2:00:00"
|
||||
32409,"ヒーローコード:Mobキラー",10324,100,-1,"2022/01/25 7:00:00","2022/03/08 2:00:00"
|
||||
32410,"ヒーローコード:HP最大時強化",10324,100,-1,"2022/01/25 7:00:00","2022/03/08 2:00:00"
|
||||
32411,"ヒーローコード:HP低下時強化",10324,100,-1,"2022/01/25 7:00:00","2022/03/08 2:00:00"
|
||||
32901,"《気儘な黒猫》キリト",10329,150,-1,"2022/02/01 7:00:00","2022/03/08 2:00:00"
|
||||
32902,"《ねころび愛猫》アスナ",10329,150,-1,"2022/02/01 7:00:00","2022/03/08 2:00:00"
|
||||
32903,"《奔放な萌猫》リーファ",10329,150,-1,"2022/02/01 7:00:00","2022/03/08 2:00:00"
|
||||
32904,"《またたび仔猫》ユウキ",10329,150,-1,"2022/02/01 7:00:00","2022/03/08 2:00:00"
|
||||
32905,"《慧眼の弓猫》シノン",10329,30,-1,"2022/02/01 7:00:00","2022/03/08 2:00:00"
|
||||
32906,"《友情の桃猫》リズベット",10329,30,-1,"2022/02/01 7:00:00","2022/03/08 2:00:00"
|
||||
32907,"《可憐な幼猫》シリカ",10329,30,-1,"2022/02/01 7:00:00","2022/03/08 2:00:00"
|
||||
32908,"《猫耳の豪商》エギル",10329,30,-1,"2022/02/01 7:00:00","2022/03/08 2:00:00"
|
||||
32909,"キティ・パウ",10329,30,-1,"2022/02/01 7:00:00","2022/03/08 2:00:00"
|
||||
32910,"ゴールド・ネックレス",10329,30,-1,"2022/02/01 7:00:00","2022/03/08 2:00:00"
|
||||
32911,"ヒーローコード:ボスキラー",10329,100,-1,"2022/02/01 7:00:00","2022/03/08 2:00:00"
|
||||
32912,"ヒーローコード:Mobキラー",10329,100,-1,"2022/02/01 7:00:00","2022/03/08 2:00:00"
|
||||
32913,"ヒーローコード:HP最大時強化",10329,100,-1,"2022/02/01 7:00:00","2022/03/08 2:00:00"
|
||||
32914,"ヒーローコード:HP低下時強化",10329,100,-1,"2022/02/01 7:00:00","2022/03/08 2:00:00"
|
||||
33101,"《狙い撃つ軌道》ユウキ",10331,150,-1,"2022/02/15 7:00:00","2022/03/15 2:00:00"
|
||||
33102,"《魔剣稽古》ユージオ",10331,150,-1,"2022/02/15 7:00:00","2022/03/15 2:00:00"
|
||||
33103,"AMRティアマト",10331,30,-1,"2022/02/15 7:00:00","2022/03/15 2:00:00"
|
||||
33104,"マサムネG4",10331,30,-1,"2022/02/15 7:00:00","2022/03/15 2:00:00"
|
||||
33105,"ゴールド・ネックレス",10331,30,-1,"2022/02/15 7:00:00","2022/03/15 2:00:00"
|
||||
33106,"ヒーローコード:ボスキラー",10331,100,-1,"2022/02/15 7:00:00","2022/03/15 2:00:00"
|
||||
33107,"ヒーローコード:Mobキラー",10331,100,-1,"2022/02/15 7:00:00","2022/03/15 2:00:00"
|
||||
33108,"ヒーローコード:HP最大時強化",10331,100,-1,"2022/02/15 7:00:00","2022/03/15 2:00:00"
|
||||
33109,"ヒーローコード:HP低下時強化",10331,100,-1,"2022/02/15 7:00:00","2022/03/15 2:00:00"
|
||||
33201,"《一途なラブハート》リーファ",10332,90,-1,"2022/02/08 7:00:00","2022/03/08 2:00:00"
|
||||
33202,"《愛のメッセージ》アスナ",10332,15,-1,"2022/02/08 7:00:00","2022/03/08 2:00:00"
|
||||
33203,"《愛情の弾丸》シノン",10332,15,-1,"2022/02/08 7:00:00","2022/03/08 2:00:00"
|
||||
33204,"《甘い恋心》フィリア",10332,15,-1,"2022/02/08 7:00:00","2022/03/08 2:00:00"
|
||||
33301,"《恋情パティシエ》リーファ",10333,90,-1,"2022/03/01 7:00:00","2022/03/29 2:00:00"
|
||||
33302,"《最愛パティシエ》アスナ",10333,15,-1,"2022/03/01 7:00:00","2022/03/29 2:00:00"
|
||||
33303,"《純情ショコラ》シノン",10333,15,-1,"2022/03/01 7:00:00","2022/03/29 2:00:00"
|
||||
33304,"《恋慕ショコラ》シリカ",10333,15,-1,"2022/03/01 7:00:00","2022/03/29 2:00:00"
|
||||
33305,"《恒久の愛情》ユージオ",10333,90,-1,"2022/03/01 7:00:00","2022/03/29 2:00:00"
|
||||
33306,"《赤誠の求愛》キリト",10333,15,-1,"2022/03/01 7:00:00","2022/03/29 2:00:00"
|
||||
33307,"《狂愛の誓い》クラディール",10333,15,-1,"2022/03/01 7:00:00","2022/03/29 2:00:00"
|
||||
33401,"《厳格手ほどき》シノン",10334,150,-1,"2022/03/08 7:00:00","2022/04/26 2:00:00"
|
||||
33402,"《ほどけぬ胸飾り》リズベット",10334,150,-1,"2022/03/08 7:00:00","2022/04/26 2:00:00"
|
||||
33403,"《夢想の放課後》シリカ",10334,150,-1,"2022/03/08 7:00:00","2022/04/26 2:00:00"
|
||||
33404,"フェイルノート",10334,30,-1,"2022/03/08 7:00:00","2022/04/26 2:00:00"
|
||||
33405,"ジャイアント・タスク",10334,30,-1,"2022/03/08 7:00:00","2022/04/26 2:00:00"
|
||||
33406,"スクレープ",10334,30,-1,"2022/03/08 7:00:00","2022/04/26 2:00:00"
|
||||
33407,"ゴールド・ネックレス",10334,30,-1,"2022/03/08 7:00:00","2022/04/26 2:00:00"
|
||||
33408,"ヒーローコード:ボスキラー",10334,100,-1,"2022/03/08 7:00:00","2022/04/26 2:00:00"
|
||||
33409,"ヒーローコード:Mobキラー",10334,100,-1,"2022/03/08 7:00:00","2022/04/26 2:00:00"
|
||||
33410,"ヒーローコード:HP最大時強化",10334,100,-1,"2022/03/08 7:00:00","2022/04/26 2:00:00"
|
||||
33411,"ヒーローコード:HP低下時強化",10334,100,-1,"2022/03/08 7:00:00","2022/04/26 2:00:00"
|
||||
33901,"《熊の招宴》アスナ",10339,150,-1,"2022/03/29 7:00:00","2022/04/26 2:00:00"
|
||||
33902,"《兎の密会》アリス",10339,150,-1,"2022/03/29 7:00:00","2022/04/26 2:00:00"
|
||||
33903,"キティ・パウ",10339,30,-1,"2022/03/29 7:00:00","2022/04/26 2:00:00"
|
||||
33904,"ゴールド・ネックレス",10339,30,-1,"2022/03/29 7:00:00","2022/04/26 2:00:00"
|
||||
33905,"ヒーローコード:ボスキラー",10339,100,-1,"2022/03/29 7:00:00","2022/04/26 2:00:00"
|
||||
33906,"ヒーローコード:Mobキラー",10339,100,-1,"2022/03/29 7:00:00","2022/04/26 2:00:00"
|
||||
33907,"ヒーローコード:HP最大時強化",10339,100,-1,"2022/03/29 7:00:00","2022/04/26 2:00:00"
|
||||
33908,"ヒーローコード:HP低下時強化",10339,100,-1,"2022/03/29 7:00:00","2022/04/26 2:00:00"
|
||||
34101,"《うららかジャンプ》アスナ",10341,150,-1,"2022/03/08 7:00:00","2022/05/03 2:00:00"
|
||||
34102,"《はるかぜジャンプ》ユウキ",10341,150,-1,"2022/03/08 7:00:00","2022/05/03 2:00:00"
|
||||
34103,"《ゆきどけジャンプ》アリス",10341,150,-1,"2022/03/08 7:00:00","2022/05/03 2:00:00"
|
||||
34104,"《ふたとせ求めて》キリト",10341,150,-1,"2022/03/08 7:00:00","2022/05/03 2:00:00"
|
||||
34105,"《ふたとせ歩みて》アスナ",10341,150,-1,"2022/03/08 7:00:00","2022/05/03 2:00:00"
|
||||
34106,"《麗凛な獣猫》シノン",10341,150,-1,"2022/03/08 7:00:00","2022/05/03 2:00:00"
|
||||
34107,"《毛繕い桃猫》リズベット",10341,150,-1,"2022/03/08 7:00:00","2022/05/03 2:00:00"
|
||||
34108,"《まったり愛猫》シリカ",10341,150,-1,"2022/03/08 7:00:00","2022/05/03 2:00:00"
|
||||
34109,"《隆隆狩猫》エギル",10341,150,-1,"2022/03/08 7:00:00","2022/05/03 2:00:00"
|
||||
34110,"《とびつき活猫》ユウキ",10341,150,-1,"2022/03/08 7:00:00","2022/05/03 2:00:00"
|
||||
34111,"《湯浴みの紅潮》シノン",10341,150,-1,"2022/03/08 7:00:00","2022/05/03 2:00:00"
|
||||
34112,"《秘湯の恥じらい》シリカ",10341,150,-1,"2022/03/08 7:00:00","2022/05/03 2:00:00"
|
||||
34113,"《火照る温浴》アリス",10341,150,-1,"2022/03/08 7:00:00","2022/05/03 2:00:00"
|
||||
34114,"《湯の華咲いた》アスナ",10341,150,-1,"2022/03/08 7:00:00","2022/05/03 2:00:00"
|
||||
34115,"《豊潤な湯浴み》リーファ",10341,150,-1,"2022/03/08 7:00:00","2022/05/03 2:00:00"
|
||||
34116,"《温浴の寛ぎ》ユウキ",10341,150,-1,"2022/03/08 7:00:00","2022/05/03 2:00:00"
|
||||
34117,"《秘境の癒湯》アルゴ",10341,150,-1,"2022/03/08 7:00:00","2022/05/03 2:00:00"
|
||||
34118,"《湯上り素顔》レイン",10341,150,-1,"2022/03/08 7:00:00","2022/05/03 2:00:00"
|
||||
34119,"《倒れぬ意志》リーファ",10341,150,-1,"2022/03/08 7:00:00","2022/05/03 2:00:00"
|
||||
34120,"《見据える勝利》シノン",10341,150,-1,"2022/03/08 7:00:00","2022/05/03 2:00:00"
|
||||
34121,"《羽ばたく希望》アスナ",10341,150,-1,"2022/03/08 7:00:00","2022/05/03 2:00:00"
|
||||
34122,"《輝く勇気》ユウキ",10341,150,-1,"2022/03/08 7:00:00","2022/05/03 2:00:00"
|
||||
34123,"《世界を包む星空》キリト",10341,150,-1,"2022/03/08 7:00:00","2022/05/03 2:00:00"
|
||||
34124,"《世界を導く光》アリス",10341,150,-1,"2022/03/08 7:00:00","2022/05/03 2:00:00"
|
||||
34125,"《世界を見守る剣》ユージオ",10341,150,-1,"2022/03/08 7:00:00","2022/05/03 2:00:00"
|
||||
34126,"夜空の剣",10341,30,-1,"2022/03/08 7:00:00","2022/05/03 2:00:00"
|
||||
34127,"金木犀の剣",10341,30,-1,"2022/03/08 7:00:00","2022/05/03 2:00:00"
|
||||
34128,"青薔薇の剣",10341,30,-1,"2022/03/08 7:00:00","2022/05/03 2:00:00"
|
||||
34129,"ヴァーデュラス・アニマ",10341,30,-1,"2022/03/08 7:00:00","2022/05/03 2:00:00"
|
||||
34130,"オブシディアナ",10341,30,-1,"2022/03/08 7:00:00","2022/05/03 2:00:00"
|
||||
34131,"ソード・オブ・ホグニ",10341,30,-1,"2022/03/08 7:00:00","2022/05/03 2:00:00"
|
||||
34132,"ラディアント・ライト",10341,30,-1,"2022/03/08 7:00:00","2022/05/03 2:00:00"
|
||||
34133,"ジャルディーノ",10341,30,-1,"2022/03/08 7:00:00","2022/05/03 2:00:00"
|
||||
34134,"キティ・パウ",10341,30,-1,"2022/03/08 7:00:00","2022/05/03 2:00:00"
|
||||
34135,"アニヒレート・レイ",10341,30,-1,"2022/03/08 7:00:00","2022/05/03 2:00:00"
|
||||
34136,"AMRティアマト",10341,30,-1,"2022/03/08 7:00:00","2022/05/03 2:00:00"
|
||||
34201,"《零れる活力》リーファ",10342,50,-1,"2022/04/26 7:00:00","2022/06/07 2:00:00"
|
||||
34202,"《瞬きの宙》ユウキ",10342,50,-1,"2022/04/26 7:00:00","2022/06/07 2:00:00"
|
||||
34203,"《就床の一揖》レイン",10342,50,-1,"2022/04/26 7:00:00","2022/06/07 2:00:00"
|
||||
34204,"《不屈の鍛冶屋魂》リズベット",10342,50,-1,"2022/04/26 7:00:00","2022/06/07 2:00:00"
|
||||
34205,"《絆が生む力》シリカ",10342,50,-1,"2022/04/26 7:00:00","2022/06/07 2:00:00"
|
||||
34206,"《養う英気》リーファ",10342,50,-1,"2022/04/26 7:00:00","2022/06/07 2:00:00"
|
||||
34207,"《秘めたる日誌》アルゴ",10342,50,-1,"2022/04/26 7:00:00","2022/06/07 2:00:00"
|
||||
34208,"《即席軽音楽団》レイン",10342,50,-1,"2022/04/26 7:00:00","2022/06/07 2:00:00"
|
||||
34209,"《頬張り黒猫》キリト",10342,50,-1,"2022/04/26 7:00:00","2022/06/07 2:00:00"
|
||||
34210,"《身支度愛猫》アスナ",10342,50,-1,"2022/04/26 7:00:00","2022/06/07 2:00:00"
|
|
7
titles/sao/data/ResEarnCampaignShopItems.csv
Normal file
7
titles/sao/data/ResEarnCampaignShopItems.csv
Normal file
@ -0,0 +1,7 @@
|
||||
ResEarnCampaignShopItemId,ResEarnCampaignShopId,CommonRewardType,CommonRewardId,CommonRewardNum,Strength,Property1PropertyId,Property1Value1,Property1Value2,Property2PropertyId,Property2Value1,Property2Value2,Property3PropertyId,Property3Value1,Property3Value2,Property4PropertyId,Property4Value1,Property4Value2
|
||||
15701,15701,1,101000220,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
15702,15702,1,102000230,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
15703,15703,2,101000009,1,0,204000,5,0,1,0,0,2,0,0,2,0,0
|
||||
15801,15801,8,212000030,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
15802,15802,8,201000060,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
15803,15803,8,297000090,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
|
7
titles/sao/data/ResEarnCampaignShops.csv
Normal file
7
titles/sao/data/ResEarnCampaignShops.csv
Normal file
@ -0,0 +1,7 @@
|
||||
ResEarnCampaignShopId,ResEarnCampaignApplicationId,Name,SellingYuiMedal,SellingCol,SellingEventItemId,SellingEventItemNum,PurchaseLimit,GetApplicationPoint,StartDate,EndDate
|
||||
15701,10001,"≪不屈の誓い≫キリト",-1,1,-1,-1,-1,1,"2020/01/01 7:00:00","2020/03/31 2:00:00"
|
||||
15702,10001,"≪明日への誓い≫アスナ",-1,12,-1,-1,-1,1,"2020/01/01 7:00:00","2020/03/31 2:00:00"
|
||||
15703,10001,"ダークリパルサー",-1,123,-1,-1,-1,1,"2020/01/01 7:00:00","2020/03/31 2:00:00"
|
||||
15801,10001,"《恒久の愛情》ユージオ",-1,1234,-1,-1,-1,1,"2020/01/01 7:00:00","2020/03/24 2:00:00"
|
||||
15802,10001,"《赤誠の求愛》キリト",-1,12345,-1,-1,-1,1,"2020/01/01 7:00:00","2020/03/24 2:00:00"
|
||||
15803,10001,"《狂愛の誓い》クラディール",-1,123456,-1,-1,-1,1,"2020/01/01 7:00:00","2020/03/24 2:00:00"
|
|
789
titles/sao/data/YuiMedalShopItems.csv
Normal file
789
titles/sao/data/YuiMedalShopItems.csv
Normal file
@ -0,0 +1,789 @@
|
||||
YuiMedalShopItemId,YuiMedalShopId,CommonRewardType,CommonRewardId,CommonRewardNum,Strength,Property1PropertyId,Property1Value1,Property1Value2,Property2PropertyId,Property2Value1,Property2Value2,Property3PropertyId,Property3Value1,Property3Value2,Property4PropertyId,Property4Value1,Property4Value2
|
||||
1,1,1,101000190,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
2,2,1,110000150,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
3,3,2,120000003,1,0,302000,10,0,301900,20,0,2,0,0,2,0,0
|
||||
4,4,2,101000004,1,0,200400,90,0,200400,90,0,2,0,0,2,0,0
|
||||
5,5,2,102000004,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
6,6,2,103000004,1,0,204100,0,0,204800,5,0,2,0,0,2,0,0
|
||||
7,7,2,109000004,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
8,8,2,112000004,1,0,305000,100,0,1,0,0,2,0,0,2,0,0
|
||||
9,9,1,105000160,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
10,10,1,102000210,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
11,11,2,101000002,1,0,202400,75,0,202400,75,0,2,0,0,99999,0,0
|
||||
12,12,2,105000004,1,0,202700,50,0,204700,1,0,2,0,0,2,0,0
|
||||
13,13,2,108000004,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
14,14,2,111000004,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
15,15,2,107000004,1,0,205600,0,0,1,0,0,2,0,0,2,0,0
|
||||
16,16,2,115000004,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
17,17,1,106000180,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
18,18,1,112000090,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
19,19,2,102000002,1,0,202600,50,0,202600,50,0,2,0,0,99999,0,0
|
||||
20,20,2,101000004,1,0,200400,90,0,200400,90,0,2,0,0,2,0,0
|
||||
21,21,2,102000004,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
22,22,2,103000004,1,0,204100,0,0,204800,5,0,2,0,0,2,0,0
|
||||
23,23,2,109000004,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
24,24,2,112000004,1,0,305000,100,0,1,0,0,2,0,0,2,0,0
|
||||
25,25,1,104000230,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
26,26,1,101000250,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
27,27,1,102000260,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
28,28,1,103000220,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
29,29,1,104000250,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
30,30,1,105000210,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
31,31,1,106000210,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
32,32,1,107000140,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
33,33,1,108000150,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
34,34,1,109000230,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
35,35,1,110000170,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
36,36,1,111000140,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
37,37,1,112000110,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
38,38,3,170004,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
39,39,3,180004,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
40,40,3,170001,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
41,41,3,180001,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
42,42,3,170005,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
43,43,3,180005,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
44,44,3,140000,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
45,45,3,150010,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
46,46,3,150020,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
47,47,3,150030,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
48,48,3,150040,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
49,49,3,190000,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
50,50,3,200000,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
51,51,3,210000,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
52,52,1,103000230,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
53,53,1,111000160,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
54,54,1,107000150,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
55,55,1,108000160,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
56,56,8,201000090,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
57,57,8,299000440,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
58,58,8,299000450,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
59,59,8,299000460,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
60,60,8,299000470,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
61,61,8,299000480,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
62,62,3,170004,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
63,63,3,180004,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
64,64,3,170001,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
65,65,3,180001,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
66,66,3,170005,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
67,67,3,180005,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
68,68,3,140000,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
69,69,3,150010,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
70,70,3,150020,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
71,71,3,150030,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
72,72,3,150040,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
73,73,3,190000,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
74,74,3,200000,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
75,75,3,210000,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
76,76,2,101000018,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
77,77,2,102000009,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
78,78,2,111000008,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
79,79,8,202000160,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
80,80,8,203000150,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
81,81,8,204000110,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
82,82,8,205000110,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
83,83,8,206000120,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
84,84,8,212000050,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
85,85,3,170004,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
86,86,3,180004,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
87,87,3,170001,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
88,88,3,180001,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
89,89,3,170005,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
90,90,3,180005,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
91,91,3,140000,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
92,92,3,150010,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
93,93,3,150020,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
94,94,3,150030,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
95,95,3,150040,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
96,96,3,190000,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
97,97,3,200000,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
98,98,3,210000,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
99,99,1,109000130,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
100,100,8,299000550,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
101,101,8,299000560,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
102,102,8,299000570,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
103,103,8,299000580,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
104,104,8,299000590,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
105,105,8,299000600,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
106,106,3,170004,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
107,107,3,180004,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
108,108,3,170001,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
109,109,3,180001,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
110,110,3,170005,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
111,111,3,180005,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
112,112,3,140000,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
113,113,3,150010,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
114,114,3,150020,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
115,115,3,150030,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
116,116,3,150040,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
117,117,3,190000,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
118,118,3,200000,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
119,119,3,210000,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
120,120,1,110000130,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
121,121,3,110060,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
122,122,3,110070,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
123,123,3,110080,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
124,124,3,110090,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
125,125,3,110100,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
126,126,3,110110,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
127,127,3,110120,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
128,128,3,110130,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
129,129,3,110140,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
130,130,3,110150,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
131,131,3,110160,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
132,132,3,110170,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
133,133,3,110180,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
134,134,1,109000240,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
135,135,1,108000160,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
136,136,1,110000150,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
137,137,1,118000100,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
138,138,1,101000190,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
139,139,1,101000300,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
140,140,1,102000360,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
141,141,1,103000310,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
142,142,1,104000370,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
143,143,1,109000290,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
144,144,8,211000060,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
145,145,8,299000610,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
146,146,8,299000620,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
147,147,8,299000630,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
148,148,8,299000640,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
149,149,8,299000650,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
150,150,1,111000080,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
151,151,1,112000080,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
152,152,3,170004,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
153,153,3,180004,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
154,154,3,170001,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
155,155,3,180001,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
156,156,3,170005,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
157,157,3,180005,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
158,158,3,140000,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
159,159,3,150010,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
160,160,3,150020,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
161,161,3,150030,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
162,162,3,150040,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
163,163,3,190000,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
164,164,3,200000,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
165,165,3,210000,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
166,166,1,105000160,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
167,167,1,110000190,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
168,168,1,102000210,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
169,169,1,106000270,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
170,170,1,112000090,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
171,171,1,111000220,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
172,172,1,106000180,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
173,173,1,112000140,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
174,174,1,104000230,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
175,175,1,108000170,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
176,176,1,103000230,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
177,177,1,105000280,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
178,178,1,111000160,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
179,179,1,103000360,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
180,180,1,109000240,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
181,181,1,101000380,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
182,182,1,107000150,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
183,183,1,109000370,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
184,184,1,108000160,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
185,185,1,118000170,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
186,186,1,110000190,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
187,187,1,102000500,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
188,188,1,118000100,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
189,189,1,104000470,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
190,190,1,106000270,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
191,191,1,107000180,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
192,192,1,112000140,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
193,193,1,111000170,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
194,194,1,101000190,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
195,195,1,111000220,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
196,196,1,104000330,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
197,197,1,110000150,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
198,198,1,108000170,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
199,199,1,112000130,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
200,200,1,102000210,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
201,201,1,105000280,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
202,202,1,106000240,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
203,203,1,105000160,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
204,204,1,101000380,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
205,205,1,103000300,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
206,206,1,106000180,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
207,207,1,103000360,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
208,208,1,102000340,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
5000,5000,1,101000130,1,70,102600,30,0,1,0,0,2,0,0,2,0,0
|
||||
5001,5001,1,102000120,1,70,101700,0,0,1,0,0,2,0,0,2,0,0
|
||||
5002,5002,1,105000120,1,70,100500,100,0,1,0,0,2,0,0,2,0,0
|
||||
5003,5003,1,109000110,1,70,102600,30,0,1,0,0,2,0,0,2,0,0
|
||||
5004,5004,1,118000070,1,70,102600,30,0,1,0,0,2,0,0,2,0,0
|
||||
5005,5005,1,110000110,1,70,100500,100,0,1,0,0,2,0,0,2,0,0
|
||||
10000,10000,1,101000080,1,70,100200,100,0,100300,100,0,100300,100,0,99999,0,0
|
||||
10001,10001,1,102000080,1,70,100200,100,0,100300,100,0,100300,100,0,99999,0,0
|
||||
10002,10002,1,103000080,1,70,100200,100,0,100300,100,0,100300,100,0,99999,0,0
|
||||
10003,10003,1,104000260,1,70,100200,100,0,100300,100,0,100300,100,0,99999,0,0
|
||||
10004,10004,1,105000080,1,70,100200,100,0,100300,100,0,100300,100,0,99999,0,0
|
||||
10005,10005,1,106000080,1,70,100200,100,0,100300,100,0,100300,100,0,99999,0,0
|
||||
10006,10006,1,107000080,1,70,100200,100,0,100300,100,0,100300,100,0,99999,0,0
|
||||
10007,10007,1,108000080,1,70,100200,100,0,100300,100,0,100300,100,0,99999,0,0
|
||||
10008,10008,1,109000080,1,70,100200,100,0,100300,100,0,100300,100,0,99999,0,0
|
||||
10009,10009,1,110000080,1,70,100200,100,0,100300,100,0,100300,100,0,99999,0,0
|
||||
10010,10010,1,111000030,1,70,100200,100,0,100300,100,0,100300,100,0,99999,0,0
|
||||
10011,10011,1,112000030,1,70,100200,100,0,100300,100,0,100300,100,0,99999,0,0
|
||||
10012,10012,1,118000040,1,70,100200,100,0,100300,100,0,100300,100,0,99999,0,0
|
||||
10013,10013,2,101000002,1,0,202400,75,0,202400,75,0,2,0,0,99999,0,0
|
||||
10014,10014,2,102000002,1,0,202600,50,0,202600,50,0,2,0,0,99999,0,0
|
||||
10015,10015,2,101000004,1,0,200400,90,0,200400,90,0,2,0,0,2,0,0
|
||||
10016,10016,2,102000004,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
10017,10017,2,103000004,1,0,204100,0,0,204800,5,0,2,0,0,2,0,0
|
||||
10018,10018,2,105000004,1,0,202700,50,0,204700,1,0,2,0,0,2,0,0
|
||||
10019,10019,2,107000004,1,0,205600,0,0,1,0,0,2,0,0,2,0,0
|
||||
10020,10020,2,108000004,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
10021,10021,2,109000004,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
10022,10022,2,111000004,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
10023,10023,2,115000004,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
10024,10024,2,112000004,1,0,305000,100,0,1,0,0,2,0,0,2,0,0
|
||||
10025,10025,3,110060,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
10026,10026,3,110070,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
10027,10027,3,110080,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
10028,10028,3,110090,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
10029,10029,3,110100,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
10030,10030,3,110110,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
10031,10031,3,110120,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
10032,10032,3,110130,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
10033,10033,3,110140,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
10034,10034,3,110150,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
10035,10035,3,110160,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
10036,10036,3,110170,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
10037,10037,3,110180,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
10038,10038,1,101000080,1,70,100200,100,0,100300,100,0,100300,100,0,99999,0,0
|
||||
10039,10039,1,102000080,1,70,100200,100,0,100300,100,0,100300,100,0,99999,0,0
|
||||
10040,10040,1,103000080,1,70,100200,100,0,100300,100,0,100300,100,0,99999,0,0
|
||||
10041,10041,1,104000260,1,70,100200,100,0,100300,100,0,100300,100,0,99999,0,0
|
||||
10042,10042,1,105000080,1,70,100200,100,0,100300,100,0,100300,100,0,99999,0,0
|
||||
10043,10043,1,106000080,1,70,100200,100,0,100300,100,0,100300,100,0,99999,0,0
|
||||
10044,10044,1,107000080,1,70,100200,100,0,100300,100,0,100300,100,0,99999,0,0
|
||||
10045,10045,1,108000080,1,70,100200,100,0,100300,100,0,100300,100,0,99999,0,0
|
||||
10046,10046,1,109000080,1,70,100200,100,0,100300,100,0,100300,100,0,99999,0,0
|
||||
10047,10047,1,110000080,1,70,100200,100,0,100300,100,0,100300,100,0,99999,0,0
|
||||
10048,10048,1,111000030,1,70,100200,100,0,100300,100,0,100300,100,0,99999,0,0
|
||||
10049,10049,1,112000030,1,70,100200,100,0,100300,100,0,100300,100,0,99999,0,0
|
||||
10050,10050,1,118000040,1,70,100200,100,0,100300,100,0,100300,100,0,99999,0,0
|
||||
10051,10051,2,101000004,1,70,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
10052,10052,2,102000004,1,70,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
10053,10053,2,103000004,1,70,204100,0,0,204800,5,0,2,0,0,2,0,0
|
||||
10054,10054,2,105000004,1,70,202700,50,0,204700,1,0,2,0,0,2,0,0
|
||||
10055,10055,2,107000004,1,70,205600,0,0,1,0,0,2,0,0,2,0,0
|
||||
10056,10056,2,108000004,1,70,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
10057,10057,2,109000004,1,70,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
10058,10058,2,111000004,1,70,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
10059,10059,2,115000004,1,70,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
10060,10060,2,112000004,1,70,305000,100,0,1,0,0,2,0,0,2,0,0
|
||||
10061,10061,2,101000002,1,70,202400,75,0,202400,75,0,2,0,0,99999,0,0
|
||||
10062,10062,2,102000002,1,70,202600,50,0,202600,50,0,2,0,0,99999,0,0
|
||||
10063,10063,3,110060,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
10064,10064,3,110070,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
10065,10065,3,110080,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
10066,10066,3,110090,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
10067,10067,3,110100,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
10068,10068,3,110110,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
10069,10069,3,110120,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
10070,10070,3,110130,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
10071,10071,3,110140,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
10072,10072,3,110150,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
10073,10073,3,110160,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
10074,10074,3,110170,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
10075,10075,3,110180,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
10076,10076,3,120300,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
10077,10077,3,120310,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
10078,10078,3,120320,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
10079,10079,3,120330,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
10080,10080,3,120340,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
10081,10081,3,120350,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
10082,10082,3,120360,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
10083,10083,3,120370,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
10084,10084,3,120380,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
10085,10085,3,120390,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
15000,15000,1,101000190,1,1,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
15001,15001,1,101000380,1,1,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
15002,15002,1,102000210,1,1,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
15003,15003,1,102000500,1,1,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
15004,15004,1,103000230,1,1,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
15005,15005,1,103000360,1,1,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
15006,15006,1,104000230,1,1,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
15007,15007,1,104000470,1,1,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
15008,15008,1,105000160,1,1,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
15009,15009,1,105000280,1,1,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
15010,15010,1,106000180,1,1,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
15011,15011,1,106000270,1,1,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
15012,15012,1,107000150,1,1,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
15013,15013,1,107000180,1,1,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
15014,15014,1,108000160,1,1,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
15015,15015,1,108000170,1,1,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
15016,15016,1,109000240,1,1,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
15017,15017,1,109000370,1,1,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
15018,15018,1,110000150,1,1,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
15019,15019,1,110000190,1,1,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
15020,15020,1,111000160,1,1,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
15021,15021,1,111000220,1,1,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
15022,15022,1,112000090,1,1,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
15023,15023,1,112000140,1,1,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
15024,15024,1,118000100,1,1,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
15025,15025,1,118000170,1,1,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
15026,15026,1,101000340,1,1,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
15027,15027,1,102000340,1,1,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
15028,15028,1,102000550,1,1,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
15029,15029,1,103000300,1,1,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
15030,15030,1,103000420,1,1,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
15031,15031,1,104000330,1,1,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
15032,15032,1,104000430,1,1,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
15033,15033,1,105000250,1,1,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
15034,15034,1,105000390,1,1,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
15035,15035,1,106000240,1,1,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
15036,15036,1,106000330,1,1,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
15037,15037,1,109000310,1,1,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
15038,15038,1,110000220,1,1,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
15039,15039,1,111000170,1,1,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
15040,15040,1,112000130,1,1,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
15041,15041,1,118000130,1,1,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
15042,15042,1,118000210,1,1,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
15043,15043,2,101000004,1,70,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
15044,15044,2,102000004,1,70,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
15045,15045,2,103000004,1,70,204100,0,0,204800,5,0,2,0,0,2,0,0
|
||||
15046,15046,2,105000004,1,70,202700,50,0,204700,1,0,2,0,0,2,0,0
|
||||
15047,15047,2,107000004,1,70,205600,0,0,1,0,0,2,0,0,2,0,0
|
||||
15048,15048,2,108000004,1,70,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
15049,15049,2,109000004,1,70,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
15050,15050,2,111000004,1,70,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
15051,15051,2,115000004,1,70,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
15052,15052,2,112000004,1,70,305000,100,0,1,0,0,2,0,0,2,0,0
|
||||
15053,15053,3,140000,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
15054,15054,3,150010,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
15055,15055,3,150020,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
15056,15056,3,150030,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
15057,15057,3,150040,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
15058,15058,3,170007,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
15059,15059,3,180007,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
15060,15060,3,190000,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
15061,15061,3,200000,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
15062,15062,3,210000,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
15063,15063,3,220002,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
15064,15064,3,170005,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
202901,202901,1,101000310,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
202902,202902,1,102000410,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
202903,202903,8,201000120,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
202904,202904,8,202000240,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
202905,202905,8,211000080,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
202906,202906,8,299000730,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
202907,202907,8,299000740,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
202908,202908,8,299000750,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
202909,202909,8,299000760,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
202910,202910,8,299000770,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
202911,202911,1,104000220,1,0,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
202912,202912,8,299000410,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
202913,202913,3,170004,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
202914,202914,3,180004,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
202915,202915,3,170001,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
202916,202916,3,180001,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
202917,202917,3,170005,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
202918,202918,3,180005,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
202919,202919,3,140000,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
202920,202920,3,150010,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
202921,202921,3,150020,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
202922,202922,3,150030,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
202923,202923,3,150040,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
202924,202924,3,190000,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
202925,202925,3,200000,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
202926,202926,3,210000,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203001,203001,8,204000210,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203002,203002,8,205000150,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203003,203003,8,299000800,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203004,203004,8,299000810,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203005,203005,8,299000820,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203006,203006,8,201000130,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203007,203007,8,299000830,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203008,203008,8,202000270,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203009,203009,8,206000190,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203010,203010,8,220000060,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203011,203011,1,109000220,1,1,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
203012,203012,1,101000250,1,1,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
203013,203013,1,102000260,1,1,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
203014,203014,1,103000220,1,1,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
203015,203015,1,104000250,1,1,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
203016,203016,1,105000210,1,1,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
203017,203017,1,106000210,1,1,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
203018,203018,1,107000140,1,1,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
203019,203019,1,108000150,1,1,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
203020,203020,1,109000230,1,1,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
203021,203021,1,110000170,1,1,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
203022,203022,1,111000140,1,1,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
203023,203023,1,112000110,1,1,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
203024,203024,1,118000140,1,1,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
203025,203025,3,170004,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203026,203026,3,180004,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203027,203027,3,170001,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203028,203028,3,180001,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203029,203029,3,170005,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203030,203030,3,180005,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203031,203031,3,140000,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203032,203032,3,150010,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203033,203033,3,150020,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203034,203034,3,150030,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203035,203035,3,150040,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203036,203036,3,190000,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203037,203037,3,200000,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203038,203038,3,210000,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203201,203201,8,206000200,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203202,203202,8,211000090,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203203,203203,8,299000840,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203204,203204,8,299000850,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203205,203205,8,299000860,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203206,203206,8,202000280,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203207,203207,8,204000220,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203208,203208,8,201000140,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203209,203209,8,203000230,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203210,203210,8,205000160,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203211,203211,1,102000280,1,1,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
203213,203213,3,170001,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203214,203214,3,170004,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203215,203215,3,170005,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203216,203216,3,180001,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203217,203217,3,180004,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203218,203218,3,180005,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203219,203219,3,140000,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203220,203220,3,150010,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203221,203221,3,150020,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203222,203222,3,150030,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203223,203223,3,150040,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203224,203224,3,190000,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203225,203225,3,200000,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203226,203226,3,210000,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203301,203301,8,202000290,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203302,203302,8,203000240,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203303,203303,8,299000870,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203304,203304,8,299000880,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203305,203305,8,299000890,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203306,203306,8,212000060,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203307,203307,8,201000150,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203308,203308,8,204000230,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203309,203309,8,209000200,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203310,203310,8,299000900,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203312,203312,8,291000040,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203313,203313,3,170001,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203314,203314,3,170004,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203315,203315,3,170005,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203316,203316,3,180001,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203317,203317,3,180004,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203318,203318,3,180005,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203319,203319,3,140000,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203320,203320,3,150010,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203321,203321,3,150020,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203322,203322,3,150030,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203323,203323,3,150040,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203324,203324,3,190000,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203325,203325,3,200000,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203326,203326,3,210000,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203501,203501,8,299000920,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203502,203502,8,299000930,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203503,203503,8,299000940,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203504,203504,8,299000950,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203505,203505,8,299000960,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203506,203506,8,206000200,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203507,203507,8,211000090,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203508,203508,8,299000840,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203509,203509,8,299000850,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203510,203510,8,299000860,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203511,203511,8,202000280,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203512,203512,8,204000220,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203513,203513,8,201000140,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203514,203514,8,203000230,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203515,203515,8,205000160,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203516,203516,1,101000270,1,1,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
203517,203517,1,111000240,1,1,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
203518,203518,1,102000280,1,1,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
203519,203519,3,170001,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203520,203520,3,170004,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203521,203521,3,170005,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203522,203522,3,180001,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203523,203523,3,180004,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203524,203524,3,180005,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203525,203525,3,140000,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203526,203526,3,150010,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203527,203527,3,150020,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203528,203528,3,150030,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203529,203529,3,150040,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203530,203530,3,190000,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203531,203531,3,200000,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203532,203532,3,210000,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203601,203601,8,202000340,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203602,203602,8,205000190,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203603,203603,8,208000040,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203604,203604,8,211000110,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203605,203605,8,220000070,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203606,203606,8,203000280,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203607,203607,8,202000350,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203608,203608,8,205000200,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203609,203609,8,299001050,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203610,203610,8,299001060,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203611,203611,1,103000270,1,1,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
203612,203612,1,104000420,1,1,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
203613,203613,8,291000040,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203614,203614,8,201000090,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203615,203615,8,299000440,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203616,203616,8,299000450,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203617,203617,8,299000460,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203618,203618,8,299000470,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203619,203619,8,299000480,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203620,203620,8,202000290,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203621,203621,8,203000240,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203622,203622,8,299000870,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203623,203623,8,299000880,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203624,203624,8,299000890,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203625,203625,8,212000060,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203626,203626,8,201000150,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203627,203627,8,204000230,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203628,203628,8,209000200,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203629,203629,8,299000900,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203630,203630,3,170001,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203631,203631,3,170004,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203632,203632,3,170005,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203633,203633,3,180001,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203634,203634,3,180004,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203635,203635,3,180005,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203636,203636,3,140000,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203637,203637,3,150010,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203638,203638,3,150020,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203639,203639,3,150030,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203640,203640,3,150040,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203641,203641,3,190000,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203642,203642,3,200000,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203643,203643,3,210000,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203701,203701,3,170100,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203702,203702,3,170101,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203703,203703,3,170102,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203704,203704,3,170103,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203705,203705,3,170104,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203706,203706,8,203000300,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203707,203707,8,204000320,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203708,203708,8,217000080,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203709,203709,8,218000090,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203710,203710,8,299001070,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203711,203711,8,299001080,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203712,203712,8,298000130,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203713,203713,8,215000120,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203714,203714,1,106000260,1,1,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
203715,203715,8,202000160,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203716,203716,8,203000150,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203717,203717,8,204000110,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203718,203718,8,205000110,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203719,203719,8,206000120,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203720,203720,8,212000050,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203721,203721,3,170001,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203722,203722,3,170004,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203723,203723,3,170005,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203724,203724,3,180001,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203725,203725,3,180004,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203726,203726,3,180005,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203727,203727,3,140000,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203728,203728,3,150010,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203729,203729,3,150020,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203730,203730,3,150030,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203731,203731,3,150040,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203732,203732,3,190000,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203733,203733,3,200000,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203734,203734,3,210000,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203801,203801,8,202000380,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203802,203802,8,205000230,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203803,203803,8,206000250,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203804,203804,8,210000030,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203805,203805,8,299001090,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203806,203806,8,220000090,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203807,203807,8,299001100,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203808,203808,8,299001110,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203809,203809,1,105000240,1,1,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
203810,203810,8,299000550,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203811,203811,8,299000560,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203812,203812,8,299000570,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203813,203813,8,299000580,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203814,203814,8,299000590,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203815,203815,8,299000600,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203816,203816,3,170001,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203817,203817,3,170004,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203818,203818,3,170005,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203819,203819,3,180001,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203820,203820,3,180004,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203821,203821,3,180005,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203822,203822,3,140000,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203823,203823,3,150010,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203824,203824,3,150020,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203825,203825,3,150030,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203826,203826,3,150040,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203827,203827,3,190000,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203828,203828,3,200000,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
203829,203829,3,210000,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
204001,204001,8,202000420,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
204002,204002,8,203000340,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
204003,204003,8,204000360,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
204004,204004,8,211000140,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
204005,204005,8,212000090,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
204006,204006,1,101000300,1,1,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
204007,204007,1,102000360,1,1,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
204008,204008,1,103000310,1,1,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
204009,204009,1,104000370,1,1,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
204010,204010,1,109000290,1,1,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
204011,204011,1,109000130,1,1,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
204012,204012,1,110000130,1,1,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
204013,204013,1,111000080,1,1,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
204014,204014,1,112000080,1,1,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
204015,204015,1,104000220,1,1,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
204016,204016,1,109000300,1,1,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
204017,204017,8,211000060,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
204018,204018,8,299000610,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
204019,204019,8,299000620,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
204020,204020,8,299000630,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
204021,204021,8,299000640,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
204022,204022,8,299000650,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
204023,204023,8,299000410,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
204024,204024,8,299000660,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
204025,204025,8,215000050,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
204026,204026,8,216000060,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
204027,204027,8,218000030,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
204028,204028,8,217000020,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
204029,204029,8,299000500,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
204030,204030,8,299000510,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
204031,204031,8,299000520,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
204032,204032,8,299000530,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
204033,204033,8,299000540,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
204034,204034,3,170001,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
204035,204035,3,170004,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
204036,204036,3,170005,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
204037,204037,3,180001,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
204038,204038,3,180004,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
204039,204039,3,180005,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
204040,204040,3,140000,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
204041,204041,3,150010,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
204042,204042,3,150020,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
204043,204043,3,150030,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
204044,204044,3,150040,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
204045,204045,3,120241,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
204046,204046,3,120251,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
204047,204047,3,120261,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
204048,204048,3,120271,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
204049,204049,3,120730,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
204050,204050,3,190000,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
204051,204051,3,200000,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
204052,204052,3,210000,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
204101,204101,8,209000280,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
204102,204102,8,211000120,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
204103,204103,8,212000070,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
204104,204104,8,215000130,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
204105,204105,8,216000130,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
204106,204106,8,299001130,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
204107,204107,8,299001140,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
204108,204108,8,299001150,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
204109,204109,1,102000430,1,1,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
204110,204110,1,109000220,1,1,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
204111,204111,1,101000310,1,1,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
204112,204112,1,102000410,1,1,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
204113,204113,1,101000250,1,1,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
204114,204114,1,102000260,1,1,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
204115,204115,1,103000220,1,1,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
204116,204116,1,104000250,1,1,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
204117,204117,1,105000210,1,1,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
204118,204118,1,106000210,1,1,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
204119,204119,1,107000140,1,1,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
204120,204120,1,108000150,1,1,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
204121,204121,1,109000230,1,1,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
204122,204122,1,110000170,1,1,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
204123,204123,1,111000140,1,1,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
204124,204124,1,112000110,1,1,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
204125,204125,1,118000140,1,1,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
204126,204126,8,201000120,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
204127,204127,8,202000240,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
204128,204128,8,211000080,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
204129,204129,8,299000730,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
204130,204130,8,299000740,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
204131,204131,8,299000750,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
204132,204132,8,299000760,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
204133,204133,8,299000770,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
204134,204134,3,170001,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
204135,204135,3,170004,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
204136,204136,3,170005,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
204137,204137,3,180001,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
204138,204138,3,180004,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
204139,204139,3,180005,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
204140,204140,3,140000,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
204141,204141,3,150010,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
204142,204142,3,150020,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
204143,204143,3,150030,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
204144,204144,3,150040,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
204145,204145,3,190000,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
204146,204146,3,200000,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
204147,204147,3,210000,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
204201,204201,1,101000430,1,1,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
204202,204202,1,102000580,1,1,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
204203,204203,1,103000480,1,1,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
204204,204204,1,104000520,1,1,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
204205,204205,1,109000430,1,1,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
204206,204206,1,111000350,1,1,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
204207,204207,8,205000240,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
204208,204208,8,206000260,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
204209,204209,8,215000140,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
204210,204210,8,216000140,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
204211,204211,8,217000090,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
204212,204212,8,218000100,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
204213,204213,8,299001120,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
204214,204214,1,102000280,1,1,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
204215,204215,8,291000040,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
204216,204216,8,204000210,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
204217,204217,8,205000150,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
204218,204218,8,299000800,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
204219,204219,8,299000810,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
204220,204220,8,299000820,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
204221,204221,8,201000130,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
204222,204222,8,299000830,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
204223,204223,8,202000270,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
204224,204224,8,206000190,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
204225,204225,8,220000060,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
204226,204226,3,170001,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
204227,204227,3,170004,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
204228,204228,3,170005,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
204229,204229,3,180001,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
204230,204230,3,180004,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
204231,204231,3,180005,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
204232,204232,3,140000,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
204233,204233,3,150010,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
204234,204234,3,150020,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
204235,204235,3,150030,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
204236,204236,3,150040,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
204237,204237,3,190000,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
204238,204238,3,200000,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
204239,204239,3,210000,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
204301,204301,8,202000390,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
204302,204302,8,203000310,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
204303,204303,8,204000330,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
204304,204304,8,209000290,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
204305,204305,8,210000040,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
204306,204306,8,211000130,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
204307,204307,8,212000080,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
204308,204308,1,101000270,1,1,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
204309,204309,1,104000420,1,1,1,0,0,1,0,0,2,0,0,2,0,0
|
||||
204310,204310,8,206000200,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
204311,204311,8,211000090,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
204312,204312,8,299000840,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
204313,204313,8,299000850,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
204314,204314,8,299000860,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
204315,204315,8,202000280,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
204316,204316,8,204000220,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
204317,204317,8,201000140,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
204318,204318,8,203000230,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
204319,204319,8,205000160,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
204320,204320,3,170001,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
204321,204321,3,170004,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
204322,204322,3,170005,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
204323,204323,3,180001,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
204324,204324,3,180004,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
204325,204325,3,180005,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
204326,204326,3,140000,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
204327,204327,3,150010,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
204328,204328,3,150020,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
204329,204329,3,150030,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
204330,204330,3,150040,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
204331,204331,3,190000,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
204332,204332,3,200000,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
||||
204333,204333,3,210000,1,0,1,0,0,1,0,0,1,0,0,1,0,0
|
|
789
titles/sao/data/YuiMedalShops.csv
Normal file
789
titles/sao/data/YuiMedalShops.csv
Normal file
@ -0,0 +1,789 @@
|
||||
YuiMedalShopId,Name,Description,SellingYuiMedal,SellingCol,SellingEventItemId,SellingEventItemNum,SellingTicketNum,PurchaseLimit,PickUpFlag,ProductCategory,SalesType,TargetDays,TargetHour,IntervalHour,SalesStartDate,SalesEndDate,Sort
|
||||
1,"≪想い馳せる窓辺≫キリト",,5,-1,0,-1,-1,-1,True,0,0,0,0,0,"2019/08/01","2019/11/01 2:00:00",0
|
||||
2,"≪悪戯なオネーサン≫アルゴ",,5,-1,0,-1,-1,-1,True,0,0,0,0,0,"2019/08/01","2019/11/01 2:00:00",0
|
||||
3,"ネックレス",,2,-1,0,-1,-1,-1,False,0,0,0,0,0,"2019/08/01","2019/11/01 2:00:00",0
|
||||
4,"エリュシデータ",,5,-1,0,-1,-1,-1,False,0,0,0,0,0,"2019/08/01","2019/11/01 2:00:00",0
|
||||
5,"アロンダイト",,5,-1,0,-1,-1,-1,False,0,0,0,0,0,"2019/08/01","2019/11/01 2:00:00",0
|
||||
6,"スクレープ",,5,-1,0,-1,-1,-1,False,0,0,0,0,0,"2019/08/01","2019/11/01 2:00:00",0
|
||||
7,"ジャイアント・タスク",,5,-1,0,-1,-1,-1,False,0,0,0,0,0,"2019/08/01","2019/11/01 2:00:00",0
|
||||
8,"スヴェル",,5,-1,0,-1,-1,-1,False,0,0,0,0,0,"2019/08/01","2019/11/01 2:00:00",0
|
||||
9,"≪信頼の口付け≫リズベット",,5,-1,0,-1,-1,-1,True,0,0,0,0,0,"2019/10/01 7:00:00","2019/12/01 2:00:00",0
|
||||
10,"≪愛の誓い≫アスナ",,5,-1,0,-1,-1,-1,True,0,0,0,0,0,"2019/11/01 7:00:00","2020/01/01 2:00:00",0
|
||||
11,"ブラックプレート",,1,-1,0,-1,-1,-1,False,0,0,0,0,0,"2019/11/01 7:00:00","2021/01/01 2:00:00",1
|
||||
12,"ムラマサ",,5,-1,0,-1,-1,-1,False,0,0,0,0,0,"2019/11/01 7:00:00","2021/01/01 2:00:00",0
|
||||
13,"ヴェンデッタ",,5,-1,0,-1,-1,-1,False,0,0,0,0,0,"2019/11/01 7:00:00","2021/01/01 2:00:00",0
|
||||
14,"フェイルノート",,5,-1,0,-1,-1,-1,False,0,0,0,0,0,"2019/11/01 7:00:00","2021/01/01 2:00:00",0
|
||||
15,"ヴィズィー・ガジェット",,5,-1,0,-1,-1,-1,False,0,0,0,0,0,"2019/11/01 7:00:00","2021/01/01 2:00:00",0
|
||||
16,"MEBRカスタム",,5,-1,0,-1,-1,-1,False,0,0,0,0,0,"2019/11/01 7:00:00","2021/01/01 2:00:00",0
|
||||
17,"《宙吊りプラント》シリカ",,5,-1,0,-1,-1,-1,True,0,0,0,0,0,"2019/12/01 7:00:00","2020/02/01 2:00:00",0
|
||||
18,"《奇想の相棒》ユージオ",,5,-1,0,-1,-1,-1,True,0,0,0,0,0,"2020/01/01 7:00:00","2020/03/01 2:00:00",0
|
||||
19,"エペ・ド・マルブル",,1,-1,0,-1,-1,-1,False,0,0,0,0,0,"2020/01/01 7:00:00","2021/01/01 2:00:00",2
|
||||
20,"エリュシデータ",,5,-1,0,-1,-1,-1,False,0,0,0,0,0,"2020/01/01 7:00:00","2021/01/01 2:00:00",0
|
||||
21,"アロンダイト",,5,-1,0,-1,-1,-1,False,0,0,0,0,0,"2020/01/01 7:00:00","2021/01/01 2:00:00",0
|
||||
22,"スクレープ",,5,-1,0,-1,-1,-1,False,0,0,0,0,0,"2020/01/01 7:00:00","2021/01/01 2:00:00",0
|
||||
23,"ジャイアント・タスク",,5,-1,0,-1,-1,-1,False,0,0,0,0,0,"2020/01/01 7:00:00","2021/01/01 2:00:00",0
|
||||
24,"スヴェル",,5,-1,0,-1,-1,-1,False,0,0,0,0,0,"2020/01/01 7:00:00","2021/01/01 2:00:00",0
|
||||
25,"《疾風迅雷》シノン",,5,-1,0,-1,-1,-1,True,0,0,0,0,0,"2020/02/01 7:00:00","2020/04/01 2:00:00",0
|
||||
26,"《愛受のはにかみ》キリト",,-1,-1,10001,3,-1,-1,False,0,0,0,0,0,"2020/02/11 7:00:00","2020/05/15 13:59:59",20
|
||||
27,"《甘い贈り物》アスナ",,-1,-1,10001,3,-1,-1,False,0,0,0,0,0,"2020/02/11 7:00:00","2020/05/15 13:59:59",19
|
||||
28,"《恋慕の微笑》リーファ",,-1,-1,10001,3,-1,-1,False,0,0,0,0,0,"2020/02/11 7:00:00","2020/05/15 13:59:59",18
|
||||
29,"《静穏の秘め事》シノン",,-1,-1,10001,3,-1,-1,False,0,0,0,0,0,"2020/02/11 7:00:00","2020/05/15 13:59:59",17
|
||||
30,"《親愛の鍛冶屋》リズベット",,-1,-1,10001,3,-1,-1,False,0,0,0,0,0,"2020/02/11 7:00:00","2020/05/15 13:59:59",16
|
||||
31,"《純情な恋路》シリカ",,-1,-1,10001,3,-1,-1,False,0,0,0,0,0,"2020/02/11 7:00:00","2020/05/15 13:59:59",15
|
||||
32,"《歓喜の照笑》クライン",,-1,-1,10001,3,-1,-1,False,0,0,0,0,0,"2020/02/11 7:00:00","2020/05/15 13:59:59",14
|
||||
33,"《義理堅い甘露》エギル",,-1,-1,10001,3,-1,-1,False,0,0,0,0,0,"2020/02/11 7:00:00","2020/05/15 13:59:59",13
|
||||
34,"《純粋な愛情》ユウキ",,-1,-1,10001,3,-1,-1,False,0,0,0,0,0,"2020/02/11 7:00:00","2020/05/15 13:59:59",12
|
||||
35,"《秘密の贈り物》アルゴ",,-1,-1,10001,3,-1,-1,False,0,0,0,0,0,"2020/02/11 7:00:00","2020/05/15 13:59:59",11
|
||||
36,"《裏腹な恋心》アリス",,-1,-1,10001,3,-1,-1,False,0,0,0,0,0,"2020/02/11 7:00:00","2020/05/15 13:59:59",10
|
||||
37,"《心届く笑顔》ユージオ",,-1,-1,10001,3,-1,-1,False,0,0,0,0,0,"2020/02/11 7:00:00","2020/05/15 13:59:59",9
|
||||
38,"EXPチップ《テラ》",,-1,-1,10001,3,-1,-1,False,0,0,0,0,0,"2020/02/11 7:00:00","2020/05/15 13:59:59",7
|
||||
39,"ゴールド《テラ》",,-1,-1,10001,3,-1,-1,False,0,0,0,0,0,"2020/02/11 7:00:00","2020/05/15 13:59:59",4
|
||||
40,"EXPチップ《キロ》",,-1,-1,10001,1,-1,-1,False,0,0,0,0,0,"2020/02/11 7:00:00","2020/05/15 13:59:59",8
|
||||
41,"ゴールド《キロ》",,-1,-1,10001,1,-1,-1,False,0,0,0,0,0,"2020/02/11 7:00:00","2020/05/15 13:59:59",5
|
||||
42,"EXPメモリ",,-1,-1,10001,5,-1,-1,False,0,0,0,0,0,"2020/02/11 7:00:00","2020/05/15 13:59:59",6
|
||||
43,"プラチナ",,-1,-1,10001,5,-1,-1,False,0,0,0,0,0,"2020/02/11 7:00:00","2020/05/15 13:59:59",3
|
||||
44,"プロパティアペンド",,-1,-1,10001,3,-1,-1,False,0,0,0,0,0,"2020/02/11 7:00:00","2020/05/15 13:59:59",0
|
||||
45,"コードイレイサー:1",,-1,-1,10001,3,-1,-1,False,0,0,0,0,0,"2020/02/11 7:00:00","2020/05/15 13:59:59",0
|
||||
46,"コードイレイサー:2",,-1,-1,10001,3,-1,-1,False,0,0,0,0,0,"2020/02/11 7:00:00","2020/05/15 13:59:59",0
|
||||
47,"コードイレイサー:3",,-1,-1,10001,3,-1,-1,False,0,0,0,0,0,"2020/02/11 7:00:00","2020/05/15 13:59:59",0
|
||||
48,"コードイレイサー:4",,-1,-1,10001,3,-1,-1,False,0,0,0,0,0,"2020/02/11 7:00:00","2020/05/15 13:59:59",0
|
||||
49,"ヒーローレベルアペンド《1》",,-1,-1,10001,20,-1,-1,False,0,0,0,0,0,"2020/02/11 7:00:00","2020/05/15 13:59:59",0
|
||||
50,"ウェポンレベルアペンド《1》",,-1,-1,10001,20,-1,-1,False,0,0,0,0,0,"2020/02/11 7:00:00","2020/05/15 13:59:59",0
|
||||
51,"アクセサリレベルアペンド《1》",,-1,-1,10001,20,-1,-1,False,0,0,0,0,0,"2020/02/11 7:00:00","2020/05/15 13:59:59",0
|
||||
52,"《秘めた胸奥》リーファ",,5,-1,0,-1,-1,-1,True,0,0,0,0,0,"2020/03/01 7:00:00","2020/07/01 2:00:00",1
|
||||
53,"《固守の決意》アリス",,5,-1,0,-1,-1,-1,True,0,0,0,0,0,"2020/06/09 7:00:00","2020/09/01 2:00:00",2
|
||||
54,"《武人の少憩》クライン",,5,-1,0,-1,-1,-1,True,0,0,0,0,0,"2020/07/01 7:00:00","2020/09/01 2:00:00",3
|
||||
55,"《金剛なる体躯》エギル",,5,-1,0,-1,-1,-1,True,0,0,0,0,0,"2020/09/01 7:00:00","2020/11/01 2:00:00",4
|
||||
56,"《異世界の英雄》キリト",,-1,-1,10002,20,-1,-1,False,0,0,0,0,0,"2020/07/14 7:00:00","2020/08/11 2:00:00",0
|
||||
57,"《彼岸花の君》メディナ",,-1,-1,10002,20,-1,-1,False,0,0,0,0,0,"2020/07/14 7:00:00","2020/08/11 2:00:00",0
|
||||
58,"《柔靭なる剣士》ソルティリーナ",,-1,-1,10002,20,-1,-1,False,0,0,0,0,0,"2020/07/14 7:00:00","2020/08/11 2:00:00",0
|
||||
59,"《図書室の賢者》カーディナル",,-1,-1,10002,20,-1,-1,False,0,0,0,0,0,"2020/07/14 7:00:00","2020/08/11 2:00:00",0
|
||||
60,"《絶対的支配者》アドミニストレータ",,-1,-1,10002,20,-1,-1,False,0,0,0,0,0,"2020/07/14 7:00:00","2020/08/11 2:00:00",0
|
||||
61,"《愛の忠臣》チュデルキン",,-1,-1,10002,20,-1,-1,False,0,0,0,0,0,"2020/07/14 7:00:00","2020/08/11 2:00:00",0
|
||||
62,"EXPチップ《テラ》",,-1,-1,10002,3,-1,-1,False,0,0,0,0,0,"2020/07/14 7:00:00","2020/08/11 2:00:00",0
|
||||
63,"ゴールド《テラ》",,-1,-1,10002,3,-1,-1,False,0,0,0,0,0,"2020/07/14 7:00:00","2020/08/11 2:00:00",0
|
||||
64,"EXPチップ《キロ》",,-1,-1,10002,1,-1,-1,False,0,0,0,0,0,"2020/07/14 7:00:00","2020/08/11 2:00:00",0
|
||||
65,"ゴールド《キロ》",,-1,-1,10002,1,-1,-1,False,0,0,0,0,0,"2020/07/14 7:00:00","2020/08/11 2:00:00",0
|
||||
66,"EXPメモリ",,-1,-1,10002,5,-1,-1,False,0,0,0,0,0,"2020/07/14 7:00:00","2020/08/11 2:00:00",0
|
||||
67,"プラチナ",,-1,-1,10002,5,-1,-1,False,0,0,0,0,0,"2020/07/14 7:00:00","2020/08/11 2:00:00",0
|
||||
68,"プロパティアペンド",,-1,-1,10002,3,-1,-1,False,0,0,0,0,0,"2020/07/14 7:00:00","2020/08/11 2:00:00",0
|
||||
69,"コードイレイサー:1",,-1,-1,10002,3,-1,-1,False,0,0,0,0,0,"2020/07/14 7:00:00","2020/08/11 2:00:00",0
|
||||
70,"コードイレイサー:2",,-1,-1,10002,3,-1,-1,False,0,0,0,0,0,"2020/07/14 7:00:00","2020/08/11 2:00:00",0
|
||||
71,"コードイレイサー:3",,-1,-1,10002,3,-1,-1,False,0,0,0,0,0,"2020/07/14 7:00:00","2020/08/11 2:00:00",0
|
||||
72,"コードイレイサー:4",,-1,-1,10002,3,-1,-1,False,0,0,0,0,0,"2020/07/14 7:00:00","2020/08/11 2:00:00",0
|
||||
73,"ヒーローレベルアペンド《1》",,-1,-1,10002,20,-1,-1,False,0,0,0,0,0,"2020/07/14 7:00:00","2020/08/11 2:00:00",0
|
||||
74,"ウェポンレベルアペンド《1》",,-1,-1,10002,20,-1,-1,False,0,0,0,0,0,"2020/07/14 7:00:00","2020/08/11 2:00:00",0
|
||||
75,"アクセサリレベルアペンド《1》",,-1,-1,10002,20,-1,-1,False,0,0,0,0,0,"2020/07/14 7:00:00","2020/08/11 2:00:00",0
|
||||
76,"ヴァーデュラス・アニマ",,-1,-1,10002,8,-1,-1,False,0,0,0,0,0,"2020/07/14 7:00:00","2020/08/11 2:00:00",22
|
||||
77,"ラディアント・ライト",,-1,-1,10002,8,-1,-1,False,0,0,0,0,0,"2020/07/14 7:00:00","2020/08/11 2:00:00",21
|
||||
78,"アニヒレート・レイ",,-1,-1,10002,8,-1,-1,False,0,0,0,0,0,"2020/07/14 7:00:00","2020/08/11 2:00:00",20
|
||||
79,"《愛する人へ》アスナ",,-1,-1,10003,3,-1,-1,False,0,0,0,0,0,"2020/08/11 7:00:00","2020/09/08 2:00:00",20
|
||||
80,"《大切な家族》リーファ",,-1,-1,10003,3,-1,-1,False,0,0,0,0,0,"2020/08/11 7:00:00","2020/09/08 2:00:00",19
|
||||
81,"《強さを知って》シノン",,-1,-1,10003,3,-1,-1,False,0,0,0,0,0,"2020/08/11 7:00:00","2020/09/08 2:00:00",18
|
||||
82,"《この温度を君に》リズベット",,-1,-1,10003,3,-1,-1,False,0,0,0,0,0,"2020/08/11 7:00:00","2020/09/08 2:00:00",17
|
||||
83,"《今度はあたしが》シリカ",,-1,-1,10003,3,-1,-1,False,0,0,0,0,0,"2020/08/11 7:00:00","2020/09/08 2:00:00",16
|
||||
84,"《傍らの相棒》ユージオ",,-1,-1,10003,3,-1,-1,False,0,0,0,0,0,"2020/08/11 7:00:00","2020/09/08 2:00:00",15
|
||||
85,"EXPチップ《テラ》",,-1,-1,10003,3,-1,-1,False,0,0,0,0,0,"2020/08/11 7:00:00","2020/09/08 2:00:00",12
|
||||
86,"ゴールド《テラ》",,-1,-1,10003,3,-1,-1,False,0,0,0,0,0,"2020/08/11 7:00:00","2020/09/08 2:00:00",9
|
||||
87,"EXPチップ《キロ》",,-1,-1,10003,1,-1,-1,False,0,0,0,0,0,"2020/08/11 7:00:00","2020/09/08 2:00:00",13
|
||||
88,"ゴールド《キロ》",,-1,-1,10003,1,-1,-1,False,0,0,0,0,0,"2020/08/11 7:00:00","2020/09/08 2:00:00",10
|
||||
89,"EXPメモリ",,-1,-1,10003,5,-1,-1,False,0,0,0,0,0,"2020/08/11 7:00:00","2020/09/08 2:00:00",11
|
||||
90,"プラチナ",,-1,-1,10003,5,-1,-1,False,0,0,0,0,0,"2020/08/11 7:00:00","2020/09/08 2:00:00",8
|
||||
91,"プロパティアペンド",,-1,-1,10003,3,-1,-1,False,0,0,0,0,0,"2020/08/11 7:00:00","2020/09/08 2:00:00",7
|
||||
92,"コードイレイサー:1",,-1,-1,10003,3,-1,-1,False,0,0,0,0,0,"2020/08/11 7:00:00","2020/09/08 2:00:00",6
|
||||
93,"コードイレイサー:2",,-1,-1,10003,3,-1,-1,False,0,0,0,0,0,"2020/08/11 7:00:00","2020/09/08 2:00:00",5
|
||||
94,"コードイレイサー:3",,-1,-1,10003,3,-1,-1,False,0,0,0,0,0,"2020/08/11 7:00:00","2020/09/08 2:00:00",4
|
||||
95,"コードイレイサー:4",,-1,-1,10003,3,-1,-1,False,0,0,0,0,0,"2020/08/11 7:00:00","2020/09/08 2:00:00",3
|
||||
96,"ヒーローレベルアペンド《1》",,-1,-1,10003,20,-1,-1,False,0,0,0,0,0,"2020/08/11 7:00:00","2020/09/08 2:00:00",2
|
||||
97,"ウェポンレベルアペンド《1》",,-1,-1,10003,20,-1,-1,False,0,0,0,0,0,"2020/08/11 7:00:00","2020/09/08 2:00:00",1
|
||||
98,"アクセサリレベルアペンド《1》",,-1,-1,10003,20,-1,-1,False,0,0,0,0,0,"2020/08/11 7:00:00","2020/09/08 2:00:00",0
|
||||
99,"≪蒼穹を駆ける英傑≫ユウキ",,-1,-1,10003,6,-1,-1,False,0,0,0,0,0,"2020/08/11 7:00:00","2020/09/08 2:00:00",14
|
||||
100,"《整合騎士長》ベルクーリ",,-1,-1,10004,3,-1,-1,False,0,0,0,0,0,"2020/09/08 7:00:00","2020/10/13 2:00:00",20
|
||||
101,"《天穿の光》ファナティオ",,-1,-1,10004,3,-1,-1,False,0,0,0,0,0,"2020/09/08 7:00:00","2020/10/13 2:00:00",19
|
||||
102,"《焔の弓騎士》デュソルバート",,-1,-1,10004,3,-1,-1,False,0,0,0,0,0,"2020/09/08 7:00:00","2020/10/13 2:00:00",18
|
||||
103,"《師への敬愛》エルドリエ",,-1,-1,10004,3,-1,-1,False,0,0,0,0,0,"2020/09/08 7:00:00","2020/10/13 2:00:00",17
|
||||
104,"《黒百合の一閃》シェータ",,-1,-1,10004,3,-1,-1,False,0,0,0,0,0,"2020/09/08 7:00:00","2020/10/13 2:00:00",16
|
||||
105,"《失くした片翼》レンリ",,-1,-1,10004,3,-1,-1,False,0,0,0,0,0,"2020/09/08 7:00:00","2020/10/13 2:00:00",15
|
||||
106,"EXPチップ《テラ》",,-1,-1,10004,3,-1,-1,False,0,0,0,0,0,"2020/09/08 7:00:00","2020/10/13 2:00:00",12
|
||||
107,"ゴールド《テラ》",,-1,-1,10004,3,-1,-1,False,0,0,0,0,0,"2020/09/08 7:00:00","2020/10/13 2:00:00",9
|
||||
108,"EXPチップ《キロ》",,-1,-1,10004,1,-1,-1,False,0,0,0,0,0,"2020/09/08 7:00:00","2020/10/13 2:00:00",13
|
||||
109,"ゴールド《キロ》",,-1,-1,10004,1,-1,-1,False,0,0,0,0,0,"2020/09/08 7:00:00","2020/10/13 2:00:00",10
|
||||
110,"EXPメモリ",,-1,-1,10004,5,-1,-1,False,0,0,0,0,0,"2020/09/08 7:00:00","2020/10/13 2:00:00",11
|
||||
111,"プラチナ",,-1,-1,10004,5,-1,-1,False,0,0,0,0,0,"2020/09/08 7:00:00","2020/10/13 2:00:00",8
|
||||
112,"プロパティアペンド",,-1,-1,10004,3,-1,-1,False,0,0,0,0,0,"2020/09/08 7:00:00","2020/10/13 2:00:00",7
|
||||
113,"コードイレイサー:1",,-1,-1,10004,3,-1,-1,False,0,0,0,0,0,"2020/09/08 7:00:00","2020/10/13 2:00:00",6
|
||||
114,"コードイレイサー:2",,-1,-1,10004,3,-1,-1,False,0,0,0,0,0,"2020/09/08 7:00:00","2020/10/13 2:00:00",5
|
||||
115,"コードイレイサー:3",,-1,-1,10004,3,-1,-1,False,0,0,0,0,0,"2020/09/08 7:00:00","2020/10/13 2:00:00",4
|
||||
116,"コードイレイサー:4",,-1,-1,10004,3,-1,-1,False,0,0,0,0,0,"2020/09/08 7:00:00","2020/10/13 2:00:00",3
|
||||
117,"ヒーローレベルアペンド《1》",,-1,-1,10004,20,-1,-1,False,0,0,0,0,0,"2020/09/08 7:00:00","2020/10/13 2:00:00",2
|
||||
118,"ウェポンレベルアペンド《1》",,-1,-1,10004,20,-1,-1,False,0,0,0,0,0,"2020/09/08 7:00:00","2020/10/13 2:00:00",1
|
||||
119,"アクセサリレベルアペンド《1》",,-1,-1,10004,20,-1,-1,False,0,0,0,0,0,"2020/09/08 7:00:00","2020/10/13 2:00:00",0
|
||||
120,"≪万天に通ずる鼠≫アルゴ",,-1,-1,10004,6,-1,-1,False,0,0,0,0,0,"2020/09/08 7:00:00","2020/10/13 2:00:00",14
|
||||
121,"ヒーローコード:斬耐性",,-1,200000,0,-1,-1,-1,False,0,0,0,0,0,"2020/07/28 7:00:00","2021/01/01 2:00:00",0
|
||||
122,"ヒーローコード:打耐性",,-1,200000,0,-1,-1,-1,False,0,0,0,0,0,"2020/07/28 7:00:00","2021/01/01 2:00:00",0
|
||||
123,"ヒーローコード:突耐性",,-1,200000,0,-1,-1,-1,False,0,0,0,0,0,"2020/07/28 7:00:00","2021/01/01 2:00:00",0
|
||||
124,"ヒーローコード:火耐性",,-1,200000,0,-1,-1,-1,False,0,0,0,0,0,"2020/07/28 7:00:00","2021/01/01 2:00:00",0
|
||||
125,"ヒーローコード:水耐性",,-1,200000,0,-1,-1,-1,False,0,0,0,0,0,"2020/07/28 7:00:00","2021/01/01 2:00:00",0
|
||||
126,"ヒーローコード:風耐性",,-1,200000,0,-1,-1,-1,False,0,0,0,0,0,"2020/07/28 7:00:00","2021/01/01 2:00:00",0
|
||||
127,"ヒーローコード:土耐性",,-1,200000,0,-1,-1,-1,False,0,0,0,0,0,"2020/07/28 7:00:00","2021/01/01 2:00:00",0
|
||||
128,"ヒーローコード:聖耐性",,-1,200000,0,-1,-1,-1,False,0,0,0,0,0,"2020/07/28 7:00:00","2021/01/01 2:00:00",0
|
||||
129,"ヒーローコード:闇耐性",,-1,200000,0,-1,-1,-1,False,0,0,0,0,0,"2020/07/28 7:00:00","2021/01/01 2:00:00",0
|
||||
130,"ヒーローコード:毒無効",,-1,200000,0,-1,-1,-1,False,0,0,0,0,0,"2020/07/28 7:00:00","2021/01/01 2:00:00",0
|
||||
131,"ヒーローコード:混乱無効",,-1,200000,0,-1,-1,-1,False,0,0,0,0,0,"2020/07/28 7:00:00","2021/01/01 2:00:00",0
|
||||
132,"ヒーローコード:封印無効",,-1,200000,0,-1,-1,-1,False,0,0,0,0,0,"2020/07/28 7:00:00","2021/01/01 2:00:00",0
|
||||
133,"ヒーローコード:地震無効",,-1,200000,0,-1,-1,-1,False,0,0,0,0,0,"2020/07/28 7:00:00","2021/01/01 2:00:00",0
|
||||
134,"≪君との内緒事≫ユウキ",,5,-1,0,-1,-1,-1,True,0,0,0,0,0,"2020/08/01 7:00:00","2020/10/01 2:00:00",1
|
||||
135,"《金剛なる体躯》エギル",,5,-1,0,-1,-1,-1,True,0,0,0,0,0,"2020/09/01 7:00:00","2020/11/01 2:00:00",2
|
||||
136,"≪悪戯なオネーサン≫アルゴ",,5,-1,0,-1,-1,-1,True,0,0,0,0,0,"2020/09/01 7:00:00","2020/10/01 2:00:00",0
|
||||
137,"≪赤面プラクティカ≫レイン",,5,-1,0,-1,-1,-1,True,0,0,0,0,0,"2020/10/01 7:00:00","2020/12/01 2:00:00",3
|
||||
138,"≪想い馳せる窓辺≫キリト",,5,-1,0,-1,-1,-1,True,0,0,0,0,0,"2020/10/01 7:00:00","2020/11/01 2:00:00",0
|
||||
139,"《共に歩む時》キリト",,-1,-1,10005,3,-1,-1,False,0,0,0,0,0,"2020/10/20 7:00:00","2020/12/01 2:00:00",26
|
||||
140,"《立ち上がる時》アスナ",,-1,-1,10005,3,-1,-1,False,0,0,0,0,0,"2020/10/20 7:00:00","2020/12/01 2:00:00",25
|
||||
141,"《心繋がる時》リーファ",,-1,-1,10005,3,-1,-1,False,0,0,0,0,0,"2020/10/20 7:00:00","2020/12/01 2:00:00",24
|
||||
142,"《意志示す時》シノン",,-1,-1,10005,3,-1,-1,False,0,0,0,0,0,"2020/10/20 7:00:00","2020/12/01 2:00:00",23
|
||||
143,"《背中押す時》ユウキ",,-1,-1,10005,3,-1,-1,False,0,0,0,0,0,"2020/10/20 7:00:00","2020/12/01 2:00:00",22
|
||||
144,"《誇り高き騎士》アリス",,-1,-1,10005,3,-1,-1,False,0,0,0,0,0,"2020/10/20 7:00:00","2020/12/01 2:00:00",21
|
||||
145,"《姉想う祈り》セルカ",,-1,-1,10005,3,-1,-1,False,0,0,0,0,0,"2020/10/20 7:00:00","2020/12/01 2:00:00",20
|
||||
146,"《正しき道》ロニエ",,-1,-1,10005,3,-1,-1,False,0,0,0,0,0,"2020/10/20 7:00:00","2020/12/01 2:00:00",19
|
||||
147,"《受け継ぐ希望》ティーゼ",,-1,-1,10005,3,-1,-1,False,0,0,0,0,0,"2020/10/20 7:00:00","2020/12/01 2:00:00",18
|
||||
148,"《無邪気な毒牙》フィゼル",,-1,-1,10005,3,-1,-1,False,0,0,0,0,0,"2020/10/20 7:00:00","2020/12/01 2:00:00",17
|
||||
149,"《穏やかな殺戮》リネル",,-1,-1,10005,3,-1,-1,False,0,0,0,0,0,"2020/10/20 7:00:00","2020/12/01 2:00:00",16
|
||||
150,"《心通う邂逅》アリス",,-1,-1,10005,10,-1,-1,False,0,0,0,0,0,"2020/10/20 7:00:00","2020/12/01 2:00:00",15
|
||||
151,"《かの剣技の継承者》ユージオ",,-1,-1,10005,10,-1,-1,False,0,0,0,0,0,"2020/10/20 7:00:00","2020/12/01 2:00:00",14
|
||||
152,"EXPチップ《テラ》",,-1,-1,10005,3,-1,-1,False,0,0,0,0,0,"2020/10/20 7:00:00","2020/12/01 2:00:00",12
|
||||
153,"ゴールド《テラ》",,-1,-1,10005,3,-1,-1,False,0,0,0,0,0,"2020/10/20 7:00:00","2020/12/01 2:00:00",9
|
||||
154,"EXPチップ《キロ》",,-1,-1,10005,1,-1,-1,False,0,0,0,0,0,"2020/10/20 7:00:00","2020/12/01 2:00:00",13
|
||||
155,"ゴールド《キロ》",,-1,-1,10005,1,-1,-1,False,0,0,0,0,0,"2020/10/20 7:00:00","2020/12/01 2:00:00",10
|
||||
156,"EXPメモリ",,-1,-1,10005,5,-1,-1,False,0,0,0,0,0,"2020/10/20 7:00:00","2020/12/01 2:00:00",11
|
||||
157,"プラチナ",,-1,-1,10005,5,-1,-1,False,0,0,0,0,0,"2020/10/20 7:00:00","2020/12/01 2:00:00",8
|
||||
158,"プロパティアペンド",,-1,-1,10005,3,-1,-1,False,0,0,0,0,0,"2020/10/20 7:00:00","2020/12/01 2:00:00",7
|
||||
159,"コードイレイサー:1",,-1,-1,10005,3,-1,-1,False,0,0,0,0,0,"2020/10/20 7:00:00","2020/12/01 2:00:00",6
|
||||
160,"コードイレイサー:2",,-1,-1,10005,3,-1,-1,False,0,0,0,0,0,"2020/10/20 7:00:00","2020/12/01 2:00:00",5
|
||||
161,"コードイレイサー:3",,-1,-1,10005,3,-1,-1,False,0,0,0,0,0,"2020/10/20 7:00:00","2020/12/01 2:00:00",4
|
||||
162,"コードイレイサー:4",,-1,-1,10005,3,-1,-1,False,0,0,0,0,0,"2020/10/20 7:00:00","2020/12/01 2:00:00",3
|
||||
163,"ヒーローレベルアペンド《1》",,-1,-1,10005,20,-1,-1,False,0,0,0,0,0,"2020/10/20 7:00:00","2020/12/01 2:00:00",2
|
||||
164,"ウェポンレベルアペンド《1》",,-1,-1,10005,20,-1,-1,False,0,0,0,0,0,"2020/10/20 7:00:00","2020/12/01 2:00:00",1
|
||||
165,"アクセサリレベルアペンド《1》",,-1,-1,10005,20,-1,-1,False,0,0,0,0,0,"2020/10/20 7:00:00","2020/12/01 2:00:00",0
|
||||
166,"《信頼の口付け》リズベット",,5,-1,0,-1,-1,-1,True,0,0,0,0,0,"2020/11/01 7:00:00","2020/12/01 2:00:00",0
|
||||
167,"《隠された素顔》アルゴ",,5,-1,0,-1,-1,-1,True,0,0,0,0,0,"2020/11/01 7:00:00","2021/01/01 2:00:00",0
|
||||
168,"《愛の誓い》アスナ",,5,-1,0,-1,-1,-1,True,0,0,0,0,0,"2020/12/01 7:00:00","2021/01/01 2:00:00",0
|
||||
169,"《あどけない笑み》シリカ",,5,-1,0,-1,-1,-1,True,0,0,0,0,0,"2020/12/01 7:00:00","2021/02/01 2:00:00",0
|
||||
170,"《奇想の相棒》ユージオ",,5,-1,0,-1,-1,-1,True,0,0,0,0,0,"2021/01/01 7:00:00","2021/02/01 2:00:00",0
|
||||
171,"《光の巫女》アリス",,5,-1,0,-1,-1,-1,True,0,0,0,0,0,"2021/01/01 7:00:00","2021/03/01 2:00:00",0
|
||||
172,"《宙吊りプラント》シリカ",,5,-1,0,-1,-1,-1,True,0,0,0,0,0,"2021/02/01 7:00:00","2021/03/01 2:00:00",0
|
||||
173,"《休剣の手入れ》ユージオ",,5,-1,0,-1,-1,-1,True,0,0,0,0,0,"2021/02/01 7:00:00","2021/04/01 2:00:00",0
|
||||
174,"《疾風迅雷》シノン",,5,-1,0,-1,-1,-1,True,0,0,0,0,0,"2021/03/01 7:00:00","2021/04/01 2:00:00",0
|
||||
175,"《勇猛な巨躯》エギル",,5,-1,0,-1,-1,-1,True,0,0,0,0,0,"2021/03/01 7:00:00","2021/05/01 2:00:00",0
|
||||
176,"《秘めた胸奥》リーファ",,5,-1,0,-1,-1,-1,True,0,0,0,0,0,"2021/04/01 7:00:00","2021/05/01 2:00:00",0
|
||||
177,"《恋するお人形》リズベット",,5,-1,0,-1,-1,-1,True,0,0,0,0,0,"2021/04/01 7:00:00","2021/06/01 2:00:00",0
|
||||
178,"《固守の決意》アリス",,5,-1,0,-1,-1,-1,True,0,0,0,0,0,"2021/05/01 7:00:00","2021/06/01 2:00:00",0
|
||||
179,"《南風に吹かれて》リーファ",,5,-1,0,-1,-1,-1,True,0,0,0,0,0,"2021/05/01 7:00:00","2021/07/01 2:00:00",0
|
||||
180,"《君との内緒事》ユウキ",,5,-1,0,-1,-1,-1,True,0,0,0,0,0,"2021/06/01 7:00:00","2021/07/01 2:00:00",0
|
||||
181,"《妖精の決闘》キリト",,5,-1,0,-1,-1,-1,True,0,0,0,0,0,"2021/06/01 7:00:00","2021/08/01 2:00:00",1
|
||||
182,"《武人の少憩》クライン",,5,-1,0,-1,-1,-1,True,0,0,0,0,0,"2021/07/01 7:00:00","2021/08/01 2:00:00",0
|
||||
183,"《おすわりリトル》ユウキ",,5,-1,0,-1,-1,-1,True,0,0,0,0,0,"2021/07/01 7:00:00","2021/09/01 2:00:00",2
|
||||
184,"《金剛なる体躯》エギル",,5,-1,0,-1,-1,-1,True,0,0,0,0,0,"2021/08/01 7:00:00","2021/09/01 2:00:00",0
|
||||
185,"《胸躍る一歩》レイン",,5,-1,0,-1,-1,-1,True,0,0,0,0,0,"2021/08/01 7:00:00","2021/10/01 2:00:00",3
|
||||
186,"《隠された素顔》アルゴ",,5,-1,0,-1,-1,-1,True,0,0,0,0,0,"2021/09/01 7:00:00","2021/10/01 2:00:00",0
|
||||
187,"《水妖精の導き》アスナ",,5,-1,0,-1,-1,-1,True,0,0,0,0,0,"2021/09/01 7:00:00","2021/11/01 2:00:00",4
|
||||
188,"《赤面プラクティカ》レイン",,5,-1,0,-1,-1,-1,True,0,0,0,0,0,"2021/10/01 7:00:00","2021/11/01 2:00:00",0
|
||||
189,"《同朋の待望》シノン",,5,-1,0,-1,-1,-1,True,0,0,0,0,0,"2021/10/01 7:00:00","2021/12/01 2:00:00",5
|
||||
190,"《あどけない笑み》シリカ",,5,-1,0,-1,-1,-1,True,0,0,0,0,0,"2021/11/01 7:00:00","2021/12/01 2:00:00",0
|
||||
191,"《跳躍の托生》クライン",,5,-1,0,-1,-1,-1,True,0,0,0,0,0,"2021/11/01 7:00:00","2022/01/01 2:00:00",6
|
||||
192,"《休剣の手入れ》ユージオ",,5,-1,0,-1,-1,-1,True,0,0,0,0,0,"2021/12/01 7:00:00","2022/01/01 2:00:00",7
|
||||
193,"《物思い耽る午後》アリス",,5,-1,0,-1,-1,-1,True,0,0,0,0,0,"2021/12/01 7:00:00","2022/01/01 2:00:00",8
|
||||
194,"《想い馳せる窓辺》キリト",,5,-1,0,-1,-1,-1,True,0,0,0,0,0,"2022/01/01 7:00:00","2022/02/01 2:00:00",9
|
||||
195,"《光の巫女》アリス",,5,-1,0,-1,-1,-1,True,0,0,0,0,0,"2022/01/01 7:00:00","2022/02/01 2:00:00",10
|
||||
196,"《悪戯な視線》シノン",,5,-1,0,-1,-1,-1,True,0,0,0,0,0,"2022/01/01 7:00:00","2022/02/01 2:00:00",11
|
||||
197,"《悪戯なオネーサン》アルゴ",,5,-1,0,-1,-1,-1,True,0,0,0,0,0,"2022/02/01 7:00:00","2022/03/01 2:00:00",12
|
||||
198,"《勇猛な巨躯》エギル",,5,-1,0,-1,-1,-1,True,0,0,0,0,0,"2022/02/01 7:00:00","2022/03/01 2:00:00",13
|
||||
199,"《花舞う昼下がり》ユージオ",,5,-1,0,-1,-1,-1,True,0,0,0,0,0,"2022/02/01 7:00:00","2022/03/01 2:00:00",14
|
||||
200,"《愛の誓い》アスナ",,5,-1,0,-1,-1,-1,True,0,0,0,0,0,"2022/03/01 7:00:00","2022/04/01 2:00:00",15
|
||||
201,"《恋するお人形》リズベット",,5,-1,0,-1,-1,-1,True,0,0,0,0,0,"2022/03/01 7:00:00","2022/04/01 2:00:00",16
|
||||
202,"《おやつ・タイム!》シリカ",,5,-1,0,-1,-1,-1,True,0,0,0,0,0,"2022/03/01 7:00:00","2022/04/01 2:00:00",17
|
||||
203,"《信頼の口付け》リズベット",,5,-1,0,-1,-1,-1,True,0,0,0,0,0,"2022/04/01 7:00:00","2022/05/01 2:00:00",18
|
||||
204,"《妖精の決闘》キリト",,5,-1,0,-1,-1,-1,True,0,0,0,0,0,"2022/04/01 7:00:00","2022/05/01 2:00:00",19
|
||||
205,"《妖精の戯れ》リーファ",,5,-1,0,-1,-1,-1,True,0,0,0,0,0,"2022/04/01 7:00:00","2022/05/01 2:00:00",20
|
||||
206,"《宙吊りプラント》シリカ",,5,-1,0,-1,-1,-1,True,0,0,0,0,0,"2022/05/01 7:00:00","2022/06/07 2:00:00",21
|
||||
207,"《南風に吹かれて》リーファ",,5,-1,0,-1,-1,-1,True,0,0,0,0,0,"2022/05/01 7:00:00","2022/06/07 2:00:00",22
|
||||
208,"《穏やかな一時》アスナ",,5,-1,0,-1,-1,-1,True,0,0,0,0,0,"2022/05/01 7:00:00","2022/06/07 2:00:00",23
|
||||
5000,"《神域の双剣使い》キリト",,-1,-1,0,-1,5,-1,False,0,0,0,0,0,"2021/12/14 7:00:00","2022/03/08 2:00:00",99
|
||||
5001,"《流麗なる剣士》アスナ",,-1,-1,0,-1,5,-1,False,0,0,0,0,0,"2021/12/14 7:00:00","2022/03/08 2:00:00",98
|
||||
5002,"《反撃の烽火》リズベット",,-1,-1,0,-1,5,-1,False,0,0,0,0,0,"2021/12/14 7:00:00","2022/03/08 2:00:00",97
|
||||
5003,"《神速の黒き閃光》ユウキ",,-1,-1,0,-1,5,-1,False,0,0,0,0,0,"2022/03/08 7:00:00","2022/06/07 2:00:00",96
|
||||
5004,"《空島繋ぐ架け橋》レイン",,-1,-1,0,-1,5,-1,False,0,0,0,0,0,"2022/03/08 7:00:00","2022/06/07 2:00:00",95
|
||||
5005,"《陽光香る笑み》アルゴ",,-1,-1,0,-1,5,-1,False,0,0,0,0,0,"2022/03/08 7:00:00","2022/06/07 2:00:00",94
|
||||
10000,"《黒の剣士》キリト",,-1,-1,0,-1,3,-1,False,0,0,0,0,0,"2020/12/01 7:00:00","2021/12/14 2:00:00",37
|
||||
10001,"《一条の閃光》アスナ",,-1,-1,0,-1,3,-1,False,0,0,0,0,0,"2020/12/01 7:00:00","2021/12/14 2:00:00",36
|
||||
10002,"《薫風の瞳》リーファ",,-1,-1,0,-1,3,-1,False,0,0,0,0,0,"2020/12/01 7:00:00","2021/12/14 2:00:00",35
|
||||
10003,"《冥界の女神》シノン",,-1,-1,0,-1,3,-1,False,0,0,0,0,0,"2020/12/01 7:00:00","2021/12/14 2:00:00",34
|
||||
10004,"《征野の刀工》リズベット",,-1,-1,0,-1,3,-1,False,0,0,0,0,0,"2020/12/01 7:00:00","2021/12/14 2:00:00",33
|
||||
10005,"《可憐なる竜使い》シリカ",,-1,-1,0,-1,3,-1,False,0,0,0,0,0,"2020/12/01 7:00:00","2021/12/14 2:00:00",32
|
||||
10006,"《真朱の武人》クライン",,-1,-1,0,-1,3,-1,False,0,0,0,0,0,"2020/12/01 7:00:00","2021/12/14 2:00:00",31
|
||||
10007,"《剛腕の威風》エギル",,-1,-1,0,-1,3,-1,False,0,0,0,0,0,"2020/12/01 7:00:00","2021/12/14 2:00:00",30
|
||||
10008,"《絶剣》ユウキ",,-1,-1,0,-1,3,-1,False,0,0,0,0,0,"2020/12/01 7:00:00","2021/12/14 2:00:00",29
|
||||
10009,"《香染の諜報者》アルゴ",,-1,-1,0,-1,3,-1,False,0,0,0,0,0,"2020/12/01 7:00:00","2021/12/14 2:00:00",28
|
||||
10010,"《人界の守り手》アリス",,-1,-1,0,-1,3,-1,False,0,0,0,0,0,"2020/12/01 7:00:00","2021/12/14 2:00:00",27
|
||||
10011,"《精勤す修剣士》ユージオ",,-1,-1,0,-1,3,-1,False,0,0,0,0,0,"2020/12/01 7:00:00","2021/12/14 2:00:00",26
|
||||
10012,"《多刀流の使い手》レイン",,-1,-1,0,-1,3,-1,False,0,0,0,0,0,"2020/12/01 7:00:00","2021/12/14 2:00:00",25
|
||||
10013,"ブラックプレート",,1,-1,0,-1,-1,-1,False,0,0,0,0,0,"2021/01/01 7:00:00","2021/12/14 2:00:00",24
|
||||
10014,"エペ・ド・マルブル",,1,-1,0,-1,-1,-1,False,0,0,0,0,0,"2021/01/01 7:00:00","2021/12/14 2:00:00",23
|
||||
10015,"エリュシデータ",,5,-1,0,-1,-1,-1,False,0,0,0,0,0,"2021/01/01 7:00:00","2021/12/14 2:00:00",22
|
||||
10016,"アロンダイト",,5,-1,0,-1,-1,-1,False,0,0,0,0,0,"2021/01/01 7:00:00","2021/12/14 2:00:00",21
|
||||
10017,"スクレープ",,5,-1,0,-1,-1,-1,False,0,0,0,0,0,"2021/01/01 7:00:00","2021/12/14 2:00:00",20
|
||||
10018,"ムラマサ",,5,-1,0,-1,-1,-1,False,0,0,0,0,0,"2021/01/01 7:00:00","2021/12/14 2:00:00",19
|
||||
10019,"ヴィズィー・ガジェット",,5,-1,0,-1,-1,-1,False,0,0,0,0,0,"2021/01/01 7:00:00","2021/12/14 2:00:00",18
|
||||
10020,"ヴェンデッタ",,5,-1,0,-1,-1,-1,False,0,0,0,0,0,"2021/01/01 7:00:00","2021/12/14 2:00:00",17
|
||||
10021,"ジャイアント・タスク",,5,-1,0,-1,-1,-1,False,0,0,0,0,0,"2021/01/01 7:00:00","2021/12/14 2:00:00",16
|
||||
10022,"フェイルノート",,5,-1,0,-1,-1,-1,False,0,0,0,0,0,"2021/01/01 7:00:00","2021/12/14 2:00:00",15
|
||||
10023,"MEBRカスタム",,5,-1,0,-1,-1,-1,False,0,0,0,0,0,"2021/01/01 7:00:00","2021/12/14 2:00:00",14
|
||||
10024,"スヴェル",,5,-1,0,-1,-1,-1,False,0,0,0,0,0,"2021/01/01 7:00:00","2021/12/14 2:00:00",13
|
||||
10025,"ヒーローコード:斬耐性",,-1,200000,0,-1,-1,-1,False,0,0,0,0,0,"2021/01/01 7:00:00","2021/12/14 2:00:00",12
|
||||
10026,"ヒーローコード:打耐性",,-1,200000,0,-1,-1,-1,False,0,0,0,0,0,"2021/01/01 7:00:00","2021/12/14 2:00:00",11
|
||||
10027,"ヒーローコード:突耐性",,-1,200000,0,-1,-1,-1,False,0,0,0,0,0,"2021/01/01 7:00:00","2021/12/14 2:00:00",10
|
||||
10028,"ヒーローコード:火耐性",,-1,200000,0,-1,-1,-1,False,0,0,0,0,0,"2021/01/01 7:00:00","2021/12/14 2:00:00",9
|
||||
10029,"ヒーローコード:水耐性",,-1,200000,0,-1,-1,-1,False,0,0,0,0,0,"2021/01/01 7:00:00","2021/12/14 2:00:00",8
|
||||
10030,"ヒーローコード:風耐性",,-1,200000,0,-1,-1,-1,False,0,0,0,0,0,"2021/01/01 7:00:00","2021/12/14 2:00:00",7
|
||||
10031,"ヒーローコード:土耐性",,-1,200000,0,-1,-1,-1,False,0,0,0,0,0,"2021/01/01 7:00:00","2021/12/14 2:00:00",6
|
||||
10032,"ヒーローコード:聖耐性",,-1,200000,0,-1,-1,-1,False,0,0,0,0,0,"2021/01/01 7:00:00","2021/12/14 2:00:00",5
|
||||
10033,"ヒーローコード:闇耐性",,-1,200000,0,-1,-1,-1,False,0,0,0,0,0,"2021/01/01 7:00:00","2021/12/14 2:00:00",4
|
||||
10034,"ヒーローコード:毒無効",,-1,200000,0,-1,-1,-1,False,0,0,0,0,0,"2021/01/01 7:00:00","2021/12/14 2:00:00",3
|
||||
10035,"ヒーローコード:混乱無効",,-1,200000,0,-1,-1,-1,False,0,0,0,0,0,"2021/01/01 7:00:00","2021/12/14 2:00:00",2
|
||||
10036,"ヒーローコード:封印無効",,-1,200000,0,-1,-1,-1,False,0,0,0,0,0,"2021/01/01 7:00:00","2021/12/14 2:00:00",1
|
||||
10037,"ヒーローコード:地震無効",,-1,200000,0,-1,-1,-1,False,0,0,0,0,0,"2021/01/01 7:00:00","2021/12/14 2:00:00",0
|
||||
10038,"《黒の剣士》キリト",,-1,-1,0,-1,1,-1,False,0,0,0,0,0,"2021/12/14 7:00:00","2022/06/07 2:00:00",47
|
||||
10039,"《一条の閃光》アスナ",,-1,-1,0,-1,1,-1,False,0,0,0,0,0,"2021/12/14 7:00:00","2022/06/07 2:00:00",46
|
||||
10040,"《薫風の瞳》リーファ",,-1,-1,0,-1,1,-1,False,0,0,0,0,0,"2021/12/14 7:00:00","2022/06/07 2:00:00",45
|
||||
10041,"《冥界の女神》シノン",,-1,-1,0,-1,1,-1,False,0,0,0,0,0,"2021/12/14 7:00:00","2022/06/07 2:00:00",44
|
||||
10042,"《征野の刀工》リズベット",,-1,-1,0,-1,1,-1,False,0,0,0,0,0,"2021/12/14 7:00:00","2022/06/07 2:00:00",43
|
||||
10043,"《可憐なる竜使い》シリカ",,-1,-1,0,-1,1,-1,False,0,0,0,0,0,"2021/12/14 7:00:00","2022/06/07 2:00:00",42
|
||||
10044,"《真朱の武人》クライン",,-1,-1,0,-1,1,-1,False,0,0,0,0,0,"2021/12/14 7:00:00","2022/06/07 2:00:00",41
|
||||
10045,"《剛腕の威風》エギル",,-1,-1,0,-1,1,-1,False,0,0,0,0,0,"2021/12/14 7:00:00","2022/06/07 2:00:00",40
|
||||
10046,"《絶剣》ユウキ",,-1,-1,0,-1,1,-1,False,0,0,0,0,0,"2021/12/14 7:00:00","2022/06/07 2:00:00",39
|
||||
10047,"《香染の諜報者》アルゴ",,-1,-1,0,-1,1,-1,False,0,0,0,0,0,"2021/12/14 7:00:00","2022/06/07 2:00:00",38
|
||||
10048,"《人界の守り手》アリス",,-1,-1,0,-1,1,-1,False,0,0,0,0,0,"2021/12/14 7:00:00","2022/06/07 2:00:00",37
|
||||
10049,"《精勤す修剣士》ユージオ",,-1,-1,0,-1,1,-1,False,0,0,0,0,0,"2021/12/14 7:00:00","2022/06/07 2:00:00",36
|
||||
10050,"《多刀流の使い手》レイン",,-1,-1,0,-1,1,-1,False,0,0,0,0,0,"2021/12/14 7:00:00","2022/06/07 2:00:00",35
|
||||
10051,"エリュシデータ",,-1,-1,0,-1,2,-1,False,0,0,0,0,0,"2021/12/14 7:00:00","2022/06/07 2:00:00",34
|
||||
10052,"アロンダイト",,-1,-1,0,-1,2,-1,False,0,0,0,0,0,"2021/12/14 7:00:00","2022/06/07 2:00:00",33
|
||||
10053,"スクレープ",,-1,-1,0,-1,2,-1,False,0,0,0,0,0,"2021/12/14 7:00:00","2022/06/07 2:00:00",32
|
||||
10054,"ムラマサ",,-1,-1,0,-1,2,-1,False,0,0,0,0,0,"2021/12/14 7:00:00","2022/06/07 2:00:00",31
|
||||
10055,"ウィズィー・ガジェット",,-1,-1,0,-1,2,-1,False,0,0,0,0,0,"2021/12/14 7:00:00","2022/06/07 2:00:00",30
|
||||
10056,"ヴェンデッタ",,-1,-1,0,-1,2,-1,False,0,0,0,0,0,"2021/12/14 7:00:00","2022/06/07 2:00:00",29
|
||||
10057,"ジャイアント・タスク",,-1,-1,0,-1,2,-1,False,0,0,0,0,0,"2021/12/14 7:00:00","2022/06/07 2:00:00",28
|
||||
10058,"フェイルノート",,-1,-1,0,-1,2,-1,False,0,0,0,0,0,"2021/12/14 7:00:00","2022/06/07 2:00:00",27
|
||||
10059,"MEBRマニアック",,-1,-1,0,-1,2,-1,False,0,0,0,0,0,"2021/12/14 7:00:00","2022/06/07 2:00:00",26
|
||||
10060,"スヴェル",,-1,-1,0,-1,2,-1,False,0,0,0,0,0,"2021/12/14 7:00:00","2022/06/07 2:00:00",25
|
||||
10061,"ブラックプレート",,1,-1,0,-1,-1,-1,False,0,0,0,0,0,"2021/12/14 7:00:00","2022/06/07 2:00:00",24
|
||||
10062,"エペ・ド・マルブル",,1,-1,0,-1,-1,-1,False,0,0,0,0,0,"2021/12/14 7:00:00","2022/06/07 2:00:00",23
|
||||
10063,"ヒーローコード:斬耐性",,-1,50000,0,-1,-1,-1,False,0,0,0,0,0,"2021/12/14 7:00:00","2022/06/07 2:00:00",22
|
||||
10064,"ヒーローコード:打耐性",,-1,50000,0,-1,-1,-1,False,0,0,0,0,0,"2021/12/14 7:00:00","2022/06/07 2:00:00",21
|
||||
10065,"ヒーローコード:突耐性",,-1,50000,0,-1,-1,-1,False,0,0,0,0,0,"2021/12/14 7:00:00","2022/06/07 2:00:00",20
|
||||
10066,"ヒーローコード:火耐性",,-1,50000,0,-1,-1,-1,False,0,0,0,0,0,"2021/12/14 7:00:00","2022/06/07 2:00:00",19
|
||||
10067,"ヒーローコード:水耐性",,-1,50000,0,-1,-1,-1,False,0,0,0,0,0,"2021/12/14 7:00:00","2022/06/07 2:00:00",18
|
||||
10068,"ヒーローコード:風耐性",,-1,50000,0,-1,-1,-1,False,0,0,0,0,0,"2021/12/14 7:00:00","2022/06/07 2:00:00",17
|
||||
10069,"ヒーローコード:土耐性",,-1,50000,0,-1,-1,-1,False,0,0,0,0,0,"2021/12/14 7:00:00","2022/06/07 2:00:00",16
|
||||
10070,"ヒーローコード:聖耐性",,-1,50000,0,-1,-1,-1,False,0,0,0,0,0,"2021/12/14 7:00:00","2022/06/07 2:00:00",15
|
||||
10071,"ヒーローコード:闇耐性",,-1,50000,0,-1,-1,-1,False,0,0,0,0,0,"2021/12/14 7:00:00","2022/06/07 2:00:00",14
|
||||
10072,"ヒーローコード:毒無効",,-1,50000,0,-1,-1,-1,False,0,0,0,0,0,"2021/12/14 7:00:00","2022/06/07 2:00:00",13
|
||||
10073,"ヒーローコード:混乱無効",,-1,50000,0,-1,-1,-1,False,0,0,0,0,0,"2021/12/14 7:00:00","2022/06/07 2:00:00",12
|
||||
10074,"ヒーローコード:封印無効",,-1,50000,0,-1,-1,-1,False,0,0,0,0,0,"2021/12/14 7:00:00","2022/06/07 2:00:00",11
|
||||
10075,"ヒーローコード:地震無効",,-1,50000,0,-1,-1,-1,False,0,0,0,0,0,"2021/12/14 7:00:00","2022/06/07 2:00:00",10
|
||||
10076,"ウェポンコード:火属性",,-1,50000,0,-1,-1,-1,False,0,0,0,0,0,"2021/12/14 7:00:00","2022/06/07 2:00:00",9
|
||||
10077,"ウェポンコード:水属性",,-1,50000,0,-1,-1,-1,False,0,0,0,0,0,"2021/12/14 7:00:00","2022/06/07 2:00:00",8
|
||||
10078,"ウェポンコード:風属性",,-1,50000,0,-1,-1,-1,False,0,0,0,0,0,"2021/12/14 7:00:00","2022/06/07 2:00:00",7
|
||||
10079,"ウェポンコード:土属性",,-1,50000,0,-1,-1,-1,False,0,0,0,0,0,"2021/12/14 7:00:00","2022/06/07 2:00:00",6
|
||||
10080,"ウェポンコード:聖属性",,-1,50000,0,-1,-1,-1,False,0,0,0,0,0,"2021/12/14 7:00:00","2022/06/07 2:00:00",5
|
||||
10081,"ウェポンコード:闇属性",,-1,50000,0,-1,-1,-1,False,0,0,0,0,0,"2021/12/14 7:00:00","2022/06/07 2:00:00",4
|
||||
10082,"ウェポンコード:毒",,-1,50000,0,-1,-1,-1,False,0,0,0,0,0,"2021/12/14 7:00:00","2022/06/07 2:00:00",3
|
||||
10083,"ウェポンコード:麻痺",,-1,50000,0,-1,-1,-1,False,0,0,0,0,0,"2021/12/14 7:00:00","2022/06/07 2:00:00",2
|
||||
10084,"ウェポンコード:混乱",,-1,50000,0,-1,-1,-1,False,0,0,0,0,0,"2021/12/14 7:00:00","2022/06/07 2:00:00",1
|
||||
10085,"ウェポンコード:封印",,-1,50000,0,-1,-1,-1,False,0,0,0,0,0,"2021/12/14 7:00:00","2022/06/07 2:00:00",0
|
||||
15000,"《想い馳せる窓辺》キリト",,-1,-1,0,-1,3,-1,False,0,0,0,0,0,"2022/06/07 7:00:00","2030/01/01",64
|
||||
15001,"《妖精の決闘》キリト",,-1,-1,0,-1,3,-1,False,0,0,0,0,0,"2022/06/07 7:00:00","2030/01/01",63
|
||||
15002,"《愛の誓い》アスナ",,-1,-1,0,-1,3,-1,False,0,0,0,0,0,"2022/06/07 7:00:00","2030/01/01",62
|
||||
15003,"《水妖精の導き》アスナ",,-1,-1,0,-1,3,-1,False,0,0,0,0,0,"2022/06/07 7:00:00","2030/01/01",61
|
||||
15004,"《秘めた胸奥》リーファ",,-1,-1,0,-1,3,-1,False,0,0,0,0,0,"2022/06/07 7:00:00","2030/01/01",60
|
||||
15005,"《南風に吹かれて》リーファ",,-1,-1,0,-1,3,-1,False,0,0,0,0,0,"2022/06/07 7:00:00","2030/01/01",59
|
||||
15006,"《疾風迅雷》シノン",,-1,-1,0,-1,3,-1,False,0,0,0,0,0,"2022/06/07 7:00:00","2030/01/01",58
|
||||
15007,"《同朋の待望》シノン",,-1,-1,0,-1,3,-1,False,0,0,0,0,0,"2022/06/07 7:00:00","2030/01/01",57
|
||||
15008,"《信頼の口付け》リズベット",,-1,-1,0,-1,3,-1,False,0,0,0,0,0,"2022/06/07 7:00:00","2030/01/01",56
|
||||
15009,"《恋するお人形》リズベット",,-1,-1,0,-1,3,-1,False,0,0,0,0,0,"2022/06/07 7:00:00","2030/01/01",55
|
||||
15010,"《宙吊りプラント》シリカ",,-1,-1,0,-1,3,-1,False,0,0,0,0,0,"2022/06/07 7:00:00","2030/01/01",54
|
||||
15011,"《あどけない笑み》シリカ",,-1,-1,0,-1,3,-1,False,0,0,0,0,0,"2022/06/07 7:00:00","2030/01/01",53
|
||||
15012,"《武人の少憩》クライン",,-1,-1,0,-1,3,-1,False,0,0,0,0,0,"2022/06/07 7:00:00","2030/01/01",52
|
||||
15013,"《跳躍の托生》クライン",,-1,-1,0,-1,3,-1,False,0,0,0,0,0,"2022/06/07 7:00:00","2030/01/01",51
|
||||
15014,"《金剛なる体躯》エギル",,-1,-1,0,-1,3,-1,False,0,0,0,0,0,"2022/06/07 7:00:00","2030/01/01",50
|
||||
15015,"《勇猛な巨躯》エギル",,-1,-1,0,-1,3,-1,False,0,0,0,0,0,"2022/06/07 7:00:00","2030/01/01",49
|
||||
15016,"《君との内緒事》ユウキ",,-1,-1,0,-1,3,-1,False,0,0,0,0,0,"2022/06/07 7:00:00","2030/01/01",48
|
||||
15017,"《おすわりリトル》ユウキ",,-1,-1,0,-1,3,-1,False,0,0,0,0,0,"2022/06/07 7:00:00","2030/01/01",47
|
||||
15018,"《悪戯なオネーサン》アルゴ",,-1,-1,0,-1,3,-1,False,0,0,0,0,0,"2022/06/07 7:00:00","2030/01/01",46
|
||||
15019,"《隠された素顔》アルゴ",,-1,-1,0,-1,3,-1,False,0,0,0,0,0,"2022/06/07 7:00:00","2030/01/01",45
|
||||
15020,"《固守の決意》アリス",,-1,-1,0,-1,3,-1,False,0,0,0,0,0,"2022/06/07 7:00:00","2030/01/01",44
|
||||
15021,"《光の巫女》アリス",,-1,-1,0,-1,3,-1,False,0,0,0,0,0,"2022/06/07 7:00:00","2030/01/01",43
|
||||
15022,"《奇想の相棒》ユージオ",,-1,-1,0,-1,3,-1,False,0,0,0,0,0,"2022/06/07 7:00:00","2030/01/01",42
|
||||
15023,"《休剣の手入れ》ユージオ",,-1,-1,0,-1,3,-1,False,0,0,0,0,0,"2022/06/07 7:00:00","2030/01/01",41
|
||||
15024,"《赤面プラクティカ》レイン",,-1,-1,0,-1,3,-1,False,0,0,0,0,0,"2022/06/07 7:00:00","2030/01/01",40
|
||||
15025,"《胸躍る一歩》レイン",,-1,-1,0,-1,3,-1,False,0,0,0,0,0,"2022/06/07 7:00:00","2030/01/01",39
|
||||
15026,"《安らぎの我が家》キリト",,-1,-1,0,-1,3,-1,False,0,0,0,0,0,"2022/06/07 7:00:00","2030/01/01",38
|
||||
15027,"《穏やかな一時》アスナ",,-1,-1,0,-1,3,-1,False,0,0,0,0,0,"2022/06/07 7:00:00","2030/01/01",37
|
||||
15028,"《小径の花環》アスナ",,-1,-1,0,-1,3,-1,False,0,0,0,0,0,"2022/06/07 7:00:00","2030/01/01",36
|
||||
15029,"《妖精の戯れ》リーファ",,-1,-1,0,-1,3,-1,False,0,0,0,0,0,"2022/06/07 7:00:00","2030/01/01",35
|
||||
15030,"《寛ぎの我が家》リーファ",,-1,-1,0,-1,3,-1,False,0,0,0,0,0,"2022/06/07 7:00:00","2030/01/01",34
|
||||
15031,"《悪戯な視線》シノン",,-1,-1,0,-1,3,-1,False,0,0,0,0,0,"2022/06/07 7:00:00","2030/01/01",33
|
||||
15032,"《幸せの青い鳥》シノン",,-1,-1,0,-1,3,-1,False,0,0,0,0,0,"2022/06/07 7:00:00","2030/01/01",32
|
||||
15033,"《休日の談笑》リズベット",,-1,-1,0,-1,3,-1,False,0,0,0,0,0,"2022/06/07 7:00:00","2030/01/01",31
|
||||
15034,"《約束の花束》リズベット",,-1,-1,0,-1,3,-1,False,0,0,0,0,0,"2022/06/07 7:00:00","2030/01/01",30
|
||||
15035,"《おやつ・タイム!》シリカ",,-1,-1,0,-1,3,-1,False,0,0,0,0,0,"2022/06/07 7:00:00","2030/01/01",29
|
||||
15036,"《一輪の幼花》シリカ",,-1,-1,0,-1,3,-1,False,0,0,0,0,0,"2022/06/07 7:00:00","2030/01/01",28
|
||||
15037,"《さかさま花世界》ユウキ",,-1,-1,0,-1,3,-1,False,0,0,0,0,0,"2022/06/07 7:00:00","2030/01/01",27
|
||||
15038,"《秘密の甘邸》アルゴ",,-1,-1,0,-1,3,-1,False,0,0,0,0,0,"2022/06/07 7:00:00","2030/01/01",26
|
||||
15039,"《物思い耽る午後》アリス",,-1,-1,0,-1,3,-1,False,0,0,0,0,0,"2022/06/07 7:00:00","2030/01/01",25
|
||||
15040,"《花舞う昼下がり》ユージオ",,-1,-1,0,-1,3,-1,False,0,0,0,0,0,"2022/06/07 7:00:00","2030/01/01",24
|
||||
15041,"《晴天の君》レイン",,-1,-1,0,-1,3,-1,False,0,0,0,0,0,"2022/06/07 7:00:00","2030/01/01",23
|
||||
15042,"《虹架かる団らん》レイン",,-1,-1,0,-1,3,-1,False,0,0,0,0,0,"2022/06/07 7:00:00","2030/01/01",22
|
||||
15043,"エリュシデータ",,-1,-1,0,-1,2,-1,False,0,0,0,0,0,"2022/06/07 7:00:00","2030/01/01",21
|
||||
15044,"アロンダイト",,-1,-1,0,-1,2,-1,False,0,0,0,0,0,"2022/06/07 7:00:00","2030/01/01",20
|
||||
15045,"スクレープ",,-1,-1,0,-1,2,-1,False,0,0,0,0,0,"2022/06/07 7:00:00","2030/01/01",19
|
||||
15046,"ムラマサ",,-1,-1,0,-1,2,-1,False,0,0,0,0,0,"2022/06/07 7:00:00","2030/01/01",18
|
||||
15047,"ウィズィー・ガジェット",,-1,-1,0,-1,2,-1,False,0,0,0,0,0,"2022/06/07 7:00:00","2030/01/01",17
|
||||
15048,"ヴェンデッタ",,-1,-1,0,-1,2,-1,False,0,0,0,0,0,"2022/06/07 7:00:00","2030/01/01",16
|
||||
15049,"ジャイアント・タスク",,-1,-1,0,-1,2,-1,False,0,0,0,0,0,"2022/06/07 7:00:00","2030/01/01",15
|
||||
15050,"フェイルノート",,-1,-1,0,-1,2,-1,False,0,0,0,0,0,"2022/06/07 7:00:00","2030/01/01",14
|
||||
15051,"MEBRマニアック",,-1,-1,0,-1,2,-1,False,0,0,0,0,0,"2022/06/07 7:00:00","2030/01/01",13
|
||||
15052,"スヴェル",,-1,-1,0,-1,2,-1,False,0,0,0,0,0,"2022/06/07 7:00:00","2030/01/01",12
|
||||
15053,"プロパティアペンド",,-1,10000,0,-1,-1,-1,False,0,0,0,0,0,"2022/06/07 7:00:00","2030/01/01",8
|
||||
15054,"コードイレイサー:1",,-1,10000,0,-1,-1,-1,False,0,0,0,0,0,"2022/06/07 7:00:00","2030/01/01",7
|
||||
15055,"コードイレイサー:2",,-1,10000,0,-1,-1,-1,False,0,0,0,0,0,"2022/06/07 7:00:00","2030/01/01",6
|
||||
15056,"コードイレイサー:3",,-1,10000,0,-1,-1,-1,False,0,0,0,0,0,"2022/06/07 7:00:00","2030/01/01",5
|
||||
15057,"コードイレイサー:4",,-1,10000,0,-1,-1,-1,False,0,0,0,0,0,"2022/06/07 7:00:00","2030/01/01",4
|
||||
15058,"EXPメモリ《グラン》",,-1,-1,0,-1,1,-1,False,0,0,0,0,0,"2022/06/07 7:00:00","2030/01/01",11
|
||||
15059,"プラチナ《グラン》",,-1,-1,0,-1,1,-1,False,0,0,0,0,0,"2022/06/07 7:00:00","2030/01/01",10
|
||||
15060,"ヒーローレベルアペンド《1》",,1,-1,0,-1,-1,-1,False,0,0,0,0,0,"2022/06/07 7:00:00","2030/01/01",3
|
||||
15061,"ウェポンレベルアペンド《1》",,1,-1,0,-1,-1,-1,False,0,0,0,0,0,"2022/06/07 7:00:00","2030/01/01",2
|
||||
15062,"アクセサリレベルアペンド《1》",,1,-1,0,-1,-1,-1,False,0,0,0,0,0,"2022/06/07 7:00:00","2030/01/01",1
|
||||
15063,"サンキューギフト",,10,-1,0,-1,-1,-1,False,0,0,0,0,0,"2022/06/07 7:00:00","2030/01/01",0
|
||||
15064,"EXPメモリ",,-1,50000,0,-1,-1,-1,False,0,0,0,0,0,"2022/06/07 7:00:00","2030/01/01",9
|
||||
202901,"《伝説の始まり》キリト",,-1,-1,10006,3,-1,-1,False,0,0,0,0,0,"2020/12/08 7:00:00","2021/01/19 2:00:00",25
|
||||
202902,"《閃光の救世主》アスナ",,-1,-1,10006,3,-1,-1,False,0,0,0,0,0,"2020/12/08 7:00:00","2021/01/19 2:00:00",24
|
||||
202903,"《世界を結ぶ》キリト",,-1,-1,10006,3,-1,-1,False,0,0,0,0,0,"2020/12/08 7:00:00","2021/01/19 2:00:00",23
|
||||
202904,"《永遠を共に》アスナ",,-1,-1,10006,3,-1,-1,False,0,0,0,0,0,"2020/12/08 7:00:00","2021/01/19 2:00:00",22
|
||||
202905,"《見通せぬ未来》アリス",,-1,-1,10006,3,-1,-1,False,0,0,0,0,0,"2020/12/08 7:00:00","2021/01/19 2:00:00",21
|
||||
202906,"《決意を秘めて》イーディス",,-1,-1,10006,3,-1,-1,False,0,0,0,0,0,"2020/12/08 7:00:00","2021/01/19 2:00:00",20
|
||||
202907,"《立ち向かう意志》ロニエ",,-1,-1,10006,3,-1,-1,False,0,0,0,0,0,"2020/12/08 7:00:00","2021/01/19 2:00:00",19
|
||||
202908,"《惑う心》ティーゼ",,-1,-1,10006,3,-1,-1,False,0,0,0,0,0,"2020/12/08 7:00:00","2021/01/19 2:00:00",18
|
||||
202909,"《薄青の精鋭》エントキア",,-1,-1,10006,3,-1,-1,False,0,0,0,0,0,"2020/12/08 7:00:00","2021/01/19 2:00:00",17
|
||||
202910,"《萌ゆる深緑》ネルギウス",,-1,-1,10006,3,-1,-1,False,0,0,0,0,0,"2020/12/08 7:00:00","2021/01/19 2:00:00",16
|
||||
202911,"《華綻ぶはにかみ》シノン",,-1,-1,10006,10,-1,-1,False,0,0,0,0,0,"2020/12/08 7:00:00","2021/01/19 2:00:00",15
|
||||
202912,"《咲き誇る技巧》スズネ",,-1,-1,10006,10,-1,-1,False,0,0,0,0,0,"2020/12/08 7:00:00","2021/01/19 2:00:00",14
|
||||
202913,"EXPチップ《テラ》",,-1,-1,10006,3,-1,-1,False,0,0,0,0,0,"2020/12/08 7:00:00","2021/01/19 2:00:00",12
|
||||
202914,"ゴールド《テラ》",,-1,-1,10006,3,-1,-1,False,0,0,0,0,0,"2020/12/08 7:00:00","2021/01/19 2:00:00",9
|
||||
202915,"EXPチップ《キロ》",,-1,-1,10006,1,-1,-1,False,0,0,0,0,0,"2020/12/08 7:00:00","2021/01/19 2:00:00",13
|
||||
202916,"ゴールド《キロ》",,-1,-1,10006,1,-1,-1,False,0,0,0,0,0,"2020/12/08 7:00:00","2021/01/19 2:00:00",10
|
||||
202917,"EXPメモリ",,-1,-1,10006,5,-1,-1,False,0,0,0,0,0,"2020/12/08 7:00:00","2021/01/19 2:00:00",11
|
||||
202918,"プラチナ",,-1,-1,10006,5,-1,-1,False,0,0,0,0,0,"2020/12/08 7:00:00","2021/01/19 2:00:00",8
|
||||
202919,"プロパティアペンド",,-1,-1,10006,3,-1,-1,False,0,0,0,0,0,"2020/12/08 7:00:00","2021/01/19 2:00:00",7
|
||||
202920,"コードイレイサー:1",,-1,-1,10006,3,-1,-1,False,0,0,0,0,0,"2020/12/08 7:00:00","2021/01/19 2:00:00",6
|
||||
202921,"コードイレイサー:2",,-1,-1,10006,3,-1,-1,False,0,0,0,0,0,"2020/12/08 7:00:00","2021/01/19 2:00:00",5
|
||||
202922,"コードイレイサー:3",,-1,-1,10006,3,-1,-1,False,0,0,0,0,0,"2020/12/08 7:00:00","2021/01/19 2:00:00",4
|
||||
202923,"コードイレイサー:4",,-1,-1,10006,3,-1,-1,False,0,0,0,0,0,"2020/12/08 7:00:00","2021/01/19 2:00:00",3
|
||||
202924,"ヒーローレベルアペンド《1》",,-1,-1,10006,20,-1,-1,False,0,0,0,0,0,"2020/12/08 7:00:00","2021/01/19 2:00:00",2
|
||||
202925,"ウェポンレベルアペンド《1》",,-1,-1,10006,20,-1,-1,False,0,0,0,0,0,"2020/12/08 7:00:00","2021/01/19 2:00:00",1
|
||||
202926,"アクセサリレベルアペンド《1》",,-1,-1,10006,20,-1,-1,False,0,0,0,0,0,"2020/12/08 7:00:00","2021/01/19 2:00:00",0
|
||||
203001,"《男らしく見えて…》シノン",,-1,-1,10007,3,-1,-1,False,0,0,0,0,0,"2021/02/02 7:00:00","2021/03/23 2:00:00",36
|
||||
203002,"《温かな距離》リズベット",,-1,-1,10007,3,-1,-1,False,0,0,0,0,0,"2021/02/02 7:00:00","2021/03/23 2:00:00",35
|
||||
203003,"《目と目を合わせて》メディナ",,-1,-1,10007,3,-1,-1,False,0,0,0,0,0,"2021/02/02 7:00:00","2021/03/23 2:00:00",34
|
||||
203004,"《幼妹の添寝》セルカ",,-1,-1,10007,3,-1,-1,False,0,0,0,0,0,"2021/02/02 7:00:00","2021/03/23 2:00:00",33
|
||||
203005,"《人との接し方》シェータ",,-1,-1,10007,3,-1,-1,False,0,0,0,0,0,"2021/02/02 7:00:00","2021/03/23 2:00:00",32
|
||||
203006,"《夜空に煌く星》キリト",,-1,-1,10007,3,-1,-1,False,0,0,0,0,0,"2021/02/02 7:00:00","2021/03/23 2:00:00",31
|
||||
203007,"《死の天使》サトライザー",,-1,-1,10007,3,-1,-1,False,0,0,0,0,0,"2021/02/02 7:00:00","2021/03/23 2:00:00",30
|
||||
203008,"《女神の笑顔》アスナ",,-1,-1,10007,3,-1,-1,False,0,0,0,0,0,"2021/02/02 7:00:00","2021/03/23 2:00:00",29
|
||||
203009,"《再生の花》シリカ",,-1,-1,10007,3,-1,-1,False,0,0,0,0,0,"2021/02/02 7:00:00","2021/03/23 2:00:00",28
|
||||
203010,"《憩いの場》サチ",,-1,-1,10007,3,-1,-1,False,0,0,0,0,0,"2021/02/02 7:00:00","2021/03/23 2:00:00",27
|
||||
203011,"《まごころショコラティエ》ユウキ",,-1,-1,10007,10,-1,-1,False,0,0,0,0,0,"2021/02/02 7:00:00","2021/03/23 2:00:00",26
|
||||
203012,"《愛受のはにかみ》キリト",,-1,-1,10007,3,-1,-1,False,0,0,0,0,0,"2021/02/02 7:00:00","2021/03/23 2:00:00",25
|
||||
203013,"《甘い贈り物》アスナ",,-1,-1,10007,3,-1,-1,False,0,0,0,0,0,"2021/02/02 7:00:00","2021/03/23 2:00:00",24
|
||||
203014,"《恋慕の微笑》リーファ",,-1,-1,10007,3,-1,-1,False,0,0,0,0,0,"2021/02/02 7:00:00","2021/03/23 2:00:00",23
|
||||
203015,"《静穏の秘め事》シノン",,-1,-1,10007,3,-1,-1,False,0,0,0,0,0,"2021/02/02 7:00:00","2021/03/23 2:00:00",22
|
||||
203016,"《親愛の鍛冶屋》リズベット",,-1,-1,10007,3,-1,-1,False,0,0,0,0,0,"2021/02/02 7:00:00","2021/03/23 2:00:00",21
|
||||
203017,"《純情な恋路》シリカ",,-1,-1,10007,3,-1,-1,False,0,0,0,0,0,"2021/02/02 7:00:00","2021/03/23 2:00:00",20
|
||||
203018,"《歓喜の照笑》クライン",,-1,-1,10007,3,-1,-1,False,0,0,0,0,0,"2021/02/02 7:00:00","2021/03/23 2:00:00",19
|
||||
203019,"《義理堅い甘露》エギル",,-1,-1,10007,3,-1,-1,False,0,0,0,0,0,"2021/02/02 7:00:00","2021/03/23 2:00:00",18
|
||||
203020,"《純粋な愛情》ユウキ",,-1,-1,10007,3,-1,-1,False,0,0,0,0,0,"2021/02/02 7:00:00","2021/03/23 2:00:00",17
|
||||
203021,"《秘密の贈り物》アルゴ",,-1,-1,10007,3,-1,-1,False,0,0,0,0,0,"2021/02/02 7:00:00","2021/03/23 2:00:00",16
|
||||
203022,"《裏腹な恋心》アリス",,-1,-1,10007,3,-1,-1,False,0,0,0,0,0,"2021/02/02 7:00:00","2021/03/23 2:00:00",15
|
||||
203023,"《心届く笑顔》ユージオ",,-1,-1,10007,3,-1,-1,False,0,0,0,0,0,"2021/02/02 7:00:00","2021/03/23 2:00:00",14
|
||||
203024,"《繋ぐ想い》レイン",,-1,-1,10007,3,-1,-1,False,0,0,0,0,0,"2021/02/02 7:00:00","2021/03/23 2:00:00",37
|
||||
203025,"EXPチップ《テラ》",,-1,-1,10007,3,-1,-1,False,0,0,0,0,0,"2021/02/02 7:00:00","2021/03/23 2:00:00",13
|
||||
203026,"ゴールド《テラ》",,-1,-1,10007,3,-1,-1,False,0,0,0,0,0,"2021/02/02 7:00:00","2021/03/23 2:00:00",12
|
||||
203027,"EXPチップ《キロ》",,-1,-1,10007,1,-1,-1,False,0,0,0,0,0,"2021/02/02 7:00:00","2021/03/23 2:00:00",11
|
||||
203028,"ゴールド《キロ》",,-1,-1,10007,1,-1,-1,False,0,0,0,0,0,"2021/02/02 7:00:00","2021/03/23 2:00:00",10
|
||||
203029,"EXPメモリ",,-1,-1,10007,5,-1,-1,False,0,0,0,0,0,"2021/02/02 7:00:00","2021/03/23 2:00:00",9
|
||||
203030,"プラチナ",,-1,-1,10007,5,-1,-1,False,0,0,0,0,0,"2021/02/02 7:00:00","2021/03/23 2:00:00",8
|
||||
203031,"プロパティアペンド",,-1,-1,10007,3,-1,-1,False,0,0,0,0,0,"2021/02/02 7:00:00","2021/03/23 2:00:00",7
|
||||
203032,"コードイレイサー:1",,-1,-1,10007,3,-1,-1,False,0,0,0,0,0,"2021/02/02 7:00:00","2021/03/23 2:00:00",6
|
||||
203033,"コードイレイサー:2",,-1,-1,10007,3,-1,-1,False,0,0,0,0,0,"2021/02/02 7:00:00","2021/03/23 2:00:00",5
|
||||
203034,"コードイレイサー:3",,-1,-1,10007,3,-1,-1,False,0,0,0,0,0,"2021/02/02 7:00:00","2021/03/23 2:00:00",4
|
||||
203035,"コードイレイサー:4",,-1,-1,10007,3,-1,-1,False,0,0,0,0,0,"2021/02/02 7:00:00","2021/03/23 2:00:00",3
|
||||
203036,"ヒーローレベルアペンド《1》",,-1,-1,10007,20,-1,-1,False,0,0,0,0,0,"2021/02/02 7:00:00","2021/03/23 2:00:00",2
|
||||
203037,"ウェポンレベルアペンド《1》",,-1,-1,10007,20,-1,-1,False,0,0,0,0,0,"2021/02/02 7:00:00","2021/03/23 2:00:00",1
|
||||
203038,"アクセサリレベルアペンド《1》",,-1,-1,10007,20,-1,-1,False,0,0,0,0,0,"2021/02/02 7:00:00","2021/03/23 2:00:00",0
|
||||
203201,"《抱きしめ幼愛》シリカ",,-1,-1,10008,3,-1,-1,False,0,0,0,0,0,"2021/03/30 7:00:00","2021/04/27 2:00:00",25
|
||||
203202,"《折り重なる感情》アリス",,-1,-1,10008,3,-1,-1,False,0,0,0,0,0,"2021/03/30 7:00:00","2021/04/27 2:00:00",24
|
||||
203203,"《憧れの先輩と》ロニエ",,-1,-1,10008,3,-1,-1,False,0,0,0,0,0,"2021/03/30 7:00:00","2021/04/27 2:00:00",23
|
||||
203204,"《悪戯な捕食者》フィゼル&リネル",,-1,-1,10008,3,-1,-1,False,0,0,0,0,0,"2021/03/30 7:00:00","2021/04/27 2:00:00",22
|
||||
203205,"《坊やの傍ら》ファナティオ",,-1,-1,10008,3,-1,-1,False,0,0,0,0,0,"2021/03/30 7:00:00","2021/04/27 2:00:00",21
|
||||
203206,"《攻略の最前線へ》アスナ",,-1,-1,10008,3,-1,-1,False,0,0,0,0,0,"2021/03/30 7:00:00","2021/04/27 2:00:00",20
|
||||
203207,"《切り拓く弾道》シノン",,-1,-1,10008,3,-1,-1,False,0,0,0,0,0,"2021/03/30 7:00:00","2021/04/27 2:00:00",19
|
||||
203208,"《浮遊城の救世主》キリト",,-1,-1,10008,3,-1,-1,False,0,0,0,0,0,"2021/03/30 7:00:00","2021/04/27 2:00:00",18
|
||||
203209,"《華麗なる妖精》リーファ",,-1,-1,10008,3,-1,-1,False,0,0,0,0,0,"2021/03/30 7:00:00","2021/04/27 2:00:00",17
|
||||
203210,"《鍛冶屋の恋心》リズベット",,-1,-1,10008,3,-1,-1,False,0,0,0,0,0,"2021/03/30 7:00:00","2021/04/27 2:00:00",16
|
||||
203211,"《異界の女神》アスナ",,-1,-1,10008,10,-1,-1,False,0,0,0,0,0,"2021/03/30 7:00:00","2021/04/27 2:00:00",15
|
||||
203213,"EXPチップ《キロ》",,-1,-1,10008,1,-1,-1,False,0,0,0,0,0,"2021/03/30 7:00:00","2021/04/27 2:00:00",13
|
||||
203214,"EXPチップ《テラ》",,-1,-1,10008,3,-1,-1,False,0,0,0,0,0,"2021/03/30 7:00:00","2021/04/27 2:00:00",12
|
||||
203215,"EXPメモリ",,-1,-1,10008,5,-1,-1,False,0,0,0,0,0,"2021/03/30 7:00:00","2021/04/27 2:00:00",11
|
||||
203216,"ゴールド《キロ》",,-1,-1,10008,1,-1,-1,False,0,0,0,0,0,"2021/03/30 7:00:00","2021/04/27 2:00:00",10
|
||||
203217,"ゴールド《テラ》",,-1,-1,10008,3,-1,-1,False,0,0,0,0,0,"2021/03/30 7:00:00","2021/04/27 2:00:00",9
|
||||
203218,"プラチナ",,-1,-1,10008,5,-1,-1,False,0,0,0,0,0,"2021/03/30 7:00:00","2021/04/27 2:00:00",8
|
||||
203219,"プロパティアペンド",,-1,-1,10008,3,-1,-1,False,0,0,0,0,0,"2021/03/30 7:00:00","2021/04/27 2:00:00",7
|
||||
203220,"コードイレイサー:1",,-1,-1,10008,3,-1,-1,False,0,0,0,0,0,"2021/03/30 7:00:00","2021/04/27 2:00:00",6
|
||||
203221,"コードイレイサー:2",,-1,-1,10008,3,-1,-1,False,0,0,0,0,0,"2021/03/30 7:00:00","2021/04/27 2:00:00",5
|
||||
203222,"コードイレイサー:3",,-1,-1,10008,3,-1,-1,False,0,0,0,0,0,"2021/03/30 7:00:00","2021/04/27 2:00:00",4
|
||||
203223,"コードイレイサー:4",,-1,-1,10008,3,-1,-1,False,0,0,0,0,0,"2021/03/30 7:00:00","2021/04/27 2:00:00",3
|
||||
203224,"ヒーローレベルアペンド《1》",,-1,-1,10008,20,-1,-1,False,0,0,0,0,0,"2021/03/30 7:00:00","2021/04/27 2:00:00",2
|
||||
203225,"ウェポンレベルアペンド《1》",,-1,-1,10008,20,-1,-1,False,0,0,0,0,0,"2021/03/30 7:00:00","2021/04/27 2:00:00",1
|
||||
203226,"アクセサリレベルアペンド《1》",,-1,-1,10008,20,-1,-1,False,0,0,0,0,0,"2021/03/30 7:00:00","2021/04/27 2:00:00",0
|
||||
203301,"《愛情の眼差し》アスナ",,-1,-1,10009,3,-1,-1,False,0,0,0,0,0,"2021/04/27 7:00:00","2021/06/08 2:00:00",25
|
||||
203302,"《親愛なる兄と》リーファ",,-1,-1,10009,3,-1,-1,False,0,0,0,0,0,"2021/04/27 7:00:00","2021/06/08 2:00:00",24
|
||||
203303,"《尊敬する先輩》ティーゼ",,-1,-1,10009,3,-1,-1,False,0,0,0,0,0,"2021/04/27 7:00:00","2021/06/08 2:00:00",23
|
||||
203304,"《流麗なる華》ソルティリーナ",,-1,-1,10009,3,-1,-1,False,0,0,0,0,0,"2021/04/27 7:00:00","2021/06/08 2:00:00",22
|
||||
203305,"《内に潜む想い》カーディナル",,-1,-1,10009,3,-1,-1,False,0,0,0,0,0,"2021/04/27 7:00:00","2021/06/08 2:00:00",21
|
||||
203306,"《寄り添う親友》ユージオ",,-1,-1,10009,3,-1,-1,False,0,0,0,0,0,"2021/04/27 7:00:00","2021/06/08 2:00:00",20
|
||||
203307,"《剣に宿る絆》キリト",,-1,-1,10009,3,-1,-1,False,0,0,0,0,0,"2021/04/27 7:00:00","2021/06/08 2:00:00",19
|
||||
203308,"《ショート・ブレイク》シノン",,-1,-1,10009,3,-1,-1,False,0,0,0,0,0,"2021/04/27 7:00:00","2021/06/08 2:00:00",18
|
||||
203309,"《剣姫の願い》ユウキ",,-1,-1,10009,3,-1,-1,False,0,0,0,0,0,"2021/04/27 7:00:00","2021/06/08 2:00:00",17
|
||||
203310,"《栁絮の守護》コハル",,-1,-1,10009,3,-1,-1,False,0,0,0,0,0,"2021/04/27 7:00:00","2021/06/08 2:00:00",16
|
||||
203312,"《マスターの贈り物》リコ",,-1,-1,10009,10,-1,-1,False,0,0,0,0,0,"2021/04/27 7:00:00","2021/06/08 2:00:00",14
|
||||
203313,"EXPチップ《キロ》",,-1,-1,10009,1,-1,-1,False,0,0,0,0,0,"2021/04/27 7:00:00","2021/06/08 2:00:00",13
|
||||
203314,"EXPチップ《テラ》",,-1,-1,10009,3,-1,-1,False,0,0,0,0,0,"2021/04/27 7:00:00","2021/06/08 2:00:00",12
|
||||
203315,"EXPメモリ",,-1,-1,10009,5,-1,-1,False,0,0,0,0,0,"2021/04/27 7:00:00","2021/06/08 2:00:00",11
|
||||
203316,"ゴールド《キロ》",,-1,-1,10009,1,-1,-1,False,0,0,0,0,0,"2021/04/27 7:00:00","2021/06/08 2:00:00",10
|
||||
203317,"ゴールド《テラ》",,-1,-1,10009,3,-1,-1,False,0,0,0,0,0,"2021/04/27 7:00:00","2021/06/08 2:00:00",9
|
||||
203318,"プラチナ",,-1,-1,10009,5,-1,-1,False,0,0,0,0,0,"2021/04/27 7:00:00","2021/06/08 2:00:00",8
|
||||
203319,"プロパティアペンド",,-1,-1,10009,3,-1,-1,False,0,0,0,0,0,"2021/04/27 7:00:00","2021/06/08 2:00:00",7
|
||||
203320,"コードイレイサー:1",,-1,-1,10009,3,-1,-1,False,0,0,0,0,0,"2021/04/27 7:00:00","2021/06/08 2:00:00",6
|
||||
203321,"コードイレイサー:2",,-1,-1,10009,3,-1,-1,False,0,0,0,0,0,"2021/04/27 7:00:00","2021/06/08 2:00:00",5
|
||||
203322,"コードイレイサー:3",,-1,-1,10009,3,-1,-1,False,0,0,0,0,0,"2021/04/27 7:00:00","2021/06/08 2:00:00",4
|
||||
203323,"コードイレイサー:4",,-1,-1,10009,3,-1,-1,False,0,0,0,0,0,"2021/04/27 7:00:00","2021/06/08 2:00:00",3
|
||||
203324,"ヒーローレベルアペンド《1》",,-1,-1,10009,20,-1,-1,False,0,0,0,0,0,"2021/04/27 7:00:00","2021/06/08 2:00:00",2
|
||||
203325,"ウェポンレベルアペンド《1》",,-1,-1,10009,20,-1,-1,False,0,0,0,0,0,"2021/04/27 7:00:00","2021/06/08 2:00:00",1
|
||||
203326,"アクセサリレベルアペンド《1》",,-1,-1,10009,20,-1,-1,False,0,0,0,0,0,"2021/04/27 7:00:00","2021/06/08 2:00:00",0
|
||||
203501,"《真》インフィニティ・モーメント",,-1,-1,10010,3,-1,-1,False,0,0,0,0,0,"2021/06/08 7:00:00","2021/07/27 2:00:00",31
|
||||
203502,"《裏》ホロウ・フラグメント",,-1,-1,10010,3,-1,-1,False,0,0,0,0,0,"2021/06/08 7:00:00","2021/07/27 2:00:00",30
|
||||
203503,"《絆》ロスト・ソング",,-1,-1,10010,3,-1,-1,False,0,0,0,0,0,"2021/06/08 7:00:00","2021/07/27 2:00:00",29
|
||||
203504,"《心》ホロウ・リアリゼーション",,-1,-1,10010,3,-1,-1,False,0,0,0,0,0,"2021/06/08 7:00:00","2021/07/27 2:00:00",28
|
||||
203505,"《銃》フェイタル・バレット",,-1,-1,10010,3,-1,-1,False,0,0,0,0,0,"2021/06/08 7:00:00","2021/07/27 2:00:00",27
|
||||
203506,"《抱きしめ幼愛》シリカ",,-1,-1,10010,3,-1,-1,False,0,0,0,0,0,"2021/06/08 7:00:00","2021/07/27 2:00:00",26
|
||||
203507,"《折り重なる感情》アリス",,-1,-1,10010,3,-1,-1,False,0,0,0,0,0,"2021/06/08 7:00:00","2021/07/27 2:00:00",25
|
||||
203508,"《憧れの先輩と》ロニエ",,-1,-1,10010,3,-1,-1,False,0,0,0,0,0,"2021/06/08 7:00:00","2021/07/27 2:00:00",24
|
||||
203509,"《悪戯な捕食者》フィゼル&リネル",,-1,-1,10010,3,-1,-1,False,0,0,0,0,0,"2021/06/08 7:00:00","2021/07/27 2:00:00",23
|
||||
203510,"《坊やの傍ら》ファナティオ",,-1,-1,10010,3,-1,-1,False,0,0,0,0,0,"2021/06/08 7:00:00","2021/07/27 2:00:00",22
|
||||
203511,"《攻略の最前線へ》アスナ",,-1,-1,10010,3,-1,-1,False,0,0,0,0,0,"2021/06/08 7:00:00","2021/07/27 2:00:00",21
|
||||
203512,"《切り拓く弾道》シノン",,-1,-1,10010,3,-1,-1,False,0,0,0,0,0,"2021/06/08 7:00:00","2021/07/27 2:00:00",20
|
||||
203513,"《浮遊城の救世主》キリト",,-1,-1,10010,3,-1,-1,False,0,0,0,0,0,"2021/06/08 7:00:00","2021/07/27 2:00:00",19
|
||||
203514,"《華麗なる妖精》リーファ",,-1,-1,10010,3,-1,-1,False,0,0,0,0,0,"2021/06/08 7:00:00","2021/07/27 2:00:00",18
|
||||
203515,"《鍛冶屋の恋心》リズベット",,-1,-1,10010,3,-1,-1,False,0,0,0,0,0,"2021/06/08 7:00:00","2021/07/27 2:00:00",17
|
||||
203516,"《クロス・イメージ》キリト",,-1,-1,10010,10,-1,-1,False,0,0,0,0,0,"2021/06/08 7:00:00","2021/07/27 2:00:00",16
|
||||
203517,"《ふたとせ廻りて》アリス",,-1,-1,10010,10,-1,-1,False,0,0,0,0,0,"2021/06/08 7:00:00","2021/07/27 2:00:00",15
|
||||
203518,"《異界の女神》アスナ",,-1,-1,10010,10,-1,-1,False,0,0,0,0,0,"2021/06/08 7:00:00","2021/07/27 2:00:00",14
|
||||
203519,"EXPチップ《キロ》",,-1,-1,10010,1,-1,-1,False,0,0,0,0,0,"2021/06/08 7:00:00","2021/07/27 2:00:00",13
|
||||
203520,"EXPチップ《テラ》",,-1,-1,10010,3,-1,-1,False,0,0,0,0,0,"2021/06/08 7:00:00","2021/07/27 2:00:00",12
|
||||
203521,"EXPメモリ",,-1,-1,10010,5,-1,-1,False,0,0,0,0,0,"2021/06/08 7:00:00","2021/07/27 2:00:00",11
|
||||
203522,"ゴールド《キロ》",,-1,-1,10010,1,-1,-1,False,0,0,0,0,0,"2021/06/08 7:00:00","2021/07/27 2:00:00",10
|
||||
203523,"ゴールド《テラ》",,-1,-1,10010,3,-1,-1,False,0,0,0,0,0,"2021/06/08 7:00:00","2021/07/27 2:00:00",9
|
||||
203524,"プラチナ",,-1,-1,10010,5,-1,-1,False,0,0,0,0,0,"2021/06/08 7:00:00","2021/07/27 2:00:00",8
|
||||
203525,"プロパティアペンド",,-1,-1,10010,3,-1,-1,False,0,0,0,0,0,"2021/06/08 7:00:00","2021/07/27 2:00:00",7
|
||||
203526,"コードイレイサー:1",,-1,-1,10010,3,-1,-1,False,0,0,0,0,0,"2021/06/08 7:00:00","2021/07/27 2:00:00",6
|
||||
203527,"コードイレイサー:2",,-1,-1,10010,3,-1,-1,False,0,0,0,0,0,"2021/06/08 7:00:00","2021/07/27 2:00:00",5
|
||||
203528,"コードイレイサー:3",,-1,-1,10010,3,-1,-1,False,0,0,0,0,0,"2021/06/08 7:00:00","2021/07/27 2:00:00",4
|
||||
203529,"コードイレイサー:4",,-1,-1,10010,3,-1,-1,False,0,0,0,0,0,"2021/06/08 7:00:00","2021/07/27 2:00:00",3
|
||||
203530,"ヒーローレベルアペンド《1》",,-1,-1,10010,20,-1,-1,False,0,0,0,0,0,"2021/06/08 7:00:00","2021/07/27 2:00:00",2
|
||||
203531,"ウェポンレベルアペンド《1》",,-1,-1,10010,20,-1,-1,False,0,0,0,0,0,"2021/06/08 7:00:00","2021/07/27 2:00:00",1
|
||||
203532,"アクセサリレベルアペンド《1》",,-1,-1,10010,20,-1,-1,False,0,0,0,0,0,"2021/06/08 7:00:00","2021/07/27 2:00:00",0
|
||||
203601,"《スイカ・サースト》アスナ",,-1,-1,10011,3,-1,-1,False,0,0,0,0,0,"2021/07/27 7:00:00","2021/09/28 2:00:00",42
|
||||
203602,"《スイカ・ストライク》リズベット",,-1,-1,10011,3,-1,-1,False,0,0,0,0,0,"2021/07/27 7:00:00","2021/09/28 2:00:00",41
|
||||
203603,"《不可避の魔球》エギル",,-1,-1,10011,3,-1,-1,False,0,0,0,0,0,"2021/07/27 7:00:00","2021/09/28 2:00:00",40
|
||||
203604,"《スイカ・セーバー》アリス",,-1,-1,10011,3,-1,-1,False,0,0,0,0,0,"2021/07/27 7:00:00","2021/09/28 2:00:00",39
|
||||
203605,"《空砲に駆けて》サチ",,-1,-1,10011,3,-1,-1,False,0,0,0,0,0,"2021/07/27 7:00:00","2021/09/28 2:00:00",38
|
||||
203606,"《湖上の大輪》リーファ",,-1,-1,10011,3,-1,-1,False,0,0,0,0,0,"2021/07/27 7:00:00","2021/09/28 2:00:00",37
|
||||
203607,"《海中散策》アスナ",,-1,-1,10011,3,-1,-1,False,0,0,0,0,0,"2021/07/27 7:00:00","2021/09/28 2:00:00",36
|
||||
203608,"《海上遊歩》リズベット",,-1,-1,10011,3,-1,-1,False,0,0,0,0,0,"2021/07/27 7:00:00","2021/09/28 2:00:00",35
|
||||
203609,"《海飛沫ガード》ロニエ",,-1,-1,10011,3,-1,-1,False,0,0,0,0,0,"2021/07/27 7:00:00","2021/09/28 2:00:00",34
|
||||
203610,"《海飛沫アタック》ティーゼ",,-1,-1,10011,3,-1,-1,False,0,0,0,0,0,"2021/07/27 7:00:00","2021/09/28 2:00:00",33
|
||||
203611,"《灼熱!アタックガール》リーファ",,-1,-1,10011,10,-1,-1,False,0,0,0,0,0,"2021/07/27 7:00:00","2021/09/28 2:00:00",32
|
||||
203612,"《私の現実》シノン",,-1,-1,10011,10,-1,-1,False,0,0,0,0,0,"2021/07/27 7:00:00","2021/09/28 2:00:00",31
|
||||
203613,"《マスターの贈り物》リコ",,-1,-1,10011,10,-1,-1,False,0,0,0,0,0,"2021/07/27 7:00:00","2021/09/28 2:00:00",30
|
||||
203614,"《異世界の英雄》キリト",,-1,-1,10011,3,-1,-1,False,0,0,0,0,0,"2021/07/27 7:00:00","2021/09/28 2:00:00",29
|
||||
203615,"《彼岸花の君》メディナ",,-1,-1,10011,3,-1,-1,False,0,0,0,0,0,"2021/07/27 7:00:00","2021/09/28 2:00:00",28
|
||||
203616,"《柔靭なる剣士》ソルティリーナ",,-1,-1,10011,3,-1,-1,False,0,0,0,0,0,"2021/07/27 7:00:00","2021/09/28 2:00:00",27
|
||||
203617,"《図書室の賢者》カーディナル",,-1,-1,10011,3,-1,-1,False,0,0,0,0,0,"2021/07/27 7:00:00","2021/09/28 2:00:00",26
|
||||
203618,"《絶対的支配者》アドミニストレータ",,-1,-1,10011,3,-1,-1,False,0,0,0,0,0,"2021/07/27 7:00:00","2021/09/28 2:00:00",25
|
||||
203619,"《愛の忠臣》チュデルキン",,-1,-1,10011,3,-1,-1,False,0,0,0,0,0,"2021/07/27 7:00:00","2021/09/28 2:00:00",24
|
||||
203620,"《愛情の眼差し》アスナ",,-1,-1,10011,3,-1,-1,False,0,0,0,0,0,"2021/07/27 7:00:00","2021/09/28 2:00:00",23
|
||||
203621,"《親愛なる兄と》リーファ",,-1,-1,10011,3,-1,-1,False,0,0,0,0,0,"2021/07/27 7:00:00","2021/09/28 2:00:00",22
|
||||
203622,"《尊敬する先輩》ティーゼ",,-1,-1,10011,3,-1,-1,False,0,0,0,0,0,"2021/07/27 7:00:00","2021/09/28 2:00:00",21
|
||||
203623,"《流麗なる華》ソルティリーナ",,-1,-1,10011,3,-1,-1,False,0,0,0,0,0,"2021/07/27 7:00:00","2021/09/28 2:00:00",20
|
||||
203624,"《内に潜む想い》カーディナル",,-1,-1,10011,3,-1,-1,False,0,0,0,0,0,"2021/07/27 7:00:00","2021/09/28 2:00:00",19
|
||||
203625,"《寄り添う親友》ユージオ",,-1,-1,10011,3,-1,-1,False,0,0,0,0,0,"2021/07/27 7:00:00","2021/09/28 2:00:00",18
|
||||
203626,"《剣に宿る絆》キリト",,-1,-1,10011,3,-1,-1,False,0,0,0,0,0,"2021/07/27 7:00:00","2021/09/28 2:00:00",17
|
||||
203627,"《ショート・ブレイク》シノン",,-1,-1,10011,3,-1,-1,False,0,0,0,0,0,"2021/07/27 7:00:00","2021/09/28 2:00:00",16
|
||||
203628,"《剣姫の願い》ユウキ",,-1,-1,10011,3,-1,-1,False,0,0,0,0,0,"2021/07/27 7:00:00","2021/09/28 2:00:00",15
|
||||
203629,"《栁絮の守護》コハル",,-1,-1,10011,3,-1,-1,False,0,0,0,0,0,"2021/07/27 7:00:00","2021/09/28 2:00:00",14
|
||||
203630,"EXPチップ《キロ》",,-1,-1,10011,1,-1,-1,False,0,0,0,0,0,"2021/07/27 7:00:00","2021/09/28 2:00:00",13
|
||||
203631,"EXPチップ《テラ》",,-1,-1,10011,3,-1,-1,False,0,0,0,0,0,"2021/07/27 7:00:00","2021/09/28 2:00:00",12
|
||||
203632,"EXPメモリ",,-1,-1,10011,5,-1,-1,False,0,0,0,0,0,"2021/07/27 7:00:00","2021/09/28 2:00:00",11
|
||||
203633,"ゴールド《キロ》",,-1,-1,10011,1,-1,-1,False,0,0,0,0,0,"2021/07/27 7:00:00","2021/09/28 2:00:00",10
|
||||
203634,"ゴールド《テラ》",,-1,-1,10011,3,-1,-1,False,0,0,0,0,0,"2021/07/27 7:00:00","2021/09/28 2:00:00",9
|
||||
203635,"プラチナ",,-1,-1,10011,5,-1,-1,False,0,0,0,0,0,"2021/07/27 7:00:00","2021/09/28 2:00:00",8
|
||||
203636,"プロパティアペンド",,-1,-1,10011,3,-1,-1,False,0,0,0,0,0,"2021/07/27 7:00:00","2021/09/28 2:00:00",7
|
||||
203637,"コードイレイサー:1",,-1,-1,10011,3,-1,-1,False,0,0,0,0,0,"2021/07/27 7:00:00","2021/09/28 2:00:00",6
|
||||
203638,"コードイレイサー:2",,-1,-1,10011,3,-1,-1,False,0,0,0,0,0,"2021/07/27 7:00:00","2021/09/28 2:00:00",5
|
||||
203639,"コードイレイサー:3",,-1,-1,10011,3,-1,-1,False,0,0,0,0,0,"2021/07/27 7:00:00","2021/09/28 2:00:00",4
|
||||
203640,"コードイレイサー:4",,-1,-1,10011,3,-1,-1,False,0,0,0,0,0,"2021/07/27 7:00:00","2021/09/28 2:00:00",3
|
||||
203641,"ヒーローレベルアペンド《1》",,-1,-1,10011,20,-1,-1,False,0,0,0,0,0,"2021/07/27 7:00:00","2021/09/28 2:00:00",2
|
||||
203642,"ウェポンレベルアペンド《1》",,-1,-1,10011,20,-1,-1,False,0,0,0,0,0,"2021/07/27 7:00:00","2021/09/28 2:00:00",1
|
||||
203643,"アクセサリレベルアペンド《1》",,-1,-1,10011,20,-1,-1,False,0,0,0,0,0,"2021/07/27 7:00:00","2021/09/28 2:00:00",0
|
||||
203701,"BET:アスナ",,-1,-1,10012,1,-1,-1,False,0,0,0,0,0,"2021/09/28 7:00:00","2021/11/02 2:00:00",33
|
||||
203702,"BET:リーファ",,-1,-1,10012,1,-1,-1,False,0,0,0,0,0,"2021/09/28 7:00:00","2021/11/02 2:00:00",32
|
||||
203703,"BET:シノン",,-1,-1,10012,1,-1,-1,False,0,0,0,0,0,"2021/09/28 7:00:00","2021/11/02 2:00:00",31
|
||||
203704,"BET:シリカ",,-1,-1,10012,1,-1,-1,False,0,0,0,0,0,"2021/09/28 7:00:00","2021/11/02 2:00:00",30
|
||||
203705,"BET:アリス",,-1,-1,10012,1,-1,-1,False,0,0,0,0,0,"2021/09/28 7:00:00","2021/11/02 2:00:00",29
|
||||
203706,"《心弛の寝息》リーファ",,-1,-1,10012,3,-1,-1,False,0,0,0,0,0,"2021/09/28 7:00:00","2021/11/02 2:00:00",28
|
||||
203707,"《安堵の就眠》シノン",,-1,-1,10012,3,-1,-1,False,0,0,0,0,0,"2021/09/28 7:00:00","2021/11/02 2:00:00",27
|
||||
203708,"《ご馳走ドリーム》セブン",,-1,-1,10012,3,-1,-1,False,0,0,0,0,0,"2021/09/28 7:00:00","2021/11/02 2:00:00",26
|
||||
203709,"《胸の旋律》レイン",,-1,-1,10012,3,-1,-1,False,0,0,0,0,0,"2021/09/28 7:00:00","2021/11/02 2:00:00",25
|
||||
203710,"《和みの理趣》プレミア",,-1,-1,10012,3,-1,-1,False,0,0,0,0,0,"2021/09/28 7:00:00","2021/11/02 2:00:00",24
|
||||
203711,"《慥かな腕枕》ティア",,-1,-1,10012,3,-1,-1,False,0,0,0,0,0,"2021/09/28 7:00:00","2021/11/02 2:00:00",23
|
||||
203712,"《兎の歓待》リズベット&シリカ",,-1,-1,10012,3,-1,-1,False,0,0,0,0,0,"2021/09/28 7:00:00","2021/11/02 2:00:00",22
|
||||
203713,"《博打ごっこ》ストレア",,-1,-1,10012,3,-1,-1,False,0,0,0,0,0,"2021/09/28 7:00:00","2021/11/02 2:00:00",21
|
||||
203714,"《0と1の狭間で》シリカ",,-1,-1,10012,10,-1,-1,False,0,0,0,0,0,"2021/09/28 7:00:00","2021/11/02 2:00:00",20
|
||||
203715,"《愛する人へ》アスナ",,-1,-1,10012,3,-1,-1,False,0,0,0,0,0,"2021/09/28 7:00:00","2021/11/02 2:00:00",19
|
||||
203716,"《大切な家族》リーファ",,-1,-1,10012,3,-1,-1,False,0,0,0,0,0,"2021/09/28 7:00:00","2021/11/02 2:00:00",18
|
||||
203717,"《強さを知って》シノン",,-1,-1,10012,3,-1,-1,False,0,0,0,0,0,"2021/09/28 7:00:00","2021/11/02 2:00:00",17
|
||||
203718,"《この温度を君に》リズベット",,-1,-1,10012,3,-1,-1,False,0,0,0,0,0,"2021/09/28 7:00:00","2021/11/02 2:00:00",16
|
||||
203719,"《今度はあたしが》シリカ",,-1,-1,10012,3,-1,-1,False,0,0,0,0,0,"2021/09/28 7:00:00","2021/11/02 2:00:00",15
|
||||
203720,"《傍らの相棒》ユージオ",,-1,-1,10012,3,-1,-1,False,0,0,0,0,0,"2021/09/28 7:00:00","2021/11/02 2:00:00",14
|
||||
203721,"EXPチップ《キロ》",,-1,-1,10012,1,-1,-1,False,0,0,0,0,0,"2021/09/28 7:00:00","2021/11/02 2:00:00",13
|
||||
203722,"EXPチップ《テラ》",,-1,-1,10012,3,-1,-1,False,0,0,0,0,0,"2021/09/28 7:00:00","2021/11/02 2:00:00",12
|
||||
203723,"EXPメモリ",,-1,-1,10012,5,-1,-1,False,0,0,0,0,0,"2021/09/28 7:00:00","2021/11/02 2:00:00",11
|
||||
203724,"ゴールド《キロ》",,-1,-1,10012,1,-1,-1,False,0,0,0,0,0,"2021/09/28 7:00:00","2021/11/02 2:00:00",10
|
||||
203725,"ゴールド《テラ》",,-1,-1,10012,3,-1,-1,False,0,0,0,0,0,"2021/09/28 7:00:00","2021/11/02 2:00:00",9
|
||||
203726,"プラチナ",,-1,-1,10012,5,-1,-1,False,0,0,0,0,0,"2021/09/28 7:00:00","2021/11/02 2:00:00",8
|
||||
203727,"プロパティアペンド",,-1,-1,10012,3,-1,-1,False,0,0,0,0,0,"2021/09/28 7:00:00","2021/11/02 2:00:00",7
|
||||
203728,"コードイレイサー:1",,-1,-1,10012,3,-1,-1,False,0,0,0,0,0,"2021/09/28 7:00:00","2021/11/02 2:00:00",6
|
||||
203729,"コードイレイサー:2",,-1,-1,10012,3,-1,-1,False,0,0,0,0,0,"2021/09/28 7:00:00","2021/11/02 2:00:00",5
|
||||
203730,"コードイレイサー:3",,-1,-1,10012,3,-1,-1,False,0,0,0,0,0,"2021/09/28 7:00:00","2021/11/02 2:00:00",4
|
||||
203731,"コードイレイサー:4",,-1,-1,10012,3,-1,-1,False,0,0,0,0,0,"2021/09/28 7:00:00","2021/11/02 2:00:00",3
|
||||
203732,"ヒーローレベルアペンド《1》",,-1,-1,10012,20,-1,-1,False,0,0,0,0,0,"2021/09/28 7:00:00","2021/11/02 2:00:00",2
|
||||
203733,"ウェポンレベルアペンド《1》",,-1,-1,10012,20,-1,-1,False,0,0,0,0,0,"2021/09/28 7:00:00","2021/11/02 2:00:00",1
|
||||
203734,"アクセサリレベルアペンド《1》",,-1,-1,10012,20,-1,-1,False,0,0,0,0,0,"2021/09/28 7:00:00","2021/11/02 2:00:00",0
|
||||
203801,"《深まる夜》アスナ",,-1,-1,10013,3,-1,-1,False,0,0,0,0,0,"2021/11/02 7:00:00","2021/12/14 2:00:00",28
|
||||
203802,"《消えゆく憂心》リズベット",,-1,-1,10013,3,-1,-1,False,0,0,0,0,0,"2021/11/02 7:00:00","2021/12/14 2:00:00",27
|
||||
203803,"《抱擁の慕情》シリカ",,-1,-1,10013,3,-1,-1,False,0,0,0,0,0,"2021/11/02 7:00:00","2021/12/14 2:00:00",26
|
||||
203804,"《たまゆらの逢瀬》アルゴ",,-1,-1,10013,3,-1,-1,False,0,0,0,0,0,"2021/11/02 7:00:00","2021/12/14 2:00:00",25
|
||||
203805,"《溶融の招》キズメル",,-1,-1,10013,3,-1,-1,False,0,0,0,0,0,"2021/11/02 7:00:00","2021/12/14 2:00:00",24
|
||||
203806,"《泡沫の安臥》サチ",,-1,-1,10013,3,-1,-1,False,0,0,0,0,0,"2021/11/02 7:00:00","2021/12/14 2:00:00",23
|
||||
203807,"《打ち明ける閨》エイジ",,-1,-1,10013,3,-1,-1,False,0,0,0,0,0,"2021/11/02 7:00:00","2021/12/14 2:00:00",22
|
||||
203808,"《浮きたつ真意》ユナ",,-1,-1,10013,3,-1,-1,False,0,0,0,0,0,"2021/11/02 7:00:00","2021/12/14 2:00:00",21
|
||||
203809,"《変わらないもの》リズベット",,-1,-1,10013,10,-1,-1,False,0,0,0,0,0,"2021/11/02 7:00:00","2021/12/14 2:00:00",20
|
||||
203810,"《整合騎士長》ベルクーリ",,-1,-1,10013,3,-1,-1,False,0,0,0,0,0,"2021/11/02 7:00:00","2021/12/14 2:00:00",19
|
||||
203811,"《天穿の光》ファナティオ",,-1,-1,10013,3,-1,-1,False,0,0,0,0,0,"2021/11/02 7:00:00","2021/12/14 2:00:00",18
|
||||
203812,"《焔の弓騎士》デュソルバート",,-1,-1,10013,3,-1,-1,False,0,0,0,0,0,"2021/11/02 7:00:00","2021/12/14 2:00:00",17
|
||||
203813,"《師への敬愛》エルドリエ",,-1,-1,10013,3,-1,-1,False,0,0,0,0,0,"2021/11/02 7:00:00","2021/12/14 2:00:00",16
|
||||
203814,"《黒百合の一閃》シェータ",,-1,-1,10013,3,-1,-1,False,0,0,0,0,0,"2021/11/02 7:00:00","2021/12/14 2:00:00",15
|
||||
203815,"《失くした片翼》レンリ",,-1,-1,10013,3,-1,-1,False,0,0,0,0,0,"2021/11/02 7:00:00","2021/12/14 2:00:00",14
|
||||
203816,"EXPチップ《キロ》",,-1,-1,10013,1,-1,-1,False,0,0,0,0,0,"2021/11/02 7:00:00","2021/12/14 2:00:00",13
|
||||
203817,"EXPチップ《テラ》",,-1,-1,10013,3,-1,-1,False,0,0,0,0,0,"2021/11/02 7:00:00","2021/12/14 2:00:00",12
|
||||
203818,"EXPメモリ",,-1,-1,10013,5,-1,-1,False,0,0,0,0,0,"2021/11/02 7:00:00","2021/12/14 2:00:00",11
|
||||
203819,"ゴールド《キロ》",,-1,-1,10013,1,-1,-1,False,0,0,0,0,0,"2021/11/02 7:00:00","2021/12/14 2:00:00",10
|
||||
203820,"ゴールド《テラ》",,-1,-1,10013,3,-1,-1,False,0,0,0,0,0,"2021/11/02 7:00:00","2021/12/14 2:00:00",9
|
||||
203821,"プラチナ",,-1,-1,10013,5,-1,-1,False,0,0,0,0,0,"2021/11/02 7:00:00","2021/12/14 2:00:00",8
|
||||
203822,"プロパティアペンド",,-1,-1,10013,3,-1,-1,False,0,0,0,0,0,"2021/11/02 7:00:00","2021/12/14 2:00:00",7
|
||||
203823,"コードイレイサー:1",,-1,-1,10013,3,-1,-1,False,0,0,0,0,0,"2021/11/02 7:00:00","2021/12/14 2:00:00",6
|
||||
203824,"コードイレイサー:2",,-1,-1,10013,3,-1,-1,False,0,0,0,0,0,"2021/11/02 7:00:00","2021/12/14 2:00:00",5
|
||||
203825,"コードイレイサー:3",,-1,-1,10013,3,-1,-1,False,0,0,0,0,0,"2021/11/02 7:00:00","2021/12/14 2:00:00",4
|
||||
203826,"コードイレイサー:4",,-1,-1,10013,3,-1,-1,False,0,0,0,0,0,"2021/11/02 7:00:00","2021/12/14 2:00:00",3
|
||||
203827,"ヒーローレベルアペンド《1》",,-1,-1,10013,20,-1,-1,False,0,0,0,0,0,"2021/11/02 7:00:00","2021/12/14 2:00:00",2
|
||||
203828,"ウェポンレベルアペンド《1》",,-1,-1,10013,20,-1,-1,False,0,0,0,0,0,"2021/11/02 7:00:00","2021/12/14 2:00:00",1
|
||||
203829,"アクセサリレベルアペンド《1》",,-1,-1,10013,20,-1,-1,False,0,0,0,0,0,"2021/11/02 7:00:00","2021/12/14 2:00:00",0
|
||||
204001,"《聖夜は白く》アスナ",,-1,-1,10014,3,-1,-1,False,0,0,0,0,0,"2021/12/14 7:00:00","2022/01/25 2:00:00",51
|
||||
204002,"《想望の家路》リーファ",,-1,-1,10014,3,-1,-1,False,0,0,0,0,0,"2021/12/14 7:00:00","2022/01/25 2:00:00",50
|
||||
204003,"《宿り木の下で》シノン",,-1,-1,10014,3,-1,-1,False,0,0,0,0,0,"2021/12/14 7:00:00","2022/01/25 2:00:00",49
|
||||
204004,"《星に願いを》アリス",,-1,-1,10014,3,-1,-1,False,0,0,0,0,0,"2021/12/14 7:00:00","2022/01/25 2:00:00",48
|
||||
204005,"《駈走る雪空》ユージオ",,-1,-1,10014,3,-1,-1,False,0,0,0,0,0,"2021/12/14 7:00:00","2022/01/25 2:00:00",47
|
||||
204006,"《共に歩む時》キリト",,-1,-1,10014,3,-1,-1,False,0,0,0,0,0,"2021/12/14 7:00:00","2022/01/25 2:00:00",46
|
||||
204007,"《立ち上がる時》アスナ",,-1,-1,10014,3,-1,-1,False,0,0,0,0,0,"2021/12/14 7:00:00","2022/01/25 2:00:00",45
|
||||
204008,"《心繋がる時》リーファ",,-1,-1,10014,3,-1,-1,False,0,0,0,0,0,"2021/12/14 7:00:00","2022/01/25 2:00:00",44
|
||||
204009,"《意志示す時》シノン",,-1,-1,10014,3,-1,-1,False,0,0,0,0,0,"2021/12/14 7:00:00","2022/01/25 2:00:00",43
|
||||
204010,"《背中押す時》ユウキ",,-1,-1,10014,3,-1,-1,False,0,0,0,0,0,"2021/12/14 7:00:00","2022/01/25 2:00:00",42
|
||||
204011,"《蒼穹を駆ける英傑》ユウキ",,-1,-1,10014,3,-1,-1,False,0,0,0,0,0,"2021/12/14 7:00:00","2022/01/25 2:00:00",41
|
||||
204012,"《万天に通ずる鼠》アルゴ",,-1,-1,10014,3,-1,-1,False,0,0,0,0,0,"2021/12/14 7:00:00","2022/01/25 2:00:00",40
|
||||
204013,"《心通う邂逅》アリス",,-1,-1,10014,3,-1,-1,False,0,0,0,0,0,"2021/12/14 7:00:00","2022/01/25 2:00:00",39
|
||||
204014,"《かの剣技の継承者》ユージオ",,-1,-1,10014,3,-1,-1,False,0,0,0,0,0,"2021/12/14 7:00:00","2022/01/25 2:00:00",38
|
||||
204015,"《華綻ぶはにかみ》シノン",,-1,-1,10014,3,-1,-1,False,0,0,0,0,0,"2021/12/14 7:00:00","2022/01/25 2:00:00",37
|
||||
204016,"《サンタさん大作戦!》ユウキ",,-1,-1,10014,10,-1,-1,False,0,0,0,0,0,"2021/12/14 7:00:00","2022/01/25 2:00:00",36
|
||||
204017,"《誇り高き騎士》アリス",,-1,-1,10014,3,-1,-1,False,0,0,0,0,0,"2021/12/14 7:00:00","2022/01/25 2:00:00",35
|
||||
204018,"《姉想う祈り》セルカ",,-1,-1,10014,3,-1,-1,False,0,0,0,0,0,"2021/12/14 7:00:00","2022/01/25 2:00:00",34
|
||||
204019,"《正しき道》ロニエ",,-1,-1,10014,3,-1,-1,False,0,0,0,0,0,"2021/12/14 7:00:00","2022/01/25 2:00:00",33
|
||||
204020,"《受け継ぐ希望》ティーゼ",,-1,-1,10014,3,-1,-1,False,0,0,0,0,0,"2021/12/14 7:00:00","2022/01/25 2:00:00",32
|
||||
204021,"《無邪気な毒牙》フィゼル",,-1,-1,10014,3,-1,-1,False,0,0,0,0,0,"2021/12/14 7:00:00","2022/01/25 2:00:00",31
|
||||
204022,"《穏やかな殺戮》リネル",,-1,-1,10014,3,-1,-1,False,0,0,0,0,0,"2021/12/14 7:00:00","2022/01/25 2:00:00",30
|
||||
204023,"《咲き誇る技巧》スズネ",,-1,-1,10014,3,-1,-1,False,0,0,0,0,0,"2021/12/14 7:00:00","2022/01/25 2:00:00",29
|
||||
204024,"《攻略者憩う店》テリア",,-1,-1,10014,3,-1,-1,False,0,0,0,0,0,"2021/12/14 7:00:00","2022/01/25 2:00:00",28
|
||||
204025,"《無邪気な愛》ストレア",,-1,-1,10014,3,-1,-1,False,0,0,0,0,0,"2021/12/14 7:00:00","2022/01/25 2:00:00",27
|
||||
204026,"《宝物はここに》フィリア",,-1,-1,10014,3,-1,-1,False,0,0,0,0,0,"2021/12/14 7:00:00","2022/01/25 2:00:00",26
|
||||
204027,"《七色の夢》レイン",,-1,-1,10014,3,-1,-1,False,0,0,0,0,0,"2021/12/14 7:00:00","2022/01/25 2:00:00",25
|
||||
204028,"《真の繋がり》セブン",,-1,-1,10014,3,-1,-1,False,0,0,0,0,0,"2021/12/14 7:00:00","2022/01/25 2:00:00",24
|
||||
204029,"《芽吹きの時》プレミア",,-1,-1,10014,3,-1,-1,False,0,0,0,0,0,"2021/12/14 7:00:00","2022/01/25 2:00:00",23
|
||||
204030,"《私の証明》クレハ",,-1,-1,10014,3,-1,-1,False,0,0,0,0,0,"2021/12/14 7:00:00","2022/01/25 2:00:00",22
|
||||
204031,"《無冠の女王》ツェリスカ",,-1,-1,10014,3,-1,-1,False,0,0,0,0,0,"2021/12/14 7:00:00","2022/01/25 2:00:00",21
|
||||
204032,"《特別な存在》イツキ",,-1,-1,10014,3,-1,-1,False,0,0,0,0,0,"2021/12/14 7:00:00","2022/01/25 2:00:00",20
|
||||
204033,"《踏み出す一歩》コハル",,-1,-1,10014,3,-1,-1,False,0,0,0,0,0,"2021/12/14 7:00:00","2022/01/25 2:00:00",19
|
||||
204034,"EXPチップ《キロ》",,-1,-1,10014,1,-1,-1,False,0,0,0,0,0,"2021/12/14 7:00:00","2022/01/25 2:00:00",18
|
||||
204035,"EXPチップ《テラ》",,-1,-1,10014,3,-1,-1,False,0,0,0,0,0,"2021/12/14 7:00:00","2022/01/25 2:00:00",17
|
||||
204036,"EXPメモリ",,-1,-1,10014,5,-1,-1,False,0,0,0,0,0,"2021/12/14 7:00:00","2022/01/25 2:00:00",16
|
||||
204037,"ゴールド《キロ》",,-1,-1,10014,1,-1,-1,False,0,0,0,0,0,"2021/12/14 7:00:00","2022/01/25 2:00:00",15
|
||||
204038,"ゴールド《テラ》",,-1,-1,10014,3,-1,-1,False,0,0,0,0,0,"2021/12/14 7:00:00","2022/01/25 2:00:00",14
|
||||
204039,"プラチナ",,-1,-1,10014,5,-1,-1,False,0,0,0,0,0,"2021/12/14 7:00:00","2022/01/25 2:00:00",13
|
||||
204040,"プロパティアペンド",,-1,-1,10014,3,-1,-1,False,0,0,0,0,0,"2021/12/14 7:00:00","2022/01/25 2:00:00",12
|
||||
204041,"コードイレイサー:1",,-1,-1,10014,3,-1,-1,False,0,0,0,0,0,"2021/12/14 7:00:00","2022/01/25 2:00:00",11
|
||||
204042,"コードイレイサー:2",,-1,-1,10014,3,-1,-1,False,0,0,0,0,0,"2021/12/14 7:00:00","2022/01/25 2:00:00",10
|
||||
204043,"コードイレイサー:3",,-1,-1,10014,3,-1,-1,False,0,0,0,0,0,"2021/12/14 7:00:00","2022/01/25 2:00:00",9
|
||||
204044,"コードイレイサー:4",,-1,-1,10014,3,-1,-1,False,0,0,0,0,0,"2021/12/14 7:00:00","2022/01/25 2:00:00",8
|
||||
204045,"ウェポンコード:ボスキラー",,-1,-1,10014,10,-1,-1,False,0,0,0,0,0,"2021/12/14 7:00:00","2022/01/25 2:00:00",7
|
||||
204046,"ウェポンコード:Mobキラー",,-1,-1,10014,10,-1,-1,False,0,0,0,0,0,"2021/12/14 7:00:00","2022/01/25 2:00:00",6
|
||||
204047,"ウェポンコード:HP最大時強化",,-1,-1,10014,10,-1,-1,False,0,0,0,0,0,"2021/12/14 7:00:00","2022/01/25 2:00:00",5
|
||||
204048,"ウェポンコード:HP低下時強化",,-1,-1,10014,10,-1,-1,False,0,0,0,0,0,"2021/12/14 7:00:00","2022/01/25 2:00:00",4
|
||||
204049,"ウェポンコード:弱点攻撃強化",,-1,-1,10014,10,-1,-1,False,0,0,0,0,0,"2021/12/14 7:00:00","2022/01/25 2:00:00",3
|
||||
204050,"ヒーローレベルアペンド《1》",,-1,-1,10014,20,-1,-1,False,0,0,0,0,0,"2021/12/14 7:00:00","2022/01/25 2:00:00",2
|
||||
204051,"ウェポンレベルアペンド《1》",,-1,-1,10014,20,-1,-1,False,0,0,0,0,0,"2021/12/14 7:00:00","2022/01/25 2:00:00",1
|
||||
204052,"アクセサリレベルアペンド《1》",,-1,-1,10014,20,-1,-1,False,0,0,0,0,0,"2021/12/14 7:00:00","2022/01/25 2:00:00",0
|
||||
204101,"《寧静の眠り》ユウキ",,-1,-1,10015,3,-1,-1,False,0,0,0,0,0,"2022/01/25 7:00:00","2022/03/08 2:00:00",46
|
||||
204102,"《高まる体温》アリス",,-1,-1,10015,3,-1,-1,False,0,0,0,0,0,"2022/01/25 7:00:00","2022/03/08 2:00:00",45
|
||||
204103,"《分け合う心》ユージオ",,-1,-1,10015,3,-1,-1,False,0,0,0,0,0,"2022/01/25 7:00:00","2022/03/08 2:00:00",44
|
||||
204104,"《癒しの懐抱》ストレア",,-1,-1,10015,3,-1,-1,False,0,0,0,0,0,"2022/01/25 7:00:00","2022/03/08 2:00:00",43
|
||||
204105,"《臥房の什宝》フィリア",,-1,-1,10015,3,-1,-1,False,0,0,0,0,0,"2022/01/25 7:00:00","2022/03/08 2:00:00",42
|
||||
204106,"《夢の浮橋》イツキ",,-1,-1,10015,3,-1,-1,False,0,0,0,0,0,"2022/01/25 7:00:00","2022/03/08 2:00:00",41
|
||||
204107,"《浮雲の温度》ツェリスカ",,-1,-1,10015,3,-1,-1,False,0,0,0,0,0,"2022/01/25 7:00:00","2022/03/08 2:00:00",40
|
||||
204108,"《色葉散らず》クレハ",,-1,-1,10015,3,-1,-1,False,0,0,0,0,0,"2022/01/25 7:00:00","2022/03/08 2:00:00",39
|
||||
204109,"《いとしのショコラティエ》アスナ",,-1,-1,10015,10,-1,-1,False,0,0,0,0,0,"2022/01/25 7:00:00","2022/03/08 2:00:00",38
|
||||
204110,"《まごころショコラティエ》ユウキ",,-1,-1,10015,3,-1,-1,False,0,0,0,0,0,"2022/01/25 7:00:00","2022/03/08 2:00:00",37
|
||||
204111,"《伝説の始まり》キリト",,-1,-1,10015,3,-1,-1,False,0,0,0,0,0,"2022/01/25 7:00:00","2022/03/08 2:00:00",36
|
||||
204112,"《閃光の救世主》アスナ",,-1,-1,10015,3,-1,-1,False,0,0,0,0,0,"2022/01/25 7:00:00","2022/03/08 2:00:00",35
|
||||
204113,"《愛受のはにかみ》キリト",,-1,-1,10015,3,-1,-1,False,0,0,0,0,0,"2022/01/25 7:00:00","2022/03/08 2:00:00",34
|
||||
204114,"《甘い贈り物》アスナ",,-1,-1,10015,3,-1,-1,False,0,0,0,0,0,"2022/01/25 7:00:00","2022/03/08 2:00:00",33
|
||||
204115,"《恋慕の微笑》リーファ",,-1,-1,10015,3,-1,-1,False,0,0,0,0,0,"2022/01/25 7:00:00","2022/03/08 2:00:00",32
|
||||
204116,"《静穏の秘め事》シノン",,-1,-1,10015,3,-1,-1,False,0,0,0,0,0,"2022/01/25 7:00:00","2022/03/08 2:00:00",31
|
||||
204117,"《親愛の鍛冶屋》リズベット",,-1,-1,10015,3,-1,-1,False,0,0,0,0,0,"2022/01/25 7:00:00","2022/03/08 2:00:00",30
|
||||
204118,"《純情な恋路》シリカ",,-1,-1,10015,3,-1,-1,False,0,0,0,0,0,"2022/01/25 7:00:00","2022/03/08 2:00:00",29
|
||||
204119,"《歓喜の照笑》クライン",,-1,-1,10015,3,-1,-1,False,0,0,0,0,0,"2022/01/25 7:00:00","2022/03/08 2:00:00",28
|
||||
204120,"《義理堅い甘露》エギル",,-1,-1,10015,3,-1,-1,False,0,0,0,0,0,"2022/01/25 7:00:00","2022/03/08 2:00:00",27
|
||||
204121,"《純粋な愛情》ユウキ",,-1,-1,10015,3,-1,-1,False,0,0,0,0,0,"2022/01/25 7:00:00","2022/03/08 2:00:00",26
|
||||
204122,"《秘密の贈り物》アルゴ",,-1,-1,10015,3,-1,-1,False,0,0,0,0,0,"2022/01/25 7:00:00","2022/03/08 2:00:00",25
|
||||
204123,"《裏腹な恋心》アリス",,-1,-1,10015,3,-1,-1,False,0,0,0,0,0,"2022/01/25 7:00:00","2022/03/08 2:00:00",24
|
||||
204124,"《心届く笑顔》ユージオ",,-1,-1,10015,3,-1,-1,False,0,0,0,0,0,"2022/01/25 7:00:00","2022/03/08 2:00:00",23
|
||||
204125,"《繋ぐ想い》レイン",,-1,-1,10015,3,-1,-1,False,0,0,0,0,0,"2022/01/25 7:00:00","2022/03/08 2:00:00",22
|
||||
204126,"《世界を結ぶ》キリト",,-1,-1,10015,3,-1,-1,False,0,0,0,0,0,"2022/01/25 7:00:00","2022/03/08 2:00:00",21
|
||||
204127,"《永遠を共に》アスナ",,-1,-1,10015,3,-1,-1,False,0,0,0,0,0,"2022/01/25 7:00:00","2022/03/08 2:00:00",20
|
||||
204128,"《見通せぬ未来》アリス",,-1,-1,10015,3,-1,-1,False,0,0,0,0,0,"2022/01/25 7:00:00","2022/03/08 2:00:00",19
|
||||
204129,"《決意を秘めて》イーディス",,-1,-1,10015,3,-1,-1,False,0,0,0,0,0,"2022/01/25 7:00:00","2022/03/08 2:00:00",18
|
||||
204130,"《立ち向かう意志》ロニエ",,-1,-1,10015,3,-1,-1,False,0,0,0,0,0,"2022/01/25 7:00:00","2022/03/08 2:00:00",17
|
||||
204131,"《惑う心》ティーゼ",,-1,-1,10015,3,-1,-1,False,0,0,0,0,0,"2022/01/25 7:00:00","2022/03/08 2:00:00",16
|
||||
204132,"《薄青の精鋭》エントキア",,-1,-1,10015,3,-1,-1,False,0,0,0,0,0,"2022/01/25 7:00:00","2022/03/08 2:00:00",15
|
||||
204133,"《萌ゆる深緑》ネルギウス",,-1,-1,10015,3,-1,-1,False,0,0,0,0,0,"2022/01/25 7:00:00","2022/03/08 2:00:00",14
|
||||
204134,"EXPチップ《キロ》",,-1,-1,10015,1,-1,-1,False,0,0,0,0,0,"2022/01/25 7:00:00","2022/03/08 2:00:00",13
|
||||
204135,"EXPチップ《テラ》",,-1,-1,10015,3,-1,-1,False,0,0,0,0,0,"2022/01/25 7:00:00","2022/03/08 2:00:00",12
|
||||
204136,"EXPメモリ",,-1,-1,10015,5,-1,-1,False,0,0,0,0,0,"2022/01/25 7:00:00","2022/03/08 2:00:00",11
|
||||
204137,"ゴールド《キロ》",,-1,-1,10015,1,-1,-1,False,0,0,0,0,0,"2022/01/25 7:00:00","2022/03/08 2:00:00",10
|
||||
204138,"ゴールド《テラ》",,-1,-1,10015,3,-1,-1,False,0,0,0,0,0,"2022/01/25 7:00:00","2022/03/08 2:00:00",9
|
||||
204139,"プラチナ",,-1,-1,10015,5,-1,-1,False,0,0,0,0,0,"2022/01/25 7:00:00","2022/03/08 2:00:00",8
|
||||
204140,"プロパティアペンド",,-1,-1,10015,3,-1,-1,False,0,0,0,0,0,"2022/01/25 7:00:00","2022/03/08 2:00:00",7
|
||||
204141,"コードイレイサー:1",,-1,-1,10015,3,-1,-1,False,0,0,0,0,0,"2022/01/25 7:00:00","2022/03/08 2:00:00",6
|
||||
204142,"コードイレイサー:2",,-1,-1,10015,3,-1,-1,False,0,0,0,0,0,"2022/01/25 7:00:00","2022/03/08 2:00:00",5
|
||||
204143,"コードイレイサー:3",,-1,-1,10015,3,-1,-1,False,0,0,0,0,0,"2022/01/25 7:00:00","2022/03/08 2:00:00",4
|
||||
204144,"コードイレイサー:4",,-1,-1,10015,3,-1,-1,False,0,0,0,0,0,"2022/01/25 7:00:00","2022/03/08 2:00:00",3
|
||||
204145,"ヒーローレベルアペンド《1》",,-1,-1,10015,20,-1,-1,False,0,0,0,0,0,"2022/01/25 7:00:00","2022/03/08 2:00:00",2
|
||||
204146,"ウェポンレベルアペンド《1》",,-1,-1,10015,20,-1,-1,False,0,0,0,0,0,"2022/01/25 7:00:00","2022/03/08 2:00:00",1
|
||||
204147,"アクセサリレベルアペンド《1》",,-1,-1,10015,20,-1,-1,False,0,0,0,0,0,"2022/01/25 7:00:00","2022/03/08 2:00:00",0
|
||||
204201,"《受け止める軌跡》キリト",,-1,-1,10016,3,-1,-1,False,0,0,0,0,0,"2022/03/08 7:00:00","2022/04/26 2:00:00",38
|
||||
204202,"《見つめる軌跡》アスナ",,-1,-1,10016,3,-1,-1,False,0,0,0,0,0,"2022/03/08 7:00:00","2022/04/26 2:00:00",37
|
||||
204203,"《信じきる軌跡》リーファ",,-1,-1,10016,3,-1,-1,False,0,0,0,0,0,"2022/03/08 7:00:00","2022/04/26 2:00:00",36
|
||||
204204,"《向き合う軌跡》シノン",,-1,-1,10016,3,-1,-1,False,0,0,0,0,0,"2022/03/08 7:00:00","2022/04/26 2:00:00",35
|
||||
204205,"《確かめる軌跡》ユウキ",,-1,-1,10016,3,-1,-1,False,0,0,0,0,0,"2022/03/08 7:00:00","2022/04/26 2:00:00",34
|
||||
204206,"《思い返す軌跡》アリス",,-1,-1,10016,3,-1,-1,False,0,0,0,0,0,"2022/03/08 7:00:00","2022/04/26 2:00:00",33
|
||||
204207,"《安眠の廉》リズベット",,-1,-1,10016,3,-1,-1,False,0,0,0,0,0,"2022/03/08 7:00:00","2022/04/26 2:00:00",32
|
||||
204208,"《守られる吉夢》シリカ",,-1,-1,10016,3,-1,-1,False,0,0,0,0,0,"2022/03/08 7:00:00","2022/04/26 2:00:00",31
|
||||
204209,"《開かれる愁眉》ストレア",,-1,-1,10016,3,-1,-1,False,0,0,0,0,0,"2022/03/08 7:00:00","2022/04/26 2:00:00",30
|
||||
204210,"《安らぎの香》フィリア",,-1,-1,10016,3,-1,-1,False,0,0,0,0,0,"2022/03/08 7:00:00","2022/04/26 2:00:00",29
|
||||
204211,"《聞き澄ます愛吟》セブン",,-1,-1,10016,3,-1,-1,False,0,0,0,0,0,"2022/03/08 7:00:00","2022/04/26 2:00:00",28
|
||||
204212,"《傾慕の子守歌》レイン",,-1,-1,10016,3,-1,-1,False,0,0,0,0,0,"2022/03/08 7:00:00","2022/04/26 2:00:00",27
|
||||
204213,"《受ける薫陶》プレミア",,-1,-1,10016,3,-1,-1,False,0,0,0,0,0,"2022/03/08 7:00:00","2022/04/26 2:00:00",26
|
||||
204214,"《異界の女神》アスナ",,-1,-1,10016,3,-1,-1,False,0,0,0,0,0,"2022/03/08 7:00:00","2022/04/26 2:00:00",25
|
||||
204215,"《マスターの贈り物》リコ",,-1,-1,10016,3,-1,-1,False,0,0,0,0,0,"2022/03/08 7:00:00","2022/04/26 2:00:00",24
|
||||
204216,"《男らしく見えて…》シノン",,-1,-1,10016,3,-1,-1,False,0,0,0,0,0,"2022/03/08 7:00:00","2022/04/26 2:00:00",23
|
||||
204217,"《温かな距離》リズベット",,-1,-1,10016,3,-1,-1,False,0,0,0,0,0,"2022/03/08 7:00:00","2022/04/26 2:00:00",22
|
||||
204218,"《目と目を合わせて》メディナ",,-1,-1,10016,3,-1,-1,False,0,0,0,0,0,"2022/03/08 7:00:00","2022/04/26 2:00:00",21
|
||||
204219,"《幼妹の添寝》セルカ",,-1,-1,10016,3,-1,-1,False,0,0,0,0,0,"2022/03/08 7:00:00","2022/04/26 2:00:00",20
|
||||
204220,"《人との接し方》シェータ",,-1,-1,10016,3,-1,-1,False,0,0,0,0,0,"2022/03/08 7:00:00","2022/04/26 2:00:00",19
|
||||
204221,"《夜空に煌く星》キリト",,-1,-1,10016,3,-1,-1,False,0,0,0,0,0,"2022/03/08 7:00:00","2022/04/26 2:00:00",18
|
||||
204222,"《死の天使》サトライザー",,-1,-1,10016,3,-1,-1,False,0,0,0,0,0,"2022/03/08 7:00:00","2022/04/26 2:00:00",17
|
||||
204223,"《女神の笑顔》アスナ",,-1,-1,10016,3,-1,-1,False,0,0,0,0,0,"2022/03/08 7:00:00","2022/04/26 2:00:00",16
|
||||
204224,"《再生の花》シリカ",,-1,-1,10016,3,-1,-1,False,0,0,0,0,0,"2022/03/08 7:00:00","2022/04/26 2:00:00",15
|
||||
204225,"《憩いの場》サチ",,-1,-1,10016,3,-1,-1,False,0,0,0,0,0,"2022/03/08 7:00:00","2022/04/26 2:00:00",14
|
||||
204226,"EXPチップ《キロ》",,-1,-1,10016,1,-1,-1,False,0,0,0,0,0,"2022/03/08 7:00:00","2022/04/26 2:00:00",13
|
||||
204227,"EXPチップ《テラ》",,-1,-1,10016,3,-1,-1,False,0,0,0,0,0,"2022/03/08 7:00:00","2022/04/26 2:00:00",12
|
||||
204228,"EXPメモリ",,-1,-1,10016,5,-1,-1,False,0,0,0,0,0,"2022/03/08 7:00:00","2022/04/26 2:00:00",11
|
||||
204229,"ゴールド《キロ》",,-1,-1,10016,1,-1,-1,False,0,0,0,0,0,"2022/03/08 7:00:00","2022/04/26 2:00:00",10
|
||||
204230,"ゴールド《テラ》",,-1,-1,10016,3,-1,-1,False,0,0,0,0,0,"2022/03/08 7:00:00","2022/04/26 2:00:00",9
|
||||
204231,"プラチナ",,-1,-1,10016,5,-1,-1,False,0,0,0,0,0,"2022/03/08 7:00:00","2022/04/26 2:00:00",8
|
||||
204232,"プロパティアペンド",,-1,-1,10016,3,-1,-1,False,0,0,0,0,0,"2022/03/08 7:00:00","2022/04/26 2:00:00",7
|
||||
204233,"コードイレイサー:1",,-1,-1,10016,3,-1,-1,False,0,0,0,0,0,"2022/03/08 7:00:00","2022/04/26 2:00:00",6
|
||||
204234,"コードイレイサー:2",,-1,-1,10016,3,-1,-1,False,0,0,0,0,0,"2022/03/08 7:00:00","2022/04/26 2:00:00",5
|
||||
204235,"コードイレイサー:3",,-1,-1,10016,3,-1,-1,False,0,0,0,0,0,"2022/03/08 7:00:00","2022/04/26 2:00:00",4
|
||||
204236,"コードイレイサー:4",,-1,-1,10016,3,-1,-1,False,0,0,0,0,0,"2022/03/08 7:00:00","2022/04/26 2:00:00",3
|
||||
204237,"ヒーローレベルアペンド《1》",,-1,-1,10016,20,-1,-1,False,0,0,0,0,0,"2022/03/08 7:00:00","2022/04/26 2:00:00",2
|
||||
204238,"ウェポンレベルアペンド《1》",,-1,-1,10016,20,-1,-1,False,0,0,0,0,0,"2022/03/08 7:00:00","2022/04/26 2:00:00",1
|
||||
204239,"アクセサリレベルアペンド《1》",,-1,-1,10016,20,-1,-1,False,0,0,0,0,0,"2022/03/08 7:00:00","2022/04/26 2:00:00",0
|
||||
204301,"《目配せのしとね》アスナ",,-1,-1,10017,3,-1,-1,False,0,0,0,0,0,"2022/04/26 7:00:00","2022/06/07 2:00:00",32
|
||||
204302,"《不壊の縁故》リーファ",,-1,-1,10017,3,-1,-1,False,0,0,0,0,0,"2022/04/26 7:00:00","2022/06/07 2:00:00",31
|
||||
204303,"《解きほぐす内心》シノン",,-1,-1,10017,3,-1,-1,False,0,0,0,0,0,"2022/04/26 7:00:00","2022/06/07 2:00:00",30
|
||||
204304,"《東雲の契り》ユウキ",,-1,-1,10017,3,-1,-1,False,0,0,0,0,0,"2022/04/26 7:00:00","2022/06/07 2:00:00",29
|
||||
204305,"《密かな処方》アルゴ",,-1,-1,10017,3,-1,-1,False,0,0,0,0,0,"2022/04/26 7:00:00","2022/06/07 2:00:00",28
|
||||
204306,"《二人寝は繁く》アリス",,-1,-1,10017,3,-1,-1,False,0,0,0,0,0,"2022/04/26 7:00:00","2022/06/07 2:00:00",27
|
||||
204307,"《追懐の夜語り》ユージオ",,-1,-1,10017,3,-1,-1,False,0,0,0,0,0,"2022/04/26 7:00:00","2022/06/07 2:00:00",26
|
||||
204308,"《クロス・イメージ》キリト",,-1,-1,10017,3,-1,-1,False,0,0,0,0,0,"2022/04/26 7:00:00","2022/06/07 2:00:00",25
|
||||
204309,"《私の現実》シノン",,-1,-1,10017,10,-1,-1,False,0,0,0,0,0,"2022/04/26 7:00:00","2022/06/07 2:00:00",24
|
||||
204310,"《抱きしめ幼愛》シリカ",,-1,-1,10017,3,-1,-1,False,0,0,0,0,0,"2022/04/26 7:00:00","2022/06/07 2:00:00",23
|
||||
204311,"《折り重なる感情》アリス",,-1,-1,10017,3,-1,-1,False,0,0,0,0,0,"2022/04/26 7:00:00","2022/06/07 2:00:00",22
|
||||
204312,"《憧れの先輩と》ロニエ",,-1,-1,10017,3,-1,-1,False,0,0,0,0,0,"2022/04/26 7:00:00","2022/06/07 2:00:00",21
|
||||
204313,"《悪戯な捕食者》フィゼル&リネル",,-1,-1,10017,3,-1,-1,False,0,0,0,0,0,"2022/04/26 7:00:00","2022/06/07 2:00:00",20
|
||||
204314,"《坊やの傍ら》ファナティオ",,-1,-1,10017,3,-1,-1,False,0,0,0,0,0,"2022/04/26 7:00:00","2022/06/07 2:00:00",19
|
||||
204315,"《攻略の最前線へ》アスナ",,-1,-1,10017,3,-1,-1,False,0,0,0,0,0,"2022/04/26 7:00:00","2022/06/07 2:00:00",18
|
||||
204316,"《切り拓く弾道》シノン",,-1,-1,10017,3,-1,-1,False,0,0,0,0,0,"2022/04/26 7:00:00","2022/06/07 2:00:00",17
|
||||
204317,"《浮遊城の救世主》キリト",,-1,-1,10017,3,-1,-1,False,0,0,0,0,0,"2022/04/26 7:00:00","2022/06/07 2:00:00",16
|
||||
204318,"《華麗なる妖精》リーファ",,-1,-1,10017,3,-1,-1,False,0,0,0,0,0,"2022/04/26 7:00:00","2022/06/07 2:00:00",15
|
||||
204319,"《鍛冶屋の恋心》リズベット",,-1,-1,10017,3,-1,-1,False,0,0,0,0,0,"2022/04/26 7:00:00","2022/06/07 2:00:00",14
|
||||
204320,"EXPチップ《キロ》",,-1,-1,10017,1,-1,-1,False,0,0,0,0,0,"2022/04/26 7:00:00","2022/06/07 2:00:00",13
|
||||
204321,"EXPチップ《テラ》",,-1,-1,10017,3,-1,-1,False,0,0,0,0,0,"2022/04/26 7:00:00","2022/06/07 2:00:00",12
|
||||
204322,"EXPメモリ",,-1,-1,10017,5,-1,-1,False,0,0,0,0,0,"2022/04/26 7:00:00","2022/06/07 2:00:00",11
|
||||
204323,"ゴールド《キロ》",,-1,-1,10017,1,-1,-1,False,0,0,0,0,0,"2022/04/26 7:00:00","2022/06/07 2:00:00",10
|
||||
204324,"ゴールド《テラ》",,-1,-1,10017,3,-1,-1,False,0,0,0,0,0,"2022/04/26 7:00:00","2022/06/07 2:00:00",9
|
||||
204325,"プラチナ",,-1,-1,10017,5,-1,-1,False,0,0,0,0,0,"2022/04/26 7:00:00","2022/06/07 2:00:00",8
|
||||
204326,"プロパティアペンド",,-1,-1,10017,3,-1,-1,False,0,0,0,0,0,"2022/04/26 7:00:00","2022/06/07 2:00:00",7
|
||||
204327,"コードイレイサー:1",,-1,-1,10017,3,-1,-1,False,0,0,0,0,0,"2022/04/26 7:00:00","2022/06/07 2:00:00",6
|
||||
204328,"コードイレイサー:2",,-1,-1,10017,3,-1,-1,False,0,0,0,0,0,"2022/04/26 7:00:00","2022/06/07 2:00:00",5
|
||||
204329,"コードイレイサー:3",,-1,-1,10017,3,-1,-1,False,0,0,0,0,0,"2022/04/26 7:00:00","2022/06/07 2:00:00",4
|
||||
204330,"コードイレイサー:4",,-1,-1,10017,3,-1,-1,False,0,0,0,0,0,"2022/04/26 7:00:00","2022/06/07 2:00:00",3
|
||||
204331,"ヒーローレベルアペンド《1》",,-1,-1,10017,20,-1,-1,False,0,0,0,0,0,"2022/04/26 7:00:00","2022/06/07 2:00:00",2
|
||||
204332,"ウェポンレベルアペンド《1》",,-1,-1,10017,20,-1,-1,False,0,0,0,0,0,"2022/04/26 7:00:00","2022/06/07 2:00:00",1
|
||||
204333,"アクセサリレベルアペンド《1》",,-1,-1,10017,20,-1,-1,False,0,0,0,0,0,"2022/04/26 7:00:00","2022/06/07 2:00:00",0
|
|
@ -1 +1,2 @@
|
||||
from titles.sao.handlers.base import *
|
||||
from .base import *
|
||||
from .helpers import *
|
@ -1,16 +1,29 @@
|
||||
import struct
|
||||
from datetime import datetime
|
||||
from typing import List
|
||||
from construct import *
|
||||
import sys
|
||||
from .helpers import *
|
||||
import csv
|
||||
from csv import *
|
||||
|
||||
class SaoBaseRequest:
|
||||
class SaoRequestHeader:
|
||||
def __init__(self, data: bytes) -> None:
|
||||
self.cmd = struct.unpack_from("!H", bytes)[0]
|
||||
# TODO: The rest of the request header
|
||||
collection = struct.unpack_from("!HHIIII16sI", data)
|
||||
self.cmd: int = collection[0]
|
||||
self.err_status = collection[1]
|
||||
self.error_type = collection[2]
|
||||
self.vendor_id: int = collection[3]
|
||||
self.game_id: int = collection[4]
|
||||
self.version_id: int = collection[5]
|
||||
self.hash: str = collection[6]
|
||||
self.data_len: str = collection[7]
|
||||
|
||||
class SaoBaseResponse:
|
||||
class SaoBaseRequest:
|
||||
def __init__(self, header: SaoRequestHeader, data: bytes) -> None:
|
||||
self.header = header
|
||||
# TODO: Length check
|
||||
|
||||
class SaoResponseHeader:
|
||||
def __init__(self, cmd_id: int) -> None:
|
||||
self.cmd = cmd_id
|
||||
self.err_status = 0
|
||||
@ -23,6 +36,13 @@ class SaoBaseResponse:
|
||||
def make(self) -> bytes:
|
||||
return struct.pack("!HHIIIII", self.cmd, self.err_status, self.error_type, self.vendor_id, self.game_id, self.version_id, self.length)
|
||||
|
||||
class SaoBaseResponse:
|
||||
def __init__(self, cmd_id: int) -> None:
|
||||
self.header = SaoResponseHeader(cmd_id)
|
||||
|
||||
def make(self) -> bytes:
|
||||
return self.header.make()
|
||||
|
||||
class SaoNoopResponse(SaoBaseResponse):
|
||||
def __init__(self, cmd: int) -> None:
|
||||
super().__init__(cmd)
|
||||
@ -33,8 +53,8 @@ class SaoNoopResponse(SaoBaseResponse):
|
||||
return super().make() + struct.pack("!bI", self.result, 0)
|
||||
|
||||
class SaoGetMaintRequest(SaoBaseRequest):
|
||||
def __init__(self, data: bytes) -> None:
|
||||
super().__init__(data)
|
||||
def __init__(self, header: SaoRequestHeader, data: bytes) -> None:
|
||||
super().__init__(header, data)
|
||||
# TODO: The rest of the mait info request
|
||||
|
||||
class SaoGetMaintResponse(SaoBaseResponse):
|
||||
@ -68,8 +88,8 @@ class SaoGetMaintResponse(SaoBaseResponse):
|
||||
return super().make() + resp_data
|
||||
|
||||
class SaoCommonAcCabinetBootNotificationRequest(SaoBaseRequest):
|
||||
def __init__(self, data: bytes) -> None:
|
||||
super().__init__(data)
|
||||
def __init__(self, header: SaoRequestHeader, data: bytes) -> None:
|
||||
super().__init__(header, data)
|
||||
|
||||
class SaoCommonAcCabinetBootNotificationResponse(SaoBaseResponse):
|
||||
def __init__(self, cmd) -> None:
|
||||
@ -90,8 +110,8 @@ class SaoCommonAcCabinetBootNotificationResponse(SaoBaseResponse):
|
||||
return super().make() + resp_data
|
||||
|
||||
class SaoMasterDataVersionCheckRequest(SaoBaseRequest):
|
||||
def __init__(self, data: bytes) -> None:
|
||||
super().__init__(data)
|
||||
def __init__(self, header: SaoRequestHeader, data: bytes) -> None:
|
||||
super().__init__(header, data)
|
||||
|
||||
class SaoMasterDataVersionCheckResponse(SaoBaseResponse):
|
||||
def __init__(self, cmd) -> None:
|
||||
@ -118,8 +138,8 @@ class SaoMasterDataVersionCheckResponse(SaoBaseResponse):
|
||||
return super().make() + resp_data
|
||||
|
||||
class SaoCommonGetAppVersionsRequest(SaoBaseRequest):
|
||||
def __init__(self, data: bytes) -> None:
|
||||
super().__init__(data)
|
||||
def __init__(self, header: SaoRequestHeader, data: bytes) -> None:
|
||||
super().__init__(header, data)
|
||||
|
||||
class SaoCommonGetAppVersionsRequest(SaoBaseResponse):
|
||||
def __init__(self, cmd) -> None:
|
||||
@ -154,8 +174,8 @@ class SaoCommonGetAppVersionsRequest(SaoBaseResponse):
|
||||
return super().make() + resp_data
|
||||
|
||||
class SaoCommonPayingPlayStartRequest(SaoBaseRequest):
|
||||
def __init__(self, data: bytes) -> None:
|
||||
super().__init__(data)
|
||||
def __init__(self, header: SaoRequestHeader, data: bytes) -> None:
|
||||
super().__init__(header, data)
|
||||
|
||||
class SaoCommonPayingPlayStartRequest(SaoBaseResponse):
|
||||
def __init__(self, cmd) -> None:
|
||||
@ -181,8 +201,30 @@ class SaoCommonPayingPlayStartRequest(SaoBaseResponse):
|
||||
return super().make() + resp_data
|
||||
|
||||
class SaoGetAuthCardDataRequest(SaoBaseRequest):
|
||||
def __init__(self, data: bytes) -> None:
|
||||
super().__init__(data)
|
||||
def __init__(self, header: SaoRequestHeader, data: bytes) -> None:
|
||||
super().__init__(header, data)
|
||||
off = 0
|
||||
self.cabinet_type = decode_byte(data, off)
|
||||
off += BYTE_OFF
|
||||
|
||||
self.auth_type = decode_byte(data, off)
|
||||
off += BYTE_OFF
|
||||
|
||||
store_id = decode_str(data, off)
|
||||
self.store_id = store_id[0]
|
||||
off += store_id[1]
|
||||
|
||||
serial_no = decode_str(data, off)
|
||||
self.serial_no = serial_no[0]
|
||||
off += serial_no[1]
|
||||
|
||||
access_code = decode_str(data, off)
|
||||
self.access_code = access_code[0]
|
||||
off += access_code[1]
|
||||
|
||||
chip_id = decode_str(data, off)
|
||||
self.chip_id = chip_id[0]
|
||||
off += chip_id[1]
|
||||
|
||||
class SaoGetAuthCardDataResponse(SaoBaseResponse): #GssSite.dll / GssSiteSystem / GameConnectProt / public class get_auth_card_data_R : GameConnect.GssProtocolBase
|
||||
def __init__(self, cmd, profile_data) -> None:
|
||||
@ -225,8 +267,8 @@ class SaoGetAuthCardDataResponse(SaoBaseResponse): #GssSite.dll / GssSiteSystem
|
||||
return super().make() + resp_data
|
||||
|
||||
class SaoHomeCheckAcLoginBonusRequest(SaoBaseRequest):
|
||||
def __init__(self, data: bytes) -> None:
|
||||
super().__init__(data)
|
||||
def __init__(self, header: SaoRequestHeader, data: bytes) -> None:
|
||||
super().__init__(header, data)
|
||||
|
||||
class SaoHomeCheckAcLoginBonusResponse(SaoBaseResponse):
|
||||
def __init__(self, cmd) -> None:
|
||||
@ -262,8 +304,8 @@ class SaoHomeCheckAcLoginBonusResponse(SaoBaseResponse):
|
||||
return super().make() + resp_data
|
||||
|
||||
class SaoGetQuestSceneMultiPlayPhotonServerRequest(SaoBaseRequest):
|
||||
def __init__(self, data: bytes) -> None:
|
||||
super().__init__(data)
|
||||
def __init__(self, header: SaoRequestHeader, data: bytes) -> None:
|
||||
super().__init__(header, data)
|
||||
|
||||
class SaoGetQuestSceneMultiPlayPhotonServerResponse(SaoBaseResponse):
|
||||
def __init__(self, cmd) -> None:
|
||||
@ -289,8 +331,8 @@ class SaoGetQuestSceneMultiPlayPhotonServerResponse(SaoBaseResponse):
|
||||
return super().make() + resp_data
|
||||
|
||||
class SaoTicketRequest(SaoBaseRequest):
|
||||
def __init__(self, data: bytes) -> None:
|
||||
super().__init__(data)
|
||||
def __init__(self, header: SaoRequestHeader, data: bytes) -> None:
|
||||
super().__init__(header, data)
|
||||
|
||||
class SaoTicketResponse(SaoBaseResponse):
|
||||
def __init__(self, cmd) -> None:
|
||||
@ -318,8 +360,37 @@ class SaoTicketResponse(SaoBaseResponse):
|
||||
return super().make() + resp_data
|
||||
|
||||
class SaoCommonLoginRequest(SaoBaseRequest):
|
||||
def __init__(self, data: bytes) -> None:
|
||||
super().__init__(data)
|
||||
def __init__(self, header: SaoRequestHeader, data: bytes) -> None:
|
||||
super().__init__(header, data)
|
||||
off = 0
|
||||
self.cabinet_type = decode_byte(data, off)
|
||||
off += BYTE_OFF
|
||||
|
||||
self.auth_type = decode_byte(data, off)
|
||||
off += BYTE_OFF
|
||||
|
||||
store_id = decode_str(data, off)
|
||||
self.store_id = store_id[0]
|
||||
off += store_id[1]
|
||||
|
||||
store_name = decode_str(data, off)
|
||||
self.store_name = store_name[0]
|
||||
off += store_name[1]
|
||||
|
||||
serial_no = decode_str(data, off)
|
||||
self.serial_no = serial_no[0]
|
||||
off += serial_no[1]
|
||||
|
||||
access_code = decode_str(data, off)
|
||||
self.access_code = access_code[0]
|
||||
off += access_code[1]
|
||||
|
||||
chip_id = decode_str(data, off)
|
||||
self.chip_id = chip_id[0]
|
||||
off += chip_id[1]
|
||||
|
||||
self.free_ticket_distribution_target_flag = decode_byte(data, off)
|
||||
off += BYTE_OFF
|
||||
|
||||
class SaoCommonLoginResponse(SaoBaseResponse):
|
||||
def __init__(self, cmd, profile_data) -> None:
|
||||
@ -362,8 +433,8 @@ class SaoCommonLoginResponse(SaoBaseResponse):
|
||||
return super().make() + resp_data
|
||||
|
||||
class SaoCheckComebackEventRequest(SaoBaseRequest):
|
||||
def __init__(self, data: bytes) -> None:
|
||||
super().__init__(data)
|
||||
def __init__(self, header: SaoRequestHeader, data: bytes) -> None:
|
||||
super().__init__(header, data)
|
||||
|
||||
class SaoCheckComebackEventRequest(SaoBaseResponse):
|
||||
def __init__(self, cmd) -> None:
|
||||
@ -392,8 +463,9 @@ class SaoCheckComebackEventRequest(SaoBaseResponse):
|
||||
return super().make() + resp_data
|
||||
|
||||
class SaoGetUserBasicDataRequest(SaoBaseRequest):
|
||||
def __init__(self, data: bytes) -> None:
|
||||
super().__init__(data)
|
||||
def __init__(self, header: SaoRequestHeader, data: bytes) -> None:
|
||||
super().__init__(header, data)
|
||||
self.user_id = decode_str(data, 0)[0]
|
||||
|
||||
class SaoGetUserBasicDataResponse(SaoBaseResponse):
|
||||
def __init__(self, cmd, profile_data) -> None:
|
||||
@ -476,8 +548,9 @@ class SaoGetUserBasicDataResponse(SaoBaseResponse):
|
||||
return super().make() + resp_data
|
||||
|
||||
class SaoGetHeroLogUserDataListRequest(SaoBaseRequest):
|
||||
def __init__(self, data: bytes) -> None:
|
||||
super().__init__(data)
|
||||
def __init__(self, header: SaoRequestHeader, data: bytes) -> None:
|
||||
super().__init__(header, data)
|
||||
self.user_id = decode_str(data, 0)[0]
|
||||
|
||||
class SaoGetHeroLogUserDataListResponse(SaoBaseResponse):
|
||||
def __init__(self, cmd, hero_data) -> None:
|
||||
@ -647,6 +720,8 @@ class SaoGetHeroLogUserDataListResponse(SaoBaseResponse):
|
||||
|
||||
resp_data.hero_log_user_data_list.append(hero_data)
|
||||
|
||||
resp_data["hero_log_user_data_list_size"] = len(resp_data.hero_log_user_data_list)
|
||||
|
||||
# finally, rebuild the resp_data
|
||||
resp_data = resp_struct.build(resp_data)
|
||||
|
||||
@ -654,8 +729,9 @@ class SaoGetHeroLogUserDataListResponse(SaoBaseResponse):
|
||||
return super().make() + resp_data
|
||||
|
||||
class SaoGetEquipmentUserDataListRequest(SaoBaseRequest):
|
||||
def __init__(self, data: bytes) -> None:
|
||||
super().__init__(data)
|
||||
def __init__(self, header: SaoRequestHeader, data: bytes) -> None:
|
||||
super().__init__(header, data)
|
||||
self.user_id = decode_str(data, 0)[0]
|
||||
|
||||
class SaoGetEquipmentUserDataListResponse(SaoBaseResponse):
|
||||
def __init__(self, cmd, equipment_data) -> None:
|
||||
@ -803,6 +879,8 @@ class SaoGetEquipmentUserDataListResponse(SaoBaseResponse):
|
||||
|
||||
resp_data.equipment_user_data_list.append(equipment_data)
|
||||
|
||||
resp_data["equipment_user_data_list_size"] = len(resp_data.equipment_user_data_list)
|
||||
|
||||
# finally, rebuild the resp_data
|
||||
resp_data = resp_struct.build(resp_data)
|
||||
|
||||
@ -810,8 +888,9 @@ class SaoGetEquipmentUserDataListResponse(SaoBaseResponse):
|
||||
return super().make() + resp_data
|
||||
|
||||
class SaoGetItemUserDataListRequest(SaoBaseRequest):
|
||||
def __init__(self, data: bytes) -> None:
|
||||
super().__init__(data)
|
||||
def __init__(self, header: SaoRequestHeader, data: bytes) -> None:
|
||||
super().__init__(header, data)
|
||||
self.user_id = decode_str(data, 0)[0]
|
||||
|
||||
class SaoGetItemUserDataListResponse(SaoBaseResponse):
|
||||
def __init__(self, cmd, item_data) -> None:
|
||||
@ -867,6 +946,8 @@ class SaoGetItemUserDataListResponse(SaoBaseResponse):
|
||||
|
||||
resp_data.item_user_data_list.append(item_data)
|
||||
|
||||
resp_data["item_user_data_list_size"] = len(resp_data.item_user_data_list)
|
||||
|
||||
# finally, rebuild the resp_data
|
||||
resp_data = resp_struct.build(resp_data)
|
||||
|
||||
@ -874,8 +955,8 @@ class SaoGetItemUserDataListResponse(SaoBaseResponse):
|
||||
return super().make() + resp_data
|
||||
|
||||
class SaoGetSupportLogUserDataListRequest(SaoBaseRequest):
|
||||
def __init__(self, data: bytes) -> None:
|
||||
super().__init__(data)
|
||||
def __init__(self, header: SaoRequestHeader, data: bytes) -> None:
|
||||
super().__init__(header, data)
|
||||
|
||||
class SaoGetSupportLogUserDataListResponse(SaoBaseResponse):
|
||||
def __init__(self, cmd, supportIdsData) -> None:
|
||||
@ -939,14 +1020,16 @@ class SaoGetSupportLogUserDataListResponse(SaoBaseResponse):
|
||||
|
||||
resp_data.support_log_user_data_list.append(support_data)
|
||||
|
||||
resp_data["support_log_user_data_list_size"] = len(resp_data.support_log_user_data_list)
|
||||
|
||||
resp_data = resp_struct.build(resp_data)
|
||||
|
||||
self.length = len(resp_data)
|
||||
return super().make() + resp_data
|
||||
|
||||
class SaoGetTitleUserDataListRequest(SaoBaseRequest):
|
||||
def __init__(self, data: bytes) -> None:
|
||||
super().__init__(data)
|
||||
def __init__(self, header: SaoRequestHeader, data: bytes) -> None:
|
||||
super().__init__(header, data)
|
||||
|
||||
class SaoGetTitleUserDataListResponse(SaoBaseResponse):
|
||||
def __init__(self, cmd, titleIdsData) -> None:
|
||||
@ -986,6 +1069,8 @@ class SaoGetTitleUserDataListResponse(SaoBaseResponse):
|
||||
|
||||
resp_data.title_user_data_list.append(title_data)
|
||||
|
||||
resp_data["title_user_data_list_size"] = len(resp_data.title_user_data_list)
|
||||
|
||||
# finally, rebuild the resp_data
|
||||
resp_data = resp_struct.build(resp_data)
|
||||
|
||||
@ -993,8 +1078,9 @@ class SaoGetTitleUserDataListResponse(SaoBaseResponse):
|
||||
return super().make() + resp_data
|
||||
|
||||
class SaoGetEpisodeAppendDataListRequest(SaoBaseRequest):
|
||||
def __init__(self, data: bytes) -> None:
|
||||
super().__init__(data)
|
||||
def __init__(self, header: SaoRequestHeader, data: bytes) -> None:
|
||||
super().__init__(header, data)
|
||||
self.user_id = decode_str(data, 0)[0]
|
||||
|
||||
class SaoGetEpisodeAppendDataListResponse(SaoBaseResponse):
|
||||
def __init__(self, cmd, profile_data) -> None:
|
||||
@ -1044,6 +1130,8 @@ class SaoGetEpisodeAppendDataListResponse(SaoBaseResponse):
|
||||
own_num=self.own_num_list[i],
|
||||
))
|
||||
|
||||
resp_data["episode_append_data_list_size"] = len(resp_data.episode_append_data_list)
|
||||
|
||||
# finally, rebuild the resp_data
|
||||
resp_data = resp_struct.build(resp_data)
|
||||
|
||||
@ -1051,8 +1139,9 @@ class SaoGetEpisodeAppendDataListResponse(SaoBaseResponse):
|
||||
return super().make() + resp_data
|
||||
|
||||
class SaoGetPartyDataListRequest(SaoBaseRequest):
|
||||
def __init__(self, data: bytes) -> None:
|
||||
super().__init__(data)
|
||||
def __init__(self, header: SaoRequestHeader, data: bytes) -> None:
|
||||
super().__init__(header, data)
|
||||
self.user_id = decode_str(data, 0)[0]
|
||||
|
||||
class SaoGetPartyDataListResponse(SaoBaseResponse): # Default party
|
||||
def __init__(self, cmd, hero1_data, hero2_data, hero3_data) -> None:
|
||||
@ -1215,8 +1304,8 @@ class SaoGetPartyDataListResponse(SaoBaseResponse): # Default party
|
||||
return super().make() + resp_data
|
||||
|
||||
class SaoGetQuestScenePrevScanProfileCardRequest(SaoBaseRequest):
|
||||
def __init__(self, data: bytes) -> None:
|
||||
super().__init__(data)
|
||||
def __init__(self, header: SaoRequestHeader, data: bytes) -> None:
|
||||
super().__init__(header, data)
|
||||
|
||||
class SaoGetQuestScenePrevScanProfileCardResponse(SaoBaseResponse):
|
||||
def __init__(self, cmd) -> None:
|
||||
@ -1352,8 +1441,8 @@ class SaoGetQuestScenePrevScanProfileCardResponse(SaoBaseResponse):
|
||||
return super().make() + resp_data
|
||||
|
||||
class SaoGetResourcePathInfoRequest(SaoBaseRequest):
|
||||
def __init__(self, data: bytes) -> None:
|
||||
super().__init__(data)
|
||||
def __init__(self, header: SaoRequestHeader, data: bytes) -> None:
|
||||
super().__init__(header, data)
|
||||
|
||||
class SaoGetResourcePathInfoResponse(SaoBaseResponse):
|
||||
def __init__(self, cmd) -> None:
|
||||
@ -1394,8 +1483,40 @@ class SaoGetResourcePathInfoResponse(SaoBaseResponse):
|
||||
return super().make() + resp_data
|
||||
|
||||
class SaoEpisodePlayStartRequest(SaoBaseRequest):
|
||||
def __init__(self, data: bytes) -> None:
|
||||
super().__init__(data)
|
||||
def __init__(self, header: SaoRequestHeader, data: bytes) -> None:
|
||||
super().__init__(header, data)
|
||||
off = 0
|
||||
ticket_id = decode_str(data, off)
|
||||
self.ticket_id = ticket_id[0]
|
||||
off += ticket_id[1]
|
||||
|
||||
user_id = decode_str(data, off)
|
||||
self.user_id = user_id[0]
|
||||
off += user_id[1]
|
||||
|
||||
self.episode_id = decode_int(data, off)
|
||||
off += INT_OFF
|
||||
|
||||
self.play_mode = decode_byte(data, off)
|
||||
off += BYTE_OFF
|
||||
|
||||
self.play_start_request_data_count = decode_int(data, off)
|
||||
off += INT_OFF
|
||||
|
||||
self.play_start_request_data: List[PlayStartRequestData] = []
|
||||
for _ in range(self.play_start_request_data_count):
|
||||
tmp = PlayStartRequestData(data, off)
|
||||
self.play_start_request_data.append(tmp)
|
||||
off += tmp.get_size()
|
||||
|
||||
self.multi_play_start_request_data_count = decode_int(data, off)
|
||||
off += INT_OFF
|
||||
|
||||
self.multi_play_start_request_data: List[MultiPlayStartRequestData] = []
|
||||
for _ in range(self.multi_play_start_request_data_count):
|
||||
tmp = MultiPlayStartRequestData(data, off)
|
||||
off += tmp.get_size()
|
||||
self.multi_play_start_request_data.append(tmp)
|
||||
|
||||
class SaoEpisodePlayStartResponse(SaoBaseResponse):
|
||||
def __init__(self, cmd, profile_data) -> None:
|
||||
@ -1441,8 +1562,37 @@ class SaoEpisodePlayStartResponse(SaoBaseResponse):
|
||||
return super().make() + resp_data
|
||||
|
||||
class SaoEpisodePlayEndRequest(SaoBaseRequest):
|
||||
def __init__(self, data: bytes) -> None:
|
||||
super().__init__(data)
|
||||
def __init__(self, header: SaoRequestHeader, data: bytes) -> None:
|
||||
super().__init__(header, data)
|
||||
off = 0
|
||||
ticket_id = decode_str(data, off)
|
||||
self.ticket_id = ticket_id[0]
|
||||
off += ticket_id[1]
|
||||
|
||||
user_id = decode_str(data, off)
|
||||
self.user_id = user_id[0]
|
||||
off += user_id[1]
|
||||
|
||||
self.episode_id = decode_int(data, off)
|
||||
off += INT_OFF
|
||||
|
||||
self.play_end_request_data_count = decode_int(data, off)
|
||||
off += INT_OFF
|
||||
|
||||
self.play_end_request_data_list: List[PlayEndRequestData] = []
|
||||
for _ in range(self.play_end_request_data_count):
|
||||
tmp = PlayEndRequestData(data, off)
|
||||
off += tmp.get_size()
|
||||
self.play_end_request_data_list.append(tmp)
|
||||
|
||||
self.multi_play_end_request_data_count = decode_int(data, off)
|
||||
off += INT_OFF
|
||||
|
||||
self.multi_play_end_request_data_list: List[MultiPlayEndRequestData] = []
|
||||
for _ in range(self.multi_play_end_request_data_count):
|
||||
tmp = MultiPlayEndRequestData(data, off)
|
||||
off += tmp.get_size()
|
||||
self.multi_play_end_request_data_list.append(tmp)
|
||||
|
||||
class SaoEpisodePlayEndResponse(SaoBaseResponse):
|
||||
def __init__(self, cmd) -> None:
|
||||
@ -1528,9 +1678,74 @@ class SaoEpisodePlayEndResponse(SaoBaseResponse):
|
||||
self.length = len(resp_data)
|
||||
return super().make() + resp_data
|
||||
|
||||
class SaoTrialTowerPlayStartRequest(SaoBaseRequest):
|
||||
def __init__(self, header: SaoRequestHeader, data: bytes) -> None:
|
||||
super().__init__(header, data)
|
||||
off = 0
|
||||
ticket_id = decode_str(data, off)
|
||||
self.ticket_id = ticket_id[0]
|
||||
off += ticket_id[1]
|
||||
|
||||
user_id = decode_str(data, off)
|
||||
self.user_id = user_id[0]
|
||||
off += user_id[1]
|
||||
|
||||
self.trial_tower_id = decode_int(data, off)
|
||||
off += INT_OFF
|
||||
|
||||
self.play_mode = decode_byte(data, off)
|
||||
off += BYTE_OFF
|
||||
|
||||
self.play_start_request_data_count = decode_int(data, off)
|
||||
off += INT_OFF
|
||||
|
||||
self.play_start_request_data: List[PlayStartRequestData] = []
|
||||
for _ in range(self.play_start_request_data_count):
|
||||
tmp = PlayStartRequestData(data, off)
|
||||
self.play_start_request_data.append(tmp)
|
||||
off += tmp.get_size()
|
||||
|
||||
self.multi_play_start_request_data_count = decode_int(data, off)
|
||||
off += INT_OFF
|
||||
|
||||
self.multi_play_start_request_data: List[MultiPlayStartRequestData] = []
|
||||
for _ in range(self.multi_play_start_request_data_count):
|
||||
tmp = MultiPlayStartRequestData(data, off)
|
||||
off += tmp.get_size()
|
||||
self.multi_play_start_request_data.append(tmp)
|
||||
|
||||
class SaoTrialTowerPlayEndRequest(SaoBaseRequest):
|
||||
def __init__(self, data: bytes) -> None:
|
||||
super().__init__(data)
|
||||
def __init__(self, header: SaoRequestHeader, data: bytes) -> None:
|
||||
super().__init__(header, data)
|
||||
off = 0
|
||||
ticket_id = decode_str(data, off)
|
||||
self.ticket_id = ticket_id[0]
|
||||
off += ticket_id[1]
|
||||
|
||||
user_id = decode_str(data, off)
|
||||
self.user_id = user_id[0]
|
||||
off += user_id[1]
|
||||
|
||||
self.trial_tower_id = decode_int(data, off)
|
||||
off += INT_OFF
|
||||
|
||||
self.play_end_request_data_count = decode_int(data, off)
|
||||
off += INT_OFF
|
||||
|
||||
self.play_end_request_data_list: List[PlayEndRequestData] = []
|
||||
for _ in range(self.play_end_request_data_count):
|
||||
tmp = PlayEndRequestData(data, off)
|
||||
off += tmp.get_size()
|
||||
self.play_end_request_data_list.append(tmp)
|
||||
|
||||
self.multi_play_end_request_data_count = decode_int(data, off)
|
||||
off += INT_OFF
|
||||
|
||||
self.multi_play_end_request_data_list: List[MultiPlayEndRequestData] = []
|
||||
for _ in range(self.multi_play_end_request_data_count):
|
||||
tmp = MultiPlayEndRequestData(data, off)
|
||||
off += tmp.get_size()
|
||||
self.multi_play_end_request_data_list.append(tmp)
|
||||
|
||||
class SaoTrialTowerPlayEndResponse(SaoBaseResponse):
|
||||
def __init__(self, cmd) -> None:
|
||||
@ -1655,8 +1870,22 @@ class SaoTrialTowerPlayEndResponse(SaoBaseResponse):
|
||||
return super().make() + resp_data
|
||||
|
||||
class SaoEpisodePlayEndUnanalyzedLogFixedRequest(SaoBaseRequest):
|
||||
def __init__(self, data: bytes) -> None:
|
||||
super().__init__(data)
|
||||
def __init__(self, header: SaoRequestHeader, data: bytes) -> None:
|
||||
super().__init__(header, data)
|
||||
off = 0
|
||||
ticket_id = decode_str(data, off)
|
||||
self.ticket_id = ticket_id[0]
|
||||
off += ticket_id[1]
|
||||
|
||||
user_id = decode_str(data, off)
|
||||
self.user_id = user_id[0]
|
||||
off += user_id[1]
|
||||
|
||||
self.episode_id = decode_int(data, off)
|
||||
off += INT_OFF
|
||||
|
||||
self.rarity_up_exec_flag = decode_byte(data, off)
|
||||
off += BYTE_OFF
|
||||
|
||||
class SaoEpisodePlayEndUnanalyzedLogFixedResponse(SaoBaseResponse):
|
||||
def __init__(self, cmd, end_session_data) -> None:
|
||||
@ -1728,6 +1957,10 @@ class SaoEpisodePlayEndUnanalyzedLogFixedResponse(SaoBaseResponse):
|
||||
|
||||
resp_data.play_end_unanalyzed_log_reward_data_list.append(reward_resp_data)
|
||||
|
||||
resp_data["play_end_unanalyzed_log_reward_data_list_size"] = len(resp_data.play_end_unanalyzed_log_reward_data_list)
|
||||
for i in range(len(resp_data.play_end_unanalyzed_log_reward_data_list)):
|
||||
resp_data.play_end_unanalyzed_log_reward_data_list[i]["common_reward_data_size"] = len(resp_data.play_end_unanalyzed_log_reward_data_list[i]["common_reward_data"])
|
||||
|
||||
# finally, rebuild the resp_data
|
||||
resp_data = resp_struct.build(resp_data)
|
||||
|
||||
@ -1735,12 +1968,14 @@ class SaoEpisodePlayEndUnanalyzedLogFixedResponse(SaoBaseResponse):
|
||||
return super().make() + resp_data
|
||||
|
||||
class SaoGetQuestSceneUserDataListRequest(SaoBaseRequest):
|
||||
def __init__(self, data: bytes) -> None:
|
||||
super().__init__(data)
|
||||
def __init__(self, header: SaoRequestHeader, data: bytes) -> None:
|
||||
super().__init__(header, data)
|
||||
self.user_id = decode_str(data, 0)[0]
|
||||
|
||||
class SaoGetQuestSceneUserDataListResponse(SaoBaseResponse):
|
||||
def __init__(self, cmd, quest_data) -> None:
|
||||
super().__init__(cmd)
|
||||
self.length = None
|
||||
self.result = 1
|
||||
|
||||
# quest_scene_user_data_list_size
|
||||
@ -1837,6 +2072,10 @@ class SaoGetQuestSceneUserDataListResponse(SaoBaseResponse):
|
||||
|
||||
resp_data.quest_scene_user_data_list.append(quest_resp_data)
|
||||
|
||||
resp_data["quest_scene_user_data_list_size"] = len(resp_data.quest_scene_user_data_list)
|
||||
for i in range(len(resp_data.quest_scene_user_data_list)):
|
||||
resp_data.quest_scene_user_data_list[i]["quest_scene_best_score_user_data_size"] = len(resp_data.quest_scene_user_data_list[i]["quest_scene_best_score_user_data"])
|
||||
|
||||
# finally, rebuild the resp_data
|
||||
resp_data = resp_struct.build(resp_data)
|
||||
|
||||
@ -1844,8 +2083,8 @@ class SaoGetQuestSceneUserDataListResponse(SaoBaseResponse):
|
||||
return super().make() + resp_data
|
||||
|
||||
class SaoCheckYuiMedalGetConditionRequest(SaoBaseRequest):
|
||||
def __init__(self, data: bytes) -> None:
|
||||
super().__init__(data)
|
||||
def __init__(self, header: SaoRequestHeader, data: bytes) -> None:
|
||||
super().__init__(header, data)
|
||||
|
||||
class SaoCheckYuiMedalGetConditionResponse(SaoBaseResponse):
|
||||
def __init__(self, cmd) -> None:
|
||||
@ -1875,8 +2114,8 @@ class SaoCheckYuiMedalGetConditionResponse(SaoBaseResponse):
|
||||
return super().make() + resp_data
|
||||
|
||||
class SaoGetYuiMedalBonusUserDataRequest(SaoBaseRequest):
|
||||
def __init__(self, data: bytes) -> None:
|
||||
super().__init__(data)
|
||||
def __init__(self, header: SaoRequestHeader, data: bytes) -> None:
|
||||
super().__init__(header, data)
|
||||
|
||||
class SaoGetYuiMedalBonusUserDataResponse(SaoBaseResponse):
|
||||
def __init__(self, cmd) -> None:
|
||||
@ -1920,8 +2159,8 @@ class SaoGetYuiMedalBonusUserDataResponse(SaoBaseResponse):
|
||||
return super().make() + resp_data
|
||||
|
||||
class SaoCheckProfileCardUsedRewardRequest(SaoBaseRequest):
|
||||
def __init__(self, data: bytes) -> None:
|
||||
super().__init__(data)
|
||||
def __init__(self, header: SaoRequestHeader, data: bytes) -> None:
|
||||
super().__init__(header, data)
|
||||
|
||||
class SaoCheckProfileCardUsedRewardResponse(SaoBaseResponse):
|
||||
def __init__(self, cmd) -> None:
|
||||
@ -1952,8 +2191,30 @@ class SaoCheckProfileCardUsedRewardResponse(SaoBaseResponse):
|
||||
return super().make() + resp_data
|
||||
|
||||
class SaoSynthesizeEnhancementHeroLogRequest(SaoBaseRequest):
|
||||
def __init__(self, data: bytes) -> None:
|
||||
super().__init__(data)
|
||||
def __init__(self, header: SaoRequestHeader, data: bytes) -> None:
|
||||
super().__init__(header, data)
|
||||
off = 0
|
||||
ticket_id = decode_str(data, off)
|
||||
self.ticket_id = ticket_id[0]
|
||||
off += ticket_id[1]
|
||||
|
||||
user_id = decode_str(data, off)
|
||||
self.user_id = user_id[0]
|
||||
off += user_id[1]
|
||||
|
||||
origin_user_hero_log_id = decode_str(data, off)
|
||||
self.origin_user_hero_log_id = origin_user_hero_log_id[0]
|
||||
off += origin_user_hero_log_id[1]
|
||||
|
||||
self.material_common_reward_user_data_list: List[MaterialCommonRewardUserData] = []
|
||||
|
||||
self.material_common_reward_user_data_count = decode_int(data, off)
|
||||
off += INT_OFF
|
||||
|
||||
for _ in range(self.material_common_reward_user_data_count):
|
||||
mat = MaterialCommonRewardUserData(data, off)
|
||||
off += mat.get_size()
|
||||
self.material_common_reward_user_data_list.append(mat)
|
||||
|
||||
class SaoSynthesizeEnhancementHeroLogResponse(SaoBaseResponse):
|
||||
def __init__(self, cmd, hero_data) -> None:
|
||||
@ -2100,15 +2361,39 @@ class SaoSynthesizeEnhancementHeroLogResponse(SaoBaseResponse):
|
||||
|
||||
resp_data.hero_log_user_data_list.append(hero_data)
|
||||
|
||||
resp_data["hero_log_user_data_list_size"] = len(resp_data.hero_log_user_data_list)
|
||||
|
||||
# finally, rebuild the resp_data
|
||||
resp_data = resp_struct.build(resp_data)
|
||||
|
||||
self.length = len(resp_data)
|
||||
return super().make() + resp_data
|
||||
|
||||
class SaoSynthesizeEnhancementEquipment(SaoBaseRequest):
|
||||
def __init__(self, data: bytes) -> None:
|
||||
super().__init__(data)
|
||||
class SaoSynthesizeEnhancementEquipmentRequest(SaoBaseRequest):
|
||||
def __init__(self, header: SaoRequestHeader, data: bytes) -> None:
|
||||
super().__init__(header, data)
|
||||
off = 0
|
||||
ticket_id = decode_str(data, off)
|
||||
self.ticket_id = ticket_id[0]
|
||||
off += ticket_id[1]
|
||||
|
||||
user_id = decode_str(data, off)
|
||||
self.user_id = user_id[0]
|
||||
off += user_id[1]
|
||||
|
||||
origin_user_equipment_id = decode_str(data, off)
|
||||
self.origin_user_equipment_id = origin_user_equipment_id[0]
|
||||
off += origin_user_equipment_id[1]
|
||||
|
||||
self.material_common_reward_user_data_list: List[MaterialCommonRewardUserData] = []
|
||||
|
||||
self.material_common_reward_user_data_count = decode_int(data, off)
|
||||
off += INT_OFF
|
||||
|
||||
for _ in range(self.material_common_reward_user_data_count):
|
||||
mat = MaterialCommonRewardUserData(data, off)
|
||||
off += mat.get_size()
|
||||
self.material_common_reward_user_data_list.append(mat)
|
||||
|
||||
class SaoSynthesizeEnhancementEquipmentResponse(SaoBaseResponse):
|
||||
def __init__(self, cmd, synthesize_equipment_data) -> None:
|
||||
@ -2237,6 +2522,8 @@ class SaoSynthesizeEnhancementEquipmentResponse(SaoBaseResponse):
|
||||
|
||||
resp_data.after_equipment_user_data.append(synthesize_equipment_data)
|
||||
|
||||
resp_data["after_equipment_user_data_size"] = len(resp_data.after_equipment_user_data)
|
||||
|
||||
# finally, rebuild the resp_data
|
||||
resp_data = resp_struct.build(resp_data)
|
||||
|
||||
@ -2244,8 +2531,8 @@ class SaoSynthesizeEnhancementEquipmentResponse(SaoBaseResponse):
|
||||
return super().make() + resp_data
|
||||
|
||||
class SaoGetDefragMatchBasicDataRequest(SaoBaseRequest):
|
||||
def __init__(self, data: bytes) -> None:
|
||||
super().__init__(data)
|
||||
def __init__(self, header: SaoRequestHeader, data: bytes) -> None:
|
||||
super().__init__(header, data)
|
||||
|
||||
class SaoGetDefragMatchBasicDataResponse(SaoBaseResponse):
|
||||
def __init__(self, cmd) -> None:
|
||||
@ -2291,8 +2578,8 @@ class SaoGetDefragMatchBasicDataResponse(SaoBaseResponse):
|
||||
return super().make() + resp_data
|
||||
|
||||
class SaoGetDefragMatchRankingUserDataRequest(SaoBaseRequest):
|
||||
def __init__(self, data: bytes) -> None:
|
||||
super().__init__(data)
|
||||
def __init__(self, header: SaoRequestHeader, data: bytes) -> None:
|
||||
super().__init__(header, data)
|
||||
|
||||
class SaoGetDefragMatchRankingUserDataResponse(SaoBaseResponse):
|
||||
def __init__(self, cmd) -> None:
|
||||
@ -2351,8 +2638,8 @@ class SaoGetDefragMatchRankingUserDataResponse(SaoBaseResponse):
|
||||
return super().make() + resp_data
|
||||
|
||||
class SaoGetDefragMatchLeaguePointRankingListRequest(SaoBaseRequest):
|
||||
def __init__(self, data: bytes) -> None:
|
||||
super().__init__(data)
|
||||
def __init__(self, header: SaoRequestHeader, data: bytes) -> None:
|
||||
super().__init__(header, data)
|
||||
|
||||
class SaoGetDefragMatchLeaguePointRankingListResponse(SaoBaseResponse):
|
||||
def __init__(self, cmd) -> None:
|
||||
@ -2423,8 +2710,8 @@ class SaoGetDefragMatchLeaguePointRankingListResponse(SaoBaseResponse):
|
||||
return super().make() + resp_data
|
||||
|
||||
class SaoGetDefragMatchLeagueScoreRankingListRequest(SaoBaseRequest):
|
||||
def __init__(self, data: bytes) -> None:
|
||||
super().__init__(data)
|
||||
def __init__(self, header: SaoRequestHeader, data: bytes) -> None:
|
||||
super().__init__(header, data)
|
||||
|
||||
class SaoGetDefragMatchLeagueScoreRankingListResponse(SaoBaseResponse):
|
||||
def __init__(self, cmd) -> None:
|
||||
@ -2495,8 +2782,8 @@ class SaoGetDefragMatchLeagueScoreRankingListResponse(SaoBaseResponse):
|
||||
return super().make() + resp_data
|
||||
|
||||
class SaoBnidSerialCodeCheckRequest(SaoBaseRequest):
|
||||
def __init__(self, data: bytes) -> None:
|
||||
super().__init__(data)
|
||||
def __init__(self, header: SaoRequestHeader, data: bytes) -> None:
|
||||
super().__init__(header, data)
|
||||
|
||||
class SaoBnidSerialCodeCheckResponse(SaoBaseResponse):
|
||||
def __init__(self, cmd) -> None:
|
||||
@ -2526,8 +2813,8 @@ class SaoBnidSerialCodeCheckResponse(SaoBaseResponse):
|
||||
return super().make() + resp_data
|
||||
|
||||
class SaoScanQrQuestProfileCardRequest(SaoBaseRequest):
|
||||
def __init__(self, data: bytes) -> None:
|
||||
super().__init__(data)
|
||||
def __init__(self, header: SaoRequestHeader, data: bytes) -> None:
|
||||
super().__init__(header, data)
|
||||
|
||||
class SaoScanQrQuestProfileCardResponse(SaoBaseResponse):
|
||||
def __init__(self, cmd) -> None:
|
||||
@ -2737,8 +3024,209 @@ class SaoScanQrQuestProfileCardResponse(SaoBaseResponse):
|
||||
|
||||
resp_data.read_profile_card_data.append(hero_data)
|
||||
|
||||
resp_data["read_profile_card_data_size"] = len(resp_data.read_profile_card_data)
|
||||
|
||||
# finally, rebuild the resp_data
|
||||
resp_data = resp_struct.build(resp_data)
|
||||
|
||||
self.length = len(resp_data)
|
||||
return super().make() + resp_data
|
||||
return super().make() + resp_data
|
||||
|
||||
class SaoConsumeCreditGuestRequest(SaoBaseRequest):
|
||||
def __init__(self, header: SaoRequestHeader, data: bytes) -> None:
|
||||
super().__init__(header, data)
|
||||
off = 0
|
||||
shop_id = decode_str(data, off)
|
||||
self.shop_id = shop_id[0]
|
||||
off += shop_id[1]
|
||||
|
||||
serial_num = decode_str(data, off)
|
||||
self.serial_num = serial_num[0]
|
||||
off += serial_num[1]
|
||||
|
||||
self.cab_type = decode_byte(data, off)
|
||||
off += BYTE_OFF
|
||||
|
||||
self.act_type = decode_byte(data, off)
|
||||
off += BYTE_OFF
|
||||
|
||||
self.consume_num = decode_byte(data, off)
|
||||
off += BYTE_OFF
|
||||
|
||||
class SaoChangePartyRequest(SaoBaseRequest):
|
||||
def __init__(self, header: SaoRequestHeader, data: bytes) -> None:
|
||||
super().__init__(header, data)
|
||||
off = 0
|
||||
ticket_id = decode_str(data, off)
|
||||
self.ticket_id = ticket_id[0]
|
||||
off += ticket_id[1]
|
||||
|
||||
user_id = decode_str(data, off)
|
||||
self.user_id = user_id[0]
|
||||
off += user_id[1]
|
||||
|
||||
self.act_type = decode_byte(data, off)
|
||||
off += BYTE_OFF
|
||||
|
||||
self.party_data_count = decode_int(data, off)
|
||||
off += INT_OFF
|
||||
|
||||
self.party_data_list: List[PartyData] = []
|
||||
|
||||
for _ in range(self.party_data_count):
|
||||
tmp = PartyData(data, off)
|
||||
self.party_data_list.append(tmp)
|
||||
off += tmp.get_size()
|
||||
|
||||
class TrialTowerPlayEndUnanalyzedLogFixed(SaoBaseRequest):
|
||||
def __init__(self, header: SaoRequestHeader, data: bytes) -> None:
|
||||
super().__init__(header, data)
|
||||
off = 0
|
||||
ticket_id = decode_str(data, off)
|
||||
self.ticket_id = ticket_id[0]
|
||||
off += ticket_id[1]
|
||||
|
||||
user_id = decode_str(data, off)
|
||||
self.user_id = user_id[0]
|
||||
off += user_id[1]
|
||||
|
||||
self.trial_tower_id = decode_int(data, off)
|
||||
off += INT_OFF
|
||||
|
||||
self.rarity_up_exec_flag = decode_byte(data, off)
|
||||
off += BYTE_OFF
|
||||
|
||||
class GetShopResourceSalesDataListRequest(SaoBaseRequest):
|
||||
def __init__(self, header: SaoRequestHeader, data: bytes) -> None:
|
||||
super().__init__(header, data)
|
||||
off = 0
|
||||
user_id = decode_str(data, off)
|
||||
self.user_id = user_id[0]
|
||||
off += user_id[1]
|
||||
|
||||
class GetShopResourceSalesDataListResponse(SaoBaseResponse):
|
||||
def __init__(self, cmd_id: int) -> None:
|
||||
super().__init__(cmd_id)
|
||||
self.result = 1 # byte
|
||||
self.shop_resource_sales_data: List[ShopResourceSalesData] = []
|
||||
|
||||
def make(self) -> bytes:
|
||||
ret = encode_byte(self.result)
|
||||
ret += encode_arr_cls(self.shop_resource_sales_data)
|
||||
|
||||
self.header.length = len(ret)
|
||||
return super().make() + ret
|
||||
|
||||
class GetYuiMedalShopUserDataListRequest(SaoBaseRequest):
|
||||
def __init__(self, header: SaoRequestHeader, data: bytes) -> None:
|
||||
super().__init__(header, data)
|
||||
off = 0
|
||||
user_id = decode_str(data, off)
|
||||
self.user_id = user_id[0]
|
||||
off += user_id[1]
|
||||
|
||||
class GetYuiMedalShopUserDataListResponse(SaoBaseResponse):
|
||||
def __init__(self, cmd_id: int) -> None:
|
||||
super().__init__(cmd_id)
|
||||
self.result = 1 # byte
|
||||
self.user_data_list: List[YuiMedalShopUserData] = []
|
||||
|
||||
def make(self) -> bytes:
|
||||
ret = encode_byte(self.result)
|
||||
ret += encode_arr_cls(self.user_data_list)
|
||||
|
||||
self.header.length = len(ret)
|
||||
return super().make() + ret
|
||||
|
||||
class GetGashaMedalShopUserDataListRequest(SaoBaseRequest):
|
||||
def __init__(self, header: SaoRequestHeader, data: bytes) -> None:
|
||||
super().__init__(header, data)
|
||||
off = 0
|
||||
user_id = decode_str(data, off)
|
||||
self.user_id = user_id[0]
|
||||
off += user_id[1]
|
||||
|
||||
class GetGashaMedalShopUserDataListResponse(SaoBaseResponse):
|
||||
def __init__(self, cmd_id: int) -> None:
|
||||
super().__init__(cmd_id)
|
||||
self.result = 1 # byte
|
||||
self.data_list: List[GashaMedalShopUserData] = []
|
||||
|
||||
def make(self) -> bytes:
|
||||
ret = encode_byte(self.result)
|
||||
ret += encode_arr_cls(self.data_list)
|
||||
|
||||
self.header.length = len(ret)
|
||||
return super().make() + ret
|
||||
|
||||
class GetMYuiMedalShopDataRequest(SaoBaseRequest):
|
||||
def __init__(self, header: SaoRequestHeader, data: bytes) -> None:
|
||||
super().__init__(header, data)
|
||||
self.dummy = decode_byte(data, 0)
|
||||
|
||||
class GetMYuiMedalShopDataResponse(SaoBaseResponse):
|
||||
def __init__(self, cmd_id: int) -> None:
|
||||
super().__init__(cmd_id)
|
||||
self.result = 1 # byte
|
||||
self.data_list: List[YuiMedalShopData] = []
|
||||
|
||||
def make(self) -> bytes:
|
||||
ret = encode_byte(self.result)
|
||||
ret += encode_arr_cls(self.data_list)
|
||||
|
||||
self.header.length = len(ret)
|
||||
return super().make() + ret
|
||||
|
||||
class GetMYuiMedalShopItemsRequest(SaoBaseRequest):
|
||||
def __init__(self, header: SaoRequestHeader, data: bytes) -> None:
|
||||
super().__init__(header, data)
|
||||
self.dummy = decode_byte(data, 0)
|
||||
|
||||
class GetMYuiMedalShopItemsResponse(SaoBaseResponse):
|
||||
def __init__(self, cmd_id: int) -> None:
|
||||
super().__init__(cmd_id)
|
||||
self.result = 1 # byte
|
||||
self.data_list: List[YuiMedalShopItemData] = []
|
||||
|
||||
def make(self) -> bytes:
|
||||
ret = encode_byte(self.result)
|
||||
ret += encode_arr_cls(self.data_list)
|
||||
|
||||
self.header.length = len(ret)
|
||||
return super().make() + ret
|
||||
|
||||
class GetMGashaMedalShopsRequest(SaoBaseRequest):
|
||||
def __init__(self, header: SaoRequestHeader, data: bytes) -> None:
|
||||
super().__init__(header, data)
|
||||
self.dummy = decode_byte(data, 0)
|
||||
|
||||
class GetMGashaMedalShopsResponse(SaoBaseResponse):
|
||||
def __init__(self, cmd_id: int) -> None:
|
||||
super().__init__(cmd_id)
|
||||
self.result = 1 # byte
|
||||
self.data_list: List[GashaMedalShop] = []
|
||||
|
||||
def make(self) -> bytes:
|
||||
ret = encode_byte(self.result)
|
||||
ret += encode_arr_cls(self.data_list)
|
||||
|
||||
self.header.length = len(ret)
|
||||
return super().make() + ret
|
||||
|
||||
class GetMResEarnCampaignShopsRequest(SaoBaseRequest):
|
||||
def __init__(self, header: SaoRequestHeader, data: bytes) -> None:
|
||||
super().__init__(header, data)
|
||||
self.dummy = decode_byte(data, 0)
|
||||
|
||||
class GetMResEarnCampaignShopsResponse(SaoBaseResponse):
|
||||
def __init__(self, cmd_id: int) -> None:
|
||||
super().__init__(cmd_id)
|
||||
self.result = 1 # byte
|
||||
self.data_list: List[ResEarnCampaignShop] = []
|
||||
|
||||
def make(self) -> bytes:
|
||||
ret = encode_byte(self.result)
|
||||
ret += encode_arr_cls(self.data_list)
|
||||
|
||||
self.header.length = len(ret)
|
||||
return super().make() + ret
|
||||
|
917
titles/sao/handlers/helpers.py
Normal file
917
titles/sao/handlers/helpers.py
Normal file
@ -0,0 +1,917 @@
|
||||
from typing import Tuple, List, Optional
|
||||
import struct
|
||||
import logging
|
||||
from datetime import datetime
|
||||
|
||||
BIGINT_OFF = 16
|
||||
LONG_OFF = 8
|
||||
INT_OFF = 4
|
||||
SHORT_OFF = 2
|
||||
BYTE_OFF = 1
|
||||
|
||||
DT_FMT = "%Y%m%d%H%M%S"
|
||||
|
||||
def fmt_dt(d: Optional[datetime] = None) -> str:
|
||||
if d is None:
|
||||
d = datetime.fromtimestamp(0)
|
||||
return d.strftime(DT_FMT)
|
||||
|
||||
def prs_dt(s: Optional[str] = None) -> datetime:
|
||||
if not s:
|
||||
s = "19691231190000"
|
||||
return datetime.strptime(s, DT_FMT)
|
||||
|
||||
def decode_num(data: bytes, offset: int, size: int) -> int:
|
||||
try:
|
||||
return int.from_bytes(data[offset:offset + size], 'big')
|
||||
except:
|
||||
logging.getLogger('sao').error(f"Failed to parse {data[offset:offset + size]} as BE number of width {size}")
|
||||
return 0
|
||||
|
||||
def decode_byte(data: bytes, offset: int) -> int:
|
||||
return decode_num(data, offset, BYTE_OFF)
|
||||
|
||||
def decode_short(data: bytes, offset: int) -> int:
|
||||
return decode_num(data, offset, SHORT_OFF)
|
||||
|
||||
def decode_int(data: bytes, offset: int) -> int:
|
||||
return decode_num(data, offset, INT_OFF)
|
||||
|
||||
def decode_long(data: bytes, offset: int) -> int:
|
||||
return decode_num(data, offset, LONG_OFF)
|
||||
|
||||
def decode_bigint(data: bytes, offset: int) -> int:
|
||||
return decode_num(data, offset, BIGINT_OFF)
|
||||
|
||||
def decode_str(data: bytes, offset: int) -> Tuple[str, int]:
|
||||
try:
|
||||
str_len = decode_int(data, offset)
|
||||
num_bytes_decoded = INT_OFF + str_len
|
||||
str_out = data[offset + INT_OFF:offset + num_bytes_decoded].decode("utf-16-le", errors="replace")
|
||||
return (str_out, num_bytes_decoded)
|
||||
except:
|
||||
logging.getLogger('sao').error(f"Failed to parse {data[offset:]} as string!")
|
||||
return ("", 0)
|
||||
|
||||
def decode_arr_num(data: bytes, offset:int, element_size: int) -> Tuple[List[int], int]:
|
||||
size = 0
|
||||
num_obj = decode_int(data, offset + size)
|
||||
size += INT_OFF
|
||||
|
||||
ret: List[int] = []
|
||||
for _ in range(num_obj):
|
||||
ret.append(decode_num(data, offset + size, element_size))
|
||||
size += element_size
|
||||
|
||||
return (ret, size)
|
||||
|
||||
def decode_arr_str(data: bytes, offset: int) -> Tuple[List[str], int]:
|
||||
size = 0
|
||||
num_obj = decode_int(data, offset + size)
|
||||
size += INT_OFF
|
||||
|
||||
ret: List[str] = []
|
||||
for _ in range(num_obj):
|
||||
tmp = decode_str(data, offset + size)
|
||||
ret.append(tmp[0])
|
||||
size += tmp[1]
|
||||
|
||||
return (ret, size)
|
||||
|
||||
def encode_byte(data: int) -> bytes:
|
||||
return struct.pack("!b", data)
|
||||
|
||||
def encode_short(data: int) -> bytes:
|
||||
return struct.pack("!h", data)
|
||||
|
||||
def encode_int(data: int) -> bytes:
|
||||
return struct.pack("!i", data)
|
||||
|
||||
def encode_long(data: int) -> bytes:
|
||||
return struct.pack("!l", data)
|
||||
|
||||
def encode_bigint(data: int) -> bytes:
|
||||
return struct.pack("!q", data)
|
||||
|
||||
def encode_str(s: str) -> bytes:
|
||||
try:
|
||||
str_bytes = s.encode("utf-16-le", errors="replace")
|
||||
str_len_bytes = struct.pack("!I", len(str_bytes))
|
||||
return str_len_bytes + str_bytes
|
||||
except:
|
||||
logging.getLogger('sao').error(f"Failed to encode {s} as bytes!")
|
||||
return b""
|
||||
|
||||
def encode_arr_num(data: List[int], element_size: int) -> bytes:
|
||||
ret = encode_int(len(data))
|
||||
|
||||
if element_size == BYTE_OFF:
|
||||
for x in data:
|
||||
ret += encode_byte(x)
|
||||
elif element_size == SHORT_OFF:
|
||||
for x in data:
|
||||
ret += encode_short(x)
|
||||
elif element_size == INT_OFF:
|
||||
for x in data:
|
||||
ret += encode_int(x)
|
||||
elif element_size == LONG_OFF:
|
||||
for x in data:
|
||||
ret += encode_long(x)
|
||||
elif element_size == BIGINT_OFF:
|
||||
for x in data:
|
||||
ret += encode_bigint(x)
|
||||
else:
|
||||
logging.getLogger('sao').error(f"Unknown element size {element_size}")
|
||||
return b"\x00" * INT_OFF
|
||||
|
||||
return ret
|
||||
|
||||
class BaseHelper:
|
||||
def __init__(self, data: bytes, offset: int) -> None:
|
||||
self._sz = 0
|
||||
|
||||
@classmethod
|
||||
def from_args(cls) -> "BaseHelper":
|
||||
return cls(b"", 0)
|
||||
|
||||
def get_size(self) -> int:
|
||||
return self._sz
|
||||
|
||||
def make(self) -> bytes:
|
||||
return b""
|
||||
|
||||
def decode_arr_cls(data: bytes, offset: int, cls: BaseHelper):
|
||||
size = 0
|
||||
num_cls = decode_int(data, offset + size)
|
||||
cls_type = type(cls)
|
||||
|
||||
ret: List[cls_type] = []
|
||||
for _ in range(num_cls):
|
||||
tmp = cls(data, offset + size)
|
||||
size += tmp.get_size()
|
||||
ret.append(tmp)
|
||||
|
||||
return (ret, size)
|
||||
|
||||
def encode_arr_cls(data: List[BaseHelper]) -> bytes:
|
||||
ret = encode_int(len(data))
|
||||
|
||||
for x in data:
|
||||
ret += x.make()
|
||||
|
||||
return ret
|
||||
|
||||
class MaterialCommonRewardUserData(BaseHelper):
|
||||
def __init__(self, data: bytes, offset: int) -> None:
|
||||
super().__init__(data, offset)
|
||||
self.common_reward_type = decode_short(data, offset + self._sz)
|
||||
self._sz += SHORT_OFF
|
||||
|
||||
user_common_reward_id = decode_str(data, offset + self._sz)
|
||||
self.user_common_reward_id = user_common_reward_id[0]
|
||||
self._sz += user_common_reward_id[1]
|
||||
|
||||
class PartyTeamData(BaseHelper):
|
||||
def __init__(self, data: bytes, offset: int) -> None:
|
||||
sz = 0
|
||||
user_party_team_id = decode_str(data, offset + sz)
|
||||
self.user_party_team_id = user_party_team_id[0]
|
||||
sz += user_party_team_id[1]
|
||||
|
||||
self.arrangement_num = decode_byte(data, offset + sz)
|
||||
sz += BYTE_OFF
|
||||
|
||||
user_hero_log_id = decode_str(data, offset + sz)
|
||||
self.user_hero_log_id = user_hero_log_id[0]
|
||||
sz += user_hero_log_id[1]
|
||||
|
||||
main_weapon_user_equipment_id = decode_str(data, offset + sz)
|
||||
self.main_weapon_user_equipment_id = main_weapon_user_equipment_id[0]
|
||||
sz += main_weapon_user_equipment_id[1]
|
||||
|
||||
sub_equipment_user_equipment_id = decode_str(data, offset + sz)
|
||||
self.sub_equipment_user_equipment_id = sub_equipment_user_equipment_id[0]
|
||||
sz += sub_equipment_user_equipment_id[1]
|
||||
|
||||
self.skill_slot1_skill_id = decode_int(data, offset + sz)
|
||||
sz += INT_OFF
|
||||
|
||||
self.skill_slot2_skill_id = decode_int(data, offset + sz)
|
||||
sz += INT_OFF
|
||||
|
||||
self.skill_slot3_skill_id = decode_int(data, offset + sz)
|
||||
sz += INT_OFF
|
||||
|
||||
self.skill_slot4_skill_id = decode_int(data, offset + sz)
|
||||
sz += INT_OFF
|
||||
|
||||
self.skill_slot5_skill_id = decode_int(data, offset + sz)
|
||||
sz += INT_OFF
|
||||
|
||||
self._sz = sz
|
||||
|
||||
class PartyData(BaseHelper):
|
||||
def __init__(self, data: bytes, offset: int) -> None:
|
||||
sz = 0
|
||||
user_party_id = decode_str(data, offset + sz)
|
||||
self.user_party_id = user_party_id[0]
|
||||
sz += user_party_id[1]
|
||||
|
||||
self.team_no = decode_byte(data, offset + sz)
|
||||
sz += BYTE_OFF
|
||||
|
||||
self.party_team_data_count = decode_int(data, offset + sz)
|
||||
sz += INT_OFF
|
||||
|
||||
self.party_team_data_list: List[PartyTeamData] = []
|
||||
for _ in range(self.party_team_data_count):
|
||||
tmp = PartyTeamData(data, offset + sz)
|
||||
self.party_team_data_list.append(tmp)
|
||||
sz += tmp.get_size()
|
||||
|
||||
self._sz = sz
|
||||
|
||||
class PlayStartRequestData(BaseHelper):
|
||||
def __init__(self, data: bytes, offset: int) -> None:
|
||||
sz = 0
|
||||
user_party_id = decode_str(data, offset + sz)
|
||||
self.user_party_id = user_party_id[0]
|
||||
sz += user_party_id[1]
|
||||
|
||||
appoint_leader_resource_card_code = decode_str(data, offset + sz)
|
||||
self.appoint_leader_resource_card_code = appoint_leader_resource_card_code[0]
|
||||
sz += appoint_leader_resource_card_code[1]
|
||||
|
||||
use_profile_card_code = decode_str(data, offset + sz)
|
||||
self.use_profile_card_code = use_profile_card_code[0]
|
||||
sz += use_profile_card_code[1]
|
||||
|
||||
self.quest_drop_boost_apply_flag = decode_byte(data, offset + sz)
|
||||
sz += BYTE_OFF
|
||||
|
||||
self._sz = sz
|
||||
|
||||
class GetPlayerTraceData(BaseHelper):
|
||||
def __init__(self, data: bytes, offset: int) -> None:
|
||||
user_quest_scene_player_trace_id = decode_str(data, offset)
|
||||
self.user_quest_scene_player_trace_id = user_quest_scene_player_trace_id[0]
|
||||
self._sz = user_quest_scene_player_trace_id[1]
|
||||
|
||||
class BaseGetData(BaseHelper):
|
||||
def __init__(self, data: bytes, offset: int) -> None:
|
||||
self.get_hero_log_exp = decode_int(data, offset)
|
||||
offset += INT_OFF
|
||||
|
||||
self.get_col = decode_int(data, offset)
|
||||
|
||||
self._sz = INT_OFF + INT_OFF
|
||||
|
||||
class RareDropData(BaseHelper):
|
||||
def __init__(self, data: bytes, offset: int) -> None:
|
||||
self.quest_rare_drop_id = decode_int(data, offset)
|
||||
|
||||
self._sz = INT_OFF
|
||||
|
||||
class UnanalyzedLogTmpRewardData(BaseHelper):
|
||||
def __init__(self, data: bytes, offset: int) -> None:
|
||||
self.unanalyzed_log_grade_id = decode_int(data, offset)
|
||||
|
||||
self._sz = INT_OFF
|
||||
|
||||
class SpecialRareDropData(BaseHelper):
|
||||
def __init__(self, data: bytes, offset: int) -> None:
|
||||
self.quest_special_rare_drop_id = decode_int(data, offset)
|
||||
|
||||
self._sz = INT_OFF
|
||||
|
||||
class EventItemData(BaseHelper):
|
||||
def __init__(self, data: bytes, offset: int) -> None:
|
||||
self.event_item_id = decode_int(data, offset)
|
||||
offset += INT_OFF
|
||||
self.get_num = decode_short(data, offset)
|
||||
|
||||
self._sz = INT_OFF + SHORT_OFF
|
||||
|
||||
class DiscoveryEnemyData(BaseHelper):
|
||||
def __init__(self, data: bytes, offset: int) -> None:
|
||||
self.enemy_kind_id = decode_int(data, offset)
|
||||
offset += INT_OFF
|
||||
self.destroy_num = decode_short(data, offset)
|
||||
|
||||
self._sz = INT_OFF + SHORT_OFF
|
||||
|
||||
class DestroyBossData(BaseHelper):
|
||||
def __init__(self, data: bytes, offset: int) -> None:
|
||||
self.boss_type = decode_byte(data, offset)
|
||||
offset += BYTE_OFF
|
||||
self.enemy_kind_id = decode_int(data, offset)
|
||||
offset += INT_OFF
|
||||
self.mission_difficulty_id = decode_short(data, offset)
|
||||
|
||||
self._sz = INT_OFF + SHORT_OFF + BYTE_OFF
|
||||
|
||||
class MissionData(BaseHelper):
|
||||
def __init__(self, data: bytes, offset: int) -> None:
|
||||
self.mission_id = decode_int(data, offset)
|
||||
offset += INT_OFF
|
||||
self.clear_flag = decode_byte(data, offset)
|
||||
offset += BYTE_OFF
|
||||
self.destroy_num = decode_short(data, offset)
|
||||
|
||||
self._sz = INT_OFF + SHORT_OFF + BYTE_OFF
|
||||
|
||||
class ScoreData(BaseHelper):
|
||||
def __init__(self, data: bytes, offset: int) -> None:
|
||||
super().__init__(data, offset)
|
||||
self.clear_time = decode_int(data, offset + self._sz)
|
||||
self._sz += INT_OFF
|
||||
|
||||
self.combo_num = decode_int(data, offset + self._sz)
|
||||
self._sz += INT_OFF
|
||||
|
||||
total_damage = decode_str(data, offset + self._sz)
|
||||
self.total_damage = total_damage[0]
|
||||
self._sz += total_damage[1]
|
||||
|
||||
self.concurrent_destroying_num = decode_short(data, offset + self._sz)
|
||||
self._sz += SHORT_OFF
|
||||
|
||||
self.reaching_skill_level = decode_short(data, offset + self._sz)
|
||||
self._sz += SHORT_OFF
|
||||
|
||||
self.ko_chara_num = decode_byte(data, offset + self._sz)
|
||||
self._sz += BYTE_OFF
|
||||
|
||||
self.acceleration_invocation_num = decode_short(data, offset + self._sz)
|
||||
self._sz += SHORT_OFF
|
||||
|
||||
self.boss_destroying_num = decode_short(data, offset + self._sz)
|
||||
self._sz += SHORT_OFF
|
||||
|
||||
self.synchro_skill_used_flag = decode_byte(data, offset + self._sz)
|
||||
self._sz += BYTE_OFF
|
||||
|
||||
self.used_friend_skill_id = decode_int(data, offset + self._sz)
|
||||
self._sz += INT_OFF
|
||||
|
||||
self.friend_skill_used_flag = decode_byte(data, offset + self._sz)
|
||||
self._sz += BYTE_OFF
|
||||
|
||||
self.continue_cnt = decode_short(data, offset + self._sz)
|
||||
self._sz += SHORT_OFF
|
||||
|
||||
self.total_loss_num = decode_short(data, offset + self._sz)
|
||||
self._sz += SHORT_OFF
|
||||
|
||||
class PlayEndRequestData(BaseHelper):
|
||||
def __init__(self, data: bytes, offset: int) -> None:
|
||||
sz = 0
|
||||
self.play_result_flag = decode_byte(data, offset + sz)
|
||||
sz += BYTE_OFF
|
||||
|
||||
self.base_get_data_count = decode_int(data, offset + sz)
|
||||
sz += INT_OFF
|
||||
|
||||
self.base_get_data_list: List[BaseGetData] = []
|
||||
for _ in range(self.base_get_data_count):
|
||||
tmp = BaseGetData(data, offset + sz)
|
||||
sz += tmp.get_size()
|
||||
self.base_get_data_list.append(tmp)
|
||||
|
||||
self.get_player_trace_data_count = decode_int(data, offset + sz)
|
||||
sz += INT_OFF
|
||||
|
||||
self.get_player_trace_data: List[GetPlayerTraceData] = []
|
||||
for _ in range(self.get_player_trace_data_count):
|
||||
tmp = GetPlayerTraceData(data, offset + sz)
|
||||
sz += tmp.get_size()
|
||||
self.get_player_trace_data.append(tmp)
|
||||
|
||||
self.get_rare_drop_data_count = decode_int(data, offset + sz)
|
||||
sz += INT_OFF
|
||||
|
||||
self.get_rare_drop_data_list: List[RareDropData] = []
|
||||
for _ in range(self.get_rare_drop_data_count):
|
||||
tmp = RareDropData(data, offset + sz)
|
||||
sz += tmp.get_size()
|
||||
self.get_rare_drop_data_list.append(tmp)
|
||||
|
||||
self.get_special_rare_drop_data_count = decode_int(data, offset + sz)
|
||||
sz += INT_OFF
|
||||
|
||||
self.get_special_rare_drop_data_list: List[SpecialRareDropData] = []
|
||||
for _ in range(self.get_special_rare_drop_data_count):
|
||||
tmp = SpecialRareDropData(data, offset + sz)
|
||||
sz += tmp.get_size()
|
||||
self.get_special_rare_drop_data_list.append(tmp)
|
||||
|
||||
self.get_unanalyzed_log_tmp_reward_data_count = decode_int(data, offset + sz)
|
||||
sz += INT_OFF
|
||||
|
||||
self.get_unanalyzed_log_tmp_reward_data_list: List[UnanalyzedLogTmpRewardData] = []
|
||||
for _ in range(self.get_unanalyzed_log_tmp_reward_data_count):
|
||||
tmp = UnanalyzedLogTmpRewardData(data, offset + sz)
|
||||
sz += tmp.get_size()
|
||||
self.get_unanalyzed_log_tmp_reward_data_list.append(tmp)
|
||||
|
||||
self.get_event_item_data_count = decode_int(data, offset + sz)
|
||||
sz += INT_OFF
|
||||
|
||||
self.get_event_item_data_list: List[EventItemData] = []
|
||||
for _ in range(self.get_event_item_data_count):
|
||||
tmp = EventItemData(data, offset + sz)
|
||||
sz += tmp.get_size()
|
||||
self.get_event_item_data_list.append(tmp)
|
||||
|
||||
self.discovery_enemy_data_count = decode_int(data, offset + sz)
|
||||
sz += INT_OFF
|
||||
|
||||
self.discovery_enemy_data_list: List[DiscoveryEnemyData] = []
|
||||
for _ in range(self.discovery_enemy_data_count):
|
||||
tmp = DiscoveryEnemyData(data, offset + sz)
|
||||
sz += tmp.get_size()
|
||||
self.discovery_enemy_data_list.append(tmp)
|
||||
|
||||
self.destroy_boss_data_count = decode_int(data, offset + sz)
|
||||
sz += INT_OFF
|
||||
|
||||
self.destroy_boss_data_list: List[DestroyBossData] = []
|
||||
for _ in range(self.destroy_boss_data_count):
|
||||
tmp = DestroyBossData(data, offset + sz)
|
||||
sz += tmp.get_size()
|
||||
self.destroy_boss_data_list.append(tmp)
|
||||
|
||||
self.mission_data_count = decode_int(data, offset + sz)
|
||||
sz += INT_OFF
|
||||
|
||||
self.mission_data_list: List[MissionData] = []
|
||||
for _ in range(self.mission_data_count):
|
||||
tmp = MissionData(data, offset + sz)
|
||||
sz += tmp.get_size()
|
||||
self.mission_data_list.append(tmp)
|
||||
|
||||
self.score_data_count = decode_int(data, offset + sz)
|
||||
sz += INT_OFF
|
||||
|
||||
self.score_data_list: List[ScoreData] = []
|
||||
for _ in range(self.score_data_count):
|
||||
tmp = ScoreData(data, offset + sz)
|
||||
sz += tmp.get_size()
|
||||
self.score_data_list.append(tmp)
|
||||
|
||||
self._sz = sz
|
||||
|
||||
class EntryUserData(BaseHelper):
|
||||
def __init__(self, data: bytes, offset: int) -> None:
|
||||
super().__init__(data, offset)
|
||||
store_id = decode_str(data, offset + self._sz)
|
||||
self.store_id = store_id[0]
|
||||
self._sz += store_id[1]
|
||||
|
||||
user_id = decode_str(data, offset + self._sz)
|
||||
self.user_id = user_id[0]
|
||||
self._sz += user_id[1]
|
||||
|
||||
self.host_flag = decode_byte(data, offset + self._sz)
|
||||
self._sz += BYTE_OFF
|
||||
|
||||
class MultiPlayStartRequestData(BaseHelper):
|
||||
def __init__(self, data: bytes, offset: int) -> None:
|
||||
super().__init__(data, offset)
|
||||
room_id = decode_str(data, offset + self._sz)
|
||||
self.room_id = room_id[0]
|
||||
self._sz += room_id[1]
|
||||
|
||||
self.matching_mode = decode_byte(data, offset + self._sz)
|
||||
self._sz += BYTE_OFF
|
||||
|
||||
self.entry_user_data_count = decode_int(data, offset + self._sz)
|
||||
self._sz += INT_OFF
|
||||
|
||||
self.entry_user_data_list: List[EntryUserData] = []
|
||||
for _ in range(self.entry_user_data_count):
|
||||
tmp = EntryUserData(data, offset + self._sz)
|
||||
self._sz += tmp.get_size()
|
||||
self.entry_user_data_list.append(tmp)
|
||||
|
||||
class MultiPlayEndRequestData(BaseHelper):
|
||||
def __init__(self, data: bytes, offset: int) -> None:
|
||||
super().__init__(data, offset)
|
||||
self.dummy_1 = decode_byte(data, offset + self._sz)
|
||||
self._sz += BYTE_OFF
|
||||
self.dummy_2 = decode_byte(data, offset + self._sz)
|
||||
self._sz += BYTE_OFF
|
||||
self.dummy_3 = decode_byte(data, offset + self._sz)
|
||||
self._sz += BYTE_OFF
|
||||
|
||||
class SalesResourceData(BaseHelper):
|
||||
def __init__(self, data: bytes, offset: int) -> None:
|
||||
super().__init__(data, offset)
|
||||
self.common_reward_type = decode_short(data, offset + self._sz)
|
||||
self._sz += SHORT_OFF
|
||||
self.common_reward_id = decode_int(data, offset + self._sz)
|
||||
self._sz += INT_OFF
|
||||
|
||||
self.property1_property_id = decode_int(data, offset + self._sz)
|
||||
self._sz += INT_OFF
|
||||
self.property1_value1 = decode_int(data, offset + self._sz)
|
||||
self._sz += INT_OFF
|
||||
self.property1_value2 = decode_int(data, offset + self._sz)
|
||||
self._sz += INT_OFF
|
||||
|
||||
self.property2_property_id = decode_int(data, offset + self._sz)
|
||||
self._sz += INT_OFF
|
||||
self.property2_value1 = decode_int(data, offset + self._sz)
|
||||
self._sz += INT_OFF
|
||||
self.property2_value2 = decode_int(data, offset + self._sz)
|
||||
self._sz += INT_OFF
|
||||
|
||||
self.property3_property_id = decode_int(data, offset + self._sz)
|
||||
self._sz += INT_OFF
|
||||
self.property3_value1 = decode_int(data, offset + self._sz)
|
||||
self._sz += INT_OFF
|
||||
self.property3_value2 = decode_int(data, offset + self._sz)
|
||||
self._sz += INT_OFF
|
||||
|
||||
self.property4_property_id = decode_int(data, offset + self._sz)
|
||||
self._sz += INT_OFF
|
||||
self.property4_value1 = decode_int(data, offset + self._sz)
|
||||
self._sz += INT_OFF
|
||||
self.property4_value2 = decode_int(data, offset + self._sz)
|
||||
self._sz += INT_OFF
|
||||
|
||||
@classmethod
|
||||
def from_args(cls, reward_type: int = 0, reward_id: int = 0) -> "SalesResourceData":
|
||||
ret = cls(b"\x00" * 54, 0)
|
||||
ret.common_reward_type = reward_type # short
|
||||
ret.common_reward_id = reward_id # int
|
||||
|
||||
return ret
|
||||
|
||||
def make(self) -> bytes:
|
||||
ret = b""
|
||||
ret += encode_short(self.common_reward_type)
|
||||
ret += encode_int(self.common_reward_id)
|
||||
|
||||
ret += encode_int(self.property1_property_id)
|
||||
ret += encode_int(self.property1_value1)
|
||||
ret += encode_int(self.property1_value2)
|
||||
|
||||
ret += encode_int(self.property2_property_id)
|
||||
ret += encode_int(self.property2_value1)
|
||||
ret += encode_int(self.property2_value2)
|
||||
|
||||
ret += encode_int(self.property3_property_id)
|
||||
ret += encode_int(self.property3_value1)
|
||||
ret += encode_int(self.property3_value2)
|
||||
|
||||
ret += encode_int(self.property4_property_id)
|
||||
ret += encode_int(self.property4_value1)
|
||||
ret += encode_int(self.property4_value2)
|
||||
|
||||
class ShopResourceSalesData(BaseHelper):
|
||||
def __init__(self, data: bytes, offset: int) -> None:
|
||||
super().__init__(data, offset)
|
||||
user_shop_resource_id = decode_str(data, offset + self._sz)
|
||||
self.user_shop_resource_id = user_shop_resource_id[0]
|
||||
self._sz = user_shop_resource_id[1]
|
||||
|
||||
discharge_user_id = decode_str(data, offset + self._sz)
|
||||
self.discharge_user_id = discharge_user_id[0]
|
||||
self._sz = discharge_user_id[1]
|
||||
|
||||
self.remaining_num = decode_short(data, offset + self._sz)
|
||||
self._sz += SHORT_OFF
|
||||
self.purchase_num = decode_short(data, offset + self._sz)
|
||||
self._sz += SHORT_OFF
|
||||
|
||||
sales_start_date = decode_str(data, offset + self._sz)
|
||||
self.sales_start_date = prs_dt(sales_start_date[0])
|
||||
self._sz = sales_start_date[1]
|
||||
|
||||
sales_resource_data_list = decode_arr_cls(data, offset + self._sz, SalesResourceData)
|
||||
self.sales_resource_data_list: List[SalesResourceData] = sales_resource_data_list[0]
|
||||
self._sz += sales_resource_data_list[1]
|
||||
|
||||
@classmethod
|
||||
def from_args(cls, resource_id: str = "0", discharge_id: str = "0", remaining: int = 0, purchased: int = 0) -> "ShopResourceSalesData":
|
||||
ret = cls(b"\x00" * 20, 0)
|
||||
ret.user_shop_resource_id = resource_id
|
||||
ret.discharge_user_id = discharge_id
|
||||
ret.remaining_num = remaining # short
|
||||
ret.purchase_num = purchased # short
|
||||
ret.sales_start_date = prs_dt()
|
||||
|
||||
def make(self) -> bytes:
|
||||
ret = encode_str(self.user_shop_resource_id)
|
||||
ret += encode_str(self.discharge_user_id)
|
||||
ret += encode_short(self.remaining_num)
|
||||
ret += encode_short(self.purchase_num)
|
||||
ret += encode_str(fmt_dt(self.sales_start_date))
|
||||
ret += encode_arr_cls(self.sales_resource_data_list)
|
||||
return ret
|
||||
|
||||
class YuiMedalShopUserData(BaseHelper):
|
||||
def __init__(self, data: bytes, offset: int) -> None:
|
||||
super().__init__(data, offset)
|
||||
self.yui_medal_shop_id = decode_int(data, offset + self._sz)
|
||||
self._sz += INT_OFF
|
||||
|
||||
self.purchase_num = decode_int(data, offset + self._sz)
|
||||
self._sz += INT_OFF
|
||||
|
||||
last_purchase_date = decode_str(data, offset + self._sz)
|
||||
self.last_purchase_date = last_purchase_date[0]
|
||||
self._sz += last_purchase_date[1]
|
||||
|
||||
@classmethod
|
||||
def from_args(cls, yui_medal_shop_id: int = 0, purchase_num: int = 0, last_purchase_date: datetime = datetime.fromtimestamp(0)) -> "YuiMedalShopUserData":
|
||||
ret = cls(b"\x00" * 20, 0)
|
||||
ret.yui_medal_shop_id = yui_medal_shop_id
|
||||
ret.purchase_num = purchase_num
|
||||
ret.last_purchase_date = last_purchase_date
|
||||
return ret
|
||||
|
||||
def make(self) -> bytes:
|
||||
ret = encode_int(self.yui_medal_shop_id)
|
||||
ret += encode_int(self.purchase_num)
|
||||
ret += encode_str(fmt_dt(self.last_purchase_date))
|
||||
return ret
|
||||
|
||||
class GashaMedalShopUserData(BaseHelper):
|
||||
def __init__(self, data: bytes, offset: int) -> None:
|
||||
super().__init__(data, offset)
|
||||
self.gasha_medal_shop_id = decode_int(data, offset + self._sz)
|
||||
self._sz += INT_OFF
|
||||
|
||||
self.purchase_num = decode_int(data, offset + self._sz)
|
||||
self._sz += INT_OFF
|
||||
|
||||
@classmethod
|
||||
def from_args(cls, gasha_medal_shop_id: int = 0, purchase_num: int = 0) -> "GashaMedalShopUserData":
|
||||
ret = cls(b"\x00" * 20, 0)
|
||||
ret.gasha_medal_shop_id = gasha_medal_shop_id
|
||||
ret.purchase_num = purchase_num
|
||||
return ret
|
||||
|
||||
def make(self) -> bytes:
|
||||
ret = encode_int(self.gasha_medal_shop_id)
|
||||
ret += encode_int(self.purchase_num)
|
||||
return ret
|
||||
|
||||
class YuiMedalShopData(BaseHelper):
|
||||
def __init__(self, data: bytes, offset: int) -> None:
|
||||
super().__init__(data, offset)
|
||||
self.yui_medal_shop_id = decode_int(data, offset + self._sz)
|
||||
|
||||
name = decode_str(data, offset + self._sz)
|
||||
self.name = name[0]
|
||||
self._sz += name[1]
|
||||
|
||||
description = decode_str(data, offset + self._sz)
|
||||
self.description = description[0]
|
||||
self._sz += description[1]
|
||||
|
||||
self.selling_yui_medal = decode_short(data, offset + self._sz)
|
||||
self._sz += SHORT_OFF
|
||||
self.selling_col = decode_int(data, offset + self._sz)
|
||||
self._sz += INT_OFF
|
||||
self.selling_event_item_id = decode_int(data, offset + self._sz)
|
||||
self._sz += INT_OFF
|
||||
self.selling_event_item_num = decode_int(data, offset + self._sz)
|
||||
self._sz += INT_OFF
|
||||
self.selling_ticket_num = decode_int(data, offset + self._sz)
|
||||
self._sz += INT_OFF
|
||||
self.purchase_limit = decode_short(data, offset + self._sz)
|
||||
self._sz += SHORT_OFF
|
||||
self.pick_up_flag = decode_byte(data, offset + self._sz)
|
||||
self._sz += BYTE_OFF
|
||||
self.product_category = decode_byte(data, offset + self._sz)
|
||||
self._sz += BYTE_OFF
|
||||
self.sales_type = decode_byte(data, offset + self._sz)
|
||||
self._sz += BYTE_OFF
|
||||
self.target_days = decode_byte(data, offset + self._sz)
|
||||
self._sz += BYTE_OFF
|
||||
self.target_hour = decode_byte(data, offset + self._sz)
|
||||
self._sz += BYTE_OFF
|
||||
self.interval_hour = decode_byte(data, offset + self._sz)
|
||||
self._sz += BYTE_OFF
|
||||
|
||||
sales_start_date = decode_str(data, offset + self._sz)
|
||||
self.sales_start_date = prs_dt(sales_start_date[0])
|
||||
self._sz += sales_start_date[1]
|
||||
|
||||
sales_end_date = decode_str(data, offset + self._sz)
|
||||
self.sales_end_date = prs_dt(sales_end_date[0])
|
||||
self._sz += sales_end_date[1]
|
||||
|
||||
self.sort = decode_byte(data, offset + self._sz)
|
||||
|
||||
@classmethod
|
||||
def from_args(cls, shop_id: int = 0, name: str = "", desc: str = "") -> "YuiMedalShopData":
|
||||
ret = cls(b"\x00" * 43, 0)
|
||||
ret.yui_medal_shop_id = shop_id
|
||||
ret.name = name
|
||||
ret.description = desc
|
||||
return ret
|
||||
|
||||
def make(self) -> bytes:
|
||||
ret = encode_int(self.yui_medal_shop_id)
|
||||
ret += encode_str(self.name)
|
||||
ret += encode_str(self.description)
|
||||
ret += encode_short(self.selling_yui_medal)
|
||||
ret += encode_int(self.selling_col)
|
||||
ret += encode_int(self.selling_event_item_id)
|
||||
ret += encode_int(self.selling_event_item_num)
|
||||
ret += encode_int(self.selling_ticket_num)
|
||||
ret += encode_short(self.purchase_limit)
|
||||
ret += encode_byte(self.pick_up_flag)
|
||||
ret += encode_byte(self.product_category)
|
||||
ret += encode_byte(self.sales_type)
|
||||
ret += encode_byte(self.target_days)
|
||||
ret += encode_byte(self.target_hour)
|
||||
ret += encode_byte(self.interval_hour)
|
||||
ret += encode_str(fmt_dt(self.sales_start_date))
|
||||
ret += encode_str(fmt_dt(self.sales_end_date))
|
||||
ret += encode_byte(self.sort)
|
||||
return ret
|
||||
|
||||
class YuiMedalShopItemData(BaseHelper):
|
||||
def __init__(self, data: bytes, offset: int) -> None:
|
||||
super().__init__(data, offset)
|
||||
self.yui_medal_shop_item_id = decode_int(data, offset + self._sz)
|
||||
self._sz += INT_OFF
|
||||
self.yui_medal_shop_id = decode_int(data, offset + self._sz)
|
||||
self._sz += INT_OFF
|
||||
self.common_reward_type = decode_byte(data, offset + self._sz)
|
||||
self._sz += BYTE_OFF
|
||||
self.common_reward_id = decode_int(data, offset + self._sz)
|
||||
self._sz += INT_OFF
|
||||
self.common_reward_num = decode_short(data, offset + self._sz)
|
||||
self._sz += SHORT_OFF
|
||||
self.strength = decode_int(data, offset + self._sz)
|
||||
self._sz += INT_OFF
|
||||
|
||||
self.property1_property_id = decode_int(data, offset + self._sz)
|
||||
self._sz += INT_OFF
|
||||
self.property1_value1 = decode_int(data, offset + self._sz)
|
||||
self._sz += INT_OFF
|
||||
self.property1_value2 = decode_int(data, offset + self._sz)
|
||||
self._sz += INT_OFF
|
||||
|
||||
self.property2_property_id = decode_int(data, offset + self._sz)
|
||||
self._sz += INT_OFF
|
||||
self.property2_value1 = decode_int(data, offset + self._sz)
|
||||
self._sz += INT_OFF
|
||||
self.property2_value2 = decode_int(data, offset + self._sz)
|
||||
self._sz += INT_OFF
|
||||
|
||||
self.property3_property_id = decode_int(data, offset + self._sz)
|
||||
self._sz += INT_OFF
|
||||
self.property3_value1 = decode_int(data, offset + self._sz)
|
||||
self._sz += INT_OFF
|
||||
self.property3_value2 = decode_int(data, offset + self._sz)
|
||||
self._sz += INT_OFF
|
||||
|
||||
self.property4_property_id = decode_int(data, offset + self._sz)
|
||||
self._sz += INT_OFF
|
||||
self.property4_value1 = decode_int(data, offset + self._sz)
|
||||
self._sz += INT_OFF
|
||||
self.property4_value2 = decode_int(data, offset + self._sz)
|
||||
self._sz += INT_OFF
|
||||
|
||||
@classmethod
|
||||
def from_args(cls, item_id: int = 0, shop_id: int = 0, reward_type: int = 0, reward_id: int = 0, reward_num: int = 0, strength: int = 0) -> "YuiMedalShopItemData":
|
||||
ret = cls(b"\x00" * 67, 0)
|
||||
ret.yui_medal_shop_item_id = item_id
|
||||
ret.yui_medal_shop_id = shop_id
|
||||
ret.common_reward_type = reward_type
|
||||
ret.common_reward_id = reward_id
|
||||
ret.common_reward_num = reward_num
|
||||
ret.strength = strength
|
||||
return ret
|
||||
|
||||
def make(self) -> bytes:
|
||||
ret = encode_int(self.yui_medal_shop_item_id)
|
||||
ret += encode_int(self.yui_medal_shop_id)
|
||||
ret += encode_byte(self.common_reward_type)
|
||||
ret += encode_int(self.common_reward_id)
|
||||
ret += encode_short(self.common_reward_num)
|
||||
ret += encode_int(self.strength)
|
||||
|
||||
ret += encode_int(self.property1_property_id)
|
||||
ret += encode_int(self.property1_value1)
|
||||
ret += encode_int(self.property1_value2)
|
||||
|
||||
ret += encode_int(self.property2_property_id)
|
||||
ret += encode_int(self.property2_value1)
|
||||
ret += encode_int(self.property2_value2)
|
||||
|
||||
ret += encode_int(self.property3_property_id)
|
||||
ret += encode_int(self.property3_value1)
|
||||
ret += encode_int(self.property3_value2)
|
||||
|
||||
ret += encode_int(self.property4_property_id)
|
||||
ret += encode_int(self.property4_value1)
|
||||
ret += encode_int(self.property4_value2)
|
||||
return ret
|
||||
|
||||
class ResEarnCampaignShop(BaseHelper):
|
||||
def __init__(self, data: bytes, offset: int) -> None:
|
||||
super().__init__(data, offset)
|
||||
self.res_earn_campaign_shop_id = decode_int(data, offset + self._sz)
|
||||
self._sz += INT_OFF
|
||||
self.res_earn_campaign_application_id = decode_int(data, offset + self._sz)
|
||||
self._sz += INT_OFF
|
||||
|
||||
name = decode_str(data, offset + self._sz)
|
||||
self.name = name[0]
|
||||
self._sz += name[1]
|
||||
|
||||
self.selling_yui_medal = decode_short(data, offset + self._sz)
|
||||
self._sz += SHORT_OFF
|
||||
self.selling_col = decode_int(data, offset + self._sz)
|
||||
self._sz += INT_OFF
|
||||
self.selling_event_item_id = decode_int(data, offset + self._sz)
|
||||
self._sz += INT_OFF
|
||||
self.selling_event_item_num = decode_int(data, offset + self._sz)
|
||||
self._sz += INT_OFF
|
||||
self.purchase_limit = decode_short(data, offset + self._sz)
|
||||
self._sz += SHORT_OFF
|
||||
self.get_application_point = decode_short(data, offset + self._sz)
|
||||
self._sz += SHORT_OFF
|
||||
|
||||
sales_start_date = decode_str(data, offset + self._sz)
|
||||
self.sales_start_date = prs_dt(sales_start_date[0])
|
||||
self._sz += sales_start_date[1]
|
||||
|
||||
sales_end_date = decode_str(data, offset + self._sz)
|
||||
self.sales_end_date = prs_dt(sales_end_date[0])
|
||||
self._sz += sales_end_date[1]
|
||||
|
||||
@classmethod
|
||||
def from_args(cls, shop_id: int = 0, app_id: int = 0, name: str = "") -> "ResEarnCampaignShop":
|
||||
ret = cls(b"\x00" * 26, 0)
|
||||
ret.res_earn_campaign_shop_id = shop_id
|
||||
ret.res_earn_campaign_application_id = app_id
|
||||
ret.name = name
|
||||
return ret
|
||||
|
||||
def make(self) -> bytes:
|
||||
ret = encode_int(self.res_earn_campaign_shop_id)
|
||||
ret = encode_int(self.res_earn_campaign_application_id)
|
||||
ret += encode_str(self.name)
|
||||
ret += encode_short(self.selling_yui_medal)
|
||||
ret += encode_int(self.selling_col)
|
||||
ret += encode_int(self.selling_event_item_id)
|
||||
ret += encode_int(self.selling_event_item_num)
|
||||
ret += encode_short(self.purchase_limit)
|
||||
ret += encode_short(self.get_application_point)
|
||||
ret += encode_str(fmt_dt(self.sales_start_date))
|
||||
ret += encode_str(fmt_dt(self.sales_end_date))
|
||||
return ret
|
||||
|
||||
class GashaMedalShop(BaseHelper):
|
||||
def __init__(self, data: bytes, offset: int) -> None:
|
||||
super().__init__(data, offset)
|
||||
self.gasha_medal_shop_id = decode_int(data, offset + self._sz)
|
||||
self._sz += INT_OFF
|
||||
|
||||
name = decode_str(data, offset + self._sz)
|
||||
self.name = name[0]
|
||||
self._sz += name[1]
|
||||
|
||||
self.gasha_medal_id = decode_int(data, offset + self._sz)
|
||||
self._sz += INT_OFF
|
||||
self.use_gasha_medal_num = decode_int(data, offset + self._sz)
|
||||
self._sz += INT_OFF
|
||||
self.purchase_limit = decode_short(data, offset + self._sz)
|
||||
self._sz += SHORT_OFF
|
||||
|
||||
sales_start_date = decode_str(data, offset + self._sz)
|
||||
self.sales_start_date = prs_dt(sales_start_date[0])
|
||||
self._sz += sales_start_date[1]
|
||||
|
||||
sales_end_date = decode_str(data, offset + self._sz)
|
||||
self.sales_end_date = prs_dt(sales_end_date[0])
|
||||
self._sz += sales_end_date[1]
|
||||
|
||||
@classmethod
|
||||
def from_args(cls, shop_id: int = 0, name: str = "", medal_id: int = 0, medal_num: int = 0, purchase_limit: int = 0) -> "GashaMedalShop":
|
||||
ret = cls(b"\x00" * 26, 0)
|
||||
ret.gasha_medal_shop_id = shop_id
|
||||
ret.name = name
|
||||
ret.gasha_medal_id = medal_id
|
||||
ret.use_gasha_medal_num = medal_num
|
||||
ret.purchase_limit = purchase_limit
|
||||
return ret
|
||||
|
||||
def make(self) -> bytes:
|
||||
ret = encode_int(self.gasha_medal_shop_id)
|
||||
ret += encode_str(self.name)
|
||||
ret += encode_int(self.gasha_medal_id)
|
||||
ret += encode_int(self.use_gasha_medal_num)
|
||||
ret += encode_short(self.purchase_limit)
|
||||
ret += encode_str(fmt_dt(self.sales_start_date))
|
||||
ret += encode_str(fmt_dt(self.sales_end_date))
|
||||
return ret
|
@ -4,6 +4,9 @@ import yaml
|
||||
import logging, coloredlogs
|
||||
from logging.handlers import TimedRotatingFileHandler
|
||||
from os import path
|
||||
from Crypto.Cipher import Blowfish
|
||||
from hashlib import md5
|
||||
import secrets
|
||||
|
||||
from core import CoreConfig, Utils
|
||||
from core.title import BaseServlet
|
||||
@ -47,11 +50,15 @@ class SaoServlet(BaseServlet):
|
||||
self.logger.inited = True
|
||||
|
||||
self.base = SaoBase(core_cfg, self.game_cfg)
|
||||
self.static_hash = None
|
||||
|
||||
if self.game_cfg.hash.verify_hash:
|
||||
self.static_hash = md5(self.game_cfg.hash.hash_base.encode()).digest() # Greate hashing guys, really validates the data
|
||||
|
||||
def get_endpoint_matchers(self) -> Tuple[List[Tuple[str, str, Dict]], List[Tuple[str, str, Dict]]]:
|
||||
return (
|
||||
[],
|
||||
[("render_POST", "/SaoServlet/{datecode}/proto/if/{endpoint}", {})]
|
||||
[("render_POST", "/{datecode}/proto/if/{category}/{endpoint}", {})]
|
||||
)
|
||||
|
||||
@classmethod
|
||||
@ -69,10 +76,13 @@ class SaoServlet(BaseServlet):
|
||||
return True
|
||||
|
||||
def get_allnet_info(self, game_code: str, game_ver: int, keychip: str) -> Tuple[str, str]:
|
||||
return (
|
||||
f"http://{self.game_cfg.server.hostname}:{self.game_cfg.server.port}/SaoServlet/",
|
||||
f"{self.game_cfg.server.hostname}/SaoServlet/",
|
||||
)
|
||||
if not self.core_cfg.server.is_using_proxy and Utils.get_title_port_ssl(self.core_cfg):
|
||||
return (
|
||||
f"https://{self.core_cfg.title.hostname}:{self.core_cfg.title.port_ssl}/",
|
||||
f"{self.core_cfg.title.hostname}/",
|
||||
)
|
||||
|
||||
return (f"http://{self.core_cfg.title.hostname}:{self.core_cfg.title.port}/", "")
|
||||
|
||||
def get_mucha_info(self, core_cfg: CoreConfig, cfg_dir: str) -> Tuple[bool, str]:
|
||||
if not self.game_cfg.server.enable:
|
||||
@ -80,23 +90,62 @@ class SaoServlet(BaseServlet):
|
||||
|
||||
return (True, "SAO1")
|
||||
|
||||
|
||||
def render_POST(self, request: Request, game_code: str, matchers: Dict) -> bytes:
|
||||
endpoint = matchers.get('endpoint', '')
|
||||
request.responseHeaders.addRawHeader(b"content-type", b"text/html; charset=utf-8")
|
||||
iv = b""
|
||||
|
||||
sao_request = request.content.getvalue().hex()
|
||||
req_raw = request.content.read()
|
||||
sao_request = req_raw.hex()
|
||||
req_header = SaoRequestHeader(req_raw)
|
||||
|
||||
cmd_str = f"{req_header.cmd:04x}"
|
||||
|
||||
if self.game_cfg.hash.verify_hash and self.static_hash != req_header.hash:
|
||||
self.logger.error(f"Hash mismatch! Expecting {self.static_hash} but recieved {req_header.hash}")
|
||||
return b""
|
||||
|
||||
if self.game_cfg.crypt.enable:
|
||||
iv = req_raw[40:48]
|
||||
cipher = Blowfish.new(self.game_cfg.crypt.key.encode(), Blowfish.MODE_CBC, iv)
|
||||
crypt_data = req_raw[48:]
|
||||
req_data = cipher.decrypt(crypt_data)
|
||||
self.logger.debug(f"Decrypted {req_data.hex()} with IV {iv.hex()}")
|
||||
|
||||
else:
|
||||
req_data = req_raw[40:]
|
||||
|
||||
handler = getattr(self.base, f"handle_{sao_request[:4]}", None)
|
||||
if handler is None:
|
||||
self.logger.info(f"Generic Handler for {endpoint} - {sao_request[:4]}")
|
||||
self.logger.debug(f"Request: {request.content.getvalue().hex()}")
|
||||
resp = SaoNoopResponse(int.from_bytes(bytes.fromhex(sao_request[:4]), "big")+1)
|
||||
self.logger.debug(f"Response: {resp.make().hex()}")
|
||||
return resp.make()
|
||||
handler = getattr(self.base, f"handle_{cmd_str}", self.base.handle_noop)
|
||||
self.logger.info(f"{endpoint} - {cmd_str} request")
|
||||
self.logger.debug(f"Request: {req_raw.hex()}")
|
||||
resp = handler(req_header, req_data)
|
||||
|
||||
self.logger.info(f"Handler {endpoint} - {sao_request[:4]} request")
|
||||
self.logger.debug(f"Request: {request.content.getvalue().hex()}")
|
||||
resp = handler(sao_request)
|
||||
if resp is None:
|
||||
resp = SaoNoopResponse(req_header.cmd + 1).make()
|
||||
|
||||
if type(resp) == bytes:
|
||||
pass
|
||||
|
||||
elif issubclass(resp, SaoBaseResponse):
|
||||
resp = resp.make()
|
||||
|
||||
else:
|
||||
self.logger.error(f"Unknown response type {type(resp)}")
|
||||
return b""
|
||||
|
||||
self.logger.debug(f"Response: {resp.hex()}")
|
||||
|
||||
if self.game_cfg.crypt.enable:
|
||||
iv = secrets.token_bytes(8)
|
||||
data_to_crypt = resp[24:]
|
||||
while len(data_to_crypt) % 8 != 0:
|
||||
data_to_crypt += b"\x00"
|
||||
|
||||
cipher = Blowfish.new(self.game_cfg.crypt.key.encode(), Blowfish.MODE_CBC, iv)
|
||||
data_crypt = cipher.encrypt(data_to_crypt)
|
||||
crypt_data_len = len(data_crypt) + len(iv)
|
||||
tmp = struct.pack("!I", crypt_data_len) # does it want the length of the encrypted response??
|
||||
resp = resp[:20] + tmp + iv + data_crypt
|
||||
self.logger.debug(f"Encrypted Response: {resp.hex()}")
|
||||
|
||||
return resp
|
@ -96,6 +96,7 @@ class WaccaBase:
|
||||
|
||||
def handle_housing_start_request(self, data: Dict) -> Dict:
|
||||
req = HousingStartRequestV1(data)
|
||||
allnet_region_id = None
|
||||
|
||||
machine = self.data.arcade.get_machine(req.chipId)
|
||||
if machine is not None:
|
||||
@ -235,6 +236,11 @@ class WaccaBase:
|
||||
|
||||
if profileId is None:
|
||||
return BaseResponse().make()
|
||||
|
||||
if profileId == 0:
|
||||
# We've already made this profile, just return success
|
||||
new_user = self.data.profile.get_profile(aime_id=req.aimeId)
|
||||
profileId = new_user['id']
|
||||
|
||||
# Insert starting items
|
||||
self.data.item.put_item(req.aimeId, WaccaConstants.ITEM_TYPES["title"], 104001)
|
||||
@ -255,25 +261,11 @@ class WaccaBase:
|
||||
self.data.item.put_item(
|
||||
req.aimeId, WaccaConstants.ITEM_TYPES["note_sound"], 105001
|
||||
)
|
||||
self.data.item.put_item(
|
||||
req.aimeId, WaccaConstants.ITEM_TYPES["note_sound"], 205005
|
||||
) # Added lily
|
||||
|
||||
self.data.item.put_item(
|
||||
req.aimeId, WaccaConstants.ITEM_TYPES["navigator"], 210001
|
||||
)
|
||||
|
||||
self.data.item.put_item(
|
||||
req.aimeId, WaccaConstants.ITEM_TYPES["user_plate"], 211001
|
||||
) # Added lily
|
||||
|
||||
self.data.item.put_item(
|
||||
req.aimeId, WaccaConstants.ITEM_TYPES["touch_effect"], 312000
|
||||
) # Added reverse
|
||||
self.data.item.put_item(
|
||||
req.aimeId, WaccaConstants.ITEM_TYPES["touch_effect"], 312001
|
||||
) # Added reverse
|
||||
|
||||
return UserStatusCreateResponseV2(profileId, req.username).make()
|
||||
|
||||
def handle_user_status_getDetail_request(self, data: Dict) -> Dict:
|
||||
|
@ -32,6 +32,8 @@ class HousingStartRequestV1(BaseRequest):
|
||||
class HousingStartRequestV2(HousingStartRequestV1):
|
||||
def __init__(self, data: Dict) -> None:
|
||||
super(HousingStartRequestV1, self).__init__(data)
|
||||
self.unknown0: str = self.params[0]
|
||||
self.errorLog: str = self.params[1]
|
||||
self.creditLog: str = self.params[2]
|
||||
self.info: List[HousingInfo] = []
|
||||
|
||||
|
@ -7,6 +7,8 @@ from hashlib import md5
|
||||
from twisted.web.http import Request
|
||||
from typing import Dict, Tuple, List
|
||||
from os import path
|
||||
import traceback
|
||||
import sys
|
||||
|
||||
from core import CoreConfig, Utils
|
||||
from .config import WaccaConfig
|
||||
@ -17,7 +19,7 @@ from .lilyr import WaccaLilyR
|
||||
from .lily import WaccaLily
|
||||
from .s import WaccaS
|
||||
from .base import WaccaBase
|
||||
from .handlers.base import BaseResponse
|
||||
from .handlers.base import BaseResponse, BaseRequest
|
||||
from .handlers.helpers import Version
|
||||
|
||||
|
||||
@ -114,10 +116,20 @@ class WaccaServlet:
|
||||
try:
|
||||
req_json = json.loads(request.content.getvalue())
|
||||
version_full = Version(req_json["appVersion"])
|
||||
req = BaseRequest(req_json)
|
||||
|
||||
except Exception:
|
||||
except KeyError as e:
|
||||
self.logger.error(
|
||||
f"Failed to parse request to {url_path} -> {request.content.getvalue()}"
|
||||
f"Failed to parse request to {request.content.getvalue()} -> Missing required value {e}"
|
||||
)
|
||||
resp = BaseResponse()
|
||||
resp.status = 1
|
||||
resp.message = "不正なリクエスト エラーです"
|
||||
return end(resp.make())
|
||||
|
||||
except Exception as e:
|
||||
self.logger.error(
|
||||
f"Failed to parse request to {url_path} -> {request.content.getvalue()} -> {e}"
|
||||
)
|
||||
resp = BaseResponse()
|
||||
resp.status = 1
|
||||
@ -143,7 +155,7 @@ class WaccaServlet:
|
||||
|
||||
else:
|
||||
self.logger.warning(
|
||||
f"Unsupported version ({req_json['appVersion']}) request {url_path} - {req_json}"
|
||||
f"Unsupported version ({req.appVersion}) request {url_path} - {req_json}"
|
||||
)
|
||||
resp = BaseResponse()
|
||||
resp.status = 1
|
||||
@ -151,7 +163,7 @@ class WaccaServlet:
|
||||
return end(resp.make())
|
||||
|
||||
self.logger.info(
|
||||
f"v{req_json['appVersion']} {url_path} request from {client_ip} with chipId {req_json['chipId']}"
|
||||
f"v{req.appVersion} {url_path} request from {client_ip} with chipId {req.chipId}"
|
||||
)
|
||||
self.logger.debug(req_json)
|
||||
|
||||
@ -166,17 +178,20 @@ class WaccaServlet:
|
||||
handler = getattr(self.versions[internal_ver], func_to_find)
|
||||
resp = handler(req_json)
|
||||
|
||||
self.logger.debug(f"{req_json['appVersion']} response {resp}")
|
||||
self.logger.debug(f"{req.appVersion} response {resp}")
|
||||
return end(resp)
|
||||
|
||||
except Exception as e:
|
||||
self.logger.error(
|
||||
f"{req_json['appVersion']} Error handling method {url_path} -> {e}"
|
||||
f"{req.appVersion} Error handling method {url_path} -> {e}"
|
||||
)
|
||||
if self.core_cfg.server.is_develop:
|
||||
raise
|
||||
if self.logger.level == logging.DEBUG:
|
||||
tp, val, tb = sys.exc_info()
|
||||
traceback.print_exception(tp, val, tb, limit=3)
|
||||
with open("{0}/{1}.log".format(self.core_cfg.server.log_dir, "wacca"), "a") as f:
|
||||
traceback.print_exception(tp, val, tb, limit=3, file=f)
|
||||
|
||||
resp = BaseResponse()
|
||||
resp.status = 1
|
||||
resp.message = "A server error occoured."
|
||||
return end(resp)
|
||||
return end(resp.make())
|
||||
|
@ -41,28 +41,28 @@ class WaccaLily(WaccaS):
|
||||
resp = GetNewsResponseV3()
|
||||
return resp.make()
|
||||
|
||||
def handle_housing_start_request(self, data: Dict) -> Dict:
|
||||
req = HousingStartRequestV2(data)
|
||||
|
||||
if req.appVersion.country != "JPN" and req.appVersion.country in [
|
||||
region.name for region in WaccaConstants.Region
|
||||
]:
|
||||
region_id = WaccaConstants.Region[req.appVersion.country]
|
||||
else:
|
||||
region_id = self.region_id
|
||||
|
||||
resp = HousingStartResponseV1(region_id)
|
||||
return resp.make()
|
||||
|
||||
def handle_user_status_create_request(self, data: Dict) -> Dict:
|
||||
req = UserStatusCreateRequest(data)
|
||||
resp = super().handle_user_status_create_request(data)
|
||||
ret = super().handle_user_status_create_request(data)
|
||||
|
||||
new_user = self.data.profile.get_profile(aime_id=req.aimeId)
|
||||
|
||||
if new_user is None:
|
||||
return BaseResponse().make()
|
||||
|
||||
self.data.item.put_item(
|
||||
req.aimeId, WaccaConstants.ITEM_TYPES["user_plate"], 211001
|
||||
) # Added lily
|
||||
|
||||
self.data.item.put_item(
|
||||
req.aimeId, WaccaConstants.ITEM_TYPES["note_sound"], 205005
|
||||
) # Added lily
|
||||
|
||||
self.data.item.put_item(
|
||||
req.aimeId, WaccaConstants.ITEM_TYPES["navigator"], 210002
|
||||
) # Lily, Added Lily
|
||||
|
||||
return resp
|
||||
return ret
|
||||
|
||||
def handle_user_status_get_request(self, data: Dict) -> Dict:
|
||||
req = UserStatusGetRequest(data)
|
||||
@ -426,7 +426,7 @@ class WaccaLily(WaccaS):
|
||||
|
||||
except Exception:
|
||||
self.logger.error(
|
||||
f"{__name__} Failed to load item {item['item_id']} for user {profile['user']}"
|
||||
f"Failed to load item {item['item_id']} for user {profile['user']}"
|
||||
)
|
||||
|
||||
resp.seasonInfo.level = profile["xp"]
|
||||
|
@ -315,5 +315,12 @@ class WaccaReverse(WaccaLilyR):
|
||||
self.data.item.put_item(
|
||||
req.aimeId, WaccaConstants.ITEM_TYPES["navigator"], 310002
|
||||
) # Added reverse
|
||||
|
||||
self.data.item.put_item(
|
||||
req.aimeId, WaccaConstants.ITEM_TYPES["touch_effect"], 312000
|
||||
) # Added reverse
|
||||
self.data.item.put_item(
|
||||
req.aimeId, WaccaConstants.ITEM_TYPES["touch_effect"], 312001
|
||||
) # Added reverse
|
||||
|
||||
return resp
|
||||
|
Loading…
Reference in New Issue
Block a user