From 6a49047e940fef6fd98d8219b073a01058a7ab07 Mon Sep 17 00:00:00 2001 From: Ethan O'Brien <77750390+ethanaobrien@users.noreply.github.com> Date: Tue, 7 May 2024 09:46:14 -0500 Subject: [PATCH] Add user rank mission --- src/router/home.rs | 3 +++ src/router/items.rs | 44 ++++++++++++++++++++++++++++++------------- src/router/live.rs | 12 ++++++------ src/router/mission.rs | 4 ++-- 4 files changed, 42 insertions(+), 21 deletions(-) diff --git a/src/router/home.rs b/src/router/home.rs index de69642..a629c87 100644 --- a/src/router/home.rs +++ b/src/router/home.rs @@ -78,6 +78,9 @@ lazy_static! { for i in 1105001..=1105017 { missions.push(i).unwrap(); } + for i in 1101001..=1101030 { + missions.push(i).unwrap(); + } missions }; } diff --git a/src/router/items.rs b/src/router/items.rs index d8e1548..96b7e44 100644 --- a/src/router/items.rs +++ b/src/router/items.rs @@ -262,17 +262,24 @@ pub fn get_user_rank_data(exp: i64) -> JsonValue { return ranks[ranks.len() - 1].clone(); } -pub fn give_exp(amount: i32, user: &mut JsonValue) { +pub fn give_exp(amount: i32, user: &mut JsonValue, mission: &mut JsonValue) { let current_rank = get_user_rank_data(user["user"]["exp"].as_i64().unwrap()); user["user"]["exp"] = (user["user"]["exp"].as_i32().unwrap() + amount).into(); let new_rank = get_user_rank_data(user["user"]["exp"].as_i64().unwrap()); if current_rank["rank"].to_string() != new_rank["rank"].to_string() { user["stamina"]["stamina"] = (user["stamina"]["stamina"].as_i64().unwrap() + new_rank["maxLp"].as_i64().unwrap()).into(); user["stamina"]["last_updated_time"] = global::timestamp().into(); + + let status = get_mission_status(get_variable_mission_num(1101001, 1101030, mission), mission); + if status.is_empty() { + return; + } + let to_advance = new_rank["rank"].as_i64().unwrap() - status["progress"].as_i64().unwrap(); + advance_variable_mission(1101001, 1101030, to_advance, mission); } } -pub fn update_mission_status(master_mission_id: i64, expire: u64, completed: bool, claimed: bool, advance: bool, missions: &mut JsonValue) -> Option { +pub fn update_mission_status(master_mission_id: i64, expire: u64, completed: bool, claimed: bool, advance: i64, missions: &mut JsonValue) -> Option { for (_i, mission) in missions.members_mut().enumerate() { if mission["master_mission_id"].as_i64().unwrap() == master_mission_id { mission["status"] = if claimed { 3 } else if completed { 2 } else { 1 }.into(); @@ -283,8 +290,8 @@ pub fn update_mission_status(master_mission_id: i64, expire: u64, completed: boo if (mission["expire_date_time"].as_u64().unwrap() < global::timestamp() || expire != 0) && (mission["expire_date_time"].as_u64().unwrap() != 0 || expire != 0) { mission["progress"] = 0.into(); } - if advance { - mission["progress"] = (mission["progress"].as_i32().unwrap() + 1).into(); + if advance > 0 { + mission["progress"] = (mission["progress"].as_i64().unwrap() + advance).into(); } if completed && !claimed { @@ -296,7 +303,7 @@ pub fn update_mission_status(master_mission_id: i64, expire: u64, completed: boo None } -pub fn update_mission_status_multi(master_mission_id: JsonValue, expire: u64, completed: bool, claimed: bool, advance: bool, missions: &mut JsonValue) -> JsonValue { +pub fn update_mission_status_multi(master_mission_id: JsonValue, expire: u64, completed: bool, claimed: bool, advance: i64, missions: &mut JsonValue) -> JsonValue { let mut rv = array![]; for (_i, mission) in master_mission_id.members().enumerate() { let val = update_mission_status(mission.as_i64().unwrap(), expire, completed, claimed, advance, missions); @@ -325,7 +332,18 @@ pub fn change_mission_id(old: i64, new: i64, missions: &mut JsonValue) { } } -pub fn advance_variable_mission(min: i64, max: i64, missions: &mut JsonValue) -> JsonValue { +pub fn get_variable_mission_num(min: i64, max: i64, missions: &JsonValue) -> i64 { + for i in min..=max { + let mission_status = get_mission_status(i, missions); + if mission_status.is_empty() { + continue; + } + return i; + } + 0 +} + +pub fn advance_variable_mission(min: i64, max: i64, count: i64, missions: &mut JsonValue) -> JsonValue { let mut rv = array![]; for i in min..=max { let mission_status = get_mission_status(i, missions); @@ -337,11 +355,11 @@ pub fn advance_variable_mission(min: i64, max: i64, missions: &mut JsonValue) -> break; } if mission_info["conditionNumber"].as_i64().unwrap() > mission_status["progress"].as_i64().unwrap() + 1 { - if !update_mission_status(i, 0, false, false, true, missions).is_none() { + if !update_mission_status(i, 0, false, false, count, missions).is_none() { rv.push(i).unwrap(); } } else { - if !update_mission_status(i, 0, true, false, true, missions).is_none() { + if !update_mission_status(i, 0, true, false, count, missions).is_none() { rv.push(i).unwrap(); } } @@ -359,24 +377,24 @@ pub fn completed_daily_mission(id: i64, missions: &mut JsonValue) -> JsonValue { } let mut rv = array![]; if id == 1253003 { - rv = advance_variable_mission(1153001, 1153019, missions); + rv = advance_variable_mission(1153001, 1153019, 1, missions); } let mission = get_mission_status(1224003, missions); let next_reset = global::timestamp_since_midnight() + (24 * 60 * 60); if mission["expire_date_time"].as_u64().unwrap() < global::timestamp() { - update_mission_status_multi(all_daily_missions, next_reset, false, false, false, missions); + update_mission_status_multi(all_daily_missions, next_reset, false, false, 0, missions); } if mission["progress"].as_i32().unwrap() == 4 { - if !update_mission_status(1224003, 0, true, false, true, missions).is_none() { + if !update_mission_status(1224003, 0, true, false, 1, missions).is_none() { rv.push(1224003).unwrap(); } } else { - if !update_mission_status(1224003, 0, false, false, true, missions).is_none() { + if !update_mission_status(1224003, 0, false, false, 1, missions).is_none() { rv.push(1224003).unwrap(); } } - if !update_mission_status(id, next_reset, true, false, true, missions).is_none() { + if !update_mission_status(id, next_reset, true, false, 1, missions).is_none() { rv.push(id).unwrap(); } rv diff --git a/src/router/live.rs b/src/router/live.rs index 847cacf..ee000ab 100644 --- a/src/router/live.rs +++ b/src/router/live.rs @@ -400,7 +400,7 @@ fn live_end(req: &HttpRequest, body: &String) -> JsonValue { let live = update_live_data(&mut user, &body, true); //1273009, 1273010, 1273011, 1273012 - let mut cleared_missions = items::advance_variable_mission(1105001, 1105017, &mut user_missions); + let mut cleared_missions = items::advance_variable_mission(1105001, 1105017, 1, &mut user_missions); if body["master_live_id"].to_string().len() > 1 { let id = body["master_live_id"].to_string().split("").collect::>()[2].parse::().unwrap_or(0); if id <= 4 && id >= 1 { @@ -425,10 +425,10 @@ fn live_end(req: &HttpRequest, body: &String) -> JsonValue { items::lp_modification(&mut user, body["use_lp"].as_u64().unwrap(), true); - items::give_exp(body["use_lp"].as_i32().unwrap(), &mut user); + items::give_exp(body["use_lp"].as_i32().unwrap(), &mut user, &mut user_missions); userdata::save_acc(&key, user.clone()); - userdata::save_acc_missions(&key, user_missions.clone()); + userdata::save_acc_missions(&key, user_missions); object!{ "code": 0, @@ -513,7 +513,7 @@ pub fn skip(req: HttpRequest, body: String) -> HttpResponse { 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 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, @@ -534,12 +534,12 @@ pub fn skip(req: HttpRequest, body: String) -> HttpResponse { items::lp_modification(&mut user, 10 * body["live_boost"].as_u64().unwrap(), true); - items::give_exp(10 * body["live_boost"].as_i32().unwrap(), &mut user); + items::give_exp(10 * body["live_boost"].as_i32().unwrap(), &mut user, &mut user_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.clone()); + userdata::save_acc_missions(&key, user_missions); let resp = object!{ "code": 0, diff --git a/src/router/mission.rs b/src/router/mission.rs index e7c9de2..cb12121 100644 --- a/src/router/mission.rs +++ b/src/router/mission.rs @@ -85,9 +85,9 @@ pub fn receive(req: HttpRequest, body: String) -> HttpResponse { if mission.as_i64().unwrap() >= 1153001 && mission.as_i64().unwrap() < 1153019 || mission.as_i64().unwrap() >= 1105001 && mission.as_i64().unwrap() < 1105017 { items::change_mission_id(mission.as_i64().unwrap(), mission.as_i64().unwrap() + 1, &mut missions); - items::update_mission_status(mission.as_i64().unwrap() + 1, 0, false, false, false, &mut missions); + items::update_mission_status(mission.as_i64().unwrap() + 1, 0, false, false, 0, &mut missions); } else { - items::update_mission_status(mission.as_i64().unwrap(), 0, true, true, false, &mut missions); + items::update_mission_status(mission.as_i64().unwrap(), 0, true, true, 0, &mut missions); } }