diff --git a/src/router/home.rs b/src/router/home.rs index 0e0990d..a3a3f84 100644 --- a/src/router/home.rs +++ b/src/router/home.rs @@ -82,7 +82,10 @@ pub fn home(req: HttpRequest) -> HttpResponse { } let daily_missions = array![1224003, 1253003, 1273009, 1273010, 1273011, 1273012]; - let home_missions = array![]; + let mut home_missions = array![]; + for i in 1153001..=1153019 { + home_missions.push(i).unwrap(); + } let mut clear_ct = 0; let mut daily_ct = 0; diff --git a/src/router/items.rs b/src/router/items.rs index 66a71f6..658f12a 100644 --- a/src/router/items.rs +++ b/src/router/items.rs @@ -280,7 +280,7 @@ pub fn update_mission_status(master_mission_id: i64, expire: u64, completed: boo mission["expire_date_time"] = expire.into(); } - if mission["expire_date_time"].as_u64().unwrap() < global::timestamp() || expire != 0 { + 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 { @@ -308,37 +308,68 @@ pub fn update_mission_status_multi(master_mission_id: JsonValue, expire: u64, co rv } -pub fn completed_daily_mission(id: i64, missions: &mut JsonValue) -> JsonValue { - let all_daily_missions = array![1224003, 1253003, 1273009, 1273010, 1273011, 1273012]; +pub fn get_mission_status(id: i64, missions: &JsonValue) -> JsonValue { for (_i, mission) in missions.members().enumerate() { if mission["master_mission_id"].as_i64().unwrap() == id { - if mission["expire_date_time"].as_u64().unwrap() >= global::timestamp() && mission["status"].as_i32().unwrap() > 1 { - return array![]; - } + return mission.clone(); } } + JsonValue::Null +} + +pub fn change_mission_id(old: i64, new: i64, missions: &mut JsonValue) { + for (_i, mission) in missions.members_mut().enumerate() { + if mission["master_mission_id"].as_i64().unwrap() == old { + mission["master_mission_id"] = new.into(); + return; + } + } +} + +pub fn completed_daily_mission(id: i64, missions: &mut JsonValue) -> JsonValue { + let all_daily_missions = array![1224003, 1253003, 1273009, 1273010, 1273011, 1273012]; + + let mission = get_mission_status(id, missions); + if mission["expire_date_time"].as_u64().unwrap() >= global::timestamp() && mission["status"].as_i32().unwrap() > 1 { + return array![]; + } let mut rv = array![]; - for (_i, mission) in missions.clone().members().enumerate() { - if mission["master_mission_id"].as_i64().unwrap() == 1224003 { - 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); + if id == 1253003 { + for i in 1153001..=1153019 { + let mission_status = get_mission_status(i, missions); + if mission_status.is_empty() { + continue; } - - if mission["progress"].as_i32().unwrap() == 4 { - if !update_mission_status(1224003, 0, true, false, true, missions).is_none() { - rv.push(1224003).unwrap(); + let mission_info = crate::router::mission::MISSION_LIST[i as usize].clone(); + if mission_info["conditionNumber"].as_i64().unwrap() > mission_status["progress"].as_i64().unwrap() + 1 { + if !update_mission_status(i, 0, true, false, false, missions).is_none() { + rv.push(i).unwrap(); } } else { - if !update_mission_status(1224003, 0, false, false, true, missions).is_none() { - rv.push(1224003).unwrap(); + if !update_mission_status(i, 0, false, false, true, missions).is_none() { + rv.push(i).unwrap(); } } - if !update_mission_status(id, next_reset, true, false, true, missions).is_none() { - rv.push(id).unwrap(); - } - return rv; + break; } } + 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); + } + + if mission["progress"].as_i32().unwrap() == 4 { + if !update_mission_status(1224003, 0, true, false, true, missions).is_none() { + rv.push(1224003).unwrap(); + } + } else { + if !update_mission_status(1224003, 0, false, false, true, missions).is_none() { + rv.push(1224003).unwrap(); + } + } + if !update_mission_status(id, next_reset, true, false, true, missions).is_none() { + rv.push(id).unwrap(); + } rv } diff --git a/src/router/json/mission.json b/src/router/json/mission.json index e2828b2..94ca1d4 100644 --- a/src/router/json/mission.json +++ b/src/router/json/mission.json @@ -3,9 +3,9 @@ "id": 1153001, "title": "4日間ログインしよう", "detail": "4日間ログインしよう", - "type": 2, + "type": 1, "parentMasterMissionId": 0, - "conditionType": 2, + "conditionType": 1, "conditionValues": [], "conditionNumber": 4, "masterMissionRewardId": 131153001, diff --git a/src/router/json/mission_reward.json b/src/router/json/mission_reward.json index c3d9fdb..657e565 100644 --- a/src/router/json/mission_reward.json +++ b/src/router/json/mission_reward.json @@ -2,7 +2,7 @@ { "id": 131153001, "number": 1, - "type": 2, + "type": 1, "giveType": 2, "value": 1, "level": 0, diff --git a/src/router/mission.rs b/src/router/mission.rs index 84ec1db..3d28fee 100644 --- a/src/router/mission.rs +++ b/src/router/mission.rs @@ -48,7 +48,7 @@ pub fn clear(req: HttpRequest, body: String) -> HttpResponse { } lazy_static! { - static ref MISSION_LIST: JsonValue = { + pub static ref MISSION_LIST: JsonValue = { let mut info = object!{}; let items = json::parse(include_str!("json/mission.json")).unwrap(); for (_i, data) in items.members().enumerate() { @@ -75,13 +75,19 @@ pub fn receive(req: HttpRequest, body: String) -> HttpResponse { let mut rewards = array![]; for (_i, mission) in body["master_mission_ids"].members().enumerate() { - items::update_mission_status(mission.as_i64().unwrap(), 0, true, true, false, &mut missions); let mission_info = MISSION_LIST[mission.to_string()].clone(); let mut gift = MISSION_REWARD[mission_info["masterMissionRewardId"].to_string()].clone(); gift["reward_type"] = gift["type"].clone(); gift["amount"] = gift["amount"].as_i64().unwrap().into(); items::give_gift(&gift, &mut user); rewards.push(gift).unwrap(); + + if mission.as_i64().unwrap() >= 1153001 && mission.as_i64().unwrap() < 1153019 { + 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); + } else { + items::update_mission_status(mission.as_i64().unwrap(), 0, true, true, false, &mut missions); + } } userdata::save_acc(&key, user.clone());