Tutorial though live (live end not done)
This commit is contained in:
parent
c5cfc9bf4d
commit
b53369b2fc
41
src/main.rs
41
src/main.rs
@ -21,16 +21,46 @@ async fn dummy_login(req: HttpRequest, body: String) -> HttpResponse { router::l
|
|||||||
#[get("/api/user")]
|
#[get("/api/user")]
|
||||||
async fn user(req: HttpRequest) -> HttpResponse { router::user::user(req) }
|
async fn user(req: HttpRequest) -> HttpResponse { router::user::user(req) }
|
||||||
|
|
||||||
|
#[post("/api/user/initialize")]
|
||||||
|
async fn user_initialize(req: HttpRequest, body: String) -> HttpResponse { router::user::initialize(req, body) }
|
||||||
|
|
||||||
#[get("/api/purchase")]
|
#[get("/api/purchase")]
|
||||||
async fn purchase(req: HttpRequest) -> HttpResponse { router::purchase::purchase(req) }
|
async fn purchase(req: HttpRequest) -> HttpResponse { router::purchase::purchase(req) }
|
||||||
|
|
||||||
#[post("/api/tutorial")]
|
#[post("/api/tutorial")]
|
||||||
async fn tutorial(req: HttpRequest, body: String) -> HttpResponse { router::tutorial::tutorial(req, body) }
|
async fn tutorial(req: HttpRequest, body: String) -> HttpResponse { router::tutorial::tutorial(req, body) }
|
||||||
|
|
||||||
|
#[post("/api/friend")]
|
||||||
|
async fn friend(req: HttpRequest, body: String) -> HttpResponse { router::friend::friend(req, body) }
|
||||||
|
|
||||||
|
#[post("/api/live/guest")]
|
||||||
|
async fn live_guest(req: HttpRequest, body: String) -> HttpResponse { router::live::guest(req, body) }
|
||||||
|
|
||||||
|
#[post("/api/event")]
|
||||||
|
async fn event(req: HttpRequest, body: String) -> HttpResponse { router::event::event(req, body) }
|
||||||
|
|
||||||
|
#[post("/api/live/start")]
|
||||||
|
async fn live_start(req: HttpRequest, body: String) -> HttpResponse { router::live::start(req, body) }
|
||||||
|
|
||||||
|
#[get("/api/live/clearRate")]
|
||||||
|
async fn live_clearrate(req: HttpRequest) -> HttpResponse { router::live::clearrate(req) }
|
||||||
|
|
||||||
#[get("/api/mission")]
|
#[get("/api/mission")]
|
||||||
async fn mission(req: HttpRequest) -> HttpResponse { router::mission::mission(req) }
|
async fn mission(req: HttpRequest) -> HttpResponse { router::mission::mission(req) }
|
||||||
|
|
||||||
async fn log_unknown_request(req: HttpRequest) -> HttpResponse {
|
#[get("/api/home")]
|
||||||
|
async fn home(req: HttpRequest) -> HttpResponse { router::home::home(req) }
|
||||||
|
|
||||||
|
#[post("/api/lottery/get_tutorial")]
|
||||||
|
async fn lottery_tutorial(req: HttpRequest, body: String) -> HttpResponse { router::lottery::tutorial(req, body) }
|
||||||
|
|
||||||
|
#[post("/api/lottery")]
|
||||||
|
async fn lottery(req: HttpRequest, body: String) -> HttpResponse { router::lottery::lottery(req, body) }
|
||||||
|
|
||||||
|
async fn log_unknown_request(req: HttpRequest, body: String) -> HttpResponse {
|
||||||
|
if body != String::new() {
|
||||||
|
println!("{}", encryption::decrypt_packet(&body).unwrap());
|
||||||
|
}
|
||||||
println!("Unhandled request: {}", req.path());
|
println!("Unhandled request: {}", req.path());
|
||||||
HttpResponse::Ok().body("ok")
|
HttpResponse::Ok().body("ok")
|
||||||
}
|
}
|
||||||
@ -44,10 +74,19 @@ async fn main() -> std::io::Result<()> {
|
|||||||
println!("Request: {}", req.path());
|
println!("Request: {}", req.path());
|
||||||
srv.call(req)
|
srv.call(req)
|
||||||
})
|
})
|
||||||
|
.service(live_guest)
|
||||||
|
.service(live_clearrate)
|
||||||
|
.service(live_start)
|
||||||
|
.service(event)
|
||||||
.service(purchase)
|
.service(purchase)
|
||||||
|
.service(user_initialize)
|
||||||
.service(start_start)
|
.service(start_start)
|
||||||
.service(tutorial)
|
.service(tutorial)
|
||||||
|
.service(lottery_tutorial)
|
||||||
|
.service(lottery)
|
||||||
|
.service(friend)
|
||||||
.service(mission)
|
.service(mission)
|
||||||
|
.service(home)
|
||||||
.service(start_assethash)
|
.service(start_assethash)
|
||||||
.service(user)
|
.service(user)
|
||||||
.service(dummy_login)
|
.service(dummy_login)
|
||||||
|
@ -6,3 +6,8 @@ pub mod user;
|
|||||||
pub mod purchase;
|
pub mod purchase;
|
||||||
pub mod tutorial;
|
pub mod tutorial;
|
||||||
pub mod mission;
|
pub mod mission;
|
||||||
|
pub mod home;
|
||||||
|
pub mod lottery;
|
||||||
|
pub mod friend;
|
||||||
|
pub mod live;
|
||||||
|
pub mod event;
|
||||||
|
1
src/router/clearrate.json
Normal file
1
src/router/clearrate.json
Normal file
File diff suppressed because one or more lines are too long
15
src/router/event.rs
Normal file
15
src/router/event.rs
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
use json;
|
||||||
|
use json::object;
|
||||||
|
use crate::router::global;
|
||||||
|
use actix_web::{HttpResponse, HttpRequest};
|
||||||
|
//use crate::router::userdata;
|
||||||
|
|
||||||
|
pub fn event(_req: HttpRequest, _body: String) -> HttpResponse {
|
||||||
|
|
||||||
|
let resp = object!{
|
||||||
|
"code": 0,
|
||||||
|
"server_time": global::timestamp(),
|
||||||
|
"data":{"point_ranking":{"point":0},"score_ranking":[],"member_ranking":[],"lottery_box":[],"mission_list":[],"policy_agreement":0,"incentive_lottery":0,"star_event":{"star_level":0,"last_event_star_level":0,"star_music_list":[],"is_star_event_update":1,"music_change_count":0,"star_event_bonus_daily_count":0,"star_event_bonus_count":0,"star_event_play_times_bonus_count":0,"star_assist_bonus":1}}
|
||||||
|
};
|
||||||
|
global::send(resp)
|
||||||
|
}
|
22
src/router/friend.rs
Normal file
22
src/router/friend.rs
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
use json;
|
||||||
|
use json::object;
|
||||||
|
use crate::router::global;
|
||||||
|
use actix_web::{HttpResponse, HttpRequest};
|
||||||
|
//use crate::router::userdata;
|
||||||
|
|
||||||
|
pub fn friend(_req: HttpRequest, _body: String) -> HttpResponse {
|
||||||
|
/*let blank_header = HeaderValue::from_static("");
|
||||||
|
|
||||||
|
let key = req.headers().get("a6573cbe").unwrap_or(&blank_header).to_str().unwrap_or("");
|
||||||
|
let uid = req.headers().get("aoharu-user-id").unwrap_or(&blank_header).to_str().unwrap_or("");
|
||||||
|
let user = userdata::get_acc(key, uid);*/
|
||||||
|
|
||||||
|
let resp = object!{
|
||||||
|
"code": 0,
|
||||||
|
"server_time": global::timestamp(),
|
||||||
|
"data": {
|
||||||
|
"friend_list": [] //todo - pull from userdata
|
||||||
|
}
|
||||||
|
};
|
||||||
|
global::send(resp)
|
||||||
|
}
|
19
src/router/home.rs
Normal file
19
src/router/home.rs
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
use json;
|
||||||
|
use json::object;
|
||||||
|
use crate::router::global;
|
||||||
|
use actix_web::{HttpResponse, HttpRequest, http::header::HeaderValue};
|
||||||
|
use crate::router::userdata;
|
||||||
|
|
||||||
|
pub fn home(req: HttpRequest) -> HttpResponse {
|
||||||
|
let blank_header = HeaderValue::from_static("");
|
||||||
|
let key = req.headers().get("a6573cbe").unwrap_or(&blank_header).to_str().unwrap_or("");
|
||||||
|
let uid = req.headers().get("aoharu-user-id").unwrap_or(&blank_header).to_str().unwrap_or("");
|
||||||
|
let user = userdata::get_acc_home(key, uid);
|
||||||
|
|
||||||
|
let resp = object!{
|
||||||
|
"code": 0,
|
||||||
|
"server_time": global::timestamp(),
|
||||||
|
"data": user
|
||||||
|
};
|
||||||
|
global::send(resp)
|
||||||
|
}
|
44
src/router/live.rs
Normal file
44
src/router/live.rs
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
use json;
|
||||||
|
use json::object;
|
||||||
|
use crate::router::global;
|
||||||
|
//use crate::encryption;
|
||||||
|
use actix_web::{HttpResponse, HttpRequest};
|
||||||
|
//use crate::router::userdata;
|
||||||
|
|
||||||
|
pub fn guest(_req: HttpRequest, _body: String) -> HttpResponse {
|
||||||
|
//let body = json::parse(&encryption::decrypt_packet(&body).unwrap()).unwrap();
|
||||||
|
//let blank_header = HeaderValue::from_static("");
|
||||||
|
//let key = req.headers().get("a6573cbe").unwrap_or(&blank_header).to_str().unwrap_or("");
|
||||||
|
//let user = userdata::get_acc(key, "");
|
||||||
|
|
||||||
|
let resp = object!{
|
||||||
|
"code": 0,
|
||||||
|
"server_time": global::timestamp(),
|
||||||
|
"data": {"guest_list":[{"user":{"name":"A Nice Guest","comment":"Enjoy the first live show!","exp":900,"main_deck_slot":1,"favorite_master_card_id":10010013,"favorite_card_evolve":0,"guest_smile_master_card_id":10010013,"guest_cool_master_card_id":10010013,"guest_pure_master_card_id":10010013,"friend_request_disabled":1,"master_title_ids":[3000001,0],"profile_settings":[1,2,3,4,5,6,7],"last_login_time":1708699449},"favorite_card":{"id":0,"master_card_id":10010013,"exp":1025,"skill_exp":0,"evolve":[]},"guest_smile_card":{"id":0,"master_card_id":10010013,"exp":1025,"skill_exp":0,"evolve":[]},"guest_cool_card":{"id":0,"master_card_id":10010013,"exp":1025,"skill_exp":0,"evolve":[]},"guest_pure_card":{"id":0,"master_card_id":10010013,"exp":1025,"skill_exp":0,"evolve":[]},"status":0}]}
|
||||||
|
};
|
||||||
|
global::send(resp)
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn start(_req: HttpRequest, _body: String) -> HttpResponse {
|
||||||
|
//let body = json::parse(&encryption::decrypt_packet(&body).unwrap()).unwrap();
|
||||||
|
//let blank_header = HeaderValue::from_static("");
|
||||||
|
//let key = req.headers().get("a6573cbe").unwrap_or(&blank_header).to_str().unwrap_or("");
|
||||||
|
//let user = userdata::get_acc(key, "");
|
||||||
|
|
||||||
|
let resp = object!{
|
||||||
|
"code": 0,
|
||||||
|
"server_time": global::timestamp(),
|
||||||
|
"data": []
|
||||||
|
};
|
||||||
|
global::send(resp)
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn clearrate(_req: HttpRequest) -> HttpResponse {
|
||||||
|
|
||||||
|
let resp = object!{
|
||||||
|
"code": 0,
|
||||||
|
"server_time": global::timestamp(),
|
||||||
|
"data": json::parse(include_str!("clearrate.json")).unwrap()
|
||||||
|
};
|
||||||
|
global::send(resp)
|
||||||
|
}
|
101
src/router/lottery.rs
Normal file
101
src/router/lottery.rs
Normal file
@ -0,0 +1,101 @@
|
|||||||
|
use json;
|
||||||
|
use json::{array, object};
|
||||||
|
use crate::router::global;
|
||||||
|
use crate::encryption;
|
||||||
|
use actix_web::{HttpResponse, HttpRequest, http::header::HeaderValue};
|
||||||
|
use crate::router::userdata;
|
||||||
|
|
||||||
|
pub fn tutorial(_req: HttpRequest, body: String) -> HttpResponse {
|
||||||
|
let body = json::parse(&encryption::decrypt_packet(&body).unwrap()).unwrap();
|
||||||
|
let mut lotteryid = 0; //todo, what should this be?
|
||||||
|
if body["master_character_id"].to_string().starts_with("3") {
|
||||||
|
lotteryid = 9110027;
|
||||||
|
} else {
|
||||||
|
println!("Unknown lottery id for character {}", body["master_character_id"]);
|
||||||
|
}
|
||||||
|
|
||||||
|
let resp = object!{
|
||||||
|
"code": 0,
|
||||||
|
"server_time": global::timestamp(),
|
||||||
|
"data": {
|
||||||
|
"lottery_list": [
|
||||||
|
{
|
||||||
|
"master_lottery_id": lotteryid,
|
||||||
|
"master_lottery_price_number": 1,
|
||||||
|
"count": 0,
|
||||||
|
"daily_count": 0,
|
||||||
|
"last_count_date": ""
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"item_list": []
|
||||||
|
}
|
||||||
|
};
|
||||||
|
global::send(resp)
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn lottery(req: HttpRequest, body: String) -> HttpResponse {
|
||||||
|
let body = json::parse(&encryption::decrypt_packet(&body).unwrap()).unwrap();
|
||||||
|
println!("lottery: {}", body);
|
||||||
|
let blank_header = HeaderValue::from_static("");
|
||||||
|
let key = req.headers().get("a6573cbe").unwrap_or(&blank_header).to_str().unwrap_or("");
|
||||||
|
let uid = req.headers().get("aoharu-user-id").unwrap_or(&blank_header).to_str().unwrap_or("");
|
||||||
|
let mut user = userdata::get_acc(key, uid);
|
||||||
|
let user2 = userdata::get_acc(key, uid);
|
||||||
|
|
||||||
|
//todo - how to randomize?
|
||||||
|
let cardstogive = array![
|
||||||
|
{"id": 13930, "master_card_id": 10010011, "master_lottery_item_id":100001, "master_lottery_item_number":138},
|
||||||
|
{"id": 13928, "master_card_id": 10030008, "master_lottery_item_id":200001,"master_lottery_item_number":30},
|
||||||
|
{"id": 13926, "master_card_id": 20010010, "master_lottery_item_id":100001,"master_lottery_item_number":178},
|
||||||
|
{"id": 13929, "master_card_id": 20050004, "master_lottery_item_id":100001,"master_lottery_item_number":26},
|
||||||
|
{"id": 13925, "master_card_id": 20090001, "master_lottery_item_id":100001,"master_lottery_item_number":113},
|
||||||
|
{"id": 13933, "master_card_id": 30040001, "master_lottery_item_id":200001,"master_lottery_item_number":2},
|
||||||
|
{"id": 13934, "master_card_id": 30090007, "master_lottery_item_id":200001,"master_lottery_item_number":83},
|
||||||
|
{"id": 13931, "master_card_id": 30100005, "master_lottery_item_id":100001,"master_lottery_item_number":188},
|
||||||
|
{"id": 13927, "master_card_id": 30120001, "master_lottery_item_id":100001,"master_lottery_item_number":154},
|
||||||
|
{"id": 13932, "master_card_id": 40030002, "master_lottery_item_id":911002701,"master_lottery_item_number":1}
|
||||||
|
];
|
||||||
|
|
||||||
|
let mut new_cards = array![];
|
||||||
|
for (i, data) in cardstogive.members().enumerate() {
|
||||||
|
let to_push = object!{
|
||||||
|
"id": data["id"].clone(),
|
||||||
|
"master_card_id": data["master_card_id"].clone(),
|
||||||
|
"exp":0,
|
||||||
|
"skill_exp":0,
|
||||||
|
"evolve":[],
|
||||||
|
"created_date_time": global::timestamp()
|
||||||
|
};
|
||||||
|
user["card_list"].push(to_push.clone()).unwrap();
|
||||||
|
new_cards.push(to_push).unwrap();
|
||||||
|
user["deck_list"][0]["main_card_ids"][i] = data["id"].clone();
|
||||||
|
}
|
||||||
|
|
||||||
|
userdata::save_acc(key, uid, user);
|
||||||
|
|
||||||
|
let mut lottery_list = array![];
|
||||||
|
for (_i, data) in cardstogive.members().enumerate() {
|
||||||
|
let to_push = object!{
|
||||||
|
"master_lottery_item_id": data["master_lottery_item_id"].clone(),
|
||||||
|
"master_lottery_item_number": data["master_lottery_item_number"].clone(),
|
||||||
|
"is_new": 1
|
||||||
|
};
|
||||||
|
lottery_list.push(to_push).unwrap();
|
||||||
|
}
|
||||||
|
|
||||||
|
//todo
|
||||||
|
let resp = object!{
|
||||||
|
"code": 0,
|
||||||
|
"server_time": global::timestamp(),
|
||||||
|
"data": {
|
||||||
|
"lottery_item_list": lottery_list,
|
||||||
|
"updated_value_list": {
|
||||||
|
"card_list": new_cards
|
||||||
|
},
|
||||||
|
"gift_list": user2["home"]["gift_list"].clone(),
|
||||||
|
"clear_mission_ids": user2["clear_mission_ids"].clone(),
|
||||||
|
"draw_count_list": []
|
||||||
|
}
|
||||||
|
};
|
||||||
|
global::send(resp)
|
||||||
|
}
|
@ -1,6 +1,7 @@
|
|||||||
use json;
|
use json;
|
||||||
use json::object;
|
use json::object;
|
||||||
use crate::router::global;
|
use crate::router::global;
|
||||||
|
use crate::encryption;
|
||||||
use actix_web::{HttpResponse, HttpRequest, http::header::HeaderValue};
|
use actix_web::{HttpResponse, HttpRequest, http::header::HeaderValue};
|
||||||
use crate::router::userdata;
|
use crate::router::userdata;
|
||||||
|
|
||||||
@ -18,3 +19,28 @@ pub fn user(req: HttpRequest) -> HttpResponse {
|
|||||||
};
|
};
|
||||||
global::send(resp)
|
global::send(resp)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn initialize(req: HttpRequest, body: String) -> HttpResponse {
|
||||||
|
let body = json::parse(&encryption::decrypt_packet(&body).unwrap()).unwrap();
|
||||||
|
let blank_header = HeaderValue::from_static("");
|
||||||
|
|
||||||
|
let key = req.headers().get("a6573cbe").unwrap_or(&blank_header).to_str().unwrap_or("");
|
||||||
|
let uid = req.headers().get("aoharu-user-id").unwrap_or(&blank_header).to_str().unwrap_or("");
|
||||||
|
let mut user = userdata::get_acc(key, uid);
|
||||||
|
|
||||||
|
let id = (body["master_character_id"].as_i32().unwrap() * 10000) + 7; //todo - is this alwasy the case?
|
||||||
|
user["user"]["favorite_master_card_id"] = id.into();
|
||||||
|
user["user"]["guest_smile_master_card_id"] = id.into();
|
||||||
|
user["user"]["guest_cool_master_card_id"] = id.into();
|
||||||
|
user["user"]["guest_pure_master_card_id"] = id.into();
|
||||||
|
user["user"]["master_title_ids"][0] = id.into();
|
||||||
|
|
||||||
|
userdata::save_acc(key, uid, user.clone());
|
||||||
|
|
||||||
|
let resp = object!{
|
||||||
|
"code": 0,
|
||||||
|
"server_time": global::timestamp(),
|
||||||
|
"data": user["user"].clone()
|
||||||
|
};
|
||||||
|
global::send(resp)
|
||||||
|
}
|
||||||
|
@ -76,7 +76,8 @@ fn create_acc(conn: &Connection, uid: i64) {
|
|||||||
(),
|
(),
|
||||||
).unwrap();
|
).unwrap();
|
||||||
let mut data = object!{
|
let mut data = object!{
|
||||||
userdata: json::parse(include_str!("new_user.json")).unwrap()
|
userdata: json::parse(include_str!("new_user.json")).unwrap(),
|
||||||
|
home: json::parse(include_str!("new_user_home.json")).unwrap()
|
||||||
};
|
};
|
||||||
data["userdata"]["user"]["id"] = uid.into();
|
data["userdata"]["user"]["id"] = uid.into();
|
||||||
|
|
||||||
@ -84,7 +85,7 @@ fn create_acc(conn: &Connection, uid: i64) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//a6573cbe is the name of the header - todo - more secure than just uid
|
//a6573cbe is the name of the header - todo - more secure than just uid
|
||||||
pub fn get_acc(_a6573cbe: &str, uid: &str) -> JsonValue {
|
fn get_data(_a6573cbe: &str, uid: &str) -> JsonValue {
|
||||||
//let decoded = general_purpose::STANDARD.decode(a6573cbe).unwrap();
|
//let decoded = general_purpose::STANDARD.decode(a6573cbe).unwrap();
|
||||||
//let header = String::from_utf8_lossy(&decoded);
|
//let header = String::from_utf8_lossy(&decoded);
|
||||||
|
|
||||||
@ -119,7 +120,7 @@ pub fn get_acc(_a6573cbe: &str, uid: &str) -> JsonValue {
|
|||||||
|
|
||||||
let rv = json::parse(&result.unwrap()).unwrap();
|
let rv = json::parse(&result.unwrap()).unwrap();
|
||||||
|
|
||||||
return rv["userdata"].clone();
|
return rv
|
||||||
}
|
}
|
||||||
Err(_) => {
|
Err(_) => {
|
||||||
std::thread::sleep(std::time::Duration::from_millis(15));
|
std::thread::sleep(std::time::Duration::from_millis(15));
|
||||||
@ -128,6 +129,14 @@ pub fn get_acc(_a6573cbe: &str, uid: &str) -> JsonValue {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn get_acc(_a6573cbe: &str, uid: &str) -> JsonValue {
|
||||||
|
return get_data(_a6573cbe, uid)["userdata"].clone();
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn get_acc_home(_a6573cbe: &str, uid: &str) -> JsonValue {
|
||||||
|
return get_data(_a6573cbe, uid)["home"].clone();
|
||||||
|
}
|
||||||
|
|
||||||
pub fn save_acc(_a6573cbe: &str, uid: &str, data: JsonValue) {
|
pub fn save_acc(_a6573cbe: &str, uid: &str, data: JsonValue) {
|
||||||
//let decoded = general_purpose::STANDARD.decode(a6573cbe).unwrap();
|
//let decoded = general_purpose::STANDARD.decode(a6573cbe).unwrap();
|
||||||
//let header = String::from_utf8_lossy(&decoded);
|
//let header = String::from_utf8_lossy(&decoded);
|
||||||
|
55
src/router/userdata/new_user_home.json
Normal file
55
src/router/userdata/new_user_home.json
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
{
|
||||||
|
"home": {
|
||||||
|
"gift_list": [],
|
||||||
|
"pending_friend_count": 0,
|
||||||
|
"clear_mission_count": 0,
|
||||||
|
"clear_beginner_mission_count": 0,
|
||||||
|
"beginner_mission_complete": 0,
|
||||||
|
"not_cleared_daily_mission_count": 6,
|
||||||
|
"new_announcement_flag": 1,
|
||||||
|
"information_list": [],
|
||||||
|
"unread_story_count": 4,
|
||||||
|
"unread_chat_count": 0,
|
||||||
|
"preset_setting": [
|
||||||
|
{
|
||||||
|
"slot": 1,
|
||||||
|
"master_preset_background_id": 0,
|
||||||
|
"master_preset_foreground_id": 0,
|
||||||
|
"master_card_id": 0,
|
||||||
|
"illust_master_card_id": 0,
|
||||||
|
"poem": 0,
|
||||||
|
"evolve": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"slot": 2,
|
||||||
|
"master_preset_background_id": 0,
|
||||||
|
"master_preset_foreground_id": 0,
|
||||||
|
"master_card_id": 0,
|
||||||
|
"illust_master_card_id": 0,
|
||||||
|
"poem": 0,
|
||||||
|
"evolve": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"slot": 3,
|
||||||
|
"master_preset_background_id": 0,
|
||||||
|
"master_preset_foreground_id": 0,
|
||||||
|
"master_card_id": 0,
|
||||||
|
"illust_master_card_id": 0,
|
||||||
|
"poem": 0,
|
||||||
|
"evolve": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"slot": 4,
|
||||||
|
"master_preset_background_id": 0,
|
||||||
|
"master_preset_foreground_id": 0,
|
||||||
|
"master_card_id": 0,
|
||||||
|
"illust_master_card_id": 0,
|
||||||
|
"poem": 0,
|
||||||
|
"evolve": 0
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"active_friend": 0,
|
||||||
|
"serial_code_id_list": []
|
||||||
|
},
|
||||||
|
"clear_mission_ids": []
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user