diff --git a/src/router/chat.rs b/src/router/chat.rs index c10e638..416546d 100644 --- a/src/router/chat.rs +++ b/src/router/chat.rs @@ -1,8 +1,7 @@ use json::object; use actix_web::{HttpResponse, HttpRequest}; -use crate::router::userdata; -use crate::router::global; +use crate::router::{global, items, userdata}; pub fn home(req: HttpRequest, body: String) -> HttpResponse { let key = global::get_login(req.headers(), &body); @@ -44,7 +43,12 @@ pub fn start(req: HttpRequest, _body: String) -> HttpResponse { global::send(resp, req) } -pub fn end(req: HttpRequest, _body: String) -> HttpResponse { +pub fn end(req: HttpRequest, body: String) -> HttpResponse { + let key = global::get_login(req.headers(), &body); + let mut missions = userdata::get_acc_missions(&key); + items::advance_mission(1169001, 1, 50, &mut missions); + + userdata::save_acc_missions(&key, missions); let resp = object!{ "code": 0, diff --git a/src/router/home.rs b/src/router/home.rs index 7b22823..045e8bf 100644 --- a/src/router/home.rs +++ b/src/router/home.rs @@ -71,7 +71,7 @@ pub fn preset_get(req: HttpRequest) -> HttpResponse { lazy_static! { pub static ref HOME_MISSIONS: JsonValue = { - let mut missions = array![]; + let mut missions = array![1176001, 1177001, 1177002, 1176002, 1176003, 1176004, 1176005, 1176006, 1169001]; for i in 1153001..=1153019 { missions.push(i).unwrap(); } @@ -87,6 +87,9 @@ lazy_static! { for i in 1121001..=1121019 { missions.push(i).unwrap(); } + for i in 1112001..=1112033 { + missions.push(i).unwrap(); + } missions }; } diff --git a/src/router/items.rs b/src/router/items.rs index b233949..a07ee16 100644 --- a/src/router/items.rs +++ b/src/router/items.rs @@ -102,7 +102,7 @@ pub fn give_gift(data: &JsonValue, user: &mut JsonValue, missions: &mut JsonValu return !give_primogems(data["amount"].as_i64().unwrap(), user); } else if data["reward_type"].to_string() == "2" { //character - give_character(data["value"].to_string(), user); + give_character(data["value"].to_string(), user, missions, clear_missions); return true; } else if data["reward_type"].to_string() == "3" { return !give_item(data["value"].as_i64().unwrap(), data["amount"].as_i64().unwrap(), user); @@ -131,7 +131,9 @@ pub fn give_points(master_item_id: i64, amount: i64, user: &mut JsonValue, missi if master_item_id == 1 { let cleared = advance_variable_mission(1121001, 1121019, amount, missions); for (_i, data) in cleared.members().enumerate() { - clear_missions.push(data.clone()).unwrap(); + if !clear_missions.contains(data.as_i64().unwrap()) { + clear_missions.push(data.clone()).unwrap(); + } } } let mut has = false; @@ -246,13 +248,19 @@ pub fn lp_modification(user: &mut JsonValue, change_amount: u64, remove: bool) { // true - added // false - already has -pub fn give_character(id: String, user: &mut JsonValue) -> bool { +pub fn give_character(id: String, user: &mut JsonValue, missions: &mut JsonValue, clear_missions: &mut JsonValue) -> bool { for (_i, data) in user["card_list"].members().enumerate() { if data["master_card_id"].to_string() == id || data["id"].to_string() == id { give_item(19100001, 50, user); return false; } } + let cleared = advance_variable_mission(1112001, 1112033, 1, missions); + for (_i, data) in cleared.members().enumerate() { + if !clear_missions.contains(data.as_i64().unwrap()) { + clear_missions.push(data.clone()).unwrap(); + } + } let to_push = object!{ "id": id.parse::().unwrap(), @@ -386,6 +394,24 @@ pub fn advance_variable_mission(min: i64, max: i64, count: i64, missions: &mut J rv } +pub fn advance_mission(id: i64, count: i64, max: i64, missions: &mut JsonValue) -> Option { + let mission = get_mission_status(id, missions); + + if mission["status"].as_i32().unwrap() > 1 { + return None; + } + let mut new = mission["progress"].as_i64().unwrap() + count; + if new > max { + new = max; + } + let completed = new == max; + let advanced = new - mission["progress"].as_i64().unwrap(); + if !update_mission_status(id, 0, completed, false, advanced, missions).is_none() { + return Some(id); + } + None +} + pub fn completed_daily_mission(id: i64, missions: &mut JsonValue) -> JsonValue { let all_daily_missions = array![1224003, 1253003, 1273009, 1273010, 1273011, 1273012]; diff --git a/src/router/live.rs b/src/router/live.rs index 931f99a..9fdd9de 100644 --- a/src/router/live.rs +++ b/src/router/live.rs @@ -485,7 +485,10 @@ fn live_end(req: &HttpRequest, body: &String, skipped: bool) -> JsonValue { 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 { - cleared_missions = items::completed_daily_mission(1273009 + id - 1, &mut user_missions); + let to_push = items::completed_daily_mission(1273009 + id - 1, &mut user_missions); + for (_i, data) in to_push.members().enumerate() { + cleared_missions.push(data.as_i32().unwrap()).unwrap(); + } } } @@ -500,6 +503,37 @@ fn live_end(req: &HttpRequest, body: &String, skipped: bool) -> JsonValue { 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![]); + + if is_full_combo { + if !items::advance_mission(1176001, 1, 1, &mut user_missions).is_none() { + cleared_missions.push(1176001).unwrap(); + } + if !items::advance_mission(1176002, 1, 100, &mut user_missions).is_none() { + cleared_missions.push(1176002).unwrap(); + } + if !items::advance_mission(1176003, 1, 200, &mut user_missions).is_none() { + cleared_missions.push(1176003).unwrap(); + } + if !items::advance_mission(1176004, 1, 300, &mut user_missions).is_none() { + cleared_missions.push(1176004).unwrap(); + } + if !items::advance_mission(1176005, 1, 400, &mut user_missions).is_none() { + cleared_missions.push(1176005).unwrap(); + } + if !items::advance_mission(1176006, 1, 500, &mut user_missions).is_none() { + cleared_missions.push(1176006).unwrap(); + } + } + if is_perfect { + if !items::advance_mission(1177001, 1, 1, &mut user_missions).is_none() { + cleared_missions.push(1177001).unwrap(); + } + } + if is_perfect && body["level"].as_i32().unwrap() == 4 { + if !items::advance_mission(1177002, 1, 1, &mut user_missions).is_none() { + cleared_missions.push(1177002).unwrap(); + } + } } update_live_mission_data(&mut user, &object!{ diff --git a/src/router/lottery/mod.rs b/src/router/lottery/mod.rs index 8b4a50d..d98256f 100644 --- a/src/router/lottery/mod.rs +++ b/src/router/lottery/mod.rs @@ -189,7 +189,7 @@ pub fn lottery_post(req: HttpRequest, body: String) -> HttpResponse { if lottery_type == 1 { for (_i, data) in cardstogive.members().enumerate() { let mut is_new = true; - if !items::give_character(data["master_card_id"].to_string(), &mut user) { + if !items::give_character(data["master_card_id"].to_string(), &mut user, &mut missions, &mut cleared_missions) { is_new = false; } if is_new { diff --git a/src/router/mission.rs b/src/router/mission.rs index 9266fcc..b64a003 100644 --- a/src/router/mission.rs +++ b/src/router/mission.rs @@ -82,7 +82,7 @@ pub fn receive(req: HttpRequest, body: String) -> HttpResponse { items::give_gift(&gift, &mut user, &mut missions, &mut array![]); rewards.push(gift).unwrap(); - let variable_missions = array![[1153001, 1153019], [1105001, 1105017], [1101001, 1101030], [1121001, 1121019]]; + let variable_missions = array![[1153001, 1153019], [1105001, 1105017], [1101001, 1101030], [1121001, 1121019], [1112001, 1112033]]; let mut variable = false; for (_i, id) in variable_missions.members().enumerate() { if mission.as_i64().unwrap() >= id[0].as_i64().unwrap() && mission.as_i64().unwrap() < id[1].as_i64().unwrap() { diff --git a/src/router/user.rs b/src/router/user.rs index 12cb812..d2c6eaf 100644 --- a/src/router/user.rs +++ b/src/router/user.rs @@ -415,6 +415,7 @@ pub fn initialize(req: HttpRequest, body: String) -> HttpResponse { let mut user = userdata::get_acc(&key); let mut user2 = userdata::get_acc_home(&key); + let mut missions = userdata::get_acc_missions(&key); let ur = user["card_list"][user["card_list"].len() - 1]["master_card_id"].clone(); let id = ur.as_i32().unwrap(); //todo @@ -452,7 +453,7 @@ pub fn initialize(req: HttpRequest, body: String) -> HttpResponse { // User is rewarded with all base cards in the team they chose. This makes up their new deck_list for (i, data) in cardstoreward.members().enumerate() { - items::give_character(data.to_string(), &mut user); + items::give_character(data.to_string(), &mut user, &mut missions, &mut array![]); if i < 10 { user["deck_list"][0]["main_card_ids"][i] = data.clone(); } @@ -462,6 +463,7 @@ pub fn initialize(req: HttpRequest, body: String) -> HttpResponse { userdata::save_acc(&key, user.clone()); userdata::save_acc_home(&key, user2); + userdata::save_acc_missions(&key, missions); let resp = object!{ "code": 0,