diff --git a/src/router/global.rs b/src/router/global.rs index 6d0fb53..86126b8 100644 --- a/src/router/global.rs +++ b/src/router/global.rs @@ -224,11 +224,14 @@ pub fn give_points(master_item_id: i64, amount: i64, user: &mut JsonValue) -> bo } false } + pub fn use_item(master_item_id: i64, amount: i64, user: &mut JsonValue) { for (_j, dataa) in user["item_list"].members_mut().enumerate() { if dataa["master_item_id"].as_i64().unwrap() == master_item_id { if dataa["amount"].as_i64().unwrap() >= amount { dataa["amount"] = (dataa["amount"].as_i64().unwrap() - amount).into(); + } else { + dataa["amount"] = (0).into(); } break; } diff --git a/src/router/userdata/mod.rs b/src/router/userdata/mod.rs index 4179065..fb3bffa 100644 --- a/src/router/userdata/mod.rs +++ b/src/router/userdata/mod.rs @@ -205,8 +205,7 @@ fn get_data(auth_key: &str, row: &str) -> JsonValue { json::parse(&result.unwrap()).unwrap() } -pub fn get_acc(auth_key: &str) -> JsonValue { - let mut user = get_data(auth_key, "userdata"); +fn cleanup_account(user: &mut JsonValue) { user["gem"]["total"] = (user["gem"]["charge"].as_i64().unwrap() + user["gem"]["free"].as_i64().unwrap()).into(); if user["master_music_ids"].len() != NEW_USER["master_music_ids"].len() { user["master_music_ids"] = NEW_USER["master_music_ids"].clone(); @@ -215,6 +214,34 @@ pub fn get_acc(auth_key: &str) -> JsonValue { user["master_title_ids"] = NEW_USER["master_title_ids"].clone(); } + let mut to_remove = array![]; + let items = user["item_list"].clone(); + for (i, data) in user["item_list"].members_mut().enumerate() { + if to_remove.contains(i) { + continue; + } + if data["master_item_id"].as_i64().unwrap() != data["id"].as_i64().unwrap() { + data["id"] = data["master_item_id"].clone(); + } + for (j, data2) in items.members().enumerate() { + if i == j { + continue; + } + if data["master_item_id"].as_i64().unwrap() == data2["master_item_id"].as_i64().unwrap() { + to_remove.push(j).unwrap(); + data["amount"] = (data["amount"].as_i64().unwrap() + data2["amount"].as_i64().unwrap()).into(); + } + } + } + for (i, data) in to_remove.members().enumerate() { + user["item_list"].array_remove(data.as_usize().unwrap() - i); + } +} + +pub fn get_acc(auth_key: &str) -> JsonValue { + let mut user = get_data(auth_key, "userdata"); + cleanup_account(&mut user); + global::lp_modification(&mut user, 0, false); return user; }