Implement bond

This commit is contained in:
Ethan O'Brien 2024-05-08 17:48:25 -05:00
parent a4bbc2a37b
commit 378fd15278
6 changed files with 123 additions and 75 deletions

View file

@ -81,6 +81,9 @@ lazy_static! {
for i in 1101001..=1101030 {
missions.push(i).unwrap();
}
for i in 1158001..=1158082 {
missions.push(i).unwrap();
}
missions
};
}

View file

@ -107,6 +107,13 @@ pub fn give_gift(data: &JsonValue, user: &mut JsonValue) -> bool {
} else if data["reward_type"].to_string() == "4" {
// basically moraa!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
return !give_points(data["value"].as_i64().unwrap(), data["amount"].as_i64().unwrap(), user);
} else if data["reward_type"].to_string() == "8" {
// title
let title = data["value"].as_i64().unwrap();
if !user["master_title_ids"].contains(title) {
user["master_title_ids"].push(title).unwrap();
}
return true;
}
println!("Redeeming reward not implimented for reward type {}", data["reward_type"].to_string());
return false;

View file

@ -308,6 +308,14 @@ lazy_static! {
}
info
};
static ref CARD_LIST: JsonValue = {
let mut info = object!{};
let items = json::parse(include_str!("json/card.json")).unwrap();
for (_i, data) in items.members().enumerate() {
info[data["id"].to_string()] = data.clone();
}
info
};
}
fn get_live_info(id: i64) -> JsonValue {
LIVE_LIST[id.to_string()].clone()
@ -391,13 +399,86 @@ fn give_mission_rewards(user: &mut JsonValue, missions: &JsonValue, multiplier:
rv
}
fn live_end(req: &HttpRequest, body: &String) -> JsonValue {
fn get_master_id(id: i64) -> i64 {
let id = id.to_string();
let mut masterid = 0;
if id.starts_with("2") {
masterid += 9;
} else if id.starts_with("3") {
masterid += 9 + 9;
} else if id.starts_with("4") {
masterid += 9 + 9 + 12;
}
masterid + id.char_indices().last().unwrap().1.to_string().parse::<i64>().unwrap()
}
const MAX_BOND: i64 = 50000;
fn get_live_character_list(deck_id: i32, user: &JsonValue, missions: &mut JsonValue, completed_missions: &mut JsonValue) -> JsonValue {
let mut rv = array![];
let characters_in_deck = user["deck_list"][(deck_id - 1) as usize]["main_card_ids"].clone();
for (_i, data) in user["card_list"].members().enumerate() {
if !characters_in_deck.contains(data["id"].as_i64().unwrap()) && !characters_in_deck.contains(data["master_card_id"].as_i64().unwrap()) {
continue;
}
let character = CARD_LIST[data["master_card_id"].to_string()]["masterCharacterId"].as_i64().unwrap();
let mut mission_id = 1158000 + get_master_id(character);
let mut full = false;
let mut status = items::get_mission_status(mission_id, missions);
let mut limit = 1500;
if status.is_empty() {
mission_id += 39;
limit *= 10;
status = items::get_mission_status(mission_id, missions);
if status["status"].as_i32().unwrap_or(0) > 1 {
full = true;
}
}
let additional_exp = 20;
let start = status["progress"].as_i64().unwrap_or(0);
let mut bond = start + additional_exp;
if bond >= MAX_BOND {
bond = MAX_BOND;
}
if !full {
let completed = bond >= limit;
let mission = items::update_mission_status(mission_id, 0, completed, false, bond - start, missions);
if !mission.is_none() {
completed_missions.push(mission.unwrap()).unwrap();
}
}
rv.push(object!{
master_character_id: character,
exp: start,
before_exp: bond
}).unwrap();
}
rv
}
fn live_end(req: &HttpRequest, body: &String, skipped: bool) -> JsonValue {
let key = global::get_login(req.headers(), body);
let body = json::parse(&encryption::decrypt_packet(body).unwrap()).unwrap();
let user2 = userdata::get_acc_home(&key);
let mut user = userdata::get_acc(&key);
let mut user_missions = userdata::get_acc_missions(&key);
let live = update_live_data(&mut user, &body, true);
let live;
if skipped {
items::use_item(21000001, body["live_boost"].as_i64().unwrap(), &mut user);
live = update_live_data(&mut user, &object!{
master_live_id: body["master_live_id"].clone(),
level: 1,
live_score: {
score: 1,
max_combo: 1
}
}, false);
} else {
live = update_live_data(&mut user, &body, true);
}
//1273009, 1273010, 1273011, 1273012
let mut cleared_missions = items::advance_variable_mission(1105001, 1105017, 1, &mut user_missions);
@ -408,24 +489,33 @@ fn live_end(req: &HttpRequest, body: &String) -> JsonValue {
}
}
if body["live_score"]["score"].as_i64().unwrap() > 0 {
if body["live_score"]["score"].as_i64().unwrap_or(0) > 0 {
live_completed(body["master_live_id"].as_i64().unwrap(), body["level"].as_i32().unwrap(), false, body["live_score"]["score"].as_i64().unwrap(), user["user"]["id"].as_i64().unwrap());
}
let is_full_combo = (body["live_score"]["good"].as_i32().unwrap_or(1) + body["live_score"]["bad"].as_i32().unwrap_or(1) + body["live_score"]["miss"].as_i32().unwrap_or(1)) == 0;
let is_perfect = (body["live_score"]["great"].as_i32().unwrap_or(1) + body["live_score"]["good"].as_i32().unwrap_or(1) + body["live_score"]["bad"].as_i32().unwrap_or(1) + body["live_score"]["miss"].as_i32().unwrap_or(1)) == 0;
let missions = get_live_mission_completed_ids(&user, body["master_live_id"].as_i64().unwrap(), body["live_score"]["score"].as_i64().unwrap(), body["live_score"]["max_combo"].as_i64().unwrap(), live["clear_count"].as_i64().unwrap_or(0), body["level"].as_i64().unwrap(), is_full_combo, is_perfect).unwrap_or(array![]);
let missions;
if skipped {
missions = get_live_mission_completed_ids(&user, body["master_live_id"].as_i64().unwrap(), live["high_score"].as_i64().unwrap(), live["max_combo"].as_i64().unwrap(), live["clear_count"].as_i64().unwrap(), live["level"].as_i64().unwrap(), false, false).unwrap_or(array![]);
} else {
let is_full_combo = (body["live_score"]["good"].as_i32().unwrap_or(1) + body["live_score"]["bad"].as_i32().unwrap_or(1) + body["live_score"]["miss"].as_i32().unwrap_or(1)) == 0;
let is_perfect = (body["live_score"]["great"].as_i32().unwrap_or(1) + body["live_score"]["good"].as_i32().unwrap_or(1) + body["live_score"]["bad"].as_i32().unwrap_or(1) + body["live_score"]["miss"].as_i32().unwrap_or(1)) == 0;
missions = get_live_mission_completed_ids(&user, body["master_live_id"].as_i64().unwrap(), body["live_score"]["score"].as_i64().unwrap(), body["live_score"]["max_combo"].as_i64().unwrap(), live["clear_count"].as_i64().unwrap_or(0), body["level"].as_i64().unwrap(), is_full_combo, is_perfect).unwrap_or(array![]);
}
update_live_mission_data(&mut user, &object!{
master_live_id: body["master_live_id"].as_i64().unwrap(),
clear_master_live_mission_ids: missions.clone()
});
let reward_list = give_mission_rewards(&mut user, &missions, 1);
let reward_list = give_mission_rewards(&mut user, &missions, body["live_boost"].as_i64().unwrap_or(1));
items::lp_modification(&mut user, body["use_lp"].as_u64().unwrap(), true);
let lp_used: i32 = body["use_lp"].as_i32().unwrap_or(10 * body["live_boost"].as_i32().unwrap_or(0));
items::give_exp(body["use_lp"].as_i32().unwrap(), &mut user, &mut user_missions, &mut cleared_missions);
items::lp_modification(&mut user, lp_used as u64, true);
items::give_exp(lp_used, &mut user, &mut user_missions, &mut cleared_missions);
let characters = get_live_character_list(body["deck_slot"].as_i32().unwrap(), &user, &mut user_missions, &mut cleared_missions);
userdata::save_acc(&key, user.clone());
userdata::save_acc_missions(&key, user_missions);
@ -442,7 +532,7 @@ fn live_end(req: &HttpRequest, body: &String) -> JsonValue {
"clear_master_live_mission_ids": missions,
"user": user["user"].clone(),
"stamina": user["stamina"].clone(),
"character_list": user["character_list"].clone(),
"character_list": characters,
"reward_list": reward_list,
"gift_list": user2["home"]["gift_list"].clone(),
"clear_mission_ids": cleared_missions,
@ -455,12 +545,17 @@ fn live_end(req: &HttpRequest, body: &String) -> JsonValue {
}
pub fn end(req: HttpRequest, body: String) -> HttpResponse {
let resp = live_end(&req, &body);
let resp = live_end(&req, &body, false);
global::send(resp, req)
}
pub fn skip(req: HttpRequest, body: String) -> HttpResponse {
let resp = live_end(&req, &body, true);
global::send(resp, req)
}
pub fn event_end(req: HttpRequest, body: String) -> HttpResponse {
let mut resp = live_end(&req, &body);
let mut resp = live_end(&req, &body, false);
let key = global::get_login(req.headers(), &body);
let body = json::parse(&encryption::decrypt_packet(&body).unwrap()).unwrap();
let mut event = userdata::get_acc_event(&key);
@ -507,62 +602,3 @@ pub fn event_end(req: HttpRequest, body: String) -> HttpResponse {
global::send(resp, req)
}
pub fn skip(req: HttpRequest, body: String) -> HttpResponse {
let key = global::get_login(req.headers(), &body);
let body = json::parse(&encryption::decrypt_packet(&body).unwrap()).unwrap();
let user2 = userdata::get_acc_home(&key);
let mut user = userdata::get_acc(&key);
let mut user_missions = userdata::get_acc_missions(&key);
let live = update_live_data(&mut user, &object!{
master_live_id: body["master_live_id"].clone(),
level: 1,
live_score: {
score: 1,
max_combo: 1
}
}, false);
let missions = get_live_mission_completed_ids(&user, body["master_live_id"].as_i64().unwrap(), live["high_score"].as_i64().unwrap(), live["max_combo"].as_i64().unwrap(), live["clear_count"].as_i64().unwrap(), live["level"].as_i64().unwrap(), false, false).unwrap_or(array![]);
update_live_mission_data(&mut user, &object!{
master_live_id: body["master_live_id"].as_i64().unwrap(),
clear_master_live_mission_ids: missions.clone()
});
let reward_list = give_mission_rewards(&mut user, &missions, body["live_boost"].as_i64().unwrap());
items::lp_modification(&mut user, 10 * body["live_boost"].as_u64().unwrap(), true);
let mut cleared_missions = array![];
items::give_exp(10 * body["live_boost"].as_i32().unwrap(), &mut user, &mut user_missions, &mut cleared_missions);
items::use_item(21000001, body["live_boost"].as_i64().unwrap(), &mut user);
userdata::save_acc(&key, user.clone());
userdata::save_acc_missions(&key, user_missions);
let resp = object!{
"code": 0,
"server_time": global::timestamp(),
"data": {
"gem": user["gem"].clone(),
"high_score": live["high_score"].clone(),
"item_list": user["item_list"].clone(),
"point_list": user["point_list"].clone(),
"live": live,
"clear_master_live_mission_ids": missions,
"user": user["user"].clone(),
"stamina": user["stamina"].clone(),
"character_list": user["character_list"].clone(),
"reward_list": reward_list,
"gift_list": user2["home"]["gift_list"].clone(),
"clear_mission_ids": cleared_missions,
"event_point_reward_list": [],
"ranking_change": [],
"event_member": [],
"event_ranking_data": []
}
};
global::send(resp, req)
}

View file

@ -92,6 +92,11 @@ pub fn receive(req: HttpRequest, body: String) -> HttpResponse {
break;
}
}
if mission.as_i64().unwrap() >= 1158001 && mission.as_i64().unwrap() <= 1158039 {
items::change_mission_id(mission.as_i64().unwrap(), mission.as_i64().unwrap() + 39, &mut missions);
items::update_mission_status(mission.as_i64().unwrap() + 39, 0, false, false, 0, &mut missions);
variable = true;
}
if !variable {
items::update_mission_status(mission.as_i64().unwrap(), 0, true, true, 0, &mut missions);
}

View file

@ -135,9 +135,6 @@ fn cleanup_account(user: &mut JsonValue) {
if user["master_music_ids"].len() != NEW_USER["master_music_ids"].len() {
user["master_music_ids"] = NEW_USER["master_music_ids"].clone();
}
if user["master_title_ids"].is_empty() {
user["master_title_ids"] = NEW_USER["master_title_ids"].clone();
}
let mut to_remove = array![];
let items = user["item_list"].clone();

View file

@ -51,7 +51,7 @@
"master_music_ids": [1001,1002,1003,1004,1005,1006,1007,1008,1009,1010,1011,1012,1014,1015,1016,1017,1019,1020,1021,1022,1023,1024,1025,1026,1027,1028,1029,1030,1031,1032,1033,1035,1037,1038,1039,1040,1041,1042,1044,1045,1046,1047,1048,1049,1050,1054,1055,1057,1058,1059,1060,1061,1062,1063,1064,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,1104,1105,1106,1107,1108,1109,1110,1111,1112,1113,1114,1115,1116,1117,1118,1119,1120,1121,1123,1124,1126,1127,1128,1129,1130,1131,1132,1133,1134,1135,1136,1137,1138,1139,1140,2001,2002,2003,2004,2005,2006,2007,2008,2009,2010,2011,2012,2013,2014,2015,2016,2017,2018,2019,2020,2021,2022,2023,2024,2025,2026,2027,2028,2029,2030,2031,2032,2033,2034,2035,2036,2037,2038,2039,2040,2041,2042,2043,2044,2045,2046,2047,2048,2049,2050,2051,2052,2053,2054,2055,2056,2057,2058,2059,2060,2061,2062,2063,2064,2065,2066,2067,2068,2069,2070,2071,2072,2073,2074,2075,2076,2077,2078,2079,2080,2081,2082,2083,2084,2086,2087,2088,2089,2090,2091,2092,2093,2094,2095,2096,2097,2098,2099,2100,2101,2102,2103,2104,2105,2106,2107,2108,2109,2111,2112,2113,2114,2115,2116,2117,2118,2119,2120,2121,2122,2123,2124,2125,2126,2127,2128,2129,2130,2131,2132,2133,2134,2135,2136,2137,2138,2142,2143,2144,2145,2146,2147,2148,2149,2150,2151,2152,2153,2154,2156,2157,2158,2159,2160,2161,2162,2163,2164,2165,2166,2167,2168,2169,2170,2171,2172,2173,2174,2175,2176,2177,2178,2179,2180,2181,3001,3002,3003,3004,3005,3006,3007,3008,3009,3010,3011,3012,3013,3014,3015,3016,3017,3018,3019,3020,3021,3022,3023,3024,3025,3026,3027,3028,3029,3030,3031,3032,3034,3035,3036,3037,3038,3039,3040,3041,3042,3043,3044,3045,3046,3047,3048,3049,3050,3051,3052,3053,3054,3055,3056,3057,3058,3059,3060,3061,3062,3063,3064,3065,3066,3067,3068,3069,3070,3071,3072,3073,3074,3075,3076,3077,3078,3079,3080,3081,3082,3083,3084,3085,3086,3087,3088,3089,3090,3091,3092,3094,3095,3096,3097,3098,3099,3100,3101,3102,3103,3104,3105,3106,3107,3108,3109,3110,3111,3112,3113,3114,3115,3116,3117,3118,3119,3121,3122,3123,3124,3125,3126,3127,3128,3129,3134,3135,3136,3137,3138,3139,3140,3141,3142,3143,3144,3145,3146,3147,3148,3149,3150,3151,3152,3153,3154,3155,4001,4002,4003,4004,4005,4006,4007,4008,4009,4010,4011,4012,4013,4014,4015,4016,4017,4018,4019,4020,4021,4022,4023,4024,4025,4026,4027,4028,4030,4031,4032,4033,4034,4035,4036,4037,4038,4039,4040,4041,4042,4043,4044,4045,4046,4047,4048,4049,4050,4051,4052,4053,4054,4055,4056,4057,4059,4060,4061,4064,4065,4066,4067,4068,4069,4071,4073,4074,4075,4076,4077,4078,4079,4080,4081,4082,4083,4084,4085,4086,4087,4088,4089,4090,4091,4092,4094,4095,4096,4097,4098,4099,4100,4101,4102,4103,4104,4105,4106,4107,4108,4110,4111,4112,4113,4114,4115,4116,4117,4118,4119,5001,5002,5003,5004,5005,5006,5007,5008,5009,5010,5011,5012,5013,5014,5015,5016,5017,5018,5019,5020,5021,5022,5023,5024,5025,5026,5027,5028,5029,5030,5031,6001,6002,6003,6004,6005,6006,6007,6008,6009,6010,6011,6012,9001,9002,9003,9004,9005,9006,9007,9008,9009,9010,9011,9012,9013,9014,9015,9016,9017,9018,9019,9020,9021,9022,9023,9024,9025,9026,9027,9028,9029,9030,9031,9032],
"event_point_list": [],
"start_time": null,
"master_title_ids": [3000001,3000002,3000003,3000004,3000005,3000006,3000007,3000008,3000009,3000010,3000011,3000012,3000013,3000014,3000015,3000016,3000017,3000018,3000019,3000020,3000021,3000022,3000023,3000024,3000025,3000026,3000027,3000028,3000029,3000030,3000031,3000032,3000033,3000034,3000035,3000036,3000037,3000038,3000039,3000040,3000041,3000042,3000043,3000044,3000045,3000046,3000047,3000048,3000049,3000050,3000051,3000052,3000053,3000054,3000055,3000056,3000057,3000058,3000059,3000060,3000061,3000062,3000063,3000064,3000065,3000066],
"master_title_ids": [],
"lottery_list": [],
"shop_list": [],
"function_lock_list": [],